mirror of
https://gitlab.com/scemama/qp_plugins_scemama.git
synced 2024-12-22 12:23:37 +01:00
Computing alpha_0 correction
This commit is contained in:
parent
282ebf07b1
commit
44e3033457
12
devel/sr_correction/EZFIO.cfg
Normal file
12
devel/sr_correction/EZFIO.cfg
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[energy_mu]
|
||||||
|
type: double precision
|
||||||
|
doc: Energy E(mu)
|
||||||
|
size: (determinants.n_states)
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
|
[energy]
|
||||||
|
type: double precision
|
||||||
|
doc: Energy E(mu) + alpha_0 <Psi(mu)|\bar{W}|Psi(mu)>
|
||||||
|
size: (determinants.n_states)
|
||||||
|
interface: ezfio
|
||||||
|
|
3
devel/sr_correction/NEED
Normal file
3
devel/sr_correction/NEED
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
davidson_undressed
|
||||||
|
two_body_rdm
|
||||||
|
mo_two_e_ints
|
5
devel/sr_correction/README.rst
Normal file
5
devel/sr_correction/README.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
=============
|
||||||
|
sr_correction
|
||||||
|
=============
|
||||||
|
|
||||||
|
Correction of the energy obtained with a Long-Range Hamiltonian
|
18
devel/sr_correction/alpha.irp.f
Normal file
18
devel/sr_correction/alpha.irp.f
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
BEGIN_PROVIDER [ double precision, alpha_coef, (0:1) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! SavCar-JCP-23
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision :: num, den
|
||||||
|
|
||||||
|
num = 0.319820d0 + mu_erf * (1.063846d0 + mu_erf)
|
||||||
|
den = 0.487806d0 + mu_erf * (1.375439d0 + mu_erf)
|
||||||
|
alpha_coef(0) = num/den
|
||||||
|
|
||||||
|
num = 0.113074d0 + mu_erf * (0.638308d0 + mu_erf)
|
||||||
|
den = 0.122652d0 + mu_erf * (0.674813d0 + mu_erf)
|
||||||
|
alpha_coef(1) = num/den
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
80
devel/sr_correction/energy_mu.irp.f
Normal file
80
devel/sr_correction/energy_mu.irp.f
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
BEGIN_PROVIDER [ double precision, W_mu, (mo_num, mo_num, mo_num, mo_num) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! $<ij|W(mu)|kl>$ in MO basis
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j,k,l
|
||||||
|
do l=1,mo_num
|
||||||
|
do k=1,mo_num
|
||||||
|
do j=1,mo_num
|
||||||
|
do i=1,mo_num
|
||||||
|
double precision, external :: mo_two_e_integral_erf
|
||||||
|
W_mu(i,j,k,l) = mo_two_e_integral_erf(i,j,k,l)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, W_bar_mu, (mo_num, mo_num, mo_num, mo_num) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! $<ij|\bar{W}(mu)|kl>$ in MO basis
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: i,j,k,l
|
||||||
|
do l=1,mo_num
|
||||||
|
do k=1,mo_num
|
||||||
|
do j=1,mo_num
|
||||||
|
do i=1,mo_num
|
||||||
|
double precision, external :: mo_two_e_integral
|
||||||
|
W_bar_mu(i,j,k,l) = mo_two_e_integral(i,j,k,l) - W_mu(i,j,k,l)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, energy_mu ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! E(mu)
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision :: one_e, two_e
|
||||||
|
|
||||||
|
integer :: k,l
|
||||||
|
double precision, external :: ddot
|
||||||
|
|
||||||
|
one_e = 0.d0
|
||||||
|
two_e = 0.d0
|
||||||
|
do l=1,mo_num
|
||||||
|
one_e += ddot(mo_num, one_e_dm_mo(1,l), 1, mo_one_e_integrals(1,l), 1)
|
||||||
|
do k=1,mo_num
|
||||||
|
two_e += 0.5d0 * ddot (mo_num*mo_num, two_e_dm_mo(1,1,k,l), 1, W_mu(1,1,k,l), 1)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
energy_mu = one_e + two_e + nuclear_repulsion
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, correction_alpha_0 ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! alpha_0(mu) * <Psi(mu)|W_bar_mu|Psi(mu)>
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
double precision :: one_e, two_e
|
||||||
|
|
||||||
|
integer :: k,l
|
||||||
|
double precision, external :: ddot
|
||||||
|
|
||||||
|
correction_alpha_0 = 0.d0
|
||||||
|
do l=1,mo_num
|
||||||
|
do k=1,mo_num
|
||||||
|
correction_alpha_0 += 0.5d0 * ddot (mo_num*mo_num, two_e_dm_mo(1,1,k,l), 1, W_bar_mu(1,1,k,l), 1)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
correction_alpha_0 = correction_alpha_0*alpha_coef(0)
|
||||||
|
END_PROVIDER
|
||||||
|
|
14
devel/sr_correction/sr_correction.irp.f
Normal file
14
devel/sr_correction/sr_correction.irp.f
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
program sr_correction_opt_psi
|
||||||
|
implicit none
|
||||||
|
read_wf = .True.
|
||||||
|
use_only_lr = .False.
|
||||||
|
SOFT_TOUCH read_wf use_only_lr
|
||||||
|
call run
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine run
|
||||||
|
implicit none
|
||||||
|
print *, 'E(mu)', energy_mu
|
||||||
|
print *, 'correction', correction_alpha_0
|
||||||
|
print *, 'E = ', energy_mu + correction_alpha_0
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user