diff --git a/bfps/NavierStokes.py b/bfps/NavierStokes.py index 52c6a8c4e0a5bdf6fb8c416b5294d34aa0b58690..d71d2704821ba085411a15652ab7cb387b48aa71 100644 --- a/bfps/NavierStokes.py +++ b/bfps/NavierStokes.py @@ -249,24 +249,15 @@ class NavierStokes(bfps.fluid_base.fluid_particle_base): self.parameters['kcut{0}'.format(self.particle_species)] = kcut self.parameters['integration_steps{0}'.format(self.particle_species)] = integration_steps self.particle_variables += 'tracers<{0}> *ps{1};\n'.format(self.C_dtype, self.particle_species) - grow_template = """ + self.file_datasets_grow += """ //begincpp temp_string = (std::string("/particles/") + - std::string(ps{0}->name) + - std::string("/{1}")); - Cdset = H5Dopen(stat_file, temp_string.c_str(), H5P_DEFAULT); - Cspace = H5Dget_space(Cdset); - ndims = H5Sget_simple_extent_dims(Cspace, dims, NULL); - dims[0] += niter_todo/niter_part; - H5Dset_extent(Cdset, dims); - H5Sclose(Cspace); - H5Dclose(Cdset); + std::string(ps{0}->name)); + group = H5Gopen(stat_file, temp_string.c_str(), H5P_DEFAULT); + grow_particle_datasets(group, temp_string.c_str(), NULL, NULL); + H5Gclose(group); //endcpp - """ - self.file_datasets_grow += grow_template.format(self.particle_species, 'state') - self.file_datasets_grow += grow_template.format(self.particle_species, 'rhs') - self.file_datasets_grow += grow_template.format(self.particle_species, 'velocity') - self.file_datasets_grow += grow_template.format(self.particle_species, 'acceleration') + """.format(self.particle_species) #self.particle_definitions if kcut == 'fs->kM': if self.particle_species == 0 or force_vel_reset: diff --git a/bfps/fluid_base.py b/bfps/fluid_base.py index 5e136d5c688f97a6a2611138e9e59e4df97f4b8b..b126f5aea6094e741a71e180ed711757e2e7a98d 100644 --- a/bfps/fluid_base.py +++ b/bfps/fluid_base.py @@ -118,6 +118,19 @@ class fluid_particle_base(bfps.code): 'grow_single_dataset(dset, niter_todo/niter_stat);\n' 'H5Dclose(dset);\n}\n' + 'return 0;\n}\n') + self.definitions += ('herr_t grow_particle_datasets(hid_t g_id, const char *name, const H5L_info_t *info, void *op_data)\n{\n' + + 'std::string full_name;\n' + + 'hsize_t dset;\n') + for key in ['state', 'velocity', 'acceleration']: + self.definitions += ('full_name = (std::string(name) + std::string("/{0}"));\n'.format(key) + + 'dset = H5Dopen(g_id, full_name.c_str(), H5P_DEFAULT);\n' + + 'grow_single_dataset(dset, niter_todo/niter_part);\n' + + 'H5Dclose(dset);\n') + self.definitions += ('full_name = (std::string(name) + std::string("/rhs"));\n' + + 'dset = H5Dopen(g_id, full_name.c_str(), H5P_DEFAULT);\n' + + 'grow_single_dataset(dset, 1);\n' + + 'H5Dclose(dset);\n' + + 'return 0;\n}\n') self.definitions += ('int grow_file_datasets()\n{\n' + 'int file_problems = 0;\n' + self.file_datasets_grow + diff --git a/tests/test_plain.py b/tests/test_plain.py index 929100bc1802bc93e300045d7a3dfc892aa335b4..596eb0e9323c81e4d0c8c504b093aa2b1c95b0f9 100755 --- a/tests/test_plain.py +++ b/tests/test_plain.py @@ -47,12 +47,12 @@ def plain(opt): opt.work_dir = wd + '/N{0:0>3x}_2'.format(opt.n) opt.njobs *= 2 opt.niter_todo /= 2 - c1 = launch(opt) + c1 = launch(opt, dt = c0.parameters['dt']) c1.compute_statistics() opt.work_dir = wd + '/N{0:0>3x}_3'.format(opt.n) opt.njobs = 3*opt.njobs/2 opt.niter_todo = 2*opt.niter_todo/3 - c2 = launch(opt) + c2 = launch(opt, dt = c0.parameters['dt']) c2.compute_statistics() # plot energy and enstrophy fig = plt.figure(figsize = (12, 12))