From 35e9ad42e7c94552ff9738fcc0fcfca894db4cfd Mon Sep 17 00:00:00 2001 From: dave <dave@dtu.dk> Date: Fri, 22 Apr 2016 19:05:43 +0200 Subject: [PATCH] fixes related to ManTurb64 pbs generator --- wetb/prepost/Simulations.py | 60 ++++++++++++++++++++++--------------- wetb/prepost/dlctemplate.py | 52 +++++++++++++++++++++++--------- wetb/prepost/misc.py | 10 +++++++ 3 files changed, 84 insertions(+), 38 deletions(-) diff --git a/wetb/prepost/Simulations.py b/wetb/prepost/Simulations.py index c93dc79d..0df89406 100755 --- a/wetb/prepost/Simulations.py +++ b/wetb/prepost/Simulations.py @@ -1043,7 +1043,8 @@ def launch(cases, runmethod='local', verbose=False, copyback_turb=True, elif runmethod == 'none': pass else: - msg = 'unsupported runmethod, valid options: local, thyra, gorm or opt' + msg = 'unsupported runmethod, valid options: local, local-script, ' \ + 'linux-script, windows-script, local-ram, none' raise ValueError(msg) def post_launch(cases, save_iter=False, silent=False): @@ -5106,13 +5107,13 @@ class Results(object): return M_x_equiv -class ManTurb64(prepost.prepost.PBSScript): +class ManTurb64(prepost.PBSScript): """ alfaeps, L, gamma, seed, nr_u, nr_v, nr_w, du, dv, dw high_freq_comp mann_turb_x64.exe fname 1.0 29.4 3.0 1209 256 32 32 2.0 5 5 true """ - def __init__(self): + def __init__(self, silent=False): super(ManTurb64, self).__init__() self.exe = 'time wine mann_turb_x64.exe' # PBS configuration @@ -5121,21 +5122,32 @@ class ManTurb64(prepost.prepost.PBSScript): self.queue = 'workq' self.lnodes = '1' self.ppn = '1' + self.silent = silent def gen_pbs(self, cases): case0 = cases[list(cases.keys())[0]] # make sure the path's end with a trailing separator, why?? self.pbsworkdir = os.path.join(case0['[run_dir]'], '') -# pbs.path_pbs_e = os.path.join(case0['[pbs_out_dir]'], '') -# pbs.path_pbs_o = os.path.join(case0['[pbs_out_dir]'], '') -# pbs.path_pbs_i = os.path.join(case0['[pbs_in_dir]'], '') -# pbs.check_dirs() + if not self.silent: + '\nStart creating PBS files for turbulence with Mann64...' for cname, case in cases.items(): - base = case['[Turb base name]'] - self.path_pbs_e = os.path.join(case['[pbs_out_dir]'], base + '.err') - self.path_pbs_o = os.path.join(case['[pbs_out_dir]'], base + '.out') - self.path_pbs_i = os.path.join(case['[pbs_turb_dir]'], base + '.pbs') + + # only relevant for cases with turbulence + if '[tu_model]' in case and int(case['[tu_model]']) == 0: + continue + if '[Turb base name]' not in case: + continue + + base_name = case['[Turb base name]'] + # pbs_in/out dir can contain subdirs, only take the root + out_base = misc.path_split_dirs(case['[pbs_out_dir]'])[0] + in_base = misc.path_split_dirs(case['[pbs_in_dir]'])[0] + turb = case['[turb_dir]'] + + self.path_pbs_e = os.path.join(out_base, turb, base_name + '.err') + self.path_pbs_o = os.path.join(out_base, turb, base_name + '.out') + self.path_pbs_i = os.path.join(in_base, turb, base_name + '.pbs') if case['[turb_db_dir]'] is not None: self.prelude = 'cd %s' % case['[turb_db_dir]'] @@ -5143,19 +5155,19 @@ class ManTurb64(prepost.prepost.PBSScript): self.prelude = 'cd %s' % case['[turb_dir]'] # alfaeps, L, gamma, seed, nr_u, nr_v, nr_w, du, dv, dw high_freq_comp - rpl = (case['[AlfaEpsilon]'], - case['[L_mann]'], - case['[Gamma]'], - case['[tu_seed]'], - case['[turb_nr_u]'], - case['[turb_nr_v]'], - case['[turb_nr_w]'], - case['[turb_dx]'], - case['[turb_dy]'], - case['[turb_dz]']. - case['[high_freq_comp]']) - params = '%1.6f %1.6f %1.6f %i %i %i %i %1.4 %1.4 %1.4f %i' % rpl - self.execution = '%s %s %s' % (self.exe, base, params) + rpl = (float(case['[AlfaEpsilon]']), + float(case['[L_mann]']), + float(case['[Gamma]']), + int(case['[tu_seed]']), + int(case['[turb_nr_u]']), + int(case['[turb_nr_v]']), + int(case['[turb_nr_w]']), + float(case['[turb_dx]']), + float(case['[turb_dy]']), + float(case['[turb_dz]']), + int(case['[high_freq_comp]'])) + params = '%1.6f %1.6f %1.6f %i %i %i %i %1.4f %1.4f %1.4f %i' % rpl + self.execution = '%s %s %s' % (self.exe, base_name, params) self.create(check_dirs=True) diff --git a/wetb/prepost/dlctemplate.py b/wetb/prepost/dlctemplate.py index bf42c8a2..e96f57e1 100755 --- a/wetb/prepost/dlctemplate.py +++ b/wetb/prepost/dlctemplate.py @@ -32,7 +32,11 @@ plt.rc('xtick', labelsize=10) plt.rc('ytick', labelsize=10) plt.rc('axes', labelsize=12) # on Gorm tex printing doesn't work -if not socket.gethostname()[:2] == 'g-': +if socket.gethostname()[:2] == 'g-': + RUNMETHOD = 'gorm' +elif socket.gethostname()[:4] == 'jess': + RUNMETHOD = 'jess' +else: plt.rc('text', usetex=True) plt.rc('legend', fontsize=11) plt.rc('legend', numpoints=1) @@ -109,6 +113,22 @@ def master_tags(sim_id, runmethod='local', silent=False, verbose=False): master.tags['[model_zip]'] = PROJECT master.tags['[model_zip]'] += '_' + master.tags['[sim_id]'] + '.zip' # ------------------------------------------------------------------------- + # FIXME: this is very ugly. We should read default values set in the htc + # master file with the HAWC2Wrapper !! + # default tags turbulence generator (required for 64-bit Mann generator) + # alfaeps, L, gamma, seed, nr_u, nr_v, nr_w, du, dv, dw high_freq_comp + master.tags['[AlfaEpsilon]'] = 1.0 + master.tags['[L_mann]'] = 29.4 + master.tags['[Gamma]'] = 3.0 + master.tags['[tu_seed]'] = 0 + master.tags['[turb_nr_u]'] = 8192 + master.tags['[turb_nr_v]'] = 32 + master.tags['[turb_nr_w]'] = 32 + master.tags['[turb_dx]'] = 1 + master.tags['[turb_dy]'] = 6.5 + master.tags['[turb_dz]'] = 6.5 + master.tags['[high_freq_comp]'] = 1 + # ------------------------------------------------------------------------- return master @@ -162,7 +182,8 @@ def variable_tag_func(master, case_id_short=False): ### PRE- POST # ============================================================================= -def launch_dlcs_excel(sim_id, silent=False): +def launch_dlcs_excel(sim_id, silent=False, verbose=False, pbs_turb=True, + runmethod=None, write_htc=True): """ Launch load cases defined in Excel files """ @@ -195,12 +216,11 @@ def launch_dlcs_excel(sim_id, silent=False): for opt in opt_tags: opt['[zip_root_files]'] = f_ziproot - runmethod = 'gorm' -# runmethod = 'local-script' -# runmethod = 'windows-script' -# runmethod = 'jess' + if runmethod == None: + runmethod = RUNMETHOD + master = master_tags(sim_id, runmethod=runmethod, silent=silent, - verbose=False) + verbose=verbose) master.tags['[sim_id]'] = sim_id master.output_dirs.append('[Case folder]') master.output_dirs.append('[Case id.]') @@ -215,12 +235,16 @@ def launch_dlcs_excel(sim_id, silent=False): # variable_tag func is not required because everything is already done # in dlcdefs.excel_stabcon no_variable_tag_func = None - sim.prepare_launch(iter_dict, opt_tags, master, no_variable_tag_func, - write_htc=True, runmethod=runmethod, verbose=False, - copyback_turb=True, msg='', update_cases=False, - ignore_non_unique=False, run_only_new=False, - pbs_fname_appendix=False, short_job_names=False, - silent=silent) + cases = sim.prepare_launch(iter_dict, opt_tags, master, no_variable_tag_func, + write_htc=write_htc, runmethod=runmethod, + copyback_turb=True, update_cases=False, msg='', + ignore_non_unique=False, run_only_new=False, + pbs_fname_appendix=False, short_job_names=False, + silent=silent, verbose=verbose) + + if pbs_turb: + mann64 = sim.ManTurb64(silent=silent) + mann64.gen_pbs(cases) def launch_param(sim_id): @@ -464,7 +488,7 @@ if __name__ == '__main__': # create HTC files and PBS launch scripts (*.p) if opt.prep: print('Start creating all the htc files and pbs_in files...') - launch_dlcs_excel(sim_id) + launch_dlcs_excel(sim_id, silent=False) # post processing: check log files, calculate statistics if opt.check_logs or opt.stats or opt.fatigue or opt.envelopeblade or opt.envelopeturbine: post_launch(sim_id, check_logs=opt.check_logs, update=False, diff --git a/wetb/prepost/misc.py b/wetb/prepost/misc.py index 0c1ab9b0..73aca125 100644 --- a/wetb/prepost/misc.py +++ b/wetb/prepost/misc.py @@ -68,6 +68,16 @@ class Logger(object): self.logFile.flush() +def path_split_dirs(path): + """ + Return a list with dirnames. Ignore any leading "./" + """ + dirs = path.split(os.path.sep) + if dirs[0] == '.': + dirs.pop(0) + return dirs + + def print_both(f, text, end='\n'): """ Print both to a file and the console -- GitLab