10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-23 12:55:37 +01:00

Orthogonalize MOs

This commit is contained in:
Anthony Scemama 2020-11-11 10:26:36 +01:00
parent 69dfa85277
commit 6b2020d40d
5 changed files with 13 additions and 10 deletions

View File

@ -47,22 +47,23 @@ subroutine create_guess
PROVIDE ezfio_filename PROVIDE ezfio_filename
call ezfio_has_mo_basis_mo_coef(exists) call ezfio_has_mo_basis_mo_coef(exists)
if (.not.exists) then if (.not.exists) then
mo_label = 'Guess'
if (mo_guess_type == "HCore") then if (mo_guess_type == "HCore") then
mo_coef = ao_ortho_lowdin_coef mo_coef = ao_ortho_lowdin_coef
TOUCH mo_coef TOUCH mo_coef
mo_label = 'Guess'
call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, & call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, &
size(mo_one_e_integrals,1), & size(mo_one_e_integrals,1), &
size(mo_one_e_integrals,2), & size(mo_one_e_integrals,2), &
mo_label,1,.false.) mo_label,1,.false.)
call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-10) call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-10)
SOFT_TOUCH mo_coef mo_label SOFT_TOUCH mo_coef
else if (mo_guess_type == "Huckel") then else if (mo_guess_type == "Huckel") then
call huckel_guess call huckel_guess
else else
print *, 'Unrecognized MO guess type : '//mo_guess_type print *, 'Unrecognized MO guess type : '//mo_guess_type
stop 1 stop 1
endif endif
SOFT_TOUCH mo_label
endif endif
end end
@ -77,7 +78,7 @@ subroutine run
integer :: i_it, i, j, k integer :: i_it, i, j, k
mo_label = "Orthonormalized" mo_label = 'Near-Canonical'
call Roothaan_Hall_SCF call Roothaan_Hall_SCF
call ezfio_set_hartree_fock_energy(SCF_energy) call ezfio_set_hartree_fock_energy(SCF_energy)

View File

@ -4,7 +4,7 @@ subroutine hcore_guess
END_DOC END_DOC
implicit none implicit none
character*(64) :: label character*(64) :: label
label = "Guess" label = 'Guess'
call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, & call mo_as_eigvectors_of_mo_matrix(mo_one_e_integrals, &
size(mo_one_e_integrals,1), & size(mo_one_e_integrals,1), &
size(mo_one_e_integrals,2),label,1,.false.) size(mo_one_e_integrals,2),label,1,.false.)

View File

@ -26,6 +26,7 @@ subroutine huckel_guess
TOUCH Fock_matrix_ao_alpha Fock_matrix_ao_beta TOUCH Fock_matrix_ao_alpha Fock_matrix_ao_beta
mo_coef = eigenvectors_fock_matrix_mo mo_coef = eigenvectors_fock_matrix_mo
call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-12 ) call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-12 )
call orthonormalize_mos
SOFT_TOUCH mo_coef SOFT_TOUCH mo_coef
call save_mos call save_mos
deallocate(A) deallocate(A)

View File

@ -153,7 +153,7 @@ END_DOC
enddo enddo
if (iteration_SCF < n_it_SCF_max) then if (iteration_SCF < n_it_SCF_max) then
mo_label = "Canonical" mo_label = 'Canonical'
endif endif
! !
! End of Main SCF loop ! End of Main SCF loop
@ -164,7 +164,8 @@ END_DOC
write(6,*) write(6,*)
if(.not.frozen_orb_scf)then if(.not.frozen_orb_scf)then
call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label,1,.true.) call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1), &
size(Fock_matrix_mo,2),mo_label,1,.true.)
call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-10) call nullify_small_elements(ao_num, mo_num, mo_coef, size(mo_coef,1), 1.d-10)
call orthonormalize_mos call orthonormalize_mos
call save_mos call save_mos
@ -305,7 +306,7 @@ END_DOC
Fock_matrix_AO_(i,j) = 0.d0 Fock_matrix_AO_(i,j) = 0.d0
enddo enddo
do k=1,dim_DIIS do k=1,dim_DIIS
if (dabs(X_vector_DIIS(k)) < 1.d-12) cycle if (dabs(X_vector_DIIS(k)) < 1.d-10) cycle
do i=1,ao_num do i=1,ao_num
Fock_matrix_AO_(i,j) = Fock_matrix_AO_(i,j) + & Fock_matrix_AO_(i,j) = Fock_matrix_AO_(i,j) + &
X_vector_DIIS(k)*Fock_matrix_DIIS(i,j,dim_DIIS-k+1) X_vector_DIIS(k)*Fock_matrix_DIIS(i,j,dim_DIIS-k+1)