Skip to content

Commit ecd6471

Browse files
committed
Merge branch 'dev-stable' of github.com:QuantumPackage/qp2 into dev-stable
2 parents 6fed07b + 53564e8 commit ecd6471

File tree

6 files changed

+115
-94
lines changed

6 files changed

+115
-94
lines changed

src/ao_basis/EZFIO.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ interface: ezfio, provider
8282
[ao_expo_pw]
8383
type: double precision
8484
doc: plane wave part for each primitive GTOs |AO|
85-
size: (3,ao_basis.ao_num,ao_basis.ao_prim_num_max)
85+
size: (4,ao_basis.ao_num,ao_basis.ao_prim_num_max)
8686
interface: ezfio, provider
8787

8888
[ao_expo_phase]
8989
type: double precision
9090
doc: phase shift for each primitive GTOs |AO|
91-
size: (3,ao_basis.ao_num,ao_basis.ao_prim_num_max)
91+
size: (4,ao_basis.ao_num,ao_basis.ao_prim_num_max)
9292
interface: ezfio, provider
9393

src/ao_one_e_ints/aos_cgtos.irp.f

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
ao_expo_pw_ord_transp(m,i,j) = ao_expo_pw_ord(m,j,i)
3131
ao_expo_phase_ord_transp(m,i,j) = ao_expo_phase_ord(m,j,i)
3232
enddo
33-
ao_expo_pw_ord_transp(4,i,j) = ao_expo_pw_ord_transp(1,i,j) &
34-
+ ao_expo_pw_ord_transp(2,i,j) &
35-
+ ao_expo_pw_ord_transp(3,i,j)
33+
ao_expo_pw_ord_transp(4,i,j) = ao_expo_pw_ord_transp(1,i,j) * ao_expo_pw_ord_transp(1,i,j) &
34+
+ ao_expo_pw_ord_transp(2,i,j) * ao_expo_pw_ord_transp(2,i,j) &
35+
+ ao_expo_pw_ord_transp(3,i,j) * ao_expo_pw_ord_transp(3,i,j)
3636
ao_expo_phase_ord_transp(4,i,j) = ao_expo_phase_ord_transp(1,j,i) &
3737
+ ao_expo_phase_ord_transp(2,j,i) &
3838
+ ao_expo_phase_ord_transp(3,j,i)
@@ -47,10 +47,12 @@
4747

4848
implicit none
4949

50-
integer :: i, j, powA(3), nz
50+
integer :: i, j, ii, m, powA(3), nz
5151
double precision :: norm
52-
complex*16 :: overlap_x, overlap_y, overlap_z, C_A(3)
53-
complex*16 :: integ1, integ2, expo
52+
double precision :: kA2, phiA
53+
complex*16 :: expo, expo_inv, C_A(3)
54+
complex*16 :: overlap_x, overlap_y, overlap_z
55+
complex*16 :: integ1, integ2, C1, C2
5456

5557
nz = 100
5658

@@ -62,22 +64,31 @@
6264

6365
do i = 1, ao_num
6466

67+
ii = ao_nucl(i)
6568
powA(1) = ao_power(i,1)
6669
powA(2) = ao_power(i,2)
6770
powA(3) = ao_power(i,3)
6871

69-
! TODO
7072
! Normalization of the primitives
7173
if(primitives_normalized) then
7274

7375
do j = 1, ao_prim_num(i)
7476

7577
expo = ao_expo(i,j) + (0.d0, 1.d0) * ao_expo_im_cgtos(i,j)
78+
expo_inv = (1.d0, 0.d0) / expo
79+
do m = 1, 3
80+
C_A(m) = nucl_coord(ii,m) - (0.d0, 0.5d0) * expo_inv * ao_expo_pw(m,i,j)
81+
enddo
82+
phiA = ao_expo_phase(4,i,j)
83+
KA2 = ao_expo_pw(4,i,j)
84+
85+
C1 = zexp(-(0.d0, 2.d0) * phiA - 0.5d0 * expo_inv * KA2)
86+
C2 = zexp(-(0.5d0, 0.d0) * real(expo_inv) * KA2)
7687

77-
call overlap_cgaussian_xyz(C_A, C_A, expo, expo, powA, powA, overlap_x, overlap_y, overlap_z, integ1, nz)
78-
call overlap_cgaussian_xyz(C_A, C_A, conjg(expo), expo, powA, powA, overlap_x, overlap_y, overlap_z, integ2, nz)
88+
call overlap_cgaussian_xyz(C_A, C_A, expo, expo, powA, powA, overlap_x, overlap_y, overlap_z, integ1, nz)
89+
call overlap_cgaussian_xyz(conjg(C_A), C_A, conjg(expo), expo, powA, powA, overlap_x, overlap_y, overlap_z, integ2, nz)
7990

80-
norm = 2.d0 * real(integ1 + integ2)
91+
norm = 2.d0 * real(C1 * integ1 + C2 * integ2)
8192

8293
ao_coef_norm_cgtos(i,j) = ao_coef(i,j) / dsqrt(norm)
8394
enddo
@@ -98,14 +109,14 @@
98109

99110
BEGIN_PROVIDER [double precision, ao_coef_norm_cgtos_ord, (ao_num, ao_prim_num_max)]
100111
&BEGIN_PROVIDER [complex*16 , ao_expo_cgtos_ord, (ao_num, ao_prim_num_max)]
101-
&BEGIN_PROVIDER [double precision, ao_expo_pw_ord, (3, ao_num, ao_prim_num_max)]
102-
&BEGIN_PROVIDER [double precision, ao_expo_phase_ord, (3, ao_num, ao_prim_num_max)]
112+
&BEGIN_PROVIDER [double precision, ao_expo_pw_ord, (4, ao_num, ao_prim_num_max)]
113+
&BEGIN_PROVIDER [double precision, ao_expo_phase_ord, (4, ao_num, ao_prim_num_max)]
103114

104115
implicit none
105116

106-
integer :: i, j
117+
integer :: i, j, m
107118
integer :: iorder(ao_prim_num_max)
108-
double precision :: d(ao_prim_num_max,9)
119+
double precision :: d(ao_prim_num_max,11)
109120

110121
d = 0.d0
111122

@@ -116,28 +127,26 @@
116127
d(j,1) = ao_expo(i,j)
117128
d(j,2) = ao_coef_norm_cgtos(i,j)
118129
d(j,3) = ao_expo_im_cgtos(i,j)
119-
d(j,4) = ao_expo_pw(1,i,j)
120-
d(j,5) = ao_expo_pw(2,i,j)
121-
d(j,6) = ao_expo_pw(3,i,j)
122-
d(j,7) = ao_expo_phase(1,i,j)
123-
d(j,8) = ao_expo_phase(2,i,j)
124-
d(j,9) = ao_expo_phase(3,i,j)
130+
131+
do m = 1, 4
132+
d(j,3+m) = ao_expo_pw(m,i,j)
133+
d(j,7+m) = ao_expo_phase(m,i,j)
134+
enddo
125135
enddo
126136

127137
call dsort(d(1,1), iorder, ao_prim_num(i))
128-
do j = 2, 9
138+
do j = 2, 11
129139
call dset_order(d(1,j), iorder, ao_prim_num(i))
130140
enddo
131141

132142
do j = 1, ao_prim_num(i)
133143
ao_expo_cgtos_ord (i,j) = d(j,1) + (0.d0, 1.d0) * d(j,3)
134144
ao_coef_norm_cgtos_ord(i,j) = d(j,2)
135-
ao_expo_pw_ord(i,j,1) = d(j,4)
136-
ao_expo_pw_ord(i,j,2) = d(j,5)
137-
ao_expo_pw_ord(i,j,3) = d(j,6)
138-
ao_expo_phase_ord(i,j,1) = d(j,7)
139-
ao_expo_phase_ord(i,j,2) = d(j,8)
140-
ao_expo_phase_ord(i,j,3) = d(j,9)
145+
146+
do m = 1, 4
147+
ao_expo_pw_ord(m,i,j) = d(j,3+m)
148+
ao_expo_phase_ord(m,i,j) = d(j,7+m)
149+
enddo
141150
enddo
142151
enddo
143152

@@ -154,8 +163,10 @@
154163

155164
integer :: i, j, m, n, l, ii, jj, dim1, power_A(3), power_B(3)
156165
double precision :: c, overlap, overlap_x, overlap_y, overlap_z
157-
complex*16 :: alpha, alpha_inv, A_center(3), KA2(3), phiA(3)
158-
complex*16 :: beta, beta_inv, B_center(3), KB2(3), phiB(3)
166+
double precision :: KA2(3), phiA(3)
167+
double precision :: KB2(3), phiB(3)
168+
complex*16 :: alpha, alpha_inv, A_center(3)
169+
complex*16 :: beta, beta_inv, B_center(3)
159170
complex*16 :: C1(1:4), C2(1:4)
160171
complex*16 :: overlap1, overlap_x1, overlap_y1, overlap_z1
161172
complex*16 :: overlap2, overlap_x2, overlap_y2, overlap_z2
@@ -199,7 +210,6 @@
199210

200211
alpha = ao_expo_cgtos_ord_transp(n,j)
201212
alpha_inv = (1.d0, 0.d0) / alpha
202-
203213
do m = 1, 3
204214
phiA(m) = ao_expo_phase_ord_transp(m,n,j)
205215
A_center(m) = nucl_coord(jj,m) - (0.d0, 0.5d0) * alpha_inv * ao_expo_pw_ord_transp(m,n,j)
@@ -210,7 +220,6 @@
210220

211221
beta = ao_expo_cgtos_ord_transp(l,i)
212222
beta_inv = (1.d0, 0.d0) / beta
213-
214223
do m = 1, 3
215224
phiB(m) = ao_expo_phase_ord_transp(m,l,i)
216225
B_center(m) = nucl_coord(ii,m) - (0.d0, 0.5d0) * beta_inv * ao_expo_pw_ord_transp(m,l,i)
@@ -232,7 +241,7 @@
232241
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
233242
overlap_x1, overlap_y1, overlap_z1, overlap1, dim1)
234243

235-
call overlap_cgaussian_xyz(A_center, B_center, conjg(alpha), beta, power_A, power_B, &
244+
call overlap_cgaussian_xyz(conjg(A_center), B_center, conjg(alpha), beta, power_A, power_B, &
236245
overlap_x2, overlap_y2, overlap_z2, overlap2, dim1)
237246

238247
overlap_x = 2.d0 * real(C1(1) * overlap_x1 + C2(1) * overlap_x2)

src/ao_one_e_ints/one_e_coul_integrals_cgtos.irp.f

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
integer :: power_A(3), power_B(3)
1616
integer :: i, j, k, l, m, n, ii, jj
1717
double precision :: c, Z, C_center(3)
18-
complex*16 :: alpha, alpha_inv, A_center(3), phiA, KA2
19-
complex*16 :: beta, beta_inv, B_center(3), phiB, KB2
18+
double precision :: phiA, KA2
19+
double precision :: phiB, KB2
20+
complex*16 :: alpha, alpha_inv, A_center(3)
21+
complex*16 :: beta, beta_inv, B_center(3)
2022
complex*16 :: C1, C2, I1, I2
2123

2224
complex*16 :: NAI_pol_mult_cgtos
@@ -54,7 +56,7 @@
5456
A_center(m) = nucl_coord(jj,m) - (0.d0, 0.5d0) * alpha_inv * ao_expo_pw_ord_transp(m,n,j)
5557
enddo
5658
phiA = ao_expo_phase_ord_transp(4,n,j)
57-
KA2 = ao_expo_pw_ord_transp(4,n,j) * ao_expo_pw_ord_transp(4,n,j)
59+
KA2 = ao_expo_pw_ord_transp(4,n,j)
5860

5961
do l = 1, ao_prim_num(i)
6062

@@ -65,7 +67,7 @@
6567
B_center(m) = nucl_coord(ii,m) - (0.d0, 0.5d0) * beta_inv * ao_expo_pw_ord_transp(m,l,i)
6668
enddo
6769
phiB = ao_expo_phase_ord_transp(4,l,i)
68-
KB2 = ao_expo_pw_ord_transp(4,l,i) * ao_expo_pw_ord_transp(4,l,i)
70+
KB2 = ao_expo_pw_ord_transp(4,l,i)
6971

7072
C1 = zexp((0.d0, 1.d0) * (-phiA - phiB) - 0.25d0 * (alpha_inv * KA2 + beta_inv * KB2))
7173
C2 = zexp((0.d0, 1.d0) * ( phiA - phiB) - 0.25d0 * (conjg(alpha_inv) * KA2 + beta_inv * KB2))
@@ -79,7 +81,7 @@
7981

8082
I1 = NAI_pol_mult_cgtos(A_center, B_center, power_A, power_B, alpha, beta, C_center, n_pt_max_integrals)
8183

82-
I2 = NAI_pol_mult_cgtos(A_center, B_center, power_A, power_B, conjg(alpha), beta, C_center, n_pt_max_integrals)
84+
I2 = NAI_pol_mult_cgtos(conjg(A_center), B_center, power_A, power_B, conjg(alpha), beta, C_center, n_pt_max_integrals)
8385

8486
c = c - Z * 2.d0 * real(C1 * I1 + C2 * I2)
8587
enddo

src/ao_one_e_ints/one_e_kin_integrals_cgtos.irp.f

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
implicit none
99
integer :: i, j, m, n, l, ii, jj, dim1, power_A(3), power_B(3)
1010
double precision :: c, deriv_tmp
11-
complex*16 :: alpha, alpha_inv, A_center(3), KA2, phiA, C1
12-
complex*16 :: beta, beta_inv, B_center(3), KB2, phiB, C2
11+
double precision :: KA2, phiA
12+
double precision :: KB2, phiB
13+
complex*16 :: alpha, alpha_inv, A_center(3), C1
14+
complex*16 :: beta, beta_inv, B_center(3), C2
1315
complex*16 :: overlap_x, overlap_y, overlap_z, overlap
1416
complex*16 :: overlap_x0_1, overlap_y0_1, overlap_z0_1
1517
complex*16 :: overlap_x0_2, overlap_y0_2, overlap_z0_2
@@ -70,33 +72,31 @@
7072

7173
alpha = ao_expo_cgtos_ord_transp(n,j)
7274
alpha_inv = (1.d0, 0.d0) / alpha
73-
7475
do m = 1, 3
7576
A_center(m) = nucl_coord(jj,m) - (0.d0, 0.5d0) * alpha_inv * ao_expo_pw_ord_transp(m,n,j)
7677
enddo
7778
phiA = ao_expo_phase_ord_transp(4,n,j)
78-
KA2 = ao_expo_pw_ord_transp(4,n,j) * ao_expo_pw_ord_transp(4,n,j)
79+
KA2 = ao_expo_pw_ord_transp(4,n,j)
7980

8081
do l = 1, ao_prim_num(i)
8182

8283
beta = ao_expo_cgtos_ord_transp(l,i)
8384
beta_inv = (1.d0, 0.d0) / beta
84-
8585
do m = 1, 3
8686
B_center(m) = nucl_coord(ii,m) - (0.d0, 0.5d0) * beta_inv * ao_expo_pw_ord_transp(m,l,i)
8787
enddo
8888
phiB = ao_expo_phase_ord_transp(4,l,i)
89-
KB2 = ao_expo_pw_ord_transp(4,l,i) * ao_expo_pw_ord_transp(4,l,i)
89+
KB2 = ao_expo_pw_ord_transp(4,l,i)
9090

9191
c = ao_coef_cgtos_norm_ord_transp(n,j) * ao_coef_cgtos_norm_ord_transp(l,i)
9292

93-
C1 = zexp((0.d0, 1.d0) * (-phiA - phiB) - 0.25d0 * (alpha_inv * KA2 + beta_inv * KB2))
94-
C2 = zexp((0.d0, 1.d0) * ( phiA - phiB) - 0.25d0 * (conjg(alpha_inv) * KA2 + beta_inv * KB2))
93+
C1 = zexp((0.d0, 1.d0) * (-phiA - phiB) - 0.25d0 * (alpha_inv * KA2 + beta_inv * KB2))
94+
C2 = zexp((0.d0, 1.d0) * (-phiA + phiB) - 0.25d0 * (alpha_inv * KA2 + conjg(beta_inv) * KB2))
9595

9696
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
9797
overlap_x0_1, overlap_y0_1, overlap_z0_1, overlap, dim1)
9898

99-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
99+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
100100
overlap_x0_2, overlap_y0_2, overlap_z0_2, overlap, dim1)
101101

102102
! ---
@@ -106,7 +106,7 @@
106106
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
107107
overlap_m2_1, overlap_y, overlap_z, overlap, dim1)
108108

109-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
109+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
110110
overlap_m2_2, overlap_y, overlap_z, overlap, dim1)
111111
else
112112
overlap_m2_1 = (0.d0, 0.d0)
@@ -117,7 +117,7 @@
117117
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
118118
overlap_p2_1, overlap_y, overlap_z, overlap, dim1)
119119

120-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
120+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
121121
overlap_p2_2, overlap_y, overlap_z, overlap, dim1)
122122

123123
power_A(1) = power_A(1) - 2
@@ -141,7 +141,7 @@
141141
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
142142
overlap_x, overlap_m2_1, overlap_y, overlap, dim1)
143143

144-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
144+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
145145
overlap_x, overlap_m2_2, overlap_y, overlap, dim1)
146146
else
147147
overlap_m2_1 = (0.d0, 0.d0)
@@ -152,7 +152,7 @@
152152
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
153153
overlap_x, overlap_p2_1, overlap_y, overlap, dim1)
154154

155-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
155+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
156156
overlap_x, overlap_p2_2, overlap_y, overlap, dim1)
157157

158158
power_A(2) = power_A(2) - 2
@@ -176,7 +176,7 @@
176176
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
177177
overlap_x, overlap_y, overlap_m2_1, overlap, dim1)
178178

179-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
179+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
180180
overlap_x, overlap_y, overlap_m2_2, overlap, dim1)
181181
else
182182
overlap_m2_1 = (0.d0, 0.d0)
@@ -187,7 +187,7 @@
187187
call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
188188
overlap_x, overlap_y, overlap_p2_1, overlap, dim1)
189189

190-
call overlap_cgaussian_xyz(A_center, B_center, alpha, conjg(beta), power_A, power_B, &
190+
call overlap_cgaussian_xyz(A_center, conjg(B_center), alpha, conjg(beta), power_A, power_B, &
191191
overlap_x, overlap_y, overlap_p2_2, overlap, dim1)
192192

193193
power_A(3) = power_A(3) - 2
@@ -227,20 +227,22 @@
227227
END_DOC
228228

229229
implicit none
230+
230231
integer :: i, j
231232

232-
!$OMP PARALLEL DO DEFAULT(NONE) &
233-
!$OMP PRIVATE(i, j) &
234-
!$OMP SHARED(ao_num, ao_kinetic_integrals_cgtos, ao_deriv2_cgtos_x, ao_deriv2_cgtos_y, ao_deriv2_cgtos_z)
233+
!$OMP PARALLEL DO DEFAULT(NONE) &
234+
!$OMP PRIVATE(i, j) &
235+
!$OMP SHARED(ao_num, ao_kinetic_integrals_cgtos, ao_deriv2_cgtos_x, ao_deriv2_cgtos_y, ao_deriv2_cgtos_z)
235236
do j = 1, ao_num
236237
do i = 1, ao_num
237238
ao_kinetic_integrals_cgtos(i,j) = -0.5d0 * (ao_deriv2_cgtos_x(i,j) + &
238239
ao_deriv2_cgtos_y(i,j) + &
239240
ao_deriv2_cgtos_z(i,j))
240241
enddo
241242
enddo
242-
!$OMP END PARALLEL DO
243+
!$OMP END PARALLEL DO
243244

244245
END_PROVIDER
245246

246247
! ---
248+

0 commit comments

Comments
 (0)