Skip to content

Commit 8a80728

Browse files
committed
All-electron Jastrow fixed
1 parent 63d831a commit 8a80728

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

org/qmckl_jastrow_champ.org

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6768,7 +6768,9 @@ for p in range(0, cord_num+1):
67686768
pairs of electrons and raised to the power \(p\) defined by ~cord_num~:
67696769

67706770
\[
6771-
[g_e(r)_{ij}]^p = \exp\left(-p\,\kappa_\text{e}\, r_{ij}\right)
6771+
[g_e(r)_{ij}]^p = \begin{cases}
6772+
\exp\left(-p\,\kappa_\text{e}\, r_{ij}\right) & \text{for } i \ne j \\
6773+
0 & \text{for } i = j
67726774
\]
67736775

67746776
where \(r_{ij}\) is the matrix of electron-electron distances.
@@ -6959,6 +6961,7 @@ function qmckl_compute_een_rescaled_e_doc( &
69596961
do i = 1, elec_num
69606962
een_rescaled_e(i, j, l, nw) = dexp(-rescale_factor_ee * ee_distance(i, j, nw))**l
69616963
end do
6964+
een_rescaled_e(j, j, l, nw) = 0.d0
69626965
end do
69636966
end do
69646967
end do
@@ -7046,9 +7049,9 @@ return qmckl_compute_een_rescaled_e_doc (context,
70467049
#pragma omp simd
70477050
#endif
70487051
for (size_t j = 0; j < i; ++j) {
7049-
// een_rescaled_e_ij[j + kk + elec_pairs] = -rescale_factor_ee * ee_distance[j + i*elec_num + nw*e2];
70507052
ee1[j] = -rescale_factor_ee * ee2[j];
70517053
}
7054+
ee1[i] = 0.;
70527055
kk += i;
70537056
}
70547057

@@ -7193,6 +7196,7 @@ for i in range(elec_num):
71937196
for j in range(elec_num):
71947197
for p in range(0, cord_num+1):
71957198
een_rescaled_e[p,i,j] = np.exp(-kappa_e * p * elec_dist[i,j])
7199+
een_rescaled_e[:,i,i] = 0.0
71967200
#+end_src
71977201

71987202
#+NAME:test_ee
@@ -7771,7 +7775,6 @@ assert(qmckl_electron_provided(context));
77717775
for (int i=0 ; i < elec_num ; i++) {
77727776
for (int j=0 ; j < elec_num ; j++) {
77737777
for (int k=0 ; k < 4 ; k++) {
7774-
printf("nw=%d c=%d i=%d k=%d j=%d doc=%e hpc=%e\n", nw, c, i, k, j, een_rescaled_e_gl_doc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j], een_rescaled_e_gl_hpc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j]);
77757778
if (fabs(een_rescaled_e_gl_doc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j] - een_rescaled_e_gl_hpc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j]) > 1.e-12) {
77767779
printf("nw=%d c=%d i=%d k=%d j=%d doc=%e hpc=%e\n", nw, c, i, k, j, een_rescaled_e_gl_doc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j], een_rescaled_e_gl_hpc[nw*(cord_num + 1)*elec_num*4*elec_num + c*elec_num*4*elec_num + i*4*elec_num + k*elec_num + j]);
77777780
fflush(stdout);
@@ -10158,6 +10161,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
1015810161
:END:
1015910162

1016010163
#+NAME: qmckl_factor_een_naive_args
10164+
|-----------------------+----------------------------------------------------+--------+--------------------------------------|
1016110165
| Variable | Type | In/Out | Description |
1016210166
|-----------------------+----------------------------------------------------+--------+--------------------------------------|
1016310167
| ~context~ | ~qmckl_context~ | in | Global state |
@@ -10171,6 +10175,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
1017110175
| ~een_rescaled_e~ | ~double[walk_num][0:cord_num][elec_num][elec_num]~ | in | Electron-nucleus rescaled |
1017210176
| ~een_rescaled_n~ | ~double[walk_num][0:cord_num][nucl_num][elec_num]~ | in | Electron-nucleus rescaled factor |
1017310177
| ~factor_een~ | ~double[walk_num]~ | out | Electron-nucleus jastrow |
10178+
|-----------------------+----------------------------------------------------+--------+--------------------------------------|
1017410179

1017510180
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
1017610181
function qmckl_compute_jastrow_champ_factor_een_naive( &
@@ -10194,8 +10199,8 @@ function qmckl_compute_jastrow_champ_factor_een_naive( &
1019410199
real (c_double ) , intent(out) :: factor_een(walk_num)
1019510200
integer(qmckl_exit_code) :: info
1019610201

10197-
integer*8 :: i, a, j, l, k, p, m, n, nw
10198-
double precision :: accu, accu2, cn
10202+
integer*8 :: i, a, j, l, k, m, n, p, nw
10203+
double precision :: cn
1019910204

1020010205
info = QMCKL_SUCCESS
1020110206

@@ -10211,22 +10216,20 @@ function qmckl_compute_jastrow_champ_factor_een_naive( &
1021110216
do n = 1, dim_c_vector
1021210217
l = lkpm_combined_index(n, 1)
1021310218
k = lkpm_combined_index(n, 2)
10219+
p = lkpm_combined_index(n, 3)
1021410220
m = lkpm_combined_index(n, 4)
1021510221

1021610222
do a = 1, nucl_num
10217-
accu2 = 0.0d0
1021810223
cn = c_vector_full(a, n)
10224+
if (cn == 0.d0) cycle
1021910225
do j = 1, elec_num
10220-
accu = 0.0d0
1022110226
do i = 1, j-1
10222-
10223-
accu = accu + een_rescaled_e(i,j,k,nw) * &
10227+
factor_een(nw) = factor_een(nw) + cn*( &
10228+
een_rescaled_e(i,j,k,nw) * &
1022410229
(een_rescaled_n(i,a,l,nw) + een_rescaled_n(j,a,l,nw)) * &
10225-
(een_rescaled_n(i,a,m,nw) * een_rescaled_n(j,a,m,nw))
10230+
(een_rescaled_n(i,a,m,nw) * een_rescaled_n(j,a,m,nw)) )
1022610231
end do
10227-
accu2 = accu2 + accu
1022810232
end do
10229-
factor_een(nw) = factor_een(nw) + accu2 * cn
1023010233
end do
1023110234
end do
1023210235
end do
@@ -10391,7 +10394,8 @@ qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
1039110394
#+end_src
1039210395

1039310396
**** Test :noexport:
10394-
#+begin_src python :results output :exports none :noweb yes
10397+
#+NAME: test_factor_een
10398+
#+begin_src python :exports none :noweb yes
1039510399
import numpy as np
1039610400

1039710401
<<jastrow_data>>
@@ -10414,26 +10418,26 @@ for n in range(0, dim_c_vector):
1041410418
for j in range(0, elec_num):
1041510419
accu = 0.0
1041610420
for i in range(0, elec_num):
10417-
accu = accu + een_rescaled_e[i,j,k] * \
10418-
een_rescaled_n[a,i,m]
10419-
accu2 = accu2 + accu * een_rescaled_n[a,j,m+l]
10421+
accu = accu + een_rescaled_e[k,j,i] * \
10422+
een_rescaled_n[m,a,i]
10423+
accu2 = accu2 + accu * een_rescaled_n[m+l,a,j]
1042010424
factor_een = factor_een + accu2 * cn
1042110425

10422-
print("factor_een:",factor_een)
10426+
return factor_een
1042310427
#+end_src
1042410428

10425-
#+RESULTS:
10426-
: factor_een: -0.382580260174321
10429+
#+RESULTS: test_factor_een
10430+
: -0.06433795806199133
1042710431

1042810432

10429-
#+begin_src c :tangle (eval c_test)
10433+
#+begin_src c :tangle (eval c_test) :noweb yes
1043010434
/* Check if Jastrow is properly initialized */
1043110435
assert(qmckl_jastrow_champ_provided(context));
1043210436

1043310437
double factor_een[walk_num];
1043410438
rc = qmckl_get_jastrow_champ_factor_een(context, &(factor_een[0]),walk_num);
1043510439

10436-
assert(fabs(factor_een[0] + 0.382580260174321) < 1e-12);
10440+
assert(fabs(factor_een[0] - (<<test_factor_een()>>)) < 1e-12);
1043710441

1043810442
{
1043910443
double factor_een_naive[walk_num];

0 commit comments

Comments
 (0)