@@ -344,7 +344,7 @@ void sort_data_according_to_id_dataset(struct h5md_file* file, int group_number,
344
344
int i = group_number ;
345
345
/////////////////
346
346
//read in id_data of group
347
- if (file -> groups [i ].id_dataset_id > 0 ){
347
+ if (file -> groups [i ].id_dataset_id >= 0 ){
348
348
int data_out_local_id [file -> groups [i ].natoms_group ];
349
349
hid_t dataspace_id_id = H5Dget_space (file -> groups [i ].id_dataset_id ); //Define dataset dataspace (for id_dataset) in file.
350
350
/*
@@ -354,17 +354,37 @@ void sort_data_according_to_id_dataset(struct h5md_file* file, int group_number,
354
354
hsize_t dataset_slab_offset [rank_dataset ];
355
355
dataset_slab_offset [0 ]= file -> current_time ;
356
356
dataset_slab_offset [1 ]= 0 ;
357
+ if (rank_dataset == 3 )
358
+ dataset_slab_offset [2 ]= 0 ;
357
359
358
360
hsize_t dataset_slab_count [rank_dataset ];
359
361
dataset_slab_count [0 ] = 1 ;
360
362
dataset_slab_count [1 ] = file -> groups [i ].natoms_group ;
363
+ if (rank_dataset == 3 )
364
+ dataset_slab_count [2 ]= 1 ;
361
365
H5Sselect_hyperslab (dataspace_id_id , H5S_SELECT_SET , dataset_slab_offset , NULL , dataset_slab_count , NULL );
366
+ /*
367
+ * Define memory dataspace.
368
+ */
369
+ int rank = 1 ; //linear data representation
370
+ hsize_t dimsm [rank ];
371
+ dimsm [0 ]= file -> groups [i ].natoms_group ;
372
+
373
+ hid_t memspace_id = H5Screate_simple (rank ,dimsm ,NULL );
362
374
375
+ /*
376
+ * Define memory hyperslab.
377
+ */
378
+ hsize_t offset_out [rank ];
379
+ hsize_t count_out [rank ];
380
+ offset_out [0 ]= 0 ;
381
+ count_out [0 ]= file -> groups [i ].natoms_group ;
382
+ H5Sselect_hyperslab (memspace_id , H5S_SELECT_SET , offset_out , NULL , count_out , NULL );
363
383
/*
364
384
* Read data from hyperslab in the file into the hyperslab in memory
365
385
*/
366
386
hid_t wanted_memory_datatype = H5T_NATIVE_INT ;
367
- H5Dread (file -> groups [i ].id_dataset_id , wanted_memory_datatype , H5S_SELECT_SET , dataspace_id_id , H5P_DEFAULT , data_out_local_id );
387
+ H5Dread (file -> groups [i ].id_dataset_id , wanted_memory_datatype , memspace_id , dataspace_id_id , H5P_DEFAULT , data_out_local_id );
368
388
H5Sclose (dataspace_id_id );
369
389
//use id data to sort particle positions (use binary tree)
370
390
//create binary tree
@@ -491,7 +511,7 @@ int h5md_unfold_positions(struct h5md_file* file, float* unsorted_folded_pos){
491
511
/////////////////
492
512
//read in image_data of group
493
513
int data_out_local_image [file -> groups [i ].natoms_group * file -> groups [i ].nspacedims ];
494
- if (file -> groups [i ].image_dataset_id > 0 ){
514
+ if (file -> groups [i ].image_dataset_id >= 0 ){
495
515
hid_t dataspace_image_id = H5Dget_space (file -> groups [i ].image_dataset_id ); //Define dataset dataspace (for image_dataset) in file.
496
516
if (dataspace_image_id < 0 )
497
517
continue ;
@@ -572,7 +592,7 @@ int get_box_vectors(struct h5md_file* file, int group_i, int time_i, float* vec
572
592
hid_t box_timeindependent_dataset_id = H5Dopen2 (file -> file_id , full_path_box_dataset_timeindependent ,H5P_DEFAULT );
573
593
574
594
575
- if (box_timedependent_dataset_id > 0 ){
595
+ if (box_timedependent_dataset_id >= 0 ){
576
596
//timedependent dataset exists, use it
577
597
//read timedependent dataset
578
598
float * data_box = malloc (file -> ntime * 3 * 3 * sizeof (float ));
@@ -588,7 +608,7 @@ int get_box_vectors(struct h5md_file* file, int group_i, int time_i, float* vec
588
608
vector_c [2 ]= data_box [time_i * 9 + 8 ];
589
609
free (data_box );
590
610
status = 0 ;
591
- }else if (box_timeindependent_dataset_id > 0 ){
611
+ }else if (box_timeindependent_dataset_id >= 0 ){
592
612
//read timeindependent dataset
593
613
//decided whether box is cubic (dataset contains a vector) or triclinic (dataset contains a matrix)
594
614
int dims_box ;
@@ -660,7 +680,7 @@ int get_box_information(struct h5md_file* file, int group_number, int time_i, h5
660
680
float vector_a [3 ];
661
681
float vector_b [3 ];
662
682
float vector_c [3 ];
663
- if (box_timedependent_dataset_id > 0 ){
683
+ if (box_timedependent_dataset_id >= 0 ){
664
684
//timedependent dataset exists, use it
665
685
//read timedependent dataset
666
686
status = get_box_vectors (file , group_number , time_i , vector_a ,vector_b ,vector_c );
@@ -673,7 +693,7 @@ int get_box_information(struct h5md_file* file, int group_number, int time_i, h5
673
693
box -> beta = calculate_angle_between_vectors (vector_a ,vector_c ,3 );
674
694
box -> gamma = calculate_angle_between_vectors (vector_a ,vector_b ,3 );
675
695
}else {
676
- if (box_timeindependent_dataset_id > 0 ){
696
+ if (box_timeindependent_dataset_id >= 0 ){
677
697
time_i = FALSE;
678
698
//read timeindependent dataset
679
699
//decided whether box is cubic (dataset contains a vector) or triclinic (dataset contains a matrix)
@@ -962,7 +982,7 @@ void h5md_show_hdf5_error_messages(){
962
982
963
983
int h5md_get_file_id (struct h5md_file * file , hid_t * file_id ){
964
984
* file_id = file -> file_id ;
965
- if (file_id != 0 )
985
+ if (file_id != NULL )
966
986
return 0 ;
967
987
else
968
988
return -1 ;
@@ -1056,7 +1076,7 @@ int h5md_append_dataset(struct h5md_file *file, char* absolute_name_of_dataset,
1056
1076
int status ;
1057
1077
//check existence of dataset
1058
1078
hid_t dataset_id = H5Dopen2 (file -> file_id , absolute_name_of_dataset , H5P_DEFAULT );
1059
- if (dataset_id > 0 ){
1079
+ if (dataset_id >= 0 ){
1060
1080
hid_t datatype_read = H5Dget_type (dataset_id ); // datatype handle
1061
1081
H5T_class_t type_class_read = H5Tget_class (datatype_read );
1062
1082
hid_t dataspace_id = H5Dget_space (dataset_id ); //dataspace handle
@@ -1178,7 +1198,7 @@ int h5md_set_author(struct h5md_file* file, char* name, char* email_address){
1178
1198
status_email = H5LTset_attribute_string (file -> file_id , "/h5md/author" , "email" , email_address );
1179
1199
}
1180
1200
1181
- if ( status_name > 0 && status_email > 0 )
1201
+ if ( status_name >= 0 && status_email >= 0 )
1182
1202
return 0 ;
1183
1203
else
1184
1204
return -1 ;
@@ -1204,7 +1224,7 @@ int h5md_set_creator(struct h5md_file* file, char* name, char* version){
1204
1224
status_version = H5LTset_attribute_string (file -> file_id , "/h5md/creator" , "version" , version );
1205
1225
}
1206
1226
1207
- if (status_name > 0 && status_version > 0 )
1227
+ if (status_name >= 0 && status_version >= 0 )
1208
1228
return 0 ;
1209
1229
else
1210
1230
return -1 ;
0 commit comments