1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-12-23 04:43:57 +01:00

Add calls to HDF5 back end; overwrite determinant_num

This commit is contained in:
q-posev 2022-04-11 16:32:23 +02:00
parent 7d640b06dd
commit a3f70336d7

View File

@ -4106,10 +4106,10 @@ def delete_$group$(trexio_file) -> None:
#+end_src #+end_src
* Source code for the determinant part * Source code for the determinant part
Storage of the determinants is a particular case, Storage of the determinants is a particular case,
which requires special treatment, but has to be coded only once which requires special treatment, but has to be coded only once
(since there is only one group that corresponds to it). (since there is only one group that corresponds to it).
Thus, there is no need to auto-generate this part via templates. Thus, there is no need to auto-generate this part via templates.
This section concerns API calls related to Slater determinants. This section concerns API calls related to Slater determinants.
@ -4122,7 +4122,7 @@ def delete_$group$(trexio_file) -> None:
| ~trexio_read_determinant_coefficient~ | Read an attribute | | ~trexio_read_determinant_coefficient~ | Read an attribute |
| ~trexio_read_determinant_list~ | Read an attribute | | ~trexio_read_determinant_list~ | Read an attribute |
*** C source code *** C source code
**** Function declarations **** Function declarations
@ -4166,12 +4166,12 @@ trexio_read_determinant_list (trexio_t* const file, const int64_t offset_file, i
switch (file->back_end) { switch (file->back_end) {
case TREXIO_TEXT: case TREXIO_TEXT:
rc = trexio_text_read_determinant_list(file, offset_file, rank, dims, &eof_read_size, dset); rc = trexio_text_read_determinant_list(file, offset_file, rank, dims, &eof_read_size, dset);
break; break;
case TREXIO_HDF5: case TREXIO_HDF5:
#ifdef HAVE_HDF5 #ifdef HAVE_HDF5
rc = -1; //trexio_hdf5_read_determinant_list(file, offset_file, rank, dims, &eof_read_size, dset); rc = trexio_hdf5_read_determinant_list(file, offset_file, rank, dims, &eof_read_size, dset);
break; break;
#else #else
rc = TREXIO_BACK_END_MISSING; rc = TREXIO_BACK_END_MISSING;
@ -4191,7 +4191,7 @@ trexio_read_determinant_list (trexio_t* const file, const int64_t offset_file, i
if (rc == TREXIO_END) *buffer_size = eof_read_size; if (rc == TREXIO_END) *buffer_size = eof_read_size;
return rc; return rc;
} }
@ -4225,12 +4225,12 @@ trexio_write_determinant_list (trexio_t* const file, const int64_t offset_file,
switch (file->back_end) { switch (file->back_end) {
case TREXIO_TEXT: case TREXIO_TEXT:
return trexio_text_write_determinant_list(file, offset_file, rank, dims, dset); rc = trexio_text_write_determinant_list(file, offset_file, rank, dims, dset);
break; break;
case TREXIO_HDF5: case TREXIO_HDF5:
#ifdef HAVE_HDF5 #ifdef HAVE_HDF5
return -1; //trexio_hdf5_write_determinant_list(file, dset, rank, dims); rc = trexio_hdf5_write_determinant_list(file, offset_file, rank, dims, dset);
break; break;
#else #else
return TREXIO_BACK_END_MISSING; return TREXIO_BACK_END_MISSING;
@ -4238,11 +4238,36 @@ trexio_write_determinant_list (trexio_t* const file, const int64_t offset_file,
#endif #endif
/* /*
case TREXIO_JSON: case TREXIO_JSON:
return trexio_json_read_ rc = trexio_json_read_
break; break;
,*/ ,*/
} }
if (rc != TREXIO_SUCCESS) return rc;
/* Update the determinant_num value with the number of determinants written */
int64_t det_num = 0L;
/* Read the determinant_num if it exists already */
if (trexio_has_determinant_num(file) == TREXIO_SUCCESS) {
rc = trexio_read_determinant_num_64(file, &det_num);
if (rc != TREXIO_SUCCESS) return rc;
}
/* Check for the INT64 overflow before writing an updated value */
if (INT64_MAX - det_num > buffer_size) {
det_num += buffer_size;
} else {
return TREXIO_INT_SIZE_OVERFLOW;
}
/* Overwrite previous value. Here we have to temporarily set the file->mode to 'u' to trick the API
in order to overwrite existing determinant_num. Otherwise the API returns TREXIO_NUM_ALREADY_EXISTS.
*/
char mode_tmp = file->mode;
file->mode = 'u';
rc = trexio_write_determinant_num_64(file, det_num);
file->mode = mode_tmp
if (rc != TREXIO_SUCCESS) return rc;
return TREXIO_SUCCESS;
} }
#+end_src #+end_src
@ -4263,7 +4288,7 @@ trexio_has_determinant_list (trexio_t* const file)
case TREXIO_HDF5: case TREXIO_HDF5:
#ifdef HAVE_HDF5 #ifdef HAVE_HDF5
return -1; //trexio_hdf5_has_determinant_list(file); return trexio_hdf5_has_determinant_list(file);
#else #else
return TREXIO_BACK_END_MISSING; return TREXIO_BACK_END_MISSING;
#endif #endif
@ -4332,9 +4357,9 @@ trexio_has_determinant_coefficient (trexio_t* const file)
However, if the user validated that the file is correct (e.g. using ~trexio-tools~), However, if the user validated that the file is correct (e.g. using ~trexio-tools~),
then value of the ~metadata_unsafe~ attribute can be changed using the aforementioned function. then value of the ~metadata_unsafe~ attribute can be changed using the aforementioned function.
TODO: TODO:
~trexio_bitfield_to_list~ functions converts the bit field representation of a ~trexio_bitfield_to_list~ functions converts the bit field representation of a
given determinants into a list of ~mo.num~ occupation numbers. given determinants into a list of ~mo.num~ occupation numbers.
(adapt from slaterlib or QP) (adapt from slaterlib or QP)
** C ** C