(git:3add494)
eri_mme_lattice_summation Module Reference

Ewald sums to represent integrals in direct and reciprocal lattice. More...

Functions/Subroutines

subroutine, public eri_mme_2c_get_rads (la_max, lb_max, zeta, zetb, a_mm, G_min, R_min, sum_precision, G_rad, R_rad)
 Get summation radii for 2c integrals. More...
 
subroutine, public eri_mme_3c_get_rads (la_max, lb_max, lc_max, zeta, zetb, zetc, a_mm, G_min, R_min, sum_precision, G_rads_1, R_rads_2, R_rads_3)
 Get summation radii for 3c integrals. More...
 
subroutine, public eri_mme_2c_get_bounds (hmat, h_inv, vol, is_ortho, G_min, R_min, la_max, lb_max, zeta, zetb, a_mm, sum_precision, n_sum_1d, n_sum_3d, G_bounds, G_rad, R_bounds, R_rad)
 Get summation bounds for 2c integrals. More...
 
subroutine, public eri_mme_3c_get_bounds (hmat, h_inv, vol, is_ortho, G_min, R_min, la_max, lb_max, lc_max, zeta, zetb, zetc, a_mm, sum_precision, n_sum_1d, n_sum_3d, G_bounds_1, G_rads_1, R_bounds_2, R_rads_2, R_bounds_3, R_rads_3)
 Get summation bounds for 3c integrals. More...
 
pure subroutine, public pgf_sum_2c_gspace_1d (S_G, R, alpha, inv_lgth, G_c)
 Compute Ewald-like sum for 2-center ERIs in G space in 1 dimension S_G(l, alpha) = (-i)^l*inv_lgth*sum_G( C(l, alpha, G) exp(iGR) ), with C(l, alpha, r) = r^l exp(-alpha*r^2), dG = inv_lgth*twopi and G = -G_bound*dG, (-G_bound + 1)*dG, ..., G_bound*dG for all l < = l_max. More...
 
pure subroutine, public pgf_sum_2c_gspace_3d (S_G, l_max, R, alpha, h_inv, G_c, G_rad, vol, potential, pot_par)
 As pgf_sum_2c_gspace_1d but 3d sum required for non-orthorhombic cells. More...
 
pure subroutine, public pgf_sum_2c_rspace_1d (S_R, R, alpha, lgth, R_c)
 Compute Ewald-like sum for 2-center ERIs in R space in 1 dimension S_R(l, alpha) = SQRT(alpha/pi) sum_R'( H(l, alpha, R-R') ), with H(l, alpha, R) = (-d/dR)^l exp(-alpha*R^2), dR = lgth and R' = -R_min*dR, (-R_min + 1)*dR, ..., R_max*dR, for all l < = l_max. More...
 
pure subroutine, public pgf_sum_2c_rspace_3d (S_R, l_max, R, alpha, hmat, h_inv, R_c, R_rad)
 As pgf_sum_2c_rspace_1d but 3d sum required for non-orthorhombic cells. More...
 
pure subroutine, public pgf_sum_2c_gspace_1d_deltal (S_G, alpha, inv_lgth, G_min, G_c, delta_l, prefactor)
 Compute 1d sum S_G(l, alpha) = inv_lgth*sum_G( C(l, alpha, delta_l, G) ) with C(l, alpha, delta_l, G) = prefactor*|G|^(l-delta_l) exp(-alpha*G^2) if G not equal 0 C(l = 0, alpha, delta_l, 0) = 1, C(l>0, alpha, delta_l, 0) = 0 dG = inv_lgth*twopi and G = -G_bound*dG, (-G_bound + 1)*dG, ..., G_bound*dG for all l < = l_max. More...
 
subroutine, public pgf_sum_3c_1d (S_G, RA, RB, RC, zeta, zetb, zetc, a_mm, lgth, R_bounds_3)
 Compute Ewald-like sum for 3-center integrals in 1 dimension S_G(l, m, n, alpha, beta, gamma) = i^(l+m+n)*(-1)^(l+m)*inv_lgth^2* sum_G sum_G'( exp(i G R1) C(l,alpha,G) C(m,beta,G'-G) C(n,gamma,G') exp(i G' R2) ) for all l < = l_max, m <= m_max, n <= n_max. a_mm is the minimax exponent. alpha = 1/(4 zeta), beta = 1/(4 zetb), gamma = 1/(4 zetc) + a_mm R1 = RB-RA; R2 = RC-RB Note on method / order arguments: Three equivalent methods (Poisson summation) to compute this sum over Cartesian Gaussians C or Hermite Gaussians H and reciprocal lattice vectors G or direct lattice vectors R: More...
 
subroutine, public pgf_sum_3c_3d (S_G, la_max, lb_max, lc_max, RA, RB, RC, zeta, zetb, zetc, a_mm, hmat, h_inv, vol, G_bounds_1, R_bounds_2, R_bounds_3, G_rads_1, R_rads_2, R_rads_3, method, method_out, order)
 As pgf_sum_3c_1d but 3d sum required for non-orthorhombic cells. More...
 
pure real(kind=dp) function, dimension(3), public ellipsoid_bounds (s_rad, s_to_e)
 Compute bounding box for ellipsoid. This is needed in order to find summation bounds for sphere for sums over non-orthogonal lattice vectors. More...
 
pure elemental subroutine, public get_l (lco, l, lx, ly, lz)
 ... More...
 

Detailed Description

Ewald sums to represent integrals in direct and reciprocal lattice.

History
2015 09 created
Author
Patrick Seewald

Function/Subroutine Documentation

◆ eri_mme_2c_get_rads()

subroutine, public eri_mme_lattice_summation::eri_mme_2c_get_rads ( integer, intent(in)  la_max,
integer, intent(in)  lb_max,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), intent(in)  G_min,
real(kind=dp), intent(in)  R_min,
real(kind=dp), intent(in)  sum_precision,
real(kind=dp), intent(out), optional  G_rad,
real(kind=dp), intent(out), optional  R_rad 
)

Get summation radii for 2c integrals.

Parameters
la_max...
lb_max...
zeta...
zetb...
a_mm...
G_min...
R_min...
sum_precision...
G_rad...
R_rad...

Definition at line 72 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eri_mme_3c_get_rads()

subroutine, public eri_mme_lattice_summation::eri_mme_3c_get_rads ( integer, intent(in)  la_max,
integer, intent(in)  lb_max,
integer, intent(in)  lc_max,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  zetc,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), intent(in), optional  G_min,
real(kind=dp), intent(in), optional  R_min,
real(kind=dp), intent(in)  sum_precision,
real(kind=dp), dimension(3), intent(out), optional  G_rads_1,
real(kind=dp), dimension(3), intent(out), optional  R_rads_2,
real(kind=dp), dimension(2), intent(out), optional  R_rads_3 
)

Get summation radii for 3c integrals.

Parameters
la_max...
lb_max...
lc_max...
zeta...
zetb...
zetc...
a_mm...
G_min...
R_min...
sum_precision...
G_rads_1...
R_rads_2...
R_rads_3...

Definition at line 109 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eri_mme_2c_get_bounds()

subroutine, public eri_mme_lattice_summation::eri_mme_2c_get_bounds ( real(kind=dp), dimension(3, 3), intent(in)  hmat,
real(kind=dp), dimension(3, 3), intent(in)  h_inv,
real(kind=dp), intent(in)  vol,
logical, intent(in)  is_ortho,
real(kind=dp), intent(in)  G_min,
real(kind=dp), intent(in)  R_min,
integer, intent(in)  la_max,
integer, intent(in)  lb_max,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), intent(in)  sum_precision,
integer(kind=int_8), dimension(2, 3), intent(out)  n_sum_1d,
integer(kind=int_8), dimension(2), intent(out)  n_sum_3d,
real(kind=dp), dimension(3), intent(out)  G_bounds,
real(kind=dp), intent(out)  G_rad,
real(kind=dp), dimension(3), intent(out)  R_bounds,
real(kind=dp), intent(out)  R_rad 
)

Get summation bounds for 2c integrals.

Parameters
hmat...
h_inv...
vol...
is_ortho...
G_min...
R_min...
la_max...
lb_max...
zeta...
zetb...
a_mm...
sum_precision...
n_sum_1d...
n_sum_3d...
G_bounds...
G_rad...
R_bounds...
R_rad...

Definition at line 174 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ eri_mme_3c_get_bounds()

subroutine, public eri_mme_lattice_summation::eri_mme_3c_get_bounds ( real(kind=dp), dimension(3, 3), intent(in)  hmat,
real(kind=dp), dimension(3, 3), intent(in)  h_inv,
real(kind=dp), intent(in)  vol,
logical, intent(in)  is_ortho,
real(kind=dp), intent(in)  G_min,
real(kind=dp), intent(in)  R_min,
integer, intent(in)  la_max,
integer, intent(in)  lb_max,
integer, intent(in)  lc_max,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  zetc,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), intent(in)  sum_precision,
integer(kind=int_8), dimension(3, 3), intent(out)  n_sum_1d,
integer(kind=int_8), dimension(3), intent(out)  n_sum_3d,
real(kind=dp), dimension(3, 3)  G_bounds_1,
real(kind=dp), dimension(3), intent(out)  G_rads_1,
real(kind=dp), dimension(3, 3)  R_bounds_2,
real(kind=dp), dimension(3), intent(out)  R_rads_2,
real(kind=dp), dimension(2, 3)  R_bounds_3,
real(kind=dp), dimension(2), intent(out)  R_rads_3 
)

Get summation bounds for 3c integrals.

Parameters
hmat...
h_inv...
vol...
is_ortho...
G_min...
R_min...
la_max...
lb_max...
lc_max...
zeta...
zetb...
zetc...
a_mm...
sum_precision...
n_sum_1d...
n_sum_3d...
G_bounds_1...
G_rads_1...
R_bounds_2...
R_rads_2...
R_bounds_3...
R_rads_3...

Definition at line 241 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgf_sum_2c_gspace_1d()

pure subroutine, public eri_mme_lattice_summation::pgf_sum_2c_gspace_1d ( real(kind=dp), dimension(0:), intent(out)  S_G,
real(kind=dp), intent(in)  R,
real(kind=dp), intent(in)  alpha,
real(kind=dp), intent(in)  inv_lgth,
real(kind=dp), intent(in)  G_c 
)

Compute Ewald-like sum for 2-center ERIs in G space in 1 dimension S_G(l, alpha) = (-i)^l*inv_lgth*sum_G( C(l, alpha, G) exp(iGR) ), with C(l, alpha, r) = r^l exp(-alpha*r^2), dG = inv_lgth*twopi and G = -G_bound*dG, (-G_bound + 1)*dG, ..., G_bound*dG for all l < = l_max.

Parameters
S_G...
R...
alpha...
inv_lgth...
G_c...
Note
S_G is real.

Definition at line 358 of file eri_mme_lattice_summation.F.

Here is the caller graph for this function:

◆ pgf_sum_2c_gspace_3d()

pure subroutine, public eri_mme_lattice_summation::pgf_sum_2c_gspace_3d ( real(kind=dp), dimension(:), intent(out)  S_G,
integer, intent(in)  l_max,
real(kind=dp), dimension(3), intent(in)  R,
real(kind=dp), intent(in)  alpha,
real(kind=dp), dimension(3, 3), intent(in)  h_inv,
real(kind=dp), dimension(3), intent(in)  G_c,
real(kind=dp), intent(in)  G_rad,
real(kind=dp), intent(in)  vol,
integer, intent(in), optional  potential,
real(kind=dp), intent(in), optional  pot_par 
)

As pgf_sum_2c_gspace_1d but 3d sum required for non-orthorhombic cells.

Parameters
S_G...
l_max...
R...
alpha...
h_inv...
G_c...
G_rad...
vol...
coulomb...
Note
MMME Method is not very efficient for non-orthorhombic cells

Definition at line 413 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgf_sum_2c_rspace_1d()

pure subroutine, public eri_mme_lattice_summation::pgf_sum_2c_rspace_1d ( real(kind=dp), dimension(0:), intent(out)  S_R,
real(kind=dp), intent(in)  R,
real(kind=dp), intent(in)  alpha,
real(kind=dp), intent(in)  lgth,
real(kind=dp), intent(in)  R_c 
)

Compute Ewald-like sum for 2-center ERIs in R space in 1 dimension S_R(l, alpha) = SQRT(alpha/pi) sum_R'( H(l, alpha, R-R') ), with H(l, alpha, R) = (-d/dR)^l exp(-alpha*R^2), dR = lgth and R' = -R_min*dR, (-R_min + 1)*dR, ..., R_max*dR, for all l < = l_max.

Parameters
S_R...
R...
alpha...
lgth...
R_c...
Note
result is equivalent to pgf_sum_2c_gspace_1d with S_R(l, alpha) = S_G(l, 1/(4*alpha))

Definition at line 513 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgf_sum_2c_rspace_3d()

pure subroutine, public eri_mme_lattice_summation::pgf_sum_2c_rspace_3d ( real(kind=dp), dimension(:), intent(out)  S_R,
integer, intent(in)  l_max,
real(kind=dp), dimension(3), intent(in)  R,
real(kind=dp), intent(in)  alpha,
real(kind=dp), dimension(3, 3), intent(in)  hmat,
real(kind=dp), dimension(3, 3), intent(in)  h_inv,
real(kind=dp), dimension(3), intent(in)  R_c,
real(kind=dp), intent(in)  R_rad 
)

As pgf_sum_2c_rspace_1d but 3d sum required for non-orthorhombic cells.

Parameters
S_R...
l_max...
R...
alpha...
hmat...
h_inv...
R_c...
R_rad...
Note
MMME Method is not very efficient for non-orthorhombic cells

Definition at line 569 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pgf_sum_2c_gspace_1d_deltal()

pure subroutine, public eri_mme_lattice_summation::pgf_sum_2c_gspace_1d_deltal ( real(kind=dp), dimension(0:), intent(out)  S_G,
real(kind=dp), intent(in)  alpha,
real(kind=dp), intent(in)  inv_lgth,
integer, intent(in)  G_min,
integer, intent(in)  G_c,
real(kind=dp), intent(in)  delta_l,
real(kind=dp), intent(in)  prefactor 
)

Compute 1d sum S_G(l, alpha) = inv_lgth*sum_G( C(l, alpha, delta_l, G) ) with C(l, alpha, delta_l, G) = prefactor*|G|^(l-delta_l) exp(-alpha*G^2) if G not equal 0 C(l = 0, alpha, delta_l, 0) = 1, C(l>0, alpha, delta_l, 0) = 0 dG = inv_lgth*twopi and G = -G_bound*dG, (-G_bound + 1)*dG, ..., G_bound*dG for all l < = l_max.

Parameters
S_G...
alpha...
inv_lgth...
G_min...
G_c...
delta_l...
prefactor...
Note
needed for cutoff error estimate

Definition at line 655 of file eri_mme_lattice_summation.F.

Here is the caller graph for this function:

◆ pgf_sum_3c_1d()

subroutine, public eri_mme_lattice_summation::pgf_sum_3c_1d ( real(kind=dp), dimension(0:, 0:, 0:), intent(out)  S_G,
real(kind=dp), intent(in)  RA,
real(kind=dp), intent(in)  RB,
real(kind=dp), intent(in)  RC,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  zetc,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), intent(in)  lgth,
real(kind=dp), dimension(2), intent(in)  R_bounds_3 
)

Compute Ewald-like sum for 3-center integrals in 1 dimension S_G(l, m, n, alpha, beta, gamma) = i^(l+m+n)*(-1)^(l+m)*inv_lgth^2* sum_G sum_G'( exp(i G R1) C(l,alpha,G) C(m,beta,G'-G) C(n,gamma,G') exp(i G' R2) ) for all l < = l_max, m <= m_max, n <= n_max. a_mm is the minimax exponent. alpha = 1/(4 zeta), beta = 1/(4 zetb), gamma = 1/(4 zetc) + a_mm R1 = RB-RA; R2 = RC-RB Note on method / order arguments: Three equivalent methods (Poisson summation) to compute this sum over Cartesian Gaussians C or Hermite Gaussians H and reciprocal lattice vectors G or direct lattice vectors R:

  • method 1: sum_G sum_G' C(G) C(G,G') C(G')
  • method 2: sum_G sum_R C(G) C(R)
  • method 3: sum_R sum_R' H(R, R') The order parameter selects the Gaussian functions over which the sum is performed method 1: order = 1, 2, 3 method 2: order = 1, 2, 3 method 3: order = 1 If method and order are not present, the method / order that converges fastest is automatically chosen.
    Parameters
    S_G...
    RA...
    RB...
    RC...
    zeta...
    zetb...
    zetc...
    a_mm...
    lgth...
    G_bounds_1...
    R_bounds_2...
    R_bounds_3...
    method...
    method_out...
    order...

Definition at line 735 of file eri_mme_lattice_summation.F.

Here is the caller graph for this function:

◆ pgf_sum_3c_3d()

subroutine, public eri_mme_lattice_summation::pgf_sum_3c_3d ( real(kind=dp), dimension(:, :, :), intent(out)  S_G,
integer, intent(in)  la_max,
integer, intent(in)  lb_max,
integer, intent(in)  lc_max,
real(kind=dp), dimension(3), intent(in)  RA,
real(kind=dp), dimension(3), intent(in)  RB,
real(kind=dp), dimension(3), intent(in)  RC,
real(kind=dp), intent(in)  zeta,
real(kind=dp), intent(in)  zetb,
real(kind=dp), intent(in)  zetc,
real(kind=dp), intent(in)  a_mm,
real(kind=dp), dimension(3, 3), intent(in)  hmat,
real(kind=dp), dimension(3, 3), intent(in)  h_inv,
real(kind=dp), intent(in)  vol,
real(kind=dp), dimension(3, 3), intent(in)  G_bounds_1,
real(kind=dp), dimension(3, 3), intent(in)  R_bounds_2,
real(kind=dp), dimension(2, 3), intent(in)  R_bounds_3,
real(kind=dp), dimension(3), intent(in)  G_rads_1,
real(kind=dp), dimension(3), intent(in)  R_rads_2,
real(kind=dp), dimension(2), intent(in)  R_rads_3,
integer, intent(in)  method,
integer, intent(out), optional  method_out,
integer, intent(in), optional  order 
)

As pgf_sum_3c_1d but 3d sum required for non-orthorhombic cells.

Parameters
S_G...
la_max...
lb_max...
lc_max...
RA...
RB...
RC...
zeta...
zetb...
zetc...
a_mm...
hmat...
h_inv...
vol...
G_bounds_1...
R_bounds_2...
R_bounds_3...
G_rads_1...
R_rads_2...
R_rads_3...
method...
method_out...
order...

Definition at line 120267 of file eri_mme_lattice_summation.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ellipsoid_bounds()

pure real(kind=dp) function, dimension(3), public eri_mme_lattice_summation::ellipsoid_bounds ( real(kind=dp), intent(in)  s_rad,
real(kind=dp), dimension(3, 3), intent(in)  s_to_e 
)

Compute bounding box for ellipsoid. This is needed in order to find summation bounds for sphere for sums over non-orthogonal lattice vectors.

Parameters
s_radsphere radius
s_to_esphere to ellipsoid trafo
Returns
...

Definition at line 121049 of file eri_mme_lattice_summation.F.

Here is the caller graph for this function:

◆ get_l()

pure elemental subroutine, public eri_mme_lattice_summation::get_l ( integer, intent(in)  lco,
integer, intent(out)  l,
integer, intent(out), optional  lx,
integer, intent(out), optional  ly,
integer, intent(out), optional  lz 
)

...

Parameters
lco...
l...
lx...
ly...
lz...

Definition at line 121092 of file eri_mme_lattice_summation.F.

Here is the caller graph for this function: