@@ -6768,7 +6768,9 @@ for p in range(0, cord_num+1):
6768
6768
pairs of electrons and raised to the power \(p\) defined by ~cord_num~:
6769
6769
6770
6770
\[
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
6772
6774
\]
6773
6775
6774
6776
where \(r_{ij}\) is the matrix of electron-electron distances.
@@ -6959,6 +6961,7 @@ function qmckl_compute_een_rescaled_e_doc( &
6959
6961
do i = 1, elec_num
6960
6962
een_rescaled_e(i, j, l, nw) = dexp(-rescale_factor_ee * ee_distance(i, j, nw))**l
6961
6963
end do
6964
+ een_rescaled_e(j, j, l, nw) = 0.d0
6962
6965
end do
6963
6966
end do
6964
6967
end do
@@ -7046,9 +7049,9 @@ return qmckl_compute_een_rescaled_e_doc (context,
7046
7049
#pragma omp simd
7047
7050
#endif
7048
7051
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];
7050
7052
ee1[j] = -rescale_factor_ee * ee2[j];
7051
7053
}
7054
+ ee1[i] = 0.;
7052
7055
kk += i;
7053
7056
}
7054
7057
@@ -7193,6 +7196,7 @@ for i in range(elec_num):
7193
7196
for j in range(elec_num):
7194
7197
for p in range(0, cord_num+1):
7195
7198
een_rescaled_e[p,i,j] = np.exp(-kappa_e * p * elec_dist[i,j])
7199
+ een_rescaled_e[:,i,i] = 0.0
7196
7200
#+end_src
7197
7201
7198
7202
#+NAME:test_ee
@@ -7771,7 +7775,6 @@ assert(qmckl_electron_provided(context));
7771
7775
for (int i=0 ; i < elec_num ; i++) {
7772
7776
for (int j=0 ; j < elec_num ; j++) {
7773
7777
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]);
7775
7778
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) {
7776
7779
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]);
7777
7780
fflush(stdout);
@@ -10158,6 +10161,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
10158
10161
:END:
10159
10162
10160
10163
#+NAME: qmckl_factor_een_naive_args
10164
+ |-----------------------+----------------------------------------------------+--------+--------------------------------------|
10161
10165
| Variable | Type | In/Out | Description |
10162
10166
|-----------------------+----------------------------------------------------+--------+--------------------------------------|
10163
10167
| ~context~ | ~qmckl_context~ | in | Global state |
@@ -10171,6 +10175,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
10171
10175
| ~een_rescaled_e~ | ~double[walk_num][0:cord_num][elec_num][elec_num]~ | in | Electron-nucleus rescaled |
10172
10176
| ~een_rescaled_n~ | ~double[walk_num][0:cord_num][nucl_num][elec_num]~ | in | Electron-nucleus rescaled factor |
10173
10177
| ~factor_een~ | ~double[walk_num]~ | out | Electron-nucleus jastrow |
10178
+ |-----------------------+----------------------------------------------------+--------+--------------------------------------|
10174
10179
10175
10180
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
10176
10181
function qmckl_compute_jastrow_champ_factor_een_naive( &
@@ -10194,8 +10199,8 @@ function qmckl_compute_jastrow_champ_factor_een_naive( &
10194
10199
real (c_double ) , intent(out) :: factor_een(walk_num)
10195
10200
integer(qmckl_exit_code) :: info
10196
10201
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
10199
10204
10200
10205
info = QMCKL_SUCCESS
10201
10206
@@ -10211,22 +10216,20 @@ function qmckl_compute_jastrow_champ_factor_een_naive( &
10211
10216
do n = 1, dim_c_vector
10212
10217
l = lkpm_combined_index(n, 1)
10213
10218
k = lkpm_combined_index(n, 2)
10219
+ p = lkpm_combined_index(n, 3)
10214
10220
m = lkpm_combined_index(n, 4)
10215
10221
10216
10222
do a = 1, nucl_num
10217
- accu2 = 0.0d0
10218
10223
cn = c_vector_full(a, n)
10224
+ if (cn == 0.d0) cycle
10219
10225
do j = 1, elec_num
10220
- accu = 0.0d0
10221
10226
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) * &
10224
10229
(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)) )
10226
10231
end do
10227
- accu2 = accu2 + accu
10228
10232
end do
10229
- factor_een(nw) = factor_een(nw) + accu2 * cn
10230
10233
end do
10231
10234
end do
10232
10235
end do
@@ -10391,7 +10394,8 @@ qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
10391
10394
#+end_src
10392
10395
10393
10396
**** 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
10395
10399
import numpy as np
10396
10400
10397
10401
<<jastrow_data>>
@@ -10414,26 +10418,26 @@ for n in range(0, dim_c_vector):
10414
10418
for j in range(0, elec_num):
10415
10419
accu = 0.0
10416
10420
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 ]
10420
10424
factor_een = factor_een + accu2 * cn
10421
10425
10422
- print(" factor_een:",factor_een)
10426
+ return factor_een
10423
10427
#+end_src
10424
10428
10425
- #+RESULTS:
10426
- : factor_een: -0.382580260174321
10429
+ #+RESULTS: test_factor_een
10430
+ : -0.06433795806199133
10427
10431
10428
10432
10429
- #+begin_src c :tangle (eval c_test)
10433
+ #+begin_src c :tangle (eval c_test) :noweb yes
10430
10434
/* Check if Jastrow is properly initialized */
10431
10435
assert(qmckl_jastrow_champ_provided(context));
10432
10436
10433
10437
double factor_een[walk_num];
10434
10438
rc = qmckl_get_jastrow_champ_factor_een(context, &(factor_een[0]),walk_num);
10435
10439
10436
- assert(fabs(factor_een[0] + 0.382580260174321 ) < 1e-12);
10440
+ assert(fabs(factor_een[0] - (<<test_factor_een()>>) ) < 1e-12);
10437
10441
10438
10442
{
10439
10443
double factor_een_naive[walk_num];
0 commit comments