From 169e19e46a9279f499ef6cd50d1857a55777a7a3 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 28 May 2020 18:05:17 +0200 Subject: [PATCH] Add state-averaged density --- src/dft_one_e/effective_pot.irp.f | 67 +++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/src/dft_one_e/effective_pot.irp.f b/src/dft_one_e/effective_pot.irp.f index 27f4841e..c7bd6b39 100644 --- a/src/dft_one_e/effective_pot.irp.f +++ b/src/dft_one_e/effective_pot.irp.f @@ -31,20 +31,73 @@ 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)] + BEGIN_PROVIDER [double precision, effective_one_e_potential_sa, (mo_num, mo_num)] +&BEGIN_PROVIDER [double precision, effective_one_e_potential_without_kin_sa, (mo_num, mo_num)] implicit none 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 integer :: istate + effective_one_e_potential_sa(:,:) = 0.d0 + effective_one_e_potential_without_kin_sa(:,:) = 0.d0 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)) - - 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)) + 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) enddo 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 +