184 lines
4.5 KiB
Bash
Executable File
184 lines
4.5 KiB
Bash
Executable File
#!/bin/ksh
|
|
|
|
# CALLS: rebuild_nemo.exe
|
|
|
|
#set -ax
|
|
usage ()
|
|
{
|
|
echo
|
|
echo " NEMO Rebuild"
|
|
echo " ************"
|
|
echo
|
|
echo " usage: ${0##*/} [-l -p -s -m -n -r -d -x -y -z -t -c] filebase ndomain [rebuild dimensions]"
|
|
echo
|
|
echo " flags: -l arch submit to compute node"
|
|
echo " -p num use num threads"
|
|
echo " -s num split 4D vars into time slice of size num"
|
|
echo " -m force masking of global arrays (zero if no mdi)"
|
|
echo " -n namelist full path to namelist file to be created (otherwise default nam_rebuild+_process_id is used)"
|
|
echo " -r memory Memory to request on compute node including units (Default = 10Gb)"
|
|
echo ""
|
|
echo " key_netcdf4 only "
|
|
echo " -d deflate_level deflate level for output files"
|
|
echo " -x chunksize along x "
|
|
echo " -y chunksize along y "
|
|
echo " -z chunksize along z "
|
|
echo " -t chunksize along t "
|
|
echo " -c total size of the chunk cache "
|
|
echo
|
|
exit 1
|
|
}
|
|
|
|
while getopts l:p:s:n:r:d:x:y:z:t:c:m opt
|
|
do
|
|
case ${opt} in
|
|
l)
|
|
BATCH="yes"
|
|
ARCH=${OPTARG}
|
|
;;
|
|
p)
|
|
OMP_NUM_THREADS=${OPTARG}
|
|
;;
|
|
s)
|
|
NSLICESIZE=${OPTARG}
|
|
;;
|
|
m)
|
|
NMASK="TRUE"
|
|
echo ""
|
|
echo "output is mask using netcdf missing value (_Fillvalue attribute) or 0 if missing value not in the netcdf."
|
|
echo ""
|
|
;;
|
|
d)
|
|
DEFLATE=${OPTARG}
|
|
;;
|
|
n)
|
|
nam_rebuild=${OPTARG}
|
|
;;
|
|
r)
|
|
MEMORY=${OPTARG}
|
|
;;
|
|
x)
|
|
NXCHUNK=${OPTARG}
|
|
;;
|
|
y)
|
|
NYCHUNK=${OPTARG}
|
|
;;
|
|
z)
|
|
NZCHUNK=${OPTARG}
|
|
;;
|
|
t)
|
|
NTCHUNK=${OPTARG}
|
|
;;
|
|
c)
|
|
CHUNKSIZE=${OPTARG}
|
|
;;
|
|
esac
|
|
done
|
|
shift $(expr ${OPTIND} - 1)
|
|
|
|
if [[ $# -lt 2 ]] ; then
|
|
usage
|
|
fi
|
|
|
|
script_dir=$(dirname $0)
|
|
|
|
file=$1
|
|
ndomain=$2
|
|
DIM1=$3
|
|
DIM2=$4
|
|
export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1}
|
|
nam_rebuild=${nam_rebuild:-nam_rebuild_$$}
|
|
MEMORY=${MEMORY:-10Gb}
|
|
|
|
#Find out the maximum number of files that can be opened and increase if necessary)
|
|
nopen=$(ulimit -n)
|
|
if [[ $ndomain -gt $nopen ]] ; then
|
|
nopen=$((ndomain+4)) # +2 failed !!!
|
|
fi
|
|
|
|
if [[ -n ${DIM1} && -n ${DIM2} ]] ; then
|
|
dim_str=" dims '${DIM1}','${DIM2}'"
|
|
dims="dims='${DIM1}','${DIM2}'"
|
|
fi
|
|
|
|
echo "file ${file}, num_domains ${ndomain}, num_threads ${OMP_NUM_THREADS}${dim_str}"
|
|
|
|
cat > $nam_rebuild << EOC
|
|
&nam_rebuild
|
|
filebase='${file}'
|
|
ndomain=${ndomain}
|
|
EOC
|
|
if [[ -n ${dims} ]] ; then
|
|
echo ${dims} >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NCSLICESIZE} ]] ; then
|
|
echo " nslicesize=${NCSLICESIZE}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NMASK} ]] ; then
|
|
echo " l_maskout=.true." >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${DEFLATE} ]] ; then
|
|
echo " deflate_level=${DEFLATE}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NXCHUNK} ]] ; then
|
|
echo " nc4_xchunk=${NXCHUNK}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NYCHUNK} ]] ; then
|
|
echo " nc4_ychunk=${NYCHUNK}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NZCHUNK} ]] ; then
|
|
echo " nc4_zchunk=${NZCHUNK}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${NTCHUNK} ]] ; then
|
|
echo " nc4_tchunk=${NTCHUNK}" >> $nam_rebuild
|
|
fi
|
|
if [[ -n ${CHUNKSIZE} ]] ; then
|
|
echo " fchunksize=${CHUNKSIZE}" >> $nam_rebuild
|
|
fi
|
|
|
|
|
|
|
|
echo "/" >> $nam_rebuild
|
|
|
|
if [[ ${BATCH} == "yes" ]] ; then
|
|
|
|
template_dir=${script_dir}/BATCH_TEMPLATES/
|
|
param_file=${template_dir}/param_${ARCH}
|
|
if [ ! -f $param_file ]; then
|
|
echo ''
|
|
echo "E R R O R: $param_file is missing, stop 42"
|
|
echo ''
|
|
echo "check your arch name or add one $param_file file in BATCH_TEMPLATES"
|
|
echo ''
|
|
exit 42
|
|
fi
|
|
. $param_file
|
|
|
|
batch_file=rebuild_nemo_batch_${ARCH}
|
|
if [ ! -f ${template_dir}/${batch_file} ]; then
|
|
echo ''
|
|
echo "E R R O R: $batch_file is missing, stop 42"
|
|
echo ''
|
|
echo "check your arch name or add one $batch_file file in BATCH_TEMPLATES"
|
|
echo ''
|
|
exit 42
|
|
fi
|
|
|
|
#Create a modified local copy of the batch submission file
|
|
#The process ID is appended to the end of the file name so it is unique
|
|
cat ${template_dir}/${batch_file} | sed -e"s/NTHREADS/${OMP_NUM_THREADS}/" \
|
|
-e"s/MEMORY/${MEMORY}/" \
|
|
-e"s:INDIR:${script_dir}:" \
|
|
-e"s/NOPEN/${nopen}/" \
|
|
-e"s/NAMELIST/${nam_rebuild}/" > ${batch_file}_$$.sh
|
|
|
|
#Submit the job
|
|
echo "Submitting job to compute node"
|
|
$BATCH_CMD ${batch_file}_$$.sh
|
|
|
|
else
|
|
ulimit -n $nopen
|
|
${script_dir}/rebuild_nemo.exe $nam_rebuild
|
|
fi
|
|
|