9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-06 21:43:39 +01:00

Add state-averaged density

This commit is contained in:
Anthony Scemama 2020-05-28 18:05:17 +02:00
parent 4ccb17a5dd
commit 169e19e46a

View File

@ -31,20 +31,73 @@
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential, (ao_num, ao_num,N_states)] BEGIN_PROVIDER [double precision, effective_one_e_potential_sa, (mo_num, mo_num)]
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin, (ao_num, ao_num,N_states)] &BEGIN_PROVIDER [double precision, effective_one_e_potential_without_kin_sa, (mo_num, mo_num)]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! ao_effective_one_e_potential(i,j) = $\rangle i_{AO}| v_{H}^{sr} |j_{AO}\rangle + \rangle i_{AO}| h_{core} |j_{AO}\rangle + \rangle i_{AO}|v_{xc} |j_{AO}\rangle$ ! State-averaged potential in MO basis
!
END_DOC END_DOC
integer :: istate integer :: istate
effective_one_e_potential_sa(:,:) = 0.d0
effective_one_e_potential_without_kin_sa(:,:) = 0.d0
do istate = 1, N_states do istate = 1, N_states
call mo_to_ao_no_overlap(effective_one_e_potential(1,1,istate),size(effective_one_e_potential,1),ao_effective_one_e_potential(1,1,istate),size(ao_effective_one_e_potential,1)) effective_one_e_potential_sa(:,:) += effective_one_e_potential(:,:,istate) * state_average_weight(istate)
effective_one_e_potential_without_kin_sa(:,:) += effective_one_e_potential_without_kin(:,:,istate) * state_average_weight(istate)
call mo_to_ao_no_overlap(effective_one_e_potential_without_kin(1,1,istate),size(effective_one_e_potential_without_kin,1),ao_effective_one_e_potential_without_kin(1,1,istate),size(ao_effective_one_e_potential_without_kin,1))
enddo enddo
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential, (ao_num, ao_num,N_states)]
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin, (ao_num, ao_num,N_states)]
implicit none
integer :: i,j,istate
effective_one_e_potential = 0.d0
BEGIN_DOC
! Effective_one_e_potential(i,j) = $\rangle i_{MO}| v_{H}^{sr} |j_{MO}\rangle + \rangle i_{MO}| h_{core} |j_{MO}\rangle + \rangle i_{MO}|v_{xc} |j_{MO}\rangle$
!
! on the |MO| basis
!
! Taking the expectation value does not provide any energy, but
!
! effective_one_e_potential(i,j) is the potential coupling DFT and WFT parts
!
! and it is used in any RS-DFT based calculations
END_DOC
do istate = 1, N_states
do j = 1, mo_num
do i = 1, mo_num
effective_one_e_potential(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) + mo_kinetic_integrals(i,j) &
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
effective_one_e_potential_without_kin(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) &
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
enddo
enddo
enddo
END_PROVIDER
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_sa, (ao_num, ao_num)]
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin_sa, (ao_num, ao_num)]
implicit none
BEGIN_DOC
! State-averaged potential in AO basis
END_DOC
integer :: istate
ao_effective_one_e_potential_sa(:,:) = 0.d0
ao_effective_one_e_potential_without_kin_sa(:,:) = 0.d0
do istate = 1, N_states
ao_effective_one_e_potential_sa(:,:) += ao_effective_one_e_potential(:,:,istate) * state_average_weight(istate)
ao_effective_one_e_potential_without_kin_sa(:,:) += ao_effective_one_e_potential_without_kin(:,:,istate) * state_average_weight(istate)
enddo
END_PROVIDER