![]() |
(git:b77b4be)
|
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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. | |
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: | |
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. | |
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. | |
pure elemental subroutine, public | get_l (lco, l, lx, ly, lz) |
... | |
Ewald sums to represent integrals in direct and reciprocal lattice.
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.
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.
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.
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.
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.
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.
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.
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.
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.
S_G | ... |
R | ... |
alpha | ... |
inv_lgth | ... |
G_c | ... |
Definition at line 358 of file eri_mme_lattice_summation.F.
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.
S_G | ... |
l_max | ... |
R | ... |
alpha | ... |
h_inv | ... |
G_c | ... |
G_rad | ... |
vol | ... |
coulomb | ... |
Definition at line 413 of file eri_mme_lattice_summation.F.
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.
S_R | ... |
R | ... |
alpha | ... |
lgth | ... |
R_c | ... |
Definition at line 513 of file eri_mme_lattice_summation.F.
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.
S_R | ... |
l_max | ... |
R | ... |
alpha | ... |
hmat | ... |
h_inv | ... |
R_c | ... |
R_rad | ... |
Definition at line 569 of file eri_mme_lattice_summation.F.
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.
S_G | ... |
alpha | ... |
inv_lgth | ... |
G_min | ... |
G_c | ... |
delta_l | ... |
prefactor | ... |
Definition at line 655 of file eri_mme_lattice_summation.F.
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:
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.
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.
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.
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.
s_rad | sphere radius |
s_to_e | sphere to ellipsoid trafo |
Definition at line 121049 of file eri_mme_lattice_summation.F.
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 | ||
) |
...
lco | ... |
l | ... |
lx | ... |
ly | ... |
lz | ... |
Definition at line 121092 of file eri_mme_lattice_summation.F.