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