diff --git a/org/qmckl_ao.org b/org/qmckl_ao.org index aa6a648..8320f8c 100644 --- a/org/qmckl_ao.org +++ b/org/qmckl_ao.org @@ -3014,7 +3014,7 @@ qmckl_get_ao_basis_ao_vgl (qmckl_context context, qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; qmckl_context_struct* const ctx = (qmckl_context_struct*) context; @@ -3090,7 +3090,7 @@ qmckl_get_ao_basis_ao_vgl_inplace (qmckl_context context, ctx->ao_basis.ao_vgl = ao_vgl; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; ctx->ao_basis.ao_vgl = old_array; @@ -6938,18 +6938,26 @@ qmckl_compute_ao_vgl_hpc_gaussian ( **** Provide :noexport: - #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none -qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context); - #+end_src +#+CALL: write_provider_header( group="ao_basis", data="ao_vgl" ) - #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none -qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) +#+RESULTS: +#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :export none +qmckl_exit_code qmckl_provide_ao_basis_ao_vgl(qmckl_context context); +#+end_src + +#+CALL: write_provider_pre( group="ao_basis", data="ao_vgl", dimension="ctx->ao_basis.ao_num * 5 * ctx->point.num") + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none +qmckl_exit_code qmckl_provide_ao_basis_ao_vgl(qmckl_context context) { + qmckl_exit_code rc; + if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) { return qmckl_failwith( context, QMCKL_INVALID_CONTEXT, - "qmckl_provide_ao_vgl", + "qmckl_provide_ao_basis_ao_vgl", NULL); } @@ -6959,24 +6967,20 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) if (!ctx->ao_basis.provided) { return qmckl_failwith( context, QMCKL_NOT_PROVIDED, - "qmckl_ao_vgl", + "qmckl_provide_ao_basis_ao_vgl", NULL); } /* Compute if necessary */ if (ctx->point.date > ctx->ao_basis.ao_vgl_date) { - qmckl_exit_code rc; - - /* Provide required data */ -#ifdef HAVE_HPC - -#else - rc = qmckl_provide_ao_basis_shell_vgl(context); - if (rc != QMCKL_SUCCESS) { - return qmckl_failwith( context, rc, "qmckl_provide_ao_basis_shell_vgl", NULL); + if (ctx->point.alloc_date > ctx->ao_basis.ao_vgl_date) { + if (ctx->ao_basis.ao_vgl != NULL) { + rc = qmckl_free(context, ctx->ao_basis.ao_vgl); + assert (rc == QMCKL_SUCCESS); + ctx->ao_basis.ao_vgl = NULL; + } } -#endif /* Allocate array */ if (ctx->ao_basis.ao_vgl == NULL) { @@ -6993,6 +6997,10 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) } ctx->ao_basis.ao_vgl = ao_vgl; } + +#+end_src + + #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none #ifdef HAVE_HPC if (ctx->ao_basis.type == 'G') { rc = qmckl_compute_ao_vgl_hpc_gaussian(context, @@ -7069,6 +7077,13 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) ctx->ao_basis.ao_vgl); ,*/ } else { + /* Provide required data */ + + rc = qmckl_provide_ao_basis_shell_vgl(context); + if (rc != QMCKL_SUCCESS) { + return qmckl_failwith( context, rc, "qmckl_provide_ao_basis_shell_vgl", NULL); + } + rc = qmckl_compute_ao_vgl_doc(context, ctx->ao_basis.ao_num, ctx->ao_basis.shell_num, @@ -7086,6 +7101,11 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) ctx->ao_basis.ao_vgl); } #else + rc = qmckl_provide_ao_basis_shell_vgl(context); + if (rc != QMCKL_SUCCESS) { + return qmckl_failwith( context, rc, "qmckl_provide_ao_basis_shell_vgl", NULL); + } + rc = qmckl_compute_ao_vgl_doc(context, ctx->ao_basis.ao_num, ctx->ao_basis.shell_num, @@ -7102,6 +7122,12 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) ctx->ao_basis.shell_vgl, ctx->ao_basis.ao_vgl); #endif + #+end_src + +#+CALL: write_provider_post( group="ao_basis", data="ao_vgl" ) + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none if (rc != QMCKL_SUCCESS) { return rc; } @@ -7111,7 +7137,7 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context) return QMCKL_SUCCESS; } - #+end_src +#+end_src **** Test :noexport: diff --git a/org/qmckl_determinant.org b/org/qmckl_determinant.org index ec4c9d9..c01d2b0 100644 --- a/org/qmckl_determinant.org +++ b/org/qmckl_determinant.org @@ -587,10 +587,10 @@ qmckl_exit_code qmckl_get_det_vgl_alpha(qmckl_context context, double * const de qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_alpha(context); @@ -614,10 +614,10 @@ qmckl_exit_code qmckl_get_det_vgl_beta(qmckl_context context, double * const det qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_beta(context); @@ -679,7 +679,7 @@ qmckl_exit_code qmckl_provide_det_vgl_alpha(qmckl_context context) { "qmckl_mo_basis", NULL); } - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) { return qmckl_failwith( context, QMCKL_NOT_PROVIDED, @@ -1326,10 +1326,10 @@ qmckl_exit_code qmckl_get_det_inv_matrix_alpha(qmckl_context context, double * c qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_alpha(context); @@ -1355,10 +1355,10 @@ qmckl_exit_code qmckl_get_det_inv_matrix_beta(qmckl_context context, double * co qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_beta(context); @@ -1384,10 +1384,10 @@ qmckl_exit_code qmckl_get_det_adj_matrix_alpha(qmckl_context context, double * c qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_alpha(context); @@ -1413,10 +1413,10 @@ qmckl_exit_code qmckl_get_det_adj_matrix_beta(qmckl_context context, double * co qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_beta(context); @@ -1442,10 +1442,10 @@ qmckl_exit_code qmckl_get_det_alpha(qmckl_context context, double * const det_va qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_alpha(context); @@ -1471,10 +1471,10 @@ qmckl_exit_code qmckl_get_det_beta(qmckl_context context, double * const det_val qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_det_vgl_beta(context); diff --git a/org/qmckl_local_energy.org b/org/qmckl_local_energy.org index 9dcc715..71e8037 100644 --- a/org/qmckl_local_energy.org +++ b/org/qmckl_local_energy.org @@ -217,10 +217,10 @@ qmckl_exit_code qmckl_get_kinetic_energy(qmckl_context context, double * const k if(!qmckl_nucleus_provided(context)) return QMCKL_NOT_PROVIDED; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_kinetic_energy(context); @@ -781,10 +781,10 @@ qmckl_exit_code qmckl_get_potential_energy(qmckl_context context, double * const if(!qmckl_nucleus_provided(context)) return QMCKL_NOT_PROVIDED; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_potential_energy(context); @@ -1065,10 +1065,10 @@ qmckl_exit_code qmckl_get_local_energy(qmckl_context context, double * const loc if(!qmckl_nucleus_provided(context)) return QMCKL_NOT_PROVIDED; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_local_energy(context); @@ -1079,10 +1079,10 @@ qmckl_exit_code qmckl_get_local_energy(qmckl_context context, double * const loc const int64_t sze = ctx->electron.walk_num; if (size_max < sze) { - return qmckl_failwith( context, - QMCKL_INVALID_ARG_3, - "qmckl_get_local_energy", - "input array too small"); + return qmckl_failwith( context, + QMCKL_INVALID_ARG_3, + "qmckl_get_local_energy", + "input array too small"); } memcpy(local_energy, ctx->local_energy.e_local, sze * sizeof(double)); @@ -1327,10 +1327,10 @@ qmckl_exit_code qmckl_get_drift_vector(qmckl_context context, double * const dri if(!qmckl_nucleus_provided(context)) return QMCKL_NOT_PROVIDED; - rc = qmckl_provide_ao_vgl(context); + rc = qmckl_provide_ao_basis_ao_vgl(context); if (rc != QMCKL_SUCCESS) return rc; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; rc = qmckl_provide_drift_vector(context); diff --git a/org/qmckl_mo.org b/org/qmckl_mo.org index 6d23bf0..016a324 100644 --- a/org/qmckl_mo.org +++ b/org/qmckl_mo.org @@ -457,10 +457,7 @@ qmckl_get_mo_basis_mo_value(qmckl_context context, qmckl_exit_code rc; - rc = qmckl_provide_ao_basis_ao_value(context); - if (rc != QMCKL_SUCCESS) return rc; - - rc = qmckl_provide_mo_value(context); + rc = qmckl_provide_mo_basis_mo_value(context); if (rc != QMCKL_SUCCESS) return rc; qmckl_context_struct* const ctx = (qmckl_context_struct*) context; @@ -537,7 +534,7 @@ qmckl_get_mo_basis_mo_value_inplace (qmckl_context context, ctx->mo_basis.mo_value = mo_value; - rc = qmckl_provide_mo_value(context); + rc = qmckl_provide_mo_basis_mo_value(context); if (rc != QMCKL_SUCCESS) return rc; ctx->mo_basis.mo_value = old_array; @@ -562,52 +559,55 @@ qmckl_get_mo_basis_mo_value_inplace (qmckl_context context, *** Provide - #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none -qmckl_exit_code qmckl_provide_mo_value(qmckl_context context); - #+end_src +#+CALL: write_provider_header( group="mo_basis", data="mo_value" ) - #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none -qmckl_exit_code qmckl_provide_mo_value(qmckl_context context) +#+RESULTS: +#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :export none +qmckl_exit_code qmckl_provide_mo_basis_mo_value(qmckl_context context); +#+end_src + +#+CALL: write_provider_pre( group="mo_basis", data="mo_value", dimension="ctx->mo_basis.mo_num * ctx->point.num") + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none +qmckl_exit_code qmckl_provide_mo_basis_mo_value(qmckl_context context) { qmckl_exit_code rc; + if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) { - return QMCKL_NULL_CONTEXT; + return qmckl_failwith( context, + QMCKL_INVALID_CONTEXT, + "qmckl_provide_mo_basis_mo_value", + NULL); } qmckl_context_struct* const ctx = (qmckl_context_struct*) context; assert (ctx != NULL); - if (!ctx->ao_basis.provided) { - return qmckl_failwith( context, - QMCKL_NOT_PROVIDED, - "qmckl_ao_basis", - NULL); - } - - rc = qmckl_provide_ao_basis_ao_value(context); - if (rc != QMCKL_SUCCESS) { - return qmckl_failwith( context, - QMCKL_NOT_PROVIDED, - "qmckl_ao_value", - NULL); - } - if (!ctx->mo_basis.provided) { return qmckl_failwith( context, QMCKL_NOT_PROVIDED, - "qmckl_mo_basis", + "qmckl_provide_mo_basis_mo_value", NULL); } /* Compute if necessary */ if (ctx->point.date > ctx->mo_basis.mo_value_date) { + if (ctx->point.alloc_date > ctx->mo_basis.mo_value_date) { + if (ctx->mo_basis.mo_value != NULL) { + rc = qmckl_free(context, ctx->mo_basis.mo_value); + assert (rc == QMCKL_SUCCESS); + ctx->mo_basis.mo_value = NULL; + } + } + /* Allocate array */ if (ctx->mo_basis.mo_value == NULL) { qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = ctx->point.num * ctx->mo_basis.mo_num * sizeof(double); + mem_info.size = ctx->mo_basis.mo_num * ctx->point.num * sizeof(double); double* mo_value = (double*) qmckl_malloc(context, mem_info); if (mo_value == NULL) { @@ -619,6 +619,17 @@ qmckl_exit_code qmckl_provide_mo_value(qmckl_context context) ctx->mo_basis.mo_value = mo_value; } +#+end_src + + #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none + rc = qmckl_provide_ao_basis_ao_value(context); + if (rc != QMCKL_SUCCESS) { + return qmckl_failwith( context, + QMCKL_NOT_PROVIDED, + "qmckl_ao_value", + NULL); + } + if (ctx->mo_basis.mo_vgl_date == ctx->point.date) { // mo_vgl has been computed at this step: Just copy the data. @@ -643,10 +654,15 @@ qmckl_exit_code qmckl_provide_mo_value(qmckl_context context) ctx->ao_basis.ao_value, ctx->mo_basis.mo_value); - if (rc != QMCKL_SUCCESS) { - return rc; - } + } + #+end_src +#+CALL: write_provider_post( group="mo_basis", data="mo_value" ) + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none + if (rc != QMCKL_SUCCESS) { + return rc; } ctx->mo_basis.mo_value_date = ctx->date; @@ -654,7 +670,7 @@ qmckl_exit_code qmckl_provide_mo_value(qmckl_context context) return QMCKL_SUCCESS; } - #+end_src +#+end_src *** Compute :PROPERTIES: @@ -914,10 +930,7 @@ qmckl_get_mo_basis_mo_vgl(qmckl_context context, qmckl_exit_code rc; - rc = qmckl_provide_ao_vgl(context); - if (rc != QMCKL_SUCCESS) return rc; - - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; qmckl_context_struct* const ctx = (qmckl_context_struct*) context; @@ -994,7 +1007,7 @@ qmckl_get_mo_basis_mo_vgl_inplace (qmckl_context context, ctx->mo_basis.mo_vgl = mo_vgl; - rc = qmckl_provide_mo_vgl(context); + rc = qmckl_provide_mo_basis_mo_vgl(context); if (rc != QMCKL_SUCCESS) return rc; ctx->mo_basis.mo_vgl = old_array; @@ -1019,52 +1032,55 @@ qmckl_get_mo_basis_mo_vgl_inplace (qmckl_context context, *** Provide - #+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none -qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context); - #+end_src +#+CALL: write_provider_header( group="mo_basis", data="mo_vgl" ) - #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none -qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context) +#+RESULTS: +#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :export none +qmckl_exit_code qmckl_provide_mo_basis_mo_vgl(qmckl_context context); +#+end_src + +#+CALL: write_provider_pre( group="mo_basis", data="mo_vgl", dimension="5 * ctx->mo_basis.mo_num * ctx->point.num") + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none +qmckl_exit_code qmckl_provide_mo_basis_mo_vgl(qmckl_context context) { qmckl_exit_code rc; + if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) { - return QMCKL_NULL_CONTEXT; + return qmckl_failwith( context, + QMCKL_INVALID_CONTEXT, + "qmckl_provide_mo_basis_mo_vgl", + NULL); } qmckl_context_struct* const ctx = (qmckl_context_struct*) context; assert (ctx != NULL); - if (!ctx->ao_basis.provided) { - return qmckl_failwith( context, - QMCKL_NOT_PROVIDED, - "qmckl_ao_basis", - NULL); - } - - rc = qmckl_provide_ao_vgl(context); - if (rc != QMCKL_SUCCESS) { - return qmckl_failwith( context, - QMCKL_NOT_PROVIDED, - "qmckl_ao_basis", - NULL); - } - if (!ctx->mo_basis.provided) { return qmckl_failwith( context, QMCKL_NOT_PROVIDED, - "qmckl_mo_basis", + "qmckl_provide_mo_basis_mo_vgl", NULL); } /* Compute if necessary */ if (ctx->point.date > ctx->mo_basis.mo_vgl_date) { + if (ctx->point.alloc_date > ctx->mo_basis.mo_vgl_date) { + if (ctx->mo_basis.mo_vgl != NULL) { + rc = qmckl_free(context, ctx->mo_basis.mo_vgl); + assert (rc == QMCKL_SUCCESS); + ctx->mo_basis.mo_vgl = NULL; + } + } + /* Allocate array */ if (ctx->mo_basis.mo_vgl == NULL) { qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = 5 * ctx->point.num * ctx->mo_basis.mo_num * sizeof(double); + mem_info.size = 5 * ctx->mo_basis.mo_num * ctx->point.num * sizeof(double); double* mo_vgl = (double*) qmckl_malloc(context, mem_info); if (mo_vgl == NULL) { @@ -1076,6 +1092,17 @@ qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context) ctx->mo_basis.mo_vgl = mo_vgl; } +#+end_src + + #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none + rc = qmckl_provide_ao_basis_ao_vgl(context); + if (rc != QMCKL_SUCCESS) { + return qmckl_failwith( context, + QMCKL_NOT_PROVIDED, + "qmckl_ao_basis", + NULL); + } + rc = qmckl_compute_mo_basis_mo_vgl(context, ctx->ao_basis.ao_num, ctx->mo_basis.mo_num, @@ -1083,6 +1110,12 @@ qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context) ctx->mo_basis.coefficient_t, ctx->ao_basis.ao_vgl, ctx->mo_basis.mo_vgl); + #+end_src + +#+CALL: write_provider_post( group="mo_basis", data="mo_vgl" ) + +#+RESULTS: +#+begin_src c :comments org :tangle (eval c) :noweb yes :export none if (rc != QMCKL_SUCCESS) { return rc; } @@ -1092,7 +1125,7 @@ qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context) return QMCKL_SUCCESS; } - #+end_src +#+end_src *** Compute :PROPERTIES: