diff --git a/org/qmckl_electron.org b/org/qmckl_electron.org index 8bc9f4b..621235d 100644 --- a/org/qmckl_electron.org +++ b/org/qmckl_electron.org @@ -1199,7 +1199,7 @@ qmckl_get_electron_en_distance(qmckl_context context, "distance is a null pointer"); } - size_t sze = ctx->point.num * ctx->nucleus.num; + int64_t sze = ctx->point.num * ctx->nucleus.num; if (size_max < sze) { return qmckl_failwith( context, QMCKL_INVALID_ARG_3, diff --git a/org/qmckl_jastrow_champ_single.org b/org/qmckl_jastrow_champ_single.org index 4e1d520..4dafa92 100644 --- a/org/qmckl_jastrow_champ_single.org +++ b/org/qmckl_jastrow_champ_single.org @@ -112,8 +112,10 @@ typedef struct qmckl_jastrow_champ_single_struct{ double * restrict een_rescaled_single_n_gl; uint64_t een_rescaled_single_n_gl_date; double* delta_p_gl; + uint64_t delta_p_gl_maxsize; uint64_t delta_p_gl_date; double* delta_een_gl; + uint64_t delta_een_gl_maxsize; uint64_t delta_een_gl_date; double* delta_een_g; uint64_t delta_een_g_date; @@ -3156,7 +3158,11 @@ qmckl_exit_code qmckl_provide_jastrow_champ_delta_p_gl(qmckl_context context) /* Compute if necessary */ if (ctx->single_point.date > ctx->single_point.delta_p_gl_date) { - if (ctx->electron.walker.num > ctx->electron.walker_old.num) { + qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; + mem_info.size = 4 * ctx->electron.walker.num * ctx->jastrow_champ.cord_num * + (ctx->jastrow_champ.cord_num + 1) * ctx->nucleus.num * ctx->electron.num * sizeof(double); + + if (mem_info.size > ctx->single_point.delta_p_gl_maxsize) { if (ctx->single_point.delta_p_gl != NULL) { rc = qmckl_free(context, ctx->single_point.delta_p_gl); if (rc != QMCKL_SUCCESS) { @@ -3171,10 +3177,8 @@ qmckl_exit_code qmckl_provide_jastrow_champ_delta_p_gl(qmckl_context context) /* Allocate array */ if (ctx->single_point.delta_p_gl == NULL) { - qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = 4 * ctx->electron.walker.num * ctx->jastrow_champ.cord_num * - (ctx->jastrow_champ.cord_num + 1) * ctx->nucleus.num * ctx->electron.num * sizeof(double); double* delta_p_gl = (double*) qmckl_malloc(context, mem_info); + ctx->single_point.delta_p_gl_maxsize = mem_info.size; if (delta_p_gl == NULL) { return qmckl_failwith( context, @@ -3551,7 +3555,10 @@ qmckl_exit_code qmckl_provide_jastrow_champ_single_een_gl(qmckl_context context) /* Compute if necessary */ if (ctx->single_point.date > ctx->single_point.delta_een_gl_date) { - if (ctx->electron.walker.num > ctx->electron.walker_old.num) { + qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; + mem_info.size = 4 * ctx->electron.num * ctx->electron.walker.num * sizeof(double); + + if (mem_info.size > ctx->single_point.delta_een_gl_maxsize) { if (ctx->single_point.delta_een_gl != NULL) { rc = qmckl_free(context, ctx->single_point.delta_een_gl); if (rc != QMCKL_SUCCESS) { @@ -3566,9 +3573,8 @@ qmckl_exit_code qmckl_provide_jastrow_champ_single_een_gl(qmckl_context context) /* Allocate array */ if (ctx->single_point.delta_een_gl == NULL) { - qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; - mem_info.size = 4 * ctx->electron.num * ctx->electron.walker.num * sizeof(double); double* delta_een_gl = (double*) qmckl_malloc(context, mem_info); + ctx->single_point.delta_een_gl_maxsize = mem_info.size; if (delta_een_gl == NULL) { return qmckl_failwith( context,