#!/usr/bin/perl
use Getopt::Long;
#
# Make job scripts for control (seasonal for solar min,max) test runs, by calling mkjobscript.
# This includes #BSUB LSF resources for the NCAR yellowstone machine.
# This will also make empty *_out directories (if they do not already exist) to contain stdout 
#   files from each case run.
#
# Set defaults:
#
$user        = getlogin;
$model       = "tiegcm";
$version     = "${model}_trunk";
$modeldir    = "../..";
$execdir     = "/glade/scratch/$user/$version/control/${model}-ys";
$modelres    = "5.0";
$mkjobscript = "$modeldir/scripts/mkjobscript";
$template    = "$modeldir/scripts/${model}.job.template";
#
# LSF resources:
#
$queue       = "premium"; # batch queue
$nproc       = "16";      # number of MPI tasks
$wc          = "0:30";    # wallclock limit hours:minutes
#
# Process options provided by user to override defaults:
#
&GetOptions(
  "h|help"        => \$help,
  "model=s"       => \$model,
  "version=s"     => \$version,
  "modeldir=s"    => \$modeldir,
  "execdir=s"     => \$execdir,
  "modelres=s"    => \$modelres,
  "mkjobscript=s" => \$mkjobscript,
  "template=s"    => \$template,
  "queue=s"       => \$queue,
  "nproc=s"       => \$nproc,
  "wc=s"          => \$wc
) or usage();
if ($help) { usage(); }
#
# Check for existence of mkjobscript, template, and model root directory:
# (first reset mkjobscript and template in case modeldir was set by user)
#
$mkjobscript = "$modeldir/scripts/mkjobscript";
$template    = "$modeldir/scripts/${model}.job.template";
if (not -e $mkjobscript) { die "Could not find mkjobscript $mkjobscript\n"; }
if (not -e $template   ) { die "Could not find template $template\n"; }
if (not -e $modeldir   ) { die "Could not find modeldir $modeldir\n"; }
if (not -e "$modeldir/src")     { die "Could not find model src directory $modeldir/src\n"; }
if (not -e "$modeldir/scripts") { die "Could not find model scripts directory $modeldir/scripts\n"; }
#
# Case names:
#
@cases = ("decsol_smax","decsol_smin","junsol_smax","junsol_smin",
          "mareqx_smax","mareqx_smin","sepeqx_smax","sepeqx_smin");

foreach $case (@cases) {
#
# Make output directory:
#
  $dir = $case . '_out';
  mkdir $dir;
#
# Construct mkjobscript command for current case:
#
  $command = "$mkjobscript -fileout=${model}_${case}.job -template=$template -model=$model";
  $command = $command . " -modeldir=$modeldir -execdir=$execdir -input=${model}_${case}.inp";
  $command = $command . " -output=${case}_out/${model}_${case}.out -modelres=$modelres";
  $command = $command . " -runscript=$run_${case}.lsf -bsub_jobname=$case -bsub_queue=$queue";
  $command = $command . " -bsub_nproc=$nproc -bsub_wc=$wc";
#
# Call mkjobscript to make the job script for the current case:
#
  print "Making job script ${model}_${case}.job\n";
  `$command`;

} # foreach $case

#-----------------------------------------------------------------------
sub usage {
  print "\nThe perl script 'make_jobs' makes a series of job scripts for building and running the model.\n";
  print "This version makes 8 job scripts for seasonal control runs at solar min and solar max conditions.\n";
  print "This version also makes 8 output directories for stdout files (if they do not already exist).\n";
  print "\nDescription of options:\n";
  print <<EOF;
  -model	Name of model (usually tiegcm or timegcm)
  -version      Version string (used only to construct default execdir)
  -modeldir     Root directory of model source
  -execdir      Directory in which to build and execute the model
  -modelres     Model resolution (either 5.0 or 2.5)
  -mkjobscript  Full path to the perl script 'mkjobscript' (usually $modeldir/scripts/mkjobscript)
  -template     Full path to job template (usually $modeldir/scripts/$model.job.template)
  -queue        LSF resource: job queue
  -nproc        LSF resource: number of processors 
  -wc           LSF resource: wall-clock limit (hr:min)
EOF
  print "\nHere are the options and their current values\n";
  print "(note there must be no white space before or after the '=' sign)\n";
  print "  -model=$model\n"; 
  print "  -version=$version\n"; 
  print "  -modeldir=$modeldir\n"; 
  print "  -execdir=$execdir\n"; 
  print "  -modelres=$modelres\n"; 
  print "  -mkjobscript=$mkjobscript\n"; 
  print "  -template=$template\n"; 
  print "  -queue=$queue\n"; 
  print "  -nproc=$nproc\n"; 
  print "  -wc=$wc\n\n"; 
  exit;
}

