Skip to content

Commit 3ada667

Browse files
use correct rank
1 parent aef166c commit 3ada667

File tree

1 file changed

+30
-27
lines changed

1 file changed

+30
-27
lines changed

libh5md.c

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,13 @@ typedef struct h5md_box{
3333
typedef struct h5md_group{
3434
char* group_path;
3535
int natoms_group;
36+
int nspacedims;
3637
hid_t pos_dataset_id;
3738
hid_t species_dataset_id;
3839
hid_t mass_dataset_id;
3940
hid_t charge_dataset_id;
4041
hid_t image_dataset_id;
4142
hid_t id_dataset_id;
42-
hid_t datatype;
43-
H5T_class_t t_class;
44-
H5T_order_t order;
45-
size_t size_datatype;
46-
hid_t dataspace;
47-
int rank_dataset;
48-
int nspacedims;
4943
} h5md_group;
5044

5145
//file handling
@@ -60,6 +54,7 @@ struct h5md_file{
6054
int correction_timestep_VMD_counting;
6155
};
6256

57+
6358
//declaration of "private" functions, cannot be accessed from outside the library
6459
//declaration here in order to be able to sort the content of the file according to it's "importance"
6560
int initialize_h5md_struct(struct h5md_file* file);
@@ -102,6 +97,8 @@ herr_t check_for_pos_dataset( hid_t g_id, const char* obj_name, const H5L_info_t
10297
return status; //if status is 0 search for other position datasets continues. If status is negative, search is aborted.
10398
}
10499

100+
101+
105102
int modify_information_about_file_content(struct h5md_file* file, char* group_name){
106103
int status=-1;
107104

@@ -151,24 +148,24 @@ int modify_information_about_file_content(struct h5md_file* file, char* group_na
151148
* Get datatype and dataspace handles and then query
152149
* dataset class, order, size, rank and dimensions. Since all datasets are checked to be compatible do this only for the first dataset
153150
*/
151+
hid_t datatype = H5Dget_type(pos_dataset_id); // datatype handle
152+
H5T_class_t t_class = H5Tget_class(datatype);
153+
H5T_order_t order = H5Tget_order(datatype);
154154

155-
groups[file->ngroups-1].datatype = H5Dget_type(pos_dataset_id); // datatype handle
156-
groups[file->ngroups-1].t_class = H5Tget_class(groups[file->ngroups-1].datatype);
157-
groups[file->ngroups-1].order = H5Tget_order(groups[file->ngroups-1].datatype);
155+
size_t size_datatype = H5Tget_size(datatype);
156+
hid_t dataspace_id = H5Dget_space(pos_dataset_id); //dataspace handle
157+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_id);
158+
hsize_t dims_out[rank_dataset];
158159

159-
groups[file->ngroups-1].size_datatype = H5Tget_size(groups[file->ngroups-1].datatype);
160-
groups[file->ngroups-1].dataspace = H5Dget_space(pos_dataset_id); //dataspace handle
161-
groups[file->ngroups-1].rank_dataset = H5Sget_simple_extent_ndims(groups[file->ngroups-1].dataspace);
162-
hsize_t dims_out[groups[file->ngroups-1].rank_dataset];
163-
H5Sget_simple_extent_dims(groups[file->ngroups-1].dataspace, dims_out, NULL);
160+
H5Sget_simple_extent_dims(dataspace_id, dims_out, NULL);
164161
file->ntime = dims_out[0];
165162
file->natoms += dims_out[1];
166163
groups[file->ngroups-1].nspacedims = dims_out[2];
167164
groups[file->ngroups-1].natoms_group=dims_out[1];
168165
groups[file->ngroups-1].group_path=strdup(group_name);
166+
H5Sclose(dataspace_id);
169167

170-
file->groups=groups; // assign file->groups here since get_box_information() uses all group_path entries, get_box_information can then be called later
171-
168+
file->groups=groups;
172169
status=0;
173170
}else{
174171
printf("position datasets are not compatible\n");
@@ -343,12 +340,13 @@ int sort_data_according_to_id_dataset(struct h5md_file* file, int group_number,
343340
/*
344341
* Define hyperslab in the dataset.
345342
*/
346-
hsize_t dataset_slab_offset[file->groups[i].rank_dataset];
343+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_id_id);
344+
hsize_t dataset_slab_offset[rank_dataset];
347345
dataset_slab_offset[2] = 0;
348346
dataset_slab_offset[0] = file->current_time;
349347
dataset_slab_offset[1] = 0;
350348

351-
hsize_t dataset_slab_count[file->groups[i].rank_dataset];
349+
hsize_t dataset_slab_count[rank_dataset];
352350
dataset_slab_count[2] = 0;
353351
dataset_slab_count[0] = 1;
354352
dataset_slab_count[1] = file->groups[i].natoms_group;
@@ -421,12 +419,14 @@ int h5md_get_timestep(struct h5md_file* file, int* natoms, float **coords){
421419
/*
422420
* Define hyperslab in the dataset.
423421
*/
424-
hsize_t dataset_slab_offset[file->groups[i].rank_dataset];
422+
423+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_pos_id);
424+
hsize_t dataset_slab_offset[rank_dataset];
425425
dataset_slab_offset[0] = file->current_time;
426426
dataset_slab_offset[1] = 0;
427427
dataset_slab_offset[2] = 0;
428428

429-
hsize_t dataset_slab_count[file->groups[i].rank_dataset];
429+
hsize_t dataset_slab_count[rank_dataset];
430430
dataset_slab_count[0] = 1;
431431
dataset_slab_count[1] = file->groups[i].natoms_group;
432432
dataset_slab_count[2] = file->groups[i].nspacedims;
@@ -895,9 +895,10 @@ int h5md_get_all_species_infromation(struct h5md_file *file, int** species_infro
895895
/*
896896
* Define hyperslab in the dataset.
897897
*/
898-
hsize_t dataset_slab_offset[file->groups[i].rank_dataset];
898+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_id);
899+
hsize_t dataset_slab_offset[rank_dataset];
899900
dataset_slab_offset[0] = 0;
900-
hsize_t dataset_slab_count[file->groups[i].rank_dataset];
901+
hsize_t dataset_slab_count[rank_dataset];
901902
dataset_slab_count[0] = file->groups[i].natoms_group;
902903
H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET, dataset_slab_offset, NULL, dataset_slab_count, NULL);
903904

@@ -948,9 +949,10 @@ int h5md_get_all_mass_infromation(struct h5md_file *file, float** mass_infromati
948949
/*
949950
* Define hyperslab in the dataset.
950951
*/
951-
hsize_t dataset_slab_offset[file->groups[i].rank_dataset];
952+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_id);
953+
hsize_t dataset_slab_offset[rank_dataset];
952954
dataset_slab_offset[0] = 0;
953-
hsize_t dataset_slab_count[file->groups[i].rank_dataset];
955+
hsize_t dataset_slab_count[rank_dataset];
954956
dataset_slab_count[0] = file->groups[i].natoms_group;
955957
H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET, dataset_slab_offset, NULL, dataset_slab_count, NULL);
956958

@@ -1000,9 +1002,10 @@ int h5md_get_all_charge_infromation(struct h5md_file *file, float** charge_infro
10001002
/*
10011003
* Define hyperslab in the dataset.
10021004
*/
1003-
hsize_t dataset_slab_offset[file->groups[i].rank_dataset];
1005+
int rank_dataset = H5Sget_simple_extent_ndims(dataspace_id);
1006+
hsize_t dataset_slab_offset[rank_dataset];
10041007
dataset_slab_offset[0] = 0;
1005-
hsize_t dataset_slab_count[file->groups[i].rank_dataset];
1008+
hsize_t dataset_slab_count[rank_dataset];
10061009
dataset_slab_count[0] = file->groups[i].natoms_group;
10071010
H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET, dataset_slab_offset, NULL, dataset_slab_count, NULL);
10081011

0 commit comments

Comments
 (0)