#!/bin/sh
date
export PS4=' $SECONDS + '
set -x

####################################
# obtain unique process id (pid) and make temp directory
####################################
export pid=${pid:-$$}
export DATA=${DATA:-$DATAROOT/${job}}.${pid}
mkdir -p $DATA
cd $DATA
export cycle=${cycle:-t${cyc}z}

####################################
# Specify NET Name and RUN
#
# RUN - RUN grib field to repack
####################################
export NET=gfs
export RUN=gfsmos

####################################
# Determine Job Output Name on System
####################################
export outid="LL$job"
export jobid="${outid}.o${pid}"
export pgmout="OUTPUT.${pid}"

####################################
# SENDECF  - Flag Events on ECF
# SENDCOM  - Copy Files From TMPDIR to $com
# SENDDBN  - Send files to OSO
####################################
export SENDECF=${SENDECF:-YES}
export SENDCOM=${SENDCOM:-YES}
export SENDDBN=${SENDDBN:-YES}

####################################
# Specify GFS-MOS version number
####################################
export GFSMOS_MODEL_VERSION=${GFSMOS_MODEL_VERSION:-${gfsmos_ver}}
export GFSMOS_CODE_VERSION=${GFSMOS_CODE_VERSION:-${mos_shared_ver}}

####################################
# Specify Execution Areas
####################################
export HOMEmdl=${HOMEmdl:-$NWROOT/gfsmos.${GFSMOS_MODEL_VERSION}}
export HOMEcode=${HOMEcode:-$NWROOT/mos_shared.${GFSMOS_CODE_VERSION}}
export EXECmdl=${EXECmdl:-$HOMEcode/exec}
export FIXmdl=${FIXmdl:-$HOMEmdl/fix}
export FIXcode=${FIXcode:-$HOMEcode/fix}
export PARMmdl=${PARMmdl:-$HOMEmdl/parm}
export PARMcode=${PARMcode:-$HOMEcode/parm}
export SCRIPTSmdl=${SCRIPTSmdl:-$HOMEmdl/scripts}

##############################
# Run setpdy and initialize PDY variables
##############################
setpdy.sh
. PDY

##############################################
# Define COM directories
##############################################
export COMIN=${COMIN:-$COMROOT/${NET}/${envir}/${RUN}.${PDY}}
export COMINgfs=${COMINgfs:-$COMROOTp2/gfs/prod/gfs.${PDY}}
export COMINhourly=${COMINhourly:-$COMROOTp1/hourly/prod/hourly.$PDY}
export COMOUT=${COMOUT:-$COMROOT/${NET}/${envir}/${RUN}.${PDY}}
export PCOM=${PCOM:-${PCOMROOT}/gfsmos/}
mkdir -m 775 -p $COMOUT $PCOM

env

########################################
# EXECUTE THE SCRIPTS USING MPMD
########################################
rm -f $DATA/mpmdscript
if [[ "$stnonly" != "Y" ]]; then
   complist="metar cooprfcmeso goe higoe akgoe tstms"
   complist2="copopo3 coptype akpopo3 akptype"
else
   complist="metar cooprfcmeso tstms"
   complist2=""
fi

let ntask=0
for comp in $complist
do
   for dat in $datlist
   do
      mkdir -p $DATA/${comp}_${dat}
      if [[ "$comp" == "metar" ]]; then
         cp $SVI/rotate/hry/${dat}${obhr1} $DATA/${comp}_${dat}/sfctbl.$obhr1
      fi
      echo "($SCRIPTSretro/exgfsmos_${comp}_extfcst.sh.ecf ${dat} 2>&1 | sed 's/^/${comp}_${dat}:/')" >> $DATA/mpmdscript 

      ntask=$((ntask+1))
   done
done
for comp in $complist2
do
   mkdir -p $DATA/$comp
   echo "$SCRIPTSmdl/exgfsmos_${comp}_extprdgen.sh.ecf" >> $DATA/mpmdscript 
done

if [ $ntask -le 15 ]; then
   ptile=$ntask
else 
   ptile=15
fi

chmod 755 $DATA/mpmdscript
export MP_LABELIO=YES
export MP_STDOUTMODE=unordered
aprun -n ${ntask} -N ${ptile} -d ${OMP_NUM_THREADS} -j ${OMP_NUM_THREADS} -cc depth cfp $DATA/mpmdscript
export err=$?; err_chk

set +x
i=0
export out_dir=${out_dir:-${COMROOT}/output/${envir}/today}
for comp in $complist
do
   for dat in $datlist
   do
      out_file=$out_dir/gfsmos_forecast_${comp}_${dat}_${cyc}.o${pid}
      echo "############# OUTPUT FOR GFSMOS EXT $comp $dat#################" > $out_file
      grep -E "${comp}_${dat}:" $LSB_OUTPUTFILE | cut -d":" -f 2- >> $out_file
      cat $DATA/${comp}_${dat}/$pgmout >> $out_file
      let i=i+1
   done
done
for comp in $complist2
do
   out_file=$out_dir/gfsmos_ext_prdgen_${comp}_$cyc.o${pid}
   echo "############# OUTPUT FOR GFSMOS $comp #################" > $out_file
   ranknum=`grep "^cfp: " $LSB_OUTPUTFILE | grep "exgfsmos_${comp}_extprdgen" | grep executing | awk '{print $4}'`
   grep -E "^${ranknum}+ " $LSB_OUTPUTFILE >> $out_file
   cat $DATA/$comp/$pgmout >> $out_file
   let i=i+1
done
set -x

msg="JOB $job HAS COMPLETED NORMALLY"
postmsg $jlogfile "$msg"

if [ -e $pgmout ]; then
   cat $pgmout
fi

if [ "$KEEPDATA" != YES ]; then
   cd $DATAROOT
   rm -rf $DATA
fi

date