#!/bin/bash ################################################################ # # JOB NAME: JLMP_HRRR_SUBH_FCST # # HISTORY: DEC 2022 LEONE - CREATED FROM JLMP_RAPHRRR_FCST # TO RUN HRRR SUBH SCRIPT # MAY 2024 SHAFER - MODIFIED TO OPTIMIZE RUN TIME # JUL 2024 SHAFER - MODIFIED NEW OUTPUT FILE NAMES # TO CONFORM TO STANDARD # ################################################################ date export PS4=' $SECONDS + ' set -x export MIN # 00, 15, 30, or 45 ############################################### # 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=lmp export RUN=lmp #################################### # Determine Diagnostic Output Name on System #################################### export pgmout="OUTPUT.$$" #################################### # Specify Execution Areas #################################### export EXEClmp=${EXEClmp:-$HOMElmp/exec} export FIXlmp=${FIXlmp:-$HOMElmp/fix} export FIXlmplocal=${FIXlmplocal:-$HOMElmp/fixlocal} export PARMlmp=${PARMlmp:-$HOMElmp/parm} export EXEClamp_shared=${EXEClamp_shared:-${HOMElamp_shared}/exec} HOMEmos_shared=${HOMEmos_shared:-${OPSROOT}/mos_shared.${mos_shared_ver:?}} export EXECmos_shared=${EXECmos_shared:-$HOMEmos_shared/exec} ############################## # 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}/${lmp_ver})/${RUN}.${PDY}} export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${lmp_ver})/${RUN}.${PDY}} export COMINlmp_base=${COMINlmp_base:-$(compath.py ${envir}/com/${NET}/${lmp_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}/${lmp_ver})/${RUN}.${PDYm1h}} export COMOUTm1=${COMOUTm1:-$(compath.py -o ${NET}/${lmp_ver})/${RUN}.${PDYm1h}} export COMOUTm2=${COMOUTm2:-$(compath.py -o ${NET}/${lmp_ver})/${RUN}.${PDYm2h}} 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.tdlp ; then # echo "found current cycle ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z from previous run, exiting ... " echo "found current cycle ${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlp from previous run, exiting ... " else # echo "Making current cycle ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z" echo "Making current cycle ${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlp" # build mpmdscript for proj in `seq -w 01 26`; do echo "$HOMElmp/scripts/exlmp_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_hrrr_subh_m1.sq.t${HOURm1}z $DATA/. cpreq $COMINlmp_base/lmp.$PDYm1h/lmp.t${HOURm1}z.hrrr_subh_m1.tdlpsq $DATA/lmp_hrrr_subh_m1.sq.t${HOURm1}z 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}_hrrr3subhmos_fcsts.sq.t${HOURm2}z ; then if exists_and_sufficient_size_hrrr_subh $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlp ; then echo "found ${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlp from previous run, exiting ... " else # echo "Making previous cycle ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm2}z" echo "Making previous cycle ${NET}.t${HOURm2}z.hrrr3subhmos_earlyp1h_fcsts.tdlp" # build mpmdscript for proj in `seq -w 01 26`; do echo "$HOMElmp/scripts/exlmp_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_hrrr_subh_m1.sq.t${HOURm2}z $DATA/. cpreq $COMINlmp_base/lmp.$PDYm2h/lmp.t${HOURm2}z.hrrr_subh_m1.tdlpsq $DATA/lmp_hrrr_subh_m1.sq.t${HOURm2}z 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_finalfcsts_p${proj}.sq.t${HOURm1}z >> ${NET}_hrrr3subhmos_finalfcsts.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_finalfcsts_p${proj}.sq.t${HOURm2}z >> ${NET}_hrrr3subhmos_finalfcsts.sq.t${HOURm2}z fi done for proj in `seq -w 03 26`; do if [ $MIN -eq '30' ] || [ $MIN -eq '45' ]; then cat ${proj}/${NET}_hrrr3subhmos_earlyp1h_fcsts_p${proj}.sq.t${HOURm1}z >> ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm1}z elif [ $MIN -eq '00' ] || [ $MIN -eq '15' ]; then cat ${proj}/${NET}_hrrr3subhmos_earlyp1h_fcsts_p${proj}.sq.t${HOURm2}z >> ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm2}z fi done ############################################ # COPY OUTPUT TO COMOUT ############################################ if test $SENDCOM = 'YES' then if [ $MIN -eq '30' ] || [ $MIN -eq '45' ]; then # cp ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm1}z $COMOUTm1/. cp ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm1}z $COMOUTm1/${NET}.t${HOURm1}z.hrrr3subhmos_earlyp1h_fcsts.tdlp # cp ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z $COMOUTm1/. cp ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm1}z $COMOUTm1/${NET}.t${HOURm1}z.hrrr3subhmos_fcsts.tdlp # cp ${NET}_hrrr3subhmos_finalfcsts.sq.t${HOURm1}z $COMOUTm1/. cp ${NET}_hrrr3subhmos_finalfcsts.sq.t${HOURm1}z $COMOUTm1/${NET}.t${HOURm1}z.hrrr3subhmos_finalfcsts.tdlp # cp ${NET}_hrrr3subhpreds.sq.t${HOURm1}z $COMOUTm1/. cp ${NET}_hrrr3subhpreds.sq.t${HOURm1}z $COMOUTm1/${NET}.t${HOURm1}z.hrrr3subhpreds.tdlp elif [ $MIN -eq '00' ] || [ $MIN -eq '15' ]; then # cp ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm2}z $COMOUTm2/. cp ${NET}_hrrr3subhmos_earlyp1h_fcsts.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_earlyp1h_fcsts.tdlp # cp ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm2}z $COMOUTm2/. cp ${NET}_hrrr3subhmos_fcsts.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_fcsts.tdlp # cp ${NET}_hrrr3subhmos_finalfcsts.sq.t${HOURm2}z $COMOUTm2/. cp ${NET}_hrrr3subhmos_finalfcsts.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhmos_finalfcsts.tdlp # cp ${NET}_hrrr3subhpreds.sq.t${HOURm2}z $COMOUTm2/. cp ${NET}_hrrr3subhpreds.sq.t${HOURm2}z $COMOUTm2/${NET}.t${HOURm2}z.hrrr3subhpreds.tdlp 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