diff --git a/bfps/FluidConvert.py b/bfps/FluidConvert.py index cbb9d9c3f478463426afbb63c18bb26abba49285..2ed34a516c61bcf2fbaaad1c0ec36a720660daeb 100644 --- a/bfps/FluidConvert.py +++ b/bfps/FluidConvert.py @@ -28,6 +28,7 @@ import numpy as np import pickle import os from ._fluid_base import _fluid_particle_base +import bfps class FluidConvert(_fluid_particle_base): """This class is meant to be used for conversion of native DNS field @@ -37,14 +38,14 @@ class FluidConvert(_fluid_particle_base): """ def __init__( self, - name = 'FluidConvert', + name = 'FluidConvert-v' + bfps.__version__, work_dir = './', simname = 'test', fluid_precision = 'single', use_fftw_wisdom = True): _fluid_particle_base.__init__( self, - name = name, + name = name + '-' + fluid_precision, work_dir = work_dir, simname = simname, dtype = fluid_precision, diff --git a/bfps/FluidResize.py b/bfps/FluidResize.py index 8e03e1657e2f1551a4e27e8442dd0fc1032bc876..17cb1bae247ccfc9ae0f6ce10efb549569026b79 100644 --- a/bfps/FluidResize.py +++ b/bfps/FluidResize.py @@ -38,17 +38,17 @@ class FluidResize(_fluid_particle_base): """ def __init__( self, - name = 'FluidResize', + name = 'FluidResize-v' + bfps.__version__, work_dir = './', simname = 'test', - dtype = np.float32, + fluid_precision = 'single', use_fftw_wisdom = False): _fluid_particle_base.__init__( self, - name = name, + name = name + '-' + fluid_precision, work_dir = work_dir, simname = simname, - dtype = dtype, + dtype = fluid_precision, use_fftw_wisdom = use_fftw_wisdom) self.parameters['src_simname'] = 'test' self.parameters['dst_iter'] = 0 diff --git a/bfps/NavierStokes.py b/bfps/NavierStokes.py index 5f4cbc90e40964d2ba06b331c5e33d1a8f170ab4..5ac7e4a24b39fd9b96edbd03b1795d828248f7f2 100644 --- a/bfps/NavierStokes.py +++ b/bfps/NavierStokes.py @@ -41,7 +41,7 @@ class NavierStokes(_fluid_particle_base): """ def __init__( self, - name = 'NavierStokes', + name = 'NavierStokes-v' + bfps.__version__, work_dir = './', simname = 'test', fluid_precision = 'single', @@ -54,7 +54,7 @@ class NavierStokes(_fluid_particle_base): self.fftw_plan_rigor = fftw_plan_rigor _fluid_particle_base.__init__( self, - name = name, + name = name + '-' + fluid_precision, work_dir = work_dir, simname = simname, dtype = fluid_precision, @@ -62,8 +62,8 @@ class NavierStokes(_fluid_particle_base): self.parameters['nu'] = 0.1 self.parameters['fmode'] = 1 self.parameters['famplitude'] = 0.5 - self.parameters['fk0'] = 1.5 - self.parameters['fk1'] = 3.0 + self.parameters['fk0'] = 2.0 + self.parameters['fk1'] = 4.0 self.parameters['forcing_type'] = 'linear' self.parameters['histogram_bins'] = 256 self.parameters['max_velocity_estimate'] = 1.0 @@ -943,10 +943,6 @@ class NavierStokes(_fluid_particle_base): type = int, dest = 'src_iteration', default = 0) - parser.add_argument( - '--precision', - type = str, dest = 'precision', - default = 'single') parser.add_argument( '--njobs', type = int, dest = 'njobs', @@ -984,6 +980,11 @@ class NavierStokes(_fluid_particle_base): self.QR_stats_on = opt.QR_stats self.parameters['nu'] = (opt.kMeta * 2 / opt.n)**(4./3) self.parameters['dt'] = (opt.dtfactor / opt.n) + # custom famplitude for 288 and 576 + if opt.n == 288: + self.parameters['famplitude'] = 0.45 + elif opt.n == 576: + self.parameters['famplitude'] = 0.47 if ((self.parameters['niter_todo'] % self.parameters['niter_out']) != 0): self.parameters['niter_out'] = self.parameters['niter_todo'] if self.QR_stats_on: @@ -993,7 +994,9 @@ class NavierStokes(_fluid_particle_base): meantrS2 = (opt.n//2 / opt.kMeta)**4 * self.parameters['nu']**2 self.parameters['max_Q_estimate'] = meantrS2 self.parameters['max_R_estimate'] = .4*meantrS2**1.5 - + # add QR suffix to code name, since we now expect additional + # datasets in the .h5 file + self.name += '-QR' if len(opt.src_work_dir) == 0: opt.src_work_dir = opt.work_dir self.pars_from_namespace(opt) diff --git a/bfps/__main__.py b/bfps/__main__.py index 4a1029991f45811ef60d1742e8a055755aa07f60..5a75928a6d481cc6cbc9a2aa88ba37e849e09d81 100644 --- a/bfps/__main__.py +++ b/bfps/__main__.py @@ -37,17 +37,36 @@ def main(): '-v', '--version', action = 'version', version = '%(prog)s ' + bfps.__version__) + NSoptions = ['NavierStokes', + 'NavierStokes-single', + 'NavierStokes-double', + 'NS', + 'NS-single', + 'NS-double'] + FRoptions = ['FluidResize', + 'FluidResize-single', + 'FluidResize-double', + 'FR', + 'FR-single', + 'FR-double'] parser.add_argument( 'base_class', - choices = ['NavierStokes', - 'FluidResize'], + choices = NSoptions + FRoptions, type = str) # first option is the choice of base class or -h or -v # all other options are passed on to the base_class instance opt = parser.parse_args(sys.argv[1:2]) # error is thrown if first option is not a base class, so launch # cannot be executed by mistake. - c = eval('{0}()'.format(opt.base_class)) + if 'double' in opt.base_class: + precision = 'double' + else: + precision = 'single' + if opt.base_class in NSoptions: + base_class = NavierStokes + elif opt.base_class in FRoptions: + base_class = FluidResize + c = base_class(fluid_precision = precision) c.launch(args = sys.argv[2:]) return None diff --git a/bfps/_code.py b/bfps/_code.py index 755c51d6d948b4d2845a8b19ca007cfbf98f4d12..3589689cebd20104dd5bc034ecd6bcba63a2df97 100644 --- a/bfps/_code.py +++ b/bfps/_code.py @@ -198,7 +198,7 @@ class _code(_base): self.write_sge_file( file_name = os.path.join(self.work_dir, qsub_script_name), nprocesses = ncpu, - name_of_run = self.name + '_' + suffix, + name_of_run = suffix, command_atoms = command_atoms[3:], hours = hours, minutes = minutes, @@ -210,7 +210,7 @@ class _code(_base): qsub_atoms += ['-hold_jid', job_name_list[-1]] subprocess.call(qsub_atoms + [qsub_script_name]) os.chdir(current_dir) - job_name_list.append(self.name + '_' + suffix) + job_name_list.append(suffix) elif self.host_info['type'] == 'pc': os.chdir(self.work_dir) os.environ['LD_LIBRARY_PATH'] += ':{0}'.format(bfps.lib_dir) diff --git a/bfps/_fluid_base.py b/bfps/_fluid_base.py index d82f83c3a71b3fa8dbfbd77b2d855c0b941de5ee..ebdaa8e3218b2ec5cd245004f6c4af9232a0aaa9 100644 --- a/bfps/_fluid_base.py +++ b/bfps/_fluid_base.py @@ -48,7 +48,7 @@ class _fluid_particle_base(_code): work_dir = work_dir, simname = simname) self.use_fftw_wisdom = use_fftw_wisdom - self.name = name + '_' + simname + self.name = name self.particle_species = 0 if dtype in [np.float32, np.float64]: self.dtype = dtype @@ -395,4 +395,9 @@ class _fluid_particle_base(_code): nshells = kspace['nshell'].shape[0] ofile.close() return None + def specific_parser_arguments( + self, + parser): + _code.specific_parser_arguments(self, parser) + return None diff --git a/tests/base.py b/tests/base.py index 2264de23b013fd2f497561fed0cab2b40cd54e56..712b5a24b88eb1bb43a3806d75018df52f237790 100644 --- a/tests/base.py +++ b/tests/base.py @@ -92,7 +92,7 @@ parser.add_argument( def double(opt): old_simname = 'N{0:0>3x}'.format(opt.n) new_simname = 'N{0:0>3x}'.format(opt.n*2) - c = FluidResize(dtype = opt.precision) + c = FluidResize(fluid_precision = opt.precision) c.launch( args = ['--simname', old_simname + '_double', '--wd', opt.work_dir,