1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2025-04-30 04:15:00 +02:00
This commit is contained in:
Anthony Scemama 2024-12-12 11:17:45 +01:00
parent 77c4eb9702
commit 592cb52ba0
4 changed files with 118 additions and 315 deletions

View File

@ -10,7 +10,7 @@ double n2_nucl_coord[3][n2_nucl_num] =
#define n2_elec_up_num ((int64_t) 5)
#define n2_elec_dn_num ((int64_t) 5)
#define n2_elec_num ((int64_t) 10)
#define n2_walk_num ((int64_t) 1)
#define n2_walk_num ((int64_t) 2)
double n2_elec_coord[n2_walk_num][n2_elec_num][3] = { {
{-0.250655104764153 , 0.503070975550133 , -0.166554344502303},
@ -22,6 +22,16 @@ double n2_elec_coord[n2_walk_num][n2_elec_num][3] = { {
{-0.232271834949124 , -1.059321673434182E-002 , -0.504862241464867},
{ 1.09360863531826 , -2.036103063808752E-003 , -2.702796910818986E-002},
{-0.108090166832043 , 0.189161729653261 , 2.15398313919894},
{ 0.397978144318712 , -0.254277292595981 , 2.54553335476344}},{
{-0.108090166832043 , 0.189161729653261 , 2.15398313919894},
{ 1.09360863531826 , -2.036103063808752E-003 , -2.702796910818986E-002},
{-0.232271834949124 , -1.059321673434182E-002 , -0.504862241464867},
{-0.127732483187947 , -0.138975497694196 , -8.669850480215846E-002},
{ 0.766647499681200 , -0.293515395797937 , 3.66454589201239 },
{-4.901239896295210E-003 , -1.120440036458986E-002 , 1.99761909330422 },
{ 1.61335569047166 , -0.615556732874863 , -1.43165470979934 },
{-0.587812193472177 , -0.128751981129274 , 0.187773606533075},
{-0.250655104764153 , 0.503070975550133 , -0.166554344502303},
{ 0.397978144318712 , -0.254277292595981 , 2.54553335476344}}};
/* Jastrow related */

View File

@ -83,7 +83,6 @@
c_{lkp\alpha} \left[ g_\text{e}({r}_{ij}) \right]^k
\left[ \left[ g_\alpha({R}_{i\alpha}) \right]^l + \left[ g_\alpha({R}_{j\alpha}) \right]^l \right]
\left[ g_\alpha({R}_{i\,\alpha}) \, g_\alpha({R}_{j\alpha}) \right]^{m} \\
\end{eqnarray*}
& = & \frac{1}{2}
\sum_{\alpha=1}^{N_{\text{nucl}}}
\sum_{i=1}^{N_{\text{elec}}}
@ -92,6 +91,7 @@
\left[ \left[ g_\alpha({R}_{i\alpha}) \right]^{l+m} \left[ g_\alpha({R}_{j\alpha}) \right]^{m} +
\left[ g_\alpha({R}_{i\alpha}) \right]^{l} \left[
g_\alpha({R}_{j\alpha}) \right]^{l+m} \right] \\
\end{eqnarray*}
* Headers :noexport:
#+begin_src elisp :noexport :results none
@ -5649,7 +5649,7 @@ function qmckl_compute_en_distance_rescaled_gl_doc(context, elec_num, nucl_num,
real (c_double ) , intent(in) :: rescale_factor_en(nucl_num)
integer (c_int64_t) , intent(in) , value :: walk_num
real (c_double ) , intent(in) :: elec_coord(elec_num,walk_num,3)
real (c_double ) , intent(in) :: nucl_coord(elec_num,3)
real (c_double ) , intent(in) :: nucl_coord(nucl_num,3)
real (c_double ) , intent(out) :: en_distance_rescaled_gl(4,elec_num,nucl_num,walk_num)
integer(qmckl_exit_code) :: info
@ -6838,14 +6838,24 @@ for l in range(0,cord_num+1):
for ii in range(0,4):
een_rescaled_e_gl[i,ii,j,l] = een_rescaled_e_gl[i,ii,j,l] * een_rescaled_e[i,j,l]
print(" een_rescaled_e_gl[1, 1, 3, 1] = ",een_rescaled_e_gl[0, 0, 2, 1])
print(" een_rescaled_e_gl[1, 1, 4, 1] = ",een_rescaled_e_gl[0, 0, 3, 1])
print(" een_rescaled_e_gl[1, 1, 5, 1] = ",een_rescaled_e_gl[0, 0, 4, 1])
print(" een_rescaled_e_gl[2, 1, 4, 2] = ",een_rescaled_e_gl[1, 0, 3, 2])
print(" een_rescaled_e_gl[2, 1, 5, 2] = ",een_rescaled_e_gl[1, 0, 4, 2])
print(" een_rescaled_e_gl[2, 1, 6, 2] = ",een_rescaled_e_gl[1, 0, 5, 2])
print(" een_rescaled_e_gl[e, 4, e, c] ")
print(" een_rescaled_e_gl[0, 0, 2, 1] = ",een_rescaled_e_gl[0, 0, 2, 1])
print(" een_rescaled_e_gl[0, 0, 3, 1] = ",een_rescaled_e_gl[0, 0, 3, 1])
print(" een_rescaled_e_gl[0, 0, 4, 1] = ",een_rescaled_e_gl[0, 0, 4, 1])
print(" een_rescaled_e_gl[1, 0, 5, 2] = ",een_rescaled_e_gl[1, 0, 3, 2])
print(" een_rescaled_e_gl[1, 0, 4, 2] = ",een_rescaled_e_gl[1, 0, 4, 2])
print(" een_rescaled_e_gl[1, 0, 5, 2] = ",een_rescaled_e_gl[1, 0, 5, 2])
#+end_src
#+RESULTS: een_e_gl
: een_rescaled_e_gl[e, 4, e, c]
: een_rescaled_e_gl[0, 0, 2, 1] = 0.09831391870751387
: een_rescaled_e_gl[0, 0, 3, 1] = 0.017204157459682526
: een_rescaled_e_gl[0, 0, 4, 1] = 0.013345768421098646
: een_rescaled_e_gl[1, 0, 5, 2] = 0.03733086358273962
: een_rescaled_e_gl[1, 0, 4, 2] = 0.004922634822943517
: een_rescaled_e_gl[1, 0, 5, 2] = 0.5416751547830982
#+begin_src c :tangle (eval c_test)
double een_rescaled_e_gl[walk_num][(cord_num + 1)][elec_num][4][elec_num];
size_max=walk_num*(cord_num + 1)*elec_num*4*elec_num;
@ -6853,12 +6863,13 @@ rc = qmckl_get_jastrow_champ_een_rescaled_e_gl(context,
&(een_rescaled_e_gl[0][0][0][0][0]),size_max);
// value of (0,0,0,2,1)
assert(fabs(een_rescaled_e_gl[0][1][0][0][2] + 0.09831391870751387 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][1][0][0][3] + 0.017204157459682526 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][1][0][0][4] + 0.013345768421098641 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][1][0][3] + 0.03733086358273962 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][1][0][4] + 0.004922634822943517 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][1][0][5] + 0.5416751547830984 ) < 1.e-12);
printf("%e \n", fabs(een_rescaled_e_gl[0][1][2][0][0] - 0.09831391870751387 ));
assert(fabs(een_rescaled_e_gl[0][1][2][0][0] - 0.09831391870751387 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][1][3][0][0] - 0.017204157459682526 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][1][4][0][0] - 0.013345768421098641 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][3][0][1] - 0.03733086358273962 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][4][0][1] - 0.004922634822943517 ) < 1.e-12);
assert(fabs(een_rescaled_e_gl[0][2][5][0][1] - 0.5416751547830984 ) < 1.e-12);
#+end_src
*** Electron-nucleus rescaled distances in $J_\text{eeN}$
@ -9991,7 +10002,7 @@ qmckl_compute_jastrow_champ_factor_een_gl(const qmckl_context context,
double* const factor_een_gl)
{
#ifdef HAVE_HPC
return qmckl_compute_jastrow_champ_factor_een_gl_hpc
return qmckl_compute_jastrow_champ_factor_een_gl_doc
#else
return qmckl_compute_jastrow_champ_factor_een_gl_doc
#endif
@ -10002,251 +10013,7 @@ qmckl_compute_jastrow_champ_factor_een_gl(const qmckl_context context,
factor_een_gl);
}
#+end_src
***** HPC implementation :noexport:
#+CALL: generate_private_c_header(table=qmckl_factor_een_gl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_jastrow_champ_factor_een_gl_hpc" )
#+RESULTS:
#+begin_src c :tangle (eval h_private_func) :comments org
qmckl_exit_code
qmckl_compute_jastrow_champ_factor_een_gl_hpc (
const qmckl_context context,
const int64_t walk_num,
const int64_t elec_num,
const int64_t nucl_num,
const int64_t cord_num,
const int64_t dim_c_vector,
const double* c_vector_full,
const int64_t* lkpm_combined_index,
const double* tmp_c,
const double* dtmp_c,
const double* een_rescaled_n,
const double* een_rescaled_n_gl,
double* const factor_een_gl );
#+end_src
#+begin_src c :tangle (eval c) :comments org
qmckl_exit_code
qmckl_compute_jastrow_champ_factor_een_gl_hpc(const qmckl_context context,
const int64_t walk_num,
const int64_t elec_num,
const int64_t nucl_num,
const int64_t cord_num,
const int64_t dim_c_vector,
const double *c_vector_full,
const int64_t *lkpm_combined_index,
const double *tmp_c,
const double *dtmp_c,
const double *een_rescaled_n,
const double *een_rescaled_n_gl,
double* const factor_een_gl)
{
int64_t info = QMCKL_SUCCESS;
if (context == QMCKL_NULL_CONTEXT) return QMCKL_INVALID_CONTEXT;
if (walk_num <= 0) return QMCKL_INVALID_ARG_2;
if (elec_num <= 0) return QMCKL_INVALID_ARG_3;
if (nucl_num <= 0) return QMCKL_INVALID_ARG_4;
if (cord_num < 0) return QMCKL_INVALID_ARG_5;
if (cord_num == 0) {
#ifdef HAVE_OPENMP
#pragma omp parallel for
#endif
for (size_t nw = 0; nw < (size_t) walk_num; ++nw) {
memset(&factor_een_gl[elec_num*4*nw], 0, elec_num*4*sizeof(double));
}
return QMCKL_SUCCESS;
}
const size_t elec_num2 = elec_num << 1;
const size_t elec_num3 = elec_num * 3;
#ifdef HAVE_OPENMP
#pragma omp parallel for
#endif
for (size_t nw = 0; nw < (size_t) walk_num; ++nw) {
bool touched = false;
double* const restrict factor_een_gl_0nw = &(factor_een_gl[elec_num*4*nw]);
for (size_t n = 0; n < (size_t) dim_c_vector; ++n) {
const size_t l = lkpm_combined_index[n];
const size_t k = lkpm_combined_index[n+ dim_c_vector];
const size_t m = lkpm_combined_index[n+3*dim_c_vector];
const size_t en = elec_num*nucl_num;
const size_t len = l*en;
const size_t len4 = len << 2;
const size_t cn = cord_num*nw;
const size_t c1 = cord_num+1;
const size_t addr0 = en*(m+c1*(k+cn));
const size_t addr1 = en*(m+cn);
const double* restrict tmp_c_mkn = &(tmp_c[addr0]);
const double* restrict tmp_c_mlkn = tmp_c_mkn + len;
const double* restrict een_rescaled_n_mnw = &(een_rescaled_n[addr1]);
const double* restrict een_rescaled_n_mlnw = een_rescaled_n_mnw + len;
const double* restrict dtmp_c_mknw = &(dtmp_c[addr0 << 2]);
const double* restrict dtmp_c_mlknw = dtmp_c_mknw + len4;
const double* restrict een_rescaled_n_gl_mnw = &(een_rescaled_n_gl[addr1 << 2]);
const double* restrict een_rescaled_n_gl_mlnw = een_rescaled_n_gl_mnw + len4;
for (size_t a = 0; a < (size_t) nucl_num; a++) {
double cn = c_vector_full[a+n*nucl_num];
if (cn == 0.0) continue;
const size_t ishift = elec_num*a;
const size_t ishift4 = ishift << 2;
const double* restrict tmp_c_amlkn = tmp_c_mlkn + ishift;
const double* restrict tmp_c_amkn = tmp_c_mkn + ishift;
const double* restrict een_rescaled_n_amnw = een_rescaled_n_mnw + ishift;
const double* restrict een_rescaled_n_amlnw = een_rescaled_n_mlnw + ishift;
const double* restrict dtmp_c_0amknw = dtmp_c_mknw + ishift4;
const double* restrict dtmp_c_0amlknw = dtmp_c_mlknw + ishift4;
const double* restrict een_rescaled_n_gl_0amnw = een_rescaled_n_gl_mnw + ishift4;
const double* restrict een_rescaled_n_gl_0amlnw = een_rescaled_n_gl_mlnw + ishift4;
const double* restrict dtmp_c_1amknw = dtmp_c_0amknw + elec_num;
const double* restrict dtmp_c_1amlknw = dtmp_c_0amlknw + elec_num;
const double* restrict dtmp_c_2amknw = dtmp_c_0amknw + elec_num2;
const double* restrict dtmp_c_2amlknw = dtmp_c_0amlknw + elec_num2;
const double* restrict dtmp_c_3amknw = dtmp_c_0amknw + elec_num3;
const double* restrict dtmp_c_3amlknw = dtmp_c_0amlknw + elec_num3;
const double* restrict een_rescaled_n_gl_1amnw = een_rescaled_n_gl_0amnw + elec_num;
const double* restrict een_rescaled_n_gl_1amlnw = een_rescaled_n_gl_0amlnw + elec_num;
const double* restrict een_rescaled_n_gl_2amnw = een_rescaled_n_gl_0amnw + elec_num2;
const double* restrict een_rescaled_n_gl_2amlnw = een_rescaled_n_gl_0amlnw + elec_num2;
const double* restrict een_rescaled_n_gl_3amnw = een_rescaled_n_gl_0amnw + elec_num3;
const double* restrict een_rescaled_n_gl_3amlnw = een_rescaled_n_gl_0amlnw + elec_num3;
double* const restrict factor_een_gl_1nw = factor_een_gl_0nw + elec_num;
double* const restrict factor_een_gl_2nw = factor_een_gl_0nw + elec_num2;
double* const restrict factor_een_gl_3nw = factor_een_gl_0nw + elec_num3;
double tmp3[elec_num];
if (touched) {
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_0nw[j] = factor_een_gl_0nw[j] + cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_0amlnw[j] +
dtmp_c_0amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_0amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_0amnw[j]);
tmp3[j] =
dtmp_c_0amknw[j] * een_rescaled_n_gl_0amlnw[j] +
dtmp_c_0amlknw[j] * een_rescaled_n_gl_0amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_1nw[j] = factor_een_gl_1nw[j] + cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_1amlnw[j] +
dtmp_c_1amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_1amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_1amnw[j]);
tmp3[j] = tmp3[j] +
dtmp_c_1amknw[j] * een_rescaled_n_gl_1amlnw[j] +
dtmp_c_1amlknw[j] * een_rescaled_n_gl_1amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_2nw[j] = factor_een_gl_2nw[j] + cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_2amlnw[j] +
dtmp_c_2amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_2amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_2amnw[j]);
tmp3[j] = tmp3[j] +
dtmp_c_2amknw[j] * een_rescaled_n_gl_2amlnw[j] +
dtmp_c_2amlknw[j] * een_rescaled_n_gl_2amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_3nw[j] = factor_een_gl_3nw[j] + cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_3amlnw[j] +
dtmp_c_3amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_3amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_3amnw[j] +
tmp3[j]*2.0);
}
} else {
touched = true;
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_0nw[j] = cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_0amlnw[j] +
dtmp_c_0amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_0amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_0amnw[j]);
tmp3[j] =
dtmp_c_0amknw[j] * een_rescaled_n_gl_0amlnw[j] +
dtmp_c_0amlknw[j] * een_rescaled_n_gl_0amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_1nw[j] = cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_1amlnw[j] +
dtmp_c_1amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_1amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_1amnw[j]);
tmp3[j] = tmp3[j] +
dtmp_c_1amknw[j] * een_rescaled_n_gl_1amlnw[j] +
dtmp_c_1amlknw[j] * een_rescaled_n_gl_1amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_2nw[j] = cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_2amlnw[j] +
dtmp_c_2amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_2amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_2amnw[j]);
tmp3[j] = tmp3[j] +
dtmp_c_2amknw[j] * een_rescaled_n_gl_2amlnw[j] +
dtmp_c_2amlknw[j] * een_rescaled_n_gl_2amnw[j];
}
#ifdef HAVE_OPENMP
#pragma omp simd
#endif
for (size_t j = 0; j < (size_t) elec_num; ++j) {
factor_een_gl_3nw[j] = cn *
(tmp_c_amkn[j] * een_rescaled_n_gl_3amlnw[j] +
dtmp_c_3amknw[j] * een_rescaled_n_amlnw[j] +
dtmp_c_3amlknw[j] * een_rescaled_n_amnw[j] +
tmp_c_amlkn[j] * een_rescaled_n_gl_3amnw[j] +
tmp3[j]*2.0);
}
}
}
}
if (!touched) {
memset(factor_een_gl_0nw, 0, elec_num*4*sizeof(double));
}
}
return info;
}
#+end_src
***** Test
#+begin_src python :results output :exports none :noweb yes
import numpy as np
@ -10289,34 +10056,43 @@ print("factor_een:",factor_een)
#+end_src
#+RESULTS:
: een_rescaled_e_gl[1, 1, 3, 1] = 0.09831391870751387
: een_rescaled_e_gl[1, 1, 4, 1] = 0.017204157459682526
: een_rescaled_e_gl[1, 1, 5, 1] = 0.013345768421098641
: een_rescaled_e_gl[2, 1, 4, 2] = 0.03733086358273962
: een_rescaled_e_gl[2, 1, 5, 2] = 0.004922634822943517
: een_rescaled_e_gl[2, 1, 6, 2] = 0.5416751547830984
: een_rescaled_e_gl[e, 4, e, c]
: een_rescaled_e_gl[0, 0, 2, 1] = 0.09831391870751387
: een_rescaled_e_gl[0, 0, 3, 1] = 0.017204157459682526
: een_rescaled_e_gl[0, 0, 4, 1] = 0.013345768421098646
: een_rescaled_e_gl[1, 0, 5, 2] = 0.03733086358273962
: een_rescaled_e_gl[1, 0, 4, 2] = 0.004922634822943517
: een_rescaled_e_gl[1, 0, 5, 2] = 0.5416751547830982
: (6, 10, 4, 10)
: factor_een: -14.956095654486404
: factor_een: -14.956095654486418
#+begin_src c :tangle (eval c_test)
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
double factor_een_gl[4][walk_num][elec_num];
double factor_een_gl[walk_num][4][elec_num];
rc = qmckl_get_jastrow_champ_factor_een_gl(context, &(factor_een_gl[0][0][0]),4*walk_num*elec_num);
for (int nw=0 ; nw<walk_num ; nw++) {
for (int k=0 ; k<4 ; k++) {
for (int i=0 ; i<elec_num ; i++) {
printf("factor_een_gl[%d][%d][%d] = %e\n", nw, k, i, factor_een_gl[nw][k][i]);
}
}
}
printf("%20.15e\n", factor_een_gl[0][0][0]);
assert(fabs(8.967809309100624e-02 - factor_een_gl[0][0][0]) < 1e-12);
printf("%20.15e\n", factor_een_gl[1][0][1]);
assert(fabs(3.543090132452453e-02 - factor_een_gl[1][0][1]) < 1e-12);
printf("%20.15e\n", factor_een_gl[0][1][1]);
assert(fabs(3.543090132452453e-02 - factor_een_gl[0][1][1]) < 1e-12);
printf("%20.15e\n", factor_een_gl[2][0][2]);
assert(fabs(8.996044894431991e-04 - factor_een_gl[2][0][2]) < 1e-12);
printf("%20.15e\n", factor_een_gl[0][2][2]);
assert(fabs(8.996044894431991e-04 - factor_een_gl[0][2][2]) < 1e-12);
printf("%20.15e\n", factor_een_gl[3][0][3]);
assert(fabs(-1.175028308456619e+00 - factor_een_gl[3][0][3]) < 1e-12);
printf("%20.15e\n", factor_een_gl[0][3][3]);
assert(fabs(-1.175028308456619e+00 - factor_een_gl[0][3][3]) < 1e-12);
#+end_src
**** Compute Gradient only

View File

@ -5,6 +5,8 @@
* Introduction
Single-electron move version of the Jastrow factor functions.
* Headers :noexport:
#+begin_src elisp :noexport :results none
(org-babel-lob-ingest "../tools/lib.org")
@ -644,30 +646,44 @@ qmckl_exit_code qmckl_compute_single_ee_distance (
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_check(context,
qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3)
);
assert(rc == QMCKL_SUCCESS);
double ee_distance[walk_num][elec_num][elec_num];
rc = qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0]);
rc = qmckl_check(context,
qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0])
);
rc = qmckl_get_electron_coord(context, 'N', &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_check(context,
qmckl_get_electron_coord(context, 'N', &coords[0][0][0], walk_num*elec_num*3)
);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_set_single_point(context, 'N', 2, new_coords, 3);
rc = qmckl_check(context,
qmckl_set_single_point(context, 'N', 2, new_coords, 3)
);
assert (rc == QMCKL_SUCCESS);
double single_ee_distance[walk_num][elec_num];
rc = qmckl_get_single_electron_ee_distance(context, &single_ee_distance[0][0]);
rc = qmckl_check(context,
qmckl_get_single_electron_ee_distance(context, &single_ee_distance[0][0])
);
assert (rc == QMCKL_SUCCESS);
coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_check(context,
qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3)
);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0]);
rc = qmckl_check(context,
qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0])
);
assert (rc == QMCKL_SUCCESS);
for (int nw = 0; nw < walk_num; nw++){
@ -957,7 +973,7 @@ qmckl_compute_een_rescaled_single_e (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double rescaled_een_ee_distance[walk_num][cord_num+1][elec_num][elec_num];
@ -977,7 +993,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_jastrow_champ_een_rescaled_e(context, &rescaled_een_ee_distance[0][0][0][0], walk_num*(cord_num+1)*elec_num*elec_num);
@ -1187,7 +1203,7 @@ qmckl_exit_code qmckl_compute_single_en_distance (
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double en_distance[elec_num][nucl_num];
@ -1207,7 +1223,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_electron_en_distance(context, &en_distance[0][0]);
@ -1459,7 +1475,7 @@ end function qmckl_compute_een_rescaled_single_n
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double rescaled_een_en_distance[walk_num][cord_num+1][nucl_num][elec_num];
@ -1479,7 +1495,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_jastrow_champ_een_rescaled_n(context, &rescaled_een_en_distance[0][0][0][0], walk_num*(cord_num+1)*nucl_num*elec_num);
@ -1766,7 +1782,7 @@ qmckl_compute_jastrow_champ_delta_p (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double p_old[walk_num][cord_num][cord_num+1][nucl_num][elec_num];
@ -1787,7 +1803,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double p_new[walk_num][cord_num][cord_num+1][nucl_num][elec_num];
@ -2130,7 +2146,7 @@ assert(qmckl_jastrow_champ_provided(context));
//rc = qmckl_check(context,
// qmckl_set_electron_coord (context, 'N', walk_num, elec_coord, walk_num*3*elec_num)
// );
qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double jastrow_een_old[walk_num];
@ -2151,7 +2167,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
//rc = qmckl_check(context,
// qmckl_set_electron_coord (context, 'N', walk_num, &coords[0][0][0], walk_num*3*elec_num)
@ -2392,7 +2408,7 @@ qmckl_exit_code qmckl_compute_ee_rescaled_single (
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double ee_rescaled[walk_num][elec_num][elec_num];
@ -2413,7 +2429,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_jastrow_champ_ee_distance_rescaled(context, &ee_rescaled[0][0][0]);
@ -2666,7 +2682,7 @@ qmckl_exit_code qmckl_compute_en_rescaled_single(
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double en_rescaled[walk_num][nucl_num][elec_num];
@ -2687,7 +2703,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_electron_en_distance_rescaled(context, &en_rescaled[0][0][0]);
@ -3022,7 +3038,7 @@ qmckl_compute_jastrow_champ_single_ee (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double jastrow_ee_old[walk_num];
@ -3043,7 +3059,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double jastrow_ee_new[walk_num];
@ -3377,7 +3393,7 @@ qmckl_exit_code qmckl_compute_jastrow_champ_single_en (
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double jastrow_en_old[walk_num];
@ -3398,7 +3414,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double jastrow_en_new[walk_num];
@ -3670,7 +3686,7 @@ end function qmckl_compute_een_rescaled_single_n_gl
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double een_rescaled_en_gl[walk_num][cord_num+1][nucl_num][4][elec_num];
@ -3691,7 +3707,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_jastrow_champ_een_rescaled_n_gl(context, &een_rescaled_en_gl[0][0][0][0][0], walk_num*(cord_num+1)*nucl_num*elec_num*4);
@ -4010,7 +4026,7 @@ assert(qmckl_jastrow_champ_provided(context));
//rc = qmckl_check(context,
// qmckl_set_electron_coord (context, 'N', walk_num, elec_coord, walk_num*3*elec_num)
// );
qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double een_rescaled_ee_gl[walk_num][cord_num+1][elec_num][4][elec_num];
@ -4031,7 +4047,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
//rc = qmckl_check(context,
// qmckl_set_electron_coord (context, 'N', walk_num, &coords[0][0][0], walk_num*3*elec_num)
@ -4388,7 +4404,7 @@ qmckl_compute_jastrow_champ_delta_p_gl (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double p_gl_old[walk_num][cord_num][cord_num+1][nucl_num][4][elec_num];
@ -4409,7 +4425,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double p_gl_new[walk_num][cord_num][cord_num+1][nucl_num][4][elec_num];
@ -4800,7 +4816,7 @@ qmckl_compute_jastrow_champ_factor_single_een_gl (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double een_gl_old[walk_num][4][elec_num];
@ -4821,7 +4837,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double een_gl_new[walk_num][4][elec_num];
@ -5099,7 +5115,7 @@ qmckl_exit_code qmckl_compute_ee_rescaled_single_gl (
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
@ -5121,7 +5137,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_jastrow_champ_ee_distance_rescaled_gl(context, &ee_rescaled_gl[0][0][0][0]);
@ -5446,7 +5462,7 @@ qmckl_exit_code qmckl_compute_en_rescaled_single_gl (
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
@ -5468,7 +5484,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
rc = qmckl_get_electron_en_distance_rescaled_gl(context, &en_rescaled_gl[0][0][0][0]);
@ -5878,7 +5894,7 @@ qmckl_compute_jastrow_champ_single_ee_gl (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double ee_gl_old[walk_num][4][elec_num];
@ -5899,7 +5915,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double ee_gl_new[walk_num][4][elec_num];
@ -6300,7 +6316,7 @@ qmckl_compute_jastrow_champ_single_en_gl (const qmckl_context context,
/* Check if Jastrow is properly initialized */
assert(qmckl_jastrow_champ_provided(context));
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert(rc == QMCKL_SUCCESS);
double en_gl_old[walk_num][4][elec_num];
@ -6321,7 +6337,7 @@ coords[0][2][0] = new_coords[0];
coords[0][2][1] = new_coords[1];
coords[0][2][2] = new_coords[2];
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
rc = qmckl_set_electron_coord(context, 'N', walk_num, elec_coord, walk_num*elec_num*3);
assert (rc == QMCKL_SUCCESS);
double en_gl_new[walk_num][4][elec_num];

View File

@ -979,6 +979,7 @@ double chbrclf_mo_coef[chbrclf_mo_num*chbrclf_ao_num] =
{
... see include/chbrclf.h
}
#+end_src
** Electron coordinates