24#include "./base/base_uses.f90"
39 SUBROUTINE compute_coulomb_fundamentals(F, m_max, T)
40 INTEGER,
INTENT(IN) :: m_max
41 REAL(dp),
INTENT(OUT) :: F(m_max + 1)
42 REAL(dp),
INTENT(IN) :: T
44 CALL fgamma(m_max, t, f)
45 END SUBROUTINE compute_coulomb_fundamentals
55 SUBROUTINE compute_long_range_fundamentals(F, m_max, rho, T, omega)
56 INTEGER,
INTENT(IN) :: m_max
57 REAL(dp),
INTENT(OUT) :: F(m_max + 1)
58 REAL(dp),
INTENT(IN) :: rho, T, omega
61 REAL(dp) :: omega2, omega_corr2, scaled_T, weight
64 omega_corr2 = omega2/(omega2 + rho)
65 scaled_t = t*omega_corr2
66 CALL fgamma(m_max, scaled_t, f)
67 weight = sqrt(omega_corr2)
70 weight = weight*omega_corr2
72 END SUBROUTINE compute_long_range_fundamentals
83 SUBROUTINE compute_short_range_fundamentals(F, m_max, rho, T, omega, work)
84 INTEGER,
INTENT(IN) :: m_max
85 REAL(dp),
INTENT(OUT) :: F(m_max + 1)
86 REAL(dp),
INTENT(IN) :: rho, T, omega
87 REAL(dp),
INTENT(INOUT) :: work(m_max + 1)
89 CALL compute_coulomb_fundamentals(f, m_max, t)
90 CALL compute_long_range_fundamentals(work, m_max, rho, t, omega)
92 END SUBROUTINE compute_short_range_fundamentals
103 SUBROUTINE compute_truncated_fundamentals(F, m_max, rho, T, cutoff_radius)
104 INTEGER,
INTENT(IN) :: m_max
105 REAL(dp),
INTENT(OUT) :: F(m_max + 1)
106 REAL(dp),
INTENT(IN) :: rho, T, cutoff_radius
111 r = cutoff_radius*sqrt(rho)
112 CALL t_c_g0_n(f, use_gamma, r, t, m_max)
113 IF (use_gamma)
CALL compute_coulomb_fundamentals(f, m_max, t)
114 END SUBROUTINE compute_truncated_fundamentals
124 SUBROUTINE compute_gaussian_fundamentals(F, m_max, rho, T, alpha)
125 INTEGER,
INTENT(IN) :: m_max
126 REAL(dp),
INTENT(OUT) :: F(m_max + 1)
127 REAL(dp),
INTENT(IN) :: rho, T, alpha
130 REAL(dp) :: scaled_T, weight
132 scaled_t = -alpha*t/(rho + alpha)
135 f(m) = exp(scaled_t)*weight
136 weight = weight*alpha/(rho + alpha)
138 END SUBROUTINE compute_gaussian_fundamentals
158 omega, cutoff_radius, scale_coulomb, scale_longrange, scale_gaussian)
159 REAL(
dp),
INTENT(OUT) :: normalization
160 INTEGER,
INTENT(IN) :: m_max
161 REAL(
dp),
INTENT(OUT) :: f(m_max + 1)
162 INTEGER,
INTENT(IN) :: potential_type
163 REAL(
dp),
INTENT(IN) :: rho, t
164 REAL(
dp),
INTENT(INOUT) :: work(m_max + 1)
165 REAL(
dp),
INTENT(IN) :: omega, cutoff_radius, scale_coulomb, &
166 scale_longrange, scale_gaussian
168 REAL(
dp) :: gaussian_normalization, r
170 normalization = 2.0_dp*
pi/rho
171 SELECT CASE (potential_type)
173 CALL compute_coulomb_fundamentals(f, m_max, t)
175 CALL compute_truncated_fundamentals(f, m_max, rho, t, cutoff_radius)
177 r = cutoff_radius*sqrt(rho)
181 CALL compute_short_range_fundamentals(f, m_max, rho, t, omega, work)
183 CALL compute_long_range_fundamentals(f, m_max, rho, t, omega)
185 CALL compute_gaussian_fundamentals(f, m_max, rho, t, omega**2)
186 normalization = (
pi/(rho + omega**2))**1.5_dp
188 CALL compute_coulomb_fundamentals(f, m_max, t)
189 CALL compute_long_range_fundamentals(work, m_max, rho, t, omega)
190 f = f*scale_coulomb + work*scale_longrange
192 CALL compute_truncated_fundamentals(f, m_max, rho, t, cutoff_radius)
193 CALL compute_coulomb_fundamentals(work, m_max, t)
194 f = f*(scale_coulomb + scale_longrange) - work*scale_longrange
195 CALL compute_long_range_fundamentals(work, m_max, rho, t, omega)
196 f = f + work*scale_longrange
198 CALL compute_long_range_fundamentals(f, m_max, rho, t, omega)
199 CALL compute_gaussian_fundamentals(work, m_max, rho, t, omega**2)
200 gaussian_normalization = (
pi/(rho + omega**2))**1.5_dp
201 f = work*gaussian_normalization*scale_gaussian + f*normalization*scale_longrange
202 normalization = 1.0_dp
204 cpabort(
"Unsupported operator for radial r12 fundamentals")
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
subroutine, public fgamma_0(nmax, t, f)
Calculation of the incomplete Gamma function F(t) for multicenter integrals over Gaussian functions....
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Radial fundamentals for Gaussian two-electron integrals. Entry m+1 stores order m....
subroutine, public compute_r12_fundamentals(f, normalization, m_max, potential_type, rho, t, work, omega, cutoff_radius, scale_coulomb, scale_longrange, scale_gaussian)
Compose radial kernels before applying their common normalization.
This module computes the basic integrals for the truncated coulomb operator.
subroutine, public t_c_g0_n(res, use_gamma, r, t, nderiv)
...
subroutine, public trunc_cs_poly_n20(res, r, t, nderiv)
...