From c5074d295840f29091c45f8333ce650ad2a25ccd Mon Sep 17 00:00:00 2001
From: Anne Philipp <anne.philipp@univie.ac.at>
Date: Tue, 9 Oct 2018 22:42:16 +0200
Subject: [PATCH] added making of namelist file and jobscript via genshi
 templates

---
 run/jobscripts/compilejob.ksh                 | 78 -------------------
 source/python/_config.py                      |  3 +-
 source/python/classes/EcFlexpart.py           | 54 +++++++------
 source/python/install.py                      | 77 ++++++------------
 source/python/mods/prepare_flexpart.py        |  2 +-
 source/pythontest/TestData/CONTROL.temp       |  2 +-
 source/pythontest/TestData/compilejob.test    | 24 +++---
 source/pythontest/TestData/convert.nl.test    | 19 +++++
 .../pythontest/TestData/job.temp.test         | 34 ++++----
 source/pythontest/TestEcFlexpart.py           | 35 +++++++--
 source/pythontest/TestInstall.py              | 26 ++++++-
 templates/compilejob.temp                     | 77 ------------------
 templates/compilejob.template                 | 30 +++----
 templates/convert.nl                          | 19 +++++
 templates/{job.temp.o => job.template}        | 41 +++++-----
 15 files changed, 216 insertions(+), 305 deletions(-)
 delete mode 100644 run/jobscripts/compilejob.ksh
 create mode 100644 source/pythontest/TestData/convert.nl.test
 rename templates/job.temp => source/pythontest/TestData/job.temp.test (57%)
 delete mode 100644 templates/compilejob.temp
 create mode 100644 templates/convert.nl
 rename templates/{job.temp.o => job.template} (55%)

diff --git a/run/jobscripts/compilejob.ksh b/run/jobscripts/compilejob.ksh
deleted file mode 100644
index 027c087..0000000
--- a/run/jobscripts/compilejob.ksh
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/ksh
-
-# ON ECGB:
-# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE  on gateway server
-# start with sbatch NAME_OF_THIS_FILE directly on machine
-
-#SBATCH --workdir=/scratch/ms/at/km4a
-#SBATCH --qos=normal
-#SBATCH --job-name=flex_ecmwf
-#SBATCH --output=flex_ecmwf.%j.out
-#SBATCH --error=flex_ecmwf.%j.out
-#SBATCH --mail-type=FAIL
-#SBATCH --time=12:00:00
-
-## CRAY specific batch requests
-##PBS -N flex_ecmwf
-##PBS -q ns
-##PBS -S /usr/bin/ksh
-# -o /scratch/ms/no/sbc/flex_ecmwf.$Jobname.$Job_ID.out
-# job output is in .ecaccess_DO_NOT_REMOVE
-##PBS -j oe
-##PBS -V
-##PBS -l EC_threads_per_task=1
-##PBS -l EC_memory_per_task=3200MB
-
-set -x
-export VERSION=7.1
-case $HOST in
-  *ecg*)
-  module load python
-  module unload grib_api
-  module unload emos
-  module load grib_api/1.14.5
-  module load emos/437-r64
-export FLEXPART_ROOT_SCRIPTS=${HOME}
-export MAKEFILE=Makefile.gfortran
-  ;;
-  *cca*)
-  module switch PrgEnv-cray PrgEnv-intel
-  module load grib_api
-  module load emos
-  module load python
-  echo ${GROUP}
-  echo ${HOME}
-  echo $HOME | awk -F / '{print $1, $2, $3, $4}'
-  export GROUP=`echo $HOME | awk -F / '{print $4}'`
-  export SCRATCH=/scratch/ms/${GROUP}/${USER}
-export FLEXPART_ROOT_SCRIPTS=${HOME}
-export MAKEFILE=Makefile.gfortran
-  ;;
-esac
-
-mkdir -p $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION
-cd $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION   # if FLEXPART_ROOT is not set this means cd to the home directory
-tar -xvf $HOME/flex_extract_v$VERSION.tar
-cd src
-\rm *.o *.mod CONVERT2
-make -f $MAKEFILE >flexcompile 2>flexcompile
-
-ls -l CONVERT2 >>flexcompile
-if [ $? -eq 0 ]; then
-  echo 'SUCCESS!' >>flexcompile
-  mail -s flexcompile.$HOST.$$ $USER <flexcompile
-else
-  echo Environment: >>flexcompile
-  env >> flexcompile
-  mail -s "ERROR! flexcompile.$HOST.$$" $USER <flexcompile
-fi
-
-
-
-
-
-
-
-
-
-
diff --git a/source/python/_config.py b/source/python/_config.py
index 3ce4c73..05f1ecc 100644
--- a/source/python/_config.py
+++ b/source/python/_config.py
@@ -37,10 +37,11 @@ TEMPFILE_USER_ENVVARS = 'ECMWF_ENV.template'
 FILE_USER_ENVVARS = 'ECMWF_ENV'
 TEMPFILE_INSTALL_COMPILEJOB = 'compilejob.template'
 FILE_INSTALL_COMPILEJOB = 'compilejob.ksh'
-TEMPFILE_INSTALL_JOB = 'job.temp.o'
+TEMPFILE_INSTALL_JOB = 'job.template'
 TEMPFILE_JOB = 'job.temp'
 FILE_JOB_OD = 'job.ksh'
 FILE_JOB_OP = 'jopoper.ksh'
+TEMPFILE_NAMELIST = 'convert.nl'
 FILE_NAMELIST = 'fort.4'
 FILE_GRIB_INDEX = 'date_time_stepRange.idx'
 FILE_GRIBTABLE = 'ecmwf_grib1_table_128'
diff --git a/source/python/classes/EcFlexpart.py b/source/python/classes/EcFlexpart.py
index eece37d..b90c8ec 100644
--- a/source/python/classes/EcFlexpart.py
+++ b/source/python/classes/EcFlexpart.py
@@ -657,7 +657,7 @@ class EcFlexpart(object):
         return
 
 
-    def write_namelist(self, c, filename):
+    def write_namelist(self, c):
         '''
         @Description:
             Creates a namelist file in the temporary directory and writes
@@ -682,6 +682,13 @@ class EcFlexpart(object):
             <nothing>
         '''
 
+        from genshi.template.text import NewTextTemplate
+        from genshi.template import  TemplateLoader
+
+        loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False)
+        compile_template = loader.load(_config.TEMPFILE_NAMELIST,
+                                       cls=NewTextTemplate)
+
         self.inputdir = c.inputdir
         area = np.asarray(self.area.split('/')).astype(float)
         grid = np.asarray(self.grid.split('/')).astype(float)
@@ -691,27 +698,30 @@ class EcFlexpart(object):
         maxl = int((area[3] - area[1]) / grid[1]) + 1
         maxb = int((area[0] - area[2]) / grid[0]) + 1
 
-        with open(self.inputdir + '/' + filename, 'w') as f:
-            f.write('&NAMGEN\n')
-            f.write(',\n  '.join(['maxl = ' + str(maxl), 'maxb = ' + str(maxb),
-                                  'mlevel = ' + str(self.level),
-                                  'mlevelist = ' + '"' + str(self.levelist)
-                                                 + '"',
-                                  'mnauf = ' + str(self.resol),
-                                  'metapar = ' + '77',
-                                  'rlo0 = ' + str(area[1]),
-                                  'rlo1 = ' + str(area[3]),
-                                  'rla0 = ' + str(area[2]),
-                                  'rla1 = ' + str(area[0]),
-                                  'momega = ' + str(c.omega),
-                                  'momegadiff = ' + str(c.omegadiff),
-                                  'mgauss = ' + str(c.gauss),
-                                  'msmooth = ' + str(c.smooth),
-                                  'meta = ' + str(c.eta),
-                                  'metadiff = ' + str(c.etadiff),
-                                  'mdpdeta = ' + str(c.dpdeta)]))
-
-            f.write('\n/\n')
+        stream = compile_template.generate(
+            maxl = str(maxl),
+            maxb = str(maxb),
+            mlevel = str(self.level),
+            mlevelist = str(self.levelist),
+            mnauf = str(self.resol),
+            metapar = '77',
+            rlo0 = str(area[1]),
+            rlo1 = str(area[3]),
+            rla0 = str(area[2]),
+            rla1 = str(area[0]),
+            momega = str(c.omega),
+            momegadiff = str(c.omegadiff),
+            mgauss = str(c.gauss),
+            msmooth = str(c.smooth),
+            meta = str(c.eta),
+            metadiff = str(c.etadiff),
+            mdpdeta = str(c.dpdeta)
+        )
+
+        namelistfile = os.path.join(self.inputdir, _config.FILE_NAMELIST)
+
+        with open(namelistfile, 'w') as f:
+            f.write(stream.render('text'))
 
         return
 
diff --git a/source/python/install.py b/source/python/install.py
index b624592..cbef571 100755
--- a/source/python/install.py
+++ b/source/python/install.py
@@ -395,8 +395,8 @@ def mk_compilejob(makefile, target, ecuid, ecgid, fp_root):
         fp_root = '$HOME'
 
     stream = compile_template.generate(
-        username = ecuid,
         usergroup = ecgid,
+        username = ecuid,
         version_number = _config._VERSION_STR,
         fp_root_scripts = fp_root,
         makefile = makefile,
@@ -409,36 +409,6 @@ def mk_compilejob(makefile, target, ecuid, ecgid, fp_root):
     with open(compilejob, 'w') as f:
         f.write(stream.render('text'))
 
-
-    # template = os.path.join(_config.PATH_REL_TEMPLATES,
-                            # _config.TEMPFILE_INSTALL_COMPILEJOB)
-    # with open(template) as f:
-        # fdata = f.read().split('\n')
-
-
-    # with open(compilejob, 'w') as fo:
-        # for data in fdata:
-            # if 'MAKEFILE=' in data:
-                # data = 'export MAKEFILE=' + makefile
-            # elif 'FLEXPART_ROOT_SCRIPTS=' in data:
-                # if fp_root != '../':
-                    # data = 'export FLEXPART_ROOT_SCRIPTS=' + fp_root
-                # else:
-                    # data = 'export FLEXPART_ROOT_SCRIPTS=$HOME'
-            # elif target.lower() != 'local':
-                # if '--workdir' in data:
-                    # data = '#SBATCH --workdir=/scratch/ms/' + \
-                            # ecgid + '/' + ecuid
-                # elif '##PBS -o' in data:
-                    # data = '##PBS -o /scratch/ms/' + ecgid + '/' + ecuid + \
-                           # 'flex_ecmwf.$Jobname.$Job_ID.out'
-                # elif 'FLEXPART_ROOT_SCRIPTS=' in data:
-                    # if fp_root != '../':
-                        # data = 'export FLEXPART_ROOT_SCRIPTS=' + fp_root
-                    # else:
-                        # data = 'export FLEXPART_ROOT_SCRIPTS=$HOME'
-            # fo.write(data + '\n')
-
     return
 
 def mk_job_template(ecuid, ecgid, gateway, destination, fp_root):
@@ -469,27 +439,30 @@ def mk_job_template(ecuid, ecgid, gateway, destination, fp_root):
     @Return:
         <nothing>
     '''
-    fp_root_path_to_python = os.path.join(fp_root, _config.FLEXEXTRACT_DIRNAME,
-                         _config.PATH_REL_PYTHON)
-
-    template = os.path.join(_config.PATH_REL_TEMPLATES,
-                            _config.TEMPFILE_INSTALL_JOB)
-    with open(template) as f:
-        fdata = f.read().split('\n')
-
-    jobfile_temp = os.path.join(_config.PATH_REL_TEMPLATES,
-                                _config.TEMPFILE_JOB)
-    with open(jobfile_temp, 'w') as fo:
-        for data in fdata:
-            if '--workdir' in data:
-                data = '#SBATCH --workdir=/scratch/ms/' + ecgid + '/' + ecuid
-            elif '##PBS -o' in data:
-                data = '##PBS -o /scratch/ms/' + ecgid + '/' + \
-                        ecuid + 'flex_ecmwf.$Jobname.$Job_ID.out'
-            elif  'export PATH=${PATH}:' in data:
-                data += fp_root_path_to_python
-
-            fo.write(data + '\n')
+    from genshi.template.text import NewTextTemplate
+    from genshi.template import  TemplateLoader
+
+    loader = TemplateLoader(_config.PATH_TEMPLATES, auto_reload=False)
+    compile_template = loader.load(_config.TEMPFILE_INSTALL_JOB,
+                                   cls=NewTextTemplate)
+
+    fp_root_path_to_python = os.path.join(fp_root,
+                                          _config.FLEXEXTRACT_DIRNAME,
+                                          _config.PATH_REL_PYTHON)
+
+    stream = compile_template.generate(
+        usergroup = ecgid,
+        username = ecuid,
+        version_number = _config._VERSION_STR,
+        fp_root_path = fp_root_path_to_python,
+    )
+
+    tempjobfile = os.path.join(_config.PATH_TEMPLATES,
+                               _config.TEMPFILE_JOB)
+
+    with open(tempjobfile, 'w') as f:
+        f.write(stream.render('text'))
+
     return
 
 def delete_convert_build(src_path):
diff --git a/source/python/mods/prepare_flexpart.py b/source/python/mods/prepare_flexpart.py
index a3ca22b..c45c32f 100755
--- a/source/python/mods/prepare_flexpart.py
+++ b/source/python/mods/prepare_flexpart.py
@@ -159,7 +159,7 @@ def prepare_flexpart(ppid, c):
 
     # deaccumulate the flux data
     flexpart = EcFlexpart(c, fluxes=True)
-    flexpart.write_namelist(c, _config.FILE_NAMELIST)
+    flexpart.write_namelist(c)
     flexpart.deacc_fluxes(inputfiles, c)
 
     # get a list of all files from the root inputdir
diff --git a/source/pythontest/TestData/CONTROL.temp b/source/pythontest/TestData/CONTROL.temp
index c3d0974..d5f4137 100644
--- a/source/pythontest/TestData/CONTROL.temp
+++ b/source/pythontest/TestData/CONTROL.temp
@@ -8,7 +8,7 @@ CLASS EI
 STREAM OPER
 NUMBER OFF
 EXPVER 1
-GRID 5000  
+GRID 1000  
 LEFT -15000
 LOWER 30000
 UPPER 75000
diff --git a/source/pythontest/TestData/compilejob.test b/source/pythontest/TestData/compilejob.test
index 8ae61bf..9f9a5a1 100644
--- a/source/pythontest/TestData/compilejob.test
+++ b/source/pythontest/TestData/compilejob.test
@@ -16,7 +16,7 @@
 ##PBS -N flex_ecmwf
 ##PBS -q ns
 ##PBS -S /usr/bin/ksh
-##PBS -o /scratch/ms/testgroup/testuser/flex_ecmwf.$Jobname.$Job_ID.out
+##PBS -o /scratch/ms/testgroup/testuser/flex_ecmwf.${Jobname}.${Job_ID}.out
 # job output is in .ecaccess_DO_NOT_REMOVE
 ##PBS -j oe
 ##PBS -V
@@ -25,7 +25,7 @@
 
 set -x
 export VERSION=7.1
-case $HOST in
+case ${HOST} in
   *ecg*)
   module load python
   module unload grib_api
@@ -42,27 +42,27 @@ case $HOST in
   module load python
   echo ${GROUP}
   echo ${HOME}
-  echo $HOME | awk -F / '{print $1, $2, $3, $4}'
-  export GROUP=`echo $HOME | awk -F / '{print $4}'`
+  echo ${HOME} | awk -F / '{print $1, $2, $3, $4}'
+  export GROUP=`echo ${HOME} | awk -F / '{print $4}'`
   export SCRATCH=/scratch/ms/${GROUP}/${USER}
-  export FLEXPART_ROOT_SCRIPTS=p_root_test_path
+  export FLEXPART_ROOT_SCRIPTS=fp_root_test_path
   export MAKEFILE=Makefile.TEST
   ;;
 esac
 
-mkdir -p $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION
-cd $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION   # if FLEXPART_ROOT is not set this means cd to the home directory
-tar -xvf $HOME/flex_extract_v$VERSION.tar
+mkdir -p ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION}
+cd ${FLEXPART_ROOT_SCRIPTS}/flex_extract_v${VERSION}   # if FLEXPART_ROOT is not set this means cd to the home directory
+tar -xvf ${HOME}/flex_extract_v${VERSION}.tar
 cd src
 \rm *.o *.mod CONVERT2 
-make -f $MAKEFILE >flexcompile 2>flexcompile
+make -f ${MAKEFILE} >flexcompile 2>flexcompile
 
 ls -l CONVERT2 >>flexcompile
 if [ $? -eq 0 ]; then
   echo 'SUCCESS!' >>flexcompile
-  mail -s flexcompile.$HOST.$$ $USER <flexcompile
+  mail -s flexcompile.${HOST}.$$ ${USER} <flexcompile
 else
   echo Environment: >>flexcompile
   env >> flexcompile
-  mail -s "ERROR! flexcompile.$HOST.$$" $USER <flexcompile
-fi
\ No newline at end of file
+  mail -s "ERROR! flexcompile.${HOST}.$$" ${USER} <flexcompile
+fi
diff --git a/source/pythontest/TestData/convert.nl.test b/source/pythontest/TestData/convert.nl.test
new file mode 100644
index 0000000..6134989
--- /dev/null
+++ b/source/pythontest/TestData/convert.nl.test
@@ -0,0 +1,19 @@
+&NAMGEN
+  maxl = 61,
+  maxb = 46,
+  mlevel = 60,
+  mlevelist = "55/to/60",
+  mnauf = 63,
+  metapar = 77,
+  rlo0 = -15.0,
+  rlo1 = 45.0,
+  rla0 = 30.0,
+  rla1 = 75.0,
+  momega = 0,
+  momegadiff = 0,
+  mgauss = 1,
+  msmooth = 0,
+  meta = 0,
+  metadiff = 0,
+  mdpdeta = 1
+/
diff --git a/templates/job.temp b/source/pythontest/TestData/job.temp.test
similarity index 57%
rename from templates/job.temp
rename to source/pythontest/TestData/job.temp.test
index 43becc4..4103775 100644
--- a/templates/job.temp
+++ b/source/pythontest/TestData/job.temp.test
@@ -4,7 +4,7 @@
 # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE  on gateway server
 # start with sbatch NAME_OF_THIS_FILE directly on machine
 
-#SBATCH --workdir=/scratch/ms/at/km4a
+#SBATCH --workdir=/scratch/ms/testgroup/testuser
 #SBATCH --qos=normal
 #SBATCH --job-name=flex_ecmwf
 #SBATCH --output=flex_ecmwf.%j.out
@@ -16,7 +16,7 @@
 ##PBS -N flex_ecmwf
 ##PBS -q np
 ##PBS -S /usr/bin/ksh
-## -o /scratch/ms/spatlh00/lh0/flex_ecmwf.$PBS_JOBID.out
+## -o /scratch/ms/testgroup/testuser/flex_ecmwf.${PBS_JOBID}.out
 ## job output is in .ecaccess_DO_NOT_REMOVE
 ##PBS -j oe
 ##PBS -V
@@ -25,52 +25,52 @@
 
 set -x
 export VERSION=7.1
-case $HOST in
+case ${HOST} in
   *ecg*)
   module load python
   module unload grib_api
   module unload emos
   module load grib_api/1.14.5
   module load emos/437-r64
-  export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python
+  export PATH=${PATH}:fp_root_test_path/flex_extract_v7.1/source/python
   ;;
   *cca*)
   module switch PrgEnv-cray PrgEnv-intel
   module load grib_api
   module load emos
   module load python
-  export SCRATCH=$TMPDIR
-  export PATH=${PATH}:${HOME}/flex_extract_v7.1/source/python
+  export SCRATCH=${TMPDIR}
+  export PATH=${PATH}:fp_root_test_path/flex_extract_v7.1/source/python
   ;;
 esac
 
-cd $SCRATCH
+cd ${SCRATCH}
 mkdir -p python$$
 cd python$$
 
 export CONTROL=CONTROL
 
-cat >$CONTROL<<EOF
+cat >${CONTROL}<<EOF
 EOF
 
 
-submit.py --controlfile=$CONTROL --inputdir=./work --outputdir=./work 1> prot 2>&1
+submit.py --controlfile=${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1
 
 if [ $? -eq 0 ] ; then
   l=0
-  for muser in `grep -i MAILOPS $CONTROL`; do
-      if [ $l -gt 0 ] ; then 
-         mail -s flex.${HOST}.$$ $muser <prot
+  for muser in `grep -i MAILOPS ${CONTROL}`; do
+      if [ ${l} -gt 0 ] ; then 
+         mail -s flex.${HOST}.$$ ${muser} <prot
       fi
-      l=$(($l+1))
+      l=$((${l}+1))
   done
 else
   l=0
-  for muser in `grep -i MAILFAIL $CONTROL`; do
-      if [ $l -gt 0 ] ; then 
-         mail -s "ERROR! flex.${HOST}.$$" $muser <prot
+  for muser in `grep -i MAILFAIL ${CONTROL}`; do
+      if [ ${l} -gt 0 ] ; then 
+         mail -s "ERROR! flex.${HOST}.$$" ${muser} <prot
       fi
-      l=$(($l+1))
+      l=$((${l}+1))
   done
 fi
 
diff --git a/source/pythontest/TestEcFlexpart.py b/source/pythontest/TestEcFlexpart.py
index e1b7a9c..49f5161 100644
--- a/source/pythontest/TestEcFlexpart.py
+++ b/source/pythontest/TestEcFlexpart.py
@@ -3,23 +3,44 @@
 
 
 import sys
+import os
+import inspect
 import pytest
 
 sys.path.append('../python')
+import _config
 from classes.EcFlexpart import EcFlexpart
+from classes.ControlFile import ControlFile
+from mods.tools import silent_remove
 
 class TestEcFlexpart():
     '''
     '''
 
-    def test_init(self):
-        # create an instance of EcFlexpart and get a dictionary of the
-        # class attributes, compare this dict with an expected dict!
-        assert True == True
-
     def test_write_namelist(self):
-        # simple
-        assert True == True
+        import filecmp
+
+        control_file = os.path.join(_config.PATH_TEST_DIR,
+                                        'TestData',
+                                        'CONTROL.temp')
+        c = ControlFile(control_file)
+        flexpart = EcFlexpart(c)
+
+        c.inputdir = 'TestData'
+
+        # comparison file
+        testfile = os.path.join(_config.PATH_TEST_DIR,
+                                'TestData',
+                                'convert.nl.test')
+
+        # create
+        flexpart.write_namelist(c)
+
+        finalfile = os.path.join(c.inputdir, _config.FILE_NAMELIST)
+        assert filecmp.cmp(testfile, finalfile, shallow=False)
+
+        # delete test file
+        silent_remove(finalfile)
 
     def test_retrieve(self):
         # not sure how to check
diff --git a/source/pythontest/TestInstall.py b/source/pythontest/TestInstall.py
index ddb3b2d..c6995d2 100644
--- a/source/pythontest/TestInstall.py
+++ b/source/pythontest/TestInstall.py
@@ -24,8 +24,8 @@ class TestTools():
     #!    - mk_tarball
     #!    - un_tarball
     #!    - mk_env_vars
-    #    - mk_compilejob
-    #    - mk_job_template
+    #!    - mk_compilejob
+    #!    - mk_job_template
     #    - delete_convert_build
     #    - make_convert_build
 
@@ -154,3 +154,25 @@ class TestTools():
 
         # delete test file
         silent_remove(finalfile)
+
+    def test_mk_job_template(self):
+        import filecmp
+
+        # comparison file
+        testfile = os.path.join(_config.PATH_TEST_DIR,
+                                'TestData',
+                                'job.temp.test')
+
+        # create
+        install.mk_job_template('testuser',
+                                'testgroup',
+                                'gateway.test.ac.at',
+                                'dest@generic',
+                                'fp_root_test_path')
+
+        finalfile = os.path.join(_config.PATH_TEMPLATES,
+                                 _config.TEMPFILE_JOB)
+        assert filecmp.cmp(testfile, finalfile, shallow=False)
+
+        # delete test file
+        silent_remove(finalfile)
\ No newline at end of file
diff --git a/templates/compilejob.temp b/templates/compilejob.temp
deleted file mode 100644
index 715308b..0000000
--- a/templates/compilejob.temp
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/ksh
-
-# ON ECGB:
-# start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE  on gateway server
-# start with sbatch NAME_OF_THIS_FILE directly on machine
-
-#SBATCH --workdir=/scratch/ms/spatlh00/lh0
-#SBATCH --qos=normal
-#SBATCH --job-name=flex_ecmwf
-#SBATCH --output=flex_ecmwf.%j.out
-#SBATCH --error=flex_ecmwf.%j.out
-#SBATCH --mail-type=FAIL
-#SBATCH --time=12:00:00
-
-## CRAY specific batch requests
-##PBS -N flex_ecmwf
-##PBS -q ns
-##PBS -S /usr/bin/ksh
-# -o /scratch/ms/no/sbc/flex_ecmwf.$Jobname.$Job_ID.out
-# job output is in .ecaccess_DO_NOT_REMOVE
-##PBS -j oe
-##PBS -V
-##PBS -l EC_threads_per_task=1
-##PBS -l EC_memory_per_task=3200MB
-
-set -x
-export VERSION=7.1
-case $HOST in
-  *ecg*)
-  module load python
-  module unload grib_api
-  module unload emos
-  module load grib_api/1.14.5
-  module load emos/437-r64
-  export FLEXPART_ROOT_SCRIPTS=
-  export MAKEFILE=Makefile.gfortran
-  ;;
-  *cca*)
-  module switch PrgEnv-cray PrgEnv-intel
-  module load grib_api
-  module load emos
-  module load python
-  echo ${GROUP}
-  echo ${HOME}
-  echo $HOME | awk -F / '{print $1, $2, $3, $4}'
-  export GROUP=`echo $HOME | awk -F / '{print $4}'`
-  export SCRATCH=/scratch/ms/${GROUP}/${USER}
-  export FLEXPART_ROOT_SCRIPTS=
-  export MAKEFILE=Makefile.CRAY
-  ;;
-esac
-
-mkdir -p $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION
-cd $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION   # if FLEXPART_ROOT is not set this means cd to the home directory
-tar -xvf $HOME/flex_extract_v$VERSION.tar
-cd src
-\rm *.o *.mod CONVERT2
-make -f $MAKEFILE >flexcompile 2>flexcompile
-
-ls -l CONVERT2 >>flexcompile
-if [ $? -eq 0 ]; then
-  echo 'SUCCESS!' >>flexcompile
-  mail -s flexcompile.$HOST.$$ $USER <flexcompile
-else
-  echo Environment: >>flexcompile
-  env >> flexcompile
-  mail -s "ERROR! flexcompile.$HOST.$$" $USER <flexcompile
-fi
-
-
-
-
-
-
-
-
-
diff --git a/templates/compilejob.template b/templates/compilejob.template
index bb1348e..e75a9aa 100644
--- a/templates/compilejob.template
+++ b/templates/compilejob.template
@@ -16,7 +16,7 @@
 ##PBS -N flex_ecmwf
 ##PBS -q ns
 ##PBS -S /usr/bin/ksh
-##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$Jobname.$Job_ID.out
+##PBS -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${Jobname}.$${Job_ID}.out
 # job output is in .ecaccess_DO_NOT_REMOVE
 ##PBS -j oe
 ##PBS -V
@@ -25,7 +25,7 @@
 
 set -x
 export VERSION=$version_number
-case $HOST in
+case $${HOST} in
   *ecg*)
   module load python
   module unload grib_api
@@ -40,29 +40,29 @@ case $HOST in
   module load grib_api
   module load emos
   module load python
-  echo ${GROUP}
-  echo ${HOME}
-  echo $HOME | awk -F / '{print $1, $2, $3, $4}'
-  export GROUP=`echo $HOME | awk -F / '{print $4}'`
-  export SCRATCH=/scratch/ms/${GROUP}/${USER}
+  echo $${GROUP}
+  echo $${HOME}
+  echo $${HOME} | awk -F / '{print $1, $2, $3, $4}'
+  export GROUP=`echo $${HOME} | awk -F / '{print $4}'`
+  export SCRATCH=/scratch/ms/$${GROUP}/$${USER}
   export FLEXPART_ROOT_SCRIPTS=$fp_root_scripts
   export MAKEFILE=$makefile
   ;;
 esac
 
-mkdir -p $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION
-cd $FLEXPART_ROOT_SCRIPTS/flex_extract_v$VERSION   # if FLEXPART_ROOT is not set this means cd to the home directory
-tar -xvf $HOME/flex_extract_v$VERSION.tar
+mkdir -p $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION}
+cd $${FLEXPART_ROOT_SCRIPTS}/flex_extract_v$${VERSION}   # if FLEXPART_ROOT is not set this means cd to the home directory
+tar -xvf $${HOME}/flex_extract_v$${VERSION}.tar
 cd src
 \rm *.o *.mod $fortran_program 
-make -f $MAKEFILE >flexcompile 2>flexcompile
+make -f $${MAKEFILE} >flexcompile 2>flexcompile
 
 ls -l $fortran_program >>flexcompile
-if [ $? -eq 0 ]; then
+if [ $$? -eq 0 ]; then
   echo 'SUCCESS!' >>flexcompile
-  mail -s flexcompile.$HOST.$$ $USER <flexcompile
+  mail -s flexcompile.$${HOST}.$$$$ $${USER} <flexcompile
 else
   echo Environment: >>flexcompile
   env >> flexcompile
-  mail -s "ERROR! flexcompile.$HOST.$$" $USER <flexcompile
-fi
\ No newline at end of file
+  mail -s "ERROR! flexcompile.$${HOST}.$$$$" $${USER} <flexcompile
+fi
diff --git a/templates/convert.nl b/templates/convert.nl
new file mode 100644
index 0000000..c0c8fa4
--- /dev/null
+++ b/templates/convert.nl
@@ -0,0 +1,19 @@
+&NAMGEN
+  maxl = $maxl,
+  maxb = $maxb,
+  mlevel = $mlevel,
+  mlevelist = "$mlevelist",
+  mnauf = $mnauf,
+  metapar = $metapar,
+  rlo0 = $rlo0,
+  rlo1 = $rlo1,
+  rla0 = $rla0,
+  rla1 = $rla1,
+  momega = $momega,
+  momegadiff = $momegadiff,
+  mgauss = $mgauss,
+  msmooth = $msmooth,
+  meta = $meta,
+  metadiff = $metadiff,
+  mdpdeta = $mdpdeta
+/
diff --git a/templates/job.temp.o b/templates/job.template
similarity index 55%
rename from templates/job.temp.o
rename to templates/job.template
index fbdbd81..16e016e 100644
--- a/templates/job.temp.o
+++ b/templates/job.template
@@ -4,7 +4,7 @@
 # start with ecaccess-job-submit -queueName ecgb NAME_OF_THIS_FILE  on gateway server
 # start with sbatch NAME_OF_THIS_FILE directly on machine
 
-#SBATCH --workdir=/scratch/ms/spatlh00/lh0
+#SBATCH --workdir=/scratch/ms/$usergroup/$username
 #SBATCH --qos=normal
 #SBATCH --job-name=flex_ecmwf
 #SBATCH --output=flex_ecmwf.%j.out
@@ -16,7 +16,7 @@
 ##PBS -N flex_ecmwf
 ##PBS -q np
 ##PBS -S /usr/bin/ksh
-## -o /scratch/ms/spatlh00/lh0/flex_ecmwf.$PBS_JOBID.out
+## -o /scratch/ms/$usergroup/$username/flex_ecmwf.$${PBS_JOBID}.out
 ## job output is in .ecaccess_DO_NOT_REMOVE
 ##PBS -j oe
 ##PBS -V
@@ -24,52 +24,53 @@
 ##PBS -l EC_memory_per_task=32000MB
 
 set -x
-export VERSION=7.1
-case $HOST in
+export VERSION=$version_number
+case $${HOST} in
   *ecg*)
   module load python
   module unload grib_api
   module unload emos
   module load grib_api/1.14.5
   module load emos/437-r64
-  export PATH=${PATH}:
+  export PATH=$${PATH}:$fp_root_path
   ;;
   *cca*)
   module switch PrgEnv-cray PrgEnv-intel
   module load grib_api
   module load emos
   module load python
-  export SCRATCH=$TMPDIR
-  export PATH=${PATH}:
+  export SCRATCH=$${TMPDIR}
+  export PATH=$${PATH}:$fp_root_path
   ;;
 esac
 
-cd $SCRATCH
-mkdir -p python$$
-cd python$$
+cd $${SCRATCH}
+mkdir -p python$$$$
+cd python$$$$
 
 export CONTROL=CONTROL
 
-cat >$CONTROL<<EOF
+cat >$${CONTROL}<<EOF
 EOF
 
 
-submit.py --controlfile=$CONTROL --inputdir=./work --outputdir=./work 1> prot 2>&1
+submit.py --controlfile=$${CONTROL} --inputdir=./work --outputdir=./work 1> prot 2>&1
 
 if [ $? -eq 0 ] ; then
   l=0
-  for muser in `grep -i MAILOPS $CONTROL`; do
-      if [ $l -gt 0 ] ; then 
-         mail -s flex.${HOST}.$$ $muser <prot
+  for muser in `grep -i MAILOPS $${CONTROL}`; do
+      if [ $${l} -gt 0 ] ; then 
+         mail -s flex.$${HOST}.$$$$ $${muser} <prot
       fi
-      l=$(($l+1))
+      l=$(($${l}+1))
   done
 else
   l=0
-  for muser in `grep -i MAILFAIL $CONTROL`; do
-      if [ $l -gt 0 ] ; then 
-         mail -s "ERROR! flex.${HOST}.$$" $muser <prot
+  for muser in `grep -i MAILFAIL $${CONTROL}`; do
+      if [ $${l} -gt 0 ] ; then 
+         mail -s "ERROR! flex.$${HOST}.$$$$" $${muser} <prot
       fi
-      l=$(($l+1))
+      l=$(($${l}+1))
   done
 fi
+
-- 
GitLab