2020-11-17 21:35:52 +01:00
|
|
|
BEGIN_PROVIDER [ integer, nelec ]
|
|
|
|
implicit none
|
|
|
|
BEGIN_DOC
|
|
|
|
! Number of electrons
|
|
|
|
END_DOC
|
2020-12-07 10:55:37 +01:00
|
|
|
nelec = 10
|
2020-11-17 21:35:52 +01:00
|
|
|
END_PROVIDER
|
|
|
|
|
2020-12-08 18:56:36 +01:00
|
|
|
BEGIN_PROVIDER [ integer, nelec_up ]
|
|
|
|
implicit none
|
|
|
|
BEGIN_DOC
|
|
|
|
! Number of alpha and beta electrons
|
|
|
|
END_DOC
|
|
|
|
nelec_up = 5
|
|
|
|
END_PROVIDER
|
|
|
|
|
2020-11-17 21:35:52 +01:00
|
|
|
|
|
|
|
BEGIN_PROVIDER [ double precision, elec_coord, (nelec, 3) ]
|
|
|
|
implicit none
|
|
|
|
BEGIN_DOC
|
|
|
|
! Electron coordinates
|
|
|
|
END_DOC
|
2020-12-07 10:55:37 +01:00
|
|
|
character(len=*), parameter :: FILE_NAME = "elec_coord.txt"
|
2020-12-08 13:08:23 +01:00
|
|
|
integer :: fu, rc, i, j
|
2020-12-07 10:55:37 +01:00
|
|
|
|
|
|
|
open(action='read', file=FILE_NAME, iostat=rc, newunit=fu)
|
|
|
|
|
2020-12-08 13:08:23 +01:00
|
|
|
do i = 1, nelec
|
|
|
|
read(fu, *) elec_coord(i, :)
|
|
|
|
end do
|
2020-12-07 10:55:37 +01:00
|
|
|
|
|
|
|
close(fu)
|
2020-12-08 18:56:36 +01:00
|
|
|
|
2020-11-17 21:35:52 +01:00
|
|
|
END_PROVIDER
|
|
|
|
|
|
|
|
BEGIN_PROVIDER [ double precision, elec_dist, (nelec, nelec) ]
|
|
|
|
implicit none
|
|
|
|
BEGIN_DOC
|
|
|
|
! e-e distance
|
|
|
|
END_DOC
|
2020-12-08 13:08:23 +01:00
|
|
|
integer :: i, j
|
|
|
|
double precision :: x, y, z
|
|
|
|
|
2020-11-17 21:35:52 +01:00
|
|
|
do j = 1, nelec
|
2020-12-08 13:08:23 +01:00
|
|
|
do i = 1, nelec
|
|
|
|
x = elec_coord(i, 1) - elec_coord(j, 1)
|
|
|
|
y = elec_coord(i, 2) - elec_coord(j, 2)
|
|
|
|
z = elec_coord(i, 3) - elec_coord(j, 3)
|
|
|
|
elec_dist(i, j) = dsqrt( x*x + y*y + z*z )
|
|
|
|
enddo
|
2020-11-17 21:35:52 +01:00
|
|
|
enddo
|
|
|
|
END_PROVIDER
|
|
|
|
|
|
|
|
BEGIN_PROVIDER [double precision, factor_ee]
|
|
|
|
implicit none
|
|
|
|
BEGIN_DOC
|
|
|
|
! Electron-electron contribution to Jastrow factor
|
|
|
|
END_DOC
|
2020-11-26 16:12:33 +01:00
|
|
|
integer :: i, j, p
|
2020-12-08 18:56:36 +01:00
|
|
|
double precision :: pow_ser, x, b_one
|
2020-12-08 13:08:23 +01:00
|
|
|
|
2020-11-25 16:59:53 +01:00
|
|
|
factor_ee = 0.0d0
|
|
|
|
|
2020-12-08 13:08:23 +01:00
|
|
|
do j = 1, nelec
|
2020-11-17 21:35:52 +01:00
|
|
|
do i = 1, nelec
|
2020-12-08 18:56:36 +01:00
|
|
|
x = rescale_ee(i, j)
|
|
|
|
pow_ser = 0.0d0
|
2020-11-17 21:35:52 +01:00
|
|
|
do p = 2, nbord
|
2020-12-04 01:05:07 +01:00
|
|
|
x = x * rescale_ee(i, j)
|
2020-12-08 13:08:23 +01:00
|
|
|
pow_ser = pow_ser + bord_vect(p + 1) * x
|
2020-11-17 21:35:52 +01:00
|
|
|
end do
|
2020-12-08 18:56:36 +01:00
|
|
|
|
|
|
|
if (i <= nelec_up .or. j >= nelec_up) then
|
|
|
|
b_one = bord_vect(1) * 0.5d0
|
|
|
|
else
|
|
|
|
b_one = bord_vect(1)
|
|
|
|
end if
|
|
|
|
|
|
|
|
factor_ee = factor_ee + b_one * rescale_ee(i, j) &
|
2020-12-08 13:08:23 +01:00
|
|
|
/ (1.0d0 + bord_vect(2) * rescale_ee(i, j)) + pow_ser
|
2020-11-17 21:35:52 +01:00
|
|
|
end do
|
|
|
|
end do
|
2020-12-04 01:05:07 +01:00
|
|
|
|
2020-11-17 21:35:52 +01:00
|
|
|
factor_ee = 0.5d0 * factor_ee
|
2020-12-08 18:56:36 +01:00
|
|
|
|
2020-11-17 21:35:52 +01:00
|
|
|
END_PROVIDER
|