1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-08-11 15:28:31 +02:00

Fix AO tests

This commit is contained in:
Anthony Scemama 2021-06-03 22:34:23 +02:00
parent 58cd3f009d
commit 8090edc771
4 changed files with 83 additions and 97 deletions

View File

@ -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) {
<<pre2>>
@ -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) {
<<pre2>>
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) {
<<pre2>>
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$

View File

@ -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;

View File

@ -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

View File

@ -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,