|
30 | 30 | ao_expo_pw_ord_transp(m,i,j) = ao_expo_pw_ord(m,j,i)
|
31 | 31 | ao_expo_phase_ord_transp(m,i,j) = ao_expo_phase_ord(m,j,i)
|
32 | 32 | 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) |
36 | 36 | ao_expo_phase_ord_transp(4,i,j) = ao_expo_phase_ord_transp(1,j,i) &
|
37 | 37 | + ao_expo_phase_ord_transp(2,j,i) &
|
38 | 38 | + ao_expo_phase_ord_transp(3,j,i)
|
|
47 | 47 |
|
48 | 48 | implicit none
|
49 | 49 |
|
50 |
| - integer :: i, j, powA(3), nz |
| 50 | + integer :: i, j, ii, m, powA(3), nz |
51 | 51 | 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 |
54 | 56 |
|
55 | 57 | nz = 100
|
56 | 58 |
|
|
62 | 64 |
|
63 | 65 | do i = 1, ao_num
|
64 | 66 |
|
| 67 | + ii = ao_nucl(i) |
65 | 68 | powA(1) = ao_power(i,1)
|
66 | 69 | powA(2) = ao_power(i,2)
|
67 | 70 | powA(3) = ao_power(i,3)
|
68 | 71 |
|
69 |
| - ! TODO |
70 | 72 | ! Normalization of the primitives
|
71 | 73 | if(primitives_normalized) then
|
72 | 74 |
|
73 | 75 | do j = 1, ao_prim_num(i)
|
74 | 76 |
|
75 | 77 | 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) |
76 | 87 |
|
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) |
79 | 90 |
|
80 |
| - norm = 2.d0 * real(integ1 + integ2) |
| 91 | + norm = 2.d0 * real(C1 * integ1 + C2 * integ2) |
81 | 92 |
|
82 | 93 | ao_coef_norm_cgtos(i,j) = ao_coef(i,j) / dsqrt(norm)
|
83 | 94 | enddo
|
|
98 | 109 |
|
99 | 110 | BEGIN_PROVIDER [double precision, ao_coef_norm_cgtos_ord, (ao_num, ao_prim_num_max)]
|
100 | 111 | &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)] |
103 | 114 |
|
104 | 115 | implicit none
|
105 | 116 |
|
106 |
| - integer :: i, j |
| 117 | + integer :: i, j, m |
107 | 118 | integer :: iorder(ao_prim_num_max)
|
108 |
| - double precision :: d(ao_prim_num_max,9) |
| 119 | + double precision :: d(ao_prim_num_max,11) |
109 | 120 |
|
110 | 121 | d = 0.d0
|
111 | 122 |
|
|
116 | 127 | d(j,1) = ao_expo(i,j)
|
117 | 128 | d(j,2) = ao_coef_norm_cgtos(i,j)
|
118 | 129 | 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 |
125 | 135 | enddo
|
126 | 136 |
|
127 | 137 | call dsort(d(1,1), iorder, ao_prim_num(i))
|
128 |
| - do j = 2, 9 |
| 138 | + do j = 2, 11 |
129 | 139 | call dset_order(d(1,j), iorder, ao_prim_num(i))
|
130 | 140 | enddo
|
131 | 141 |
|
132 | 142 | do j = 1, ao_prim_num(i)
|
133 | 143 | ao_expo_cgtos_ord (i,j) = d(j,1) + (0.d0, 1.d0) * d(j,3)
|
134 | 144 | 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 |
141 | 150 | enddo
|
142 | 151 | enddo
|
143 | 152 |
|
|
154 | 163 |
|
155 | 164 | integer :: i, j, m, n, l, ii, jj, dim1, power_A(3), power_B(3)
|
156 | 165 | 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) |
159 | 170 | complex*16 :: C1(1:4), C2(1:4)
|
160 | 171 | complex*16 :: overlap1, overlap_x1, overlap_y1, overlap_z1
|
161 | 172 | complex*16 :: overlap2, overlap_x2, overlap_y2, overlap_z2
|
|
199 | 210 |
|
200 | 211 | alpha = ao_expo_cgtos_ord_transp(n,j)
|
201 | 212 | alpha_inv = (1.d0, 0.d0) / alpha
|
202 |
| - |
203 | 213 | do m = 1, 3
|
204 | 214 | phiA(m) = ao_expo_phase_ord_transp(m,n,j)
|
205 | 215 | A_center(m) = nucl_coord(jj,m) - (0.d0, 0.5d0) * alpha_inv * ao_expo_pw_ord_transp(m,n,j)
|
|
210 | 220 |
|
211 | 221 | beta = ao_expo_cgtos_ord_transp(l,i)
|
212 | 222 | beta_inv = (1.d0, 0.d0) / beta
|
213 |
| - |
214 | 223 | do m = 1, 3
|
215 | 224 | phiB(m) = ao_expo_phase_ord_transp(m,l,i)
|
216 | 225 | B_center(m) = nucl_coord(ii,m) - (0.d0, 0.5d0) * beta_inv * ao_expo_pw_ord_transp(m,l,i)
|
|
232 | 241 | call overlap_cgaussian_xyz(A_center, B_center, alpha, beta, power_A, power_B, &
|
233 | 242 | overlap_x1, overlap_y1, overlap_z1, overlap1, dim1)
|
234 | 243 |
|
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, & |
236 | 245 | overlap_x2, overlap_y2, overlap_z2, overlap2, dim1)
|
237 | 246 |
|
238 | 247 | overlap_x = 2.d0 * real(C1(1) * overlap_x1 + C2(1) * overlap_x2)
|
|
0 commit comments