mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-31 00:23:42 +02:00
Natural orbitals implemented
This commit is contained in:
parent
0fb0b9e2ec
commit
f3fc0fdb8a
@ -209,51 +209,3 @@ END_PROVIDER
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, one_body_dm_a, (mo_tot_num_align,mo_tot_num) ]
|
|
||||||
&BEGIN_PROVIDER [ double precision, one_body_dm_b, (mo_tot_num_align,mo_tot_num) ]
|
|
||||||
implicit none
|
|
||||||
BEGIN_DOC
|
|
||||||
! Alpha and beta one-body density matrix
|
|
||||||
END_DOC
|
|
||||||
|
|
||||||
integer :: j,k,l
|
|
||||||
integer :: occ(N_int*bit_kind_size,2)
|
|
||||||
double precision :: ck, cl, ckl
|
|
||||||
double precision :: phase
|
|
||||||
integer :: h1,h2,p1,p2,s1,s2, degree
|
|
||||||
integer :: exc(0:2,2,2),n_occ_alpha
|
|
||||||
one_body_dm_a = 0.d0
|
|
||||||
one_body_dm_b = 0.d0
|
|
||||||
|
|
||||||
do k=1,det_num
|
|
||||||
call bitstring_to_list(det_provider(1,1,k), occ(1,1), n_occ_alpha, N_int)
|
|
||||||
call bitstring_to_list(det_provider(1,2,k), occ(1,2), n_occ_alpha, N_int)
|
|
||||||
ck = det_coef_provider(k)
|
|
||||||
do l=1,elec_alpha_num
|
|
||||||
j = occ(l,1)
|
|
||||||
one_body_dm_a(j,j) += ck*ck
|
|
||||||
enddo
|
|
||||||
do l=1,elec_beta_num
|
|
||||||
j = occ(l,2)
|
|
||||||
one_body_dm_b(j,j) += ck*ck
|
|
||||||
enddo
|
|
||||||
do l=1,k-1
|
|
||||||
call get_excitation_degree(det_provider(1,1,k),det_provider(1,1,l),degree,N_int)
|
|
||||||
if (degree /= 1) then
|
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
call get_mono_excitation(det_provider(1,1,k),det_provider(1,1,l),exc,phase,N_int)
|
|
||||||
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
|
||||||
ckl = ck * det_coef_provider(l) * phase
|
|
||||||
if (s1==1) then
|
|
||||||
one_body_dm_a(h1,p1) += ckl
|
|
||||||
one_body_dm_a(p1,h1) += ckl
|
|
||||||
else
|
|
||||||
one_body_dm_b(h1,p1) += ckl
|
|
||||||
one_body_dm_b(p1,h1) += ckl
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
END_PROVIDER
|
|
||||||
|
|
||||||
|
@ -389,7 +389,7 @@ subroutine $subroutine($params_main)
|
|||||||
!$OMP PARALLEL DEFAULT(SHARED) &
|
!$OMP PARALLEL DEFAULT(SHARED) &
|
||||||
!$OMP PRIVATE(i_generator,wall_2,ispin,k,mask)
|
!$OMP PRIVATE(i_generator,wall_2,ispin,k,mask)
|
||||||
allocate( mask(N_int,2,6) )
|
allocate( mask(N_int,2,6) )
|
||||||
!$OMP DO SCHEDULE(guided)
|
!$OMP DO SCHEDULE(dynamic,4)
|
||||||
do i_generator=1,nmax
|
do i_generator=1,nmax
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
cycle
|
cycle
|
||||||
|
106
src/Dets/density_matrix.irp.f
Normal file
106
src/Dets/density_matrix.irp.f
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
BEGIN_PROVIDER [ double precision, one_body_dm_mo_alpha, (mo_tot_num_align,mo_tot_num) ]
|
||||||
|
&BEGIN_PROVIDER [ double precision, one_body_dm_mo_beta, (mo_tot_num_align,mo_tot_num) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Alpha and beta one-body density matrix for each state
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: j,k,l,m
|
||||||
|
integer :: occ(N_int*bit_kind_size,2)
|
||||||
|
double precision :: ck, cl, ckl
|
||||||
|
double precision :: phase
|
||||||
|
integer :: h1,h2,p1,p2,s1,s2, degree
|
||||||
|
integer :: exc(0:2,2,2),n_occ_alpha
|
||||||
|
double precision, allocatable :: tmp_a(:,:), tmp_b(:,:)
|
||||||
|
|
||||||
|
one_body_dm_mo_alpha = 0.d0
|
||||||
|
one_body_dm_mo_beta = 0.d0
|
||||||
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
|
!$OMP PRIVATE(j,k,l,m,occ,ck, cl, ckl,phase,h1,h2,p1,p2,s1,s2, degree,exc, &
|
||||||
|
!$OMP tmp_a, tmp_b, n_occ_alpha)&
|
||||||
|
!$OMP SHARED(psi_det,psi_coef,N_int,N_states,state_average_weight,elec_alpha_num,&
|
||||||
|
!$OMP elec_beta_num,one_body_dm_mo_alpha,one_body_dm_mo_beta,N_det,mo_tot_num_align,&
|
||||||
|
!$OMP mo_tot_num)
|
||||||
|
allocate(tmp_a(mo_tot_num_align,mo_tot_num), tmp_b(mo_tot_num_align,mo_tot_num) )
|
||||||
|
tmp_a = 0.d0
|
||||||
|
tmp_b = 0.d0
|
||||||
|
!$OMP DO SCHEDULE(dynamic)
|
||||||
|
do k=1,N_det
|
||||||
|
call bitstring_to_list(psi_det(1,1,k), occ(1,1), n_occ_alpha, N_int)
|
||||||
|
call bitstring_to_list(psi_det(1,2,k), occ(1,2), n_occ_alpha, N_int)
|
||||||
|
do m=1,N_states
|
||||||
|
ck = psi_coef(k,m)*psi_coef(k,m) * state_average_weight(m)
|
||||||
|
do l=1,elec_alpha_num
|
||||||
|
j = occ(l,1)
|
||||||
|
tmp_a(j,j) += ck
|
||||||
|
enddo
|
||||||
|
do l=1,elec_beta_num
|
||||||
|
j = occ(l,2)
|
||||||
|
tmp_b(j,j) += ck
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
do l=1,k-1
|
||||||
|
call get_excitation_degree(psi_det(1,1,k),psi_det(1,1,l),degree,N_int)
|
||||||
|
if (degree /= 1) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
call get_mono_excitation(psi_det(1,1,k),psi_det(1,1,l),exc,phase,N_int)
|
||||||
|
call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2)
|
||||||
|
do m=1,N_states
|
||||||
|
ckl = psi_coef(k,m) * psi_coef(l,m) * phase * state_average_weight(m)
|
||||||
|
if (s1==1) then
|
||||||
|
tmp_a(h1,p1) += ckl
|
||||||
|
tmp_a(p1,h1) += ckl
|
||||||
|
else
|
||||||
|
tmp_b(h1,p1) += ckl
|
||||||
|
tmp_b(p1,h1) += ckl
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
!$OMP END DO NOWAIT
|
||||||
|
!$OMP CRITICAL
|
||||||
|
one_body_dm_mo_alpha = one_body_dm_mo_alpha + tmp_a
|
||||||
|
!$OMP END CRITICAL
|
||||||
|
!$OMP CRITICAL
|
||||||
|
one_body_dm_mo_beta = one_body_dm_mo_beta + tmp_b
|
||||||
|
!$OMP END CRITICAL
|
||||||
|
deallocate(tmp_a,tmp_b)
|
||||||
|
!$OMP BARRIER
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, one_body_dm_mo, (mo_tot_num_align,mo_tot_num) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! One-body density matrix
|
||||||
|
END_DOC
|
||||||
|
one_body_dm_mo = one_body_dm_mo_alpha + one_body_dm_mo_beta
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
subroutine save_natural_mos
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Save natural orbitals, obtained by diagonalization of the one-body density matrix in the MO basis
|
||||||
|
END_DOC
|
||||||
|
character*(64) :: label
|
||||||
|
double precision, allocatable :: tmp(:,:)
|
||||||
|
allocate(tmp(size(one_body_dm_mo,1),size(one_body_dm_mo,2)))
|
||||||
|
|
||||||
|
! Negation to have the occupied MOs first after the diagonalization
|
||||||
|
tmp = -one_body_dm_mo
|
||||||
|
label = "Natural"
|
||||||
|
call mo_as_eigvectors_of_mo_matrix(tmp,size(tmp,1),size(tmp,2),label)
|
||||||
|
deallocate(tmp)
|
||||||
|
call save_mos
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, state_average_weight, (N_states) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Weights in the state-average calculation of the density matrix
|
||||||
|
END_DOC
|
||||||
|
state_average_weight = 1.d0/dble(N_states)
|
||||||
|
END_PROVIDER
|
||||||
|
|
4
src/Dets/save_natorb.irp.f
Normal file
4
src/Dets/save_natorb.irp.f
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
program save_natorb
|
||||||
|
call save_natural_mos
|
||||||
|
end
|
||||||
|
|
@ -25,14 +25,14 @@ program cisd
|
|||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
print *, 'Final step'
|
! print *, 'Final step'
|
||||||
call remove_small_contributions
|
! call remove_small_contributions
|
||||||
call diagonalize_CI
|
! call diagonalize_CI
|
||||||
print *, 'N_det = ', N_det
|
! print *, 'N_det = ', N_det
|
||||||
print *, 'N_states = ', N_states
|
! print *, 'N_states = ', N_states
|
||||||
print *, 'PT2 = ', pt2
|
! print *, 'PT2 = ', pt2
|
||||||
print *, 'E = ', CI_energy
|
! print *, 'E = ', CI_energy
|
||||||
print *, 'E+PT2 = ', CI_energy+pt2
|
! print *, 'E+PT2 = ', CI_energy+pt2
|
||||||
print *, '-----'
|
! print *, '-----'
|
||||||
deallocate(pt2,norm_pert)
|
deallocate(pt2,norm_pert)
|
||||||
end
|
end
|
||||||
|
@ -26,22 +26,22 @@ Documentation
|
|||||||
.. Do not edit this section. It was auto-generated from the
|
.. Do not edit this section. It was auto-generated from the
|
||||||
.. NEEDED_MODULES file.
|
.. NEEDED_MODULES file.
|
||||||
|
|
||||||
`fock_matrix_alpha_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_ao, (ao_num_align, ao_num) ]/;">`_
|
`fock_matrix_alpha_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L83>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
`fock_matrix_alpha_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_mo, (mo_tot_num_align,mo_tot_num) ]/;">`_
|
`fock_matrix_alpha_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L172>`_
|
||||||
Fock matrix on the MO basis
|
Fock matrix on the MO basis
|
||||||
|
|
||||||
`fock_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num_align, ao_num) ]/;">`_
|
`fock_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L220>`_
|
||||||
Fock matrix in AO basis set
|
Fock matrix in AO basis set
|
||||||
|
|
||||||
`fock_matrix_beta_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/&BEGIN_PROVIDER [ double precision, Fock_matrix_beta_ao, (ao_num_align, ao_num) ]/;">`_
|
`fock_matrix_beta_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L84>`_
|
||||||
Alpha Fock matrix in AO basis set
|
Alpha Fock matrix in AO basis set
|
||||||
|
|
||||||
`fock_matrix_beta_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, Fock_matrix_beta_mo, (mo_tot_num_align,mo_tot_num) ]/;">`_
|
`fock_matrix_beta_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L192>`_
|
||||||
Fock matrix on the MO basis
|
Fock matrix on the MO basis
|
||||||
|
|
||||||
`fock_matrix_diag_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/&BEGIN_PROVIDER [ double precision, Fock_matrix_diag_mo, (mo_tot_num)]/;">`_
|
`fock_matrix_diag_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L2>`_
|
||||||
Fock matrix on the MO basis.
|
Fock matrix on the MO basis.
|
||||||
For open shells, the ROHF Fock Matrix is
|
For open shells, the ROHF Fock Matrix is
|
||||||
.br
|
.br
|
||||||
@ -56,7 +56,7 @@ Documentation
|
|||||||
K = Fb - Fa
|
K = Fb - Fa
|
||||||
.br
|
.br
|
||||||
|
|
||||||
`fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, Fock_matrix_mo, (mo_tot_num_align,mo_tot_num) ]/;">`_
|
`fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L1>`_
|
||||||
Fock matrix on the MO basis.
|
Fock matrix on the MO basis.
|
||||||
For open shells, the ROHF Fock Matrix is
|
For open shells, the ROHF Fock Matrix is
|
||||||
.br
|
.br
|
||||||
@ -71,70 +71,73 @@ Documentation
|
|||||||
K = Fb - Fa
|
K = Fb - Fa
|
||||||
.br
|
.br
|
||||||
|
|
||||||
`hf_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L/BEGIN_PROVIDER [ double precision, HF_energy ]/;">`_
|
`hf_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/Fock_matrix.irp.f#L211>`_
|
||||||
Hartree-Fock energy
|
Hartree-Fock energy
|
||||||
|
|
||||||
`hf_density_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L/BEGIN_PROVIDER [ double precision, HF_density_matrix_ao, (ao_num_align,ao_num) ]/;">`_
|
`hf_density_matrix_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L27>`_
|
||||||
Density matrix in the AO basis
|
Density matrix in the AO basis
|
||||||
|
|
||||||
`hf_density_matrix_ao_alpha <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L/BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_alpha, (ao_num_align,ao_num) ]/;">`_
|
`hf_density_matrix_ao_alpha <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L1>`_
|
||||||
Alpha density matrix in the AO basis
|
Alpha density matrix in the AO basis
|
||||||
|
|
||||||
`hf_density_matrix_ao_beta <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L/BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_beta, (ao_num_align,ao_num) ]/;">`_
|
`hf_density_matrix_ao_beta <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/HF_density_matrix_ao.irp.f#L14>`_
|
||||||
Beta density matrix in the AO basis
|
Beta density matrix in the AO basis
|
||||||
|
|
||||||
`fock_mo_to_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/subroutine Fock_mo_to_ao(FMO,LDFMO,FAO,LDFAO)/;">`_
|
`fock_mo_to_ao <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L31>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`insert_new_scf_density_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/subroutine insert_new_SCF_density_matrix/;">`_
|
`insert_new_scf_density_matrix <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L19>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`it_scf <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/BEGIN_PROVIDER [ integer, it_scf ]/;">`_
|
`it_scf <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L1>`_
|
||||||
Number of the current SCF iteration
|
Number of the current SCF iteration
|
||||||
|
|
||||||
`scf_density_matrices <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/BEGIN_PROVIDER [ double precision, SCF_density_matrices, (ao_num_align,ao_num,2,n_it_scf_max) ]/;">`_
|
`scf_density_matrices <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L9>`_
|
||||||
Density matrices at every SCF iteration
|
Density matrices at every SCF iteration
|
||||||
|
|
||||||
`scf_energies <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/&BEGIN_PROVIDER [ double precision, SCF_energies, (n_it_scf_max) ]/;">`_
|
`scf_energies <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L10>`_
|
||||||
Density matrices at every SCF iteration
|
Density matrices at every SCF iteration
|
||||||
|
|
||||||
`scf_interpolation_step <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/subroutine SCF_interpolation_step/;">`_
|
`scf_interpolation_step <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L64>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`scf_iterations <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L/subroutine scf_iterations/;">`_
|
`scf_iterations <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/SCF.irp.f#L89>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`diagonal_fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/diagonalize_fock.irp.f#L/BEGIN_PROVIDER [ double precision, diagonal_Fock_matrix_mo, (mo_tot_num) ]/;">`_
|
`diagonal_fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/diagonalize_fock.irp.f#L1>`_
|
||||||
Diagonal Fock matrix in the MO basis
|
Diagonal Fock matrix in the MO basis
|
||||||
|
|
||||||
`eigenvectors_fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/diagonalize_fock.irp.f#L/&BEGIN_PROVIDER [ double precision, eigenvectors_Fock_matrix_mo, (ao_num_align,mo_tot_num) ]/;">`_
|
`eigenvectors_fock_matrix_mo <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/diagonalize_fock.irp.f#L2>`_
|
||||||
Diagonal Fock matrix in the MO basis
|
Diagonal Fock matrix in the MO basis
|
||||||
|
|
||||||
`xcf_iteration <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/mo_SCF_iterations.irp.f#L/subroutine xcf_iteration/;">`_
|
`run <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/mo_SCF_iterations.irp.f#L7>`_
|
||||||
Undocumented
|
Undocumented
|
||||||
|
|
||||||
`do_diis <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L/BEGIN_PROVIDER [ logical, do_DIIS ]/;">`_
|
`scf <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/mo_SCF_iterations.irp.f#L2>`_
|
||||||
|
Undocumented
|
||||||
|
|
||||||
|
`do_diis <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L39>`_
|
||||||
If True, compute integrals on the fly
|
If True, compute integrals on the fly
|
||||||
|
|
||||||
`n_it_scf_max <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L/BEGIN_PROVIDER [ integer, n_it_scf_max]/;">`_
|
`n_it_scf_max <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L21>`_
|
||||||
Maximum number of SCF iterations
|
Maximum number of SCF iterations
|
||||||
|
|
||||||
`thresh_scf <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L/BEGIN_PROVIDER [ double precision,thresh_SCF ]/;">`_
|
`thresh_scf <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/options.irp.f#L1>`_
|
||||||
Threshold on the convergence of the Hartree Fock energy
|
Threshold on the convergence of the Hartree Fock energy
|
||||||
|
|
||||||
`bi_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L/&BEGIN_PROVIDER [ double precision, bi_elec_ref_bitmask_energy ]/;">`_
|
`bi_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L5>`_
|
||||||
Energy of the reference bitmask used in Slater rules
|
Energy of the reference bitmask used in Slater rules
|
||||||
|
|
||||||
`kinetic_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L/&BEGIN_PROVIDER [ double precision, kinetic_ref_bitmask_energy ]/;">`_
|
`kinetic_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L3>`_
|
||||||
Energy of the reference bitmask used in Slater rules
|
Energy of the reference bitmask used in Slater rules
|
||||||
|
|
||||||
`mono_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L/&BEGIN_PROVIDER [ double precision, mono_elec_ref_bitmask_energy ]/;">`_
|
`mono_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L2>`_
|
||||||
Energy of the reference bitmask used in Slater rules
|
Energy of the reference bitmask used in Slater rules
|
||||||
|
|
||||||
`nucl_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L/&BEGIN_PROVIDER [ double precision, nucl_elec_ref_bitmask_energy ]/;">`_
|
`nucl_elec_ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L4>`_
|
||||||
Energy of the reference bitmask used in Slater rules
|
Energy of the reference bitmask used in Slater rules
|
||||||
|
|
||||||
`ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L/BEGIN_PROVIDER [ double precision, ref_bitmask_energy ]/;">`_
|
`ref_bitmask_energy <http://github.com/LCPQ/quantum_package/tree/master/src/Hartree_Fock/ref_bitmask.irp.f#L1>`_
|
||||||
Energy of the reference bitmask used in Slater rules
|
Energy of the reference bitmask used in Slater rules
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,10 +70,11 @@ subroutine SCF_interpolation_step
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call random_number(c)
|
call random_number(c)
|
||||||
|
c = c*0.5d0
|
||||||
do j=1,ao_num
|
do j=1,ao_num
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
HF_density_matrix_ao_alpha(i,j) = c*SCF_density_matrices(i,j,1,it_scf)+SCF_density_matrices(i,j,1,it_scf-1) * (1.d0 - c)
|
HF_density_matrix_ao_alpha(i,j) = c*SCF_density_matrices(i,j,1,it_scf-1)+SCF_density_matrices(i,j,1,it_scf) * (1.d0 - c)
|
||||||
HF_density_matrix_ao_beta (i,j) = c*SCF_density_matrices(i,j,2,it_scf)+SCF_density_matrices(i,j,2,it_scf-1) * (1.d0 - c)
|
HF_density_matrix_ao_beta (i,j) = c*SCF_density_matrices(i,j,2,it_scf-1)+SCF_density_matrices(i,j,2,it_scf) * (1.d0 - c)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta
|
TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
program xcf_iteration
|
|
||||||
|
program scf
|
||||||
|
call orthonormalize_mos
|
||||||
|
call run
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine run
|
||||||
|
|
||||||
use bitmasks
|
use bitmasks
|
||||||
implicit none
|
implicit none
|
||||||
double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem,get_mo_bielec_integral
|
double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem,get_mo_bielec_integral
|
||||||
@ -8,7 +15,7 @@ program xcf_iteration
|
|||||||
E0 = HF_energy
|
E0 = HF_energy
|
||||||
|
|
||||||
thresh_SCF = 1.d-10
|
thresh_SCF = 1.d-10
|
||||||
call scf_iterations
|
call damping_SCF
|
||||||
mo_label = "Canonical"
|
mo_label = "Canonical"
|
||||||
TOUCH mo_label mo_coef
|
TOUCH mo_label mo_coef
|
||||||
call save_mos
|
call save_mos
|
||||||
|
@ -28,21 +28,31 @@ subroutine mo_as_eigvectors_of_mo_matrix(matrix,n,m,label)
|
|||||||
double precision, allocatable :: mo_coef_new(:,:), R(:,:),eigvalues(:)
|
double precision, allocatable :: mo_coef_new(:,:), R(:,:),eigvalues(:)
|
||||||
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: mo_coef_new, R
|
!DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: mo_coef_new, R
|
||||||
|
|
||||||
|
call write_time(output_mos)
|
||||||
if (m /= mo_tot_num) then
|
if (m /= mo_tot_num) then
|
||||||
print *, irp_here, ': Error : m/= mo_tot_num'
|
print *, irp_here, ': Error : m/= mo_tot_num'
|
||||||
|
stop 1
|
||||||
endif
|
endif
|
||||||
allocate(R(n,m))
|
allocate(R(n,m),mo_coef_new(ao_num_align,m),eigvalues(m))
|
||||||
allocate(mo_coef_new(ao_num_align,m),eigvalues(m))
|
|
||||||
mo_coef_new = mo_coef
|
mo_coef_new = mo_coef
|
||||||
|
|
||||||
call lapack_diag(eigvalues,R,matrix,size(matrix,1),size(matrix,2))
|
call lapack_diag(eigvalues,R,matrix,size(matrix,1),size(matrix,2))
|
||||||
integer :: i
|
integer :: i
|
||||||
|
write (output_mos,'(A)'), 'MOs are now **'//trim(label)//'**'
|
||||||
|
write (output_mos,'(A)'), ''
|
||||||
|
write (output_mos,'(A)'), 'Eigenvalues'
|
||||||
|
write (output_mos,'(A)'), '-----------'
|
||||||
|
write (output_mos,'(A)'), ''
|
||||||
|
write (output_mos,'(A)'), '======== ================'
|
||||||
do i = 1, m
|
do i = 1, m
|
||||||
print*,'eigvalues(i) = ',eigvalues(i)
|
write (output_mos,'(I8,X,F16.10)'), i,eigvalues(i)
|
||||||
enddo
|
enddo
|
||||||
|
write (output_mos,'(A)'), '======== ================'
|
||||||
|
write (output_mos,'(A)'), ''
|
||||||
|
|
||||||
call dgemm('N','N',ao_num,m,m,1.d0,mo_coef_new,size(mo_coef_new,1),R,size(R,1),0.d0,mo_coef,size(mo_coef,1))
|
call dgemm('N','N',ao_num,m,m,1.d0,mo_coef_new,size(mo_coef_new,1),R,size(R,1),0.d0,mo_coef,size(mo_coef,1))
|
||||||
deallocate(mo_coef_new,R,eigvalues)
|
deallocate(mo_coef_new,R,eigvalues)
|
||||||
|
call write_time(output_mos)
|
||||||
|
|
||||||
mo_label = label
|
mo_label = label
|
||||||
SOFT_TOUCH mo_coef mo_label
|
SOFT_TOUCH mo_coef mo_label
|
||||||
|
Loading…
Reference in New Issue
Block a user