Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 5f357ee

Browse files
committed
Working on Slater dressing
1 parent ddcc1a5 commit 5f357ee

8 files changed

Lines changed: 86 additions & 68 deletions

File tree

plugins/Hartree_Fock_SlaterDressed/EZFIO.cfg

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ interface: ezfio, provider
1414
type: double precision
1515
doc: Orthogonal AO basis
1616
size: (ao_basis.ao_num,ao_basis.ao_num)
17-
interface: ezfio, provider
17+
interface: ezfio
18+
19+
[ao_orthoSlaOverlap]
20+
type: double precision
21+
doc: Orthogonal AO basis
22+
size: (ao_basis.ao_num,nuclei.nucl_num)
23+
interface: ezfio
1824

1925

2026

plugins/Hartree_Fock_SlaterDressed/LinearSystem.irp.f

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
! Projector
1515
do mu=1,mo_tot_num
1616
cusp_A(A,B) += AO_orthoSlaOverlap_matrix(mu,B) * ao_ortho_value_at_nucl(mu,A)
17-
! cusp_A(A,B) += MOSlaOverlap_matrix(mu,B) * mo_value_at_nucl(mu,A)
1817
enddo
1918
enddo
2019
enddo
@@ -60,6 +59,5 @@
6059
stop 'dgetrs failed'
6160
endif
6261

63-
6462
END_PROVIDER
6563

plugins/Hartree_Fock_SlaterDressed/SCF_dressed.irp.f

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,10 @@ subroutine run
8686
enddo
8787
mo_coef(1:ao_num,1:mo_tot_num) = cusp_corrected_mos(1:ao_num,1:mo_tot_num)
8888
SOFT_TOUCH mo_coef slater_coef
89-
! call ezfio_set_Hartree_Fock_SlaterDressed_slater_coef_ezfio(slater_coef)
90-
! call save_mos
89+
call ezfio_set_Hartree_Fock_SlaterDressed_slater_coef_ezfio(slater_coef)
90+
call ezfio_set_Hartree_Fock_SlaterDressed_projector(ao_ortho_canonical_coef(1:ao_num,1:ao_num))
91+
call ezfio_set_Hartree_Fock_SlaterDressed_ao_orthoSlaOverlap(AO_orthoSlaOverlap_matrix)
92+
call save_mos
9193
print *, 'ci'
9294
print *, mo_coef(1:ao_num,1)
9395
print *, 'cAi'

plugins/Hartree_Fock_SlaterDressed/dressing.irp.f

Lines changed: 59 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -91,73 +91,81 @@
9191
cusp_corrected_mos(1:ao_num,1:mo_tot_num) = mo_coef(1:ao_num,1:mo_tot_num)
9292
slater_coef(1:nucl_num,1:mo_tot_num) = cusp_C(1:nucl_num,1:mo_tot_num)
9393
return
94-
endif
9594

96-
do idx_dressing=1,mo_tot_num
95+
else
9796

98-
if (idx_dressing>1) then
99-
TOUCH idx_dressing
100-
endif
10197

102-
do j=1,mo_tot_num
103-
do i=1,mo_tot_num
104-
F(i,j) = Fock_matrix_mo(i,j)
105-
enddo
106-
enddo
98+
do idx_dressing=1,mo_tot_num
10799

108-
do j=1,mo_tot_num
109-
do i=1,ao_num
110-
M(i,j) = mo_coef(i,j)
111-
enddo
112-
enddo
100+
if (idx_dressing>1) then
101+
TOUCH idx_dressing
102+
endif
113103

114-
integer :: it
115-
do it=1,128
116-
117-
! print *, 'C', mo_coef(1:ao_num,1:mo_tot_num)
118-
! print *, 'Cp', mo_coef_in_ao_ortho_basis(1:ao_num,1:mo_tot_num)
119-
! print *, 'cAi', cusp_C(1:nucl_num,1:mo_tot_num)
120-
! print *, 'FmuA', AO_orthoSlaH_matrix(1:ao_num,1:nucl_num)
121-
! print *, 'Fock:', Fock_matrix_ao(1:ao_num,1:ao_num)
122-
! print *, 'Diag Dressing:', ao_ortho_mono_elec_integral_dressing(1:ao_num,1:ao_num)
123-
! print *, 'Dressing:', ao_mono_elec_integral_dressing(1:ao_num,1:ao_num)
124-
! print *, 'Dressed Fock:', Fock_matrix_ao(1:ao_num,1:ao_num) + ao_mono_elec_integral_dressing(1:ao_num,1:ao_num)
125-
! print *, 'AO_orthoSlaOverlap_matrix', AO_orthoSlaOverlap_matrix(1:ao_num,1:nucl_num)
126-
! print *, 'AO_orthoSlaH_matrix', AO_orthoSlaH_matrix(1:ao_num,1:nucl_num)
127-
! print *, 'ao_ortho_mono_elec_integral', ao_ortho_mono_elec_integral(1:ao_num,1:ao_num)
128104
do j=1,mo_tot_num
129105
do i=1,mo_tot_num
130-
Fock_matrix_mo(i,j) += mo_mono_elec_integral_dressing(i,j)
106+
F(i,j) = Fock_matrix_mo(i,j)
131107
enddo
132108
enddo
133-
do i=1,mo_tot_num
134-
Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i)
135-
enddo
136-
double precision :: conv
137-
conv = 0.d0
109+
138110
do j=1,mo_tot_num
139-
do i=1,mo_tot_num
140-
if (i==j) cycle
141-
conv = max(conv,Fock_matrix_mo(i,j))
111+
do i=1,ao_num
112+
M(i,j) = mo_coef(i,j)
142113
enddo
143114
enddo
144-
TOUCH Fock_matrix_mo Fock_matrix_diag_mo
145115

146-
mo_coef(1:ao_num,1:mo_tot_num) = eigenvectors_fock_matrix_mo(1:ao_num,1:mo_tot_num)
147-
TOUCH mo_coef
148-
! print *, 'C', mo_coef(1:ao_num,1:mo_tot_num)
149-
! print *, '-----'
150-
print *, idx_dressing, it, real(mo_coef(1,idx_dressing)), real(conv)
151-
if (conv < 1.d-5) exit
116+
integer :: it
117+
do it=1,128
118+
119+
! print *, 'X', ao_ortho_canonical_coef(1:ao_num,1:ao_num)
120+
! print *, 'C', mo_coef(1:ao_num,1:mo_tot_num)
121+
! print *, 'Cp', mo_coef_in_ao_ortho_basis(1:ao_num,1:mo_tot_num)
122+
! print *, 'cAi', cusp_C(1:nucl_num,1:mo_tot_num)
123+
! print *, 'FmuA', AO_orthoSlaH_matrix(1:ao_num,1:nucl_num)
124+
! print *, 'Fock:', Fock_matrix_ao(1:ao_num,1:ao_num)
125+
! print *, 'Diag Dressing:', ao_ortho_mono_elec_integral_dressing(1:ao_num,1:ao_num)
126+
! print *, 'Dressing:', ao_mono_elec_integral_dressing(1:ao_num,1:ao_num)
127+
! print *, 'Dressed Fock:', Fock_matrix_ao(1:ao_num,1:ao_num) + ao_mono_elec_integral_dressing(1:ao_num,1:ao_num)
128+
! print *, 'AO_orthoSlaOverlap_matrix', AO_orthoSlaOverlap_matrix(1:ao_num,1:nucl_num)
129+
! print *, 'AO_orthoSlaH_matrix', AO_orthoSlaH_matrix(1:ao_num,1:nucl_num)
130+
! print *, 'ao_ortho_mono_elec_integral', ao_ortho_mono_elec_integral(1:ao_num,1:ao_num)
131+
! print *, 'Fock MO:', Fock_matrix_mo(1:mo_tot_num,1:mo_tot_num)
132+
do j=1,mo_tot_num
133+
do i=1,mo_tot_num
134+
Fock_matrix_mo(i,j) += mo_mono_elec_integral_dressing(i,j)
135+
enddo
136+
enddo
137+
do i=1,mo_tot_num
138+
Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i)
139+
enddo
140+
! print *, 'Dressed Fock MO:', Fock_matrix_mo(1:mo_tot_num,1:mo_tot_num)
141+
double precision :: conv
142+
conv = 0.d0
143+
do j=1,mo_tot_num
144+
do i=1,mo_tot_num
145+
if (i==j) cycle
146+
conv = max(conv,Fock_matrix_mo(i,j))
147+
enddo
148+
enddo
149+
TOUCH Fock_matrix_mo Fock_matrix_diag_mo
150+
151+
mo_coef(1:ao_num,1:mo_tot_num) = eigenvectors_fock_matrix_mo(1:ao_num,1:mo_tot_num)
152+
TOUCH mo_coef
153+
!print *, 'C', mo_coef(1:ao_num,1:mo_tot_num)
154+
!print *, '-----'
155+
print *, idx_dressing, it, real(mo_coef(1,idx_dressing)), real(conv)
156+
if (conv < 1.d-5) exit
157+
!stop
152158

159+
enddo
160+
cusp_corrected_mos(1:ao_num,idx_dressing) = mo_coef(1:ao_num,idx_dressing)
161+
slater_coef(1:nucl_num,idx_dressing) = cusp_C(1:nucl_num,idx_dressing)
153162
enddo
154-
cusp_corrected_mos(1:ao_num,idx_dressing) = mo_coef(1:ao_num,idx_dressing)
155-
slater_coef(1:nucl_num,idx_dressing) = cusp_C(1:nucl_num,idx_dressing)
156-
enddo
157163

158-
idx_dressing = 1
159-
mo_coef(1:ao_num,1:mo_tot_num) = M(1:ao_num,1:mo_tot_num)
160-
soft_TOUCH mo_coef idx_dressing slater_coef
164+
idx_dressing = 1
165+
mo_coef(1:ao_num,1:mo_tot_num) = M(1:ao_num,1:mo_tot_num)
166+
soft_TOUCH mo_coef idx_dressing slater_coef
167+
168+
endif
161169

162170
END_PROVIDER
163171

plugins/Hartree_Fock_SlaterDressed/integrals.irp.f

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ subroutine GauSlaNuclear(expGau,cGau,aGau,expSla,cSla,ZNuc,cNuc,result)
344344
ss = k*ss
345345

346346
! Print result
347-
write(*,*) ss
347+
! write(*,*) ss
348348
result = 0.d0
349349

350350
end
@@ -520,6 +520,7 @@ subroutine GauSlaNuclear_read(expGau,cGau,aGau,expSla,cSla,ZNuc,cNuc,result,iuni
520520

521521
END_PROVIDER
522522

523+
523524
SUBST [ X ]
524525

525526
Overlap ;;
@@ -616,9 +617,9 @@ subroutine GauSlaNuclear_read(expGau,cGau,aGau,expSla,cSla,ZNuc,cNuc,result,iuni
616617
BEGIN_DOC
617618
! <AO ortho | Slater>
618619
END_DOC
619-
call dgemm('T','N',ao_num,nucl_num,ao_num,1.d0, &
620-
ao_ortho_canonical_coef, size(ao_ortho_canonical_coef,1), &
621-
GauSlaH_matrix, size(GauSlaH_matrix,1), &
622-
0.d0, AO_orthoSlaH_matrix, size(AO_orthoSlaH_matrix,1))
620+
call dgemm('T','N',ao_num,nucl_num,ao_num,1.d0, &
621+
ao_ortho_canonical_coef, size(ao_ortho_canonical_coef,1), &
622+
GauSlaH_matrix, size(GauSlaH_matrix,1), &
623+
0.d0, AO_orthoSlaH_matrix, size(AO_orthoSlaH_matrix,1))
623624
END_PROVIDER
624625

plugins/Hartree_Fock_SlaterDressed/slater.irp.f

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
if (exists) then
99
slater_expo(1:nucl_num) = slater_expo_ezfio(1:nucl_num)
1010
else
11-
slater_expo(1:nucl_num) = nucl_charge(1:nucl_num)
11+
integer :: i
12+
do i=1,nucl_num
13+
slater_expo(i) = nucl_charge(i)
14+
enddo
1215
call ezfio_set_Hartree_Fock_SlaterDressed_slater_expo_ezfio(slater_expo)
1316
endif
1417
END_PROVIDER

src/MO_Basis/ao_ortho_canonical.irp.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,9 @@
106106
ao_ortho_canonical_coef(i,i) = 1.d0
107107
enddo
108108

109-
!call ortho_lowdin(ao_overlap,size(ao_overlap,1),ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1),ao_num)
110-
!ao_ortho_canonical_num=ao_num
111-
!return
109+
call ortho_lowdin(ao_overlap,size(ao_overlap,1),ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1),ao_num)
110+
ao_ortho_canonical_num=ao_num
111+
return
112112

113113
if (ao_cartesian) then
114114

src/MO_Basis/mos.irp.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
!
7676
! C^(-1).C_mo
7777
END_DOC
78-
call dgemm('T','N',ao_num,mo_tot_num,ao_num,1.d0, &
78+
call dgemm('N','N',ao_num,mo_tot_num,ao_num,1.d0, &
7979
ao_ortho_canonical_coef_inv, size(ao_ortho_canonical_coef_inv,1),&
8080
mo_coef, size(mo_coef,1), 0.d0, &
8181
mo_coef_in_ao_ortho_basis, size(mo_coef_in_ao_ortho_basis,1))
@@ -290,13 +290,13 @@ subroutine ao_ortho_cano_to_ao(A_ao,LDA_ao,A,LDA)
290290
allocate ( T(ao_num_align,ao_num) )
291291
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T
292292
293-
call dgemm('N','N', ao_num, ao_num, ao_num, &
293+
call dgemm('T','N', ao_num, ao_num, ao_num, &
294294
1.d0, &
295295
ao_ortho_canonical_coef_inv, size(ao_ortho_canonical_coef_inv,1), &
296296
A_ao,LDA_ao, &
297297
0.d0, T, ao_num_align)
298298
299-
call dgemm('N','T', ao_num, ao_num, ao_num, 1.d0, &
299+
call dgemm('N','N', ao_num, ao_num, ao_num, 1.d0, &
300300
T, size(T,1), &
301301
ao_ortho_canonical_coef_inv,size(ao_ortho_canonical_coef_inv,1),&
302302
0.d0, A, LDA)

0 commit comments

Comments
 (0)