diff --git a/bfps/Launcher.py b/bfps/Launcher.py index 27d9f739987c5c2d4da8dc17a929c8fed841794c..ad09a1f22188426b99c94b799c6a82e600fdedf4 100644 --- a/bfps/Launcher.py +++ b/bfps/Launcher.py @@ -1,20 +1,52 @@ import os -import sys -import numpy as np +import argparse import bfps class Launcher: - def __init__( - self, - data_dir = './'): - self.parser = bfps.get_parser( - bfps.NavierStokes, - work_dir = os.path.realpath(data_dir)) + def __init__(self): + self.base_class = bfps.NavierStokes + self.parser = argparse.ArgumentParser(prog = 'bfps') + self.parser.add_argument( + '-v', '--version', + action = 'version', + version = '%(prog)s ' + bfps.__version__) + self.parser.add_argument( + '-n', + type = int, + dest = 'n', + default = 32, + metavar = 'N', + help = 'code is run by default in a grid of NxNxN') + self.parser.add_argument( + '--run', + dest = 'run', + action = 'store_true') + self.parser.add_argument( + '--ncpu', + type = int, dest = 'ncpu', + default = 2) + self.parser.add_argument( + '--precision', + type = str, dest = 'precision', + default = 'single') + self.parser.add_argument( + '--simname', + type = str, dest = 'simname', + default = 'test') + self.parser.add_argument( + '--wd', + type = str, dest = 'work_dir', + default = './') + self.parser.add_argument( + '--njobs', + type = int, dest = 'njobs', + default = 1) self.parser.add_argument( '--QR-stats', action = 'store_true', - dest = 'QR_stats') + dest = 'QR_stats', + help = 'add this option if you want to compute velocity gradient and QR stats') self.parser.add_argument( '--kMeta', type = float, @@ -41,8 +73,18 @@ class Launcher: type = int, dest = 'src_iteration', default = 0) - self.data_dir = data_dir - self.base_class = bfps.NavierStokes + self.parser.add_argument( + '--particle-rand-seed', + type = int, + dest = 'particle_rand_seed', + default = None) + c = self.base_class() + for k in sorted(c.parameters.keys()): + self.parser.add_argument( + '--{0}'.format(k), + type = type(c.parameters[k]), + dest = k, + default = None) return None def __call__( self, @@ -50,17 +92,14 @@ class Launcher: opt = self.parser.parse_args(args) if opt.environment != '': bfps.host_info['environment'] = opt.environment - opt.nx = opt.n - opt.ny = opt.n - opt.nz = opt.n opt.work_dir = os.path.join( os.path.realpath(opt.work_dir), 'N{0:0>4}'.format(opt.n)) c = self.base_class( + work_dir = opt.work_dir, fluid_precision = opt.precision, simname = opt.simname, QR_stats_on = opt.QR_stats) - c.pars_from_namespace(opt) # with the default Lundgren forcing, I can estimate the dissipation # with nondefault forcing, figure out the amplitude for this viscosity # yourself @@ -75,6 +114,16 @@ class Launcher: meantrS2 = (opt.n//2 / opt.kMeta)**4 * c.parameters['nu']**2 c.parameters['max_Q_estimate'] = meantrS2 c.parameters['max_R_estimate'] = .4*meantrS2**1.5 + + # command line parameters will overwrite any defaults + cmd_line_pars = vars(opt) + for k in ['nx', 'ny', 'nz']: + if type(cmd_line_pars[k]) == type(None): + cmd_line_pars[k] = opt.n + for k in c.parameters.keys(): + if k in cmd_line_pars.keys(): + if not type(cmd_line_pars[k]) == type(None): + c.parameters[k] = cmd_line_pars[k] c.fill_up_fluid_code() c.finalize_code() c.write_src() @@ -83,11 +132,7 @@ class Launcher: if not os.path.exists(os.path.join(c.work_dir, c.simname + '.h5')): c.write_par() if c.parameters['nparticles'] > 0: - if opt.particle_rand_seed != 0: - rseed = opt.particle_rand_seed - else: - rseed = None - data = c.generate_tracer_state(species = 0, rseed = rseed) + data = c.generate_tracer_state(species = 0, rseed = opt.particle_rand_seed) for s in range(1, c.particle_species): c.generate_tracer_state(species = s, data = data) init_condition_file = os.path.join( diff --git a/bfps/__init__.py b/bfps/__init__.py index 519f83c482e24d4cf19fde9c12b5c6e8d55c874f..b9bc3a35ffafd7a181aa3521f2789aaa9f470244 100644 --- a/bfps/__init__.py +++ b/bfps/__init__.py @@ -53,41 +53,3 @@ from .fluid_converter import fluid_converter from .fluid_resize import fluid_resize from .NavierStokes import NavierStokes -import argparse - -def get_parser(base_class = NavierStokes, - n = 32, - ncpu = 2, - precision = 'single', - simname = 'test', - work_dir = './', - njobs = 1): - parser = argparse.ArgumentParser() - parser.add_argument('--run', dest = 'run', action = 'store_true') - parser.add_argument('-n', - type = int, dest = 'n', - default = n) - parser.add_argument('--ncpu', - type = int, dest = 'ncpu', - default = ncpu) - parser.add_argument('--precision', - type = str, dest = 'precision', - default = precision) - parser.add_argument('--simname', - type = str, dest = 'simname', - default = simname) - parser.add_argument('--wd', - type = str, dest = 'work_dir', - default = work_dir) - parser.add_argument('--njobs', - type = int, dest = 'njobs', - default = njobs) - c = base_class(simname = simname) - for k in sorted(c.parameters.keys()): - parser.add_argument( - '--{0}'.format(k), - type = type(c.parameters[k]), - dest = k, - default = c.parameters[k]) - return parser -