diff --git a/org/qmckl_determinant.org b/org/qmckl_determinant.org index 56b1728..74ddf40 100644 --- a/org/qmckl_determinant.org +++ b/org/qmckl_determinant.org @@ -424,7 +424,8 @@ qmckl_exit_code qmckl_set_determinant_mo_index_alpha(qmckl_context context, con } qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = ctx->det.walk_num * ctx->det.det_num_alpha * ctx->electron.up_num * sizeof(int64_t); + mem_info.size = ctx->det.walk_num * ctx->det.det_num_alpha * + ctx->electron.up_num * sizeof(int64_t); int64_t* new_array = (int64_t*) qmckl_malloc(context, mem_info); if (new_array == NULL) { return qmckl_failwith( context, @@ -455,7 +456,8 @@ qmckl_exit_code qmckl_set_determinant_mo_index_beta(qmckl_context context, cons } qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = ctx->det.walk_num * ctx->det.det_num_beta * ctx->electron.down_num * sizeof(int64_t); + mem_info.size = ctx->det.walk_num * ctx->det.det_num_beta * + ctx->electron.down_num * sizeof(int64_t); int64_t* new_array = (int64_t*) qmckl_malloc(context, mem_info); if (new_array == NULL) { return qmckl_failwith( context, @@ -520,11 +522,12 @@ qmckl_exit_code qmckl_get_det_vgl_alpha(qmckl_context context, double * const de rc = qmckl_provide_det_vgl_alpha(context); if (rc != QMCKL_SUCCESS) return rc; - //qmckl_context_struct* const ctx = (qmckl_context_struct* const) context; - //assert (ctx != NULL); + qmckl_context_struct* const ctx = (qmckl_context_struct* const) context; + assert (ctx != NULL); - //size_t sze = ctx->det.det_num_alpha * ctx->det.walk_num * ctx->electron.up_num * ctx->electron.up_num; - //memcpy(det_vgl_alpha, ctx->det.det_vgl_alpha, sze * sizeof(double)); + size_t sze = 5 * ctx->det.det_num_alpha * ctx->det.walk_num * + ctx->electron.up_num * ctx->electron.up_num * sizeof(double); + memcpy(det_vgl_alpha, ctx->det.det_vgl_alpha, sze); return QMCKL_SUCCESS; } @@ -549,8 +552,9 @@ qmckl_exit_code qmckl_get_det_vgl_beta(qmckl_context context, double * const det qmckl_context_struct* const ctx = (qmckl_context_struct* const) context; assert (ctx != NULL); - size_t sze = ctx->det.det_num_beta * ctx->det.walk_num * ctx->electron.down_num * ctx->electron.down_num; - memcpy(det_vgl_beta, ctx->det.det_vgl_beta, sze * sizeof(double)); + size_t sze = 5 * ctx->det.det_num_beta * ctx->det.walk_num * + ctx->electron.down_num * ctx->electron.down_num * sizeof(double); + memcpy(det_vgl_beta, ctx->det.det_vgl_beta, sze); return QMCKL_SUCCESS; } @@ -764,7 +768,7 @@ qmckl_exit_code qmckl_provide_det_vgl_beta(qmckl_context context) { | ~int64_t~ | ~elec_num~ | in | Number of electrons | | ~int64_t~ | ~mo_index_alpha[det_num_alpha][walk_num][alpha_num]~ | in | MO indices for electrons | | ~int64_t~ | ~mo_num~ | in | Number of MOs | - | ~double~ | ~mo_vgl[5][walk_num][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs | + | ~double~ | ~mo_vgl[5][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs | | ~double~ | ~det_vgl_alpha[det_num_alpha][walk_num][5][alpha_num][alpha_num]~ | out | Value, gradients and Laplacian of the Det | #+begin_src f90 :comments org :tangle (eval f) :noweb yes @@ -782,7 +786,7 @@ integer function qmckl_compute_det_vgl_alpha_f(context, & integer*8, intent(in) :: elec_num integer*8, intent(in) :: mo_num integer*8, intent(in) :: mo_index_alpha(alpha_num, walk_num, det_num_alpha) - double precision, intent(in) :: mo_vgl(mo_num, elec_num, walk_num, 5) + double precision, intent(in) :: mo_vgl(mo_num, elec_num, 5) double precision, intent(inout) :: det_vgl_alpha(alpha_num, alpha_num, 5, walk_num, det_num_alpha) integer*8 :: idet, iwalk, ielec, mo_id, imo @@ -808,20 +812,20 @@ integer function qmckl_compute_det_vgl_alpha_f(context, & do ielec = 1, alpha_num do imo = 1, alpha_num mo_id = mo_index_alpha(imo,iwalk,idet) - !! Value - det_vgl_alpha(imo, ielec, 1, iwalk, idet) = 1.0d0!mo_vgl(mo_id, ielec, iwalk, 1) + ! Value + det_vgl_alpha(imo, ielec, 1, iwalk, idet) = mo_vgl(mo_id, ielec, 1) - !! Grad_x - !det_vgl_alpha(imo, ielec, 2, iwalk, idet) = mo_vgl(mo_id, ielec, iwalk, 2) + ! Grad_x + det_vgl_alpha(imo, ielec, 2, iwalk, idet) = mo_vgl(mo_id, ielec, 2) - !! Grad_y - !det_vgl_alpha(imo, ielec, 3, iwalk, idet) = mo_vgl(mo_id, ielec, iwalk, 3) + ! Grad_y + det_vgl_alpha(imo, ielec, 3, iwalk, idet) = mo_vgl(mo_id, ielec, 3) - !! Grad_z - !det_vgl_alpha(imo, ielec, 4, iwalk, idet) = mo_vgl(mo_id, ielec, iwalk, 4) + ! Grad_z + det_vgl_alpha(imo, ielec, 4, iwalk, idet) = mo_vgl(mo_id, ielec, 4) - !! Lap - !det_vgl_alpha(imo, ielec, 5, iwalk, idet) = mo_vgl(mo_id, ielec, iwalk, 5) + ! Lap + det_vgl_alpha(imo, ielec, 5, iwalk, idet) = mo_vgl(mo_id, ielec, 5) end do end do end do @@ -875,8 +879,8 @@ end function qmckl_compute_det_vgl_alpha_f integer (c_int64_t) , intent(in) , value :: elec_num integer (c_int64_t) , intent(in) :: mo_index_alpha(alpha_num,walk_num,det_num_alpha) integer (c_int64_t) , intent(in) , value :: mo_num - real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,walk_num,5) - real (c_double ) , intent(out) :: det_vgl_alpha(alpha_num, alpha_num, 5, walk_num, det_num_alpha) + real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,5) + real (c_double ) , intent(out) :: det_vgl_alpha(alpha_num,alpha_num,5,walk_num,det_num_alpha) integer(c_int32_t), external :: qmckl_compute_det_vgl_alpha_f info = qmckl_compute_det_vgl_alpha_f & @@ -910,7 +914,7 @@ end function qmckl_compute_det_vgl_alpha_f | ~int64_t~ | ~elec_num~ | in | Number of electrons | | ~int64_t~ | ~mo_index_beta[det_num_beta][walk_num][beta_num]~ | in | Number of electrons | | ~int64_t~ | ~mo_num~ | in | Number of MOs | - | ~double~ | ~mo_vgl[5][walk_num][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs | + | ~double~ | ~mo_vgl[5][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs | | ~double~ | ~det_vgl_beta[det_num_beta][walk_num][5][beta_num][beta_num]~ | out | Value, gradients and Laplacian of the Det | #+begin_src f90 :comments org :tangle (eval f) :noweb yes @@ -928,7 +932,7 @@ integer function qmckl_compute_det_vgl_beta_f(context, & integer*8, intent(in) :: elec_num integer*8, intent(in) :: mo_num integer*8, intent(in) :: mo_index_beta(beta_num,walk_num,det_num_beta) - double precision, intent(in) :: mo_vgl(mo_num, elec_num, walk_num, 5) + double precision, intent(in) :: mo_vgl(mo_num, elec_num, 5) double precision, intent(inout) :: det_vgl_beta(beta_num, beta_num, 5, walk_num, det_num_beta) integer*8 :: idet, iwalk, ielec, mo_id, imo @@ -955,19 +959,19 @@ integer function qmckl_compute_det_vgl_beta_f(context, & do imo = 1, beta_num mo_id = mo_index_beta(imo, iwalk, idet) ! Value - det_vgl_beta(imo, ielec, 1, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, iwalk, 1) + det_vgl_beta(imo, ielec, 1, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, 1) ! Grad_x - det_vgl_beta(imo, ielec, 2, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, iwalk, 2) + det_vgl_beta(imo, ielec, 2, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, 2) ! Grad_y - det_vgl_beta(imo, ielec, 3, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, iwalk, 3) + det_vgl_beta(imo, ielec, 3, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, 3) ! Grad_z - det_vgl_beta(imo, ielec, 4, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, iwalk, 4) + det_vgl_beta(imo, ielec, 4, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, 4) ! Lap - det_vgl_beta(imo, ielec, 5, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, iwalk, 5) + det_vgl_beta(imo, ielec, 5, iwalk, idet) = mo_vgl(mo_id, alpha_num + ielec, 5) end do end do end do @@ -976,7 +980,7 @@ integer function qmckl_compute_det_vgl_beta_f(context, & end function qmckl_compute_det_vgl_beta_f #+end_src - #+CALL: generate_c_header(table=qmckl_compute_det_vgl_beta_args,rettyp=get_value("CRetType"),fname="qmckl_compute_det_vgl_beta")) + #+CALL: generate_c_header(table=qmckl_compute_det_vgl_beta_args,rettyp=get_value("CRetType"),fname="qmckl_compute_det_vgl_beta")) #+RESULTS: #+begin_src c :tangle (eval h_func) :comments org @@ -1021,7 +1025,7 @@ end function qmckl_compute_det_vgl_beta_f integer (c_int64_t) , intent(in) , value :: elec_num integer (c_int64_t) , intent(in) :: mo_index_beta(beta_num,walk_num,det_num_beta) integer (c_int64_t) , intent(in) , value :: mo_num - real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,walk_num,5) + real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,5) real (c_double ) , intent(out) :: det_vgl_beta(beta_num,beta_num,5,walk_num,det_num_beta) integer(c_int32_t), external :: qmckl_compute_det_vgl_beta_f @@ -1043,7 +1047,7 @@ end function qmckl_compute_det_vgl_beta_f *** Test #+begin_src c :tangle (eval c_test) :exports none -{ + #define walk_num chbrclf_walk_num #define elec_num chbrclf_elec_num #define shell_num chbrclf_shell_num @@ -1175,8 +1179,8 @@ assert (rc == QMCKL_SUCCESS); /* Set up determinant data */ -const int64_t det_num_alpha = 2; -const int64_t det_num_beta = 2; +const int64_t det_num_alpha = 1; +const int64_t det_num_beta = 1; int64_t mo_index_alpha[det_num_alpha][walk_num][elec_up_num]; int64_t mo_index_beta[det_num_alpha][walk_num][elec_dn_num]; @@ -1184,11 +1188,11 @@ int i, j, k; for(k = 0; k < det_num_alpha; ++k) for(i = 0; i < walk_num; ++i) for(j = 0; j < elec_up_num; ++j) - mo_index_alpha[k][i][j] = j; + mo_index_alpha[k][i][j] = j + 1; for(k = 0; k < det_num_beta; ++k) for(i = 0; i < walk_num; ++i) for(j = 0; j < elec_up_num; ++j) - mo_index_beta[k][i][j] = j; + mo_index_beta[k][i][j] = j + 1; rc = qmckl_set_determinant_type (context, typ); assert(rc == QMCKL_SUCCESS); @@ -1208,12 +1212,10 @@ assert (rc == QMCKL_SUCCESS); rc = qmckl_set_determinant_mo_index_beta (context, &(mo_index_beta[0][0][0])); assert (rc == QMCKL_SUCCESS); -// Get alpha determinant +// Get slater-determinant double det_vgl_alpha[det_num_alpha][walk_num][5][elec_up_num][elec_up_num]; double det_vgl_beta[det_num_beta][walk_num][5][elec_dn_num][elec_dn_num]; -double det_inv_matrix_alpha[det_num_alpha][walk_num][5][elec_up_num][elec_up_num]; -double det_inv_matrix_beta[det_num_beta][walk_num][5][elec_dn_num][elec_dn_num]; rc = qmckl_get_det_vgl_alpha(context, &(det_vgl_alpha[0][0][0][0][0])); assert (rc == QMCKL_SUCCESS); @@ -1221,14 +1223,6 @@ assert (rc == QMCKL_SUCCESS); rc = qmckl_get_det_vgl_beta(context, &(det_vgl_beta[0][0][0][0][0])); assert (rc == QMCKL_SUCCESS); -rc = qmckl_get_det_inv_matrix_alpha(context, &(det_inv_matrix_alpha[0][0][0][0][0])); -assert (rc == QMCKL_SUCCESS); - -rc = qmckl_get_det_inv_matrix_beta(context, &(det_inv_matrix_beta[0][0][0][0][0])); -assert (rc == QMCKL_SUCCESS); - -} - #+end_src ** Inverse of Determinant matrix @@ -1508,7 +1502,7 @@ qmckl_exit_code qmckl_provide_det_inv_matrix_beta(qmckl_context context) { :FRetType: qmckl_exit_code :END: - #+NAME: qmckl_det_inv_matrix_alpha_args + #+NAME: qmckl_det_inv_matrix_alpha_args | ~qmckl_context~ | ~context~ | in | Global state | | ~int64_t~ | ~det_num_alpha~ | in | Number of determinants | | ~int64_t~ | ~walk_num~ | in | Number of walkers | @@ -1785,6 +1779,19 @@ end function qmckl_compute_det_inv_matrix_beta_f *** Test + #+begin_src c :tangle (eval c_test) :exports none +// Get adjoint of the slater-determinant + +double det_inv_matrix_alpha[det_num_alpha][walk_num][5][elec_up_num][elec_up_num]; +double det_inv_matrix_beta[det_num_beta][walk_num][5][elec_dn_num][elec_dn_num]; + +rc = qmckl_get_det_inv_matrix_alpha(context, &(det_inv_matrix_alpha[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_get_det_inv_matrix_beta(context, &(det_inv_matrix_beta[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + + #+end_src * End of files :noexport: diff --git a/org/qmckl_local_energy.org b/org/qmckl_local_energy.org index 58f4753..5cb806b 100644 --- a/org/qmckl_local_energy.org +++ b/org/qmckl_local_energy.org @@ -135,7 +135,7 @@ int main() { The following arrays are stored in the context: - || + | | Computed data: @@ -518,6 +518,202 @@ end function qmckl_compute_kinetic_energy_f #+end_src *** Test + #+begin_src c :tangle (eval c_test) :exports none + +#define walk_num chbrclf_walk_num +#define elec_num chbrclf_elec_num +#define shell_num chbrclf_shell_num +#define ao_num chbrclf_ao_num + +int64_t elec_up_num = chbrclf_elec_up_num; +int64_t elec_dn_num = chbrclf_elec_dn_num; +double* elec_coord = &(chbrclf_elec_coord[0][0][0]); +const int64_t nucl_num = chbrclf_nucl_num; +const double* nucl_charge = chbrclf_charge; +const double* nucl_coord = &(chbrclf_nucl_coord[0][0]); + +rc = qmckl_set_electron_num (context, elec_up_num, elec_dn_num); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_set_electron_walk_num (context, walk_num); +assert (rc == QMCKL_SUCCESS); + +assert(qmckl_electron_provided(context)); + +rc = qmckl_set_electron_coord (context, 'N', elec_coord); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_nucleus_num (context, nucl_num); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_nucleus_coord (context, 'T', &(nucl_coord[0])); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_nucleus_charge(context, nucl_charge); +assert(rc == QMCKL_SUCCESS); + +assert(qmckl_nucleus_provided(context)); + +const int64_t * nucleus_index = &(chbrclf_basis_nucleus_index[0]); +const int64_t * nucleus_shell_num = &(chbrclf_basis_nucleus_shell_num[0]); +const int32_t * shell_ang_mom = &(chbrclf_basis_shell_ang_mom[0]); +const int64_t * shell_prim_num = &(chbrclf_basis_shell_prim_num[0]); +const int64_t * shell_prim_index = &(chbrclf_basis_shell_prim_index[0]); +const double * shell_factor = &(chbrclf_basis_shell_factor[0]); +const double * exponent = &(chbrclf_basis_exponent[0]); +const double * coefficient = &(chbrclf_basis_coefficient[0]); +const double * prim_factor = &(chbrclf_basis_prim_factor[0]); +const double * ao_factor = &(chbrclf_basis_ao_factor[0]); + +const char typ = 'G'; + +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_type (context, typ); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_shell_num (context, chbrclf_shell_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_prim_num (context, chbrclf_prim_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_nucleus_index (context, nucleus_index); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_nucleus_shell_num (context, nucleus_shell_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_shell_ang_mom (context, shell_ang_mom); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_shell_factor (context, shell_factor); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_shell_prim_num (context, shell_prim_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_shell_prim_index (context, shell_prim_index); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_exponent (context, exponent); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_coefficient (context, coefficient); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); + +rc = qmckl_set_ao_basis_prim_factor (context, prim_factor); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_ao_basis_ao_num(context, chbrclf_ao_num); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_ao_basis_ao_factor (context, ao_factor); +assert(rc == QMCKL_SUCCESS); + +assert(qmckl_ao_basis_provided(context)); + + +double ao_vgl[5][walk_num][elec_num][chbrclf_ao_num]; + +rc = qmckl_get_ao_vgl(context, &(ao_vgl[0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +/* Set up MO data */ +rc = qmckl_set_mo_basis_type(context, typ); +assert (rc == QMCKL_SUCCESS); + +const int64_t mo_num = chbrclf_mo_num; +rc = qmckl_set_mo_basis_mo_num(context, mo_num); +assert (rc == QMCKL_SUCCESS); + +const double * mo_coefficient = &(chbrclf_mo_coef[0]); + +rc = qmckl_set_mo_basis_coefficient(context, mo_coefficient); +assert (rc == QMCKL_SUCCESS); + +assert(qmckl_mo_basis_provided(context)); + +double mo_vgl[5][elec_num][chbrclf_mo_num]; +rc = qmckl_get_mo_basis_vgl(context, &(mo_vgl[0][0][0])); +assert (rc == QMCKL_SUCCESS); + +/* Set up determinant data */ + +const int64_t det_num_alpha = 1; +const int64_t det_num_beta = 1; +int64_t mo_index_alpha[det_num_alpha][walk_num][elec_up_num]; +int64_t mo_index_beta[det_num_alpha][walk_num][elec_dn_num]; + +int i, j, k; +for(k = 0; k < det_num_alpha; ++k) + for(i = 0; i < walk_num; ++i) + for(j = 0; j < elec_up_num; ++j) + mo_index_alpha[k][i][j] = j + 1; +for(k = 0; k < det_num_beta; ++k) + for(i = 0; i < walk_num; ++i) + for(j = 0; j < elec_up_num; ++j) + mo_index_beta[k][i][j] = j + 1; + +rc = qmckl_set_determinant_type (context, typ); +assert(rc == QMCKL_SUCCESS); + +rc = qmckl_set_determinant_walk_num (context, walk_num); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_set_determinant_det_num_alpha (context, det_num_alpha); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_set_determinant_det_num_beta (context, det_num_beta); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_set_determinant_mo_index_alpha (context, &(mo_index_alpha[0][0][0])); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_set_determinant_mo_index_beta (context, &(mo_index_beta[0][0][0])); +assert (rc == QMCKL_SUCCESS); + +// Get alpha determinant + +double det_vgl_alpha[det_num_alpha][walk_num][5][elec_up_num][elec_up_num]; +double det_vgl_beta[det_num_beta][walk_num][5][elec_dn_num][elec_dn_num]; + +rc = qmckl_get_det_vgl_alpha(context, &(det_vgl_alpha[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_get_det_vgl_beta(context, &(det_vgl_beta[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +// Get adjoint of the slater-determinant + +double det_inv_matrix_alpha[det_num_alpha][walk_num][5][elec_up_num][elec_up_num]; +double det_inv_matrix_beta[det_num_beta][walk_num][5][elec_dn_num][elec_dn_num]; + +rc = qmckl_get_det_inv_matrix_alpha(context, &(det_inv_matrix_alpha[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +rc = qmckl_get_det_inv_matrix_beta(context, &(det_inv_matrix_beta[0][0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +// Calculate the Kinetic energy + +double kinetic_energy[walk_num]; + +rc = qmckl_get_kinetic_energy(context, &(kinetic_energy[0])); +assert (rc == QMCKL_SUCCESS); + + #+end_src ** Potential energy :PROPERTIES: @@ -783,6 +979,16 @@ end function qmckl_compute_potential_energy_f #+end_src *** Test + #+begin_src c :tangle (eval c_test) :exports none +// Calculate the Potential energy + +double potential_energy[walk_num]; + +rc = qmckl_get_potential_energy(context, &(potential_energy[0])); +assert (rc == QMCKL_SUCCESS); + + #+end_src + ** Local energy :PROPERTIES: :Name: qmckl_compute_local_energy @@ -1012,6 +1218,16 @@ end function qmckl_compute_local_energy_f #+end_src *** Test + #+begin_src c :tangle (eval c_test) :exports none +// Calculate the Local energy + +double local_energy[walk_num]; + +rc = qmckl_get_local_energy(context, &(local_energy[0])); +assert (rc == QMCKL_SUCCESS); + + #+end_src + ** Drift vector :PROPERTIES: :Name: qmckl_compute_drift_vector @@ -1188,7 +1404,7 @@ qmckl_exit_code qmckl_provide_drift_vector(qmckl_context context) { | ~double~ | ~mo_vgl[5][walk_num][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs | | ~double~ | ~det_adj_matrix_alpha[det_num_alpha][walk_num][alpha_num][alpha_num]~ | in | Value, gradients and Laplacian of the Det | | ~double~ | ~det_adj_matrix_beta[det_num_beta][walk_num][beta_num][beta_num]~ | in | Value, gradients and Laplacian of the Det | - | ~double~ | ~r_drift[walk_num][3]~ | out | Kinetic energy | + | ~double~ | ~r_drift[walk_num][3]~ | out | Kinetic energy | #+begin_src f90 :comments org :tangle (eval f) :noweb yes integer function qmckl_compute_drift_vector_f(context, walk_num, & @@ -1354,6 +1570,15 @@ end function qmckl_compute_drift_vector_f #+end_src *** Test + #+begin_src c :tangle (eval c_test) :exports none +// Calculate the Drift vector + +double drift_vector[walk_num][3]; + +rc = qmckl_get_drift_vector(context, &(drift_vector[0][0])); +assert (rc == QMCKL_SUCCESS); + + #+end_src * End of files :noexport: #+begin_src c :tangle (eval h_private_type)