mirror of
https://github.com/TREX-CoE/trexio.git
synced 2024-12-23 04:43:57 +01:00
provide dimensions and decouple dataset read/write from parent group
This commit is contained in:
parent
88d2808200
commit
aee737fa23
10
src/trexio.c
10
src/trexio.c
@ -183,6 +183,9 @@ trexio_exit_code trexio_read_nucleus_coord(trexio_t* file, double* coord) {
|
|||||||
int64_t dim_coord = nucleus_num*3;
|
int64_t dim_coord = nucleus_num*3;
|
||||||
if (dim_coord < 0) return TREXIO_FAILURE;
|
if (dim_coord < 0) return TREXIO_FAILURE;
|
||||||
|
|
||||||
|
int rank = 2;
|
||||||
|
uint64_t dims[2] = {nucleus_num, 3};
|
||||||
|
|
||||||
switch (file->back_end) {
|
switch (file->back_end) {
|
||||||
|
|
||||||
case TREXIO_TEXT:
|
case TREXIO_TEXT:
|
||||||
@ -190,7 +193,7 @@ trexio_exit_code trexio_read_nucleus_coord(trexio_t* file, double* coord) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TREXIO_HDF5:
|
case TREXIO_HDF5:
|
||||||
return trexio_hdf5_read_nucleus_coord(file, coord);
|
return trexio_hdf5_read_nucleus_coord(file, coord, rank, dims);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
case TREXIO_JSON:
|
case TREXIO_JSON:
|
||||||
@ -213,6 +216,9 @@ trexio_exit_code trexio_write_nucleus_coord(trexio_t* file, const double* coord)
|
|||||||
int64_t dim_coord = nucleus_num*3;
|
int64_t dim_coord = nucleus_num*3;
|
||||||
if (dim_coord < 0) return TREXIO_FAILURE;
|
if (dim_coord < 0) return TREXIO_FAILURE;
|
||||||
|
|
||||||
|
int rank = 2;
|
||||||
|
uint64_t dims[2] = {nucleus_num, 3};
|
||||||
|
|
||||||
switch (file->back_end) {
|
switch (file->back_end) {
|
||||||
|
|
||||||
case TREXIO_TEXT:
|
case TREXIO_TEXT:
|
||||||
@ -220,7 +226,7 @@ trexio_exit_code trexio_write_nucleus_coord(trexio_t* file, const double* coord)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TREXIO_HDF5:
|
case TREXIO_HDF5:
|
||||||
return trexio_hdf5_write_nucleus_coord(file, coord);
|
return trexio_hdf5_write_nucleus_coord(file, coord, rank, dims);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
case TREXIO_JSON:
|
case TREXIO_JSON:
|
||||||
|
@ -345,6 +345,9 @@ trexio_exit_code trexio_read_nucleus_coord(trexio_t* file, double* coord) {
|
|||||||
int64_t dim_coord = nucleus_num*3;
|
int64_t dim_coord = nucleus_num*3;
|
||||||
if (dim_coord < 0) return TREXIO_FAILURE;
|
if (dim_coord < 0) return TREXIO_FAILURE;
|
||||||
|
|
||||||
|
int rank = 2;
|
||||||
|
uint64_t dims[2] = {nucleus_num, 3};
|
||||||
|
|
||||||
switch (file->back_end) {
|
switch (file->back_end) {
|
||||||
|
|
||||||
case TREXIO_TEXT:
|
case TREXIO_TEXT:
|
||||||
@ -352,7 +355,7 @@ trexio_exit_code trexio_read_nucleus_coord(trexio_t* file, double* coord) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TREXIO_HDF5:
|
case TREXIO_HDF5:
|
||||||
return trexio_hdf5_read_nucleus_coord(file, coord);
|
return trexio_hdf5_read_nucleus_coord(file, coord, rank, dims);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
case TREXIO_JSON:
|
case TREXIO_JSON:
|
||||||
@ -375,6 +378,9 @@ trexio_exit_code trexio_write_nucleus_coord(trexio_t* file, const double* coord)
|
|||||||
int64_t dim_coord = nucleus_num*3;
|
int64_t dim_coord = nucleus_num*3;
|
||||||
if (dim_coord < 0) return TREXIO_FAILURE;
|
if (dim_coord < 0) return TREXIO_FAILURE;
|
||||||
|
|
||||||
|
int rank = 2;
|
||||||
|
uint64_t dims[2] = {nucleus_num, 3};
|
||||||
|
|
||||||
switch (file->back_end) {
|
switch (file->back_end) {
|
||||||
|
|
||||||
case TREXIO_TEXT:
|
case TREXIO_TEXT:
|
||||||
@ -382,7 +388,7 @@ trexio_exit_code trexio_write_nucleus_coord(trexio_t* file, const double* coord)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TREXIO_HDF5:
|
case TREXIO_HDF5:
|
||||||
return trexio_hdf5_write_nucleus_coord(file, coord);
|
return trexio_hdf5_write_nucleus_coord(file, coord, rank, dims);
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
case TREXIO_JSON:
|
case TREXIO_JSON:
|
||||||
|
@ -406,113 +406,82 @@ trexio_exit_code trexio_hdf5_write_nucleus_num(const trexio_t* file, const uint6
|
|||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord) {
|
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord, const int rank, const uint64_t* dims) {
|
||||||
|
|
||||||
assert (file != NULL);
|
assert (file != NULL);
|
||||||
assert (coord != NULL);
|
assert (coord != NULL);
|
||||||
|
|
||||||
/*h5nucleus_t* nucleus = trexio_hdf5_read_nucleus((trexio_hdf5_t*) file);
|
|
||||||
if (nucleus == NULL) return TREXIO_FAILURE;
|
|
||||||
assert (nucleus->coord != NULL);*/
|
|
||||||
|
|
||||||
/* Allocate and read nucleus_coord array */
|
|
||||||
h5nucleus_t* nucleus = (h5nucleus_t*) malloc(sizeof(h5nucleus_t));
|
|
||||||
assert (nucleus != NULL);
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus->num));
|
|
||||||
assert (rc == TREXIO_SUCCESS);
|
|
||||||
assert (nucleus->num > 0L);
|
|
||||||
|
|
||||||
nucleus->coord = (double*) calloc(3 * nucleus->num, sizeof(double));
|
|
||||||
assert (nucleus->coord != NULL);
|
|
||||||
|
|
||||||
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
|
||||||
herr_t status;
|
|
||||||
/* High-level H5LT API. No need to deal with dataspaces and datatypes */
|
|
||||||
status = H5LTread_dataset_double(f->nucleus_group,
|
|
||||||
NUCLEUS_COORD_NAME,
|
|
||||||
nucleus->coord);
|
|
||||||
assert (status >= 0);
|
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
uint64_t nucleus_num;
|
||||||
coord[i] = nucleus->coord[i];
|
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus_num));
|
||||||
|
assert (rc == TREXIO_SUCCESS);
|
||||||
|
assert (nucleus_num > 0L);
|
||||||
|
|
||||||
|
uint64_t ddims[2] = {nucleus_num, 3};
|
||||||
|
for (int i=0; i<rank; i++){
|
||||||
|
assert (ddims[i] == dims[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_free_nucleus(nucleus);
|
double* nucleus_coord = (double*) calloc(3 * nucleus_num, sizeof(double));
|
||||||
|
assert (nucleus_coord != NULL);
|
||||||
|
|
||||||
|
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
||||||
|
|
||||||
|
/* High-level H5LT API. No need to deal with dataspaces and datatypes */
|
||||||
|
herr_t status = H5LTread_dataset_double(f->nucleus_group,
|
||||||
|
NUCLEUS_COORD_NAME,
|
||||||
|
nucleus_coord);
|
||||||
|
|
||||||
|
assert (status >= 0);
|
||||||
|
|
||||||
|
for (size_t i=0 ; i<3*nucleus_num ; i++) {
|
||||||
|
coord[i] = nucleus_coord[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(nucleus_coord);
|
||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord) {
|
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord, const int rank, const uint64_t* dims) {
|
||||||
|
|
||||||
assert (file != NULL);
|
assert (file != NULL);
|
||||||
assert (coord != NULL);
|
assert (coord != NULL);
|
||||||
|
|
||||||
/*h5nucleus_t* nucleus = trexio_hdf5_read_nucleus((trexio_hdf5_t*) file);
|
uint64_t nucleus_num;
|
||||||
if (nucleus == NULL) return TREXIO_FAILURE;
|
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus_num));
|
||||||
assert (nucleus->coord != NULL);
|
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
|
||||||
nucleus->coord[i] = coord[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_write_nucleus((trexio_hdf5_t*) file, nucleus);
|
|
||||||
assert (rc == TREXIO_SUCCESS);*/
|
|
||||||
|
|
||||||
h5nucleus_t* nucleus = (h5nucleus_t*) malloc(sizeof(h5nucleus_t));
|
|
||||||
assert (nucleus != NULL);
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus->num));
|
|
||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
assert (nucleus->num > 0L);
|
assert (nucleus_num > 0L);
|
||||||
|
|
||||||
nucleus->coord = (double*) calloc(3 * nucleus->num, sizeof(double));
|
double* nucleus_coord = (double*) calloc(3 * nucleus_num, sizeof(double));
|
||||||
assert (nucleus->coord != NULL);
|
assert (nucleus_coord != NULL);
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
for (size_t i=0 ; i<3*nucleus_num ; i++) {
|
||||||
nucleus->coord[i] = coord[i];
|
nucleus_coord[i] = coord[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
||||||
|
|
||||||
hid_t dset_id, dspace, dtype;
|
|
||||||
herr_t status;
|
herr_t status;
|
||||||
int coord_rank = 2;
|
|
||||||
const hsize_t coord_dims[2] = {nucleus->num, 3};
|
|
||||||
if ( H5LTfind_dataset(f->nucleus_group, NUCLEUS_COORD_NAME) != 1) {
|
if ( H5LTfind_dataset(f->nucleus_group, NUCLEUS_COORD_NAME) != 1) {
|
||||||
|
|
||||||
status = H5LTmake_dataset_double (f->nucleus_group, NUCLEUS_COORD_NAME,
|
status = H5LTmake_dataset_double (f->nucleus_group, NUCLEUS_COORD_NAME,
|
||||||
coord_rank, coord_dims, nucleus->coord);
|
rank, (hsize_t*) dims, nucleus_coord);
|
||||||
assert (status >= 0);
|
assert (status >= 0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
dset_id = H5Dopen(f->nucleus_group, NUCLEUS_COORD_NAME, H5P_DEFAULT);
|
hid_t dset_id = H5Dopen(f->nucleus_group, NUCLEUS_COORD_NAME, H5P_DEFAULT);
|
||||||
assert (dset_id > 0);
|
assert (dset_id > 0);
|
||||||
dspace = H5Dget_space(dset_id);
|
|
||||||
assert (dspace > 0);
|
|
||||||
dtype = H5Dget_type(dset_id);
|
|
||||||
assert (dtype > 0);
|
|
||||||
|
|
||||||
int rrank;
|
status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, nucleus_coord);
|
||||||
hsize_t dims[2] = {0, 0};
|
|
||||||
rrank = H5Sget_simple_extent_dims(dspace,
|
|
||||||
dims, NULL);
|
|
||||||
assert (rrank == coord_rank);
|
|
||||||
for (int i=0; i<rrank; i++){
|
|
||||||
assert (dims[i] == coord_dims[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, nucleus->coord);
|
|
||||||
assert (status >= 0);
|
assert (status >= 0);
|
||||||
|
|
||||||
H5Sclose(dspace);
|
|
||||||
H5Tclose(dtype);
|
|
||||||
H5Dclose(dset_id);
|
H5Dclose(dset_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_free_nucleus(nucleus);
|
free(nucleus_coord);
|
||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ typedef struct four_index_s {
|
|||||||
trexio_exit_code trexio_hdf5_read_nucleus_num(const trexio_t* file, uint64_t* num);
|
trexio_exit_code trexio_hdf5_read_nucleus_num(const trexio_t* file, uint64_t* num);
|
||||||
trexio_exit_code trexio_hdf5_write_nucleus_num(const trexio_t* file, const uint64_t num);
|
trexio_exit_code trexio_hdf5_write_nucleus_num(const trexio_t* file, const uint64_t num);
|
||||||
|
|
||||||
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord);
|
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord, const int rank, const uint64_t* dims);
|
||||||
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord);
|
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord, const int rank, const uint64_t* dims);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -564,118 +564,87 @@ trexio_exit_code trexio_hdf5_write_nucleus_num(const trexio_t* file, const uint6
|
|||||||
The ~coord~ array is assumed allocated with the appropriate size.
|
The ~coord~ array is assumed allocated with the appropriate size.
|
||||||
|
|
||||||
#+begin_src c :tangle trexio_hdf5.h
|
#+begin_src c :tangle trexio_hdf5.h
|
||||||
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord);
|
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord, const int rank, const uint64_t* dims);
|
||||||
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord);
|
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord, const int rank, const uint64_t* dims);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src c :tangle trexio_hdf5.c
|
#+begin_src c :tangle trexio_hdf5.c
|
||||||
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord) {
|
trexio_exit_code trexio_hdf5_read_nucleus_coord(const trexio_t* file, double* coord, const int rank, const uint64_t* dims) {
|
||||||
|
|
||||||
assert (file != NULL);
|
assert (file != NULL);
|
||||||
assert (coord != NULL);
|
assert (coord != NULL);
|
||||||
|
|
||||||
/*h5nucleus_t* nucleus = trexio_hdf5_read_nucleus((trexio_hdf5_t*) file);
|
|
||||||
if (nucleus == NULL) return TREXIO_FAILURE;
|
|
||||||
assert (nucleus->coord != NULL);*/
|
|
||||||
|
|
||||||
/* Allocate and read nucleus_coord array */
|
|
||||||
h5nucleus_t* nucleus = (h5nucleus_t*) malloc(sizeof(h5nucleus_t));
|
|
||||||
assert (nucleus != NULL);
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus->num));
|
|
||||||
assert (rc == TREXIO_SUCCESS);
|
|
||||||
assert (nucleus->num > 0L);
|
|
||||||
|
|
||||||
nucleus->coord = (double*) calloc(3 * nucleus->num, sizeof(double));
|
|
||||||
assert (nucleus->coord != NULL);
|
|
||||||
|
|
||||||
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
|
||||||
herr_t status;
|
|
||||||
/* High-level H5LT API. No need to deal with dataspaces and datatypes */
|
|
||||||
status = H5LTread_dataset_double(f->nucleus_group,
|
|
||||||
NUCLEUS_COORD_NAME,
|
|
||||||
nucleus->coord);
|
|
||||||
assert (status >= 0);
|
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
uint64_t nucleus_num;
|
||||||
coord[i] = nucleus->coord[i];
|
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus_num));
|
||||||
|
assert (rc == TREXIO_SUCCESS);
|
||||||
|
assert (nucleus_num > 0L);
|
||||||
|
|
||||||
|
uint64_t ddims[2] = {nucleus_num, 3};
|
||||||
|
for (int i=0; i<rank; i++){
|
||||||
|
assert (ddims[i] == dims[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_free_nucleus(nucleus);
|
double* nucleus_coord = (double*) calloc(3 * nucleus_num, sizeof(double));
|
||||||
|
assert (nucleus_coord != NULL);
|
||||||
|
|
||||||
|
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
||||||
|
|
||||||
|
/* High-level H5LT API. No need to deal with dataspaces and datatypes */
|
||||||
|
herr_t status = H5LTread_dataset_double(f->nucleus_group,
|
||||||
|
NUCLEUS_COORD_NAME,
|
||||||
|
nucleus_coord);
|
||||||
|
|
||||||
|
assert (status >= 0);
|
||||||
|
|
||||||
|
for (size_t i=0 ; i<3*nucleus_num ; i++) {
|
||||||
|
coord[i] = nucleus_coord[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(nucleus_coord);
|
||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord) {
|
trexio_exit_code trexio_hdf5_write_nucleus_coord(const trexio_t* file, const double* coord, const int rank, const uint64_t* dims) {
|
||||||
|
|
||||||
assert (file != NULL);
|
assert (file != NULL);
|
||||||
assert (coord != NULL);
|
assert (coord != NULL);
|
||||||
|
|
||||||
/*h5nucleus_t* nucleus = trexio_hdf5_read_nucleus((trexio_hdf5_t*) file);
|
uint64_t nucleus_num;
|
||||||
if (nucleus == NULL) return TREXIO_FAILURE;
|
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus_num));
|
||||||
assert (nucleus->coord != NULL);
|
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
|
||||||
nucleus->coord[i] = coord[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_write_nucleus((trexio_hdf5_t*) file, nucleus);
|
|
||||||
assert (rc == TREXIO_SUCCESS);*/
|
|
||||||
|
|
||||||
h5nucleus_t* nucleus = (h5nucleus_t*) malloc(sizeof(h5nucleus_t));
|
|
||||||
assert (nucleus != NULL);
|
|
||||||
|
|
||||||
trexio_exit_code rc = trexio_hdf5_read_nucleus_num(file, &(nucleus->num));
|
|
||||||
assert (rc == TREXIO_SUCCESS);
|
assert (rc == TREXIO_SUCCESS);
|
||||||
assert (nucleus->num > 0L);
|
assert (nucleus_num > 0L);
|
||||||
|
|
||||||
nucleus->coord = (double*) calloc(3 * nucleus->num, sizeof(double));
|
double* nucleus_coord = (double*) calloc(3 * nucleus_num, sizeof(double));
|
||||||
assert (nucleus->coord != NULL);
|
assert (nucleus_coord != NULL);
|
||||||
|
|
||||||
for (size_t i=0 ; i<3*nucleus->num ; i++) {
|
for (size_t i=0 ; i<3*nucleus_num ; i++) {
|
||||||
nucleus->coord[i] = coord[i];
|
nucleus_coord[i] = coord[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
trexio_hdf5_t* f = (trexio_hdf5_t*) file;
|
||||||
|
|
||||||
hid_t dset_id, dspace, dtype;
|
|
||||||
herr_t status;
|
herr_t status;
|
||||||
int coord_rank = 2;
|
|
||||||
const hsize_t coord_dims[2] = {nucleus->num, 3};
|
|
||||||
if ( H5LTfind_dataset(f->nucleus_group, NUCLEUS_COORD_NAME) != 1) {
|
if ( H5LTfind_dataset(f->nucleus_group, NUCLEUS_COORD_NAME) != 1) {
|
||||||
|
|
||||||
status = H5LTmake_dataset_double (f->nucleus_group, NUCLEUS_COORD_NAME,
|
status = H5LTmake_dataset_double (f->nucleus_group, NUCLEUS_COORD_NAME,
|
||||||
coord_rank, coord_dims, nucleus->coord);
|
rank, (hsize_t*) dims, nucleus_coord);
|
||||||
assert (status >= 0);
|
assert (status >= 0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
dset_id = H5Dopen(f->nucleus_group, NUCLEUS_COORD_NAME, H5P_DEFAULT);
|
hid_t dset_id = H5Dopen(f->nucleus_group, NUCLEUS_COORD_NAME, H5P_DEFAULT);
|
||||||
assert (dset_id > 0);
|
assert (dset_id > 0);
|
||||||
dspace = H5Dget_space(dset_id);
|
|
||||||
assert (dspace > 0);
|
|
||||||
dtype = H5Dget_type(dset_id);
|
|
||||||
assert (dtype > 0);
|
|
||||||
|
|
||||||
int rrank;
|
status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, nucleus_coord);
|
||||||
hsize_t dims[2] = {0, 0};
|
|
||||||
rrank = H5Sget_simple_extent_dims(dspace,
|
|
||||||
dims, NULL);
|
|
||||||
assert (rrank == coord_rank);
|
|
||||||
for (int i=0; i<rrank; i++){
|
|
||||||
assert (dims[i] == coord_dims[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
status = H5Dwrite(dset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, nucleus->coord);
|
|
||||||
assert (status >= 0);
|
assert (status >= 0);
|
||||||
|
|
||||||
H5Sclose(dspace);
|
|
||||||
H5Tclose(dtype);
|
|
||||||
H5Dclose(dset_id);
|
H5Dclose(dset_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trexio_hdf5_free_nucleus(nucleus);
|
free(nucleus_coord);
|
||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user