From 5b34b2334a74b6bc4181679350d281be7507c589 Mon Sep 17 00:00:00 2001 From: Cristian C Lalescu <Cristian.Lalescu@ds.mpg.de> Date: Thu, 7 Nov 2019 09:33:57 +0100 Subject: [PATCH] adds Gauss field par control for `kraichnan_field` --- TurTLE/DNS.py | 24 +++++++++++++++++++++++- cpp/full_code/kraichnan_field.cpp | 26 ++++++++++++-------------- cpp/full_code/kraichnan_field.hpp | 11 ++++++----- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/TurTLE/DNS.py b/TurTLE/DNS.py index bc7f9b84..deabe148 100644 --- a/TurTLE/DNS.py +++ b/TurTLE/DNS.py @@ -671,7 +671,20 @@ class DNS(_code): eval('self.parameters_to_parser_arguments(' 'parser_{0},' 'self.NSVEp_extra_parameters)'.format(parser)) + eval('self.parameters_to_parser_arguments(' + 'parser_{0},' + 'self.generate_extra_parameters(\'{0}\'))'.format(parser)) return None + def generate_extra_parameters( + self, + dns_type): + pars = {} + if dns_type == 'kraichnan_field': + pars['field_random_seed'] = int(1) + pars['spectrum_slope'] = float(-5./3) + pars['spectrum_k_cutoff'] = float(16) + pars['spectrum_coefficient'] = float(1) + return pars def prepare_launch( self, args = [], @@ -713,6 +726,9 @@ class DNS(_code): if self.dns_type in extra_parameters.keys(): for k in extra_parameters[self.dns_type].keys(): self.parameters[k] = extra_parameters[self.dns_type][k] + additional_parameters = self.generate_extra_parameters(self.dns_type) + for k in additional_parameters.keys(): + self.parameters[k] = additional_parameters[k] if ((self.parameters['niter_todo'] % self.parameters['niter_out']) != 0): self.parameters['niter_out'] = self.parameters['niter_todo'] if len(opt.src_work_dir) == 0: @@ -1050,7 +1066,13 @@ class DNS(_code): f['vorticity/complex/{0}'.format(0)] = data f.close() # now take care of particles' initial condition - if self.dns_type in ['kraichnan_field', 'static_field', 'NSVEparticles', 'NSVEcomplex_particles', 'NSVEparticles_no_output', 'NSVEp_extra_sampling']: + if self.dns_type in [ + 'kraichnan_field', + 'static_field', + 'NSVEparticles', + 'NSVEcomplex_particles', + 'NSVEparticles_no_output', + 'NSVEp_extra_sampling']: self.generate_particle_data(opt = opt) return None def launch_jobs( diff --git a/cpp/full_code/kraichnan_field.cpp b/cpp/full_code/kraichnan_field.cpp index 00ba67f1..aad4f402 100644 --- a/cpp/full_code/kraichnan_field.cpp +++ b/cpp/full_code/kraichnan_field.cpp @@ -2,20 +2,20 @@ * * * Copyright 2019 Max Planck Institute for Dynamics and Self-Organization * * * -* This file is part of bfps. * +* This file is part of TurTLE. * * * -* bfps is free software: you can redistribute it and/or modify * +* TurTLE is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published * * by the Free Software Foundation, either version 3 of the License, * * or (at your option) any later version. * * * -* bfps is distributed in the hope that it will be useful, * +* TurTLE is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * -* along with bfps. If not, see <http://www.gnu.org/licenses/> * +* along with TurTLE. If not, see <http://www.gnu.org/licenses/> * * * * Contact: Cristian.Lalescu@ds.mpg.de * * * @@ -101,14 +101,8 @@ int kraichnan_field<rnumber>::initialize(void) "position/0"); this->particles_sample_writer_mpi->setParticleFileLayout(this->ps->getParticleFileLayout()); - this->spectrum_slope = -5./3.; - this->spectrum_k_cutoff = 20.; //k_max is approximately N/2 in a N^3 simulation - - // Projection factor - this->spectrum_coeff = 3./2.; - - DEBUG_MSG("Coefficient: %g\n", - this->spectrum_coeff); + DEBUG_MSG("Coefficient: %g\n", + this->spectrum_coefficient); return EXIT_SUCCESS; } @@ -124,7 +118,7 @@ int kraichnan_field<rnumber>::step(void) this->iteration, this->spectrum_slope, this->spectrum_k_cutoff, - this->spectrum_coeff * 3./2.); // incompressibility projection factor + this->spectrum_coefficient * 3./2.); // incompressibility projection factor this->velocity->ift(); // PUT THE INCOMPRESSIBILITY PROJECTION FACTOR sqrt(2/3) @@ -189,7 +183,7 @@ int kraichnan_field<rnumber>::do_stats() std::unique_ptr<double[]> pdata(new double[3*this->ps->getLocalNbParticles()]); /// copy position data - + /// sample position std::copy(this->ps->getParticlesState(), this->ps->getParticlesState()+3*this->ps->getLocalNbParticles(), @@ -236,6 +230,10 @@ int kraichnan_field<rnumber>::read_parameters(void) this->tracers0_integration_steps = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_integration_steps"); this->tracers0_neighbours = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_neighbours"); this->tracers0_smoothness = hdf5_tools::read_value<int>(parameter_file, "parameters/tracers0_smoothness"); + this->spectrum_slope = hdf5_tools::read_value<double>(parameter_file, "parameters/spectrum_slope"); + this->spectrum_k_cutoff = hdf5_tools::read_value<double>(parameter_file, "parameters/spectrum_k_cutoff"); + this->spectrum_coefficient = hdf5_tools::read_value<double>(parameter_file, "parameters/spectrum_coefficient"); + this->field_random_seed = hdf5_tools::read_value<int>(parameter_file, "parameters/field_random_seed"); H5Fclose(parameter_file); return EXIT_SUCCESS; } diff --git a/cpp/full_code/kraichnan_field.hpp b/cpp/full_code/kraichnan_field.hpp index e9db021b..3710a0f7 100644 --- a/cpp/full_code/kraichnan_field.hpp +++ b/cpp/full_code/kraichnan_field.hpp @@ -3,20 +3,20 @@ * Copyright 2017 Max Planck Institute * * for Dynamics and Self-Organization * * * -* This file is part of bfps. * +* This file is part of TurTLE. * * * -* bfps is free software: you can redistribute it and/or modify * +* TurTLE is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published * * by the Free Software Foundation, either version 3 of the License, * * or (at your option) any later version. * * * -* bfps is distributed in the hope that it will be useful, * +* TurTLE is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * -* along with bfps. If not, see <http://www.gnu.org/licenses/> * +* along with TurTLE. If not, see <http://www.gnu.org/licenses/> * * * * Contact: Cristian.Lalescu@ds.mpg.de * * * @@ -61,7 +61,8 @@ class kraichnan_field: public direct_numerical_simulation field<rnumber, FFTW, THREE> *velocity; double spectrum_slope; double spectrum_k_cutoff; - double spectrum_coeff; + double spectrum_coefficient; + int field_random_seed; /* other stuff */ std::unique_ptr<abstract_particles_system<long long int, double>> ps; -- GitLab