mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 03:23:29 +01:00
added the possibility to have a mu(r) in the functionals
This commit is contained in:
parent
1d53e6fda2
commit
0c7c8513b1
@ -16,3 +16,8 @@ doc: Percentage of HF exchange in the DFT model
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: 0.
|
default: 0.
|
||||||
|
|
||||||
|
[mu_dft_type]
|
||||||
|
type: character*(32)
|
||||||
|
doc: type of mu(r) for rsdft [ cst ]
|
||||||
|
interface: ezfio, provider, ocaml
|
||||||
|
default: cst
|
||||||
|
@ -6,3 +6,4 @@ ao_one_e_ints
|
|||||||
ao_two_e_ints
|
ao_two_e_ints
|
||||||
mo_two_e_erf_ints
|
mo_two_e_erf_ints
|
||||||
ao_two_e_erf_ints
|
ao_two_e_erf_ints
|
||||||
|
mu_of_r
|
||||||
|
@ -8,3 +8,15 @@ BEGIN_PROVIDER [double precision, mu_erf_dft]
|
|||||||
mu_erf_dft = mu_erf
|
mu_erf_dft = mu_erf
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [double precision, mu_of_r_dft, (n_points_final_grid)]
|
||||||
|
implicit none
|
||||||
|
integer :: i
|
||||||
|
do i = 1, n_points_final_grid
|
||||||
|
if(mu_dft_type == "cst")then
|
||||||
|
mu_of_r_dft(i) = mu_erf_dft
|
||||||
|
else
|
||||||
|
mu_of_r_dft(i) = mu_of_r_hf(i)
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
@ -21,7 +21,9 @@
|
|||||||
weight = final_weight_at_r_vector(i)
|
weight = final_weight_at_r_vector(i)
|
||||||
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
||||||
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
||||||
call ex_lda_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_x,vx_a,vx_b)
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
|
call ex_lda_sr(mu_local,rhoa(istate),rhob(istate),e_x,vx_a,vx_b)
|
||||||
energy_x_sr_lda(istate) += weight * e_x
|
energy_x_sr_lda(istate) += weight * e_x
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -48,7 +50,9 @@
|
|||||||
weight = final_weight_at_r_vector(i)
|
weight = final_weight_at_r_vector(i)
|
||||||
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
||||||
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
||||||
call ec_lda_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_c,vc_a,vc_b)
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
|
call ec_lda_sr(mu_local,rhoa(istate),rhob(istate),e_c,vc_a,vc_b)
|
||||||
energy_c_sr_lda(istate) += weight * e_c
|
energy_c_sr_lda(istate) += weight * e_c
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -122,8 +126,10 @@ END_PROVIDER
|
|||||||
weight = final_weight_at_r_vector(i)
|
weight = final_weight_at_r_vector(i)
|
||||||
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
||||||
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
||||||
call ec_lda_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_c,sr_vc_a,sr_vc_b)
|
double precision :: mu_local
|
||||||
call ex_lda_sr(mu_erf_dft,rhoa(istate),rhob(istate),e_x,sr_vx_a,sr_vx_b)
|
mu_local = mu_of_r_dft(i)
|
||||||
|
call ec_lda_sr(mu_local,rhoa(istate),rhob(istate),e_c,sr_vc_a,sr_vc_b)
|
||||||
|
call ex_lda_sr(mu_local,rhoa(istate),rhob(istate),e_x,sr_vx_a,sr_vx_b)
|
||||||
do j =1, ao_num
|
do j =1, ao_num
|
||||||
aos_sr_vc_alpha_lda_w(j,i,istate) = sr_vc_a * aos_in_r_array(j,i)*weight
|
aos_sr_vc_alpha_lda_w(j,i,istate) = sr_vc_a * aos_in_r_array(j,i)*weight
|
||||||
aos_sr_vc_beta_lda_w(j,i,istate) = sr_vc_b * aos_in_r_array(j,i)*weight
|
aos_sr_vc_beta_lda_w(j,i,istate) = sr_vc_b * aos_in_r_array(j,i)*weight
|
||||||
@ -147,8 +153,6 @@ END_PROVIDER
|
|||||||
double precision :: mu,weight
|
double precision :: mu,weight
|
||||||
double precision :: e_c,sr_vc_a,sr_vc_b,e_x,sr_vx_a,sr_vx_b
|
double precision :: e_c,sr_vc_a,sr_vc_b,e_x,sr_vx_a,sr_vx_b
|
||||||
double precision, allocatable :: rhoa(:),rhob(:)
|
double precision, allocatable :: rhoa(:),rhob(:)
|
||||||
double precision :: mu_local
|
|
||||||
mu_local = mu_erf_dft
|
|
||||||
allocate(rhoa(N_states), rhob(N_states))
|
allocate(rhoa(N_states), rhob(N_states))
|
||||||
do istate = 1, N_states
|
do istate = 1, N_states
|
||||||
do i = 1, n_points_final_grid
|
do i = 1, n_points_final_grid
|
||||||
@ -158,6 +162,8 @@ END_PROVIDER
|
|||||||
weight = final_weight_at_r_vector(i)
|
weight = final_weight_at_r_vector(i)
|
||||||
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
rhoa(istate) = one_e_dm_and_grad_alpha_in_r(4,i,istate)
|
||||||
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
rhob(istate) = one_e_dm_and_grad_beta_in_r(4,i,istate)
|
||||||
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
call ec_lda_sr(mu_local,rhoa(istate),rhob(istate),e_c,sr_vc_a,sr_vc_b)
|
call ec_lda_sr(mu_local,rhoa(istate),rhob(istate),e_c,sr_vc_a,sr_vc_b)
|
||||||
call ex_lda_sr(mu_local,rhoa(istate),rhob(istate),e_x,sr_vx_a,sr_vx_b)
|
call ex_lda_sr(mu_local,rhoa(istate),rhob(istate),e_x,sr_vx_a,sr_vx_b)
|
||||||
do j =1, ao_num
|
do j =1, ao_num
|
||||||
|
@ -36,8 +36,10 @@
|
|||||||
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
! inputs
|
! inputs
|
||||||
call GGA_sr_type_functionals(mu_erf_dft,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
call GGA_sr_type_functionals(mu_local,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
||||||
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
||||||
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
||||||
energy_x_sr_pbe(istate) += ex * weight
|
energy_x_sr_pbe(istate) += ex * weight
|
||||||
@ -135,8 +137,10 @@ END_PROVIDER
|
|||||||
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
! inputs
|
! inputs
|
||||||
call GGA_sr_type_functionals(mu_erf_dft,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
call GGA_sr_type_functionals(mu_local,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
||||||
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
||||||
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
||||||
vx_rho_a *= weight
|
vx_rho_a *= weight
|
||||||
@ -292,8 +296,10 @@ END_PROVIDER
|
|||||||
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
grad_rho_a_b += grad_rho_a(m) * grad_rho_b(m)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
double precision :: mu_local
|
||||||
|
mu_local = mu_of_r_dft(i)
|
||||||
! inputs
|
! inputs
|
||||||
call GGA_sr_type_functionals(mu_erf_dft,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
call GGA_sr_type_functionals(mu_local,rho_a,rho_b,grad_rho_a_2,grad_rho_b_2,grad_rho_a_b, & ! outputs exchange
|
||||||
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
ex,vx_rho_a,vx_rho_b,vx_grad_rho_a_2,vx_grad_rho_b_2,vx_grad_rho_a_b, & ! outputs correlation
|
||||||
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
ec,vc_rho_a,vc_rho_b,vc_grad_rho_a_2,vc_grad_rho_b_2,vc_grad_rho_a_b )
|
||||||
vx_rho_a *= weight
|
vx_rho_a *= weight
|
||||||
|
Loading…
Reference in New Issue
Block a user