mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 12:23:43 +01:00
new jpsiking is working on He
This commit is contained in:
parent
974a4977ac
commit
869efdd077
@ -1,7 +1,7 @@
|
|||||||
program test_j_mu_of_r
|
program test_j_mu_of_r
|
||||||
implicit none
|
implicit none
|
||||||
! call routine_deb_j_psi
|
call routine_deb_j_psi
|
||||||
call routine_deb_denom
|
! call routine_deb_denom
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine routine_deb_j_psi
|
subroutine routine_deb_j_psi
|
||||||
@ -9,7 +9,7 @@ subroutine routine_deb_j_psi
|
|||||||
integer :: ipoint,k
|
integer :: ipoint,k
|
||||||
double precision :: r2(3), weight, dr, r1(3), r1bis(3)
|
double precision :: r2(3), weight, dr, r1(3), r1bis(3)
|
||||||
double precision :: accu_grad(3)
|
double precision :: accu_grad(3)
|
||||||
double precision :: jast,grad_jast(3),j_bump,jastrow_psi
|
double precision :: jast,grad_jast(3),j_bump,jastrow_psi,grad_jast_bis(3)
|
||||||
double precision :: jast_p,jast_m,num_grad_jast(3)
|
double precision :: jast_p,jast_m,num_grad_jast(3)
|
||||||
|
|
||||||
dr = 0.00001d0
|
dr = 0.00001d0
|
||||||
@ -28,11 +28,11 @@ subroutine routine_deb_j_psi
|
|||||||
do k = 1, 3
|
do k = 1, 3
|
||||||
r1bis= r1
|
r1bis= r1
|
||||||
r1bis(k) += dr
|
r1bis(k) += dr
|
||||||
jast_p = jastrow_psi(r1bis, r2)
|
call get_grad_r1_jastrow_psi(r1bis,r2,grad_jast_bis,jast_p)
|
||||||
|
|
||||||
r1bis= r1
|
r1bis= r1
|
||||||
r1bis(k) -= dr
|
r1bis(k) -= dr
|
||||||
jast_m = jastrow_psi(r1bis, r2)
|
call get_grad_r1_jastrow_psi(r1bis,r2,grad_jast_bis,jast_m)
|
||||||
|
|
||||||
num_grad_jast(k) = (jast_p - jast_m)/(2.d0* dr)
|
num_grad_jast(k) = (jast_p - jast_m)/(2.d0* dr)
|
||||||
norm += num_grad_jast(k)*num_grad_jast(k)
|
norm += num_grad_jast(k)*num_grad_jast(k)
|
||||||
@ -86,19 +86,19 @@ subroutine routine_deb_denom
|
|||||||
r1(1:3) = final_grid_points(1:3,ipoint)
|
r1(1:3) = final_grid_points(1:3,ipoint)
|
||||||
weight = final_weight_at_r_vector(ipoint)
|
weight = final_weight_at_r_vector(ipoint)
|
||||||
call give_all_mos_and_grad_at_r(r1,mos_array_r1,mos_grad_array_r1)
|
call give_all_mos_and_grad_at_r(r1,mos_array_r1,mos_grad_array_r1)
|
||||||
call denom_jpsi(i,j,mos_array_r1,mos_grad_array_r1,mos_array_r2,jast, grad_jast)
|
call denom_jpsi(i,j,a_boys, mos_array_r1,mos_grad_array_r1,mos_array_r2,jast, grad_jast)
|
||||||
double precision :: norm,error
|
double precision :: norm,error
|
||||||
norm = 0.D0
|
norm = 0.D0
|
||||||
do k = 1, 3
|
do k = 1, 3
|
||||||
r1bis= r1
|
r1bis= r1
|
||||||
r1bis(k) += dr
|
r1bis(k) += dr
|
||||||
call give_all_mos_and_grad_at_r(r1bis,mos_array_r1,mos_grad_array_r1)
|
call give_all_mos_and_grad_at_r(r1bis,mos_array_r1,mos_grad_array_r1)
|
||||||
call denom_jpsi(i,j,mos_array_r1,mos_grad_array_r1,mos_array_r2,jast_p, grad_jast_bis)
|
call denom_jpsi(i,j,a_boys, mos_array_r1,mos_grad_array_r1,mos_array_r2,jast_p, grad_jast_bis)
|
||||||
|
|
||||||
r1bis= r1
|
r1bis= r1
|
||||||
r1bis(k) -= dr
|
r1bis(k) -= dr
|
||||||
call give_all_mos_and_grad_at_r(r1bis,mos_array_r1,mos_grad_array_r1)
|
call give_all_mos_and_grad_at_r(r1bis,mos_array_r1,mos_grad_array_r1)
|
||||||
call denom_jpsi(i,j,mos_array_r1,mos_grad_array_r1,mos_array_r2,jast_m, grad_jast_bis)
|
call denom_jpsi(i,j,a_boys, mos_array_r1,mos_grad_array_r1,mos_array_r2,jast_m, grad_jast_bis)
|
||||||
|
|
||||||
num_grad_jast(k) = (jast_p - jast_m)/(2.d0* dr)
|
num_grad_jast(k) = (jast_p - jast_m)/(2.d0* dr)
|
||||||
norm += num_grad_jast(k)*num_grad_jast(k)
|
norm += num_grad_jast(k)*num_grad_jast(k)
|
||||||
|
@ -56,29 +56,25 @@ subroutine get_grad_r1_jastrow_psi(r1,r2,grad_j_psi_r1,jast)
|
|||||||
integer :: i,j,a,b
|
integer :: i,j,a,b
|
||||||
double precision, allocatable :: mos_array_r1(:), mos_array_r2(:)
|
double precision, allocatable :: mos_array_r1(:), mos_array_r2(:)
|
||||||
double precision, allocatable :: mos_grad_array_r1(:,:),mos_grad_array_r2(:,:)
|
double precision, allocatable :: mos_grad_array_r1(:,:),mos_grad_array_r2(:,:)
|
||||||
|
double precision :: num_j, denom_j, num_j_grad(3), denom_j_grad(3),delta,coef
|
||||||
|
double precision :: inv_denom_j
|
||||||
allocate(mos_array_r1(mo_num), mos_array_r2(mo_num))
|
allocate(mos_array_r1(mo_num), mos_array_r2(mo_num))
|
||||||
allocate(mos_grad_array_r1(3,mo_num), mos_grad_array_r2(3,mo_num))
|
allocate(mos_grad_array_r1(3,mo_num), mos_grad_array_r2(3,mo_num))
|
||||||
|
delta = a_boys
|
||||||
call give_all_mos_and_grad_at_r(r1,mos_array_r1,mos_grad_array_r1)
|
call give_all_mos_and_grad_at_r(r1,mos_array_r1,mos_grad_array_r1)
|
||||||
call give_all_mos_and_grad_at_r(r2,mos_array_r2,mos_grad_array_r2)
|
call give_all_mos_and_grad_at_r(r2,mos_array_r2,mos_grad_array_r2)
|
||||||
double precision :: eps,coef, numerator(3),denominator
|
|
||||||
double precision :: phi_i_phi_j
|
|
||||||
eps = a_boys
|
|
||||||
grad_j_psi_r1 = 0.d0
|
grad_j_psi_r1 = 0.d0
|
||||||
jast = 0.d0
|
jast = 0.d0
|
||||||
do i = 1, elec_beta_num ! r1
|
do i = 1, elec_beta_num ! r1
|
||||||
do j = 1, elec_alpha_num ! r2
|
do j = 1, elec_alpha_num ! r2
|
||||||
phi_i_phi_j = mos_array_r1(i) * mos_array_r2(j) + eps
|
call denom_jpsi(i,j,delta,mos_array_r1,mos_grad_array_r1,mos_array_r2,denom_j, denom_j_grad)
|
||||||
denominator = 1.d0/phi_i_phi_j
|
inv_denom_j = 1.d0/denom_j
|
||||||
denominator *= denominator
|
|
||||||
do a = elec_beta_num+1, mo_num ! r1
|
do a = elec_beta_num+1, mo_num ! r1
|
||||||
do b = elec_alpha_num+1, mo_num ! r2
|
do b = elec_alpha_num+1, mo_num ! r2
|
||||||
|
call numerator_psi(a,b,mos_array_r1,mos_grad_array_r1,mos_array_r2,num_j, num_j_grad)
|
||||||
coef = c_ij_ab_jastrow(b,a,j,i)
|
coef = c_ij_ab_jastrow(b,a,j,i)
|
||||||
jast += phi_i_phi_j * mos_array_r2(b) * mos_array_r1(a) * coef
|
jast += coef * num_j * inv_denom_j
|
||||||
! print*,b,a,j,i,c_ij_ab_jastrow(b,a,j,i)
|
grad_j_psi_r1 += coef * (num_j_grad * denom_j - num_j * denom_j_grad) * inv_denom_j * inv_denom_j
|
||||||
! print*,'jast = ',jast
|
|
||||||
numerator(:) = mos_array_r2(b) * mos_grad_array_r1(:,a) &
|
|
||||||
* phi_i_phi_j - mos_array_r1(a) * mos_array_r2(b) * mos_array_r2(j) * mos_grad_array_r1(:,i)
|
|
||||||
grad_j_psi_r1 += coef * numerator*denominator
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -100,14 +96,12 @@ subroutine get_grad_r1_jastrow_psi(r1,r2,grad_j_psi_r1,jast)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
subroutine denom_jpsi(i,j,mos_array_r1,mos_grad_array_r1,mos_array_r2,denom, grad_denom)
|
subroutine denom_jpsi(i,j,delta,mos_array_r1,mos_grad_array_r1,mos_array_r2,denom, grad_denom)
|
||||||
implicit none
|
implicit none
|
||||||
integer, intent(in) :: i,j
|
integer, intent(in) :: i,j
|
||||||
double precision, intent(in) :: mos_array_r1(mo_num),mos_grad_array_r1(3,mo_num),mos_array_r2(mo_num)
|
double precision, intent(in) :: mos_array_r1(mo_num),mos_grad_array_r1(3,mo_num),mos_array_r2(mo_num),delta
|
||||||
double precision, intent(out) :: denom, grad_denom(3)
|
double precision, intent(out) :: denom, grad_denom(3)
|
||||||
double precision :: coef,phi_i_phi_j,inv_phi_i_phi_j,inv_phi_i_phi_j_2
|
double precision :: coef,phi_i_phi_j,inv_phi_i_phi_j,inv_phi_i_phi_j_2
|
||||||
denom = 0.d0
|
|
||||||
grad_denom = 0.d0
|
|
||||||
phi_i_phi_j = mos_array_r1(i) * mos_array_r2(j)
|
phi_i_phi_j = mos_array_r1(i) * mos_array_r2(j)
|
||||||
if(phi_i_phi_j /= 0.d0)then
|
if(phi_i_phi_j /= 0.d0)then
|
||||||
inv_phi_i_phi_j = 1.d0/phi_i_phi_j
|
inv_phi_i_phi_j = 1.d0/phi_i_phi_j
|
||||||
@ -116,7 +110,15 @@ subroutine denom_jpsi(i,j,mos_array_r1,mos_grad_array_r1,mos_array_r2,denom, gra
|
|||||||
inv_phi_i_phi_j = huge(1.0)
|
inv_phi_i_phi_j = huge(1.0)
|
||||||
inv_phi_i_phi_j_2 = huge(1.d0)
|
inv_phi_i_phi_j_2 = huge(1.d0)
|
||||||
endif
|
endif
|
||||||
denom += phi_i_phi_j + a_boys * inv_phi_i_phi_j
|
denom = phi_i_phi_j + delta * inv_phi_i_phi_j
|
||||||
grad_denom(:) += (1.d0 - a_boys*inv_phi_i_phi_j_2) * mos_array_r2(j) * mos_grad_array_r1(:,i)
|
grad_denom(:) = (1.d0 - delta*inv_phi_i_phi_j_2) * mos_array_r2(j) * mos_grad_array_r1(:,i)
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine numerator_psi(a,b,mos_array_r1,mos_grad_array_r1,mos_array_r2,num, grad_num)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: a,b
|
||||||
|
double precision, intent(in) :: mos_array_r1(mo_num),mos_grad_array_r1(3,mo_num),mos_array_r2(mo_num)
|
||||||
|
double precision, intent(out) :: num, grad_num(3)
|
||||||
|
num = mos_array_r1(a) * mos_array_r2(b)
|
||||||
|
grad_num(:) = mos_array_r2(b) * mos_grad_array_r1(:,a)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user