#!/bin/ksh
############################################
# Set up environment for gefs2sref jobs
#
# change log:
# 05/29/2012, Jun Du: Initial program 
# 05/15/2014, Jun Du: Extended to 129hr
# 03/22/2019, Jun Du: Convert to Dell
# 02/16/2022, Jun Du: Convert to Cray/WCOSS2
#
############################################
set -xa

export OMP_NUM_THREADS=1
export MP_EUIDEVICE=sn_all
export MP_EUILIB=us
export MP_MPILIB=mpich2
export MP_TASK_AFFINITY=core:1

# ###################################
# SET SHELL PROCESSING VARIABLES
# ###################################
export PS4='$SECONDS + ' 
date

###############################
# Specify NET and RUN name
##############################
export NET=sref
export RUN=sref

###########################################
# Run sref_config to get input parameters
###########################################
export RUN_ENVIR=${RUN_ENVIR:-nco}
if [ "$RUN_ENVIR" != nco ]          ### For Developers
then
  CONFIG_FILE=${CONFIG_FILE:-/lfs/h2/emc/lam/noscrub/${LOGNAME}/sref.v7_cray/parm/sref_para_config_cray}
  . $CONFIG_FILE
  export userid=$LOGNAME
  export DATA_IN=${DATA_IN:-/lfs/h2/emc/ptmp/$userid}
fi

#
# obtain unique process id (pid) and make temp directories
#
export DATA_IN=${DATA_IN:-${DATAROOT}}

if [ ${RUN_ENVIR} != nco ] ; then 
 export DATA=$DATA_IN/sref_gefs2sref_${cyc}
else
 export DATA=$DATA_IN/${jobid:?}
fi

mkdir $DATA
cd $DATA

####################################
# File To Log Msgs
####################################
export jlogfile=${jlogfile:-$DATA/jlogfile.${job}.$$}

####################################
# Determine Job Output Name on System
####################################
export pgmout="OUTPUT.$$"
export pgmerr=errfile

export cycle=t${cyc}z


##################################################
# SAVEGES  - Copy Files From TMPDIR to $GESdir
# SENDECF  - Flag Events on ecFflow
# SENDCOM  - Copy Files From TMPDIR to $COMOUT
# SENDDBN  - Issue DBNet Client Calls
# RERUN    - Rerun fcst from beginning (default no)
##################################################
export SENDCOM=${SENDCOM:-YES}
export SENDECF=${SENDECF:-YES}
export SENDDBN=${SENDDBN:-YES}

export HOMEsref=${HOMEsref:-${PACKAGEROOT}/${NET}.${sref_ver}}
export EXECsref=${EXECsref:-$HOMEsref/exec}
export FIXsref=${FIXsref:-$HOMEsref/fix}
export PARMsref=${PARMsref:-$HOMEsref/parm}
export USHsref=${USHsref:-$HOMEsref/ush}
export GEMPAKsref=${GEMPAKsref:-$HOMEsref/gempak}

# A temporary link to cnvgrib
export CNVGRIB=$HOMEsref/util/cnvgrib

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


# Run setup to initialize working directory and utility scripts
msg="JOB $job HAS BEGUN"
postmsg $jlogfile "$msg"

if [ $cyc -eq 03 ]; then
 export gefscyc=00
fi
if [ $cyc -eq 09 ]; then
 export gefscyc=06
fi
if [ $cyc -eq 15 ]; then
 export gefscyc=12
fi
if [ $cyc -eq 21 ]; then
 export gefscyc=18
fi
typeset -Z2 gefscyc

########################################################
# Define COMIN and COMOUT
########################################################
if [ ${RUN_ENVIR} != nco ] ; then
export COM_IN=${COM_IN:-${COMROOT}/${NET}/${envir}}
export COMIN=${COMIN:-$COM_IN/${RUN}.${PDY}/pgrb_gefs/$gefscyc}

export COM_OUT=${COM_OUT:-${COMROOT}/${NET}/${envir}}
export COMOUT=${COMOUT:-$COM_OUT/${RUN}.${PDY}/ensprod_gefs/$gefscyc}

else
export COM_IN=${COM_IN:-$(compath.py ${NET}/${sref_ver})}
export COMIN=${COMIN:-$COM_IN/${RUN}.${PDY}/pgrb_gefs/$gefscyc}

export COM_OUT=${COM_OUT:-$(compath.py ${NET}/${sref_ver})}
export COMOUT=${COMOUT:-$COM_OUT/${RUN}.${PDY}/ensprod_gefs/$gefscyc}
fi

mkdir -p $COMIN $COMOUT
 
#######################################################
# Pass information which is needed to run the Script
#######################################################
export ENDHOUR=192
export INCHOUR=3

env

###################################################
# Execute the Scripts
###################################################
#1. Convert gefs to sref
mkdir -m 775 $DATA/gefs2sref
cd $DATA/gefs2sref
rm -rf $DATA/gefs2sref/poescript

HR=00
while [ $HR -le $ENDHOUR ]
do
 if [ $HR -ge 126 ];then export INCHOUR=06;fi
 mkdir -m 775 $DATA/gefs2sref/$HR
 echo "$HOMEsref/scripts/exsref_gefs2sref.sh $HR > $DATA/gefs2sref/${HR}.out" >>$DATA/gefs2sref/poescript
 HR=`expr $HR + $INCHOUR`
 if [ $HR -lt 10 ]; then HR=0$HR; fi
done
chmod 775 $DATA/gefs2sref/poescript
export MP_PGMMODEL=mpmd
export MP_CMDFILE=$DATA/gefs2sref/poescript
#mpiexec cfp $DATA/gefs2sref/poescript
#mpiexec -n 1 -ppn $NCPUS --cpu-bind core cfp $DATA/gefs2sref/poescript
mpiexec --cpu-bind core --configfile $DATA/gefs2sref/poescript

#2. Create ensemble product
# Reset initial interval for input files
export INCHOUR=3

mkdir -p $DATA/212_3hrly
cd $DATA/212_3hrly
$HOMEsref/scripts/exsref_enspost4GEFS.sh 3hrly 212 222 > $DATA/212_3hrly.out 

mkdir -p $DATA/243_3hrly
cd $DATA/243_3hrly
$HOMEsref/scripts/exsref_enspost4GEFS.sh 3hrly 243 222 > $DATA/243_3hrly.out 

mkdir -p $DATA/216_3hrly
cd $DATA/216_3hrly
$HOMEsref/scripts/exsref_enspost4GEFS.sh 3hrly 216 222 > $DATA/216_3hrly.out 

cd $DATA
cat $DATA/212_3hrly.out >>$pgmout
cat $DATA/243_3hrly.out >>$pgmout
cat $DATA/216_3hrly.out >>$pgmout
###################################################

cat $pgmout

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

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

################################
# Remove the Working Directory
################################
cd $DATA_IN
 if [ ${KEEPDATA:-NO} != YES ]; then rm -rf $DATA; fi

date