diff --git a/README.txt b/README.txt index aa46fa125a81716e4089ec1f22e34cc3a9f79ea9..655e2d0dae56a2a50fc4a1e2ddf70d9bde9398e9 100644 --- a/README.txt +++ b/README.txt @@ -11,9 +11,14 @@ mkexp up directories, prepare input data, define configurations, and launch the actual model run and processing. -expdiff +diffexp is a tool that - given two mkexp configuration files - will compare the generated scripts with either the standard diff program or any equivalent tool, taking care of differences by experiment names etc. It is complemented - by expdiff_path which does the same kind of diff but takes its information - from the command line instead. + by diffpath which does the same kind of diff but takes its information from + the command line instead. + +rmexp, getexp + More tools to remove experiment data, or get experiment info in + shell-readable form. + diff --git a/diffexp b/diffexp new file mode 100755 index 0000000000000000000000000000000000000000..92360e1d4109fb3a13f8a75978a5dd17e1a2302d --- /dev/null +++ b/diffexp @@ -0,0 +1,29 @@ +#! /bin/sh +# +# Compare experiment setups trying to identify file pairs. +# + +PROGRAM=`basename $0` +BINDIR=`dirname $0` +PATH="$BINDIR:$PATH" + +die () { + echo "$@" >&2 + exit 1 +} + +[ "x$2" = x ] && die "Oops: invalid number of parameters +Usage: $PROGRAM config_a config_b" + +CONFIG_A=$1 +CONFIG_B=$2 + +eval `getexp "$CONFIG_A" || echo \; exit $?` +EXP_A=$EXP_ID +PATH_A=$SCRIPT_DIR + +eval `getexp "$CONFIG_B" || echo \; exit $?` +EXP_B=$EXP_ID +PATH_B=$SCRIPT_DIR + +exec diffpath "$EXP_A" "$EXP_B" "$PATH_A" "$PATH_B" diff --git a/diffpath b/diffpath new file mode 100755 index 0000000000000000000000000000000000000000..8d4972b48a59d6d9f7b4a6bba0b8c8044a81684e --- /dev/null +++ b/diffpath @@ -0,0 +1,62 @@ +#! /bin/sh +# +# Compare experiment setups trying to identify file pairs. +# + +PROGRAM=`basename $0` + +die () { + echo "$@" >&2 + exit 1 +} + +DIFF=${DIFF:-diff} + +diff_exp_files () ( + exp_a=$1 + exp_b=$2 + file_a=$3 + file_b=$4 + if [ -e "$file_b" ] + then + trap 'rm -f $temp_b' 0 + temp_b=`mktemp` + if [ -r "$file_b" ] + then + sed "s,$exp_b,$exp_a,g" "$file_b" > $temp_b + else + chmod 0000 $temp_b + fi + else + temp_b=$file_b + fi + $DIFF --label "$file_a" --label "$file_b" "$file_a" "$temp_b" +) + +[ "x$3" = x ] && die "Oops: invalid number of parameters +Usage: $PROGRAM experiment_id_a experiment_id_b path_to_a [path_to_b]" + +EXP_A=$1 +EXP_B=$2 +PATH_A=$3 +# If path to b is not set or empty, use path to a as template +PATH_B=${4:-`echo "$PATH_A" | sed "s,$EXP_A,$EXP_B,g"`} + +trap 'rm -r $DIFF_FILE' 0 +DIFF_FILE=`mktemp` + +for FILE_A in $( + { + (cd "$PATH_A" && find . ! -type d ! -name '*.log') + (cd "$PATH_B" && find . ! -type d ! -name '*.log' | sed "s,$EXP_B,$EXP_A,g") + } | sed 's,^\./,,' | sort -u +) +do + FILE_B=`echo "$FILE_A" | sed "s,$EXP_A,$EXP_B,g"` + diff_exp_files "$EXP_A" "$EXP_B" "$PATH_A/$FILE_A" "$PATH_B/$FILE_B" > $DIFF_FILE || + STATUS=1 + sed "1i Index: $FILE_A\n\ +===================================================================" $DIFF_FILE +done + +exit $STATUS diff --git a/examples/old_input_data.config b/examples/old_input_data.config index 16210bcb4ff0c287c1def5b8ee87d3137b915ec2..2e21bebcb274c8518f449a0a9c95e3f49053bd3c 100644 --- a/examples/old_input_data.config +++ b/examples/old_input_data.config @@ -8,9 +8,7 @@ EXP_TYPE = amip-LR QUEUE_TYPE = blizzard ACCOUNT = xy9999 -model = prj/issues/02114/echam-dev - -MODEL_ROOT = $HOME/$model -DATA_ROOT = $SCRATCH/$model # SCRATCH is defined by blizzard login scripts +MODEL_SUBDIR = prj/issues/02114/echam-dev INITIAL_DATA = /pool/data/ECHAM6/input/r0001 + diff --git a/examples/reference.config b/examples/reference.config index 05421c587ca48b0502b44df2de8f26267a757a88..8e2eec524c64ad13e8da0a25daef8626bd30f990 100644 --- a/examples/reference.config +++ b/examples/reference.config @@ -8,7 +8,5 @@ EXP_TYPE = amip-LR QUEUE_TYPE = blizzard ACCOUNT = xy9999 -model = prj/issues/02114/echam-dev +MODEL_SUBDIR = prj/issues/02114/echam-dev -MODEL_ROOT = $HOME/$model -DATA_ROOT = $SCRATCH/$model # SCRATCH is defined by blizzard login scripts diff --git a/expconfig.py b/expconfig.py new file mode 100644 index 0000000000000000000000000000000000000000..1f3e06d3c3759a643d76ed8a082f1a50ad215024 --- /dev/null +++ b/expconfig.py @@ -0,0 +1,119 @@ +# +# Generate an earth system model configuration from the given configuration file. +# +# $Id$ +# + +import os +import re +import StringIO + +from configobj import ConfigObj, InterpolationError + +import feedback + +class ExpConfigError(InterpolationError): + def __init__(self, message, key): + InterpolationError.__init__(self, + "{0} while reading key '{1}'".format(message[:-1], key)) + +class ExpConfig(ConfigObj): + '''Read and store configuration info from input and experiments' library + + Store environment as default for control settings, then add config from files + ''' + + # + # Basic settings + # + + exp_lib_dir = 'standard_experiments' + default_name = 'DEFAULT' + + # Config post-processing + + + # Class constructor + + def __init__(self, experiment_config_name): + '''Read experiment config to get basic settings + + TODO: probably nicer if default experiment is given as argument + ''' + + def split_jobs(config): + '''Post-process job definition to allow for shared configs as [[job1, job2]]''' + if 'jobs' in config: + sep = re.compile(r'\s*,\s') + for subjobs, subconfig in config['jobs'].iteritems(): + if re.search(sep, subjobs): + for subjob in re.split(sep, subjobs): + if subjob in config['jobs']: + config['jobs'][subjob].merge(subconfig.dict()) + else: + config['jobs'][subjob] = subconfig.dict() + del config['jobs'][subjobs] + + pre_config = ConfigObj(experiment_config_name, interpolation=False) + + self.experiment_id = pre_config['EXP_ID'] + experiment_type = pre_config['EXP_TYPE'] + self.experiment_kind = re.sub(r'-\wR$', '', experiment_type) + + pre_config = None + + # Start from empty configuration + pre_config = ConfigObj(interpolation=False) + config_versions = [] + + # Read Environment + pre_config.merge({'DEFAULT': dict(os.environ)}) + + # Read settings from library (general default and experiment type specific) + + lib_config_name = os.path.join(ExpConfig.exp_lib_dir, + ExpConfig.default_name+'.config') + pre_config.merge(ConfigObj(lib_config_name, interpolation=False)) + split_jobs(pre_config) + config_versions.append(pre_config['VERSION_']) + del pre_config['VERSION_'] + + lib_config_name = os.path.join(ExpConfig.exp_lib_dir, + experiment_type+'.config') + if os.path.exists(lib_config_name): + pre_config.merge(ConfigObj(lib_config_name, interpolation=False)) + split_jobs(pre_config) + config_versions.append(pre_config['VERSION_']) + del pre_config['VERSION_'] + else: + feedback.warning("cannot find config for '%s', using default only", + experiment_type) + + # Re-read config to allow overriding default settings + # TODO: probably nicer if default experiment is given as argument + pre_config.merge(ConfigObj(experiment_config_name, interpolation=False)) + split_jobs(pre_config) + + # Add complete versioning info + pre_config['VERSIONS_'] = ', '.join(config_versions) + + # Re-read merged config with interpolation set + # This works around incomprehensible inheritance of interpolation with merge + # Then make sure that all values are interpolated + + config_lines = StringIO.StringIO() + + pre_config.write(config_lines) + pre_config = None + + config_lines.seek(0) + ConfigObj.__init__(self, config_lines, interpolation='template') + + def eval_key(section, key): + try: + section[key] = section[key] + except InterpolationError as error: + raise ExpConfigError(error.message, key) + + self.walk(eval_key) + diff --git a/feedback.py b/feedback.py new file mode 100644 index 0000000000000000000000000000000000000000..ae453b2343aa5ef4595f112030df3bbbf7f54939 --- /dev/null +++ b/feedback.py @@ -0,0 +1,19 @@ +'''Frontend for using logging module as terminal feedback facility''' + +import logging +import sys + +logging.basicConfig(format='%(levelname)s: %(message)s') +logging.addLevelName(logging.INFO, 'Note') +logging.addLevelName(logging.WARNING, 'Hey') +logging.addLevelName(logging.ERROR, 'Oops') +logging.addLevelName(logging.CRITICAL, 'Sorry') + +info = logging.info +warning = logging.warning +error = logging.error +critical = logging.critical + +def die(message): + error(message) + sys.exit(1) diff --git a/getexp b/getexp new file mode 100755 index 0000000000000000000000000000000000000000..6f5c8b7d93c54fa5157de060d25f3ce44176ff61 --- /dev/null +++ b/getexp @@ -0,0 +1,45 @@ +#! /usr/bin/env python +# +# Print experiment info in shell-digestible form +# + +import os +import sys + +from expconfig import ExpConfig, ExpConfigError +from feedback import die + +# Utilities + +# +# Main routine +# + +# Check command line + +if len(sys.argv) != 2: + die('invalid number of parameters\n' + + 'Usage: '+sys.argv[0]+' experiment_config_name') + +experiment_config_name = sys.argv[1] +if not os.path.exists(experiment_config_name): + die("config file '{0}' does not exist".format(experiment_config_name)) + +# Read and store configuration info from input and experiments' library +# Store environment as default for control settings, then add config from files + +try: + config = ExpConfig(experiment_config_name) +except ExpConfigError as error: + die(error.message) + +print("EXP_ID='{0}'".format(config.experiment_id)) +print("SCRIPT_DIR='{0}'".format(config['SCRIPT_DIR'])) +print("WORK_DIR='{0}'".format(config['WORK_DIR'])) +print("DATA_DIR='{0}'".format(config['DATA_DIR'])) + +if not (os.path.isdir(config['SCRIPT_DIR']) and + os.path.isdir(config['WORK_DIR']) and + os.path.isdir(config['DATA_DIR'])): + die("data for experiment '{0}' does not exist".format(config.experiment_id)) + diff --git a/mkexp b/mkexp index 512cf303c88ef1ae4b6b7b80c1b5a2cb5efdd673..6cd2e1988ceefe5f8b00087a3f225198ae60b9cc 100755 --- a/mkexp +++ b/mkexp @@ -5,30 +5,21 @@ # $Id$ # -import logging import os import re import stat import StringIO import sys -from configobj import ConfigObj, InterpolationError from jinja2 import Environment, FileSystemLoader +from expconfig import ExpConfig, ExpConfigError +import feedback + # # Basic settings # -exp_lib_dir = 'standard_experiments' -que_lib_dir = 'standard_queue_settings' -default_name = 'DEFAULT' - -logging.basicConfig(format='%(levelname)s: %(message)s') -logging.addLevelName(logging.INFO, 'Note') -logging.addLevelName(logging.WARNING, 'Hey') -logging.addLevelName(logging.ERROR, 'Oops') -logging.addLevelName(logging.CRITICAL, 'Sorry') - # Setup templating environment template_env = Environment( loader = FileSystemLoader('.'), @@ -59,10 +50,12 @@ def chmod_plus_x(file_name): def get_template_name(experiment_kind, job_id): '''Determine script template, taking system default if type is unsupported.''' - run_template_name = os.path.join(exp_lib_dir, experiment_kind+'.'+job_id+'.tmpl') + run_template_name = os.path.join(ExpConfig.exp_lib_dir, + experiment_kind+'.'+job_id+'.tmpl') if not os.path.exists(run_template_name): - logging.info("no %s template for '%s', using default", job_id, experiment_kind) - run_template_name = os.path.join(exp_lib_dir, default_name+'.'+job_id+'.tmpl') + feedback.info("no %s template for '%s', using default", job_id, experiment_kind) + run_template_name = os.path.join(ExpConfig.exp_lib_dir, + ExpConfig.default_name+'.'+job_id+'.tmpl') return run_template_name def get_script_name(experiment_id, job_id): @@ -120,21 +113,6 @@ def format_namelist(section): lines.write('/\n') return lines.getvalue() -# Config post-processing - -def split_jobs(config): - '''Post-process job definition to allow for shared configs as [[job1, job2]]''' - if 'jobs' in config: - sep = re.compile(r'\s*,\s') - for subjobs, subconfig in config['jobs'].iteritems(): - if re.search(sep, subjobs): - for subjob in re.split(sep, subjobs): - if subjob in config['jobs']: - config['jobs'][subjob].merge(subconfig.dict()) - else: - config['jobs'][subjob] = subconfig.dict() - del config['jobs'][subjobs] - # # Main routine # @@ -142,104 +120,50 @@ def split_jobs(config): # Check command line if len(sys.argv) < 2: - logging.error('invalid number of parameters\n' + + feedback.error('invalid number of parameters\n' + 'Usage: '+sys.argv[0]+' experiment_config_name') sys.exit(1) experiment_config_name = sys.argv[1] if not os.path.exists(experiment_config_name): - logging.error("config file '{0}' does not exist".format(experiment_config_name)) + feedback.error("config file '{0}' does not exist".format(experiment_config_name)) sys.exit(1) # Read and store configuration info from input and experiments' library # Store environment as default for control settings, then add config from files -# Read experiment config to get basic settings -# TODO: probably nicer if default experiment is given as argument -pre_config = ConfigObj(experiment_config_name, interpolation=False) - -experiment_id = pre_config['EXP_ID'] -experiment_type = pre_config['EXP_TYPE'] -experiment_kind = re.sub(r'-\wR$', '', experiment_type) -queue_type = pre_config['QUEUE_TYPE'] - -pre_config = None - -# Start from empty configuration -pre_config = ConfigObj(interpolation=False) -config_versions = [] - -# Read Environment -pre_config.merge({'DEFAULT': dict(os.environ)}) - -# Read settings from library (general default and experiment type specific) - -lib_config_name = os.path.join(exp_lib_dir, default_name+'.config') -pre_config.merge(ConfigObj(lib_config_name, interpolation=False)) -split_jobs(pre_config) -config_versions.append(pre_config['VERSION_']) -del pre_config['VERSION_'] - -lib_config_name = os.path.join(exp_lib_dir, experiment_type+'.config') -if os.path.exists(lib_config_name): - pre_config.merge(ConfigObj(lib_config_name, interpolation=False)) - split_jobs(pre_config) - config_versions.append(pre_config['VERSION_']) - del pre_config['VERSION_'] -else: - logging.warning("cannot find config for '%s', using default only", experiment_type) - -# Re-read config to allow overriding default settings -# TODO: probably nicer if default experiment is given as argument -pre_config.merge(ConfigObj(experiment_config_name, interpolation=False)) -split_jobs(pre_config) - -# Add complete versioning info -pre_config['VERSIONS_'] = ', '.join(config_versions) - -# Re-read merged config with interpolation set -# This works around incomprehensible inheritance of interpolation with merge -# Then make sure that all values are interpolated - -config_lines = StringIO.StringIO() - -pre_config.write(config_lines) -pre_config = None - -config_lines.seek(0) -config = ConfigObj(config_lines, interpolation='template') - -def eval_key(section, key): - try: - section[key] = section[key] - except InterpolationError as error: - logging.error("{0} while reading key '{1}'".format(error.message[:-1], key)) - sys.exit(2) - -config.walk(eval_key) +try: + config = ExpConfig(experiment_config_name) +except ExpConfigError as error: + feedback.error(error.message) + sys.exit(2) # Create target directories # Create directory for scripts if it doesn't exist -script_dir = os.path.join(config['MODEL_ROOT'], - 'experiments', - experiment_id, - 'scripts') +script_dir = config['SCRIPT_DIR'] print "Script directory: '"+script_dir+"'" if not os.path.isdir(script_dir): os.makedirs(script_dir) else: - logging.warning("script directory already exists, overwriting existing scripts") + feedback.warning("script directory already exists, overwriting existing scripts") # Create directory for output data if it doesn't exist -data_dir = os.path.join(config['DATA_ROOT'], - 'experiments', - experiment_id) +data_dir = config['DATA_DIR'] print "Data directory: '"+data_dir+"'" if not os.path.isdir(data_dir): os.makedirs(data_dir) else: - logging.warning("data directory already exists") + feedback.warning("data directory already exists") + +# Create directory for running the experiment if it doesn't exist +work_dir = config['WORK_DIR'] +if work_dir != data_dir: + print "Work directory: '"+work_dir+"'" + if not os.path.isdir(work_dir): + os.makedirs(work_dir) + else: + feedback.warning("work directory already exists") # Prepare namelists for inclusion in scripts for namelist, groups in config['namelists'].iteritems(): @@ -256,6 +180,6 @@ for subjob, subconfig in config['jobs'].iteritems(): if 'extends' in config['JOB']: template_job = config['JOB']['extends'] expand_template(config, - get_template_name(experiment_kind, template_job), - get_script_name(experiment_id, subjob)) + get_template_name(config.experiment_kind, template_job), + get_script_name(config.experiment_id, subjob)) diff --git a/rmexp b/rmexp new file mode 100755 index 0000000000000000000000000000000000000000..003f4741a3b88a1434542f4f576a96abfcc351c1 --- /dev/null +++ b/rmexp @@ -0,0 +1,25 @@ +#! /bin/sh +# +# Compare experiment setups trying to identify file pairs. +# + +PROGRAM=`basename $0` +BINDIR=`dirname $0` +PATH="$BINDIR:$PATH" + +die () { + echo "$@" >&2 + exit 1 +} + +[ "x$1" = x ] && die "Oops: invalid number of parameters +Usage: $PROGRAM config_file..." + +for CONFIG +do + + eval `getexp "$CONFIG" || echo \; exit $?` + + rm -ri $SCRIPT_DIR $WORK_DIR + +done diff --git a/setup.py b/setup.py index 913ba3c992b96e7990cc72ddeff859bd169e9804..19a857bdcda84cad7cffb531c8006651f3717a5d 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from distutils.core import setup name = 'mkexp' -version = '0.1.0dev' +version = '0.1.0' setup( name = name, @@ -11,11 +11,12 @@ setup( author = 'Karl-Hermann Wieners', author_email = 'karl-hermann.wieners@mpimet.mpg.de', url = 'http://code.zmaw.de/projects/esmenv', - py_modules = ['configobj', 'validate'], - scripts = ['mkexp'], + py_modules = ['configobj', 'validate', 'feedback', 'expconfig'], + scripts = ['mkexp', 'getexp', 'rmexp', 'diffexp', 'diffpath'], platforms = ['Posix'], license = 'LICENSE.txt', data_files = [('share/doc/'+name+'-'+version+'/examples', - ['examples/khw0000.config'])], + ['examples/'+example+'.config' + for example in ['reference', 'old_input_data', 'mean_values']])], requires = ['Jinja2(>= 2.6)'] -) \ No newline at end of file +) diff --git a/standard_experiments/DEFAULT.config b/standard_experiments/DEFAULT.config index d74b95485ad545d1e4f4dc4952bd9e75e4bbbbeb..646a43892e406ab0d87b13dfd58300a606128a52 100644 --- a/standard_experiments/DEFAULT.config +++ b/standard_experiments/DEFAULT.config @@ -5,8 +5,25 @@ VERSION_ = $$Id$$ ECHAM_EXE = echam6 + INITIAL_DATA = /pool/data/ECHAM6/input/r0002 +MODEL_ROOT = $HOME +SCRIPT_ROOT = $MODEL_ROOT +DATA_ROOT = /work/$ACCOUNT/$LOGNAME +WORK_ROOT = $DATA_ROOT + +MODEL_SUBDIR = echam-dev +EXPERIMENTS_SUBDIR = experiments +SCRIPTS_SUBDIR = scripts +DATA_SUBDIR = +WORK_SUBDIR = + +MODEL_DIR = $MODEL_ROOT/$MODEL_SUBDIR +SCRIPT_DIR = $SCRIPT_ROOT/$MODEL_SUBDIR/$EXPERIMENTS_SUBDIR/$EXP_ID/$SCRIPTS_SUBDIR +DATA_DIR = $DATA_ROOT/$MODEL_SUBDIR/$EXPERIMENTS_SUBDIR/$EXP_ID/$DATA_SUBDIR +WORK_DIR = $WORK_ROOT/$MODEL_SUBDIR/$EXPERIMENTS_SUBDIR/$EXP_ID/$WORK_SUBDIR + [jobs] [[run, run_start]] diff --git a/standard_experiments/DEFAULT.job2.tmpl b/standard_experiments/DEFAULT.job2.tmpl index 1ad67aee46e2d698a8d0d5b17bc56386d41b7828..b0a4baa04fb48b60e9340360e80da55a36f57b52 100644 --- a/standard_experiments/DEFAULT.job2.tmpl +++ b/standard_experiments/DEFAULT.job2.tmpl @@ -13,11 +13,9 @@ set -ex #MONTH #YEAR ############################################################################### -export expid=%{EXP_ID} export LEVELS=%{LEVELS} # -export jobdir=%{MODEL_ROOT}/experiments/$expid -export data=%{DATA_ROOT}/experiments/$expid +export data=%{DATA_DIR} # export cdo=/client/bin/cdo export after=/sw/aix61/after-4.6.2/bin/after diff --git a/standard_experiments/DEFAULT.run.tmpl b/standard_experiments/DEFAULT.run.tmpl index 5757dc80b95565a9aff8548796ed5ae417db86df..ba706d74b8fb30d267cd733403dc169561f0b9de 100644 --- a/standard_experiments/DEFAULT.run.tmpl +++ b/standard_experiments/DEFAULT.run.tmpl @@ -36,8 +36,6 @@ START=%{JOB.start} EXP="%{EXP_ID}" # experiment identifier expname="%{EXP_TYPE}" # experiments name # -RERUN=.true. # Rerun switch; .false. for initial run, .true. else -# NTHREADS=%{JOB.threads_per_task} export ECHAM6_THREADS=$NTHREADS # @@ -47,13 +45,11 @@ OCERES=%{OCERES} # #----------------------------------------------------------------------------- # -WORK_DIR=%{MODEL_ROOT} -# # absolute path to directory with job scripts: -SCRIPTDIR=$WORK_DIR/experiments/$EXP/scripts +SCRIPTDIR=%{SCRIPT_DIR} # # absolute path to directory with plenty of space: -EXPDIR=%{DATA_ROOT}/experiments/$EXP +EXPDIR=%{WORK_DIR} # # absolute path to directory with initial data: INI_DATA=%{INITIAL_DATA} @@ -68,7 +64,7 @@ INIJSBTRANS=$INIJSB/New_Hampshire_LCC LIBJSB=/pool/data/ECHAM6/jsbach # # absolute path to model binary, including the executable -MODEL=${WORK_DIR}/bin/%{ECHAM_EXE} +MODEL=%{MODEL_DIR}/bin/%{ECHAM_EXE} # #----------------------------------------------------------------------------- # diff --git a/standard_experiments/amip.run.tmpl b/standard_experiments/amip.run.tmpl index c4e33753065d4b370e9de7c85e7fd982b3845ec9..c97b394a2efcfd22e873bf014a65694ce736b3d2 100644 --- a/standard_experiments/amip.run.tmpl +++ b/standard_experiments/amip.run.tmpl @@ -34,9 +34,6 @@ START=%{JOB.start} # followed by a number for the current experiment # EXP="%{EXP_ID}" # experiment identifier -expname="%{EXP_TYPE}" # experiments name -# -RERUN=.true. # Rerun switch; .false. for initial run, .true. else # NTHREADS=%{JOB.threads_per_task} export ECHAM6_THREADS=$NTHREADS @@ -47,13 +44,11 @@ OCERES=%{OCERES} # #----------------------------------------------------------------------------- # -WORK_DIR=%{MODEL_ROOT} -# # absolute path to directory with job scripts: -SCRIPTDIR=$WORK_DIR/experiments/$EXP/scripts +SCRIPTDIR=%{SCRIPT_DIR} # # absolute path to directory with plenty of space: -EXPDIR=%{DATA_ROOT}/experiments/$EXP +EXPDIR=%{WORK_DIR} # # absolute path to directory with initial data: INI_DATA=%{INITIAL_DATA} @@ -68,7 +63,7 @@ INIJSBTRANS=$INIJSB/New_Hampshire_LCC LIBJSB=/pool/data/ECHAM6/jsbach # # absolute path to model binary, including the executable -MODEL=${WORK_DIR}/bin/%{ECHAM_EXE} +MODEL=%{MODEL_DIR}/bin/%{ECHAM_EXE} # #----------------------------------------------------------------------------- # diff --git a/standard_experiments/sstClim.run.tmpl b/standard_experiments/sstClim.run.tmpl index e59c6142ed4a5204aadfbe097a264e9168d28456..b4d2b0ecd8fd096e41bb6d46bc9c224a8db919a3 100644 --- a/standard_experiments/sstClim.run.tmpl +++ b/standard_experiments/sstClim.run.tmpl @@ -34,9 +34,6 @@ START=%{JOB.start} # followed by a number for the current experiment # EXP="%{EXP_ID}" # experiment identifier -expname="%{EXP_TYPE}" # experiments name -# -RERUN=.true. # Rerun switch; .false. for initial run, .true. else # NTHREADS=%{JOB.threads_per_task} export ECHAM6_THREADS=$NTHREADS @@ -47,13 +44,11 @@ OCERES=%{OCERES} # #----------------------------------------------------------------------------- # -WORK_DIR=%{MODEL_ROOT} -# # absolute path to directory with job scripts: -SCRIPTDIR=$WORK_DIR/experiments/$EXP/scripts +SCRIPTDIR=%{SCRIPT_DIR} # # absolute path to directory with plenty of space: -EXPDIR=%{DATA_ROOT}/experiments/$EXP +EXPDIR=%{WORK_DIR} # # absolute path to directory with initial data: INI_DATA=%{INITIAL_DATA} @@ -68,7 +63,7 @@ INIJSBTRANS=$INIJSB/New_Hampshire_LCC LIBJSB=/pool/data/ECHAM6/jsbach # # absolute path to model binary, including the executable -MODEL=${WORK_DIR}/bin/%{ECHAM_EXE} +MODEL=%{MODEL_DIR}/bin/%{ECHAM_EXE} # #----------------------------------------------------------------------------- #