1
0
mirror of https://github.com/TREX-CoE/irpjast.git synced 2024-07-22 18:57:41 +02:00

Accelerated Jeen

This commit is contained in:
Anthony Scemama 2021-01-17 19:24:56 +01:00
parent 907d62e5ac
commit 916ca5234c
4 changed files with 46 additions and 26 deletions

BIN
deriv_num

Binary file not shown.

View File

@ -1,11 +1,11 @@
BEGIN_PROVIDER [ double precision, factor_een ] BEGIN_PROVIDER [ double precision, factor_een ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! ElectronE-electron-nuclei contribution to Jastrow factor ! ElectronE-electron-nuclei contribution to Jastrow factor
END_DOC END_DOC
integer :: i, j, a, p, k, l, lmax, m integer :: i, j, a, p, k, l, lmax, m, n
double precision :: rjam_cn double precision :: cn, accu2, accu
double precision :: cn double precision :: f(nnuc,0:ncord-2,0:ncord-2)
factor_een = 0.0d0 factor_een = 0.0d0
@ -21,18 +21,17 @@ BEGIN_PROVIDER [ double precision, factor_een ]
m = (p - k - l) / 2 m = (p - k - l) / 2
do a = 1, nnuc do a = 1, nnuc
cn = cord_vect_lkp(l, k, p, typenuc_arr(a)) cn = cord_vect_lkp(l, k, p, typenuc_arr(a))
rjam_cn = rescale_een_n(2, a, m) * cn accu2 = 0.d0
factor_een = factor_een + rescale_een_e(1,2,k) * & do j = 2, nelec
(rescale_een_n(1,a,l) + rescale_een_n(2,a,l)) * & accu = 0.d0
rescale_een_n(1,a,m) * rjam_cn
do j = 3, nelec
rjam_cn = rescale_een_n(j, a, m) * cn
do i = 1, j - 1 do i = 1, j - 1
factor_een = factor_een + rescale_een_e(i,j,k) * & accu = accu + rescale_een_e(i,j,k) * &
(rescale_een_n(i,a,l) + rescale_een_n(j,a,l)) * & (rescale_een_n(i,a,l) + rescale_een_n(j,a,l)) * &
rescale_een_n(i,a,m) * rjam_cn rescale_een_n(i,a,m)
enddo enddo
accu2 = accu2 + accu * rescale_een_n(j, a, m)
enddo enddo
factor_een = factor_een + accu2 * cn
enddo enddo
enddo enddo
enddo enddo

BIN
jastrow

Binary file not shown.

View File

@ -107,24 +107,18 @@ BEGIN_PROVIDER [double precision, rescale_een_e, (nelec, nelec, 0:ncord)]
BEGIN_DOC BEGIN_DOC
! R = exp(-kappa r) for electron-electron for $J_{een}$ ! R = exp(-kappa r) for electron-electron for $J_{een}$
END_DOC END_DOC
integer :: i, j, l integer :: i, j, k, l
double precision :: x double precision :: x
double precision, parameter :: f = dexp(1.d0) double precision, parameter :: f = dexp(1.d0)
rescale_een_e(:, :, 0) = 1.d0 rescale_een_e(:, :, 0) = 1.d0
do j = 1, nelec do l = 1, ncord
do i = 1, j-1 k=0
x = dexp(-kappa * elec_dist(i, j))
rescale_een_e(i, j, 1) = x
rescale_een_e(j, i, 1) = x
enddo
enddo
do l = 2, ncord
do j = 1, nelec do j = 1, nelec
do i = 1, j-1 do i = 1, j-1
x = rescale_een_e(i, j, l-1) * rescale_een_e(i, j, 1) k = k+1
x = rescale_een_e_ij(k,l)
rescale_een_e(i, j, l) = x rescale_een_e(i, j, l) = x
rescale_een_e(j, i, l) = x rescale_een_e(j, i, l) = x
enddo enddo
@ -138,6 +132,33 @@ BEGIN_PROVIDER [double precision, rescale_een_e, (nelec, nelec, 0:ncord)]
enddo enddo
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [double precision, rescale_een_e_ij, (nelec*(nelec-1)/2, 0:ncord)]
implicit none
BEGIN_DOC
! R = exp(-kappa r) for electron-electron for $J_{een}$
END_DOC
integer :: i, j, l,k
double precision :: x
double precision, parameter :: f = dexp(1.d0)
rescale_een_e_ij(:, 0) = 1.d0
k=0
do j = 1, nelec
do i = 1, j-1
k = k+1
rescale_een_e_ij(k, 1) = dexp(-kappa * elec_dist(i, j))
enddo
enddo
do l = 2, ncord
do k=1,(nelec*nelec-nelec)/2
rescale_een_e_ij(k, l) = rescale_een_e_ij(k, l-1) * rescale_een_e_ij(k, 1)
enddo
enddo
END_PROVIDER
BEGIN_PROVIDER [double precision, rescale_een_n, (nelec, nnuc, 0:ncord)] BEGIN_PROVIDER [double precision, rescale_een_n, (nelec, nnuc, 0:ncord)]
implicit none implicit none
BEGIN_DOC BEGIN_DOC