From 8090edc771bef34339d84ed6e849df9401d885be Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 3 Jun 2021 22:34:23 +0200 Subject: [PATCH] Fix AO tests --- org/qmckl_ao.org | 136 ++++++++++++++++++----------------------- org/qmckl_context.org | 2 +- org/qmckl_electron.org | 16 ++--- org/qmckl_tests.org | 26 ++++---- 4 files changed, 83 insertions(+), 97 deletions(-) diff --git a/org/qmckl_ao.org b/org/qmckl_ao.org index 2e40ada..64cb745 100644 --- a/org/qmckl_ao.org +++ b/org/qmckl_ao.org @@ -56,6 +56,8 @@ gradients and Laplacian of the atomic basis functions. #include "config.h" #endif +#include "chbrclf.h" + int main() { qmckl_context context; context = qmckl_context_create(); @@ -155,7 +157,7 @@ typedef struct qmckl_ao_basis_struct { int64_t shell_num; int64_t prim_num; int64_t * shell_center; - char * shell_ang_mom; + int32_t * shell_ang_mom; int64_t * shell_prim_num; int64_t * shell_prim_index; double * shell_factor; @@ -179,7 +181,7 @@ char qmckl_get_ao_basis_type (const qmckl_context context); int64_t qmckl_get_ao_basis_shell_num (const qmckl_context context); int64_t qmckl_get_ao_basis_prim_num (const qmckl_context context); int64_t* qmckl_get_ao_basis_shell_center (const qmckl_context context); -char* qmckl_get_ao_basis_shell_ang_mom (const qmckl_context context); +int32_t* qmckl_get_ao_basis_shell_ang_mom (const qmckl_context context); int64_t* qmckl_get_ao_basis_shell_prim_num (const qmckl_context context); int64_t* qmckl_get_ao_basis_shell_prim_index (const qmckl_context context); double* qmckl_get_ao_basis_shell_factor (const qmckl_context context); @@ -280,7 +282,7 @@ int64_t* qmckl_get_ao_basis_shell_center (const qmckl_context context) { } -char* qmckl_get_ao_basis_shell_ang_mom (const qmckl_context context) { +int32_t* qmckl_get_ao_basis_shell_ang_mom (const qmckl_context context) { if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) { return NULL; } @@ -403,7 +405,7 @@ double* qmckl_get_ao_basis_prim_factor (const qmckl_context context) { qmckl_context_struct* const ctx = (qmckl_context_struct* const) context; assert (ctx != NULL); - int32_t mask = 1 << 8; + int32_t mask = 1 << 10; if ( (ctx->ao_basis.uninitialized & mask) != 0) { return NULL; @@ -438,7 +440,7 @@ qmckl_exit_code qmckl_set_ao_basis_shell_num (qmckl_context context, con qmckl_exit_code qmckl_set_ao_basis_prim_num (qmckl_context context, const int64_t prim_num); qmckl_exit_code qmckl_set_ao_basis_shell_prim_index (qmckl_context context, const int64_t * shell_prim_index); qmckl_exit_code qmckl_set_ao_basis_shell_center (qmckl_context context, const int64_t * shell_center); -qmckl_exit_code qmckl_set_ao_basis_shell_ang_mom (qmckl_context context, const char * shell_ang_mom); +qmckl_exit_code qmckl_set_ao_basis_shell_ang_mom (qmckl_context context, const int32_t * shell_ang_mom); qmckl_exit_code qmckl_set_ao_basis_shell_prim_num (qmckl_context context, const int64_t * shell_prim_num); qmckl_exit_code qmckl_set_ao_basis_shell_factor (qmckl_context context, const double * shell_factor); qmckl_exit_code qmckl_set_ao_basis_exponent (qmckl_context context, const double * exponent); @@ -463,7 +465,6 @@ ctx->ao_basis.provided = (ctx->ao_basis.uninitialized == 0); return QMCKL_SUCCESS; #+end_src - #+begin_src c :comments org :tangle (eval c) :noweb yes :exports none qmckl_exit_code qmckl_set_ao_basis_type(qmckl_context context, const char t) { <> @@ -575,7 +576,7 @@ qmckl_exit_code qmckl_set_ao_basis_shell_center(qmckl_context context, const in } -qmckl_exit_code qmckl_set_ao_basis_shell_ang_mom(qmckl_context context, const char* shell_ang_mom) { +qmckl_exit_code qmckl_set_ao_basis_shell_ang_mom(qmckl_context context, const int32_t* shell_ang_mom) { <> int32_t mask = 1 << 4; @@ -600,7 +601,7 @@ qmckl_exit_code qmckl_set_ao_basis_shell_ang_mom(qmckl_context context, const c qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero; mem_info.size = shell_num * sizeof(char); - char* new_array = (char*) qmckl_malloc(context, mem_info); + int32_t * new_array = (int32_t*) qmckl_malloc(context, mem_info); if (new_array == NULL) { return qmckl_failwith( context, @@ -824,7 +825,7 @@ qmckl_exit_code qmckl_set_ao_basis_coefficient(qmckl_context context, const dou qmckl_exit_code qmckl_set_ao_basis_prim_factor(qmckl_context context, const double* prim_factor) { <> - int32_t mask = 1 << 7; + int32_t mask = 1 << 10; const int64_t prim_num = qmckl_get_ao_basis_prim_num(context); if (prim_num == 0L) { @@ -868,88 +869,73 @@ qmckl_exit_code qmckl_set_ao_basis_prim_factor(qmckl_context context, const dou ** Test :noexport: - #+begin_src c :tangle (eval c_test) :exports none :exports none - /* Reference input data */ + #+begin_src c :tangle (eval c_test) :exports none :exports none +const int64_t shell_num = chbrclf_shell_num; +const int64_t prim_num = chbrclf_prim_num; +const int64_t * shell_center = &(chbrclf_basis_shell_center[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]); - char typ = 'G'; - #define shell_num ((int64_t) 12) - #define prim_num ((int64_t) 20) +char typ = 'G'; - int64_t shell_center [shell_num] = - { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2 }; +qmckl_exit_code rc; - char shell_ang_mom [shell_num] = - { 'S', 'S', 'S', 'P', 'P', 'D', 'S', 'S', 'S', 'P', 'P', 'D' }; +assert(!qmckl_ao_basis_provided(context)); - double shell_factor [shell_num] = - { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; +rc = qmckl_set_ao_basis_type (context, typ); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - int64_t shell_prim_num [shell_num] = - {5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1}; +rc = qmckl_set_ao_basis_shell_num (context, shell_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - int64_t shell_prim_index [shell_num] = - {1, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 20}; +rc = qmckl_set_ao_basis_prim_num (context, prim_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - double exponent [prim_num] = - { 33.87, 5.095, 1.159, 0.3258, 0.1027, 0.3258, 0.1027, - 1.407, 0.388, 1.057, 33.87, 5.095, 1.159, 0.3258, 0.1027, - 0.3258, 0.1027, 1.407, 0.388, 1.057 }; +rc = qmckl_set_ao_basis_shell_center (context, shell_center); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - double coefficient [prim_num] = - { 0.006068, 0.045308, 0.202822, 0.503903, 0.383421, - 1.0, 1.0, 1.0, 1.0, 1.0, 0.006068, 0.045308, 0.202822, - 0.503903, 0.383421, 1.0, 1.0, 1.0, 1.0, 1.0 }; - /* --- */ +rc = qmckl_set_ao_basis_shell_ang_mom (context, shell_ang_mom); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - qmckl_exit_code rc; +rc = qmckl_set_ao_basis_shell_factor (context, shell_factor); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - assert(!qmckl_ao_basis_provided(context)); +rc = qmckl_set_ao_basis_shell_center (context, shell_prim_num); +assert(rc == QMCKL_SUCCESS); +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_prim_num (context, shell_prim_num); +assert(rc == QMCKL_SUCCESS); +assert(!qmckl_ao_basis_provided(context)); - rc = qmckl_set_ao_basis_shell_num (context, shell_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_prim_num (context, prim_num); - 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_shell_center (context, shell_center); - 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_shell_ang_mom (context, shell_ang_mom); - assert(rc == QMCKL_SUCCESS); - assert(!qmckl_ao_basis_provided(context)); +rc = qmckl_set_ao_basis_prim_factor (context, prim_factor); +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_center (context, shell_prim_num); - 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)); - - #+end_src + #+end_src * Polynomial part ** Powers of $x-X_i$ diff --git a/org/qmckl_context.org b/org/qmckl_context.org index 6472365..618120d 100644 --- a/org/qmckl_context.org +++ b/org/qmckl_context.org @@ -221,7 +221,7 @@ qmckl_context qmckl_context_create() { ctx->numprec.precision = QMCKL_DEFAULT_PRECISION; ctx->numprec.range = QMCKL_DEFAULT_RANGE; - ctx->ao_basis.uninitialized = (1 << 10) - 1; + ctx->ao_basis.uninitialized = (1 << 11) - 1; ctx->nucleus.uninitialized = (1 << 4) - 1; ctx->electron.uninitialized = (1 << 3) - 1; diff --git a/org/qmckl_electron.org b/org/qmckl_electron.org index 0f47ff9..bc56cda 100644 --- a/org/qmckl_electron.org +++ b/org/qmckl_electron.org @@ -1615,7 +1615,7 @@ qmckl_exit_code qmckl_provide_en_distance_rescaled(qmckl_context context) | qmckl_context | context | in | Global state | | int64_t | elec_num | in | Number of electrons | | int64_t | nucl_num | in | Number of nuclei | - | double | rescale_factor_kappa_en | in | The factor for rescaled distances | + | double | rescale_factor_kappa_en | in | The factor for rescaled distances | | int64_t | walk_num | in | Number of walkers | | double | elec_coord[walk_num][3][elec_num] | in | Electron coordinates | | double | nucl_coord[3][elec_num] | in | Nuclear coordinates | @@ -1766,28 +1766,28 @@ assert(qmckl_nucleus_provided(context)); double en_distance_rescaled[walk_num][nucl_num][elec_num]; -rc = qmckl_get_electron_en_distance_rescaled(context, &(en_distance[0][0][0])); +rc = qmckl_get_electron_en_distance_rescaled(context, &(en_distance_rescaled[0][0][0])); assert (rc == QMCKL_SUCCESS); // TODO: check exact values //// (e,n,w) in Fortran notation //// (1,1,1) -//assert(fabs(en_distance[0][0][0] - 7.546738741619978) < 1.e-12); +//assert(fabs(en_distance_rescaled[0][0][0] - 7.546738741619978) < 1.e-12); // //// (1,2,1) -//assert(fabs(en_distance[0][1][0] - 8.77102435246984) < 1.e-12); +//assert(fabs(en_distance_rescaled[0][1][0] - 8.77102435246984) < 1.e-12); // //// (2,1,1) -//assert(fabs(en_distance[0][0][1] - 3.698922010513608) < 1.e-12); +//assert(fabs(en_distance_rescaled[0][0][1] - 3.698922010513608) < 1.e-12); // //// (1,1,2) -//assert(fabs(en_distance[1][0][0] - 5.824059436060509) < 1.e-12); +//assert(fabs(en_distance_rescaled[1][0][0] - 5.824059436060509) < 1.e-12); // //// (1,2,2) -//assert(fabs(en_distance[1][1][0] - 7.080482110317645) < 1.e-12); +//assert(fabs(en_distance_rescaled[1][1][0] - 7.080482110317645) < 1.e-12); // //// (2,1,2) -//assert(fabs(en_distance[1][0][1] - 3.1804527583077356) < 1.e-12); +//assert(fabs(en_distance_rescaled[1][0][1] - 3.1804527583077356) < 1.e-12); #+end_src diff --git a/org/qmckl_tests.org b/org/qmckl_tests.org index 304c9e4..3c090d1 100644 --- a/org/qmckl_tests.org +++ b/org/qmckl_tests.org @@ -527,36 +527,36 @@ F 1 #define chbrclf_shell_num 72 #define chbrclf_prim_num 297 -chbrclf_basis_shell_center[chbrclf_shell_num] = +int64_t chbrclf_basis_shell_center[chbrclf_shell_num] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; -chbrclf_basis_shell_ang_mom[chbrclf_shell_num] = +int32_t chbrclf_basis_shell_ang_mom[chbrclf_shell_num] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 0, 0, 0, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3}; -chbrclf_basis_shell_prim_index[chbrclf_shell_num] = +int64_t chbrclf_basis_shell_prim_num[chbrclf_shell_num] = + {10, 10, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 10, + 10, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 1, 1, 1, 9, 9, 1, 1, 1, + 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 13, 13, 13, 1, 1, 1, 8, 1, 1, 1, 1, + 1}; + +int64_t chbrclf_basis_shell_prim_index[chbrclf_shell_num] = {1, 11, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 70, 71, 72, 73, 78, 79, 80, 81, 82, 83, 84, 85, 86, 101, 116, 131, 132, 133, 134, 143, 152, 153, 154, 155, 156, 157, 158, 159, 160, 180, 200, 220, 240, 241, 242, 243, 256, 269, 282, 283, 284, 285, 293, 294, 295, 296, 297}; -chbrclf_basis_shell_prim_num[chbrclf_shell_num] = - {10, 10, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 10, - 10, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 15, 15, 15, 1, 1, 1, 9, 9, 1, 1, 1, - 1, 1, 1, 1, 1, 20, 20, 20, 20, 1, 1, 1, 13, 13, 13, 1, 1, 1, 8, 1, 1, 1, 1, - 1}; - -chbrclf_basis_shell_factor[chbrclf_shell_num] = +double chbrclf_basis_shell_factor[chbrclf_shell_num] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.}; -chbrclf_basis_exponent[chbrclf_prim_num] = +double chbrclf_basis_exponent[chbrclf_prim_num] = {8.2360000000000000e+03, 1.2350000000000000e+03, 2.8080000000000001e+02, 7.9269999999999996e+01, 2.5590000000000000e+01, 8.9969999999999999e+00, 3.3190000000000000e+00, 9.0590000000000004e-01, 3.6430000000000001e-01, @@ -657,7 +657,7 @@ chbrclf_basis_exponent[chbrclf_prim_num] = 7.0618999999999998e-01, 7.0618999999999998e-01, 2.6390000000000002e-01, 1.0470000000000000e-01, 5.5149999999999999e-01, 2.5800000000000001e-01}; -chbrclf_basis_coefficient[chbrclf_prim_num] = +double chbrclf_basis_coefficient[chbrclf_prim_num] = {5.3100000000000000e-04, 4.1079999999999997e-03, 2.1087000000000002e-02, 8.1852999999999995e-02, 2.3481700000000000e-01, 4.3440099999999998e-01, 3.4612900000000002e-01, 3.9378000000000003e-02, -8.9829999999999997e-03, @@ -758,7 +758,7 @@ chbrclf_basis_coefficient[chbrclf_prim_num] = 7.4396699999999996e-02, 1.0000000000000000e+00, 1.0000000000000000e+00, 1.0000000000000000e+00, 1.0000000000000000e+00, 1.0000000000000000e+00}; -chbrclf_basis_prim_factor[chbrclf_prim_num] = +double chbrclf_basis_prim_factor[chbrclf_prim_num] = {6.1616545431994848e+02, 1.4847738511079908e+02, 4.8888635917437597e+01, 1.8933972232608955e+01, 8.1089160941724145e+00, 3.7024003863155635e+00, 1.7525302846177560e+00, 6.6179013183966806e-01, 3.3419848027174592e-01,