#!/bin/bash

# #### 08/25/1999 ###################
# SET SHELL PROCESSING VARIABLES
# ###################################
date
export PS4=' $SECONDS + '
set -x

export MIN    # 00, 15, 30, or 45

# #### 05/15/00 ###############################
# SETUP GLMP MODEL PREP PROCESSING VARIABLES
# #############################################

###############################################
# Make temp directory
###############################################
export DATA=${DATA:-${DATAROOT:?}/${jobid:?}}

mkdir -p $DATA
cd $DATA

export HOUR=$cyc
export cycle=t${cyc}z

####################################
# Specify NET and RUN Name
####################################
export NET=glmp
export RUN=glmp

####################################
# Determine Diagnostic Output Name on System
####################################
export pgmout="OUTPUT.$$"

####################################
# Specify Execution Areas
####################################
export EXECglmp=${EXECglmp:-$HOMEglmp/exec}
export FIXglmp=${FIXglmp:-$HOMEglmp/fix}
export PARMglmp=${PARMglmp:-$HOMEglmp/parm}

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

##############################################
# Define COM directories
# NOTE: $PDYp1 is set by setpdy.sh to be the 
# next day            
##############################################
export COMIN=${COMIN:-$(compath.py ${envir}/com/${NET}/${glmp_ver})/${RUN}.${PDY}}
export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${glmp_ver})/${RUN}.${PDY}}

export COMINlmp_base=${COMINlmp_base:-$(compath.py ${envir}/com/lmp/${lmp_ver})}
export COMOUTglmp_base=${COMOUTglmp_base:-$(compath.py -o ${NET}/${glmp_ver})}

mkdir -m 775 -p $COMOUT 

##########################################
# SET VARIOUS DATETIME PARAMETERS
##########################################

export DAT="$PDY$HOUR"
export DATm1=`$NDATE -1 $DAT`
export DATm2=`$NDATE -2 $DAT`
export DATm3=`$NDATE -3 $DAT`
export DATm4=`$NDATE -4 $DAT`
export HOURm1=`printf $DATm1 | cut -c 9-`
export HOURm2=`printf $DATm2 | cut -c 9-`
export HOURm3=`printf $DATm3 | cut -c 9-`
export HOURm4=`printf $DATm4 | cut -c 9-`
export PDYm1h=`echo $DATm1 | cut -c1-8`
export PDYm2h=`echo $DATm2 | cut -c1-8`
export PDYm3h=`echo $DATm3 | cut -c1-8`
export PDYm4h=`echo $DATm4 | cut -c1-8`

export COMINm1h=${COMINm1h:-$(compath.py ${envir}/com/${NET}/${glmp_ver})/${RUN}.${PDYm1h}}
export COMOUTm1h=${COMOUTm1h:-$(compath.py -o ${NET}/${glmp_ver})/${RUN}.${PDYm1h}}

env

function exists_and_sufficient_size_hrrr_subh() {
 if [ -a $1 ]; then
       filesz=`ls -l $1 | awk '{print $5}'`
       if [ "$filesz" -gt "11018" ]; then
# 11018 bytes calculated as percentage of data available from hourly hrrr data check
               return 0
       else
         printf "The file $1 has size: $filesz , It is probable that it contains missing data\n"
         return 1
       fi
 else
      printf "The  file $1 doesn't exist\n"
           return 1
 fi
}

if [ $MIN -eq '30' ] ||  [ $MIN -eq '45' ]; then

#############################################################################
# CHECK TO SEE IF CURRENT CYCLE (HH) HRRR MOS FILES EXIST, IF NOT, MAKE THEM
#############################################################################
#   if exists_and_sufficient_size_hrrr_subh $COMOUTm1/${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z ; then
   if exists_and_sufficient_size_hrrr_subh $COMOUTm1/${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlpsq ; then
      echo "found current cycle ${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlpsq from previous run, exiting ... "
   else
      echo "Making current cycle ${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlpsq"
      # build mpmdscript
      for proj in `seq -w 01 26`; do
        echo "$HOMEglmp/scripts/exglmp_hrrr_subh_fcst.sh $PDYm1h $HOURm1 $proj" >> $DATA/mpmdscript
      done
      # copy subh hrrr data to top level data directory
      cpreq $COMINlmp_base/lmp.$PDYm1h/lmp.t${HOURm1}z.hrrr_subh_m1.tdlpsq $DATA/.
   fi
      
elif [ $MIN -eq '00' ] ||  [ $MIN -eq '15' ]; then
        
###############################################################################
# CHECK TO SEE IF PREVIOUS CYCLE (HH) HRRR MOS FILES EXIST, IF NOT, MAKE THEM
###############################################################################
   if exists_and_sufficient_size_hrrr_subh $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlpsq ; then
      echo "found ${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlpsq from previous run, exiting ... "
   else
      echo "Making previous cycle ${NET}.t${HOURm2}z.hrrr3subhmos_earlyp1h_fcsts.tdlpsq"
      # build mpmdscript
      for proj in `seq -w 01 26`; do
        echo "$HOMEglmp/scripts/exglmp_hrrr_subh_fcst.sh $PDYm2h $HOURm2 $proj" >> $DATA/mpmdscript
      done
      # copy subh hrrr data to top level data directory
      cpreq $COMINlmp_base/lmp.$PDYm2h/lmp.t${HOURm2}z.hrrr_subh_m1.tdlpsq $DATA/.
   fi
         
fi

#############################################################
# EXECUTE THE SCRIPT USING CFP
#############################################################

if [ -a $DATA/mpmdscript ]; then

  chmod 755 $DATA/mpmdscript
  export MP_PGMMODEL=mpmd
  export MP_LABELIO=YES

  mpiexec --configfile $DATA/mpmdscript
  export err=$?; err_chk

  ############################################
  # CONCATENATE OUTPUT FOR ALL PROJECTIONS
  ############################################

  for proj in `seq -w 01 26`; do
    if [ $MIN -eq '30' ] ||  [ $MIN -eq '45' ]; then
       cat ${proj}/${NET}_hrrr3subhpreds_p${proj}.sq.t${HOURm1}z >> ${NET}_hrrr3subhpreds.sq.t${HOURm1}z
       cat ${proj}/${NET}_hrrr3subhmos_fcsts_p${proj}.sq.t${HOURm1}z >> ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z
       cat ${proj}/${NET}_hrrr3subhmos_fcsts_p${proj}.grsq.t${HOURm1}z >> ${NET}_grid_hrrr3mos_subh_fcsts.sq.t${HOURm1}z
    elif [ $MIN -eq '00' ] ||  [ $MIN -eq '15' ]; then
       cat ${proj}/${NET}_hrrr3subhpreds_p${proj}.sq.t${HOURm2}z >> ${NET}_hrrr3subhpreds.sq.t${HOURm2}z
       cat ${proj}/${NET}_hrrr3subhmos_fcsts_p${proj}.sq.t${HOURm2}z >> ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm2}z
       cat ${proj}/${NET}_hrrr3subhmos_fcsts_p${proj}.grsq.t${HOURm2}z >> ${NET}_grid_hrrr3mos_subh_fcsts.sq.t${HOURm2}z
    fi
  done

  ############################################
  # COPY OUTPUT TO COMOUT
  ############################################

  if test $SENDCOM = 'YES'
  then
    if [ $MIN -eq '30' ] ||  [ $MIN -eq '45' ]; then
       cpreq ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z $COMOUTm1h/${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlpsq
       cpreq ${NET}_hrrr3subhpreds.sq.t${HOURm1}z $COMOUTm1h/${NET}.t${HOURm1}z.hrrr3subhpreds.tdlpsq
       cpreq ${NET}_grid_hrrr3mos_subh_fcsts.sq.t${HOURm1}z $COMOUTglmp_base/glmp.$PDYm1h/${NET}.t${HOURm1}z.grid_hrrr3mos_subh_fcsts.tdlpsq
    elif [ $MIN -eq '00' ] ||  [ $MIN -eq '15' ]; then
       cpreq ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlpsq
       cpreq ${NET}_hrrr3subhpreds.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhpreds.tdlpsq
       cpreq ${NET}_grid_hrrr3mos_subh_fcsts.sq.t${HOURm2}z $COMOUTglmp_base/glmp.$PDYm2h/${NET}.t${HOURm2}z.grid_hrrr3mos_subh_fcsts.tdlpsq
    fi
  fi

  for proj in `seq -w 01 26`; do
    if [ -f ${proj}/$pgmout ]; then cat ${proj}/$pgmout; fi
  done

fi

#ecflow_client --event hrrr3mos_ready

if [ "${KEEPDATA^^}" != "YES" ]; then
   rm -rf $DATA
fi

date