#! /bin/csh
#
# User set shell variables for TIEGCM Linux job:
# (modeldir, execdir, and utildir may be relative or absolute paths)
#
# modeldir: Root directory to model source (may be an SVN working dir)
# execdir: Directory in which to build and execute (will be created if necessary)
# input: Namelist input file (will use default if not provided)
# output: Stdout file from model execution (will be created)
# make: Build file with platform-specific compile parameters (see scripts dir)
# mpi: TRUE/FALSE for MPI or non-MPI run
# nproc: Number of processors for 64-bit Linux MPI run
# modelres: Model resolution (5.0 or 2.5)
# debug: If TRUE, build and execute a "debug" run
# exec: If TRUE, execute the model (build only if FALSE)
# utildir: Dir containing supporting scripts (usually $modeldir/scripts)
set modeldir = tiegcm_hpss
set execdir = tiegcm-linux
set make = Make.intel_hao64
#set make = Make.pgi_hao64
#set input = tiegcm_hpss.inp
set output = tiegcm_hpss.out
set mpi = TRUE
set nproc = 4
set modelres = 5.0
set debug = FALSE
set exec = TRUE
set utildir = $modeldir/scripts
#
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Shell Script for TIEGCM Linux job
#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
set mycwd = `pwd`
echo "" ; echo "${0}:"
echo " Begin execution at `date`"
echo " Current working directory: $mycwd"
echo " System: `uname -a`"
echo ""
#
# Verify directories and make_machine file (make execdir if necessary).
# Get absolute path for dirs that are accessed from the execdir.
#
if (! -d $modeldir) then
echo ">>> Cannot find model directory $modeldir <<<"
exit 1
endif
set model = $modeldir:t
if (! -d $utildir) then
echo ">>> Cannot find model scripts directory $utildir <<<"
exit 1
endif
set srcdir = $modeldir/src
if (! -d $srcdir) then
echo ">>> Cannot find model source directory $srcdir <<<"
exit 1
endif
set srcdir = `perl $utildir/abspath $srcdir`
if (! -d $execdir) then
echo "Making exec directory $execdir"
mkdir -p $execdir
endif
if (! -f $make) set make = $utildir/$make
if (! -f $make) then
echo ">>> Cannot find make_machine file $make <<<"
exit 1
endif
set make = `perl $utildir/abspath $make`
echo Make machine file = $make
if ($modelres != 5.0 && $modelres != 2.5) then
echo ">>> Unknown model resolution $modelres <<<"
exit 1
endif
#
# Unconditionally copy make files to execdir:
#
cp $make $execdir
cp $utildir/Makefile $execdir
cp $utildir/mkdepends $execdir
#
# Make default namelist input file if not provided by user:
#
if ($?input) then
if (! -f $input) then
echo ">>> Cannot find namelist input file $input <<<"
exit 1
endif
else
set input = \
`perl $utildir/mknamelist -model=$model -modelres=$modelres` || \
echo ">>> Error from mknamelist: fileout = $input" && exit 1
endif
set input = `perl $utildir/abspath $input`
set output = `perl $utildir/abspath $output`
#
# Copy defs header file to execdir, if necessary, according to
# requested resolution:
#
if (! -f $execdir/defs.h) then
if ($modelres == 5.0) then
cp $srcdir/defs.5.0 $execdir/defs.h
else
cp $srcdir/defs.2.5 $execdir/defs.h
endif
endif
#
# Report to stdout:
#
set svnversion = `svnversion $modeldir` || set svnversion = "[none]"
echo -n " Model directory: $modeldir" && echo " (SVN revision $svnversion)"
echo " Exec directory: $execdir"
echo " Source directory: $srcdir"
echo " Make machine file: $make"
echo " Namelist input: $input"
#
# cd to execdir and run make:
#
cd $execdir || echo ">>> Cannot cd to execdir $execdir" && exit 1
echo ""
echo "Begin building $execdir in `pwd`"
#
# Build Make.env file in exec dir, containing needed env vars for Makefile:
#
cat << EOF >! Make.env
MAKE_MACHINE = $make
DIRS = . $srcdir
MPI = $mpi
NPROC = $nproc
EXECNAME = $model
NAMELIST = $input
OUTPUT = $output
DEBUG = $debug
SVN_VERSION = $svnversion
EOF
#
# If building with intel on 64-bit Linux at hao, please add the following
# source command to your ~/.cshrc file, or uncomment the next line:
#source /opt/local/intel/Compiler/11.1/072/bin/ifortvars.csh intel64
#
# Build the model:
gmake -j4 all || echo ">>> Error return from gmake all" && exit 1
#
# Execute Linux job (MPI or non-MPI run):
# (machines.ini mpirun rules are in Make.machine file)
#
if ($exec == "TRUE") then
set model = ./$model
echo "Linux job: Executing $model mpi=$mpi nproc=$nproc"
echo "Model output will go to $output"
if ($mpi == "TRUE") then
#
# Files machines.ini and mpirun.command are made by the Make.machines file.
gmake machines.ini
gmake mpirun.command
set mpirun = `cat mpirun.command`
echo "Executing $mpirun -np $nproc for Linux MPI run."
#
# Execute MPI job:
$mpirun -np $nproc -machinefile machines.ini $model < $input >&! $output || \
echo ">>> ${0} mpirun execution of $model FAILED at `date`" && \
echo "See output in $output"
echo "Linux MPI run of $model completed at `date`"
else # MPI is FALSE
echo "Executing $model for Linux non-MPI run."
$model < $input >&! $output || \
echo ">>> ${0} Execution of $model FAILED at `date`" && \
echo "See output in $output"
echo "Linux non-MPI run of $model completed at `date`"
endif
else
echo "I am NOT executing $model (exec was not set)"
endif
exit 0