129 lines
3.2 KiB
Bash
Executable File
129 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# submission script for PMSCO calculations on Merlin cluster
|
|
#
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "Usage: $0 [NOSUB] JOBNAME NODES WALLTIME:HOURS PROJECT MODE [LOG_LEVEL]"
|
|
echo ""
|
|
echo " NOSUB (optional): do not submit the script to the queue. default: submit."
|
|
echo " WALLTIME:HOURS (integer): sets the wall time limits."
|
|
echo " soft limit = HOURS:00:00"
|
|
echo " hard limit = HOURS:00:30"
|
|
echo " for short.q: HOURS = 0 (-> MINUTES=30)"
|
|
echo " for all.q: HOURS <= 24"
|
|
echo " for long.q: HOURS <= 96"
|
|
echo " PROJECT: python module (file path) that declares the project and starts the calculation."
|
|
echo " MODE: PMSCO calculation mode (single|swarm|gradient|grid)."
|
|
echo " LOG_LEVEL (optional): one of DEBUG, INFO, WARNING, ERROR if log files should be produced."
|
|
echo ""
|
|
echo "the job script complete with the program code and input/output data is generated in ~/jobs/\$JOBNAME"
|
|
exit 1
|
|
fi
|
|
|
|
# location of the pmsco package is derived from the path of this script
|
|
SCRIPTDIR="$(dirname $(readlink -f $0))"
|
|
SOURCEDIR="$SCRIPTDIR/.."
|
|
PHD_SOURCE_DIR="$SOURCEDIR"
|
|
|
|
PHD_CODE="edac"
|
|
|
|
# read arguments
|
|
if [ "$1" == "NOSUB" ]; then
|
|
NOSUB="true"
|
|
shift
|
|
else
|
|
NOSUB="false"
|
|
fi
|
|
|
|
PHD_JOBNAME=$1
|
|
shift
|
|
|
|
PHD_NODES=$1
|
|
shift
|
|
|
|
PHD_WALLTIME_HR=$1
|
|
PHD_WALLTIME_MIN=0
|
|
shift
|
|
|
|
PHD_PROJECT_FILE="$(readlink -f $1)"
|
|
PHD_PROJECT_ARGS=""
|
|
shift
|
|
|
|
PHD_MODE="$1"
|
|
shift
|
|
|
|
PHD_LOGLEVEL=""
|
|
if [ "$1" == "DEBUG" ] || [ "$1" == "INFO" ] || [ "$1" == "WARNING" ] || [ "$1" == "ERROR" ]; then
|
|
PHD_LOGLEVEL="$1"
|
|
shift
|
|
fi
|
|
|
|
# ignore remaining arguments
|
|
PHD_SCAN_FILES=""
|
|
|
|
# select allowed queues
|
|
QUEUE=short.q,all.q,long.q
|
|
|
|
# for short queue (limit 30 minutes)
|
|
if [ "$PHD_WALLTIME_HR" -lt 1 ]; then
|
|
PHD_WALLTIME_HR=0
|
|
PHD_WALLTIME_MIN=30
|
|
fi
|
|
|
|
# set up working directory
|
|
cd ~
|
|
if [ ! -d "jobs" ]; then
|
|
mkdir jobs
|
|
fi
|
|
cd jobs
|
|
if [ ! -d "$PHD_JOBNAME" ]; then
|
|
mkdir "$PHD_JOBNAME"
|
|
fi
|
|
cd "$PHD_JOBNAME"
|
|
WORKDIR="$(pwd)"
|
|
PHD_WORK_DIR="$WORKDIR"
|
|
|
|
# provide revision information, requires git repository
|
|
cd "$SOURCEDIR"
|
|
PHD_REV=$(git log --pretty=format:"%h, %ad" --date=iso -1)
|
|
if [ $? -ne 0 ]; then
|
|
PHD_REV="revision unknown, "$(date +"%F %T %z")
|
|
fi
|
|
cd "$WORKDIR"
|
|
echo "$PHD_REV" > revision.txt
|
|
|
|
# generate job script from template
|
|
sed -e "s:_PHD_WORK_DIR:$PHD_WORK_DIR:g" \
|
|
-e "s:_PHD_JOBNAME:$PHD_JOBNAME:g" \
|
|
-e "s:_PHD_NODES:$PHD_NODES:g" \
|
|
-e "s:_PHD_WALLTIME_HR:$PHD_WALLTIME_HR:g" \
|
|
-e "s:_PHD_WALLTIME_MIN:$PHD_WALLTIME_MIN:g" \
|
|
-e "s:_PHD_PROJECT_FILE:$PHD_PROJECT_FILE:g" \
|
|
-e "s:_PHD_PROJECT_ARGS:$PHD_PROJECT_ARGS:g" \
|
|
-e "s:_PHD_CODE:$PHD_CODE:g" \
|
|
-e "s:_PHD_MODE:$PHD_MODE:g" \
|
|
-e "s:_PHD_SOURCE_DIR:$PHD_SOURCE_DIR:g" \
|
|
-e "s:_PHD_SCAN_FILES:$PHD_SCAN_FILES:g" \
|
|
-e "s:_PHD_LOGLEVEL:$PHD_LOGLEVEL:g" \
|
|
"$SCRIPTDIR/pmsco.sge.template" > $PHD_JOBNAME.job
|
|
|
|
chmod u+x "$PHD_JOBNAME.job"
|
|
|
|
if [ "$NOSUB" != "true" ]; then
|
|
|
|
# suppress bash error [stackoverflow.com/questions/10496758]
|
|
unset module
|
|
|
|
# submit the job script
|
|
# EMAIL must be defined in the environment
|
|
if [ -n "$EMAIL" ]; then
|
|
qsub -q $QUEUE -m ae -M $EMAIL $PHD_JOBNAME.job
|
|
else
|
|
qsub -q $QUEUE $PHD_JOBNAME.job
|
|
fi
|
|
|
|
fi
|
|
|
|
exit 0
|