diff --git a/org/qmckl_electron.org b/org/qmckl_electron.org index 945a214..9f2f89f 100644 --- a/org/qmckl_electron.org +++ b/org/qmckl_electron.org @@ -532,11 +532,11 @@ qmckl_set_electron_num(qmckl_context context, "up_num <= 0"); } - if (down_num <= 0) { + if (down_num < 0) { return qmckl_failwith( context, QMCKL_INVALID_ARG_3, "qmckl_set_electron_num", - "down_num <= 0"); + "down_num < 0"); } int32_t mask = 1 << 0; diff --git a/org/qmckl_mo.org b/org/qmckl_mo.org index c6a6b6b..52c829f 100644 --- a/org/qmckl_mo.org +++ b/org/qmckl_mo.org @@ -74,7 +74,6 @@ int main() { #include "qmckl_mo_private_func.h" #+end_src - * Context The following arrays are stored in the context: @@ -469,34 +468,34 @@ integer function qmckl_compute_mo_basis_gaussian_vgl_f(context, & do ielec = 1, elec_num ! Value info_qmckl_dgemm_value = qmckl_dgemm(context,TransA, TransB, M, N, K, alpha, & - ao_vgl(:, ielec, iwalk, 1), size(ao_vgl,1) * 1_8, & + ao_vgl(:, :, iwalk, 1), size(ao_vgl,1) * 1_8, & coef_normalized,size(coef_normalized,1) * 1_8, & beta, & - mo_vgl(:,ielec,iwalk,1),size(mo_vgl,1) * 1_8) + mo_vgl(:,:,iwalk,1),size(mo_vgl,1) * 1_8) ! Grad_x info_qmckl_dgemm_Gx = qmckl_dgemm(context,TransA, TransB, M, N, K, alpha, & - ao_vgl(:, ielec, iwalk, 2), size(ao_vgl,1) * 1_8, & + ao_vgl(:, :, iwalk, 2), size(ao_vgl,1) * 1_8, & coef_normalized,size(coef_normalized,1) * 1_8, & beta, & - mo_vgl(:,ielec,iwalk,2),size(mo_vgl,1) * 1_8) + mo_vgl(:,:,iwalk,2),size(mo_vgl,1) * 1_8) ! Grad_y info_qmckl_dgemm_Gy = qmckl_dgemm(context,TransA, TransB, M, N, K, alpha, & - ao_vgl(:, ielec, iwalk, 3), size(ao_vgl,1) * 1_8, & + ao_vgl(:, :, iwalk, 3), size(ao_vgl,1) * 1_8, & coef_normalized,size(coef_normalized,1) * 1_8, & beta, & - mo_vgl(:,ielec,iwalk,3),size(mo_vgl,1) * 1_8) + mo_vgl(:,:,iwalk,3),size(mo_vgl,1) * 1_8) ! Grad_z info_qmckl_dgemm_Gz = qmckl_dgemm(context,TransA, TransB, M, N, K, alpha, & - ao_vgl(:, ielec, iwalk, 4), size(ao_vgl,1) * 1_8, & + ao_vgl(:, :, iwalk, 4), size(ao_vgl,1) * 1_8, & coef_normalized,size(coef_normalized,1) * 1_8, & beta, & - mo_vgl(:,ielec,iwalk,4),size(mo_vgl,1) * 1_8) + mo_vgl(:,:,iwalk,4),size(mo_vgl,1) * 1_8) ! Lapl_z info_qmckl_dgemm_lap = qmckl_dgemm(context,TransA, TransB, M, N, K, alpha, & - ao_vgl(:, ielec, iwalk, 5), size(ao_vgl,1) * 1_8, & + ao_vgl(:, :, iwalk, 5), size(ao_vgl,1) * 1_8, & coef_normalized,size(coef_normalized,1) * 1_8, & beta, & - mo_vgl(:,ielec,iwalk,5),size(mo_vgl,1) * 1_8) + mo_vgl(:,:,iwalk,5),size(mo_vgl,1) * 1_8) end do end do @@ -623,6 +622,138 @@ print ( "[4][1][15][14] : %25.15e"% lf(a,x,y)) *** 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 shell_num = chbrclf_shell_num; +//const int64_t prim_num = chbrclf_prim_num; +//const int64_t ao_num = chbrclf_ao_num; +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); + +rc = qmckl_get_mo_basis_vgl(context, &(ao_vgl[0][0][0][0])); +assert (rc == QMCKL_SUCCESS); + +//printf("\n"); +//printf(" ao_vgl ao_vgl[0][0][26][219] %25.15e\n", ao_vgl[0][0][26][219]); +//printf(" ao_vgl ao_vgl[1][0][26][219] %25.15e\n", ao_vgl[1][0][26][219]); +//printf(" ao_vgl ao_vgl[0][0][26][220] %25.15e\n", ao_vgl[0][0][26][220]); +//printf(" ao_vgl ao_vgl[1][0][26][220] %25.15e\n", ao_vgl[1][0][26][220]); +//printf(" ao_vgl ao_vgl[0][0][26][221] %25.15e\n", ao_vgl[0][0][26][221]); +//printf(" ao_vgl ao_vgl[1][0][26][221] %25.15e\n", ao_vgl[1][0][26][221]); +//printf(" ao_vgl ao_vgl[0][0][26][222] %25.15e\n", ao_vgl[0][0][26][222]); +//printf(" ao_vgl ao_vgl[1][0][26][222] %25.15e\n", ao_vgl[1][0][26][222]); +//printf(" ao_vgl ao_vgl[0][0][26][223] %25.15e\n", ao_vgl[0][0][26][223]); +//printf(" ao_vgl ao_vgl[1][0][26][223] %25.15e\n", ao_vgl[1][0][26][223]); +//printf(" ao_vgl ao_vgl[0][0][26][224] %25.15e\n", ao_vgl[0][0][26][224]); +//printf(" ao_vgl ao_vgl[1][0][26][224] %25.15e\n", ao_vgl[1][0][26][224]); +//printf("\n"); +} #+end_src diff --git a/org/qmckl_tests.org b/org/qmckl_tests.org index 8e08c6a..da89fbb 100644 --- a/org/qmckl_tests.org +++ b/org/qmckl_tests.org @@ -530,7 +530,7 @@ F 1 int64_t chbrclf_basis_nucleus_index[chbrclf_nucl_num] = {0, 14, 23, 37, 53}; -int64_t chbrclf_basis_nucleus_shell_num[chbrclf_nucl_num] = {14, 9, 14, 16, 19}; +int64_t chbrclf_basis_nucleus_shell_num[chbrclf_nucl_num] = {14, 9, 14, 16, 19}; // C, H, F, Cl, Br 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,