@@ -524,6 +524,15 @@ void WriteMultiLevelPlotfileHDF5SingleDset (const std::string& plotfilename,
524
524
bool doConvert (*whichRD != FPC::NativeRealDescriptor ());
525
525
int whichRDBytes (whichRD->numBytes ());
526
526
527
+ // Pick data type of dataset
528
+ hid_t data_type;
529
+ if (whichRDBytes == 4 ) {
530
+ data_type = H5T_NATIVE_FLOAT;
531
+ }
532
+ else {
533
+ data_type = H5T_NATIVE_DOUBLE;
534
+ }
535
+
527
536
// Write data for each level
528
537
char level_name[32 ];
529
538
for (int level = 0 ; level <= finest_level; ++level) {
@@ -712,10 +721,11 @@ void WriteMultiLevelPlotfileHDF5SingleDset (const std::string& plotfilename,
712
721
#endif
713
722
714
723
#ifdef AMREX_USE_HDF5_ASYNC
715
- hid_t dataset = H5Dcreate_async (grp, dataname.c_str (), H5T_NATIVE_DOUBLE , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT, es_id_g);
724
+ hid_t dataset = H5Dcreate_async (grp, dataname.c_str (), data_type , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT, es_id_g);
716
725
#else
717
- hid_t dataset = H5Dcreate (grp, dataname.c_str (), H5T_NATIVE_DOUBLE , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT);
726
+ hid_t dataset = H5Dcreate (grp, dataname.c_str (), data_type , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT);
718
727
#endif
728
+
719
729
if (dataset < 0 )
720
730
std::cout << ParallelDescriptor::MyProc () << " create data failed! ret = " << dataset << std::endl;
721
731
@@ -727,9 +737,9 @@ void WriteMultiLevelPlotfileHDF5SingleDset (const std::string& plotfilename,
727
737
H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, ch_offset, NULL , hs_procsize, NULL );
728
738
729
739
#ifdef AMREX_USE_HDF5_ASYNC
730
- ret = H5Dwrite_async (dataset, H5T_NATIVE_DOUBLE , memdataspace, dataspace, dxpl_col, a_buffer.dataPtr (), es_id_g);
740
+ ret = H5Dwrite_async (dataset, data_type , memdataspace, dataspace, dxpl_col, a_buffer.dataPtr (), es_id_g);
731
741
#else
732
- ret = H5Dwrite (dataset, H5T_NATIVE_DOUBLE , memdataspace, dataspace, dxpl_col, a_buffer.dataPtr ());
742
+ ret = H5Dwrite (dataset, data_type , memdataspace, dataspace, dxpl_col, a_buffer.dataPtr ());
733
743
#endif
734
744
if (ret < 0 ) { std::cout << ParallelDescriptor::MyProc () << " Write data failed! ret = " << ret << std::endl; break ; }
735
745
@@ -961,6 +971,15 @@ void WriteMultiLevelPlotfileHDF5MultiDset (const std::string& plotfilename,
961
971
bool doConvert (*whichRD != FPC::NativeRealDescriptor ());
962
972
int whichRDBytes (whichRD->numBytes ());
963
973
974
+ // Pick data type
975
+ hid_t data_type;
976
+ if (whichRDBytes == 4 ) {
977
+ data_type = H5T_NATIVE_FLOAT;
978
+ }
979
+ else {
980
+ data_type = H5T_NATIVE_DOUBLE;
981
+ }
982
+
964
983
// Write data for each level
965
984
char level_name[32 ];
966
985
@@ -1160,7 +1179,7 @@ void WriteMultiLevelPlotfileHDF5MultiDset (const std::string& plotfilename,
1160
1179
hid_t dataspace = H5Screate_simple (1 , hs_allprocsize, NULL );
1161
1180
snprintf (dataname, sizeof dataname, " data:datatype=%d" , jj);
1162
1181
#ifdef AMREX_USE_HDF5_ASYNC
1163
- dataset = H5Dcreate_async (grp, dataname, H5T_NATIVE_DOUBLE , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT, es_id_g);
1182
+ dataset = H5Dcreate_async (grp, dataname, data_type , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT, es_id_g);
1164
1183
if (dataset < 0 ) { std::cout << ParallelDescriptor::MyProc () << " create data failed! ret = " << dataset << std::endl; }
1165
1184
1166
1185
if (hs_procsize[0 ] == 0 ) {
@@ -1169,11 +1188,11 @@ void WriteMultiLevelPlotfileHDF5MultiDset (const std::string& plotfilename,
1169
1188
H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, ch_offset, NULL , hs_procsize, NULL );
1170
1189
}
1171
1190
1172
- ret = H5Dwrite_async (dataset, H5T_NATIVE_DOUBLE , memdataspace, dataspace, dxpl_col, a_buffer_ind.dataPtr (), es_id_g);
1191
+ ret = H5Dwrite_async (dataset, data_type , memdataspace, dataspace, dxpl_col, a_buffer_ind.dataPtr (), es_id_g);
1173
1192
if (ret < 0 ) { std::cout << ParallelDescriptor::MyProc () << " Write data failed! ret = " << ret << std::endl; break ; }
1174
1193
H5Dclose_async (dataset, es_id_g);
1175
1194
#else
1176
- dataset = H5Dcreate (grp, dataname, H5T_NATIVE_DOUBLE , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT);
1195
+ dataset = H5Dcreate (grp, dataname, data_type , dataspace, H5P_DEFAULT, lev_dcpl_id, H5P_DEFAULT);
1177
1196
if (dataset < 0 ) { std::cout << ParallelDescriptor::MyProc () << " create data failed! ret = " << dataset << std::endl; }
1178
1197
1179
1198
if (hs_procsize[0 ] == 0 ) {
@@ -1182,7 +1201,7 @@ void WriteMultiLevelPlotfileHDF5MultiDset (const std::string& plotfilename,
1182
1201
H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, ch_offset, NULL , hs_procsize, NULL );
1183
1202
}
1184
1203
1185
- ret = H5Dwrite (dataset, H5T_NATIVE_DOUBLE , memdataspace, dataspace, dxpl_col, a_buffer_ind.dataPtr ());
1204
+ ret = H5Dwrite (dataset, data_type , memdataspace, dataspace, dxpl_col, a_buffer_ind.dataPtr ());
1186
1205
if (ret < 0 ) { std::cout << ParallelDescriptor::MyProc () << " Write data failed! ret = " << ret << std::endl; break ; }
1187
1206
H5Dclose (dataset);
1188
1207
#endif
0 commit comments