diff --git a/bfps/NavierStokes.py b/bfps/NavierStokes.py index 521c6dcb3cc313b76d9d7684629d5ca1f99e0536..52c6a8c4e0a5bdf6fb8c416b5294d34aa0b58690 100644 --- a/bfps/NavierStokes.py +++ b/bfps/NavierStokes.py @@ -52,7 +52,8 @@ class NavierStokes(bfps.fluid_base.fluid_particle_base): //begincpp std::string temp_string; hsize_t dims[4]; - hid_t Cdset, Cspace; + hid_t group; + hid_t Cspace, Cdset; int ndims; // store kspace information Cdset = H5Dopen(stat_file, "/kspace/kshell", H5P_DEFAULT); @@ -75,20 +76,11 @@ class NavierStokes(bfps.fluid_base.fluid_particle_base): Cdset = H5Dopen(stat_file, "/kspace/dk", H5P_DEFAULT); H5Dwrite(Cdset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &fs->dk); H5Dclose(Cdset); + group = H5Gopen(stat_file, "/statistics", H5P_DEFAULT); + H5Ovisit(group, H5_INDEX_NAME, H5_ITER_NATIVE, grow_statistics_dataset, NULL); + H5Gclose(group); //endcpp """ - for field in ['velocity', 'vorticity']: - for key in ['/statistics/xlines/{0}'.format(field), - '/statistics/moments/{0}'.format(field), - '/statistics/histograms/{0}'.format(field), - '/statistics/spectra/{0}_{0}'.format(field)]: - self.file_datasets_grow += ('Cdset = H5Dopen(stat_file, "{0}", H5P_DEFAULT);\n'.format(key) + - 'Cspace = H5Dget_space(Cdset);\n' + - 'ndims = H5Sget_simple_extent_dims(Cspace, dims, NULL);\n' + - 'dims[0] += niter_todo/niter_stat;\n' + - 'H5Dset_extent(Cdset, dims);\n' + - 'H5Sclose(Cspace);\n' + - 'H5Dclose(Cdset);\n') self.style = {} self.statistics = {} self.fluid_output = 'fs->write(\'v\', \'c\');\n' diff --git a/bfps/fluid_base.py b/bfps/fluid_base.py index b9feb0fb14002a3f3f752b1adb187e38df772289..5e136d5c688f97a6a2611138e9e59e4df97f4b8b 100644 --- a/bfps/fluid_base.py +++ b/bfps/fluid_base.py @@ -102,6 +102,22 @@ class fluid_particle_base(bfps.code): self.includes += self.particle_includes self.variables += self.particle_variables self.definitions += self.particle_definitions + self.definitions += ('int grow_single_dataset(hid_t dset, int tincrement)\n{\n' + + 'int ndims;\n' + + 'hsize_t dims[4];\n' + + 'hsize_t space;\n' + + 'space = H5Dget_space(dset);\n' + + 'ndims = H5Sget_simple_extent_dims(space, dims, NULL);\n' + + 'dims[0] += tincrement;\n' + + 'H5Dset_extent(dset, dims);\n' + + 'H5Sclose(space);\n' + + 'return EXIT_SUCCESS;\n}\n') + self.definitions += ('herr_t grow_statistics_dataset(hid_t o_id, const char *name, const H5O_info_t *info, void *op_data)\n{\n' + + 'if (info->type == H5O_TYPE_DATASET)\n{\n' + + 'hsize_t dset = H5Dopen(o_id, name, H5P_DEFAULT);\n' + + 'grow_single_dataset(dset, niter_todo/niter_stat);\n' + 'H5Dclose(dset);\n}\n' + + 'return 0;\n}\n') self.definitions += ('int grow_file_datasets()\n{\n' + 'int file_problems = 0;\n' + self.file_datasets_grow +