#! /bin/csh -f
# env variables used are 
#   CASEROOT, CASE
#   MAX_TASKS_PER_NODE, PES_PER_NODE
#   MODELS, NTHRDS (derived arrays)
#   ACCOUNT, QUEUE
#   TESTMODE
#   CCSM_ESTCOST

#################################################################################
if ($PHASE == set_batch) then
#################################################################################

source ./Tools/ccsm_getenv || exit -1

set mppsize = `${CASEROOT}/Tools/taskmaker.pl -sumonly`
@ mppnodes = $mppsize / ${MAX_TASKS_PER_NODE}
if ( $mppsize % ${MAX_TASKS_PER_NODE} > 0) then
  @ mppnodes = $mppnodes + 1
  @ mppsize = $mppnodes * ${MAX_TASKS_PER_NODE}
endif

set maxthrds = 1
set minthrds = $MAX_TASKS_PER_NODE
@ n = 0
foreach model ($MODELS)
  @ n = $n + 1
  if ($NTHRDS[$n] > $MAX_TASKS_PER_NODE ) then
     echo "ERROR, NTHRDS maximum is $MAX_TASKS_PER_NODE"
     echo "you have set NTHRDS = ( $NTHRDS[$n] ) - must reset"
     exit 1
  endif   
  if ($NTHRDS[$n] > $maxthrds) then
     set maxthrds = $NTHRDS[$n]
  endif
  if ($NTHRDS[$n] < $minthrds) then
     set minthrds = $NTHRDS[$n]
  endif
end

#--- Job name is first fifteen characters of case name ---
set jobname = `echo ${CASE} | cut -c1-15`

set walltime = "00:45:00"
if ($CCSM_ESTCOST > 1) set walltime = "01:50:00"
if ($CCSM_ESTCOST > 3 || $DEBUG == "TRUE") set walltime = "05:00:00"

if ($?TESTMODE) then
 set file = $CASEROOT/${CASE}.test 
 set walltime = "00:30:00"
 set queue = "debug"
else
 set file = $CASEROOT/${CASE}.run 
 set queue = "normal"
endif
#@ ppn = $MAX_TASKS_PER_NODE / $maxthrds 

cat >! $file << EOF1
#!/bin/csh -f
#PBS -N ${jobname}
#PBS -q $queue
#PBS -l nodes=${mppnodes}:ppn=32:xe
#PBS -l walltime=${walltime}
#PBS -j oe
#PBS -S /bin/csh -V
EOF1

#################################################################################
else if ($PHASE == set_exe) then
#################################################################################

set maxthrds = `./Tools/taskmaker.pl -maxthrds`
set myaprun  = `./Tools/taskmaker.pl -aprun`

cat >> ${CASEROOT}/${CASE}.run << EOF1
sleep 25
cd \$RUNDIR
echo "\`date\` -- CSM EXECUTION BEGINS HERE" 

setenv OMP_NUM_THREADS ${maxthrds}
if (\$MPILIB != "mpi-serial") then
   aprun ${myaprun} >&! cesm.log.\$LID
else
   \$EXEROOT/cesm.exe >&! cesm.log.\$LID
endif
wait

echo "\`date\` -- CSM EXECUTION HAS FINISHED" 

EOF1


#################################################################################
else if ($PHASE == set_larch) then
#################################################################################

cat >! $CASEROOT/${CASE}.l_archive << EOF1
#! /bin/csh -f
#PBS -N ${CASE}.l_archive
#PBS -q xe
#PBS -l mppwidth=0
#PBS -l walltime=01:30:00
#PBS -j oe
#PBS -S /bin/csh -V

cd \$DOUT_S_ROOT
$CASEROOT/Tools/lt_archive.csh
exit 0
EOF1
chmod 775 ${CASEROOT}/${CASE}.l_archive

#################################################################################
else
#################################################################################

    echo "  PHASE setting of $PHASE is not an accepted value"
    echo "  accepted values are set_batch, set_exe and set_larch"
    exit 1

#################################################################################
endif
#################################################################################
