diff --git a/org/qmckl_jastrow_champ.org b/org/qmckl_jastrow_champ.org index fd00126..3649e18 100644 --- a/org/qmckl_jastrow_champ.org +++ b/org/qmckl_jastrow_champ.org @@ -7515,51 +7515,51 @@ integer function qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_f( & do nw = 1, walk_num - ! Prepare table of exponentiated distances raised to appropriate power - do j = 1, elec_num - do i = 1, j-1 - rij_inv(i) = 1.0d0 / ee_distance(i, j, nw) - enddo - rij_inv(j) = 0.0d0 - do i = j+1, elec_num - rij_inv(i) = 1.0d0 / ee_distance(i, j, nw) - enddo - do i = 1, elec_num - do ii = 1, 3 - elec_dist_gl(i, ii, j) = (coord_ee(i, ii, nw) - coord_ee(j, ii, nw)) * rij_inv(i) - end do - elec_dist_gl(i, 4, j) = 2.0d0 * rij_inv(i) - end do - end do - -! Not necessary: should be set to zero by qmckl_malloc - een_rescaled_e_gl(:,:,:,0,nw) = 0.d0 - - do l = 1, cord_num - kappa_l = - dble(l) * rescale_factor_ee - do j = 1, elec_num + ! Prepare table of exponentiated distances raised to appropriate power + do j = 1, elec_num + do i = 1, j-1 + rij_inv(i) = 1.0d0 / ee_distance(i, j, nw) + enddo + rij_inv(j) = 0.0d0 + do i = j+1, elec_num + rij_inv(i) = 1.0d0 / ee_distance(i, j, nw) + enddo do i = 1, elec_num - een_rescaled_e_gl(i, 1, j, l, nw) = kappa_l * elec_dist_gl(i, 1, j) - een_rescaled_e_gl(i, 2, j, l, nw) = kappa_l * elec_dist_gl(i, 2, j) - een_rescaled_e_gl(i, 3, j, l, nw) = kappa_l * elec_dist_gl(i, 3, j) - een_rescaled_e_gl(i, 4, j, l, nw) = kappa_l * elec_dist_gl(i, 4, j) - end do - - do i = 1, elec_num - een_rescaled_e_gl(i, 4, j, l, nw) = een_rescaled_e_gl(i, 4, j, l, nw) & - + een_rescaled_e_gl(i, 1, j, l, nw) * een_rescaled_e_gl(i, 1, j, l, nw) & - + een_rescaled_e_gl(i, 2, j, l, nw) * een_rescaled_e_gl(i, 2, j, l, nw) & - + een_rescaled_e_gl(i, 3, j, l, nw) * een_rescaled_e_gl(i, 3, j, l, nw) + do ii = 1, 3 + elec_dist_gl(i, ii, j) = (coord_ee(i, ii, nw) - coord_ee(j, ii, nw)) * rij_inv(i) + end do + elec_dist_gl(i, 4, j) = 2.0d0 * rij_inv(i) end do + end do - do i = 1, elec_num - een_rescaled_e_gl(i,1,j,l,nw) = een_rescaled_e_gl(i,1,j,l,nw) * een_rescaled_e(i,j,l,nw) - een_rescaled_e_gl(i,2,j,l,nw) = een_rescaled_e_gl(i,2,j,l,nw) * een_rescaled_e(i,j,l,nw) - een_rescaled_e_gl(i,3,j,l,nw) = een_rescaled_e_gl(i,3,j,l,nw) * een_rescaled_e(i,j,l,nw) - een_rescaled_e_gl(i,4,j,l,nw) = een_rescaled_e_gl(i,4,j,l,nw) * een_rescaled_e(i,j,l,nw) - end do - end do - end do + ! Not necessary: should be set to zero by qmckl_malloc + een_rescaled_e_gl(:,:,:,0,nw) = 0.d0 + + do l = 1, cord_num + kappa_l = - dble(l) * rescale_factor_ee + do j = 1, elec_num + do i = 1, elec_num + een_rescaled_e_gl(i, 1, j, l, nw) = kappa_l * elec_dist_gl(i, 1, j) + een_rescaled_e_gl(i, 2, j, l, nw) = kappa_l * elec_dist_gl(i, 2, j) + een_rescaled_e_gl(i, 3, j, l, nw) = kappa_l * elec_dist_gl(i, 3, j) + een_rescaled_e_gl(i, 4, j, l, nw) = kappa_l * elec_dist_gl(i, 4, j) + end do + + do i = 1, elec_num + een_rescaled_e_gl(i, 4, j, l, nw) = een_rescaled_e_gl(i, 4, j, l, nw) & + + een_rescaled_e_gl(i, 1, j, l, nw) * een_rescaled_e_gl(i, 1, j, l, nw) & + + een_rescaled_e_gl(i, 2, j, l, nw) * een_rescaled_e_gl(i, 2, j, l, nw) & + + een_rescaled_e_gl(i, 3, j, l, nw) * een_rescaled_e_gl(i, 3, j, l, nw) + end do + + do i = 1, elec_num + een_rescaled_e_gl(i,1,j,l,nw) = een_rescaled_e_gl(i,1,j,l,nw) * een_rescaled_e(i,j,l,nw) + een_rescaled_e_gl(i,2,j,l,nw) = een_rescaled_e_gl(i,2,j,l,nw) * een_rescaled_e(i,j,l,nw) + een_rescaled_e_gl(i,3,j,l,nw) = een_rescaled_e_gl(i,3,j,l,nw) * een_rescaled_e(i,j,l,nw) + een_rescaled_e_gl(i,4,j,l,nw) = een_rescaled_e_gl(i,4,j,l,nw) * een_rescaled_e(i,j,l,nw) + end do + end do + end do end do end function qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_f @@ -7652,21 +7652,27 @@ end function qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_f #+end_src #+begin_src c :comments org :tangle (eval c) :noweb yes -qmckl_exit_code qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_hpc ( - const qmckl_context context, - const int64_t walk_num, - const int64_t elec_num, - const int64_t cord_num, - const double rescale_factor_ee, - const double* coord_ee, - const double* ee_distance, - const double* een_rescaled_e, - double* const een_rescaled_e_gl ) +qmckl_exit_code +qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_hpc ( + const qmckl_context context, + const int64_t walk_num, + const int64_t elec_num, + const int64_t cord_num, + const double rescale_factor_ee, + const double* coord_ee, + const double* ee_distance, + const double* een_rescaled_e, + double* const een_rescaled_e_gl ) { - 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 (cord_num < 0) return QMCKL_INVALID_ARG_4; + 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 (cord_num < 0) return QMCKL_INVALID_ARG_4; + +#ifdef HAVE_OPENMP +#pragma omp parallel +#endif + { double* restrict elec_dist_gl0 = (double*) calloc(elec_num * elec_num, sizeof(double)); double* restrict elec_dist_gl1 = (double*) calloc(elec_num * elec_num, sizeof(double)); @@ -7676,97 +7682,118 @@ qmckl_exit_code qmckl_compute_jastrow_champ_factor_een_rescaled_e_gl_hpc ( assert (elec_dist_gl1 != NULL); assert (elec_dist_gl2 != NULL); assert (elec_dist_gl3 != NULL); - + #ifdef HAVE_OPENMP - #pragma omp parallel for +#pragma omp for #endif for (int64_t nw = 0; nw < walk_num; ++nw) { - double rij_inv[elec_num]; - for (int64_t j = 0; j < elec_num; ++j) { + + double rij_inv[elec_num]; + + for (int64_t j=0; j