From 5867d4b3de7b6ee7d8f913d573b4a0f44d973320 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Fri, 24 Jul 2020 15:00:41 +0000 Subject: [PATCH 01/27] updates from gefs post workflow: updates for re-run case as well as extra error messages --- scripts/exwave_post_sbs.sh | 91 ++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 18 deletions(-) diff --git a/scripts/exwave_post_sbs.sh b/scripts/exwave_post_sbs.sh index a836fa85f9..4de59ef547 100755 --- a/scripts/exwave_post_sbs.sh +++ b/scripts/exwave_post_sbs.sh @@ -106,6 +106,15 @@ [[ "$LOUD" = YES ]] && set -x +# 0.c.5 Define CDATE_POST as a function of RERUN variable setting + if [ "${RERUN}" = "YES" ]; then + export CDATE_POST=${CDATE_RST} + export FHRUN=`$NHOUR ${CDATE_RST} ${CDATE}` + else # regular run + export CDATE_POST=${CDATE} + export FHRUN=0 + fi + # --------------------------------------------------------------------------- # # 1. Get files that are used by most child scripts @@ -252,6 +261,7 @@ echo '*********************************************** ' echo ' ' [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : GRINT template file missing." postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRINT INPUT FILE" exit_code=1 DOGRI_WAV='NO' @@ -339,7 +349,7 @@ if [ "$DOSPC_WAV" = 'YES' ] || [ "$DOBLL_WAV" = 'YES' ] then - ymdh=`$NDATE -${WAVHINDH} $CDATE` + ymdh=`$NDATE -${WAVHINDH} $CDATE_POST` tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" dtspec=3600. # default time step (not used here) sed -e "s/TIME/$tstart/g" \ @@ -350,9 +360,8 @@ ww3_outp_spec.inp.tmpl > ww3_outp.inp ln -s mod_def.$waveuoutpGRD mod_def.ww3 - fhr=$FHMIN_WAV - YMD=$(echo $CDATE | cut -c1-8) - HMS="$(echo $CDATE | cut -c9-10)0000" + YMD=$(echo $CDATE_POST | cut -c1-8) + HMS="$(echo $CDATE_POST | cut -c9-10)0000" tloop=0 tloopmax=600 tsleep=10 @@ -385,7 +394,8 @@ echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' echo '******************************************** ' echo ' ' - cat buoy_tmp.loc + cat buoy_tmp.loc + echo "$WAV_MOD_TAG post $date $cycle : buoy log file failed to be created." echo $msg [[ "$LOUD" = YES ]] && set -x err=4;export err;${errchk} @@ -445,13 +455,15 @@ else set +x echo ' ' - echo '**************************************** ' - echo '*** ERROR : NO IBP LOG FILE CREATED *** ' - echo '**************************************** ' + echo '********************************************** ' + echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' + echo '********************************************** ' echo ' ' [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" err=6;export err;${errchk} + exit $err DOIBP_WAV='NO' fi fi @@ -489,7 +501,20 @@ # 1.a.2 Loop over forecast time to generate post files # When executed side-by-side, serial mode (cfp when run after the fcst step) - fhr=$FHMIN_WAV +# Contingency for RERUN=YES + if [ "${RERUN}" = "YES" ]; then + fhr=$((FHRUN + FHMIN_WAV)) + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi +# Get minimum value to start count from fhr+min(fhrp,fhrg) + fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` + fhr=$((fhr + fhrinc)) + else + fhr=$FHMIN_WAV + fi fhrp=$fhr fhrg=$fhr iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) @@ -503,8 +528,10 @@ fcmdnow=cmdfile.${FH3} fcmdigrd=icmdfile.${FH3} - fcmdpnt=pcmdfile.${FH3} - fcmdibp=ibpcmdfile.${FH3} + if [ "${DOPNT_WAV}" = "YES" ]; then + fcmdpnt=pcmdfile.${FH3} + fcmdibp=ibpcmdfile.${FH3} + fi rm -f ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} touch ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} mkdir output_$YMDHMS @@ -521,6 +548,7 @@ if [ $fhr = $fhrg ] then + iwait=0 for wavGRD in ${waveGRD} ; do gfile=$COMIN/rundata/${WAV_MOD_TAG}.out_grd.${wavGRD}.${YMD}.${HMS} while [ ! -s ${gfile} ]; do sleep 10; done @@ -530,6 +558,7 @@ echo '*************************************************** ' echo ' ' [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $grdID $date $cycle : field output missing." postmsg "$jlogfile" "NON-FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID" DOFLD_WAVE='NO' err=7; export err;${errchk} @@ -686,9 +715,9 @@ then set +x echo ' ' - echo '********************************************' - echo '*** CMDFILE FAILED ***' - echo '********************************************' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' echo ' See Details Below ' echo ' ' [[ "$LOUD" = YES ]] && set -x @@ -704,6 +733,22 @@ FHINCG=$(( DTFLD_WAV / 3600 )) if [ $fhr = $fhrg ] then +# Check if grib2 file created + ENSTAG="" + if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi + gribchk=${COMPONENTwave}.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 + if [ ! -s ${COMOUT}/gridded/${gribchk} ]; then + set +x + echo ' ' + echo '********************************************' + echo "*** FATAL ERROR: $gribchk not generated " + echo '********************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=8; export err;${errchk} + exit $err + fi if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then FHINCG=$FHOUT_HF_WAV else @@ -716,9 +761,17 @@ fhrp=$((fhr+FHINCP)) fi echo $fhrg $fhrp - fhr=$([ $fhrg -le $fhrp ] && echo "$fhrg" || echo "$fhrp") # reference fhr is the least between grid and point stride + + if [ "${DOPNT_WAV}" = "YES" ]; then + fhr=$([ $fhrg -le $fhrp ] && echo "$fhrg" || echo "$fhrp") # reference fhr is the least between grid and point stride + else + fhr=$fhrg # no point output, loop with out_grd stride + fi + done + if [ "${DOPNT_WAV}" = "YES" ]; then + # --------------------------------------------------------------------------- # # 3. Compress point output data into tar files @@ -762,6 +815,7 @@ echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile fi fi + fi wavenproc=`wc -l cmdtarfile | awk '{print $1}'` wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` @@ -791,9 +845,9 @@ then set +x echo ' ' - echo '********************************************' - echo '*** CMDFILE FAILED ***' - echo '********************************************' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' echo ' See Details Below ' echo ' ' [[ "$LOUD" = YES ]] && set -x @@ -815,6 +869,7 @@ if [ "$exit_code" -ne '0' ] then + echo " FATAL ERROR: Problem in MWW3 POST" msg="ABNORMAL EXIT: Problem in MWW3 POST" postmsg "$jlogfile" "$msg" echo $msg From 4888001e76d24277b3a75d1d520945383f49d456 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Fri, 14 Aug 2020 18:55:40 +0000 Subject: [PATCH 02/27] updates for wave scripts to split them, also added updates from GEFS branch to add extra error checking --- scripts/exwave_post_boundpnts.sh | 615 +++++++++++++++++++++++++ scripts/exwave_post_gridded_sbs.sh | 475 ++++++++++++++++++++ scripts/exwave_post_points.sh | 691 +++++++++++++++++++++++++++++ ush/wave_grib2_sbs.sh | 32 +- 4 files changed, 1810 insertions(+), 3 deletions(-) create mode 100755 scripts/exwave_post_boundpnts.sh create mode 100755 scripts/exwave_post_gridded_sbs.sh create mode 100755 scripts/exwave_post_points.sh diff --git a/scripts/exwave_post_boundpnts.sh b/scripts/exwave_post_boundpnts.sh new file mode 100755 index 0000000000..2a8a57a9b0 --- /dev/null +++ b/scripts/exwave_post_boundpnts.sh @@ -0,0 +1,615 @@ +#!/bin/bash +# +################################################################################ +# +# UNIX Script Documentation Block +# Script name: exwave_post_sbs.sh +# Script description: Creates output products from binary WW3 data +# +# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 +# Abstract: This script is the postprocessor for the wave component in GFS. +# This version runs side-by-side with the GFS fcst step. +# It executes several scripts forpreparing and creating output data +# as follows: +# +# wave_outp_spec.sh : generates spectral data for output locations. +# wave_tar.sh : tars the spectral and bulletin multiple files +# +# Script history log: +# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 +# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-30 Jessica Meixner: Points only - no gridded data +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (Bash) Shell +# Machine: WCOSS-DELL-P3 +# +############################################################################### +# +# --------------------------------------------------------------------------- # +# 0. Preparations +# 0.a Basic modes of operation + + set -x + # Use LOUD variable to turn on/off trace. Defaults to YES (on). + export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES + [[ "$LOUD" != YES ]] && set +x + + cd $DATA + + postmsg "$jlogfile" "HAS BEGUN on `hostname`" + + msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" + postmsg "$jlogfile" "$msg" + + set +x + echo ' ' + echo ' *********************************' + echo ' *** WAVE POSTPROCESSOR SCRIPT ***' + echo ' *********************************' + echo ' ' + echo "Starting at : `date`" + echo '-------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# Script will run only if pre-defined NTASKS +# The actual work is distributed over these tasks. + if [ -z ${NTASKS} ] + then + echo "FATAL ERROR: requires NTASKS to be set " + err=1; export err;${errchk} + exit $err + fi + +# 0.c Defining model grids + + waveuoutpGRD=${waveuoutpGRD:?buoyNotSet} + +# 0.c.4 Define a temporary directory for storing ascii point output files +# and flush it + + export STA_DIR=$DATA/station_ascii_files + if [ -d $STA_DIR ] + then + rm -rf ${STA_DIR} + fi + mkdir -p ${STA_DIR} + mkdir -p ${STA_DIR}/spec + mkdir -p ${STA_DIR}/ibp + + set +x + echo ' ' + echo 'Grid information :' + echo '-------------------' + echo " Output points : $waveuoutpGRD" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# --------------------------------------------------------------------------- # +# 1. Get files that are used by most child scripts + + export DOIBP_WAV='YES' # Input boundary points + export DOPNT_WAV='YES' # Station data + export DOSPC_WAV='NO' # Spectral post + + exit_code=0 + + set +x + echo ' ' + echo 'Preparing input files :' + echo '-----------------------' + [[ "$LOUD" = YES ]] && set -x + +# 1.a Model definition files and output files (set up using poe) + +# 1.a.1 Set up the parallel command tasks + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + + [[ "$LOUD" = YES ]] && set -x + +# Copy model definition files + for grdID in $waveuoutpGRD + do + if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + then + set +x + echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." + [[ "$LOUD" = YES ]] && set -x + + cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + iloop=`expr $iloop + 1` + fi + done + + for grdID in $waveuoutpGRD + do + if [ ! -f mod_def.$grdID ] + then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" + err=2; export err;${errchk} + exit $err + else + set +x + echo "File mod_def.$grdID found. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + fi + done + +# 1.c Output locations file + + rm -f buoy.loc + + if [ -f $FIXwave/wave_${NET}.buoys ] + then + cp -f $FIXwave/wave_${NET}.buoys buoy.loc.temp +# Reverse grep to exclude IBP points + sed -n '/^\$.*/!p' buoy.loc.temp | grep -v IBP > buoy.loc + fi + + if [ -s buoy.loc ] + then + set +x + echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '************************************* ' + echo ' FATAL ERROR : NO BUOY LOCATION FILE ' + echo '************************************* ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" + err=3; export err;${errchk} + exit $err + DOPNT_WAV='NO' + DOSPC_WAV='NO' + fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + sed -n '/^\$.*/!p' buoy.loc.temp | grep IBP > buoy.ibp + if [ -s buoy.ibp ]; then + set +x + echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '***************************************** ' + echo ' FATAL ERROR : NO IBP BUOY LOCATION FILE ' + echo '***************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO IBP BUOY LOCATION FILE" + err=4; export err;${errchk} + exit $err + DOIBP_WAV='NO' + fi + fi + +# 1.d Input template files + + if [ -f $FIXwave/ww3_outp_spec.inp.tmpl ] + then + cp -f $FIXwave/ww3_outp_spec.inp.tmpl ww3_outp_spec.inp.tmpl + fi + + if [ -f ww3_outp_spec.inp.tmpl ] + then + set +x + echo " ww3_outp_spec.inp.tmpl copied. Syncing to all grids ..." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '*********************************************** ' + echo '*** ERROR : NO TEMPLATE FOR SPEC INPUT FILE *** ' + echo '*********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR SPEC INPUT FILE" + exit_code=3 + fi + + +# 1.e Getting buoy information for points + + ymdh=`$NDATE -${WAVHINDH} $CDATE` + tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" + dtspec=3600. # default time step (not used here) + sed -e "s/TIME/$tstart/g" \ + -e "s/DT/$dtspec/g" \ + -e "s/POINT/1/g" \ + -e "s/ITYPE/0/g" \ + -e "s/FORMAT/F/g" \ + ww3_outp_spec.inp.tmpl > ww3_outp.inp + + ln -s mod_def.$waveuoutpGRD mod_def.ww3 + YMD=$(echo $CDATE | cut -c1-8) + HMS="$(echo $CDATE | cut -c9-10)0000" + if [ -f $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ] + then + ln -s $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ./out_pnt.${waveuoutpGRD} + else + echo '*************************************************** ' + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.${waveuoutpGRD}.${YMD}.${HMS} " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $waveuoutpGRD $CDATE $cycle : field output missing." + postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.${waveuoutpGRD}.${YMD}.${HMS}" + err=5; export err;${errchk} + fi + + rm -f buoy_tmp.loc buoy_log.ww3 ww3_oup.inp + ln -fs ./out_pnt.${waveuoutpGRD} ./out_pnt.ww3 + ln -fs ./mod_def.${waveuoutpGRD} ./mod_def.ww3 + $EXECwave/ww3_outp > buoy_lst.loc 2>&1 + err=$? + + if [ "$err" != '0' ] && [ ! -f buoy_log.ww3 ] + then + pgm=wave_post + msg="ABNORMAL EXIT: ERROR IN ww3_outp" + postmsg "$jlogfile" "$msg" + set +x + echo ' ' + echo '******************************************** ' + echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' + echo '******************************************** ' + echo ' ' + cat buoy_tmp.loc + echo "$WAV_MOD_TAG post $date $cycle : buoy log file failed to be created." + echo $msg + [[ "$LOUD" = YES ]] && set -x + err=6;export err;${errchk} + exit $err + fi + + +# Create new buoy_log.ww3 including all IBP files + if [ "$DOIBP_WAV" = 'YES' ]; then + cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags + grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp + rm -f buoy_log.ibp + mv buoy_log.tmp buoy_log.ibp + + grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc + sed '$d' buoy_tmp1.loc > buoy_tmp2.loc + ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` + Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` + rm -f buoy_tmp1.loc buoy_tmp2.loc + if [ -s buoy_log.ibp ] + then + set +x + echo 'IBP log file created. Syncing to all nodes ...' + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '********************************************** ' + echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' + echo '********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." + postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" + err=8;export err;${errchk} + exit $err + fi + fi + +# 1.f Data summary + + set +x + echo ' ' + echo " Input files read and processed at : `date`" + echo ' ' + echo ' Data summary : ' + echo ' ---------------------------------------------' + echo " Sufficient data for Input Boundary Points : $DOIBP_WAV ($Nibp points)" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# --------------------------------------------------------------------------- # +# 2. Make consolidated grib2 file for side-by-side grids and interpolate +# onto extended grids +# +# 2.a Command file set-up + + set +x + echo ' Making command file for sbs grib2 and GRID Interpolation ' + [[ "$LOUD" = YES ]] && set -x + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + +# 1.a.2 Loop over forecast time to generate post files +# When executed side-by-side, serial mode (cfp when run after the fcst step) +# Contingency for RERUN=YES + if [ "${RERUN}" = "YES" ]; then + fhr=$((FHRUN + FHMIN_WAV)) + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi +# Get minimum value to start count from fhr+min(fhrp,fhrg) + fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` + fhr=$((fhr + fhrinc)) + else + fhr=$FHMIN_WAV + fi + fhrp=$fhr + fhrg=$fhr + iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) + while [ $fhr -le $FHMAX_WAV ]; do + + ymdh=`$NDATE $fhr $CDATE` + YMD=$(echo $ymdh | cut -c1-8) + HMS="$(echo $ymdh | cut -c9-10)0000" + YMDHMS=${YMD}${HMS} + FH3=$(printf %03i $fhr) + + fcmdnow=cmdfile.${FH3} + fcmdigrd=icmdfile.${FH3} + if [ "${DOPNT_WAV}" = "YES" ]; then + fcmdpnt=pcmdfile.${FH3} + fcmdibp=ibpcmdfile.${FH3} + fi + rm -f ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} + touch ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} + mkdir output_$YMDHMS + cd output_$YMDHMS + +# Create instances of directories for spec and gridded output + export SPECDATA=${DATA}/output_$YMDHMS + export BULLDATA=${DATA}/output_$YMDHMS + export GRIBDATA=${DATA}/output_$YMDHMS + export GRDIDATA=${DATA}/output_$YMDHMS + ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 + +# Point output part (can be split or become meta-task to reduce resource usage) + if [ $fhr = $fhrp ] + then + pfile=$COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} + if [ -f ${pfile} ] + then + ln -fs ${pfile} ./out_pnt.${waveuoutpGRD} + else + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD.${YMD}.${HMS} + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD.${YMD}.${HMS} + err=9; export err;${errchk} + exit $err + fi + + if [ "$DOSPC_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $buoys + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec > spec_$buoy.out 2>&1" >> ${fcmdnow} + done + fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $ibpoints + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} + done + fi + + fi + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' ${fcmdnow} ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdmfile.$nfile + echo "$nfile cmdmfile.$nfile" >> cmdmprog + chmod 744 cmdmfile.$nfile + fi + echo $line >> cmdmfile.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=`wc -l ${fcmdnow} | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + + set +x + echo ' ' + echo " Executing the grib2_sbs scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog + else + ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} + fi + exit=$? + else + chmod 744 ${fcmdnow} + ./${fcmdnow} + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=10; export err;${errchk} + exit $err + fi + + rm -f out_grd.* # Remove large binary grid output files + + cd $DATA + + FHINCP=$(( DTPNT_WAV / 3600 )) + if [ $fhr = $fhrp ] + then + fhrp=$((fhr+FHINCP)) + fi + echo $fhrp + + fhr=$fhp # no gridded output, loop with out_pnt stride + + done + + if [ "${DOPNT_WAV}" = "YES" ]; then + +# --------------------------------------------------------------------------- # +# 3. Compress point output data into tar files + +# 3.a Set up cmdfile + + rm -f cmdtarfile + touch cmdtarfile + chmod 744 cmdtarfile + + set +x + echo ' ' + echo ' Making command file for taring all point output files.' + + [[ "$LOUD" = YES ]] && set -x + +# 6.b Spectral data files + + if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + else + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile + fi + fi + if [ "$DOSPC_WAV" = 'YES' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + else + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + fi + fi + + wavenproc=`wc -l cmdtarfile | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + + set +x + echo ' ' + echo " Executing the wave_tar scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile + else + ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile + fi + exit=$? + else + chmod 744 cmdtarfile + ./cmdtarfile + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=11; export err;${errchk} + exit $err + fi + +# --------------------------------------------------------------------------- # +# 7. Ending output + + set +x + echo ' ' + echo "Ending at : `date`" + echo '-----------' + echo ' ' + echo ' *** End of MWW3 postprocessor ***' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$exit_code" -ne '0' ] + then + echo " FATAL ERROR: Problem in MWW3 POST" + msg="ABNORMAL EXIT: Problem in MWW3 POST" + postmsg "$jlogfile" "$msg" + echo $msg + err=12; export err;${errchk} + exit $err + else + echo " Side-by-Side Wave Post Completed Normally " + msg="$job completed normally" + postmsg "$jlogfile" "$msg" + exit 0 + fi + +# End of MWW3 prostprocessor script ---------------------------------------- # diff --git a/scripts/exwave_post_gridded_sbs.sh b/scripts/exwave_post_gridded_sbs.sh new file mode 100755 index 0000000000..d50b3edd18 --- /dev/null +++ b/scripts/exwave_post_gridded_sbs.sh @@ -0,0 +1,475 @@ +#!/bin/bash +# +################################################################################ +# +# UNIX Script Documentation Block +# Script name: exwave_post_sbs.sh +# Script description: Creates output products from binary WW3 data +# +# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 +# Abstract: This script is the postprocessor for the wave component in GFS. +# This version runs side-by-side with the GFS fcst step. +# It executes several scripts forpreparing and creating output data +# as follows: +# +# wave_grib2_sbs.sh : generates GRIB2 files. +# wave_grid_interp_ush.sh : interpolates data from new grids to old grids +# +# Script history log: +# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 +# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-31 Jessica Meixner: Removing points, now gridded data only +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (Bash) Shell +# Machine: WCOSS-DELL-P3 +# +############################################################################### +# +# --------------------------------------------------------------------------- # +# 0. Preparations +# 0.a Basic modes of operation + + set -x + # Use LOUD variable to turn on/off trace. Defaults to YES (on). + export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES + [[ "$LOUD" != YES ]] && set +x + + cd $DATA + + postmsg "$jlogfile" "HAS BEGUN on `hostname`" + + msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" + postmsg "$jlogfile" "$msg" + + set +x + echo ' ' + echo ' *********************************' + echo ' *** WAVE POSTPROCESSOR SCRIPT ***' + echo ' *********************************' + echo ' ' + echo "Starting at : `date`" + echo '-------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# Script will run only if pre-defined NTASKS +# The actual work is distributed over these tasks. + if [ -z ${NTASKS} ] + then + echo "FATAL ERROR: requires NTASKS to be set " + err=1; export err;${errchk} + exit $err + fi + +# 0.c Defining model grids + +# 0.c.1 Grids + + export waveGRD=${waveGRD?Var waveGRD Not Set} + export wavesbsGRD=${wavesbsGRD?Var wavesbsGRD Not Set} + +# 0.c.2 extended global grid and rtma transfer grid + export waveinterpGRD=${waveinterpGRD?Var wavepostGRD Not Set} + export wavepostGRD=${wavepostGRD?Var wavepostGRD Not Set} + + + set +x + echo ' ' + echo 'Grid information :' + echo '-------------------' + echo " Native wave grids : $waveGRD" + echo " Side-by-side grids : $wavesbsGRD" + echo " Interpolated grids : $waveinterpGRD" + echo " Post-process grids : $wavepostGRD" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + +# 0.c.3 Define CDATE_POST as a function of RERUN variable setting + if [ "${RERUN}" = "YES" ]; then + export CDATE_POST=${CDATE_RST} + export FHRUN=`$NHOUR ${CDATE_RST} ${CDATE}` + else # regular run + export CDATE_POST=${CDATE} + export FHRUN=0 + fi + +# --------------------------------------------------------------------------- # +# 1. Get files that are used by most child scripts + + export DOGRB_WAV='YES' #Create grib2 files + export DOGRI_WAV='YES' #Create interpolated grids + + exit_code=0 + + set +x + echo ' ' + echo 'Preparing input files :' + echo '-----------------------' + [[ "$LOUD" = YES ]] && set -x + +# 1.a Model definition files and output files (set up using poe) + +# 1.a.1 Copy model definition files + for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD + do + if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + then + set +x + echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." + [[ "$LOUD" = YES ]] && set -x + + cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + fi + done + +# 1.a.2 Check that model definition files exist + for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD + do + if [ ! -f mod_def.$grdID ] + then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" + err=2; export err;${errchk} + exit $err + DOGRB_WAV='NO' + else + set +x + echo "File mod_def.$grdID found. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + fi + done + + +# 1.b Input template files + + if [ "$DOGRI_WAV" = 'YES' ] + then + for intGRD in $waveinterpGRD + do + if [ -f $FIXwave/${intGRD}_interp.inp.tmpl ] + then + cp -f $FIXwave/${intGRD}_interp.inp.tmpl ${intGRD}_interp.inp.tmpl + fi + + if [ -f ${intGRD}_interp.inp.tmpl ] + then + set +x + echo " ${intGRD}_interp.inp.tmpl copied. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '*********************************************** ' + echo '*** ERROR : NO TEMPLATE FOR GRINT INPUT FILE *** ' + echo '*********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : GRINT template file missing." + postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRINT INPUT FILE" + exit_code=1 + DOGRI_WAV='NO' + fi + done + fi + + if [ "$DOGRB_WAV" = 'YES' ] + then + for grbGRD in $waveinterpGRD $wavepostGRD + do + if [ -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ] + then + cp -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ww3_grib2.${grbGRD}.inp.tmpl + fi + + if [ -f ww3_grib2.${grbGRD}.inp.tmpl ] + then + set +x + echo " ww3_grib2.${grbGRD}.inp.tmpl copied. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '*********************************************** ' + echo "*** ERROR : NO TEMPLATE FOR ${grbGRD} GRIB INPUT FILE *** " + echo '*********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRIB2 INPUT FILE" + exit_code=2 + DOGRB_WAV='NO' + fi + done + fi + + +# 1.c Data summary + + set +x + echo ' ' + echo " Input files read and processed at : `date`" + echo ' ' + echo ' Data summary : ' + echo ' ---------------------------------------------' + echo " Sufficient data for GRID interpolation : $DOGRI_WAV" + echo " Sufficient data for GRIB files : $DOGRB_WAV" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# --------------------------------------------------------------------------- # +# 2. Make consolidated grib2 file for side-by-side grids and interpolate +# onto extended grids +# +# 2.a Command file set-up + + set +x + echo ' Making command file for sbs grib2 and GRID Interpolation ' + [[ "$LOUD" = YES ]] && set -x + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + +# 1.a.2 Loop over forecast time to generate post files +# When executed side-by-side, serial mode (cfp when run after the fcst step) +# Contingency for RERUN=YES + if [ "${RERUN}" = "YES" ]; then + fhr=$((FHRUN + FHMIN_WAV)) + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi + fhr=$((fhr + FHINCG)) + else + fhr=$FHMIN_WAV + fi + fhrg=$fhr + iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) + while [ $fhr -le $FHMAX_WAV ]; do + + ymdh=`$NDATE $fhr $CDATE` + YMD=$(echo $ymdh | cut -c1-8) + HMS="$(echo $ymdh | cut -c9-10)0000" + YMDHMS=${YMD}${HMS} + FH3=$(printf %03i $fhr) + + fcmdnow=cmdfile.${FH3} + fcmdigrd=icmdfile.${FH3} + rm -f ${fcmdnow} ${fcmdigrd} + touch ${fcmdnow} ${fcmdigrd} + mkdir output_$YMDHMS + cd output_$YMDHMS + +# Create instances of directories for gridded output + export GRIBDATA=${DATA}/output_$YMDHMS + export GRDIDATA=${DATA}/output_$YMDHMS + +# Gridded data (main part, need to be run side-by-side with forecast + + if [ $fhr = $fhrg ] + then + iwait=0 + for wavGRD in ${waveGRD} ; do + gfile=$COMIN/rundata/${WAV_MOD_TAG}.out_grd.${wavGRD}.${YMD}.${HMS} + while [ ! -s ${gfile} ]; do sleep 10; done + if [ $iwait -eq $iwaitmax ]; then + echo '*************************************************** ' + echo " FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $grdID $date $cycle : field output missing." + postmsg "$jlogfile" "NON-FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID" + err=3; export err;${errchk} + exit $err + fi + ln -s ${gfile} ./out_grd.${wavGRD} + done + + if [ "$DOGRI_WAV" = 'YES' ] + then + nigrd=1 + for grdID in $waveinterpGRD + do + case $grdID in + glo_15mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; + glo_30mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; + esac + echo "$USHwave/wave_grid_interp_sbs.sh $grdID $ymdh_int $dt_int $n_int > grint_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} + if [ "$DOGRB_WAV" = 'YES' ] + then + gribFL=\'`echo ${OUTPARS_WAV}`\' + case $grdID in + glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_30mxt) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=11 ;; + esac + echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} + fi + echo "pwd" >> ${fcmdnow} + echo "${GRIBDATA}/${fcmdigrd}.${nigrd}" >> ${fcmdnow} + chmod 744 ${fcmdigrd}.${nigrd} + nigrd=$((nigrd+1)) + done + fi + + if [ "$DOGRB_WAV" = 'YES' ] + then + for grdID in ${wavepostGRD} # First concatenate grib files for sbs grids + do + gribFL=\'`echo ${OUTPARS_WAV}`\' + case $grdID in + aoc_9km) GRDNAME='arctic' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; + ant_9km) GRDNAME='antarc' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; + glo_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + gnh_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + gsh_15m) GRDNAME='gsouth' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_15m) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + ao_20m) GRDNAME='arctic' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; + so_20m) GRDNAME='antarc' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; + glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + esac + echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdnow} + done + fi + + fi + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' ${fcmdnow} ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdmfile.$nfile + echo "$nfile cmdmfile.$nfile" >> cmdmprog + chmod 744 cmdmfile.$nfile + fi + echo $line >> cmdmfile.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=`wc -l ${fcmdnow} | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + + set +x + echo ' ' + echo " Executing the grib2_sbs scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog + else + ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} + fi + exit=$? + else + chmod 744 ${fcmdnow} + ./${fcmdnow} + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=4; export err;${errchk} + exit $err + fi + + rm -f out_grd.* # Remove large binary grid output files + + cd $DATA + + FHINCG=$(( DTFLD_WAV / 3600 )) + if [ $fhr = $fhrg ] + then +# Check if grib2 file created + ENSTAG="" + if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi + gribchk=${COMPONENTwave}.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 + if [ ! -s ${COMOUT}/gridded/${gribchk} ]; then + set +x + echo ' ' + echo '********************************************' + echo "*** FATAL ERROR: $gribchk not generated " + echo '********************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=5; export err;${errchk} + exit $err + fi + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi + fhrg=$((fhr+FHINCG)) + fi + echo $fhrg + + fhr=$fhrg #loop with out_grd stride + + done + +# --------------------------------------------------------------------------- # +# 7. Ending output + + set +x + echo ' ' + echo "Ending at : `date`" + echo '-----------' + echo ' ' + echo ' *** End of MWW3 postprocessor ***' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$exit_code" -ne '0' ] + then + echo " FATAL ERROR: Problem in MWW3 POST" + msg="ABNORMAL EXIT: Problem in MWW3 POST" + postmsg "$jlogfile" "$msg" + echo $msg + err=6; export err;${errchk} + exit $err + else + echo " Side-by-Side Wave Post Completed Normally " + msg="$job completed normally" + postmsg "$jlogfile" "$msg" + exit 0 + fi + +# End of MWW3 prostprocessor script ---------------------------------------- # diff --git a/scripts/exwave_post_points.sh b/scripts/exwave_post_points.sh new file mode 100755 index 0000000000..f6fe29f65b --- /dev/null +++ b/scripts/exwave_post_points.sh @@ -0,0 +1,691 @@ +#!/bin/bash +# +################################################################################ +# +# UNIX Script Documentation Block +# Script name: exwave_post_sbs.sh +# Script description: Creates output products from binary WW3 data +# +# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 +# Abstract: This script is the postprocessor for the wave component in GFS. +# This version runs side-by-side with the GFS fcst step. +# It executes several scripts forpreparing and creating output data +# as follows: +# +# wave_outp_spec.sh : generates spectral data for output locations. +# wave_outp_bull.sh : generates bulletins for output locations. +# wave_tar.sh : tars the spectral and bulletin multiple files +# +# Script history log: +# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 +# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-30 Jessica Meixner: Points only - no gridded data +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (Bash) Shell +# Machine: WCOSS-DELL-P3 +# +############################################################################### +# +# --------------------------------------------------------------------------- # +# 0. Preparations +# 0.a Basic modes of operation + + set -x + # Use LOUD variable to turn on/off trace. Defaults to YES (on). + export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES + [[ "$LOUD" != YES ]] && set +x + + cd $DATA + + postmsg "$jlogfile" "HAS BEGUN on `hostname`" + + msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" + postmsg "$jlogfile" "$msg" + + set +x + echo ' ' + echo ' *********************************' + echo ' *** WAVE POSTPROCESSOR SCRIPT ***' + echo ' *********************************' + echo ' ' + echo "Starting at : `date`" + echo '-------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# Script will run only if pre-defined NTASKS +# The actual work is distributed over these tasks. + if [ -z ${NTASKS} ] + then + echo "FATAL ERROR: requires NTASKS to be set " + err=1; export err;${errchk} + exit $err + fi + +# 0.c Defining model grids + + waveuoutpGRD=${waveuoutpGRD:?buoyNotSet} + +# 0.c.4 Define a temporary directory for storing ascii point output files +# and flush it + + export STA_DIR=$DATA/station_ascii_files + if [ -d $STA_DIR ] + then + rm -rf ${STA_DIR} + fi + mkdir -p ${STA_DIR} + mkdir -p ${STA_DIR}/spec + mkdir -p ${STA_DIR}/ibp + mkdir -p ${STA_DIR}/bull + mkdir -p ${STA_DIR}/cbull + + set +x + echo ' ' + echo 'Grid information :' + echo '-------------------' + echo " Output points : $waveuoutpGRD" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# --------------------------------------------------------------------------- # +# 1. Get files that are used by most child scripts + + export DOIBP_WAV='NO' # Input boundary points + export DOPNT_WAV='YES' # Station data + export DOSPC_WAV='YES' # Spectral post + export DOBLL_WAV='YES' # Bulletin post + + exit_code=0 + + set +x + echo ' ' + echo 'Preparing input files :' + echo '-----------------------' + [[ "$LOUD" = YES ]] && set -x + +# 1.a Model definition files and output files (set up using poe) + +# 1.a.1 Set up the parallel command tasks + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + + [[ "$LOUD" = YES ]] && set -x + +# Copy model definition files + for grdID in $waveuoutpGRD + do + if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + then + set +x + echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." + [[ "$LOUD" = YES ]] && set -x + + cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + iloop=`expr $iloop + 1` + fi + done + + for grdID in $waveuoutpGRD + do + if [ ! -f mod_def.$grdID ] + then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" + err=2; export err;${errchk} + exit $err + else + set +x + echo "File mod_def.$grdID found. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + fi + done + +# 1.c Output locations file + + rm -f buoy.loc + + if [ -f $FIXwave/wave_${NET}.buoys ] + then + cp -f $FIXwave/wave_${NET}.buoys buoy.loc.temp +# Reverse grep to exclude IBP points + sed -n '/^\$.*/!p' buoy.loc.temp | grep -v IBP > buoy.loc + fi + + if [ -s buoy.loc ] + then + set +x + echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '************************************* ' + echo ' FATAL ERROR : NO BUOY LOCATION FILE ' + echo '************************************* ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" + err=3; export err;${errchk} + exit $err + DOPNT_WAV='NO' + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + sed -n '/^\$.*/!p' buoy.loc.temp | grep IBP > buoy.ibp + if [ -s buoy.ibp ]; then + set +x + echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '***************************************** ' + echo ' FATAL ERROR : NO IBP BUOY LOCATION FILE ' + echo '***************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO IBP BUOY LOCATION FILE" + err=4; export err;${errchk} + exit $err + DOIBP_WAV='NO' + fi + fi + +# 1.d Input template files + + if [ -f $FIXwave/ww3_outp_spec.inp.tmpl ] + then + cp -f $FIXwave/ww3_outp_spec.inp.tmpl ww3_outp_spec.inp.tmpl + fi + + if [ -f ww3_outp_spec.inp.tmpl ] + then + set +x + echo " ww3_outp_spec.inp.tmpl copied. Syncing to all grids ..." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '*********************************************** ' + echo '*** ERROR : NO TEMPLATE FOR SPEC INPUT FILE *** ' + echo '*********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR SPEC INPUT FILE" + exit_code=3 + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + + if [ -f $FIXwave/ww3_outp_bull.inp.tmpl ] + then + cp -f $FIXwave/ww3_outp_bull.inp.tmpl ww3_outp_bull.inp.tmpl + fi + + if [ -f ww3_outp_bull.inp.tmpl ] + then + set +x + echo " ww3_outp_bull.inp.tmpl copied. Syncing to all nodes ..." + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '*************************************************** ' + echo '*** ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE *** ' + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE" + exit_code=4 + DOBLL_WAV='NO' + fi + +# 1.e Getting buoy information for points + + if [ "$DOSPC_WAV" = 'YES' ] || [ "$DOBLL_WAV" = 'YES' ] + then + ymdh=`$NDATE -${WAVHINDH} $CDATE` + tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" + dtspec=3600. # default time step (not used here) + sed -e "s/TIME/$tstart/g" \ + -e "s/DT/$dtspec/g" \ + -e "s/POINT/1/g" \ + -e "s/ITYPE/0/g" \ + -e "s/FORMAT/F/g" \ + ww3_outp_spec.inp.tmpl > ww3_outp.inp + + ln -s mod_def.$waveuoutpGRD mod_def.ww3 + YMD=$(echo $CDATE | cut -c1-8) + HMS="$(echo $CDATE | cut -c9-10)0000" + if [ -f $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ] + then + ln -s $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ./out_pnt.${waveuoutpGRD} + else + echo '*************************************************** ' + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.${waveuoutpGRD}.${YMD}.${HMS} " + echo '*************************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $waveuoutpGRD $CDATE $cycle : field output missing." + postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.${waveuoutpGRD}.${YMD}.${HMS}" + err=5; export err;${errchk} + fi + + rm -f buoy_tmp.loc buoy_log.ww3 ww3_oup.inp + ln -fs ./out_pnt.${waveuoutpGRD} ./out_pnt.ww3 + ln -fs ./mod_def.${waveuoutpGRD} ./mod_def.ww3 + $EXECwave/ww3_outp > buoy_lst.loc 2>&1 + err=$? + + if [ "$err" != '0' ] && [ ! -f buoy_log.ww3 ] + then + pgm=wave_post + msg="ABNORMAL EXIT: ERROR IN ww3_outp" + postmsg "$jlogfile" "$msg" + set +x + echo ' ' + echo '******************************************** ' + echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' + echo '******************************************** ' + echo ' ' + cat buoy_tmp.loc + echo "$WAV_MOD_TAG post $date $cycle : buoy log file failed to be created." + echo $msg + [[ "$LOUD" = YES ]] && set -x + err=6;export err;${errchk} + DOSPC_WAV='NO' + DOBLL_WAV='NO' + exit $err + fi + +# Create new buoy_log.ww3 excluding all IBP files + cat buoy.loc | awk '{print $3}' | sed 's/'\''//g' > ibp_tags + grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp + rm -f buoy_log.dat + mv buoy_log.tmp buoy_log.dat + + grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc + sed '$d' buoy_tmp1.loc > buoy_tmp2.loc + buoys=`awk '{ print $1 }' buoy_tmp2.loc` + Nb=`wc buoy_tmp2.loc | awk '{ print $1 }'` + rm -f buoy_tmp1.loc buoy_tmp2.loc + + if [ -s buoy_log.dat ] + then + set +x + echo 'Buoy log file created. Syncing to all nodes ...' + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '**************************************** ' + echo '*** ERROR : NO BUOY LOG FILE CREATED *** ' + echo '**************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" + err=7;export err;${errchk} + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + +# Create new buoy_log.ww3 including all IBP files + if [ "$DOIBP_WAV" = 'YES' ]; then + cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags + grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp + rm -f buoy_log.ibp + mv buoy_log.tmp buoy_log.ibp + + grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc + sed '$d' buoy_tmp1.loc > buoy_tmp2.loc + ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` + Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` + rm -f buoy_tmp1.loc buoy_tmp2.loc + if [ -s buoy_log.ibp ] + then + set +x + echo 'IBP log file created. Syncing to all nodes ...' + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '********************************************** ' + echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' + echo '********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." + postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" + err=8;export err;${errchk} + exit $err + DOIBP_WAV='NO' + fi + fi + fi + +# 1.f Data summary + + set +x + echo ' ' + echo " Input files read and processed at : `date`" + echo ' ' + echo ' Data summary : ' + echo ' ---------------------------------------------' + echo " Sufficient data for spectral files : $DOSPC_WAV ($Nb points)" + echo " Sufficient data for bulletins : $DOBLL_WAV ($Nb points)" + echo " Sufficient data for Input Boundary Points : $DOIBP_WAV ($Nibp points)" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + +# --------------------------------------------------------------------------- # +# 2. Make consolidated grib2 file for side-by-side grids and interpolate +# onto extended grids +# +# 2.a Command file set-up + + set +x + echo ' Making command file for sbs grib2 and GRID Interpolation ' + [[ "$LOUD" = YES ]] && set -x + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + +# 1.a.2 Loop over forecast time to generate post files +# When executed side-by-side, serial mode (cfp when run after the fcst step) +# Contingency for RERUN=YES + if [ "${RERUN}" = "YES" ]; then + fhr=$((FHRUN + FHMIN_WAV)) + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi +# Get minimum value to start count from fhr+min(fhrp,fhrg) + fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` + fhr=$((fhr + fhrinc)) + else + fhr=$FHMIN_WAV + fi + fhrp=$fhr + fhrg=$fhr + iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) + while [ $fhr -le $FHMAX_WAV ]; do + + ymdh=`$NDATE $fhr $CDATE` + YMD=$(echo $ymdh | cut -c1-8) + HMS="$(echo $ymdh | cut -c9-10)0000" + YMDHMS=${YMD}${HMS} + FH3=$(printf %03i $fhr) + + fcmdnow=cmdfile.${FH3} + fcmdigrd=icmdfile.${FH3} + if [ "${DOPNT_WAV}" = "YES" ]; then + fcmdpnt=pcmdfile.${FH3} + fcmdibp=ibpcmdfile.${FH3} + fi + rm -f ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} + touch ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} + mkdir output_$YMDHMS + cd output_$YMDHMS + +# Create instances of directories for spec and gridded output + export SPECDATA=${DATA}/output_$YMDHMS + export BULLDATA=${DATA}/output_$YMDHMS + export GRIBDATA=${DATA}/output_$YMDHMS + export GRDIDATA=${DATA}/output_$YMDHMS + ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 + +# Point output part (can be split or become meta-task to reduce resource usage) + if [ $fhr = $fhrp ] + then + pfile=$COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} + if [ -f ${pfile} ] + then + ln -fs ${pfile} ./out_pnt.${waveuoutpGRD} + else + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD.${YMD}.${HMS} + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD.${YMD}.${HMS} + err=9; export err;${errchk} + exit $err + fi + + if [ "$DOSPC_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $buoys + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec > spec_$buoy.out 2>&1" >> ${fcmdnow} + done + fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $ibpoints + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} + done + fi + + if [ "$DOBLL_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $buoys + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh bull > bull_$buoy.out 2>&1" >> ${fcmdnow} + done + fi + + fi + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' ${fcmdnow} ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdmfile.$nfile + echo "$nfile cmdmfile.$nfile" >> cmdmprog + chmod 744 cmdmfile.$nfile + fi + echo $line >> cmdmfile.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=`wc -l ${fcmdnow} | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + + set +x + echo ' ' + echo " Executing the grib2_sbs scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog + else + ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} + fi + exit=$? + else + chmod 744 ${fcmdnow} + ./${fcmdnow} + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=10; export err;${errchk} + exit $err + fi + + rm -f out_grd.* # Remove large binary grid output files + + cd $DATA + + FHINCP=$(( DTPNT_WAV / 3600 )) + if [ $fhr = $fhrp ] + then + fhrp=$((fhr+FHINCP)) + fi + echo $fhrp + + fhr=$fhp # no gridded output, loop with out_pnt stride + + done + + if [ "${DOPNT_WAV}" = "YES" ]; then + +# --------------------------------------------------------------------------- # +# 3. Compress point output data into tar files + +# 3.a Set up cmdfile + + rm -f cmdtarfile + touch cmdtarfile + chmod 744 cmdtarfile + + set +x + echo ' ' + echo ' Making command file for taring all point output files.' + + [[ "$LOUD" = YES ]] && set -x + +# 6.b Spectral data files + + if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi + + if [ "$DOIBP_WAV" = 'YES' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + else + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile + fi + fi + if [ "$DOSPC_WAV" = 'YES' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + else + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + fi + fi + + wavenproc=`wc -l cmdtarfile | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + + set +x + echo ' ' + echo " Executing the wave_tar scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile + else + ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile + fi + exit=$? + else + chmod 744 cmdtarfile + ./cmdtarfile + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + err=11; export err;${errchk} + exit $err + fi + +# --------------------------------------------------------------------------- # +# 7. Ending output + + set +x + echo ' ' + echo "Ending at : `date`" + echo '-----------' + echo ' ' + echo ' *** End of MWW3 postprocessor ***' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + + if [ "$exit_code" -ne '0' ] + then + echo " FATAL ERROR: Problem in MWW3 POST" + msg="ABNORMAL EXIT: Problem in MWW3 POST" + postmsg "$jlogfile" "$msg" + echo $msg + err=12; export err;${errchk} + exit $err + else + echo " Side-by-Side Wave Post Completed Normally " + msg="$job completed normally" + postmsg "$jlogfile" "$msg" + exit 0 + fi + +# End of MWW3 prostprocessor script ---------------------------------------- # diff --git a/ush/wave_grib2_sbs.sh b/ush/wave_grib2_sbs.sh index 0c04f0fcb2..a95556fe68 100755 --- a/ush/wave_grib2_sbs.sh +++ b/ush/wave_grib2_sbs.sh @@ -73,6 +73,14 @@ # SBS one time slice per file FH3=$(printf %03i $fhr) +# Verify if grib2 file exists from interrupted run + ENSTAG="" + if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi + outfile=${WAV_MOD_TAG}.${cycle}${ENSTAG}.${grdnam}.${grdres}.f${FH3}.grib2 + +# Only create file if not present in COM + if [ ! -s ${COMOUT}/gridded/${outfile}.idx ]; then + set +x echo ' ' echo '+--------------------------------+' @@ -137,10 +145,20 @@ echo " Run ww3_grib2" echo " Executing $EXECwave/ww3_grib" [[ "$LOUD" = YES ]] && set -x - ENSTAG="" - if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi - outfile=${WAV_MOD_TAG}.${cycle}${ENSTAG}.${grdnam}.${grdres}.f${FH3}.grib2 $EXECwave/ww3_grib > grib2_${grdnam}_${FH3}.out 2>&1 + + if [ ! -s gribfile ]; then + set +x + echo ' ' + echo '************************************************ ' + echo '*** FATAL ERROR : ERROR IN ww3_grib encoding *** ' + echo '************************************************ ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grib2" + exit 3 + fi + $WGRIB2 gribfile -set_date $CDATE -set_ftime "$fhr hour fcst" -grib ${COMOUT}/gridded/${outfile} err=$? @@ -226,6 +244,14 @@ cd ../ mv -f ${gribDIR} done.${gribDIR} + else + set +x + echo ' ' + echo " File ${COMOUT}/gridded/${outfile} found, skipping generation process" + echo ' ' + [[ "$LOUD" = YES ]] && set -x + fi + set +x echo ' ' echo "End of ww3_grib2.sh at" From 0b2744e53a35c570178b7e6cd7ede72b6255c579 Mon Sep 17 00:00:00 2001 From: "Kate.Friedman" Date: Fri, 14 Aug 2020 17:36:31 +0000 Subject: [PATCH 03/27] Issue #94 - pull in two fixes for wave job setup in free-forecast mode --- ush/rocoto/setup_workflow_fcstonly.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ush/rocoto/setup_workflow_fcstonly.py b/ush/rocoto/setup_workflow_fcstonly.py index 168c9f08ae..582278706a 100755 --- a/ush/rocoto/setup_workflow_fcstonly.py +++ b/ush/rocoto/setup_workflow_fcstonly.py @@ -295,7 +295,7 @@ def get_workflow(dict_configs, cdump='gdas'): # waveinit if do_wave in ['Y', 'YES']: - task = wfu.create_wf_task('%swaveinit', cdump=cdump, envar=envars) + task = wfu.create_wf_task('waveinit', cdump=cdump, envar=envars) tasks.append(task) tasks.append('\n') @@ -355,7 +355,7 @@ def get_workflow(dict_configs, cdump='gdas'): data = '&ROTDIR;/%swave.@Y@m@d/@H/rundata/%swave.out_grd.gsh_15m.@Y@m@d.@H0000' % (cdump,cdump) dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) task = wfu.create_wf_task('wavepostsbs', cdump=cdump, envar=envars, dependency=dependencies) tasks.append(task) tasks.append('\n') From da2922163922f4b4b14dba78dba36e9eced3a2c5 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 13:50:15 +0000 Subject: [PATCH 04/27] update jobs for waves --- jobs/JWAVE_POST_BNDPOINT | 116 +++++++++++++++++++++++++++++++++++++++ jobs/JWAVE_POST_POINT | 116 +++++++++++++++++++++++++++++++++++++++ jobs/JWAVE_POST_SBS | 4 +- 3 files changed, 233 insertions(+), 3 deletions(-) create mode 100755 jobs/JWAVE_POST_BNDPOINT create mode 100755 jobs/JWAVE_POST_POINT diff --git a/jobs/JWAVE_POST_BNDPOINT b/jobs/JWAVE_POST_BNDPOINT new file mode 100755 index 0000000000..f20b80c331 --- /dev/null +++ b/jobs/JWAVE_POST_BNDPOINT @@ -0,0 +1,116 @@ +#!/bin/bash + +date +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4=' $SECONDS + ' +set -x -e + +############################# +# Source relevant config files +############################# +configs="base wave wavepostsbs" +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + +########################################## +# Source machine runtime environment +########################################## +. $HOMEgfs/env/${machine}.env wavepostsbs +status=$? +[[ $status -ne 0 ]] && exit $status + +# PATH for working directory +export NET=${NET:-gfs} +export RUN=${RUN:-gfs} +export COMPONENTwave=${COMPONENTwave:-${RUN}wave} + +export HOMEgefs=${HOMEgefs:-$NWROOT/$NET.${gefs_ver}} +export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} + +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} + +# Set HOMEwave to HOMEgefs +HOMEwave=${HOMEwave:-${HOMEgfs}} + +# Set resources to propagate NTASKS across cfp call +NTASKS=${NTASKS:-${npe_node_waveprep}} +export NTASKS=${NTASKS:?NTASKS required to be set} + +# Create and go to DATA directory +export DATA=${DATA:-${DATAROOT:?}/${jobid}} +mkdir -p $DATA +cd $DATA + +export cyc=${cyc:-00} +export cycle=${cycle:-t${cyc}z} + +# Set PDY +setpdy.sh +sh ./PDY + +export pgmout=OUTPUT.$$ + +export MP_PULSE=0 + +# Path to HOME Directory +export FIXwave=${FIXwave:-$HOMEwave/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-$HOMEwave/parm/wave} +export USHwave=${USHwave:-$HOMEwave/ush} +export EXECwave=${EXECwave:-$HOMEgfs/exec} + +# Set COM Paths and GETGES environment +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi +export COMINwave=${COMINwave:-${ROTDIR:?}} +export COMOUTwave=${COMOUTwave:-${ROTDIR:?}} +export COMIN=${COMIN:-${COMINwave}/${COMPONENTwave}.${PDY}/${cyc}} +export COMOUT=${COMOUT:-${COMOUTwave}/${COMPONENTwave}.${PDY}/${cyc}} + +export COMINice=${COMINice:-${COMROOTp2}/omb/prod} +export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} +export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} + +mkdir -p $COMOUT/station + +# Set mpi serial command +export wavempexec=${launcher:-"mpirun -n"} +export wave_mpmd=${mpmd:-"cfp"} + +env | sort + +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +membTAG='p' +if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi +export membTAG +export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} + +export CFP_VERBOSE=1 + +# Execute the Script +$HOMEwave/scripts/exwave_post_boundpnts.sh +err=$? +if [ $err -ne 0 ]; then + msg="FATAL ERROR: ex-script of GWES_POST failed!" +else + msg="$job completed normally!" +fi +postmsg "$jlogfile" "$msg" + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JWAVE_POST_POINT b/jobs/JWAVE_POST_POINT new file mode 100755 index 0000000000..d1c4360e2d --- /dev/null +++ b/jobs/JWAVE_POST_POINT @@ -0,0 +1,116 @@ +#!/bin/bash + +date +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4=' $SECONDS + ' +set -x -e + +############################# +# Source relevant config files +############################# +configs="base wave wavepostsbs" +export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} +config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} +for config in $configs; do + . $config_path/config.$config + status=$? + [[ $status -ne 0 ]] && exit $status +done + +########################################## +# Source machine runtime environment +########################################## +. $HOMEgfs/env/${machine}.env wavepostsbs +status=$? +[[ $status -ne 0 ]] && exit $status + +# PATH for working directory +export NET=${NET:-gfs} +export RUN=${RUN:-gfs} +export COMPONENTwave=${COMPONENTwave:-${RUN}wave} + +export HOMEgefs=${HOMEgefs:-$NWROOT/$NET.${gefs_ver}} +export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} + +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} + +# Set HOMEwave to HOMEgefs +HOMEwave=${HOMEwave:-${HOMEgfs}} + +# Set resources to propagate NTASKS across cfp call +NTASKS=${NTASKS:-${npe_node_waveprep}} +export NTASKS=${NTASKS:?NTASKS required to be set} + +# Create and go to DATA directory +export DATA=${DATA:-${DATAROOT:?}/${jobid}} +mkdir -p $DATA +cd $DATA + +export cyc=${cyc:-00} +export cycle=${cycle:-t${cyc}z} + +# Set PDY +setpdy.sh +sh ./PDY + +export pgmout=OUTPUT.$$ + +export MP_PULSE=0 + +# Path to HOME Directory +export FIXwave=${FIXwave:-$HOMEwave/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-$HOMEwave/parm/wave} +export USHwave=${USHwave:-$HOMEwave/ush} +export EXECwave=${EXECwave:-$HOMEgfs/exec} + +# Set COM Paths and GETGES environment +if [ $RUN_ENVIR = "nco" ]; then + export ROTDIR=${COMROOT:?}/$NET/$envir +fi +export COMINwave=${COMINwave:-${ROTDIR:?}} +export COMOUTwave=${COMOUTwave:-${ROTDIR:?}} +export COMIN=${COMIN:-${COMINwave}/${COMPONENTwave}.${PDY}/${cyc}} +export COMOUT=${COMOUT:-${COMOUTwave}/${COMPONENTwave}.${PDY}/${cyc}} + +export COMINice=${COMINice:-${COMROOTp2}/omb/prod} +export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} +export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} + +mkdir -p $COMOUT/station + +# Set mpi serial command +export wavempexec=${launcher:-"mpirun -n"} +export wave_mpmd=${mpmd:-"cfp"} + +env | sort + +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +membTAG='p' +if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi +export membTAG +export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} + +export CFP_VERBOSE=1 + +# Execute the Script +$HOMEwave/scripts/exwave_post_points.sh +err=$? +if [ $err -ne 0 ]; then + msg="FATAL ERROR: ex-script of GWES_POST failed!" +else + msg="$job completed normally!" +fi +postmsg "$jlogfile" "$msg" + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JWAVE_POST_SBS b/jobs/JWAVE_POST_SBS index bca6a0cb6a..29832ad063 100755 --- a/jobs/JWAVE_POST_SBS +++ b/jobs/JWAVE_POST_SBS @@ -78,8 +78,6 @@ export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} mkdir -p $COMOUT/gridded -mkdir -p $COMOUT/station -mkdir -p $COMOUT/stats # Set mpi serial command export wavempexec=${launcher:-"mpirun -n"} @@ -99,7 +97,7 @@ export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEwave/scripts/exwave_post_sbs.sh +$HOMEwave/scripts/exwave_post_gridded_sbs.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" From 57c4258ba73778fe95118ebfae98c4bbf012ae37 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 14:09:22 +0000 Subject: [PATCH 05/27] renaming wave job and scripts --- jobs/{JWAVE_POST_BNDPOINT => JGLOBAL_WAVE_POST_BNDPNT} | 2 +- jobs/{JWAVE_POST_POINT => JGLOBAL_WAVE_POST_PNT} | 2 +- jobs/JGLOBAL_WAVE_POST_SBS | 2 +- .../{exwave_post_boundpnts.sh => exgfs_wave_post_bndpnt.sh} | 2 +- ...ave_post_gridded_sbs.sh => exgfs_wave_post_gridded_sbs.sh} | 2 +- scripts/{exwave_post_points.sh => exgfs_wave_post_pnt.sh} | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) rename jobs/{JWAVE_POST_BNDPOINT => JGLOBAL_WAVE_POST_BNDPNT} (98%) rename jobs/{JWAVE_POST_POINT => JGLOBAL_WAVE_POST_PNT} (98%) rename scripts/{exwave_post_boundpnts.sh => exgfs_wave_post_bndpnt.sh} (99%) rename scripts/{exwave_post_gridded_sbs.sh => exgfs_wave_post_gridded_sbs.sh} (99%) rename scripts/{exwave_post_points.sh => exgfs_wave_post_pnt.sh} (99%) diff --git a/jobs/JWAVE_POST_BNDPOINT b/jobs/JGLOBAL_WAVE_POST_BNDPNT similarity index 98% rename from jobs/JWAVE_POST_BNDPOINT rename to jobs/JGLOBAL_WAVE_POST_BNDPNT index f20b80c331..a2609bad5d 100755 --- a/jobs/JWAVE_POST_BNDPOINT +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -97,7 +97,7 @@ export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEwave/scripts/exwave_post_boundpnts.sh +$HOMEwave/scripts/exgfs_wave_post_bndpnt.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" diff --git a/jobs/JWAVE_POST_POINT b/jobs/JGLOBAL_WAVE_POST_PNT similarity index 98% rename from jobs/JWAVE_POST_POINT rename to jobs/JGLOBAL_WAVE_POST_PNT index d1c4360e2d..991cd88684 100755 --- a/jobs/JWAVE_POST_POINT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -97,7 +97,7 @@ export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEwave/scripts/exwave_post_points.sh +$HOMEwave/scripts/exgfs_wave_post_pnt.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" diff --git a/jobs/JGLOBAL_WAVE_POST_SBS b/jobs/JGLOBAL_WAVE_POST_SBS index 2778e30f6a..ad49873e30 100755 --- a/jobs/JGLOBAL_WAVE_POST_SBS +++ b/jobs/JGLOBAL_WAVE_POST_SBS @@ -88,7 +88,7 @@ export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEgfs/scripts/exgfs_wave_post_sbs.sh +$HOMEgfs/scripts/exgfs_wave_post_gridded_sbs.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" diff --git a/scripts/exwave_post_boundpnts.sh b/scripts/exgfs_wave_post_bndpnt.sh similarity index 99% rename from scripts/exwave_post_boundpnts.sh rename to scripts/exgfs_wave_post_bndpnt.sh index 2a8a57a9b0..4eaf8219cd 100755 --- a/scripts/exwave_post_boundpnts.sh +++ b/scripts/exgfs_wave_post_bndpnt.sh @@ -3,7 +3,7 @@ ################################################################################ # # UNIX Script Documentation Block -# Script name: exwave_post_sbs.sh +# Script name: exgfs_wave_post_bndpnt.sh # Script description: Creates output products from binary WW3 data # # Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 diff --git a/scripts/exwave_post_gridded_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh similarity index 99% rename from scripts/exwave_post_gridded_sbs.sh rename to scripts/exgfs_wave_post_gridded_sbs.sh index d50b3edd18..f9b7a52b1f 100755 --- a/scripts/exwave_post_gridded_sbs.sh +++ b/scripts/exgfs_wave_post_gridded_sbs.sh @@ -3,7 +3,7 @@ ################################################################################ # # UNIX Script Documentation Block -# Script name: exwave_post_sbs.sh +# Script name: exgfs_wave_post_gridded_sbs.sh # Script description: Creates output products from binary WW3 data # # Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 diff --git a/scripts/exwave_post_points.sh b/scripts/exgfs_wave_post_pnt.sh similarity index 99% rename from scripts/exwave_post_points.sh rename to scripts/exgfs_wave_post_pnt.sh index f6fe29f65b..acfa680a57 100755 --- a/scripts/exwave_post_points.sh +++ b/scripts/exgfs_wave_post_pnt.sh @@ -3,8 +3,8 @@ ################################################################################ # # UNIX Script Documentation Block -# Script name: exwave_post_sbs.sh -# Script description: Creates output products from binary WW3 data +# Script name: exgfs_wave_post_pnt.sh +# Script description: Creates point output products from binary WW3 data # # Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 # Abstract: This script is the postprocessor for the wave component in GFS. From 529cc3692f4fc003295584e761279be3c9405b68 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 14:50:50 +0000 Subject: [PATCH 06/27] update WAVE_PREP so that currents do not check for previous 24 hour so that parallels will be reproducible also deleted unused variable --- jobs/JGLOBAL_WAVE_PREP | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/jobs/JGLOBAL_WAVE_PREP b/jobs/JGLOBAL_WAVE_PREP index 59e2932ca9..670003ccd2 100755 --- a/jobs/JGLOBAL_WAVE_PREP +++ b/jobs/JGLOBAL_WAVE_PREP @@ -71,23 +71,19 @@ export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} if [ $RUN_ENVIR = "nco" ]; then export COMIN_WAV_ICE=${COMIN_WAV_ICE:-$(compath.py gfs/prod)}/${CDUMP}.${PDY}/${cyc}/atmos - export COMIN_WAV_WND=${COMIN_WAV_WND:-$(compath.py gfs/prod)}/${CDUMP}.${PDY}/${cyc}/atmos export COMIN_WAV_CUR=${COMIN_WAV_CUR:-$(compath.py ${WAVECUR_DID}/prod)}/${WAVECUR_DID}.${RPDY} if [ ! -d $COMIN_WAV_CUR ]; then export RPDY=`$NDATE -24 ${PDY}00 | cut -c1-8` export COMIN_WAV_CUR=$(compath.py ${WAVECUR_DID}/prod)/${WAVECUR_DID}.${RPDY} fi else - if [ ! -d $DMPDIR/${WAVECUR_DID}.${RPDY} ]; then export RPDY=`$NDATE -24 ${PDY}00 | cut -c1-8`; fi if [ ! -L $ROTDIR/${WAVECUR_DID}.${RPDY} ]; then # Check if symlink already exists in ROTDIR $NLN $DMPDIR/${WAVECUR_DID}.${RPDY} $ROTDIR/${WAVECUR_DID}.${RPDY} fi if [ ! -L $ROTDIR/${CDUMP}.${PDY}/${cyc}/atmos/${WAVICEFILE} ]; then # Check if symlink already exists in ROTDIR $NLN $DMPDIR/$CDUMP.${PDY}/$cyc/${WAVICEFILE} $ROTDIR/$CDUMP.${PDY}/$cyc/atmos/${WAVICEFILE} fi - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/atmos} - export COMIN_WAV_ICE=${COMIN_OBS} - export COMIN_WAV_WND=${COMIN_OBS} + export COMIN_WAV_ICE=${COMIN_WAV_ICE:-$ROTDIR/$RUN.$PDY/$cyc/atmos} export COMIN_WAV_CUR=${ROTDIR}/${WAVECUR_DID}.${RPDY} fi From f836a7869dbb88badd93fcd9d08314284eee4f96 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 15:17:28 +0000 Subject: [PATCH 07/27] updating error message and exit if there is no current input file --- scripts/exgfs_wave_prep.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/exgfs_wave_prep.sh b/scripts/exgfs_wave_prep.sh index 256bdfd146..016c06ab7d 100755 --- a/scripts/exgfs_wave_prep.sh +++ b/scripts/exgfs_wave_prep.sh @@ -622,7 +622,7 @@ fi #------------------------------------------------------------------- -# CURR processing (not functional, TBD for uncoupled and GFSv16 cases) +# CURR processing if [ "${WW3CURINP}" = 'YES' ]; then @@ -667,6 +667,11 @@ FLGHF='F' else echo ' ' + if [ "${FLGHF}" = "T" ] ; then + curfile=${curfile1h} + else + curfile=${curfile3h} + fi set $setoff echo ' ' echo '************************************** ' @@ -676,7 +681,7 @@ set $seton postmsg "$jlogfile" "FATAL ERROR - NO CURRENT FILE (RTOFS)" err=11;export err;${errchk} - exit 0 + exit $err echo ' ' fi From 1f195f8d432072f4e4f66406ea6b09256a185d2b Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 15:20:28 +0000 Subject: [PATCH 08/27] changing exit 0 to exit number for FATAL errors in ice prep for waves --- ush/wave_prnc_ice.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ush/wave_prnc_ice.sh b/ush/wave_prnc_ice.sh index 254edc8b03..7181819d02 100755 --- a/ush/wave_prnc_ice.sh +++ b/ush/wave_prnc_ice.sh @@ -64,7 +64,7 @@ echo '*** EXPORTED VARIABLES IN preprocessor NOT SET ***' echo '**************************************************' echo ' ' - exit 0 + exit 1 set $seton postmsg "$jlogfile" "NON-FATAL ERROR - EXPORTED VARIABLES IN preprocessor NOT SET" fi @@ -98,7 +98,7 @@ echo ' ' set $seton postmsg "$jlogfile" "FATAL ERROR - NO ICE FILE (GFS GRIB)" - exit 0 + exit 2 fi # --------------------------------------------------------------------------- # @@ -125,7 +125,7 @@ echo ' ' set $seton postmsg "$jlogfile" "ERROR IN UNPACKING GRIB ICE FILE." - exit 0 + exit 3 fi rm -f wgrib.out @@ -156,7 +156,7 @@ echo ' ' set $seton postmsg "$jlogfile" "NON-FATAL ERROR IN waveprep." - exit 0 + exit 4 fi rm -f wave_prep.out ww3_prep.inp ice.raw mod_def.ww3 From a914521cec478667191b365e2a2a62e3553e0ff7 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Thu, 20 Aug 2020 23:52:47 +0000 Subject: [PATCH 09/27] updates to JJOBs for wave post point for new structure --- jobs/JGLOBAL_WAVE_POST_BNDPNT | 25 ++++++++----------------- jobs/JGLOBAL_WAVE_POST_PNT | 25 ++++++++----------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNT b/jobs/JGLOBAL_WAVE_POST_BNDPNT index a2609bad5d..1099c254eb 100755 --- a/jobs/JGLOBAL_WAVE_POST_BNDPNT +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -27,7 +27,7 @@ status=$? # PATH for working directory export NET=${NET:-gfs} export RUN=${RUN:-gfs} -export COMPONENTwave=${COMPONENTwave:-${RUN}wave} +export COMPONENT=${COMPONENT:-wave} export HOMEgefs=${HOMEgefs:-$NWROOT/$NET.${gefs_ver}} export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} @@ -35,13 +35,6 @@ export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} # Add default errchk = err_chk export errchk=${errchk:-err_chk} -# Set HOMEwave to HOMEgefs -HOMEwave=${HOMEwave:-${HOMEgfs}} - -# Set resources to propagate NTASKS across cfp call -NTASKS=${NTASKS:-${npe_node_waveprep}} -export NTASKS=${NTASKS:?NTASKS required to be set} - # Create and go to DATA directory export DATA=${DATA:-${DATAROOT:?}/${jobid}} mkdir -p $DATA @@ -59,19 +52,17 @@ export pgmout=OUTPUT.$$ export MP_PULSE=0 # Path to HOME Directory -export FIXwave=${FIXwave:-$HOMEwave/fix/fix_wave_${NET}} -export PARMwave=${PARMwave:-$HOMEwave/parm/wave} -export USHwave=${USHwave:-$HOMEwave/ush} +export FIXwave=${FIXwave:-$HOMEgfs/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-$HOMEgfs/parm/wave} +export USHwave=${USHwave:-$HOMEgfs/ush} export EXECwave=${EXECwave:-$HOMEgfs/exec} # Set COM Paths and GETGES environment if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi -export COMINwave=${COMINwave:-${ROTDIR:?}} -export COMOUTwave=${COMOUTwave:-${ROTDIR:?}} -export COMIN=${COMIN:-${COMINwave}/${COMPONENTwave}.${PDY}/${cyc}} -export COMOUT=${COMOUT:-${COMOUTwave}/${COMPONENTwave}.${PDY}/${cyc}} +export COMIN=${COMIN:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} export COMINice=${COMINice:-${COMROOTp2}/omb/prod} export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} @@ -92,12 +83,12 @@ env | sort membTAG='p' if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi export membTAG -export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} +export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEwave/scripts/exgfs_wave_post_bndpnt.sh +$HOMEgfs/scripts/exgfs_wave_post_bndpnt.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT index 991cd88684..606f8762b7 100755 --- a/jobs/JGLOBAL_WAVE_POST_PNT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -27,7 +27,7 @@ status=$? # PATH for working directory export NET=${NET:-gfs} export RUN=${RUN:-gfs} -export COMPONENTwave=${COMPONENTwave:-${RUN}wave} +export COMPONENT=${COMPONENT:-wave} export HOMEgefs=${HOMEgefs:-$NWROOT/$NET.${gefs_ver}} export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} @@ -35,13 +35,6 @@ export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} # Add default errchk = err_chk export errchk=${errchk:-err_chk} -# Set HOMEwave to HOMEgefs -HOMEwave=${HOMEwave:-${HOMEgfs}} - -# Set resources to propagate NTASKS across cfp call -NTASKS=${NTASKS:-${npe_node_waveprep}} -export NTASKS=${NTASKS:?NTASKS required to be set} - # Create and go to DATA directory export DATA=${DATA:-${DATAROOT:?}/${jobid}} mkdir -p $DATA @@ -59,19 +52,17 @@ export pgmout=OUTPUT.$$ export MP_PULSE=0 # Path to HOME Directory -export FIXwave=${FIXwave:-$HOMEwave/fix/fix_wave_${NET}} -export PARMwave=${PARMwave:-$HOMEwave/parm/wave} -export USHwave=${USHwave:-$HOMEwave/ush} +export FIXwave=${FIXwave:-$HOMEgfs/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-$HOMEgfs/parm/wave} +export USHwave=${USHwave:-$HOMEgfs/ush} export EXECwave=${EXECwave:-$HOMEgfs/exec} # Set COM Paths and GETGES environment if [ $RUN_ENVIR = "nco" ]; then export ROTDIR=${COMROOT:?}/$NET/$envir fi -export COMINwave=${COMINwave:-${ROTDIR:?}} -export COMOUTwave=${COMOUTwave:-${ROTDIR:?}} -export COMIN=${COMIN:-${COMINwave}/${COMPONENTwave}.${PDY}/${cyc}} -export COMOUT=${COMOUT:-${COMOUTwave}/${COMPONENTwave}.${PDY}/${cyc}} +export COMIN=${COMIN:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} export COMINice=${COMINice:-${COMROOTp2}/omb/prod} export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} @@ -92,12 +83,12 @@ env | sort membTAG='p' if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi export membTAG -export WAV_MOD_TAG=${COMPONENTwave}${waveMEMB} +export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} export CFP_VERBOSE=1 # Execute the Script -$HOMEwave/scripts/exgfs_wave_post_pnt.sh +$HOMEgfs/scripts/exgfs_wave_post_pnt.sh err=$? if [ $err -ne 0 ]; then msg="FATAL ERROR: ex-script of GWES_POST failed!" From bf97710bece30195679740b0de2b32e0adc6c3c6 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Fri, 21 Aug 2020 00:20:56 +0000 Subject: [PATCH 10/27] updating wave post scripts for restructured format --- scripts/exgfs_wave_post_bndpnt.sh | 8 ++++++-- scripts/exgfs_wave_post_gridded_sbs.sh | 10 +++++++--- scripts/exgfs_wave_post_pnt.sh | 8 ++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/scripts/exgfs_wave_post_bndpnt.sh b/scripts/exgfs_wave_post_bndpnt.sh index 4eaf8219cd..ac27edb149 100755 --- a/scripts/exgfs_wave_post_bndpnt.sh +++ b/scripts/exgfs_wave_post_bndpnt.sh @@ -39,6 +39,10 @@ cd $DATA + # Set wave model ID tag to include member number + # if ensemble; waveMEMB var empty in deterministic + export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + postmsg "$jlogfile" "HAS BEGUN on `hostname`" msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" @@ -116,13 +120,13 @@ # Copy model definition files for grdID in $waveuoutpGRD do - if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] then set +x echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." [[ "$LOUD" = YES ]] && set -x - cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID iloop=`expr $iloop + 1` fi done diff --git a/scripts/exgfs_wave_post_gridded_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh index f9b7a52b1f..448d3ff267 100755 --- a/scripts/exgfs_wave_post_gridded_sbs.sh +++ b/scripts/exgfs_wave_post_gridded_sbs.sh @@ -37,6 +37,10 @@ export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES [[ "$LOUD" != YES ]] && set +x + # Set wave model ID tag to include member number + # if ensemble; waveMEMB var empty in deterministic + export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + cd $DATA postmsg "$jlogfile" "HAS BEGUN on `hostname`" @@ -116,13 +120,13 @@ # 1.a.1 Copy model definition files for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD do - if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] then set +x echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." [[ "$LOUD" = YES ]] && set -x - cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID fi done @@ -419,7 +423,7 @@ # Check if grib2 file created ENSTAG="" if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi - gribchk=${COMPONENTwave}.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 + gribchk=${CDUMP}wave.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 if [ ! -s ${COMOUT}/gridded/${gribchk} ]; then set +x echo ' ' diff --git a/scripts/exgfs_wave_post_pnt.sh b/scripts/exgfs_wave_post_pnt.sh index acfa680a57..b9f4ef57dc 100755 --- a/scripts/exgfs_wave_post_pnt.sh +++ b/scripts/exgfs_wave_post_pnt.sh @@ -40,6 +40,10 @@ cd $DATA + # Set wave model ID tag to include member number + # if ensemble; waveMEMB var empty in deterministic + export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + postmsg "$jlogfile" "HAS BEGUN on `hostname`" msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" @@ -120,13 +124,13 @@ # Copy model definition files for grdID in $waveuoutpGRD do - if [ -f "$COMIN/rundata/${COMPONENTwave}.mod_def.${grdID}" ] + if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] then set +x echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." [[ "$LOUD" = YES ]] && set -x - cp -f $COMIN/rundata/${COMPONENTwave}.mod_def.${grdID} mod_def.$grdID + cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID iloop=`expr $iloop + 1` fi done From 92a2a43db190982944b4166b929a791a1b0b0750 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Mon, 24 Aug 2020 14:06:23 +0000 Subject: [PATCH 11/27] Adding new wavepostbndpnt and wavepostpnt jobs --- jobs/rocoto/wavepostbndpnt.sh | 21 ++++++++++++++ jobs/rocoto/wavepostpnt.sh | 21 ++++++++++++++ parm/config/config.resources | 20 +++++++++++-- parm/config/config.wavepostbndpnt | 11 +++++++ parm/config/config.wavepostpnt | 11 +++++++ ush/rocoto/setup_workflow.py | 42 ++++++++++++++++----------- ush/rocoto/setup_workflow_fcstonly.py | 35 +++++++++++++--------- 7 files changed, 129 insertions(+), 32 deletions(-) create mode 100755 jobs/rocoto/wavepostbndpnt.sh create mode 100755 jobs/rocoto/wavepostpnt.sh create mode 100755 parm/config/config.wavepostbndpnt create mode 100755 parm/config/config.wavepostpnt diff --git a/jobs/rocoto/wavepostbndpnt.sh b/jobs/rocoto/wavepostbndpnt.sh new file mode 100755 index 0000000000..f1781db82f --- /dev/null +++ b/jobs/rocoto/wavepostbndpnt.sh @@ -0,0 +1,21 @@ +#!/bin/ksh -x + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +echo +echo "=============== START TO RUN WAVE_POST_BNDPNT ===============" +# Execute the JJOB +$HOMEgfs/jobs/JGLOBAL_WAVE_POST_BNDPNT +status=$? +exit $status + +############################################################### +# Force Exit out cleanly +if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi +exit 0 diff --git a/jobs/rocoto/wavepostpnt.sh b/jobs/rocoto/wavepostpnt.sh new file mode 100755 index 0000000000..a8ff035644 --- /dev/null +++ b/jobs/rocoto/wavepostpnt.sh @@ -0,0 +1,21 @@ +#!/bin/ksh -x + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +. $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +echo +echo "=============== START TO RUN WAVE_POST_PNT ===============" +# Execute the JJOB +$HOMEgfs/jobs/JGLOBAL_WAVE_POST_PNT +status=$? +exit $status + +############################################################### +# Force Exit out cleanly +if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi +exit 0 diff --git a/parm/config/config.resources b/parm/config/config.resources index 9af606b5e2..db6291618a 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -10,8 +10,8 @@ if [ $# -ne 1 ]; then echo "argument can be any one of the following:" echo "anal analcalc analdiag gldas fcst post vrfy metp arch echgres" echo "eobs ediag eomg eupd ecen esfc efcs epos earc" - echo "waveinit waveprep wavepostsbs wavegempaksbs waveawipssbs" - echo "wavepost waveawips wavestat" + echo "waveinit waveprep wavepostsbs wavepostbndpnt wavepostpnt" + echo "wavegempaksbs waveawipssbs waveawips wavestat" echo "postsnd awips gempak" exit 1 @@ -65,6 +65,22 @@ elif [ $step = "wavepostsbs" ]; then export npe_node_wavepostsbs=$(echo "$npe_node_max / $nth_wavepostsbs" | bc) export NTASKS=${npe_wavepostsbs} +elif [ $step = "wavepostbndpnt" ]; then + + export wtime_wavepostbndpnt="00:30:00" + export npe_wavepostbndpnt=280 + export nth_wavepostbndpnt=1 + export npe_node_wavepostbndpnt=$(echo "$npe_node_max / $nth_wavepostbndpnt" | bc) + export NTASKS=${npe_wavepostbndpnt} + +elif [ $step = "wavepostpnt" ]; then + + export wtime_wavepostpnt="00:30:00" + export npe_wavepostpnt=280 + export nth_wavepostpnt=1 + export npe_node_wavepostpnt=$(echo "$npe_node_max / $nth_wavepostpnt" | bc) + export NTASKS=${npe_wavepostpnt} + elif [ $step = "wavegempaksbs" ]; then export wtime_wavegempaksbs="06:00:00" diff --git a/parm/config/config.wavepostbndpnt b/parm/config/config.wavepostbndpnt new file mode 100755 index 0000000000..5ec96a697f --- /dev/null +++ b/parm/config/config.wavepostbndpnt @@ -0,0 +1,11 @@ +#!/bin/ksh -x + +########## config.wavepostbndpnt ########## +# Wave steps specific + +echo "BEGIN: config.wavepostbndpnt" + +# Get task specific resources +. $EXPDIR/config.resources wavepostbndpnt + +echo "END: config.wavepostbndpnt" diff --git a/parm/config/config.wavepostpnt b/parm/config/config.wavepostpnt new file mode 100755 index 0000000000..276ca230a6 --- /dev/null +++ b/parm/config/config.wavepostpnt @@ -0,0 +1,11 @@ +#!/bin/ksh -x + +########## config.wavepostpnt ########## +# Wave steps specific + +echo "BEGIN: config.wavepostpnt" + +# Get task specific resources +. $EXPDIR/config.resources wavepostpnt + +echo "END: config.wavepostpnt" diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 41efd882b8..93c2ee9093 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -47,9 +47,9 @@ def main(): gfs_steps_awips = ['awips'] #hyb_steps = ['eobs', 'eomg', 'eupd', 'ecen', 'efcs', 'epos', 'earc'] metp_steps = ['metp'] - wav_steps = ['waveinit', 'waveprep', 'wavepostsbs'] + wav_steps = ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt'] #Implement additional wave jobs at later date - #wav_steps = ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] + #wav_steps = ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'wavestat'] #wav_steps_gempak = ['wavegempaksbs'] #wav_steps_awips = ['waveawipssbs', 'waveawips'] # From gfsv16b latest @@ -247,14 +247,14 @@ def get_gdasgfs_resources(dict_configs, cdump='gdas'): if cdump in ['gdas'] and do_gldas in ['Y', 'YES']: tasks += ['gldas'] if cdump in ['gdas'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GDAS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs'] + #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'wavestat'] + tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt'] tasks += ['fcst', 'post', 'vrfy', 'arch'] if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GFS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs'] + #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'wavestat'] + tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt'] if cdump in ['gfs'] and do_bufrsnd in ['Y', 'YES']: tasks += ['postsnd'] if cdump in ['gfs'] and do_gempak in ['Y', 'YES']: @@ -571,6 +571,25 @@ def get_gdasgfs_tasks(dict_configs, cdump='gdas'): task = wfu.create_wf_task('wavepostsbs', cdump=cdump, envar=envars, dependency=dependencies) dict_tasks['%swavepostsbs' % cdump] = task + # wavepostbndpnt + if do_wave in ['Y', 'YES'] and cdump in ['gfs']: + deps = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_pnt.points.@Y@m@d.@H0000' % (cdump,cdump) + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + task = wfu.create_wf_task('wavepostbndpnt', cdump=cdump, envar=envars, dependency=dependencies) + dict_tasks['%swavepostbndpnt' % cdump] = task + + # wavepostpnt + if do_wave in ['Y', 'YES'] and cdump in cdumps: + deps = [] + dep_dict = {'type':'task', 'name':'%sfcst' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + task = wfu.create_wf_task('wavepostpnt', cdump=cdump, envar=envars, dependency=dependencies) + dict_tasks['%swavepostpnt' % cdump] = task + # wavegempaksbs #if do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES'] and cdump in ['gfs']: # deps = [] @@ -603,17 +622,6 @@ def get_gdasgfs_tasks(dict_configs, cdump='gdas'): # task = wfu.create_wf_task('waveawipssbs', cdump=cdump, envar=envars, dependency=dependencies) # dict_tasks['%swaveawipssbs' % cdump] = task - # wavepost - #if do_wave in ['Y', 'YES'] and cdump in cdumps: - # deps = [] - # dep_dict = {'type':'task', 'name':'%sfcst' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - # task = wfu.create_wf_task('wavepost', cdump=cdump, envar=envars, dependency=dependencies) - # dict_tasks['%swavepost' % cdump] = task - # waveawips #if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES'] and cdump in ['gfs']: # deps = [] diff --git a/ush/rocoto/setup_workflow_fcstonly.py b/ush/rocoto/setup_workflow_fcstonly.py index 8a308bb760..2e8272177a 100755 --- a/ush/rocoto/setup_workflow_fcstonly.py +++ b/ush/rocoto/setup_workflow_fcstonly.py @@ -27,8 +27,8 @@ import rocoto import workflow_utils as wfu -#taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'wavegempaksbs', 'waveawipssbs', 'wavepost', 'waveawips', 'wavestat', 'vrfy', 'metp', 'arch'] -taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'vrfy', 'metp', 'arch'] +#taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'wavegempaksbs', 'waveawipssbs', 'wavepostbndpnt', 'wavepostpnt', 'waveawips', 'wavestat', 'vrfy', 'metp', 'arch'] +taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'wavepostbndpnt', 'wavepostpnt', 'vrfy', 'metp', 'arch'] def main(): parser = ArgumentParser(description='Setup XML workflow and CRONTAB for a forecast only experiment.', formatter_class=ArgumentDefaultsHelpFormatter) @@ -360,17 +360,26 @@ def get_workflow(dict_configs, cdump='gdas'): tasks.append(task) tasks.append('\n') - # wavepost - #if do_wave in ['Y', 'YES']: - # deps = [] - # dep_dict = {'type':'task', 'name':'%sfcst' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep=deps) - # task = wfu.create_wf_task('wavepost', cdump=cdump, envar=envars, dependency=dependencies) - # tasks.append(task) - # tasks.append('\n') + # wavepostbndpnt + if do_wave in ['Y', 'YES']: + deps = [] + data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_pnt.points.@Y@m@d.@H0000' % (cdump,cdump) + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + task = wfu.create_wf_task('wavepostbndpnt', cdump=cdump, envar=envars, dependency=dependencies) + tasks.append(task) + tasks.append('\n') + + # wavepostpnt + if do_wave in ['Y', 'YES']: + deps = [] + dep_dict = {'type':'task', 'name':'%sfcst' % cdump} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + task = wfu.create_wf_task('wavepostpnt', cdump=cdump, envar=envars, dependency=dependencies) + tasks.append(task) + tasks.append('\n') # waveawips #if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES']: From e5c9f037bd82ed4bc72cf11241d7c053160ff5b9 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Mon, 24 Aug 2020 18:29:36 +0000 Subject: [PATCH 12/27] updates for new weights file and adding cdo module for wave prep --- modulefiles/module_base.wcoss_dell_p3 | 3 +++ ush/wave_prnc_cur.sh | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modulefiles/module_base.wcoss_dell_p3 b/modulefiles/module_base.wcoss_dell_p3 index 76de5f0622..4c7074dfa4 100644 --- a/modulefiles/module_base.wcoss_dell_p3 +++ b/modulefiles/module_base.wcoss_dell_p3 @@ -39,3 +39,6 @@ module load g2tmpl/1.6.0 # Load FSU Genesis module module use -a /gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/tracker/ens_tracker.v1.1.15.3/ush/FSUgenesisPY/modulefiles module load tclogg + +# waveprep +module load cdo/1.9.8 diff --git a/ush/wave_prnc_cur.sh b/ush/wave_prnc_cur.sh index 4c731e5ddd..a0fe7cec53 100755 --- a/ush/wave_prnc_cur.sh +++ b/ush/wave_prnc_cur.sh @@ -37,8 +37,7 @@ cd rtofs_${ymdh_rtofs} ncks -x -v sst,sss,layer_density $curfile cur_uv_${PDY}_${fext}${fh3}.nc ncks -O -a -h -x -v Layer cur_uv_${PDY}_${fext}${fh3}.nc cur_temp1.nc ncwa -h -O -a Layer cur_temp1.nc cur_temp2.nc -ncrename -h -O -v MT,time cur_temp2.nc -ncrename -h -O -d MT,time cur_temp2.nc +ncrename -h -O -v MT,time -d MT,time cur_temp2.nc ncks -v u_velocity,v_velocity cur_temp2.nc cur_temp3.nc mv -f cur_temp3.nc cur_uv_${PDY}_${fext}${fh3}_flat.nc From a2d06bb0bf82ee48899cb26ea9abf2331b543107 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Mon, 24 Aug 2020 18:55:02 +0000 Subject: [PATCH 13/27] adding module use for cdo module on wcoss dell --- modulefiles/module_base.wcoss_dell_p3 | 1 + 1 file changed, 1 insertion(+) diff --git a/modulefiles/module_base.wcoss_dell_p3 b/modulefiles/module_base.wcoss_dell_p3 index 4c7074dfa4..aac7eff22f 100644 --- a/modulefiles/module_base.wcoss_dell_p3 +++ b/modulefiles/module_base.wcoss_dell_p3 @@ -41,4 +41,5 @@ module use -a /gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/tracker/ens_track module load tclogg # waveprep +module use -a /usrx/local/dev/modulefiles module load cdo/1.9.8 From 32bd57ef2b390dbe73a744188a40ca4c42c306fe Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Mon, 24 Aug 2020 20:35:39 +0000 Subject: [PATCH 14/27] updating WCOSS work around for CDO, CDO_ROOT is missing from module file --- parm/config/config.waveprep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/config/config.waveprep b/parm/config/config.waveprep index f400a7f934..aaf8675283 100755 --- a/parm/config/config.waveprep +++ b/parm/config/config.waveprep @@ -37,7 +37,7 @@ export WAV_CUR_HF_FH=${WAV_CUR_HF_FH:-0} # Constant DT for GFSv16 from getgo export WAV_CUR_CDO_SMOOTH="NO" # Location of CDO module -export CDO_ROOT=${CDO_ROOT:-/gpfs/dell1/nco/ops/nwprod/rtofs_shared/rtofs_cdo.v1.6.0} +export CDO_ROOT=${CDO_ROOT:-/usrx/local/dev/packages/cdo/1.9.8} if [ "${WW3ICEINP}" = "YES" ]; then export WAVICEFILE=${CDUMP}.t${cyc}z.seaice.5min.grib2 From 0eacf5e21c3149d2d922b4c2495e48fb2355e639 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Mon, 24 Aug 2020 22:27:28 +0000 Subject: [PATCH 15/27] fix typos --- scripts/exgfs_wave_post_bndpnt.sh | 3 +-- scripts/exgfs_wave_post_pnt.sh | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/exgfs_wave_post_bndpnt.sh b/scripts/exgfs_wave_post_bndpnt.sh index ac27edb149..af58b42c89 100755 --- a/scripts/exgfs_wave_post_bndpnt.sh +++ b/scripts/exgfs_wave_post_bndpnt.sh @@ -361,7 +361,6 @@ fi fhrp=$fhr fhrg=$fhr - iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) while [ $fhr -le $FHMAX_WAV ]; do ymdh=`$NDATE $fhr $CDATE` @@ -500,7 +499,7 @@ fi echo $fhrp - fhr=$fhp # no gridded output, loop with out_pnt stride + fhr=$fhrp # no gridded output, loop with out_pnt stride done diff --git a/scripts/exgfs_wave_post_pnt.sh b/scripts/exgfs_wave_post_pnt.sh index b9f4ef57dc..c5860a0afe 100755 --- a/scripts/exgfs_wave_post_pnt.sh +++ b/scripts/exgfs_wave_post_pnt.sh @@ -428,7 +428,6 @@ fi fhrp=$fhr fhrg=$fhr - iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) while [ $fhr -le $FHMAX_WAV ]; do ymdh=`$NDATE $fhr $CDATE` @@ -576,7 +575,7 @@ fi echo $fhrp - fhr=$fhp # no gridded output, loop with out_pnt stride + fhr=$fhrp # no gridded output, loop with out_pnt stride done From 25e2cc4596213b39d2a3dc3ee8afda4a86e10d38 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 25 Aug 2020 18:12:04 +0000 Subject: [PATCH 16/27] Fix wavepostbndpnt dependency and increase wavepostbntpnt and wavepostpnt walltimes --- parm/config/config.resources | 4 ++-- ush/rocoto/setup_workflow.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parm/config/config.resources b/parm/config/config.resources index db6291618a..4c4ef8075c 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -67,7 +67,7 @@ elif [ $step = "wavepostsbs" ]; then elif [ $step = "wavepostbndpnt" ]; then - export wtime_wavepostbndpnt="00:30:00" + export wtime_wavepostbndpnt="01:00:00" export npe_wavepostbndpnt=280 export nth_wavepostbndpnt=1 export npe_node_wavepostbndpnt=$(echo "$npe_node_max / $nth_wavepostbndpnt" | bc) @@ -75,7 +75,7 @@ elif [ $step = "wavepostbndpnt" ]; then elif [ $step = "wavepostpnt" ]; then - export wtime_wavepostpnt="00:30:00" + export wtime_wavepostpnt="01:00:00" export npe_wavepostpnt=280 export nth_wavepostpnt=1 export npe_node_wavepostpnt=$(echo "$npe_node_max / $nth_wavepostpnt" | bc) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index 93c2ee9093..f5f96e34bd 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -574,7 +574,7 @@ def get_gdasgfs_tasks(dict_configs, cdump='gdas'): # wavepostbndpnt if do_wave in ['Y', 'YES'] and cdump in ['gfs']: deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_pnt.points.@Y@m@d.@H0000' % (cdump,cdump) + data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.logf192.txt' % (cdump, cdump) dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) From b74b21e71edbb62207ccfcafe4c6ed5b6d301cfe Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Tue, 25 Aug 2020 18:14:15 +0000 Subject: [PATCH 17/27] Remove extra space from line --- ush/rocoto/setup_workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py index f5f96e34bd..35ad0d3d19 100755 --- a/ush/rocoto/setup_workflow.py +++ b/ush/rocoto/setup_workflow.py @@ -574,7 +574,7 @@ def get_gdasgfs_tasks(dict_configs, cdump='gdas'): # wavepostbndpnt if do_wave in ['Y', 'YES'] and cdump in ['gfs']: deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.logf192.txt' % (cdump, cdump) + data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.logf192.txt' % (cdump,cdump) dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) From 1fc5b368fe0cd438e2202b62de7753b7efed7af6 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Tue, 25 Aug 2020 19:00:20 +0000 Subject: [PATCH 18/27] updates to boundary point --- scripts/exgfs_wave_post_bndpnt.sh | 63 +++++++++---------------------- 1 file changed, 17 insertions(+), 46 deletions(-) diff --git a/scripts/exgfs_wave_post_bndpnt.sh b/scripts/exgfs_wave_post_bndpnt.sh index af58b42c89..ac2f680495 100755 --- a/scripts/exgfs_wave_post_bndpnt.sh +++ b/scripts/exgfs_wave_post_bndpnt.sh @@ -42,6 +42,7 @@ # Set wave model ID tag to include member number # if ensemble; waveMEMB var empty in deterministic export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + FHMAX_WAV_IBP=192 postmsg "$jlogfile" "HAS BEGUN on `hostname`" @@ -361,7 +362,7 @@ fi fhrp=$fhr fhrg=$fhr - while [ $fhr -le $FHMAX_WAV ]; do + while [ $fhr -le $FHMAX_WAV_IBP ]; do ymdh=`$NDATE $fhr $CDATE` YMD=$(echo $ymdh | cut -c1-8) @@ -526,56 +527,26 @@ if [ "$DOIBP_WAV" = 'YES' ] then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - fi - fi - if [ "$DOSPC_WAV" = 'YES' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - fi + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile fi fi - wavenproc=`wc -l cmdtarfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + wavenproc=`wc -l cmdtarfile | awk '{print $1}'` + wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - set +x - echo ' ' - echo " Executing the wave_tar scripts at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x + set +x + echo ' ' + echo " Executing the wave_tar scripts at : `date`" + echo ' ------------------------------------' + echo ' ' + [[ "$LOUD" = YES ]] && set -x - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile - else - ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile - fi - exit=$? - else - chmod 744 cmdtarfile - ./cmdtarfile - exit=$? - fi + chmod 744 cmdtarfile + ./cmdtarfile + exit=$? - if [ "$exit" != '0' ] - then + if [ "$exit" != '0' ] + then set +x echo ' ' echo '*************************************' @@ -586,7 +557,7 @@ [[ "$LOUD" = YES ]] && set -x err=11; export err;${errchk} exit $err - fi + fi # --------------------------------------------------------------------------- # # 7. Ending output From 1f15be0a8207d3117200bcc145a5ae66b7445ec3 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Tue, 25 Aug 2020 19:01:41 +0000 Subject: [PATCH 19/27] remove gridded so can rename --- scripts/exgfs_wave_post_gridded_sbs.sh | 479 ------------------------- 1 file changed, 479 deletions(-) delete mode 100755 scripts/exgfs_wave_post_gridded_sbs.sh diff --git a/scripts/exgfs_wave_post_gridded_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh deleted file mode 100755 index 448d3ff267..0000000000 --- a/scripts/exgfs_wave_post_gridded_sbs.sh +++ /dev/null @@ -1,479 +0,0 @@ -#!/bin/bash -# -################################################################################ -# -# UNIX Script Documentation Block -# Script name: exgfs_wave_post_gridded_sbs.sh -# Script description: Creates output products from binary WW3 data -# -# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 -# Abstract: This script is the postprocessor for the wave component in GFS. -# This version runs side-by-side with the GFS fcst step. -# It executes several scripts forpreparing and creating output data -# as follows: -# -# wave_grib2_sbs.sh : generates GRIB2 files. -# wave_grid_interp_ush.sh : interpolates data from new grids to old grids -# -# Script history log: -# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 -# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera -# 2020-07-31 Jessica Meixner: Removing points, now gridded data only -# -# $Id$ -# -# Attributes: -# Language: Bourne-again (Bash) Shell -# Machine: WCOSS-DELL-P3 -# -############################################################################### -# -# --------------------------------------------------------------------------- # -# 0. Preparations -# 0.a Basic modes of operation - - set -x - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x - - # Set wave model ID tag to include member number - # if ensemble; waveMEMB var empty in deterministic - export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} - - cd $DATA - - postmsg "$jlogfile" "HAS BEGUN on `hostname`" - - msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" - postmsg "$jlogfile" "$msg" - - set +x - echo ' ' - echo ' *********************************' - echo ' *** WAVE POSTPROCESSOR SCRIPT ***' - echo ' *********************************' - echo ' ' - echo "Starting at : `date`" - echo '-------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - -# Script will run only if pre-defined NTASKS -# The actual work is distributed over these tasks. - if [ -z ${NTASKS} ] - then - echo "FATAL ERROR: requires NTASKS to be set " - err=1; export err;${errchk} - exit $err - fi - -# 0.c Defining model grids - -# 0.c.1 Grids - - export waveGRD=${waveGRD?Var waveGRD Not Set} - export wavesbsGRD=${wavesbsGRD?Var wavesbsGRD Not Set} - -# 0.c.2 extended global grid and rtma transfer grid - export waveinterpGRD=${waveinterpGRD?Var wavepostGRD Not Set} - export wavepostGRD=${wavepostGRD?Var wavepostGRD Not Set} - - - set +x - echo ' ' - echo 'Grid information :' - echo '-------------------' - echo " Native wave grids : $waveGRD" - echo " Side-by-side grids : $wavesbsGRD" - echo " Interpolated grids : $waveinterpGRD" - echo " Post-process grids : $wavepostGRD" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - -# 0.c.3 Define CDATE_POST as a function of RERUN variable setting - if [ "${RERUN}" = "YES" ]; then - export CDATE_POST=${CDATE_RST} - export FHRUN=`$NHOUR ${CDATE_RST} ${CDATE}` - else # regular run - export CDATE_POST=${CDATE} - export FHRUN=0 - fi - -# --------------------------------------------------------------------------- # -# 1. Get files that are used by most child scripts - - export DOGRB_WAV='YES' #Create grib2 files - export DOGRI_WAV='YES' #Create interpolated grids - - exit_code=0 - - set +x - echo ' ' - echo 'Preparing input files :' - echo '-----------------------' - [[ "$LOUD" = YES ]] && set -x - -# 1.a Model definition files and output files (set up using poe) - -# 1.a.1 Copy model definition files - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD - do - if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] - then - set +x - echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." - [[ "$LOUD" = YES ]] && set -x - - cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID - fi - done - -# 1.a.2 Check that model definition files exist - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD - do - if [ ! -f mod_def.$grdID ] - then - set +x - echo ' ' - echo '*************************************************** ' - echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" - err=2; export err;${errchk} - exit $err - DOGRB_WAV='NO' - else - set +x - echo "File mod_def.$grdID found. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - fi - done - - -# 1.b Input template files - - if [ "$DOGRI_WAV" = 'YES' ] - then - for intGRD in $waveinterpGRD - do - if [ -f $FIXwave/${intGRD}_interp.inp.tmpl ] - then - cp -f $FIXwave/${intGRD}_interp.inp.tmpl ${intGRD}_interp.inp.tmpl - fi - - if [ -f ${intGRD}_interp.inp.tmpl ] - then - set +x - echo " ${intGRD}_interp.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo '*** ERROR : NO TEMPLATE FOR GRINT INPUT FILE *** ' - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - echo "$WAV_MOD_TAG post $date $cycle : GRINT template file missing." - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRINT INPUT FILE" - exit_code=1 - DOGRI_WAV='NO' - fi - done - fi - - if [ "$DOGRB_WAV" = 'YES' ] - then - for grbGRD in $waveinterpGRD $wavepostGRD - do - if [ -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ] - then - cp -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ww3_grib2.${grbGRD}.inp.tmpl - fi - - if [ -f ww3_grib2.${grbGRD}.inp.tmpl ] - then - set +x - echo " ww3_grib2.${grbGRD}.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo "*** ERROR : NO TEMPLATE FOR ${grbGRD} GRIB INPUT FILE *** " - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRIB2 INPUT FILE" - exit_code=2 - DOGRB_WAV='NO' - fi - done - fi - - -# 1.c Data summary - - set +x - echo ' ' - echo " Input files read and processed at : `date`" - echo ' ' - echo ' Data summary : ' - echo ' ---------------------------------------------' - echo " Sufficient data for GRID interpolation : $DOGRI_WAV" - echo " Sufficient data for GRIB files : $DOGRB_WAV" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - -# --------------------------------------------------------------------------- # -# 2. Make consolidated grib2 file for side-by-side grids and interpolate -# onto extended grids -# -# 2.a Command file set-up - - set +x - echo ' Making command file for sbs grib2 and GRID Interpolation ' - [[ "$LOUD" = YES ]] && set -x - - rm -f cmdfile - touch cmdfile - chmod 744 cmdfile - -# 1.a.2 Loop over forecast time to generate post files -# When executed side-by-side, serial mode (cfp when run after the fcst step) -# Contingency for RERUN=YES - if [ "${RERUN}" = "YES" ]; then - fhr=$((FHRUN + FHMIN_WAV)) - if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then - FHINCG=$FHOUT_HF_WAV - else - FHINCG=$FHOUT_WAV - fi - fhr=$((fhr + FHINCG)) - else - fhr=$FHMIN_WAV - fi - fhrg=$fhr - iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) - while [ $fhr -le $FHMAX_WAV ]; do - - ymdh=`$NDATE $fhr $CDATE` - YMD=$(echo $ymdh | cut -c1-8) - HMS="$(echo $ymdh | cut -c9-10)0000" - YMDHMS=${YMD}${HMS} - FH3=$(printf %03i $fhr) - - fcmdnow=cmdfile.${FH3} - fcmdigrd=icmdfile.${FH3} - rm -f ${fcmdnow} ${fcmdigrd} - touch ${fcmdnow} ${fcmdigrd} - mkdir output_$YMDHMS - cd output_$YMDHMS - -# Create instances of directories for gridded output - export GRIBDATA=${DATA}/output_$YMDHMS - export GRDIDATA=${DATA}/output_$YMDHMS - -# Gridded data (main part, need to be run side-by-side with forecast - - if [ $fhr = $fhrg ] - then - iwait=0 - for wavGRD in ${waveGRD} ; do - gfile=$COMIN/rundata/${WAV_MOD_TAG}.out_grd.${wavGRD}.${YMD}.${HMS} - while [ ! -s ${gfile} ]; do sleep 10; done - if [ $iwait -eq $iwaitmax ]; then - echo '*************************************************** ' - echo " FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID " - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - echo "$WAV_MOD_TAG post $grdID $date $cycle : field output missing." - postmsg "$jlogfile" "NON-FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID" - err=3; export err;${errchk} - exit $err - fi - ln -s ${gfile} ./out_grd.${wavGRD} - done - - if [ "$DOGRI_WAV" = 'YES' ] - then - nigrd=1 - for grdID in $waveinterpGRD - do - case $grdID in - glo_15mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; - glo_30mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; - esac - echo "$USHwave/wave_grid_interp_sbs.sh $grdID $ymdh_int $dt_int $n_int > grint_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} - if [ "$DOGRB_WAV" = 'YES' ] - then - gribFL=\'`echo ${OUTPARS_WAV}`\' - case $grdID in - glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - glo_30mxt) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=11 ;; - esac - echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} - fi - echo "pwd" >> ${fcmdnow} - echo "${GRIBDATA}/${fcmdigrd}.${nigrd}" >> ${fcmdnow} - chmod 744 ${fcmdigrd}.${nigrd} - nigrd=$((nigrd+1)) - done - fi - - if [ "$DOGRB_WAV" = 'YES' ] - then - for grdID in ${wavepostGRD} # First concatenate grib files for sbs grids - do - gribFL=\'`echo ${OUTPARS_WAV}`\' - case $grdID in - aoc_9km) GRDNAME='arctic' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; - ant_9km) GRDNAME='antarc' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; - glo_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; - gnh_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; - gsh_15m) GRDNAME='gsouth' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - glo_15m) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - ao_20m) GRDNAME='arctic' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; - so_20m) GRDNAME='antarc' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; - glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - esac - echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdnow} - done - fi - - fi - - if [ ${CFP_MP:-"NO"} = "YES" ]; then - nfile=0 - ifile=0 - iline=1 - ifirst='yes' - nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) - while [ $iline -le $nlines ]; do - line=$( sed -n ''$iline'p' ${fcmdnow} ) - if [ -z "$line" ]; then - break - else - if [ "$ifirst" = 'yes' ]; then - echo "#!/bin/sh" > cmdmfile.$nfile - echo "$nfile cmdmfile.$nfile" >> cmdmprog - chmod 744 cmdmfile.$nfile - fi - echo $line >> cmdmfile.$nfile - nfile=$(( nfile + 1 )) - if [ $nfile -eq $NTASKS ]; then - nfile=0 - ifirst='no' - fi - iline=$(( iline + 1 )) - fi - done - fi - - wavenproc=`wc -l ${fcmdnow} | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - - set +x - echo ' ' - echo " Executing the grib2_sbs scripts at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog - else - ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} - fi - exit=$? - else - chmod 744 ${fcmdnow} - ./${fcmdnow} - exit=$? - fi - - if [ "$exit" != '0' ] - then - set +x - echo ' ' - echo '*************************************' - echo '*** FATAL ERROR: CMDFILE FAILED ***' - echo '*************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=4; export err;${errchk} - exit $err - fi - - rm -f out_grd.* # Remove large binary grid output files - - cd $DATA - - FHINCG=$(( DTFLD_WAV / 3600 )) - if [ $fhr = $fhrg ] - then -# Check if grib2 file created - ENSTAG="" - if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi - gribchk=${CDUMP}wave.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 - if [ ! -s ${COMOUT}/gridded/${gribchk} ]; then - set +x - echo ' ' - echo '********************************************' - echo "*** FATAL ERROR: $gribchk not generated " - echo '********************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=5; export err;${errchk} - exit $err - fi - if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then - FHINCG=$FHOUT_HF_WAV - else - FHINCG=$FHOUT_WAV - fi - fhrg=$((fhr+FHINCG)) - fi - echo $fhrg - - fhr=$fhrg #loop with out_grd stride - - done - -# --------------------------------------------------------------------------- # -# 7. Ending output - - set +x - echo ' ' - echo "Ending at : `date`" - echo '-----------' - echo ' ' - echo ' *** End of MWW3 postprocessor ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$exit_code" -ne '0' ] - then - echo " FATAL ERROR: Problem in MWW3 POST" - msg="ABNORMAL EXIT: Problem in MWW3 POST" - postmsg "$jlogfile" "$msg" - echo $msg - err=6; export err;${errchk} - exit $err - else - echo " Side-by-Side Wave Post Completed Normally " - msg="$job completed normally" - postmsg "$jlogfile" "$msg" - exit 0 - fi - -# End of MWW3 prostprocessor script ---------------------------------------- # From 90181842fbb7a22479f12d3a67bcdc8fa4b8f669 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Tue, 25 Aug 2020 19:02:22 +0000 Subject: [PATCH 20/27] rename wave post script --- ..._sbs.sh => exgfs_wave_post_gridded_sbs.sh} | 456 +----------------- 1 file changed, 23 insertions(+), 433 deletions(-) rename scripts/{exgfs_wave_post_sbs.sh => exgfs_wave_post_gridded_sbs.sh} (50%) diff --git a/scripts/exgfs_wave_post_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh similarity index 50% rename from scripts/exgfs_wave_post_sbs.sh rename to scripts/exgfs_wave_post_gridded_sbs.sh index 8485b13ad6..448d3ff267 100755 --- a/scripts/exgfs_wave_post_sbs.sh +++ b/scripts/exgfs_wave_post_gridded_sbs.sh @@ -3,7 +3,7 @@ ################################################################################ # # UNIX Script Documentation Block -# Script name: exwave_post_sbs.sh +# Script name: exgfs_wave_post_gridded_sbs.sh # Script description: Creates output products from binary WW3 data # # Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 @@ -13,14 +13,12 @@ # as follows: # # wave_grib2_sbs.sh : generates GRIB2 files. -# wave_outp_spec.sh : generates spectral data for output locations. -# wave_outp_bull.sh : generates bulletins for output locations. # wave_grid_interp_ush.sh : interpolates data from new grids to old grids -# wave_tar.sh : tars the spectral and bulletin multiple files # # Script history log: # 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 # 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-31 Jessica Meixner: Removing points, now gridded data only # # $Id$ # @@ -72,30 +70,15 @@ # 0.c Defining model grids - waveuoutpGRD=${waveuoutpGRD:?buoyNotSet} - # 0.c.1 Grids export waveGRD=${waveGRD?Var waveGRD Not Set} export wavesbsGRD=${wavesbsGRD?Var wavesbsGRD Not Set} -# 0.c.3 extended global grid and rtma transfer grid +# 0.c.2 extended global grid and rtma transfer grid export waveinterpGRD=${waveinterpGRD?Var wavepostGRD Not Set} export wavepostGRD=${wavepostGRD?Var wavepostGRD Not Set} -# 0.c.4 Define a temporary directory for storing ascii point output files -# and flush it - - export STA_DIR=$DATA/station_ascii_files - if [ -d $STA_DIR ] - then - rm -rf ${STA_DIR} - fi - mkdir -p ${STA_DIR} - mkdir -p ${STA_DIR}/spec - mkdir -p ${STA_DIR}/ibp - mkdir -p ${STA_DIR}/bull - mkdir -p ${STA_DIR}/cbull set +x echo ' ' @@ -105,12 +88,11 @@ echo " Side-by-side grids : $wavesbsGRD" echo " Interpolated grids : $waveinterpGRD" echo " Post-process grids : $wavepostGRD" - echo " Output points : $waveuoutpGRD" echo ' ' [[ "$LOUD" = YES ]] && set -x -# 0.c.5 Define CDATE_POST as a function of RERUN variable setting +# 0.c.3 Define CDATE_POST as a function of RERUN variable setting if [ "${RERUN}" = "YES" ]; then export CDATE_POST=${CDATE_RST} export FHRUN=`$NHOUR ${CDATE_RST} ${CDATE}` @@ -122,13 +104,8 @@ # --------------------------------------------------------------------------- # # 1. Get files that are used by most child scripts - export DOIBP_WAV='NO' - export DOFLD_WAV='YES' - export DOPNT_WAV='YES' - export DOGRB_WAV='YES' - export DOGRI_WAV='YES' - export DOSPC_WAV='YES' - export DOBLL_WAV='YES' + export DOGRB_WAV='YES' #Create grib2 files + export DOGRI_WAV='YES' #Create interpolated grids exit_code=0 @@ -140,16 +117,8 @@ # 1.a Model definition files and output files (set up using poe) -# 1.a.1 Set up the parallel command tasks - - rm -f cmdfile - touch cmdfile - chmod 744 cmdfile - - [[ "$LOUD" = YES ]] && set -x - -# Copy model definition files - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD $waveuoutpGRD +# 1.a.1 Copy model definition files + for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD do if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] then @@ -158,11 +127,11 @@ [[ "$LOUD" = YES ]] && set -x cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID - iloop=`expr $iloop + 1` fi done - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD $waveuoutpGRD +# 1.a.2 Check that model definition files exist + for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD do if [ ! -f mod_def.$grdID ] then @@ -174,7 +143,6 @@ echo ' ' [[ "$LOUD" = YES ]] && set -x postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" - DOFLD_WAV='NO' err=2; export err;${errchk} exit $err DOGRB_WAV='NO' @@ -185,63 +153,8 @@ fi done -# 1.c Output locations file - - rm -f buoy.loc - - if [ -f $FIXwave/wave_${NET}.buoys ] - then - cp -f $FIXwave/wave_${NET}.buoys buoy.loc.temp -# Reverse grep to exclude IBP points - sed -n '/^\$.*/!p' buoy.loc.temp | grep -v IBP > buoy.loc - fi - if [ -s buoy.loc ] - then - set +x - echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '************************************* ' - echo ' FATAL ERROR : NO BUOY LOCATION FILE ' - echo '************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" - err=3; export err;${errchk} - exit $err - DOPNT_WAV='NO' - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - sed -n '/^\$.*/!p' buoy.loc.temp | grep IBP > buoy.ibp - if [ -s buoy.ibp ]; then - set +x - echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '************************************* ' - echo ' FATAL ERROR : NO BUOY LOCATION FILE ' - echo '************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" - err=3; export err;${errchk} - exit $err - DOPNT_WAV='NO' - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - fi - -# 1.d Input template files +# 1.b Input template files if [ "$DOGRI_WAV" = 'YES' ] then @@ -302,178 +215,8 @@ done fi - if [ -f $FIXwave/ww3_outp_spec.inp.tmpl ] - then - cp -f $FIXwave/ww3_outp_spec.inp.tmpl ww3_outp_spec.inp.tmpl - fi - - if [ -f ww3_outp_spec.inp.tmpl ] - then - set +x - echo " ww3_outp_spec.inp.tmpl copied. Syncing to all grids ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo '*** ERROR : NO TEMPLATE FOR SPEC INPUT FILE *** ' - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR SPEC INPUT FILE" - exit_code=3 - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - - if [ -f $FIXwave/ww3_outp_bull.inp.tmpl ] - then - cp -f $FIXwave/ww3_outp_bull.inp.tmpl ww3_outp_bull.inp.tmpl - fi - - if [ -f ww3_outp_bull.inp.tmpl ] - then - set +x - echo " ww3_outp_bull.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*************************************************** ' - echo '*** ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE *** ' - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE" - exit_code=4 - DOBLL_WAV='NO' - fi - -# 1.e Getting buoy information for points - - if [ "$DOSPC_WAV" = 'YES' ] || [ "$DOBLL_WAV" = 'YES' ] - then - ymdh=`$NDATE -${WAVHINDH} $CDATE_POST` - tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" - dtspec=3600. # default time step (not used here) - sed -e "s/TIME/$tstart/g" \ - -e "s/DT/$dtspec/g" \ - -e "s/POINT/1/g" \ - -e "s/ITYPE/0/g" \ - -e "s/FORMAT/F/g" \ - ww3_outp_spec.inp.tmpl > ww3_outp.inp - - ln -s mod_def.$waveuoutpGRD mod_def.ww3 - YMD=$(echo $CDATE_POST | cut -c1-8) - HMS="$(echo $CDATE_POST | cut -c9-10)0000" - tloop=0 - tloopmax=600 - tsleep=10 - while [ ${tloop} -le ${tloopmax} ] - do - if [ -f $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ] - then - ln -s $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ./out_pnt.${waveuoutpGRD} - break - else - sleep ${tsleep} - tloop=$(($tloop + $tsleep)) - fi - done - - rm -f buoy_tmp.loc buoy_log.ww3 ww3_oup.inp - ln -fs ./out_pnt.${waveuoutpGRD} ./out_pnt.ww3 - ln -fs ./mod_def.${waveuoutpGRD} ./mod_def.ww3 - $EXECwave/ww3_outp > buoy_lst.loc 2>&1 - err=$? - - if [ "$err" != '0' ] && [ ! -f buoy_log.ww3 ] - then - pgm=wave_post - msg="ABNORMAL EXIT: ERROR IN ww3_outp" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '******************************************** ' - echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' - echo '******************************************** ' - echo ' ' - cat buoy_tmp.loc - echo "$WAV_MOD_TAG post $date $cycle : buoy log file failed to be created." - echo $msg - [[ "$LOUD" = YES ]] && set -x - err=4;export err;${errchk} - DOSPC_WAV='NO' - DOBLL_WAV='NO' - exit $err - fi - -# Create new buoy_log.ww3 excluding all IBP files - cat buoy.loc | awk '{print $3}' | sed 's/'\''//g' > ibp_tags - grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp - rm -f buoy_log.dat - mv buoy_log.tmp buoy_log.dat - - grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc - sed '$d' buoy_tmp1.loc > buoy_tmp2.loc - buoys=`awk '{ print $1 }' buoy_tmp2.loc` - Nb=`wc buoy_tmp2.loc | awk '{ print $1 }'` - rm -f buoy_tmp1.loc buoy_tmp2.loc - - if [ -s buoy_log.dat ] - then - set +x - echo 'Buoy log file created. Syncing to all nodes ...' - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '**************************************** ' - echo '*** ERROR : NO BUOY LOG FILE CREATED *** ' - echo '**************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" - err=5;export err;${errchk} - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - -# Create new buoy_log.ww3 including all IBP files - if [ "$DOIBP_WAV" = 'YES' ]; then - cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags - grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp - rm -f buoy_log.ibp - mv buoy_log.tmp buoy_log.ibp - - grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc - sed '$d' buoy_tmp1.loc > buoy_tmp2.loc - ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` - Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` - rm -f buoy_tmp1.loc buoy_tmp2.loc - if [ -s buoy_log.ibp ] - then - set +x - echo 'IBP log file created. Syncing to all nodes ...' - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '********************************************** ' - echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' - echo '********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." - postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" - err=6;export err;${errchk} - exit $err - DOIBP_WAV='NO' - fi - fi - fi -# 1.f Data summary +# 1.c Data summary set +x echo ' ' @@ -483,9 +226,6 @@ echo ' ---------------------------------------------' echo " Sufficient data for GRID interpolation : $DOGRI_WAV" echo " Sufficient data for GRIB files : $DOGRB_WAV" - echo " Sufficient data for spectral files : $DOSPC_WAV ($Nb points)" - echo " Sufficient data for bulletins : $DOBLL_WAV ($Nb points)" - echo " Sufficient data for Input Boundary Points : $DOIBP_WAV ($Nibp points)" echo ' ' [[ "$LOUD" = YES ]] && set -x @@ -513,13 +253,10 @@ else FHINCG=$FHOUT_WAV fi -# Get minimum value to start count from fhr+min(fhrp,fhrg) - fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` - fhr=$((fhr + fhrinc)) + fhr=$((fhr + FHINCG)) else fhr=$FHMIN_WAV fi - fhrp=$fhr fhrg=$fhr iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) while [ $fhr -le $FHMAX_WAV ]; do @@ -532,21 +269,14 @@ fcmdnow=cmdfile.${FH3} fcmdigrd=icmdfile.${FH3} - if [ "${DOPNT_WAV}" = "YES" ]; then - fcmdpnt=pcmdfile.${FH3} - fcmdibp=ibpcmdfile.${FH3} - fi - rm -f ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} - touch ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} + rm -f ${fcmdnow} ${fcmdigrd} + touch ${fcmdnow} ${fcmdigrd} mkdir output_$YMDHMS cd output_$YMDHMS -# Create instances of directories for spec and gridded output - export SPECDATA=${DATA}/output_$YMDHMS - export BULLDATA=${DATA}/output_$YMDHMS +# Create instances of directories for gridded output export GRIBDATA=${DATA}/output_$YMDHMS export GRDIDATA=${DATA}/output_$YMDHMS - ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 # Gridded data (main part, need to be run side-by-side with forecast @@ -564,8 +294,7 @@ [[ "$LOUD" = YES ]] && set -x echo "$WAV_MOD_TAG post $grdID $date $cycle : field output missing." postmsg "$jlogfile" "NON-FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID" - DOFLD_WAVE='NO' - err=7; export err;${errchk} + err=3; export err;${errchk} exit $err fi ln -s ${gfile} ./out_grd.${wavGRD} @@ -619,51 +348,6 @@ fi -# Point output part (can be split or become meta-task to reduce resource usage) - if [ $fhr = $fhrp ] - then - iwait=0 - pfile=$COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} - while [ ! -s ${pfile} ]; do sleep 10; ((iwait++)) && ((iwait==$iwaitmax)) && break ; echo $iwait; done - if [ $iwait -eq $iwaitmax ]; then - echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD - err=6; export err;${errchk} - exit $err - fi - ln -fs ${pfile} ./out_pnt.${waveuoutpGRD} - - if [ "$DOSPC_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $buoys - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec > spec_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $ibpoints - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - if [ "$DOBLL_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $buoys - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh bull > bull_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - fi - if [ ${CFP_MP:-"NO"} = "YES" ]; then nfile=0 ifile=0 @@ -725,7 +409,7 @@ echo ' See Details Below ' echo ' ' [[ "$LOUD" = YES ]] && set -x - err=8; export err;${errchk} + err=4; export err;${errchk} exit $err fi @@ -733,14 +417,13 @@ cd $DATA - FHINCP=$(( DTPNT_WAV / 3600 )) FHINCG=$(( DTFLD_WAV / 3600 )) if [ $fhr = $fhrg ] then # Check if grib2 file created ENSTAG="" if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi - gribchk=${COMPONENTwave}.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 + gribchk=${CDUMP}wave.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2 if [ ! -s ${COMOUT}/gridded/${gribchk} ]; then set +x echo ' ' @@ -750,7 +433,7 @@ echo ' See Details Below ' echo ' ' [[ "$LOUD" = YES ]] && set -x - err=8; export err;${errchk} + err=5; export err;${errchk} exit $err fi if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then @@ -760,105 +443,12 @@ fi fhrg=$((fhr+FHINCG)) fi - if [ $fhr = $fhrp ] - then - fhrp=$((fhr+FHINCP)) - fi - echo $fhrg $fhrp + echo $fhrg - if [ "${DOPNT_WAV}" = "YES" ]; then - fhr=$([ $fhrg -le $fhrp ] && echo "$fhrg" || echo "$fhrp") # reference fhr is the least between grid and point stride - else - fhr=$fhrg # no point output, loop with out_grd stride - fi + fhr=$fhrg #loop with out_grd stride done - if [ "${DOPNT_WAV}" = "YES" ]; then - -# --------------------------------------------------------------------------- # -# 3. Compress point output data into tar files - -# 3.a Set up cmdfile - - rm -f cmdtarfile - touch cmdtarfile - chmod 744 cmdtarfile - - set +x - echo ' ' - echo ' Making command file for taring all point output files.' - - [[ "$LOUD" = YES ]] && set -x - -# 6.b Spectral data files - - if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - fi - fi - if [ "$DOSPC_WAV" = 'YES' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - fi - fi - fi - - wavenproc=`wc -l cmdtarfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - - set +x - echo ' ' - echo " Executing the wave_tar scripts at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile - else - ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile - fi - exit=$? - else - chmod 744 cmdtarfile - ./cmdtarfile - exit=$? - fi - - if [ "$exit" != '0' ] - then - set +x - echo ' ' - echo '*************************************' - echo '*** FATAL ERROR: CMDFILE FAILED ***' - echo '*************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=8; export err;${errchk} - exit $err - fi - # --------------------------------------------------------------------------- # # 7. Ending output @@ -877,7 +467,7 @@ msg="ABNORMAL EXIT: Problem in MWW3 POST" postmsg "$jlogfile" "$msg" echo $msg - err=16; export err;${errchk} + err=6; export err;${errchk} exit $err else echo " Side-by-Side Wave Post Completed Normally " From 2946baad88d908b32793f542cab42f0c89adf009 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Wed, 26 Aug 2020 13:44:06 +0000 Subject: [PATCH 21/27] cleaning up wave point post scripts --- scripts/exgfs_wave_post_bndpnt.sh | 113 ++++++++++-------------------- scripts/exgfs_wave_post_pnt.sh | 26 ++----- 2 files changed, 42 insertions(+), 97 deletions(-) diff --git a/scripts/exgfs_wave_post_bndpnt.sh b/scripts/exgfs_wave_post_bndpnt.sh index ac2f680495..8f5b9c6e05 100755 --- a/scripts/exgfs_wave_post_bndpnt.sh +++ b/scripts/exgfs_wave_post_bndpnt.sh @@ -287,35 +287,33 @@ # Create new buoy_log.ww3 including all IBP files - if [ "$DOIBP_WAV" = 'YES' ]; then - cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags - grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp - rm -f buoy_log.ibp - mv buoy_log.tmp buoy_log.ibp - - grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc - sed '$d' buoy_tmp1.loc > buoy_tmp2.loc - ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` - Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` - rm -f buoy_tmp1.loc buoy_tmp2.loc - if [ -s buoy_log.ibp ] - then - set +x - echo 'IBP log file created. Syncing to all nodes ...' - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '********************************************** ' - echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' - echo '********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." - postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" - err=8;export err;${errchk} - exit $err - fi + cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags + grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp + rm -f buoy_log.ibp + mv buoy_log.tmp buoy_log.ibp + + grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc + sed '$d' buoy_tmp1.loc > buoy_tmp2.loc + ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` + Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` + rm -f buoy_tmp1.loc buoy_tmp2.loc + if [ -s buoy_log.ibp ] + then + set +x + echo 'IBP log file created. Syncing to all nodes ...' + [[ "$LOUD" = YES ]] && set -x + else + set +x + echo ' ' + echo '********************************************** ' + echo '*** FATAL ERROR : NO IBP LOG FILE CREATED *** ' + echo '********************************************** ' + echo ' ' + [[ "$LOUD" = YES ]] && set -x + echo "$WAV_MOD_TAG post $date $cycle : ibp log file missing." + postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" + err=8;export err;${errchk} + exit $err fi # 1.f Data summary @@ -337,7 +335,7 @@ # 2.a Command file set-up set +x - echo ' Making command file for sbs grib2 and GRID Interpolation ' + echo ' Making command file for wave boundary points ' [[ "$LOUD" = YES ]] && set -x rm -f cmdfile @@ -346,24 +344,12 @@ # 1.a.2 Loop over forecast time to generate post files # When executed side-by-side, serial mode (cfp when run after the fcst step) -# Contingency for RERUN=YES - if [ "${RERUN}" = "YES" ]; then - fhr=$((FHRUN + FHMIN_WAV)) - if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then - FHINCG=$FHOUT_HF_WAV - else - FHINCG=$FHOUT_WAV - fi -# Get minimum value to start count from fhr+min(fhrp,fhrg) - fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` - fhr=$((fhr + fhrinc)) - else - fhr=$FHMIN_WAV - fi + fhr=$FHMIN_WAV fhrp=$fhr - fhrg=$fhr while [ $fhr -le $FHMAX_WAV_IBP ]; do + echo " Starting processing wave boundary points for FHR=$fhr at: `date`" + ymdh=`$NDATE $fhr $CDATE` YMD=$(echo $ymdh | cut -c1-8) HMS="$(echo $ymdh | cut -c9-10)0000" @@ -383,9 +369,6 @@ # Create instances of directories for spec and gridded output export SPECDATA=${DATA}/output_$YMDHMS - export BULLDATA=${DATA}/output_$YMDHMS - export GRIBDATA=${DATA}/output_$YMDHMS - export GRDIDATA=${DATA}/output_$YMDHMS ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 # Point output part (can be split or become meta-task to reduce resource usage) @@ -404,23 +387,11 @@ exit $err fi - if [ "$DOSPC_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $buoys - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec > spec_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $ibpoints - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} - done - fi + export dtspec=3600. + for buoy in $ibpoints + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} + done fi @@ -456,7 +427,7 @@ set +x echo ' ' - echo " Executing the grib2_sbs scripts at : `date`" + echo " Executing the boundary point scripts at : `date`" echo ' ------------------------------------' echo ' ' [[ "$LOUD" = YES ]] && set -x @@ -504,8 +475,6 @@ done - if [ "${DOPNT_WAV}" = "YES" ]; then - # --------------------------------------------------------------------------- # # 3. Compress point output data into tar files @@ -523,13 +492,7 @@ # 6.b Spectral data files - if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - fi - fi + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile wavenproc=`wc -l cmdtarfile | awk '{print $1}'` wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` diff --git a/scripts/exgfs_wave_post_pnt.sh b/scripts/exgfs_wave_post_pnt.sh index c5860a0afe..a66ed69215 100755 --- a/scripts/exgfs_wave_post_pnt.sh +++ b/scripts/exgfs_wave_post_pnt.sh @@ -403,7 +403,7 @@ # 2.a Command file set-up set +x - echo ' Making command file for sbs grib2 and GRID Interpolation ' + echo ' Making command file for wave post points ' [[ "$LOUD" = YES ]] && set -x rm -f cmdfile @@ -411,25 +411,11 @@ chmod 744 cmdfile # 1.a.2 Loop over forecast time to generate post files -# When executed side-by-side, serial mode (cfp when run after the fcst step) -# Contingency for RERUN=YES - if [ "${RERUN}" = "YES" ]; then - fhr=$((FHRUN + FHMIN_WAV)) - if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then - FHINCG=$FHOUT_HF_WAV - else - FHINCG=$FHOUT_WAV - fi -# Get minimum value to start count from fhr+min(fhrp,fhrg) - fhrinc=`echo $(( $FHINCP_WAV < $FHINCG ? $FHINCP_WAV : $FHINCG ))` - fhr=$((fhr + fhrinc)) - else - fhr=$FHMIN_WAV - fi + fhr=$FHMIN_WAV fhrp=$fhr - fhrg=$fhr while [ $fhr -le $FHMAX_WAV ]; do + echo " Creating the wave point scripts at : `date`" ymdh=`$NDATE $fhr $CDATE` YMD=$(echo $ymdh | cut -c1-8) HMS="$(echo $ymdh | cut -c9-10)0000" @@ -450,8 +436,6 @@ # Create instances of directories for spec and gridded output export SPECDATA=${DATA}/output_$YMDHMS export BULLDATA=${DATA}/output_$YMDHMS - export GRIBDATA=${DATA}/output_$YMDHMS - export GRDIDATA=${DATA}/output_$YMDHMS ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 # Point output part (can be split or become meta-task to reduce resource usage) @@ -531,7 +515,7 @@ set +x echo ' ' - echo " Executing the grib2_sbs scripts at : `date`" + echo " Executing the wave point scripts at : `date`" echo ' ------------------------------------' echo ' ' [[ "$LOUD" = YES ]] && set -x @@ -579,7 +563,6 @@ done - if [ "${DOPNT_WAV}" = "YES" ]; then # --------------------------------------------------------------------------- # # 3. Compress point output data into tar files @@ -624,7 +607,6 @@ echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile fi fi - fi wavenproc=`wc -l cmdtarfile | awk '{print $1}'` wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` From e191fd4bb87af787feab486bf072fe4dce7f12f4 Mon Sep 17 00:00:00 2001 From: "kate.friedman" Date: Wed, 26 Aug 2020 15:47:49 +0000 Subject: [PATCH 22/27] Fixing wavepostbndpnt dependency in setup_workflow_fcstonly.py --- ush/rocoto/setup_workflow_fcstonly.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/rocoto/setup_workflow_fcstonly.py b/ush/rocoto/setup_workflow_fcstonly.py index 2e8272177a..b24898491a 100755 --- a/ush/rocoto/setup_workflow_fcstonly.py +++ b/ush/rocoto/setup_workflow_fcstonly.py @@ -363,7 +363,7 @@ def get_workflow(dict_configs, cdump='gdas'): # wavepostbndpnt if do_wave in ['Y', 'YES']: deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_pnt.points.@Y@m@d.@H0000' % (cdump,cdump) + data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.logf192.txt' % (cdump,cdump) dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) From a6e91b48b7024c83491fd1f93c6d7df8e3301af5 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Thu, 27 Aug 2020 20:25:45 +0000 Subject: [PATCH 23/27] updates to resources for wave jobs --- jobs/JGLOBAL_WAVE_POST_BNDPNT | 2 +- jobs/JGLOBAL_WAVE_POST_PNT | 2 +- parm/config/config.resources | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNT b/jobs/JGLOBAL_WAVE_POST_BNDPNT index 1099c254eb..658fd6cab5 100755 --- a/jobs/JGLOBAL_WAVE_POST_BNDPNT +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -8,7 +8,7 @@ set -x -e ############################# # Source relevant config files ############################# -configs="base wave wavepostsbs" +configs="base wave wavepostsbs wavepostbndpnt" export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT index 606f8762b7..a25f4e896b 100755 --- a/jobs/JGLOBAL_WAVE_POST_PNT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -8,7 +8,7 @@ set -x -e ############################# # Source relevant config files ############################# -configs="base wave wavepostsbs" +configs="base wave wavepostsbs wavepostpnt" export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} for config in $configs; do diff --git a/parm/config/config.resources b/parm/config/config.resources index 4c4ef8075c..118e657c6d 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -60,23 +60,23 @@ elif [ $step = "waveprep" ]; then elif [ $step = "wavepostsbs" ]; then export wtime_wavepostsbs="06:00:00" - export npe_wavepostsbs=280 + export npe_wavepostsbs=10 export nth_wavepostsbs=1 export npe_node_wavepostsbs=$(echo "$npe_node_max / $nth_wavepostsbs" | bc) export NTASKS=${npe_wavepostsbs} elif [ $step = "wavepostbndpnt" ]; then - export wtime_wavepostbndpnt="01:00:00" - export npe_wavepostbndpnt=280 + export wtime_wavepostbndpnt="02:00:00" + export npe_wavepostbndpnt=56 export nth_wavepostbndpnt=1 export npe_node_wavepostbndpnt=$(echo "$npe_node_max / $nth_wavepostbndpnt" | bc) export NTASKS=${npe_wavepostbndpnt} elif [ $step = "wavepostpnt" ]; then - export wtime_wavepostpnt="01:00:00" - export npe_wavepostpnt=280 + export wtime_wavepostpnt="02:00:00" + export npe_wavepostpnt=56 export nth_wavepostpnt=1 export npe_node_wavepostpnt=$(echo "$npe_node_max / $nth_wavepostpnt" | bc) export NTASKS=${npe_wavepostpnt} From ada0fb3155a57bdba074c84e1ab3d73eabb0e2f4 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Tue, 1 Sep 2020 17:18:27 +0000 Subject: [PATCH 24/27] update module for cdo --- modulefiles/module_base.wcoss_dell_p3 | 1 - 1 file changed, 1 deletion(-) diff --git a/modulefiles/module_base.wcoss_dell_p3 b/modulefiles/module_base.wcoss_dell_p3 index aac7eff22f..4c7074dfa4 100644 --- a/modulefiles/module_base.wcoss_dell_p3 +++ b/modulefiles/module_base.wcoss_dell_p3 @@ -41,5 +41,4 @@ module use -a /gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/tracker/ens_track module load tclogg # waveprep -module use -a /usrx/local/dev/modulefiles module load cdo/1.9.8 From 4e7975d265857e4e634e0c7352f6ed2de1a99336 Mon Sep 17 00:00:00 2001 From: "jessica.meixner" Date: Tue, 1 Sep 2020 22:45:05 +0000 Subject: [PATCH 25/27] lowering the resource requirement for wave prep job --- parm/config/config.resources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parm/config/config.resources b/parm/config/config.resources index 118e657c6d..f925020f59 100755 --- a/parm/config/config.resources +++ b/parm/config/config.resources @@ -52,7 +52,7 @@ elif [ $step = "waveinit" ]; then elif [ $step = "waveprep" ]; then export wtime_waveprep="00:30:00" - export npe_waveprep=115 + export npe_waveprep=65 export nth_waveprep=1 export npe_node_waveprep=$(echo "$npe_node_max / $nth_waveprep" | bc) export NTASKS=${npe_waveprep} From c61cd59488b64ead77e13b2eb5faeb383d052ea0 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Wed, 2 Sep 2020 19:02:21 +0000 Subject: [PATCH 26/27] moving definitions of wavempexec and wave_mpmd from jobs to env --- env/HERA.env | 3 ++- env/JET.env | 6 ++++-- env/WCOSS_C.env | 6 ++++-- env/WCOSS_DELL_P3.env | 6 ++++-- jobs/JGLOBAL_WAVE_POST_BNDPNT | 4 ---- jobs/JGLOBAL_WAVE_POST_PNT | 4 ---- jobs/JGLOBAL_WAVE_POST_SBS | 4 ---- jobs/JGLOBAL_WAVE_PREP | 4 ---- 8 files changed, 14 insertions(+), 23 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index 6031433fd9..a304169b51 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -43,7 +43,8 @@ elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then export mpmd="--multi-prog" export CFP_MP="YES" if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi - + export wavempexec=${launcher} + export wave_mpmd=${mpmd} elif [ $step = "anal" ]; then diff --git a/env/JET.env b/env/JET.env index 2dea123612..4a4138a6d6 100755 --- a/env/JET.env +++ b/env/JET.env @@ -37,9 +37,11 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export BACK=${BACK:-"YES"} export sys_tp="Cray-CS400" -elif [ $step = "waveprep" ]; then +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then - export MP_PULSE=0 + if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd} elif [ $step = "anal" ]; then diff --git a/env/WCOSS_C.env b/env/WCOSS_C.env index 93bd98ab60..7307769bfc 100755 --- a/env/WCOSS_C.env +++ b/env/WCOSS_C.env @@ -37,9 +37,11 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export POE=${POE:-"YES"} export sys_tp="Cray-XC40" -elif [ $step = "waveprep" ]; then +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then - export MP_PULSE=0 + if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd} elif [ $step = "anal" ]; then diff --git a/env/WCOSS_DELL_P3.env b/env/WCOSS_DELL_P3.env index ef891347d6..3144c2d20e 100755 --- a/env/WCOSS_DELL_P3.env +++ b/env/WCOSS_DELL_P3.env @@ -45,9 +45,11 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export BACK=${BACK:-"YES"} export sys_tp="Dell-p3" -elif [ $step = "waveprep" ]; then +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then - export MP_PULSE=0 + if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd} elif [ $step = "anal" ]; then diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNT b/jobs/JGLOBAL_WAVE_POST_BNDPNT index 658fd6cab5..950bb0e840 100755 --- a/jobs/JGLOBAL_WAVE_POST_BNDPNT +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -70,10 +70,6 @@ export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} mkdir -p $COMOUT/station -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} - env | sort # Set wave model ID tag to include member number diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT index a25f4e896b..0230b6ff25 100755 --- a/jobs/JGLOBAL_WAVE_POST_PNT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -70,10 +70,6 @@ export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} mkdir -p $COMOUT/station -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} - env | sort # Set wave model ID tag to include member number diff --git a/jobs/JGLOBAL_WAVE_POST_SBS b/jobs/JGLOBAL_WAVE_POST_SBS index ad49873e30..6a88f4d24a 100755 --- a/jobs/JGLOBAL_WAVE_POST_SBS +++ b/jobs/JGLOBAL_WAVE_POST_SBS @@ -70,10 +70,6 @@ export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} mkdir -p $COMOUT/gridded -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} - env | sort # Set wave model ID tag to include member number diff --git a/jobs/JGLOBAL_WAVE_PREP b/jobs/JGLOBAL_WAVE_PREP index 670003ccd2..9c6c8a625f 100755 --- a/jobs/JGLOBAL_WAVE_PREP +++ b/jobs/JGLOBAL_WAVE_PREP @@ -87,10 +87,6 @@ else export COMIN_WAV_CUR=${ROTDIR}/${WAVECUR_DID}.${RPDY} fi -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} - # Execute the Script $HOMEgfs/scripts/exgfs_wave_prep.sh From 2006bbcb1e54e3cd5ae0ff2826b6d0b211c1d013 Mon Sep 17 00:00:00 2001 From: "Jessica.Meixner" Date: Wed, 2 Sep 2020 19:22:38 +0000 Subject: [PATCH 27/27] adding pnt jobs as seperate jobs for env --- env/HERA.env | 3 +-- env/JET.env | 2 +- env/WCOSS_C.env | 3 +-- env/WCOSS_DELL_P3.env | 2 +- jobs/JGLOBAL_WAVE_POST_BNDPNT | 2 +- jobs/JGLOBAL_WAVE_POST_PNT | 2 +- 6 files changed, 6 insertions(+), 8 deletions(-) diff --git a/env/HERA.env b/env/HERA.env index a304169b51..e0502e9fd8 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -38,8 +38,7 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export BACK="NO" export sys_tp="HERA" -elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then - +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" -o $step = "wavepostbndpnt" -o $step = "wavepostpnt"]; then export mpmd="--multi-prog" export CFP_MP="YES" if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi diff --git a/env/JET.env b/env/JET.env index 4a4138a6d6..3a24c71b7e 100755 --- a/env/JET.env +++ b/env/JET.env @@ -37,7 +37,7 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export BACK=${BACK:-"YES"} export sys_tp="Cray-CS400" -elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" -o $step = "wavepostbndpnt" -o $step = "wavepostpnt"]; then if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi export wavempexec=${launcher} diff --git a/env/WCOSS_C.env b/env/WCOSS_C.env index 7307769bfc..b0343ffda9 100755 --- a/env/WCOSS_C.env +++ b/env/WCOSS_C.env @@ -37,8 +37,7 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export POE=${POE:-"YES"} export sys_tp="Cray-XC40" -elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then - +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" -o $step = "wavepostbndpnt" -o $step = "wavepostpnt"]; then if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi export wavempexec=${launcher} export wave_mpmd=${mpmd} diff --git a/env/WCOSS_DELL_P3.env b/env/WCOSS_DELL_P3.env index 3144c2d20e..80622a2e56 100755 --- a/env/WCOSS_DELL_P3.env +++ b/env/WCOSS_DELL_P3.env @@ -45,7 +45,7 @@ if [ $step = "prep" -o $step = "prepbufr" ]; then export BACK=${BACK:-"YES"} export sys_tp="Dell-p3" -elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then +elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" -o $step = "wavepostbndpnt" -o $step = "wavepostpnt"]; then if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi export wavempexec=${launcher} diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNT b/jobs/JGLOBAL_WAVE_POST_BNDPNT index 950bb0e840..b908079e49 100755 --- a/jobs/JGLOBAL_WAVE_POST_BNDPNT +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -20,7 +20,7 @@ done ########################################## # Source machine runtime environment ########################################## -. $HOMEgfs/env/${machine}.env wavepostsbs +. $HOMEgfs/env/${machine}.env wavepostbndpnt status=$? [[ $status -ne 0 ]] && exit $status diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT index 0230b6ff25..c3e113eed1 100755 --- a/jobs/JGLOBAL_WAVE_POST_PNT +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -20,7 +20,7 @@ done ########################################## # Source machine runtime environment ########################################## -. $HOMEgfs/env/${machine}.env wavepostsbs +. $HOMEgfs/env/${machine}.env wavepostpnt status=$? [[ $status -ne 0 ]] && exit $status