Skip to content
Snippets Groups Projects
Commit 42b83bb7 authored by Chichi Lalescu's avatar Chichi Lalescu
Browse files

add function generate argument parser

and modified plain test to work with it. other tests still need to be
updated though.
parent 6cd8cb14
Branches
Tags
No related merge requests found
......@@ -51,3 +51,41 @@ 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()
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
......@@ -101,6 +101,11 @@ class base(object):
for k in data_file['parameters'].keys():
self.parameters[k] = data_file['parameters/' + k].value
return None
def pars_from_namespace(self, opt):
new_pars = vars(opt)
for k in self.parameters.keys():
self.parameters[k] = new_pars[k]
return None
def get_coord(self, direction):
assert(direction == 'x' or direction == 'y' or direction == 'z')
return np.arange(.0, self.parameters['n' + direction])*2*np.pi / self.parameters['n' + direction]
......
......@@ -22,42 +22,19 @@
import os
import subprocess
import argparse
import pickle
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import h5py
import bfps
from bfps import fluid_resize
parser = argparse.ArgumentParser()
parser.add_argument('--run', dest = 'run', action = 'store_true')
parser = bfps.get_parser()
parser.add_argument('--initialize', dest = 'initialize', action = 'store_true')
parser.add_argument('-n',
type = int, dest = 'n', default = 64)
parser.add_argument('--iteration',
type = int, dest = 'iteration', default = 0)
parser.add_argument('--ncpu',
type = int, dest = 'ncpu', default = 2)
parser.add_argument('--nsteps',
type = int, dest = 'nsteps', default = 16)
parser.add_argument('--njobs',
type = int, dest = 'njobs', default = 1)
parser.add_argument('--nparticles',
type = int, dest = 'nparticles', default = 8)
parser.add_argument('--neighbours',
type = int, dest = 'neighbours', default = 3)
parser.add_argument('--smoothness',
type = int, dest = 'smoothness', default = 2)
parser.add_argument('--wd',
type = str, dest = 'work_dir', default = 'data')
parser.add_argument('--precision',
type = str, dest = 'precision', default = 'single')
parser.add_argument('--multiplejob',
dest = 'multiplejob', action = 'store_true')
def double(opt):
old_simname = 'N{0:0>3x}'.format(opt.n)
......@@ -100,7 +77,7 @@ def launch(
c = code_class(
work_dir = opt.work_dir,
fluid_precision = opt.precision)
assert((opt.nsteps % 4) == 0)
c.pars_from_namespace(opt)
c.parameters['nx'] = opt.n
c.parameters['ny'] = opt.n
c.parameters['nz'] = opt.n
......@@ -109,11 +86,9 @@ def launch(
else:
c.parameters['nu'] = nu
c.parameters['dt'] = 5e-3 * (64. / opt.n)
c.parameters['niter_todo'] = opt.nsteps
c.parameters['niter_out'] = opt.nsteps
c.parameters['niter_part'] = 1
c.parameters['famplitude'] = 0.2
c.parameters['nparticles'] = opt.nparticles
if c.parameters['nparticles'] > 0:
c.add_particles(kcut = 'fs->kM/2',
integration_steps = 1, neighbours = opt.neighbours, smoothness = opt.smoothness)
c.add_particles(integration_steps = 1, neighbours = opt.neighbours, smoothness = opt.smoothness)
......
......@@ -21,6 +21,12 @@
from test_base import *
import numpy as np
import matplotlib.pyplot as plt
parser.add_argument('--multiplejob',
dest = 'multiplejob', action = 'store_true')
def plain(opt):
wd = opt.work_dir
opt.work_dir = wd + '/N{0:0>3x}_1'.format(opt.n)
......@@ -30,7 +36,7 @@ def plain(opt):
return None
opt.work_dir = wd + '/N{0:0>3x}_2'.format(opt.n)
opt.njobs *= 2
opt.nsteps /= 2
opt.niter_todo /= 2
c1 = launch(opt)
c1.compute_statistics()
# plot energy and enstrophy
......
......@@ -9,7 +9,7 @@ changedir =
{envtmpdir}
commands =
cp -r {toxinidir}/tests {envtmpdir}
python tests/test_plain.py -n 256 --run --initialize --ncpu 8 --nsteps 8 --precision single --wd "data/single"
#python tests/test_plain.py -n 32 --run --initialize --ncpu 2 --nsteps 64 --precision single --wd "data/single"
#python tests/test_plain.py -n 32 --run --initialize --ncpu 2 --nsteps 64 --precision double --wd "data/double"
#python tests/test_plain.py -n 256 --run --initialize --ncpu 8 --niter_todo 8 --precision single --wd "data/single"
python tests/test_plain.py -n 32 --run --initialize --multiplejob --ncpu 2 --nparticles 16 --niter_todo 64 --precision single --wd "data/single"
python tests/test_plain.py -n 32 --run --initialize --multiplejob --ncpu 2 --nparticles 16 --niter_todo 64 --precision double --wd "data/double"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment