40 #include "../base/base_uses.f90"
43 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_operator_ra2m'
73 lb_max, lb_min, npgfb, zetb, &
74 m, rab, sab, dsab, calculate_forces)
75 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
76 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta
77 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
78 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb
79 INTEGER,
INTENT(IN) :: m
80 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
81 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: sab
82 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: dsab
83 LOGICAL,
INTENT(IN) :: calculate_forces
85 CHARACTER(len=*),
PARAMETER :: routinen =
'operator_ra2m'
87 INTEGER :: ax, ay, az, bx, by, bz, coa, cob, &
88 handle, i, ia, ib, ipgf, j, jpgf, k, &
89 la, lb, ldrr, lma, lmb, ma, mb, na, &
91 REAL(kind=
dp) :: a, b, dumx, dumy, dumz, f0, prefac, &
93 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: rr
94 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp
96 CALL timeset(routinen, handle)
99 IF (calculate_forces) dsab = 0.0_dp
103 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
109 IF (calculate_forces) lma = lma + 1
110 ldrr = max(lma, lmb) + 1
113 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3))
120 cpassert((
SIZE(sab, 1) >= na*npgfa))
121 cpassert((
SIZE(sab, 2) >= nb*npgfb))
138 f0 = (
pi/zet)**(1.5_dp)*exp(-xhi*rab2)
141 CALL os_rr_ovlp(rap, lma, rbp, lmb, zet, ldrr, rr)
143 DO lb = lb_min, lb_max
147 cob =
coset(bx, by, bz) - ofb
149 DO la = la_min, la_max
153 coa =
coset(ax, ay, az) - ofa
158 IF (i + j + k /= m) cycle
160 sab(ia, ib) = sab(ia, ib) + prefac*f0 &
161 *rr(ax + 2*i, bx, 1)*rr(ay + 2*j, by, 2)*rr(az + 2*k, bz, 3)
162 IF (calculate_forces)
THEN
165 dumx = 2.0_dp*a*rr(ax + 2*i + 1, bx, 1)
166 IF (ax + 2*i > 0) dumx = dumx - real(ax + 2*i,
dp)*rr(ax + 2*i - 1, bx, 1)
167 dsab(ia, ib, 1) = dsab(ia, ib, 1) + prefac*f0*dumx*rr(ay + 2*j, by, 2)*rr(az + 2*k, bz, 3)
169 dumy = 2.0_dp*a*rr(ay + 2*j + 1, by, 2)
170 IF (ay + 2*j > 0) dumy = dumy - real(ay + 2*j,
dp)*rr(ay + 2*j - 1, by, 2)
171 dsab(ia, ib, 2) = dsab(ia, ib, 2) + prefac*f0*rr(ax + 2*i, bx, 1)*dumy*rr(az + 2*k, bz, 3)
173 dumz = 2.0_dp*a*rr(az + 2*k + 1, bz, 3)
174 IF (az + 2*k > 0) dumz = dumz - real(az + 2*k,
dp)*rr(az + 2*k - 1, bz, 3)
175 dsab(ia, ib, 3) = dsab(ia, ib, 3) + prefac*f0*rr(ax + 2*i, bx, 1)*rr(ay + 2*j, by, 2)*dumz
195 CALL timestop(handle)
Calculation of integrals over Cartesian Gaussian-type functions for [a|(r-Ra)^(2m)|b] Ra is the posit...
subroutine, public operator_ra2m(la_max, la_min, npgfa, zeta, lb_max, lb_min, npgfb, zetb, m, rab, sab, dsab, calculate_forces)
Calculation of the primitive two-center [a|(r-Ra)^(2m)|b] integrals over Cartesian Gaussian-type func...
subroutine, public os_rr_ovlp(rap, la_max, rbp, lb_max, zet, ldrr, rr)
Calculation of the basic Obara-Saika recurrence relation.
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), dimension(0:maxfac), parameter, public fac
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset