mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-11-03 20:54:09 +01:00
Updated QMCkl for TREXIOv2.0
This commit is contained in:
parent
53e2e7bb05
commit
31e3ed9c41
@ -194,7 +194,7 @@ b[2] = 3; assert(b[2] == 3);
|
|||||||
case some important information has been stored related to memory
|
case some important information has been stored related to memory
|
||||||
allocation and needs to be updated.
|
allocation and needs to be updated.
|
||||||
|
|
||||||
#+begin_src c :tangle (eval h_func)
|
#+begin_src c :tangle (eval h_private_func)
|
||||||
qmckl_exit_code qmckl_free(qmckl_context context,
|
qmckl_exit_code qmckl_free(qmckl_context context,
|
||||||
void * const ptr);
|
void * const ptr);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
@ -226,7 +226,7 @@ qmckl_get_mo_basis_coefficient (const qmckl_context context,
|
|||||||
|
|
||||||
assert (ctx->mo_basis.coefficient != NULL);
|
assert (ctx->mo_basis.coefficient != NULL);
|
||||||
memcpy(coefficient, ctx->mo_basis.coefficient,
|
memcpy(coefficient, ctx->mo_basis.coefficient,
|
||||||
ctx->ao_basis.ao_num * ctx->mo_basis.mo_num * sizeof(int64_t));
|
ctx->ao_basis.ao_num * ctx->mo_basis.mo_num * sizeof(double));
|
||||||
|
|
||||||
return QMCKL_SUCCESS;
|
return QMCKL_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -529,7 +529,7 @@ integer function qmckl_compute_mo_basis_vgl_f(context, &
|
|||||||
double precision , intent(in) :: ao_vgl(ao_num,elec_num,5)
|
double precision , intent(in) :: ao_vgl(ao_num,elec_num,5)
|
||||||
double precision , intent(in) :: coef_normalized(ao_num,mo_num)
|
double precision , intent(in) :: coef_normalized(ao_num,mo_num)
|
||||||
double precision , intent(out) :: mo_vgl(mo_num,elec_num,5)
|
double precision , intent(out) :: mo_vgl(mo_num,elec_num,5)
|
||||||
logical*8 :: TransA, TransB
|
character :: TransA, TransB
|
||||||
double precision,dimension(:,:),allocatable :: mo_vgl_big
|
double precision,dimension(:,:),allocatable :: mo_vgl_big
|
||||||
double precision,dimension(:,:),allocatable :: ao_vgl_big
|
double precision,dimension(:,:),allocatable :: ao_vgl_big
|
||||||
!double precision,dimension(:,:),allocatable :: coef_trans
|
!double precision,dimension(:,:),allocatable :: coef_trans
|
||||||
@ -546,8 +546,8 @@ integer function qmckl_compute_mo_basis_vgl_f(context, &
|
|||||||
!allocate(coef_all(mo_num*ao_num))
|
!allocate(coef_all(mo_num*ao_num))
|
||||||
!allocate(coef_trans(mo_num,ao_num))
|
!allocate(coef_trans(mo_num,ao_num))
|
||||||
|
|
||||||
TransA = .True.
|
TransA = 'T'
|
||||||
TransB = .False.
|
TransB = 'N'
|
||||||
alpha = 1.0d0
|
alpha = 1.0d0
|
||||||
beta = 0.0d0
|
beta = 0.0d0
|
||||||
|
|
||||||
|
117824
org/qmckl_tests.org
117824
org/qmckl_tests.org
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
|||||||
#+SETUPFILE: ../tools/theme.setup
|
#+SETUPFILE: ../tools/theme.setup
|
||||||
#+INCLUDE: ../tools/lib.org
|
#+INCLUDE: ../tools/lib.org
|
||||||
|
|
||||||
The [[https://github.com/trex-coe/trexio][TREXIO library]] enables easy and efficient input/output of wave
|
The [[https://trex-coe.github.io/trexio/trex.html][TREXIO library]] enables easy and efficient input/output of wave
|
||||||
function parameters. In this section we provide high-level functions
|
function parameters. In this section we provide high-level functions
|
||||||
to prepare the context by reading the required data from a TREXIO file.
|
to prepare the context by reading the required data from a TREXIO file.
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ qmckl_trexio_read_nucleus_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (nucl_charge != NULL);
|
assert (nucl_charge != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_nucleus_charge_64(file, nucl_charge);
|
rcio = trexio_read_safe_nucleus_charge_64(file, nucl_charge, nucleus_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
@ -208,6 +208,7 @@ qmckl_trexio_read_nucleus_X(qmckl_context context, trexio_t* const file)
|
|||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rc = qmckl_set_nucleus_charge(context, nucl_charge, nucleus_num);
|
||||||
rc = qmckl_set_nucleus_charge(context, nucl_charge);
|
rc = qmckl_set_nucleus_charge(context, nucl_charge);
|
||||||
|
|
||||||
qmckl_free(context, nucl_charge);
|
qmckl_free(context, nucl_charge);
|
||||||
@ -240,7 +241,7 @@ qmckl_trexio_read_nucleus_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (nucl_coord != NULL);
|
assert (nucl_coord != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_nucleus_coord_64(file, nucl_coord);
|
rcio = trexio_read_safe_nucleus_coord_64(file, nucl_coord, 3*nucleus_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
@ -248,6 +249,7 @@ qmckl_trexio_read_nucleus_X(qmckl_context context, trexio_t* const file)
|
|||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rc = qmckl_set_nucleus_coord(context, 'N', nucl_coord, 3*nucleus_num);
|
||||||
rc = qmckl_set_nucleus_coord(context, 'N', nucl_coord);
|
rc = qmckl_set_nucleus_coord(context, 'N', nucl_coord);
|
||||||
|
|
||||||
qmckl_free(context, nucl_coord);
|
qmckl_free(context, nucl_coord);
|
||||||
@ -322,7 +324,7 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
int64_t shell_num = 0L;
|
int64_t shell_num = 0L;
|
||||||
|
|
||||||
rcio = trexio_read_basis_num_64(file, &shell_num);
|
rcio = trexio_read_basis_shell_num_64(file, &shell_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
@ -385,8 +387,9 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
mem_info.size = nucleus_num * sizeof(int64_t);
|
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
|
mem_info.size = nucleus_num * sizeof(int64_t);
|
||||||
int64_t* nucleus_index = (int64_t*) qmckl_malloc(context, mem_info);
|
int64_t* nucleus_index = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
if (nucleus_index == NULL) {
|
if (nucleus_index == NULL) {
|
||||||
@ -398,15 +401,57 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (nucleus_index != NULL);
|
assert (nucleus_index != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_nucleus_index_64(file, nucleus_index);
|
/* Allocate temporary array */
|
||||||
|
mem_info.size = shell_num * sizeof(int64_t);
|
||||||
|
int64_t* tmp_array = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
|
if (tmp_array == NULL) {
|
||||||
|
qmckl_free(context, nucleus_index);
|
||||||
|
nucleus_index = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_ALLOCATION_FAILED,
|
||||||
|
"qmckl_trexio_read_basis_nucleus_index_X",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert (tmp_array != NULL);
|
||||||
|
|
||||||
|
/* Read in the temporary array */
|
||||||
|
rcio = trexio_read_safe_basis_nucleus_index_64(file, tmp_array, shell_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
qmckl_free(context, nucleus_index);
|
||||||
|
nucleus_index = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_nucleus_index",
|
"trexio_read_basis_nucleus_index",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_nucleus_index(context, nucleus_index);
|
/* Reformat data */
|
||||||
|
rc = qmckl_set_ao_basis_nucleus_index(context, nucleus_index, nucleus_num);
|
||||||
|
|
||||||
|
for (int i=shell_num-1 ; i>=0 ; --i) {
|
||||||
|
const int k = tmp_array[i];
|
||||||
|
if (k < 0 || k >= nucleus_num) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
qmckl_free(context, nucleus_index);
|
||||||
|
nucleus_index = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_FAILURE,
|
||||||
|
"trexio_read_basis_nucleus_index",
|
||||||
|
"Irrelevant data in TREXIO file");
|
||||||
|
}
|
||||||
|
nucleus_index[k] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
|
||||||
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_nucleus_index(context, nucleus_index, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, nucleus_index);
|
qmckl_free(context, nucleus_index);
|
||||||
nucleus_index = NULL;
|
nucleus_index = NULL;
|
||||||
@ -421,8 +466,9 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
mem_info.size = nucleus_num * sizeof(int64_t);
|
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
|
mem_info.size = nucleus_num * sizeof(int64_t);
|
||||||
int64_t* nucleus_shell_num = (int64_t*) qmckl_malloc(context, mem_info);
|
int64_t* nucleus_shell_num = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
if (nucleus_shell_num == NULL) {
|
if (nucleus_shell_num == NULL) {
|
||||||
@ -434,15 +480,60 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (nucleus_shell_num != NULL);
|
assert (nucleus_shell_num != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_nucleus_shell_num_64(file, nucleus_shell_num);
|
/* Allocate temporary array */
|
||||||
|
mem_info.size = shell_num * sizeof(int64_t);
|
||||||
|
int64_t* tmp_array = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
|
if (tmp_array == NULL) {
|
||||||
|
qmckl_free(context, nucleus_shell_num);
|
||||||
|
nucleus_shell_num = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_ALLOCATION_FAILED,
|
||||||
|
"qmckl_trexio_read_basis_nucleus_shell_num_X",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert (tmp_array != NULL);
|
||||||
|
|
||||||
|
|
||||||
|
/* Read in the temporary array */
|
||||||
|
rcio = trexio_read_safe_basis_nucleus_index_64(file, tmp_array, shell_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
qmckl_free(context, nucleus_shell_num);
|
||||||
|
nucleus_shell_num = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_nucleus_shell_num",
|
"trexio_read_basis_nucleus_shell_num",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_nucleus_shell_num(context, nucleus_shell_num);
|
/* Reformat data */
|
||||||
|
for (int i=0 ; i<nucleus_num ; ++i) {
|
||||||
|
nucleus_shell_num[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0 ; i<shell_num ; ++i) {
|
||||||
|
const int k = tmp_array[i];
|
||||||
|
if (k < 0 || k >= nucleus_num) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
qmckl_free(context, nucleus_shell_num);
|
||||||
|
nucleus_shell_num = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_FAILURE,
|
||||||
|
"trexio_read_basis_nucleus_shell_num",
|
||||||
|
"Irrelevant data in TREXIO file");
|
||||||
|
}
|
||||||
|
nucleus_shell_num[k] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
|
||||||
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_nucleus_shell_num(context, nucleus_shell_num, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, nucleus_shell_num);
|
qmckl_free(context, nucleus_shell_num);
|
||||||
nucleus_shell_num = NULL;
|
nucleus_shell_num = NULL;
|
||||||
@ -457,6 +548,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = shell_num * sizeof(int32_t);
|
mem_info.size = shell_num * sizeof(int32_t);
|
||||||
|
|
||||||
int32_t* shell_ang_mom = (int32_t*) qmckl_malloc(context, mem_info);
|
int32_t* shell_ang_mom = (int32_t*) qmckl_malloc(context, mem_info);
|
||||||
@ -470,15 +563,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (shell_ang_mom != NULL);
|
assert (shell_ang_mom != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_shell_ang_mom_32(file, shell_ang_mom);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_shell_ang_mom_32(file, shell_ang_mom, shell_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, shell_ang_mom);
|
||||||
|
shell_ang_mom = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_shell_ang_mom",
|
"trexio_read_basis_shell_ang_mom",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_shell_ang_mom(context, shell_ang_mom);
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_shell_ang_mom(context, shell_ang_mom, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, shell_ang_mom);
|
qmckl_free(context, shell_ang_mom);
|
||||||
shell_ang_mom = NULL;
|
shell_ang_mom = NULL;
|
||||||
@ -493,6 +590,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = shell_num * sizeof(int64_t);
|
mem_info.size = shell_num * sizeof(int64_t);
|
||||||
|
|
||||||
int64_t* shell_prim_num = (int64_t*) qmckl_malloc(context, mem_info);
|
int64_t* shell_prim_num = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
@ -506,15 +605,58 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (shell_prim_num != NULL);
|
assert (shell_prim_num != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_shell_prim_num_64(file, shell_prim_num);
|
/* Allocate temporary array */
|
||||||
|
mem_info.size = prim_num * sizeof(int64_t);
|
||||||
|
|
||||||
|
int64_t* tmp_array = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
|
if (tmp_array == NULL) {
|
||||||
|
qmckl_free(context, shell_prim_num);
|
||||||
|
shell_prim_num = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_ALLOCATION_FAILED,
|
||||||
|
"qmckl_trexio_read_basis_shell_prim_num_X",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert (tmp_array != NULL);
|
||||||
|
|
||||||
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_shell_index_64 (file, tmp_array, prim_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, shell_prim_num);
|
||||||
|
shell_prim_num = NULL;
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_shell_prim_num",
|
"trexio_read_basis_shell_prim_num",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_shell_prim_num(context, shell_prim_num);
|
/* Reformat data */
|
||||||
|
for (int i=0 ; i<shell_num ; ++i) {
|
||||||
|
shell_prim_num[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0 ; i<prim_num ; ++i) {
|
||||||
|
const int k = tmp_array[i];
|
||||||
|
if (k < 0 || k >= shell_num) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
qmckl_free(context, shell_prim_num);
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_FAILURE,
|
||||||
|
"trexio_read_basis_shell_prim_num",
|
||||||
|
"Irrelevant data in TREXIO file");
|
||||||
|
}
|
||||||
|
shell_prim_num[k] += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
|
||||||
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_shell_prim_num(context, shell_prim_num, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, shell_prim_num);
|
qmckl_free(context, shell_prim_num);
|
||||||
shell_prim_num = NULL;
|
shell_prim_num = NULL;
|
||||||
@ -529,6 +671,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = shell_num * sizeof(int64_t);
|
mem_info.size = shell_num * sizeof(int64_t);
|
||||||
|
|
||||||
int64_t* shell_prim_index = (int64_t*) qmckl_malloc(context, mem_info);
|
int64_t* shell_prim_index = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
@ -542,15 +686,54 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (shell_prim_index != NULL);
|
assert (shell_prim_index != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_shell_prim_index_64(file, shell_prim_index);
|
/* Allocate temporary array */
|
||||||
|
mem_info.size = prim_num * sizeof(int64_t);
|
||||||
|
|
||||||
|
int64_t* tmp_array = (int64_t*) qmckl_malloc(context, mem_info);
|
||||||
|
|
||||||
|
if (tmp_array == NULL) {
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_ALLOCATION_FAILED,
|
||||||
|
"qmckl_trexio_read_basis_shell_prim_index_X",
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert (tmp_array != NULL);
|
||||||
|
|
||||||
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_shell_index_64(file, tmp_array, prim_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, shell_prim_index);
|
||||||
|
shell_prim_index = NULL;
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_shell_prim_index",
|
"trexio_read_basis_shell_prim_index",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_shell_prim_index(context, shell_prim_index);
|
/* Reformat data */
|
||||||
|
for (int i=prim_num-1 ; i>=0 ; --i) {
|
||||||
|
const int k = tmp_array[i];
|
||||||
|
if (k < 0 || k >= shell_num) {
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
qmckl_free(context, shell_prim_index);
|
||||||
|
shell_prim_index = NULL;
|
||||||
|
return qmckl_failwith( context,
|
||||||
|
QMCKL_FAILURE,
|
||||||
|
"trexio_read_basis_shell_prim_index",
|
||||||
|
"Irrelevant data in TREXIO file");
|
||||||
|
}
|
||||||
|
shell_prim_index[k] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmckl_free(context, tmp_array);
|
||||||
|
tmp_array = NULL;
|
||||||
|
|
||||||
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_shell_prim_index(context, shell_prim_index, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, shell_prim_index);
|
qmckl_free(context, shell_prim_index);
|
||||||
shell_prim_index = NULL;
|
shell_prim_index = NULL;
|
||||||
@ -565,6 +748,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = shell_num * sizeof(double);
|
mem_info.size = shell_num * sizeof(double);
|
||||||
|
|
||||||
double* shell_factor = (double*) qmckl_malloc(context, mem_info);
|
double* shell_factor = (double*) qmckl_malloc(context, mem_info);
|
||||||
@ -578,15 +763,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (shell_factor != NULL);
|
assert (shell_factor != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_shell_factor_64(file, shell_factor);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_shell_factor_64(file, shell_factor, shell_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, shell_factor);
|
||||||
|
shell_factor = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_shell_factor",
|
"trexio_read_basis_shell_factor",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_shell_factor(context, shell_factor);
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_shell_factor(context, shell_factor, shell_num);
|
||||||
|
|
||||||
qmckl_free(context, shell_factor);
|
qmckl_free(context, shell_factor);
|
||||||
shell_factor = NULL;
|
shell_factor = NULL;
|
||||||
@ -601,6 +790,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = prim_num * sizeof(double);
|
mem_info.size = prim_num * sizeof(double);
|
||||||
|
|
||||||
double* exponent = (double*) qmckl_malloc(context, mem_info);
|
double* exponent = (double*) qmckl_malloc(context, mem_info);
|
||||||
@ -614,15 +805,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (exponent != NULL);
|
assert (exponent != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_exponent_64(file, exponent);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_exponent_64(file, exponent, prim_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, exponent);
|
||||||
|
exponent = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_exponent",
|
"trexio_read_basis_exponent",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_exponent(context, exponent);
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_exponent(context, exponent, prim_num);
|
||||||
|
|
||||||
qmckl_free(context, exponent);
|
qmckl_free(context, exponent);
|
||||||
exponent = NULL;
|
exponent = NULL;
|
||||||
@ -637,6 +832,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = prim_num * sizeof(double);
|
mem_info.size = prim_num * sizeof(double);
|
||||||
|
|
||||||
double* coefficient = (double*) qmckl_malloc(context, mem_info);
|
double* coefficient = (double*) qmckl_malloc(context, mem_info);
|
||||||
@ -650,15 +847,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (coefficient != NULL);
|
assert (coefficient != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_coefficient_64(file, coefficient);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_coefficient_64(file, coefficient, prim_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, coefficient);
|
||||||
|
coefficient = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_coefficient",
|
"trexio_read_basis_coefficient",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_coefficient(context, coefficient);
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_coefficient(context, coefficient, prim_num);
|
||||||
|
|
||||||
qmckl_free(context, coefficient);
|
qmckl_free(context, coefficient);
|
||||||
coefficient = NULL;
|
coefficient = NULL;
|
||||||
@ -673,6 +874,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = prim_num * sizeof(double);
|
mem_info.size = prim_num * sizeof(double);
|
||||||
|
|
||||||
double* prim_factor = (double*) qmckl_malloc(context, mem_info);
|
double* prim_factor = (double*) qmckl_malloc(context, mem_info);
|
||||||
@ -686,15 +889,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (prim_factor != NULL);
|
assert (prim_factor != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_basis_prim_factor_64(file, prim_factor);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_basis_prim_factor_64(file, prim_factor, prim_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, prim_factor);
|
||||||
|
prim_factor = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_basis_prim_factor",
|
"trexio_read_basis_prim_factor",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_prim_factor(context, prim_factor);
|
/* Read data */
|
||||||
|
rc = qmckl_set_ao_basis_prim_factor(context, prim_factor, prim_num);
|
||||||
|
|
||||||
qmckl_free(context, prim_factor);
|
qmckl_free(context, prim_factor);
|
||||||
prim_factor = NULL;
|
prim_factor = NULL;
|
||||||
@ -708,6 +915,8 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
#+begin_src c :tangle (eval c)
|
#+begin_src c :tangle (eval c)
|
||||||
{
|
{
|
||||||
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
qmckl_memory_info_struct mem_info = qmckl_memory_info_struct_zero;
|
||||||
|
|
||||||
|
/* Allocate array for data */
|
||||||
mem_info.size = ao_num * sizeof(double);
|
mem_info.size = ao_num * sizeof(double);
|
||||||
|
|
||||||
double* ao_normalization = (double*) qmckl_malloc(context, mem_info);
|
double* ao_normalization = (double*) qmckl_malloc(context, mem_info);
|
||||||
@ -721,15 +930,19 @@ qmckl_trexio_read_ao_X(qmckl_context context, trexio_t* const file)
|
|||||||
|
|
||||||
assert (ao_normalization != NULL);
|
assert (ao_normalization != NULL);
|
||||||
|
|
||||||
rcio = trexio_read_ao_normalization_64(file, ao_normalization);
|
/* Read data */
|
||||||
|
rcio = trexio_read_safe_ao_normalization_64(file, ao_normalization, ao_num);
|
||||||
if (rcio != TREXIO_SUCCESS) {
|
if (rcio != TREXIO_SUCCESS) {
|
||||||
|
qmckl_free(context, ao_normalization);
|
||||||
|
ao_normalization = NULL;
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_FAILURE,
|
QMCKL_FAILURE,
|
||||||
"trexio_read_ao_normalization",
|
"trexio_read_ao_normalization",
|
||||||
trexio_string_of_error(rcio));
|
trexio_string_of_error(rcio));
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = qmckl_set_ao_basis_ao_factor(context, ao_normalization);
|
/* Store data */
|
||||||
|
rc = qmckl_set_ao_basis_ao_factor(context, ao_normalization, ao_num);
|
||||||
|
|
||||||
qmckl_free(context, ao_normalization);
|
qmckl_free(context, ao_normalization);
|
||||||
ao_normalization = NULL;
|
ao_normalization = NULL;
|
||||||
@ -1115,7 +1328,9 @@ double * mo_coef = (double*) malloc (ao_num * mo_num * sizeof(double));
|
|||||||
rc = qmckl_get_mo_basis_coefficient(context, mo_coef, mo_num*ao_num);
|
rc = qmckl_get_mo_basis_coefficient(context, mo_coef, mo_num*ao_num);
|
||||||
assert (rc == QMCKL_SUCCESS);
|
assert (rc == QMCKL_SUCCESS);
|
||||||
for (int i=0 ; i<ao_num * mo_num ; i++) {
|
for (int i=0 ; i<ao_num * mo_num ; i++) {
|
||||||
assert (mo_coef[i] == chbrclf_mo_coef[i]);
|
printf("%d %e %e %e\n", i, mo_coef[i], chbrclf_mo_coef[i],
|
||||||
|
( fabs(mo_coef[i] - chbrclf_mo_coef[i])/fabs(mo_coef[i])) );
|
||||||
|
assert ( fabs(mo_coef[i] - chbrclf_mo_coef[i])/fabs(mo_coef[i]) < 1.e-12 );
|
||||||
}
|
}
|
||||||
free(mo_coef);
|
free(mo_coef);
|
||||||
charge = NULL;
|
charge = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user