From dee0054c3488f397be7c70fc48c5663ba47e48da Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 26 May 2023 09:51:15 +0200 Subject: [PATCH] More compact error checking in Jastrow --- org/qmckl_jastrow_champ.org | 830 ++++++++++++++++-------------------- 1 file changed, 359 insertions(+), 471 deletions(-) diff --git a/org/qmckl_jastrow_champ.org b/org/qmckl_jastrow_champ.org index 01eab68..0696a0c 100644 --- a/org/qmckl_jastrow_champ.org +++ b/org/qmckl_jastrow_champ.org @@ -19,7 +19,7 @@ \[ J_{\text{eN}}(\mathbf{r},\mathbf{R}) = - \sum_{\alpha=1}^{N_\text{nucl}} \sum_{i=1}^{N_\text{elec}} + \sum_{\alpha=1}^{N_\text{nucl}} \sum_{i=1}^{N_\text{elec}} \frac{a_{1\,\alpha}\, f_\alpha(R_{i\alpha})}{1+a_{2\,\alpha}\, f_\alpha(R_{i\alpha})} + \sum_{p=2}^{N_\text{ord}^a} a_{p+1\,\alpha}\, [f_\alpha(R_{i\alpha})]^p - J_{\text{eN}}^{\infty \alpha} \] @@ -61,7 +61,7 @@ The eN and eeN parameters are the same of all identical nuclei. The types of nuclei use zero-based indexing. - + * Headers :noexport: #+begin_src elisp :noexport :results none (org-babel-lob-ingest "../tools/lib.org") @@ -146,7 +146,7 @@ int main() { | ~type_nucl_vector~ | ~int64_t[nucl_num]~ | IDs of types of Nuclei | | ~a_vector~ | ~double[aord_num + 1][type_nucl_num]~ | a polynomial coefficients | | ~b_vector~ | ~double[bord_num + 1]~ | b polynomial coefficients | - | ~c_vector~ | ~double[cord_num][type_nucl_num]~ | c polynomial coefficients | + | ~c_vector~ | ~double[dim_c_vector][type_nucl_num]~ | c polynomial coefficients | Computed data: @@ -777,13 +777,16 @@ qmckl_set_jastrow_champ_c_vector(qmckl_context context, } qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = dim_c_vector * type_nucl_num * sizeof(double); + mem_info.size = dim_c_vector*type_nucl_num * sizeof(double); - if ((size_t) size_max < mem_info.size/sizeof(double)) { + if (size_max < dim_c_vector*type_nucl_num) { + char msg[256]; + sprintf(msg, "Array too small. Expected dim_c_vector*type_nucl_num = %ld", + dim_c_vector*type_nucl_num ); return qmckl_failwith( context, QMCKL_INVALID_ARG_3, "qmckl_set_jastrow_champ_c_vector", - "Array too small. Expected dim_c_vector * type_nucl_num"); + msg); } double* new_array = (double*) qmckl_malloc(context, mem_info); @@ -1641,7 +1644,6 @@ assert(qmckl_nucleus_provided(context)); compute. If it is the case, then the data is recomputed and the current date is stored. - ** Electron-electron component *** Asymptotic component @@ -1940,7 +1942,7 @@ print("asym_one : ", asym_one) print("asymp_jasb[0] : ", asymp_jasb[0]) print("asymp_jasb[1] : ", asymp_jasb[1]) #+end_src - + #+RESULTS: asymp_jasb : asym_one : 0.6634291325000664 : asymp_jasb[0] : 0.7115733522582638 @@ -2112,7 +2114,7 @@ interface end function qmckl_get_jastrow_champ_factor_ee end interface #+end_src - + **** Provide :noexport: #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none qmckl_exit_code qmckl_provide_jastrow_champ_factor_ee(qmckl_context context); @@ -2370,7 +2372,7 @@ qmckl_exit_code qmckl_compute_jastrow_champ_factor_ee_hpc ( const double fshift = 0.5 * (double) ((dn_num-1)*dn_num + (up_num-1)*up_num) * asymp_jasb[0] + (float) (up_num*dn_num) * asymp_jasb[1]; for (int nw = 0; nw < walk_num; ++nw) { - factor_ee[nw] = 0.; + factor_ee[nw] = 0.; size_t ishift = nw * elec_num * elec_num; for (int j = 0; j < up_num; ++j ) { @@ -2392,7 +2394,7 @@ qmckl_exit_code qmckl_compute_jastrow_champ_factor_ee_hpc ( } factor_ee[nw] -= fshift; - + for (int j=0; j < elec_num; ++j ) { const double* xj = &(ee_distance_rescaled[j * elec_num + ishift]); for (int i=0; i < j ; ++i) { @@ -2487,7 +2489,7 @@ print("factor_ee :",factor_ee) : asymp_jasb[0] : 0.7115733522582638 : asymp_jasb[1] : 1.043287918508297 : factor_ee : -16.83886184243964 - + #+begin_src c :tangle (eval c_test) /* Check if Jastrow is properly initialized */ @@ -2578,7 +2580,7 @@ interface end function qmckl_get_jastrow_champ_factor_ee_gl end interface #+end_src - + **** Provide :noexport: #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none qmckl_exit_code qmckl_provide_jastrow_champ_factor_ee_gl(qmckl_context context); @@ -2761,7 +2763,7 @@ integer function qmckl_compute_jastrow_champ_factor_ee_gl_doc_f( & factor_ee_gl(i,4,nw) = factor_ee_gl(i,4,nw) & + f * (dx(4) - 2.d0 * b_vector(2) * grad_c2 * invdenom) - + kf = 2.d0 x1 = x x = 1.d0 @@ -2815,18 +2817,28 @@ qmckl_exit_code qmckl_compute_jastrow_champ_factor_ee_gl_hpc( memset(factor_ee_gl, 0, elec_num*4*walk_num*sizeof(double)); + double kf[bord_num+1]; + for (int k=0 ; k<=bord_num ; ++k) { + kf[k] = (double) k; + } + for (int nw = 0; nw < walk_num; ++nw) { for (int j = 0; j < elec_num; ++j) { const double* dxj = &ee_distance_rescaled_gl[4*elec_num*(j+nw*elec_num)]; const double* xj = &ee_distance_rescaled [ elec_num*(j+nw*elec_num)]; - + + double * restrict factor_ee_gl_0 = &(factor_ee_gl[nw*elec_num*4]); + double * restrict factor_ee_gl_1 = factor_ee_gl_0 + elec_num; + double * restrict factor_ee_gl_2 = factor_ee_gl_1 + elec_num; + double * restrict factor_ee_gl_3 = factor_ee_gl_2 + elec_num; + for (int i = 0; i < elec_num; ++i) { if (j == i) continue; - + double x = xj[i]; const double denom = 1.0 + b_vector[1]*x; - const double invdenom = 1.0 / denom; + const double invdenom = 1.0 / denom; const double invdenom2 = invdenom * invdenom; const double* restrict dx = dxj + 4*i; @@ -2837,29 +2849,27 @@ qmckl_exit_code qmckl_compute_jastrow_champ_factor_ee_gl_hpc( (i < up_num && j < up_num ) || (i >= up_num && j >= up_num) ? 0.5 * b_vector[0] * invdenom2 : b_vector[0] * invdenom2; - - double * restrict factor_ee_gl_0 = &(factor_ee_gl[nw*elec_num*4]); - double * restrict factor_ee_gl_1 = factor_ee_gl_0 + elec_num; - double * restrict factor_ee_gl_2 = factor_ee_gl_1 + elec_num; - double * restrict factor_ee_gl_3 = factor_ee_gl_2 + elec_num; - factor_ee_gl_0[i] += f*dx[0]; factor_ee_gl_1[i] += f*dx[1]; factor_ee_gl_2[i] += f*dx[2]; - factor_ee_gl_3[i] += f*(dx[3] - 2.*b_vector[1]*grad_c2*invdenom); + factor_ee_gl_3[i] += f*dx[3]; + factor_ee_gl_3[i] -= f*grad_c2*invdenom*2.0 * b_vector[1]; - double kf=2.0; - double x1 = x; - x = 1.0; + + double xk[bord_num+1]; + xk[0] = 1.0; + for (int k=1 ; k<= bord_num ; ++k) { + xk[k] = xk[k-1]*x; + } for (int k=2 ; k<= bord_num ; ++k) { - f = b_vector[k] * kf * x; - factor_ee_gl_0[i] += f*x1*dx[0]; - factor_ee_gl_1[i] += f*x1*dx[1]; - factor_ee_gl_2[i] += f*x1*dx[2]; - factor_ee_gl_3[i] += f*(x1*dx[3] + (kf-1.)*grad_c2); - x *= x1; - kf += 1.; + const double f1 = b_vector[k] * kf[k] * xk[k-2]; + const double f2 = f1*xk[1]; + factor_ee_gl_0[i] += f2*dx[0]; + factor_ee_gl_1[i] += f2*dx[1]; + factor_ee_gl_2[i] += f2*dx[2]; + factor_ee_gl_3[i] += f2*dx[3]; + factor_ee_gl_3[i] += f1*kf[k-1]*grad_c2; } } } @@ -3025,7 +3035,7 @@ def make_dist_deriv(elec_coord): def func(elec_coord): elec_dist = make_dist(elec_coord) - + elec_dist_gl = np.zeros(shape=(4,elec_num, elec_num),dtype=float) for j in range(elec_num): for i in range(elec_num): @@ -3034,7 +3044,7 @@ def func(elec_coord): elec_dist_gl[ii, i, j] = (elec_coord[i][ii] - elec_coord[j][ii]) * rij_inv elec_dist_gl[3, i, j] = 2.0 * rij_inv elec_dist_gl[:, j, j] = 6.0 - + ee_distance_rescaled_gl = np.zeros(shape=(4,elec_num,elec_num),dtype=float) for j in range(elec_num): for i in range(elec_num): @@ -3096,10 +3106,10 @@ print("factor_ee_gl[3][0]:",factor_ee_gl[3][0]) : asym_one : 0.6634291325000664 : asymp_jasb[0] : 0.7115733522582638 : asymp_jasb[1] : 1.043287918508297 - : factor_ee_gl[0][0]: - : factor_ee_gl[1][0]: - : factor_ee_gl[2][0]: - : factor_ee_gl[3][0]: + : factor_ee_gl[0][0]: + : factor_ee_gl[1][0]: + : factor_ee_gl[2][0]: + : factor_ee_gl[3][0]: #+begin_src c :tangle (eval c_test) @@ -3123,7 +3133,7 @@ assert(fabs(factor_ee_gl[0][2][0]+0.39098406960784515) < 1.e-12); printf("%f %f\n", factor_ee_gl[0][3][0],2.8650469630854483); assert(fabs(factor_ee_gl[0][3][0]-2.8650469630854483) < 1.e-12); #+end_src - + *** Electron-electron rescaled distances ~ee_distance_rescaled~ stores the matrix of the rescaled distances between all @@ -3350,11 +3360,11 @@ print ( "[6][5] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_6_w1-elec_5_w1)) #+RESULTS: : [0][0] : 0.0 - : [0][1] : + : [0][1] : : [1][0] : 0.6347507420688708 : [5][5] : 0.0 : [5][6] : 0.3941735387855409 - : [6][5] : + : [6][5] : #+begin_src c :tangle (eval c_test) assert(qmckl_electron_provided(context)); @@ -3874,7 +3884,7 @@ for p in range(1,aord_num): print("asymp_jasa[i] : ", asymp_jasa) #+end_src - + #+RESULTS: asymp_jasa : asymp_jasa[i] : [-1.75529774] @@ -4721,10 +4731,10 @@ print("factor_en_gl[3][0]:",factor_en_gl[3][0]) #+end_src - - - - + + + + @@ -5715,7 +5725,7 @@ qmckl_exit_code qmckl_compute_een_rescaled_e_hpc ( double* const een_rescaled_e_ = &(een_rescaled_e[nw*(cord_num+1)*e2]); // prepare the actual een table #ifdef HAVE_OPENMP -#pragma omp simd +#pragma omp simd #endif for (size_t i = 0; i < e2; ++i){ een_rescaled_e_[i] = 1.0; @@ -6646,12 +6656,12 @@ print(" een_rescaled_n[1, 5, 2] = ",een_rescaled_n[1, 5, 2]) #+end_src #+RESULTS: - : een_rescaled_n[0, 2, 1] = - : een_rescaled_n[0, 3, 1] = - : een_rescaled_n[0, 4, 1] = - : een_rescaled_n[1, 3, 2] = - : een_rescaled_n[1, 4, 2] = - : een_rescaled_n[1, 5, 2] = + : een_rescaled_n[0, 2, 1] = + : een_rescaled_n[0, 3, 1] = + : een_rescaled_n[0, 4, 1] = + : een_rescaled_n[1, 3, 2] = + : een_rescaled_n[1, 4, 2] = + : een_rescaled_n[1, 5, 2] = #+begin_src c :tangle (eval c_test) assert(qmckl_electron_provided(context)); @@ -7064,12 +7074,12 @@ print(" een_rescaled_n_gl[2, 1, 6, 2] = ",een_rescaled_n_gl[5, 0, 1, 2]) #+end_src #+RESULTS: - : een_rescaled_n_gl[1, 1, 3, 1] = - : een_rescaled_n_gl[1, 1, 4, 1] = - : een_rescaled_n_gl[1, 1, 5, 1] = - : een_rescaled_n_gl[2, 1, 4, 2] = - : een_rescaled_n_gl[2, 1, 5, 2] = - : een_rescaled_n_gl[2, 1, 6, 2] = + : een_rescaled_n_gl[1, 1, 3, 1] = + : een_rescaled_n_gl[1, 1, 4, 1] = + : een_rescaled_n_gl[1, 1, 5, 1] = + : een_rescaled_n_gl[2, 1, 4, 2] = + : een_rescaled_n_gl[2, 1, 5, 2] = + : een_rescaled_n_gl[2, 1, 6, 2] = #+begin_src c :tangle (eval c_test) assert(qmckl_electron_provided(context)); @@ -7094,6 +7104,142 @@ assert(fabs( 0.005359281880312882 - een_rescaled_n_gl[0][2][1][0][5]) < 1.e-12 calculation of the three-body jastrow ~factor_een~ and its derivative ~factor_een_gl~. +**** Compute dim_c_vector + :PROPERTIES: + :Name: qmckl_compute_dim_c_vector + :CRetType: qmckl_exit_code + :FRetType: qmckl_exit_code + :END: + + Computes the dimension of the vector of parameters. + + #+begin_src python :exports results +def compute(cord_num): + dim_c_vector = 0 + for p in range(2,cord_num+1): + for k in range(p-1, -1, -1): + if k != 0: + lmax = p - k + else: + lmax = p - k - 2 + for l in range(lmax, -1, -1): + if ( ((p - k - l) & 1)==1): continue + dim_c_vector += 1 + return dim_c_vector + +return [ ("$N_{ord}$", "Number of parameters"), ("","") ] + \ + [ (i, compute(i)) for i in range(2,11) ] + #+end_src + + #+RESULTS: + | $N_{ord}$ | Number of parameters | + | | | + | 2 | 2 | + | 3 | 6 | + | 4 | 13 | + | 5 | 23 | + | 6 | 37 | + | 7 | 55 | + | 8 | 78 | + | 9 | 106 | + | 10 | 140 | + + #+NAME: qmckl_factor_dim_c_vector_args + | Variable | Type | In/Out | Description | + |----------------+-----------------+--------+------------------------------------| + | ~context~ | ~qmckl_context~ | in | Global state | + | ~cord_num~ | ~int64_t~ | in | Order of polynomials | + | ~dim_c_vector~ | ~int64_t~ | out | Number of parameters per atom type | + + #+begin_src f90 :comments org :tangle (eval f) :noweb yes +integer function qmckl_compute_dim_c_vector_f( & + context, cord_num, dim_c_vector) & + result(info) + use qmckl + implicit none + integer(qmckl_context), intent(in) :: context + integer*8 , intent(in) :: cord_num + integer*8 , intent(out) :: dim_c_vector + double precision :: x + integer*8 :: i, a, k, l, p, lmax + + info = QMCKL_SUCCESS + + if (context == QMCKL_NULL_CONTEXT) then + info = QMCKL_INVALID_CONTEXT + return + endif + + if (cord_num < 0) then + info = QMCKL_INVALID_ARG_2 + return + endif + + dim_c_vector = 0 + + do p = 2, cord_num + do k = p - 1, 0, -1 + if (k .ne. 0) then + lmax = p - k + else + lmax = p - k - 2 + endif + do l = lmax, 0, -1 + if (iand(p - k - l, 1_8) == 1) cycle + dim_c_vector = dim_c_vector + 1 + end do + end do + end do + +end function qmckl_compute_dim_c_vector_f + #+end_src + + #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none +qmckl_exit_code qmckl_compute_dim_c_vector ( + const qmckl_context context, + const int64_t cord_num, + int64_t* const dim_c_vector){ + + int lmax; + + + if (context == QMCKL_NULL_CONTEXT) { + return QMCKL_INVALID_CONTEXT; + } + + if (cord_num < 0) { + return QMCKL_INVALID_ARG_2; + } + + ,*dim_c_vector = 0; + + for (int p=2; p <= cord_num; ++p){ + for (int k=p-1; k >= 0; --k) { + if (k != 0) { + lmax = p - k; + } else { + lmax = p - k - 2; + } + for (int l = lmax; l >= 0; --l) { + if ( ((p - k - l) & 1)==1) continue; + ,*dim_c_vector=*dim_c_vector+1; + } + } + } + + return QMCKL_SUCCESS; +} + #+end_src + + # #+CALL: generate_c_header(table=qmckl_factor_dim_c_vector_args,rettyp=get_value("CRetType"),fname=get_value("Name")) + + #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none + qmckl_exit_code qmckl_compute_dim_c_vector ( + const qmckl_context context, + const int64_t cord_num, + int64_t* const dim_c_vector ); + #+end_src + **** Get #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes @@ -7172,7 +7318,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_c_vector_full(qmckl_context context) assert (ctx != NULL); qmckl_exit_code rc = QMCKL_SUCCESS; - + /* Compute if necessary */ if (ctx->date > ctx->jastrow_champ.c_vector_full_date) { @@ -7412,109 +7558,6 @@ qmckl_exit_code qmckl_provide_dtmp_c(qmckl_context context) } #+end_src -**** Compute dim_c_vector - :PROPERTIES: - :Name: qmckl_compute_dim_c_vector - :CRetType: qmckl_exit_code - :FRetType: qmckl_exit_code - :END: - - #+NAME: qmckl_factor_dim_c_vector_args - | Variable | Type | In/Out | Description | - |-----------------+-----------------+--------+-----------------------------------| - | ~context~ | ~qmckl_context~ | in | Global state | - | ~cord_num~ | ~int64_t~ | in | Order of polynomials | - | ~dim_c_vector~ | ~int64_t~ | out | dimension of c_vector_full table | - - #+begin_src f90 :comments org :tangle (eval f) :noweb yes -integer function qmckl_compute_dim_c_vector_f( & - context, cord_num, dim_c_vector) & - result(info) - use qmckl - implicit none - integer(qmckl_context), intent(in) :: context - integer*8 , intent(in) :: cord_num - integer*8 , intent(out) :: dim_c_vector - double precision :: x - integer*8 :: i, a, k, l, p, lmax - - info = QMCKL_SUCCESS - - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - dim_c_vector = 0 - - do p = 2, cord_num - do k = p - 1, 0, -1 - if (k .ne. 0) then - lmax = p - k - else - lmax = p - k - 2 - endif - do l = lmax, 0, -1 - if (iand(p - k - l, 1_8) == 1) cycle - dim_c_vector = dim_c_vector + 1 - end do - end do - end do - -end function qmckl_compute_dim_c_vector_f - #+end_src - - #+begin_src c :comments org :tangle (eval c) :noweb yes -qmckl_exit_code qmckl_compute_dim_c_vector ( - const qmckl_context context, - const int64_t cord_num, - int64_t* const dim_c_vector){ - - int lmax; - - - if (context == QMCKL_NULL_CONTEXT) { - return QMCKL_INVALID_CONTEXT; - } - - if (cord_num < 0) { - return QMCKL_INVALID_ARG_2; - } - - *dim_c_vector = 0; - - for (int p=2; p <= cord_num; ++p){ - for (int k=p-1; k >= 0; --k) { - if (k != 0) { - lmax = p - k; - } else { - lmax = p - k - 2; - } - for (int l = lmax; l >= 0; --l) { - if ( ((p - k - l) & 1)==1) continue; - *dim_c_vector=*dim_c_vector+1; - } - } - } - - return QMCKL_SUCCESS; -} - #+end_src - - # #+CALL: generate_c_header(table=qmckl_factor_dim_c_vector_args,rettyp=get_value("CRetType"),fname=get_value("Name")) - - #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none - qmckl_exit_code qmckl_compute_dim_c_vector ( - const qmckl_context context, - const int64_t cord_num, - int64_t* const dim_c_vector ); - #+end_src - **** Compute c_vector_full :PROPERTIES: :Name: qmckl_compute_c_vector_full @@ -7552,26 +7595,11 @@ integer function qmckl_compute_c_vector_full_doc_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (type_nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - - if (dim_c_vector < 0) then - info = QMCKL_INVALID_ARG_5 - return - endif - + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_2 + if (dim_c_vector < 0) info = QMCKL_INVALID_ARG_3 + if (type_nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (info /= QMCKL_SUCCESS) return do a = 1, nucl_num c_vector_full(a,1:dim_c_vector) = c_vector(type_nucl_vector(a)+1,1:dim_c_vector) @@ -7616,21 +7644,13 @@ qmckl_exit_code qmckl_compute_c_vector_full_hpc ( const double* c_vector, double* const c_vector_full ) { - if (context == QMCKL_NULL_CONTEXT) { - return QMCKL_INVALID_CONTEXT; - } - - if (nucl_num <= 0) { - return QMCKL_INVALID_ARG_2; - } - - if (type_nucl_num <= 0) { - return QMCKL_INVALID_ARG_4; - } - - if (dim_c_vector < 0) { - return QMCKL_INVALID_ARG_5; - } + if (context == QMCKL_NULL_CONTEXT) return QMCKL_INVALID_CONTEXT; + if (nucl_num <= 0) return QMCKL_INVALID_ARG_2; + if (dim_c_vector < 0) return QMCKL_INVALID_ARG_3; + if (type_nucl_num <= 0) return QMCKL_INVALID_ARG_4; + if (type_nucl_vector == NULL) return QMCKL_INVALID_ARG_5; + if (c_vector == NULL) return QMCKL_INVALID_ARG_6; + if (c_vector_full == NULL) return QMCKL_INVALID_ARG_7; for (int i=0; i < dim_c_vector; ++i) { for (int a=0; a < nucl_num; ++a){ @@ -7639,7 +7659,7 @@ qmckl_exit_code qmckl_compute_c_vector_full_hpc ( } return QMCKL_SUCCESS; - } +} #+end_src @@ -7704,11 +7724,11 @@ qmckl_exit_code qmckl_compute_c_vector_full ( :END: #+NAME: qmckl_factor_lkpm_combined_index_args - | Variable | Type | In/Out | Description | - |-----------------------+-----------------------------+--------+-------------------------------| - | ~context~ | ~qmckl_context~ | in | Global state | - | ~cord_num~ | ~int64_t~ | in | Order of polynomials | - | ~dim_c_vector~ | ~int64_t~ | in | dimension of cord full table | + | Variable | Type | In/Out | Description | + |-----------------------+----------------------------+--------+-------------------------------| + | ~context~ | ~qmckl_context~ | in | Global state | + | ~cord_num~ | ~int64_t~ | in | Order of polynomials | + | ~dim_c_vector~ | ~int64_t~ | in | dimension of cord full table | | ~lkpm_combined_index~ | ~int64_t[4][dim_c_vector]~ | out | Full list of combined indices | #+begin_src f90 :comments org :tangle (eval f) :noweb yes @@ -7726,21 +7746,10 @@ integer function qmckl_compute_lkpm_combined_index_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (dim_c_vector < 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (cord_num < 0) info = QMCKL_INVALID_ARG_2 + if (dim_c_vector < 0) info = QMCKL_INVALID_ARG_3 + if (info /= QMCKL_SUCCESS) return kk = 0 do p = 2, cord_num @@ -7774,20 +7783,10 @@ qmckl_exit_code qmckl_compute_lkpm_combined_index ( int kk, lmax, m; - if (context == QMCKL_NULL_CONTEXT) { - return QMCKL_INVALID_CONTEXT; - } + if (context == QMCKL_NULL_CONTEXT) return QMCKL_INVALID_CONTEXT; + if (cord_num < 0) return QMCKL_INVALID_ARG_2; + if (dim_c_vector < 0) return QMCKL_INVALID_ARG_3; - if (cord_num < 0) { - return QMCKL_INVALID_ARG_2; - } - - if (dim_c_vector < 0) { - return QMCKL_INVALID_ARG_3; - } - -/* -*/ kk = 0; for (int p = 2; p <= cord_num; ++p) { for (int k=(p-1); k >= 0; --k) { @@ -7799,7 +7798,7 @@ qmckl_exit_code qmckl_compute_lkpm_combined_index ( for (int l=lmax; l >= 0; --l) { if (((p - k - l) & 1) == 1) continue; m = (p - k - l)/2; - lkpm_combined_index[kk ] = l; + lkpm_combined_index[kk ] = l; lkpm_combined_index[kk + dim_c_vector] = k; lkpm_combined_index[kk + 2*dim_c_vector] = p; lkpm_combined_index[kk + 3*dim_c_vector] = m; @@ -7807,7 +7806,7 @@ qmckl_exit_code qmckl_compute_lkpm_combined_index ( } } } - + return QMCKL_SUCCESS; } #+end_src @@ -7901,25 +7900,13 @@ integer function qmckl_compute_tmp_c_doc_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (cord_num < 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (walk_num <= 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif M = elec_num N = nucl_num*(cord_num + 1) @@ -7993,25 +7980,11 @@ qmckl_exit_code qmckl_compute_tmp_c_hpc ( const double* een_rescaled_n, double* const tmp_c ) { - if (context == QMCKL_NULL_CONTEXT) { - return QMCKL_INVALID_CONTEXT; - } - - if (cord_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 (walk_num <= 0) { - return QMCKL_INVALID_ARG_5; - } + if (context == QMCKL_NULL_CONTEXT) return QMCKL_INVALID_CONTEXT; + if (cord_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 (walk_num <= 0) return QMCKL_INVALID_ARG_5; qmckl_exit_code info = QMCKL_SUCCESS; @@ -8103,16 +8076,16 @@ qmckl_exit_code qmckl_compute_tmp_c_hpc (const qmckl_context context, :END: #+NAME: qmckl_factor_dtmp_c_args - | Variable | Type | In/Out | Description | - |--------------------------+------------------------------------------------------------------+--------+-----------------------------------------------| - | ~context~ | ~qmckl_context~ | in | Global state | - | ~cord_num~ | ~int64_t~ | in | Order of polynomials | - | ~elec_num~ | ~int64_t~ | in | Number of electrons | - | ~nucl_num~ | ~int64_t~ | in | Number of nuclei | - | ~walk_num~ | ~int64_t~ | in | Number of walkers | + | Variable | Type | In/Out | Description | + |---------------------+------------------------------------------------------------------+--------+-----------------------------------------------| + | ~context~ | ~qmckl_context~ | in | Global state | + | ~cord_num~ | ~int64_t~ | in | Order of polynomials | + | ~elec_num~ | ~int64_t~ | in | Number of electrons | + | ~nucl_num~ | ~int64_t~ | in | Number of nuclei | + | ~walk_num~ | ~int64_t~ | in | Number of walkers | | ~een_rescaled_e_gl~ | ~double[walk_num][0:cord_num][elec_num][4][elec_num]~ | in | Electron-electron rescaled factor derivatives | - | ~een_rescaled_n~ | ~double[walk_num][0:cord_num][nucl_num][elec_num]~ | in | Electron-nucleus rescaled factor | - | ~dtmp_c~ | ~double[walk_num][0:cord_num-1][0:cord_num][nucl_num][elec_num]~ | out | vector of non-zero coefficients | + | ~een_rescaled_n~ | ~double[walk_num][0:cord_num][nucl_num][elec_num]~ | in | Electron-nucleus rescaled factor | + | ~dtmp_c~ | ~double[walk_num][0:cord_num-1][0:cord_num][nucl_num][elec_num]~ | out | vector of non-zero coefficients | #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none @@ -8169,33 +8142,20 @@ integer function qmckl_compute_dtmp_c_doc_f( & double precision :: alpha, beta integer*8 :: M, N, K, LDA, LDB, LDC + info = QMCKL_SUCCESS + + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (cord_num < 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (walk_num <= 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return + TransA = 'N' TransB = 'N' alpha = 1.0d0 beta = 0.0d0 - info = QMCKL_SUCCESS - - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - M = 4*elec_num N = nucl_num*(cord_num + 1) K = elec_num @@ -8269,25 +8229,11 @@ qmckl_compute_dtmp_c_hpc (const qmckl_context context, double* const dtmp_c ) { - if (context == QMCKL_NULL_CONTEXT) { - return QMCKL_INVALID_CONTEXT; - } - - if (cord_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 (walk_num <= 0) { - return QMCKL_INVALID_ARG_5; - } + if (context == QMCKL_NULL_CONTEXT) return QMCKL_INVALID_CONTEXT; + if (cord_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 (walk_num <= 0) return QMCKL_INVALID_ARG_5; qmckl_exit_code info = QMCKL_SUCCESS; @@ -8501,7 +8447,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context) qmckl_context_struct* const ctx = (qmckl_context_struct*) context; assert (ctx != NULL); - + if (ctx->jastrow_champ.cord_num > 0) { /* Check if en rescaled distance is provided */ @@ -8525,7 +8471,7 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context) if(rc != QMCKL_SUCCESS) return rc; } - + /* Compute if necessary */ if (ctx->date > ctx->jastrow_champ.factor_een_date) { @@ -8622,31 +8568,13 @@ integer function qmckl_compute_jastrow_champ_factor_een_naive_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (walk_num <= 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_5 - return - endif - + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (walk_num <= 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (cord_num < 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return + factor_een = 0.0d0 do nw =1, walk_num @@ -8789,30 +8717,12 @@ integer function qmckl_compute_jastrow_champ_factor_een_doc_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (walk_num <= 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_5 - return - endif + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (walk_num <= 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (cord_num < 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return factor_een = 0.0d0 @@ -9038,6 +8948,22 @@ qmckl_get_jastrow_champ_factor_een_gl(qmckl_context context, } #+end_src +***** Fortran interface + + #+begin_src f90 :tangle (eval fh_func) :comments org +interface + integer(qmckl_exit_code) function qmckl_get_jastrow_champ_factor_een_gl (context, & + factor_een_gl, size_max) bind(C) + use, intrinsic :: iso_c_binding + import + implicit none + integer (qmckl_context) , intent(in), value :: context + integer(c_int64_t), intent(in), value :: size_max + double precision, intent(out) :: factor_een_gl(size_max) + end function qmckl_get_jastrow_champ_factor_een_gl +end interface + #+end_src + # **** Provide :noexport: #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none qmckl_exit_code qmckl_provide_jastrow_champ_factor_een_gl(qmckl_context context); @@ -9195,31 +9121,13 @@ integer function qmckl_compute_jastrow_champ_factor_een_gl_naive_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (walk_num <= 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_5 - return - endif - + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (walk_num <= 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (cord_num < 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return + factor_een_gl = 0.0d0 do nw =1, walk_num @@ -9237,28 +9145,26 @@ integer function qmckl_compute_jastrow_champ_factor_een_gl_naive_f( & daccu = 0.0d0 daccu2 = 0.0d0 do i = 1, elec_num - accu = accu + een_rescaled_e(k, i, j, nw) * & - een_rescaled_n(m, a, i, nw) - accu2 = accu2 + een_rescaled_e(k, i, j, nw) * & - een_rescaled_n(m + l, a, i, nw) - daccu(1:4) = daccu(1:4) + een_rescaled_e_gl(k, j, 1:4, i, nw) * & - een_rescaled_n(m, a, i, nw) - daccu2(1:4) = daccu2(1:4) + een_rescaled_e_gl(k, j, 1:4, i, nw) * & - een_rescaled_n(m + l, a, i, nw) + accu = accu + een_rescaled_e(k, i, j, nw) * een_rescaled_n(m, a, i, nw) + accu2 = accu2 + een_rescaled_e(k, i, j, nw) * een_rescaled_n(m + l, a, i, nw) + daccu(1:4) = daccu(1:4) + een_rescaled_e_gl(k, j, 1:4, i, nw) * & + een_rescaled_n(m, a, i, nw) + daccu2(1:4) = daccu2(1:4) + een_rescaled_e_gl(k, j, 1:4, i, nw) * & + een_rescaled_n(m + l, a, i, nw) end do - factor_een_gl(j, 1:4, nw) = factor_een_gl(j, 1:4, nw) + & - (accu * een_rescaled_n_gl(m + l, a, 1:4, j, nw) & - + daccu(1:4) * een_rescaled_n(m + l, a, j, nw) & - + daccu2(1:4) * een_rescaled_n(m, a, j, nw) & - + accu2 * een_rescaled_n_gl(m, a, 1:4, j, nw)) * cn - - factor_een_gl(j, 4, nw) = factor_een_gl(j, 4, nw) + 2.0d0 * ( & - daccu (1) * een_rescaled_n_gl(m + l, a, 1, j, nw) + & - daccu (2) * een_rescaled_n_gl(m + l, a, 2, j, nw) + & - daccu (3) * een_rescaled_n_gl(m + l, a, 3, j, nw) + & - daccu2(1) * een_rescaled_n_gl(m, a, 1, j, nw ) + & - daccu2(2) * een_rescaled_n_gl(m, a, 2, j, nw ) + & - daccu2(3) * een_rescaled_n_gl(m, a, 3, j, nw ) ) * cn + factor_een_gl(j, 1:4, nw) = factor_een_gl(j, 1:4, nw) + & + (accu * een_rescaled_n_gl(m + l, a, 1:4, j, nw) & + + daccu(1:4) * een_rescaled_n(m + l, a, j, nw) & + + daccu2(1:4) * een_rescaled_n(m, a, j, nw) & + + accu2 * een_rescaled_n_gl(m, a, 1:4, j, nw)) * cn + + factor_een_gl(j, 4, nw) = factor_een_gl(j, 4, nw) + 2.0d0 * ( & + daccu (1) * een_rescaled_n_gl(m + l, a, 1, j, nw) + & + daccu (2) * een_rescaled_n_gl(m + l, a, 2, j, nw) + & + daccu (3) * een_rescaled_n_gl(m + l, a, 3, j, nw) + & + daccu2(1) * een_rescaled_n_gl(m, a, 1, j, nw ) + & + daccu2(2) * een_rescaled_n_gl(m, a, 2, j, nw ) + & + daccu2(3) * een_rescaled_n_gl(m, a, 3, j, nw ) ) * cn end do end do @@ -9392,30 +9298,12 @@ integer function qmckl_compute_jastrow_champ_factor_een_gl_doc_f( & info = QMCKL_SUCCESS - if (context == QMCKL_NULL_CONTEXT) then - info = QMCKL_INVALID_CONTEXT - return - endif - - if (walk_num <= 0) then - info = QMCKL_INVALID_ARG_2 - return - endif - - if (elec_num <= 0) then - info = QMCKL_INVALID_ARG_3 - return - endif - - if (nucl_num <= 0) then - info = QMCKL_INVALID_ARG_4 - return - endif - - if (cord_num < 0) then - info = QMCKL_INVALID_ARG_5 - return - endif + if (context == QMCKL_NULL_CONTEXT) info = QMCKL_INVALID_CONTEXT + if (walk_num <= 0) info = QMCKL_INVALID_ARG_2 + if (elec_num <= 0) info = QMCKL_INVALID_ARG_3 + if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4 + if (cord_num < 0) info = QMCKL_INVALID_ARG_5 + if (info /= QMCKL_SUCCESS) return factor_een_gl = 0.0d0 @@ -9444,7 +9332,7 @@ integer function qmckl_compute_jastrow_champ_factor_een_gl_doc_f( & cn = cn + cn do j = 1, elec_num - factor_een_gl(j,4,nw) = factor_een_gl(j,4,nw) + ( & + factor_een_gl(j,4,nw) = factor_een_gl(j,4,nw) + ( & (dtmp_c(j,1,a,m ,k,nw)) * een_rescaled_n_gl(j,1,a,m+l,nw) + & (dtmp_c(j,2,a,m ,k,nw)) * een_rescaled_n_gl(j,2,a,m+l,nw) + & (dtmp_c(j,3,a,m ,k,nw)) * een_rescaled_n_gl(j,3,a,m+l,nw) + & @@ -9477,9 +9365,9 @@ end function qmckl_compute_jastrow_champ_factor_een_gl_doc_f const double* dtmp_c, const double* een_rescaled_n, const double* een_rescaled_n_gl, - double* const factor_een_gl ); + double* const factor_een_gl ); #+end_src - + #+CALL: generate_c_interface(table=qmckl_factor_een_gl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_jastrow_champ_factor_een_gl_doc")) #+RESULTS: @@ -9553,9 +9441,9 @@ end function qmckl_compute_jastrow_champ_factor_een_gl_doc_f const double* dtmp_c, const double* een_rescaled_n, const double* een_rescaled_n_gl, - double* const factor_een_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(const qmckl_context context, @@ -9606,7 +9494,7 @@ qmckl_compute_jastrow_champ_factor_een_gl_hpc ( const double* dtmp_c, const double* een_rescaled_n, const double* een_rescaled_n_gl, - double* const factor_een_gl ); + double* const factor_een_gl ); #+end_src #+begin_src c :tangle (eval c) :comments org @@ -9629,10 +9517,10 @@ qmckl_compute_jastrow_champ_factor_een_gl_hpc(const qmckl_context context, 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 (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; memset(factor_een_gl, 0, elec_num*4*walk_num*sizeof(double)); @@ -9700,12 +9588,12 @@ qmckl_compute_jastrow_champ_factor_een_gl_hpc(const qmckl_context context, double* const restrict factor_een_gl_3nw = factor_een_gl_0nw + elec_num3; double tmp3[elec_num]; - + 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] + + 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] + @@ -9715,8 +9603,8 @@ qmckl_compute_jastrow_champ_factor_een_gl_hpc(const qmckl_context context, 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] + + 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] += dtmp_c_1amknw[j] * een_rescaled_n_gl_1amlnw[j] + @@ -9726,19 +9614,19 @@ qmckl_compute_jastrow_champ_factor_een_gl_hpc(const qmckl_context context, 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] + + 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]; } - + 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] + + 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); } @@ -9808,16 +9696,16 @@ assert(qmckl_jastrow_champ_provided(context)); double factor_een_gl[4][walk_num][elec_num]; rc = qmckl_get_jastrow_champ_factor_een_gl(context, &(factor_een_gl[0][0][0]),4*walk_num*elec_num); -printf("%20.15e\n", factor_een_gl[0][0][0]); +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]); +printf("%20.15e\n", factor_een_gl[1][0][1]); assert(fabs(-3.401545636077585e-02 - factor_een_gl[1][0][1]) < 1e-12); -printf("%20.15e\n", factor_een_gl[2][0][2]); +printf("%20.15e\n", factor_een_gl[2][0][2]); assert(fabs(-2.631321052321952e-01 - factor_een_gl[2][0][2]) < 1e-12); -printf("%20.15e\n", factor_een_gl[3][0][3]); +printf("%20.15e\n", factor_een_gl[3][0][3]); assert(fabs(-1.016785559040419e+00 - factor_een_gl[3][0][3]) < 1e-12); #+end_src @@ -10581,9 +10469,9 @@ for (int64_t k=0 ; k< walk_num ; ++k) { #+end_src - + * End of files :noexport: - + #+begin_src c :tangle (eval h_private_type) #endif #+end_src