diff --git a/.shellcheckrc b/.shellcheckrc index 6d540ba17f..67fabfe157 100644 --- a/.shellcheckrc +++ b/.shellcheckrc @@ -14,3 +14,6 @@ disable=SC1091 # Disable -p -m only applies to deepest directory disable=SC2174 + +# Disable warning of functions in test statements +disable=SC2310 diff --git a/gempak/fix/datatype.tbl b/gempak/fix/datatype.tbl index e52e156de4..63b06c0826 100755 --- a/gempak/fix/datatype.tbl +++ b/gempak/fix/datatype.tbl @@ -102,10 +102,10 @@ LTNG $OBS/ltng YYYYMMDDHH.ltng CAT_MSC SCAT_N ! CLIMO $GEMPAK/climo climate_MM.mos CAT_NIL SCAT_NIL 1 -1 -1 ! -GFS $MODEL/gfs gfs_YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 -F-GFS $COMIN gfs_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 -F-GFSP $COMIN gfs_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 -F-GFSHPC $HPCGFS gfs_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 +GFS $MODEL/gfs gfs_1p00_YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 +F-GFS $COMIN gfs_1p00_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 +F-GFSP $COMIN gfs_1p00_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 +F-GFSHPC $HPCGFS gfs_1p00_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 GFSEXT $MODEL/ens gfs.YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 GFS1 $MODEL/ens gfs1.YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 GFS2 $MODEL/ens gfs2.YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 @@ -156,9 +156,9 @@ F-NAMP20 $COMIN nam20_YYYYMMDDHHfFFF CAT_GRD SCAT_F F-NAMP44 $COMIN nam44_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 F-THREATS $COMIN ${NEST}_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 F-NAMHPC $HPCNAM nam_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 -GDAS $MODEL/gdas gdas_YYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 -F-GDAS $COMIN gdas_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 -F-GFS $COMIN gfs_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 +GDAS $MODEL/gdas gdas_1p00_YYYYMMDDHH CAT_GRD SCAT_FCT -1 -1 -1 +F-GDAS $COMIN gdas_1p00_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 +F-GFS $COMIN gfs_1p00_YYYYMMDDHHfFFF CAT_GRD SCAT_FCT -1 -1 -1 F-HWRF $COMIN hwrfp_YYYYMMDDHHfFFF_* CAT_GRD SCAT_FCT -1 -1 -1 F-HWRFN $COMIN hwrfn_YYYYMMDDHHfFFF_* CAT_GRD SCAT_FCT -1 -1 -1 F-GHM $COMIN ghmg_YYYYMMDDHHfFFF_* CAT_GRD SCAT_FCT -1 -1 -1 diff --git a/gempak/ush/gdas_ecmwf_meta_ver.sh b/gempak/ush/gdas_ecmwf_meta_ver.sh index 5d519c7cc5..4a4e5b5b64 100755 --- a/gempak/ush/gdas_ecmwf_meta_ver.sh +++ b/gempak/ush/gdas_ecmwf_meta_ver.sh @@ -1,75 +1,39 @@ -#!/bin/sh -# -# Metafile Script : gdas_ecmwf_meta_ver +#! /usr/bin/env bash # # Creates a loop comparing the 6 hr gdas fcst to the pervious 7 days # of ecmwf fcsts # -# Log : -# J. Carr/HPC 3/2001 New metafile for verification of ecmwf. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# M. Klein/HPC 11/2004 Changed verification grid from fnl to gdas -# M. Klein/HPC 2/2005 Changed location of working directory to /ptmp -# M. Klein/HPC 11/2006 Modify to run in production. -# - -#cd $DATA -set -xa - -if [ $cyc -ne "06" ] ; then - exit -fi +source "${HOMEgfs}/ush/preamble.sh" -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -cyc=12 +cyc2=12 device="nc | ecmwfver.meta" -PDY2=$(echo ${PDY} | cut -c3-) # # Copy in datatype table to define gdfile type # -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl export err=$? -if [[ $err -ne 0 ]] ; then - echo " File datatype.tbl does not exist." - exit $err +if (( err != 0 )) ; then + echo "FATAL ERROR: File datatype.tbl does not exist." + exit "${err}" fi -# -# DEFINE YESTERDAY -date1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -sdate1=$(echo ${date1} | cut -c 3-) -# DEFINE 2 DAYS AGO -date2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) -sdate2=$(echo ${date2} | cut -c 3-) -# DEFINE 3 DAYS AGO -date3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) -sdate3=$(echo ${date3} | cut -c 3-) -# DEFINE 4 DAYS AGO -date4=$($NDATE -96 ${PDY}${cyc} | cut -c -8) -sdate4=$(echo ${date4} | cut -c 3-) -# DEFINE 5 DAYS AGO -date5=$($NDATE -120 ${PDY}${cyc} | cut -c -8) -sdate5=$(echo ${date5} | cut -c 3-) -# DEFINE 6 DAYS AGO -date6=$($NDATE -144 ${PDY}${cyc} | cut -c -8) -sdate6=$(echo ${date6} | cut -c 3-) -# DEFINE 7 DAYS AGO -date7=$($NDATE -168 ${PDY}${cyc} | cut -c -8) -sdate7=$(echo ${date7} | cut -c 3-) - -vergrid="F-GDAS | ${PDY2}/0600" +export COMIN="gdas.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi +vergrid="F-GDAS | ${PDY:2}/0600" fcsthr="0600f006" # GENERATING THE METAFILES. areas="SAM NAM" -verdays="${date1} ${date2} ${date3} ${date4} ${date5} ${date6} ${date7}" -for area in $areas - do - if [ $area == "NAM" ] ; then +for area in ${areas}; do + if [[ "${area}" == "NAM" ]] ; then garea="5.1;-124.6;49.6;-11.9" proj="STR/90.0;-95.0;0.0" latlon="0" @@ -80,37 +44,18 @@ for area in $areas latlon="1/10/1/2/10;10" run=" " fi - for verday in $verdays - do - verddate=$(echo ${verday} | cut -c 3-) - if [ ${verday} -eq ${date1} ] ; then - dgdattim=f024 - sdatenum=$sdate1 - elif [ ${verday} -eq ${date2} ] ; then - dgdattim=f048 - sdatenum=$sdate2 - elif [ ${verday} -eq ${date3} ] ; then - dgdattim=f072 - sdatenum=$sdate3 - elif [ ${verday} -eq ${date4} ] ; then - dgdattim=f096 - sdatenum=$sdate4 - elif [ ${verday} -eq ${date5} ] ; then - dgdattim=f120 - sdatenum=$sdate5 - elif [ ${verday} -eq ${date6} ] ; then - dgdattim=f144 - sdatenum=$sdate6 - elif [ ${verday} -eq ${date7} ] ; then - dgdattim=f168 - sdatenum=$sdate7 + for (( fhr=24; fhr<=168; fhr+=24 )); do + dgdattim=$(printf "f%03d" "${fhr}") + sdatenum=$(date --utc +%y%m%d -d "${PDY} ${cyc2} - ${fhr} hours") + + if [[ ! -L "ecmwf.20${sdatenum}" ]]; then + ln -sf "${COMINecmwf}/ecmwf.20${sdatenum}/gempak" "ecmwf.20${sdatenum}" fi - # JY grid="$COMROOT/nawips/${envir}/ecmwf.20${sdatenum}/ecmwf_glob_20${sdatenum}12" - grid="${COMINecmwf}.20${sdatenum}/gempak/ecmwf_glob_20${sdatenum}12" + gdfile="ecmwf.20${sdatenum}/ecmwf_glob_20${sdatenum}12" -# 500 MB HEIGHT METAFILE + # 500 MB HEIGHT METAFILE -$GEMEXE/gdplot2_nc << EOFplt + "${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL = mepowo.gsf PROJ = ${proj} GAREA = ${garea} @@ -134,7 +79,7 @@ line = 6/1/3 title = 6/-2/~ GDAS 500 MB HGT (6-HR FCST)|~${area} 500 HGT DF r -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -157,7 +102,7 @@ clear = yes latlon = ${latlon} r -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -165,7 +110,7 @@ title = 5/-1/~ ECMWF PMSL clear = no r -PROJ = +PROJ = GAREA = bwus gdfile = ${vergrid} gdattim = ${fcsthr} @@ -181,7 +126,7 @@ clear = yes latlon = ${latlon} ${run} -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -195,28 +140,28 @@ EOFplt done done -export err=$?;err_chk +export err=$? + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l ecmwfver.meta -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mkdir -p -m 775 ${COMOUTecmwf}.${PDY}/meta - mv ecmwfver.meta ${COMOUTecmwf}.${PDY}/meta/ecmwfver_${PDY}_${cyc} - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File ecmwfver.meta does not exist." - exit $err - fi +if (( err != 0 )) || [[ ! -s ecmwfver.meta ]]; then + echo "FATAL ERROR: Failed to create ecmwf meta file" + exit "${err}" +fi - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ECMWFVER_HPCMETAFILE $job \ - ${COMOUTecmwf}.${PDY}/meta/ecmwfver_${PDY}_${cyc} - fi +mv ecmwfver.meta "${COM_ATMOS_GEMPAK_META}/ecmwfver_${PDY}_${cyc2}" +export err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: Failed to move meta file to ${COM_ATMOS_GEMPAK_META}/ecmwfver_${PDY}_${cyc2}" + exit "${err}" +fi + +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL ECMWFVER_HPCMETAFILE "${job}" \ + "${COM_ATMOS_GEMPAK_META}/ecmwfver_${PDY}_${cyc2}" fi exit diff --git a/gempak/ush/gdas_meta_loop.sh b/gempak/ush/gdas_meta_loop.sh index 927958a0ad..e09fc9a7f9 100755 --- a/gempak/ush/gdas_meta_loop.sh +++ b/gempak/ush/gdas_meta_loop.sh @@ -1,91 +1,59 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gdas_meta_loop # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# J. Carr/HPC 3/98 Changed to gdplot2 -# J. Carr/HPC 8/98 Changed map to medium resolution -# J. Carr/HPC 2/99 Changed skip to 0 -# J. Carr/HPC 2/01 Implemented usage on IBM operationally. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# M. Klein/HPC 11/2004 Change fnl to gdas -# M. Klein/HPC 2/2005 Changed location of working directory to /ptmp -# M. Klein/HPC 11/2006 Modify for production on CCS -#cd $DATA - -set -xa +source "${HOMEgfs}/ush/preamble.sh" device="nc | gdasloop.meta" -PDY2=$(echo $PDY | cut -c3-) +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L "${COMIN}" ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi -if [ "$envir" = "para" ] ; then +if [[ "${envir}" == "para" ]] ; then export m_title="GDASP" else export m_title="GDAS" fi -export COMPONENT=${COMPONENT:-atmos} -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -# -# Copy in datatype table to define gdfile type -# -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File datatype.tbl does not exist." - exit $err -fi - -# -# Define previous days -# -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) -PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) -PDYm4=$($NDATE -96 ${PDY}${cyc} | cut -c -8) -PDYm5=$($NDATE -120 ${PDY}${cyc} | cut -c -8) -PDYm6=$($NDATE -144 ${PDY}${cyc} | cut -c -8) -# - -verdays="$PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY" - -for day in $verdays - do - PDY2=$(echo $day | cut -c 3-) - if [ $day -eq $PDY ] ; then - if [ $cyc -eq "00" ] ; then - cycles="00" - elif [ $cyc -eq "06" ] ; then - cycles="00 06" - elif [ $cyc -eq "12" ] ; then - cycles="00 06 12" - elif [ $cyc -eq "18" ] ; then - cycles="00 06 12 18" +for (( fhr=24; fhr<=144; fhr+=24 )); do + day=$(date --utc +%Y%m%d -d "${PDY} ${cyc} - ${fhr} hours") + if (( ${day}${cyc} < SDATE )); then + # Stop looking because these cycles weren't run + if (( fhr == 24 )); then + exit + else + break fi - else - cycles="00 06 12 18" fi - for cycle in $cycles - do -# Test with GDAS in PROD -# grid="${COMROOT}/nawips/${envir}/gdas.${day}/gdas_${day}${cycle}f000" - export COMIN=${COMINgdas}.${day}/${cycle}/${COMPONENT}/gempak - grid="${COMINgdas}.${day}/${cycle}/${COMPONENT}/gempak/gdas_${day}${cycle}f000" + cycles=$(seq -s ' ' -f "%02g" 0 6 "${cyc}") + for cycle in ${cycles}; do + # Test with GDAS in PROD + YMD=${day} HH=${cyc} GRID=1p00 generate_com "COM_ATMOS_GEMPAK_1p00_past:COM_ATMOS_GEMPAK_TMPL" + export COMIN="${RUN}.${day}${cycle}" + if [[ ! -L "${COMIN}" ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00_past}" "${COMIN}" + fi + gdfile="${COMIN}/gdas_1p00_${day}${cycle}f000" -$GEMEXE/gdplot2_nc << EOF + "${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL = mepowo.gsf -GDFILE = $grid -GDATTIM = F00 -DEVICE = $device +GDFILE = ${gdfile} +GDATTIM = F000 +DEVICE = ${device} PANEL = 0 TEXT = m/21//hw CONTUR = 2 -PROJ = +PROJ = GAREA = nam LATLON = 0 CLEAR = yes @@ -106,9 +74,9 @@ CLRBAR = 1/V/LL !0 WIND = am0 MAP = 1/1/1 REFVEC = -TITLE = 1/0/~ $m_title PW, EST MSLP, THICKNESS|~NAM PRCP WATER!0 +TITLE = 1/0/~ ${m_title} PW, EST MSLP, THICKNESS|~NAM PRCP WATER!0 r - + PROJ = STR/90;-105;0 GAREA = 2;-139;27;-22 LATLON = 1/1/1//15;15 @@ -124,11 +92,11 @@ LINE = 7/5/1/2 !20/1/2/1 FINT = 15;21;27;33;39;45;51;57 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! -HLSYM = +HLSYM = CLRBAR = 1 WIND = 0 REFVEC = -TITLE = 5/-2/~ $m_title @ HGT AND VORTICITY|~NAM @ HGT AND VORT!0 +TITLE = 5/-2/~ ${m_title} @ HGT AND VORTICITY|~NAM @ HGT AND VORT!0 r GLEVEL = 250 @@ -146,50 +114,24 @@ HLSYM = CLRBAR = 1 WIND = 0 !Bk9/.7/2/b/! REFVEC = -TITLE = 5/-2/~ $m_title @ HGHT, ISOTACHS AND WIND (KTS)|~NAM @ HGT & WIND!0 +TITLE = 5/-2/~ ${m_title} @ HGHT, ISOTACHS AND WIND (KTS)|~NAM @ HGT & WIND!0 FILTER = n r exit EOF - done - -done - -for day in $verdays - do - PDY2=$(echo $day | cut -c 3-) - if [ $day -eq $PDY ] ; then - if [ $cyc -eq "00" ] ; then - cycles="00" - elif [ $cyc -eq "06" ] ; then - cycles="00 06" - elif [ $cyc -eq "12" ] ; then - cycles="00 06 12" - elif [ $cyc -eq "18" ] ; then - cycles="00 06 12 18" - fi - else - cycles="00 06 12 18" - fi + gdfile="${COMIN}/gdas_1p00_${day}${cycle}f000" - for cycle in $cycles - do -# Test with GDAS in PROD -# grid="${COMROOT}/nawips/${envir}/gdas.${day}/gdas_${day}${cycle}f000" - export COMIN=${COMINgdas}.${day}/${cycle}/${COMPONENT}/gempak - grid="${COMINgdas}.${day}/${cycle}/${COMPONENT}/gempak/gdas_${day}${cycle}f000" - -$GEMEXE/gdplot2_nc << EOF +"${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL = mepowo.gsf -GDFILE = $grid -GDATTIM = F00 -DEVICE = $device +GDFILE = ${gdfile} +GDATTIM = F000 +DEVICE = ${device} PANEL = 0 TEXT = m/21//hw CONTUR = 1 -PROJ = +PROJ = GAREA = samps LATLON = 1/1/1//15;15 CLEAR = yes @@ -210,9 +152,9 @@ CLRBAR = 1/V/LL !0 WIND = am0 MAP = 1/1/1 REFVEC = -TITLE = 1/0/~ $m_title PW, MSLP, THICKNESS|~SAM PRCP WATER!0 +TITLE = 1/0/~ ${m_title} PW, MSLP, THICKNESS|~SAM PRCP WATER!0 r - + GLEVEL = 500 GVCORD = PRES SKIP = 0 !0 !0 !0 !0 @@ -225,11 +167,11 @@ LINE = 7/5/1/2 !29/5/1/2!7/5/1/2 !29/5/1/2 !20/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! !2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 WIND = 0 REFVEC = -TITLE = 5/-2/~ $m_title @ HGT AND VORTICITY|~SAM @ HGT & VORT!0 +TITLE = 5/-2/~ ${m_title} @ HGT AND VORTICITY|~SAM @ HGT & VORT!0 r GLEVEL = 250 @@ -247,7 +189,7 @@ HLSYM = CLRBAR = 1 WIND = 0 !Bk9/.7/2/b/! REFVEC = -TITLE = 5/-2/~ $m_title @ HGHT, ISOTACHS AND WIND (KTS)|~SAM @ HGT & WIND!0 +TITLE = 5/-2/~ ${m_title} @ HGHT, ISOTACHS AND WIND (KTS)|~SAM @ HGT & WIND!0 FILTER = n r @@ -261,11 +203,11 @@ TYPE = c !c CINT = 1 !4 LINE = 22/5/2/1 !10/1/1 FINT = -FLINE = +FLINE = HILO = !26;2/H#;L#/1020-1070;900-1012/3/30;30/y HLSYM = !2;1.5//21//hw WIND = 0 -TITLE = 1/-1/~ $m_title PMSL, 1000-850mb THKN|~SAM PMSL, 1000-850 TK!0 +TITLE = 1/-1/~ ${m_title} PMSL, 1000-850mb THKN|~SAM PMSL, 1000-850 TK!0 r exit @@ -274,27 +216,28 @@ EOF done done -export err=$?;err_chk +export err=$? + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l gdasloop.meta -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s gdasloop.meta ]]; then + echo "FATAL ERROR: Failed to create gdasloop meta file" + exit "${err}" +fi -if [ $SENDCOM = "YES" ] ; then - mv gdasloop.meta ${COMOUT}/gdas_${PDY}_${cyc}_loop - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File gdasloop.meta does not exist." - exit $err - fi +mv gdasloop.meta "${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_loop" +export err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: Failed to move meta file to ${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_loop" + exit "${err}" +fi - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gdas_${PDY}_${cyc}_loop - fi +if [[ ${SENDDBN} == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_loop" fi exit diff --git a/gempak/ush/gdas_meta_na.sh b/gempak/ush/gdas_meta_na.sh index fb1c328140..9c51bc18a7 100755 --- a/gempak/ush/gdas_meta_na.sh +++ b/gempak/ush/gdas_meta_na.sh @@ -1,41 +1,33 @@ -#!/bin/sh - +#! /usr/bin/env bash # # Metafile Script : gdas_meta_na # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# LJ REED 4/10/98 added line to define BIN_DIR -# J. Carr/HPC 2/99 Changed skip to 0 -# B. Gordon 4/00 Modified for production on IBM-SP -# and changed gdplot_nc -> gdplot2_nc -# D. Michaud 4/01 Added logic to display different title -# for parallel runs -# J. Carr 11/04 Added a ? in all title/TITLE lines. -# J. Carr 11/04 Changed GAREA and PROJ to match GFS and NAM. -# - -cd $DATA -set -xa +source "${HOMEgfs}/ush/preamble.sh" device="nc | gdas.meta" -PDY2=$(echo $PDY | cut -c3-) +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L "${COMIN}" ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi -if [ "$envir" = "para" ] ; then +if [[ "${envir}" == "para" ]] ; then export m_title="GDASP" else export m_title="GDAS" fi export pgm=gdplot2_nc; prep_step -startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-GDAS | ${PDY2}/${cyc}00 +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-GDAS | ${PDY:2}/${cyc}00 GDATTIM = FALL -DEVICE = $device +DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw CONTUR = 2 @@ -55,7 +47,7 @@ restore ${HOMEgfs}/gempak/ush/restore/pmsl_thkn.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 +TITLE = 5/-2/~ ? ${m_title} PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 l ru @@ -65,7 +57,7 @@ CLRBAR = 1 TEXT = 1/21//hw SKIP = 0 !0 !0 !0 !/3 FILTER = NO -TITLE = 5/-2/~ ? $m_title @ HGT, TEMP AND WIND (KTS)|~@ HGT, TMP, WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, TEMP AND WIND (KTS)|~@ HGT, TMP, WIND!0 l ru @@ -73,7 +65,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/700mb_hght_relh_omeg.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 l ru @@ -81,7 +73,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_absv.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 l ru @@ -89,34 +81,32 @@ ru restore ${HOMEgfs}/gempak/ush/restore/250mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 l ru exit EOF -export err=$?;err_chk +export err=$? ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l gdas.meta -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv gdas.meta ${COMOUT}/gdas_${PDY}_${cyc}_na - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File gdas.meta does not exist." - exit $err - fi - - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gdas_${PDY}_${cyc}_na - fi +if (( err != 0 )) || [[ ! -s gdas.meta ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file for North America" + exit "${err}" fi -# +mv gdas.meta "${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_na" +export err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: Failed to move meta file to ${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_na" + exit "${err}" +fi + +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gdas_${PDY}_${cyc}_na" +fi diff --git a/gempak/ush/gdas_ukmet_meta_ver.sh b/gempak/ush/gdas_ukmet_meta_ver.sh index c7267ed09c..90c0d214b7 100755 --- a/gempak/ush/gdas_ukmet_meta_ver.sh +++ b/gempak/ush/gdas_ukmet_meta_ver.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gdas_ukmet_meta_ver # @@ -13,83 +13,27 @@ # M. Klein/HPC 11/2006 Modify to run in production. # -#cd $DATA +source "${HOMEgfs}/ush/preamble.sh" -set -xa - -if [ $cyc -ne "06" ] ; then - exit -fi - -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step device="nc | ukmetver_12.meta" -PDY2=$(echo ${PDY} | cut -c3-) - -# -# Copy in datatype table to define gdfile type -# -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl - -# -# DEFINE 1 CYCLE AGO -dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) -date1=$(echo ${dc1} | cut -c -8) -sdate1=$(echo ${dc1} | cut -c 3-8) -cycle1=$(echo ${dc1} | cut -c 9,10) -# DEFINE 2 CYCLES AGO -dc2=$($NDATE -18 ${PDY}${cyc} | cut -c -10) -date2=$(echo ${dc2} | cut -c -8) -sdate2=$(echo ${dc2} | cut -c 3-8) -cycle2=$(echo ${dc2} | cut -c 9,10) -# DEFINE 3 CYCLES AGO -dc3=$($NDATE -30 ${PDY}${cyc} | cut -c -10) -date3=$(echo ${dc3} | cut -c -8) -sdate3=$(echo ${dc3} | cut -c 3-8) -cycle3=$(echo ${dc3} | cut -c 9,10) -# DEFINE 4 CYCLES AGO -dc4=$($NDATE -42 ${PDY}${cyc} | cut -c -10) -date4=$(echo ${dc4} | cut -c -8) -sdate4=$(echo ${dc4} | cut -c 3-8) -cycle4=$(echo ${dc4} | cut -c 9,10) -# DEFINE 5 CYCLES AGO -dc5=$($NDATE -54 ${PDY}${cyc} | cut -c -10) -date5=$(echo ${dc5} | cut -c -8) -sdate5=$(echo ${dc5} | cut -c 3-8) -cycle5=$(echo ${dc5} | cut -c 9,10) -# DEFINE 6 CYCLES AGO -dc6=$($NDATE -66 ${PDY}${cyc} | cut -c -10) -date6=$(echo ${dc6} | cut -c -8) -sdate6=$(echo ${dc6} | cut -c 3-8) -cycle6=$(echo ${dc6} | cut -c 9,10) -# DEFINE 7 CYCLES AGO -dc7=$($NDATE -90 ${PDY}${cyc} | cut -c -10) -date7=$(echo ${dc7} | cut -c -8) -sdate7=$(echo ${dc7} | cut -c 3-8) -cycle7=$(echo ${dc7} | cut -c 9,10) -# DEFINE 8 CYCLES AGO -dc8=$($NDATE -114 ${PDY}${cyc} | cut -c -10) -date8=$(echo ${dc8} | cut -c -8) -sdate8=$(echo ${dc8} | cut -c 3-8) -cycle8=$(echo ${dc8} | cut -c 9,10) -# DEFINE 9 CYCLES AGO -dc9=$($NDATE -138 ${PDY}${cyc} | cut -c -10) -date9=$(echo ${dc9} | cut -c -8) -sdate9=$(echo ${dc9} | cut -c 3-8) -cycle9=$(echo ${dc9} | cut -c 9,10) +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. -vergrid="F-GDAS | ${PDY2}/0600" +export COMIN="gdas.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi +vergrid="F-GDAS | ${PDY:2}/0600" fcsthr="0600f006" # SET WHAT RUNS TO COMPARE AGAINST BASED ON MODEL CYCLE TIME. areas="SAM NAM" -verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9}" # GENERATING THE METAFILES. -for area in $areas - do - if [ ${area} = "NAM" ] ; then +for area in ${areas}; do + if [[ "${area}" == "NAM" ]] ; then garea="5.1;-124.6;49.6;-11.9" proj="STR/90.0;-95.0;0.0" latlon="0" @@ -100,50 +44,23 @@ for area in $areas latlon="1/10/1/2/10;10" run=" " fi - for verday in $verdays - do - if [ ${verday} -eq ${dc1} ] ; then - dgdattim=f012 - sdatenum=$sdate1 - cyclenum=$cycle1 - elif [ ${verday} -eq ${dc2} ] ; then - dgdattim=f024 - sdatenum=$sdate2 - cyclenum=$cycle2 - elif [ ${verday} -eq ${dc3} ] ; then - dgdattim=f036 - sdatenum=$sdate3 - cyclenum=$cycle3 - elif [ ${verday} -eq ${dc4} ] ; then - dgdattim=f048 - sdatenum=$sdate4 - cyclenum=$cycle4 - elif [ ${verday} -eq ${dc5} ] ; then - dgdattim=f060 - sdatenum=$sdate5 - cyclenum=$cycle5 - elif [ ${verday} -eq ${dc6} ] ; then - dgdattim=f072 - sdatenum=$sdate6 - cyclenum=$cycle6 - elif [ ${verday} -eq ${dc7} ] ; then - dgdattim=f096 - sdatenum=$sdate7 - cyclenum=$cycle7 - elif [ ${verday} -eq ${dc8} ] ; then - dgdattim=f120 - sdatenum=$sdate8 - cyclenum=$cycle8 - elif [ ${verday} -eq ${dc9} ] ; then - dgdattim=f144 - sdatenum=$sdate9 - cyclenum=$cycle9 + + fhrs=$(seq -s ' ' 12 12 72) + fhrs="${fhrs} $(seq -s ' ' 96 24 144)" + for fhr in ${fhrs}; do + stime=$(date --utc +%y%m%d -d "${PDY} ${cyc} - ${fhr} hours") + dgdattim=$(printf "f%03d" "${fhr}") + sdatenum=${stime:0:6} + cyclenum=${stime:6} + + if [[ ! -L "ukmet.20${sdatenum}" ]]; then + ln -sf "${COMINukmet}/ukmet.20${sdatenum}/gempak" "ukmet.20${sdatenum}" fi - grid="${COMINukmet}.20${sdatenum}/gempak/ukmet_20${sdatenum}${cyclenum}${dgdattim}" + gdfile="ukmet.20${sdatenum}/ukmet_20${sdatenum}${cyclenum}${dgdattim}" -# 500 MB HEIGHT METAFILE + # 500 MB HEIGHT METAFILE -$GEMEXE/gdplot2_nc << EOFplt + "${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL = mepowo.gsf PROJ = ${proj} GAREA = ${garea} @@ -167,7 +84,7 @@ line = 6/1/3 title = 6/-2/~ GDAS 500 MB HGT (6-HR FCST)|~${area} 500 HGT DIFF r -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -189,7 +106,7 @@ clear = yes latlon = ${latlon} r -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -197,7 +114,7 @@ title = 5/-1/~ UKMET PMSL clear = no r -PROJ = +PROJ = GAREA = bwus gdfile = ${vergrid} gdattim = ${fcsthr} @@ -213,7 +130,7 @@ clear = yes latlon = ${latlon} ${run} -gdfile = ${grid} +gdfile = ${gdfile} gdattim = ${dgdattim} line = 5/1/3 contur = 4 @@ -226,22 +143,28 @@ EOFplt done done -export err=$?;err_chk +export err=$? + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l ukmetver_12.meta -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mkdir -p -m 775 ${COMOUTukmet}/ukmet.${PDY}/meta/ - mv ukmetver_12.meta ${COMOUTukmet}/ukmet.${PDY}/meta/ukmetver_${PDY}_12 - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL UKMETVER_HPCMETAFILE $job \ - ${COMOUTukmet}/ukmet.${PDY}/meta/ukmetver_${PDY}_12 - fi +if (( err != 0 )) || [[ ! -s ukmetver_12.meta ]]; then + echo "FATAL ERROR: Failed to create ukmet meta file" + exit "${err}" +fi + +mv ukmetver_12.meta "${COM_ATMOS_GEMPAK_META}/ukmetver_${PDY}_12" +export err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: Failed to move meta file to ${COM_ATMOS_GEMPAK_META}/ukmetver_${PDY}_12" + exit "${err}" +fi + +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL UKMETVER_HPCMETAFILE "${job}" \ + "${COM_ATMOS_GEMPAK_META}/ukmetver_${PDY}_12" fi exit diff --git a/gempak/ush/gempak_gdas_f000_gif.sh b/gempak/ush/gempak_gdas_f000_gif.sh index 3e25d4090f..80e28f5345 100755 --- a/gempak/ush/gempak_gdas_f000_gif.sh +++ b/gempak/ush/gempak_gdas_f000_gif.sh @@ -1,97 +1,87 @@ -#!/bin/sh +#! /usr/bin/env bash ######################################################################### # -# Script: gempak_gdas_f00_gif.sh -# # This scripts creates GEMPAK .gif images of 00HR/Analysis fields from # GDAS model output for archiving at NCDC. # -# -# History: Ralph Jones 02/16/2005 JIF original version. -# -# ######################################################################### - set -x - - MAPAREA="normal" +source "${HOMEgfs}/ush/preamble.sh" - LATVAL="1/1/1/1/5;5" - LATSOUTH="1/1/1/1;4/5;5" +LATVAL="1/1/1/1/5;5" +LATSOUTH="1/1/1/1;4/5;5" +pixels="1728;1472" - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp +cp "${HOMEgfs}/gempak/fix/coltbl.spc" coltbl.xwp ################################################################# -# NORTHERN HEMISPHERE ANALYSIS CHARTS # +# NORTHERN HEMISPHERE ANALYSIS CHARTS # ################################################################# -# Create time stamp (bottom) label +# Create time stamp (bottom) label - echo 0000${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates +echo "0000${PDY}${cyc}" > dates +export FORT55="title.output" +"${HOMEgfs}/exec/webtitle.x" < dates - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" +TITLE="$(cat title.output)" +echo "TITLE = ${TITLE}" # Define labels and file names for Northern Hemisphere analysis charts - hgttmp850lab="850MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp850dev="gdas_850_hgt_tmp_nh_anl_${cyc}.gif" +hgttmp850lab="850MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp850dev="gdas_850_hgt_tmp_nh_anl_${cyc}.gif" + +hgttmp700lab="700MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp700dev="gdas_700_hgt_tmp_nh_anl_${cyc}.gif" - hgttmp700lab="700MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp700dev="gdas_700_hgt_tmp_nh_anl_${cyc}.gif" +hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp500dev="gdas_500_hgt_tmp_nh_anl_${cyc}.gif" - hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp500dev="gdas_500_hgt_tmp_nh_anl_${cyc}.gif" +hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso300dev="gdas_300_hgt_iso_nh_anl_${cyc}.gif" - hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso300dev="gdas_300_hgt_iso_nh_anl_${cyc}.gif" +hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso250dev="gdas_250_hgt_iso_nh_anl_${cyc}.gif" - hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso250dev="gdas_250_hgt_iso_nh_anl_${cyc}.gif" +hgtiso200lab="200MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso200dev="gdas_200_hgt_iso_nh_anl_${cyc}.gif" - hgtiso200lab="200MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso200dev="gdas_200_hgt_iso_nh_anl_${cyc}.gif" +mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" +mslpthksfcdev="gdas_sfc_mslp_thk_nh_anl_${cyc}.gif" - mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gdas_sfc_mslp_thk_nh_anl_${cyc}.gif" - # Set grid date and input file name - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F000 - gdfile=gem_grids${fhr}.gem +gdattim="${PDY:2:6}/${cyc}00F000" +gdfile=gem_grids${fhr3}.gem # Execute the GEMPAK program -$GEMEXE/gdplot2_gif << EOF +"${GEMEXE}/gdplot2_gif" << EOF ! 850MB HEIGHTS/TEMPERATURES - restore $NTS/base_nh.nts - restore $NTS/850_hgt_tmp.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/850_hgt_tmp.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgttmp850dev} | $pixels + DEVICE = gif | ${hgttmp850dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATVAL + LATLON = ${LATVAL} l r CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -104,23 +94,23 @@ $GEMEXE/gdplot2_gif << EOF ! 700MB HEIGHTS/TEMPERATURES - restore $NTS/base_nh.nts - restore $NTS/700_hgt_tmp.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/700_hgt_tmp.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgttmp700dev} | $pixels + DEVICE = gif | ${hgttmp700dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATVAL + LATLON = ${LATVAL} l r CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -133,23 +123,23 @@ $GEMEXE/gdplot2_gif << EOF ! 500MB HEIGHTS/TEMPERATURES - restore $NTS/base_nh.nts - restore $NTS/500_hgt_tmp.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/500_hgt_tmp.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgttmp500dev} | $pixels + DEVICE = gif | ${hgttmp500dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATVAL + LATLON = ${LATVAL} l r CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -162,14 +152,14 @@ $GEMEXE/gdplot2_gif << EOF ! 300MB HEIGHTS/ISOTACHS - restore $NTS/base_nh.nts - restore $NTS/300_hgt_iso.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/300_hgt_iso.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgtiso300dev} | $pixels + DEVICE = gif | ${hgtiso300dev} | ${pixels} TITLE = TEXT = 1/3/2/sw LATLON = 1/1/1/1/5;5 ! @@ -178,7 +168,7 @@ $GEMEXE/gdplot2_gif << EOF CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -191,17 +181,17 @@ $GEMEXE/gdplot2_gif << EOF ! 250MB ANALYSIS HEIGHTS/ISOTACHS - restore $NTS/base_nh.nts - restore $NTS/250_hgt_iso.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/250_hgt_iso.nts - CLEAR = yes + CLEAR = yes GDFILE = ${gdfile} GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtiso250dev} | $pixels - TITLE = + MAP = 1 + DEVICE = gif | ${hgtiso250dev} | ${pixels} + TITLE = TEXT = 1/3/2/sw - LATLON = $LATVAL + LATLON = ${LATVAL} l r @@ -221,14 +211,14 @@ $GEMEXE/gdplot2_gif << EOF ! 200MB HEIGHTS/ISOTACHS - restore $NTS/base_nh.nts - restore $NTS/200_hgt_iso.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/200_hgt_iso.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgtiso200dev} | $pixels + DEVICE = gif | ${hgtiso200dev} | ${pixels} TITLE = TEXT = 1/3/2/sw LATLON = 1/1/1/1/5;5 ! @@ -237,7 +227,7 @@ $GEMEXE/gdplot2_gif << EOF CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -250,17 +240,17 @@ $GEMEXE/gdplot2_gif << EOF ! ANALYSIS MSLP/1000-500 THICKNESS - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts + restore ${NTS}/base_nh.nts + restore ${NTS}/sfc_mslp_thk.nts CLEAR = yes GDFILE = ${gdfile} GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels + DEVICE = gif | ${mslpthksfcdev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATVAL + LATLON = ${LATVAL} l r @@ -280,75 +270,66 @@ $GEMEXE/gdplot2_gif << EOF exit EOF -$GEMEXE/gpend - -if [ $SENDCOM = YES ]; then +"${GEMEXE}/gpend" # Copy the GIF images into my area - cp ${hgttmp850dev} $COMOUTncdc/. - cp ${hgttmp700dev} $COMOUTncdc/. - cp ${hgttmp500dev} $COMOUTncdc/. - cp ${hgtiso300dev} $COMOUTncdc/. - cp ${hgtiso250dev} $COMOUTncdc/. - cp ${hgtiso200dev} $COMOUTncdc/. - cp ${mslpthksfcdev} $COMOUTncdc/. +cp "${hgttmp850dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgttmp700dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgttmp500dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgtiso300dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgtiso250dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgtiso200dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${mslpthksfcdev}" "${COM_ATMOS_GEMPAK_GIF}/." # Send the GIF images onto the NCDC area on the public ftp server - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgttmp850dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgttmp700dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgttmp500dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgtiso300dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgtiso250dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgtiso200dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${mslpthksfcdev} - - fi - +if [[ ${SENDDBN} == YES ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp850dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp700dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp500dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso300dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso250dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso200dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${mslpthksfcdev}" fi - - ########################################################## # SOUTHERN HEMISPHERE ANALYSIS CHARTS # ########################################################## +mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" +mslpthksfcdev="gdas_sfc_mslp_thk_sh_anl_${cyc}.gif" - mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gdas_sfc_mslp_thk_sh_anl_${cyc}.gif" - - hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp500dev="gdas_500_hgt_tmp_sh_anl_${cyc}.gif" +hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp500dev="gdas_500_hgt_tmp_sh_anl_${cyc}.gif" - hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso300dev="gdas_300_hgt_iso_sh_anl_${cyc}.gif" +hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso300dev="gdas_300_hgt_iso_sh_anl_${cyc}.gif" - hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso250dev="gdas_250_hgt_iso_sh_anl_${cyc}.gif" +hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso250dev="gdas_250_hgt_iso_sh_anl_${cyc}.gif" # Execute the GEMPAK program -$GEMEXE/gdplot2_gif << EOF +"${GEMEXE}/gdplot2_gif" << EOF ! ANALYSIS MSLP/1000-500 THICKNESS - restore $NTS/base_sh.nts - restore $NTS/sfc_mslp_thk.nts + restore ${NTS}/base_sh.nts + restore ${NTS}/sfc_mslp_thk.nts CLEAR = yes GDFILE = ${gdfile} GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels + DEVICE = gif | ${mslpthksfcdev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATSOUTH + LATLON = ${LATSOUTH} l r @@ -368,18 +349,18 @@ $GEMEXE/gdplot2_gif << EOF ! 500MB ANALYSIS HEIGHTS/TEMPERATURES - restore $NTS/base_sh.nts - restore $NTS/500_hgt_tmp.nts + restore ${NTS}/base_sh.nts + restore ${NTS}/500_hgt_tmp.nts CLEAR = yes GDFILE = ${gdfile} GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgttmp500dev} | $pixels + DEVICE = gif | ${hgttmp500dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATSOUTH + LATLON = ${LATSOUTH} l r @@ -398,23 +379,23 @@ $GEMEXE/gdplot2_gif << EOF ! 300MB HEIGHTS/ISOTACHS - restore $NTS/base_sh.nts - restore $NTS/300_hgt_iso.nts + restore ${NTS}/base_sh.nts + restore ${NTS}/300_hgt_iso.nts CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim + GDFILE = ${gdfile} + GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgtiso300dev} | $pixels + DEVICE = gif | ${hgtiso300dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATSOUTH ! + LATLON = ${LATSOUTH} ! l r CLEAR = no GDPFUN = - TITLE = 1/-4/$TITLE + TITLE = 1/-4/${TITLE} TEXT = 2/3/2/sw LATLON = 0 l @@ -427,17 +408,17 @@ $GEMEXE/gdplot2_gif << EOF ! 250MB ANALYSIS HEIGHTS/ISOTACHS - restore $NTS/base_sh.nts - restore $NTS/250_hgt_iso.nts + restore ${NTS}/base_sh.nts + restore ${NTS}/250_hgt_iso.nts CLEAR = yes GDFILE = ${gdfile} GDATTIM = ${gdattim} MAP = 1 - DEVICE = gif | ${hgtiso250dev} | $pixels + DEVICE = gif | ${hgtiso250dev} | ${pixels} TITLE = TEXT = 1/3/2/sw - LATLON = $LATSOUTH + LATLON = ${LATSOUTH} l r @@ -458,31 +439,22 @@ $GEMEXE/gdplot2_gif << EOF EOF -$GEMEXE/gpend +"${GEMEXE}/gpend" -if [ $SENDCOM = YES ]; then - # Copy the GIF images into my area - - cp ${mslpthksfcdev} $COMOUTncdc/. - cp ${hgttmp500dev} $COMOUTncdc/. - cp ${hgtiso300dev} $COMOUTncdc/. - cp ${hgtiso250dev} $COMOUTncdc/. - +cp "${mslpthksfcdev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgttmp500dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgtiso300dev}" "${COM_ATMOS_GEMPAK_GIF}/." +cp "${hgtiso250dev}" "${COM_ATMOS_GEMPAK_GIF}/." # Copy the GIF images onto the NCDC area on the public ftp server - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgttmp500dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgtiso300dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} $COMOUTncdc/${hgtiso250dev} - - fi - +if [[ ${SENDDBN} == YES ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${mslpthksfcdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp500dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso300dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso250dev}" fi - - exit +exit diff --git a/gempak/ush/gempak_gfs_f000_gif.sh b/gempak/ush/gempak_gfs_f000_gif.sh new file mode 100755 index 0000000000..6a709fcc16 --- /dev/null +++ b/gempak/ush/gempak_gfs_f000_gif.sh @@ -0,0 +1,584 @@ +#! /usr/bin/env bash + +######################################################################### +# +# Script: gempak_gfs_f00_gif.sh +# +# This scripts creates GEMPAK .gif images of 00HR/Analysis fields from +# GFS model output for archiving at NCDC. +# +# +# History: Ralph Jones 02/16/2005 JIF original version. +# History: Steve Lilly 04/30/2008 Change font size of the Titles +# from .8 to a larger size (1 or 2) +# +# +######################################################################### + +LATVAL="1/1/1/1/5;5" +pixels="1728;1472" +cp "${HOMEgfs}/gempak/fix/coltbl.spc" coltbl.xwp + +################################################################# +# ANALYSIS CHARTS # +################################################################# + + +# Create time stamp (bottom) label + +echo "0000${PDY}${cyc}" > dates +export FORT55="title.output" +"${HOMEgfs}/exec/webtitle.x" < dates +TITLE="$(cat title.output)" +echo "TITLE = ${TITLE}" + +# Define labels and file names for analysis charts + +hgttmp700lab="700MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp700dev="gfs_700_hgt_tmp_nh_anl_${cyc}.gif" + +hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp500dev="gfs_500_hgt_tmp_nh_anl_${cyc}.gif" + +hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso300dev="gfs_300_hgt_iso_nh_anl_${cyc}.gif" + +hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso250dev="gfs_250_hgt_iso_nh_anl_${cyc}.gif" + +hgttmp250lab="250MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp250dev="gfs_250_hgt_tmp_nh_anl_${cyc}.gif" + +hgtiso200lab="200MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso200dev="gfs_200_hgt_iso_nh_anl_${cyc}.gif" + +# Not being used? +# hgttmp200lab="200MB ANALYSIS HEIGHTS/TEMPERATURE" +# hgttmp200dev="gfs_200_hgt_tmp_nh_anl_${cyc}.gif" + +hgtiso100lab="100MB ANALYSIS HEIGHTS/ISOTACHS" +hgtiso100dev="gfs_100_hgt_iso_nh_anl_${cyc}.gif" + +hgttmp100lab="100MB ANALYSIS HEIGHTS/TEMPERATURE" +hgttmp100dev="gfs_100_hgt_tmp_nh_anl_${cyc}.gif" + +hgtvor500lab="500MB ANALYSIS HEIGHTS/VORTICITY" +hgtvor500dev="gfs_500_hgt_vor_nh_anl_${cyc}.gif" + +hgtvor500usdev="gfs_500_hgt_vor_uscan_anl_${cyc}.gif" + +mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" +mslpthksfcdev="gfs_sfc_mslp_thk_nh_anl_${cyc}.gif" + +mslpthksfcusdev="gfs_sfc_mslp_thk_uscan_anl_${cyc}.gif" + +rhvvel700lab="700MB ANALYSIS RH/VERT VEL" +rhvvel700dev="gfs_700_rh_vvel_nh_anl_${cyc}.gif" + +liftlab="ANALYSIS LIFTED INDEX" +liftdev="gfs_lift_nh_anl_${cyc}.gif" + +prswshtroplab="TROPOPAUSE PRESSURE/WIND SHEAR" +prswshtropdev="gfs_trop_prs_wsh_nh_anl_${cyc}.gif" + +# Set grid date and input file name + +gdattim=${PDY:2:6}/${cyc}00F000 +gdfile=gem_grids${fhr3}.gem + +# Execute the GEMPAK program + +"${GEMEXE}/gdplot2_gif" << EOF + +! 700MB HEIGHTS/TEMPERATURES + + restore ${NTS}/base_nh.nts + restore ${NTS}/700_hgt_tmp.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgttmp700dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgttmp700lab} + l + r + + +! 500MB HEIGHTS/TEMPERATURES + + restore ${NTS}/base_nh.nts + restore ${NTS}/500_hgt_tmp.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgttmp500dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgttmp500lab} + l + r + + +! 300MB HEIGHTS/ISOTACHS + + restore ${NTS}/base_nh.nts + restore ${NTS}/300_hgt_iso.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtiso300dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = 1/1/1/1/5;5 ! + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtiso300lab} + l + r + + +! 250MB HEIGHTS/TEMPERATURES + + restore ${NTS}/base_nh.nts + restore ${NTS}/250_hgt_tmp.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgttmp250dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgttmp250lab} + l + r + + +! 250MB ANALYSIS HEIGHTS/ISOTACHS + + restore ${NTS}/base_nh.nts + restore ${NTS}/250_hgt_iso.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtiso250dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + MAP = 0 + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtiso250lab} + l + r + + +! 200MB HEIGHTS/ISOTACHS + + restore ${NTS}/base_nh.nts + restore ${NTS}/200_hgt_iso.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtiso200dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = 1/1/1/1/5;5 ! + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtiso200lab} + l + r + + +! 100MB HEIGHTS/TEMPERATURES + + restore ${NTS}/base_nh.nts + restore ${NTS}/100_hgt_tmp.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgttmp100dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgttmp100lab} + l + r + + +! 100MB HEIGHTS/ISOTACHS + + restore ${NTS}/base_nh.nts + restore ${NTS}/100_hgt_iso.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtiso100dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = 1/1/1/1/5;5 ! + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtiso100lab} + l + r + + +! ANALYSIS MSLP/1000-500 THICKNESS + + restore ${NTS}/base_nh.nts + restore ${NTS}/sfc_mslp_thk.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${mslpthksfcdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + MAP = 0 + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${mslpthksfclab} + l + r + + +! ANALYSIS MSLP/1000-500 THICKNESS (US/CANADA) + + restore ${NTS}/base_uscan.nts + restore ${NTS}/sfc_mslp_thk.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${mslpthksfcusdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + MAP = 0 + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${mslpthksfclab} + l + r + +! 500MB ANALYSIS HEIGHTS/VORTICITY + + restore ${NTS}/base_nh.nts + restore ${NTS}/500_hgt_vor.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtvor500dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + MAP = 0 + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtvor500lab} + l + r + +! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) + + restore ${NTS}/base_uscan.nts + restore ${NTS}/500_hgt_vor.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtvor500usdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + + TITLE = 1/3/${hgtvor500lab} + l + r + + +! ANALYSIS LIFTED INDEX + + restore ${NTS}/base_nh.nts + restore ${NTS}/100_lift.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${liftdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${liftlab} + l + r + + +! ANALYSIS TROPOPAUSE PRESSURE/WIND SHEAR + + restore ${NTS}/base_nh.nts + restore ${NTS}/trop_pres_wshr.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${prswshtropdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${prswshtroplab} + l + r + + +! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY + + restore ${NTS}/base_nh.nts + restore ${NTS}/700_rel_vvel.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${rhvvel700dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${rhvvel700lab} + l + r + + exit +EOF + + +"${GEMEXE}/gpend" + + +# Copy the GIF images into my area +cp "${hgttmp700dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgttmp500dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtiso300dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtiso250dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgttmp250dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtiso200dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtiso100dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgttmp100dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${mslpthksfcdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${mslpthksfcusdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtvor500dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtvor500usdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${liftdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${prswshtropdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${rhvvel700dev}" "${COM_ATMOS_GEMPAK_GIF}" + +# Copy the GIF images onto the NCDC area on the public ftp server + +if [[ "${SENDDBN}" == "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp700dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp500dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso300dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso250dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp250dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso200dev}" +# "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp200dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtiso100dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgttmp100dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${mslpthksfcdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${mslpthksfcusdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtvor500dev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtvor500usdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${liftdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${prswshtropdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${rhvvel700dev}" + + + +fi + +# Convert the 500mb NH Hgts/Temps chart to tif, attach a heading and +# send to TOC via the NTC + +export input=${COM_ATMOS_GEMPAK_GIF}/${hgttmp500dev} +export HEADER=YES +export OUTPATH=${DATA}/gfs_500_hgt_tmp_nh_anl_${cyc}.tif +"${USHgfs}/make_tif.sh" + +exit diff --git a/gempak/ush/gempak_gfs_f00_gif.sh b/gempak/ush/gempak_gfs_f00_gif.sh deleted file mode 100755 index ad16958be2..0000000000 --- a/gempak/ush/gempak_gfs_f00_gif.sh +++ /dev/null @@ -1,596 +0,0 @@ -#!/bin/sh - -######################################################################### -# -# Script: gempak_gfs_f00_gif.sh -# -# This scripts creates GEMPAK .gif images of 00HR/Analysis fields from -# GFS model output for archiving at NCDC. -# -# -# History: Ralph Jones 02/16/2005 JIF original version. -# History: Steve Lilly 04/30/2008 Change font size of the Titles -# from .8 to a larger size (1 or 2) -# -# -######################################################################### - - set -x - - MAPAREA="normal" - - LATVAL="1/1/1/1/5;5" - - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp - -################################################################# -# ANALYSIS CHARTS # -################################################################# - - -# Create time stamp (bottom) label - - echo 0000${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" - -# Define labels and file names for analysis charts - - hgttmp700lab="700MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp700dev="gfs_700_hgt_tmp_nh_anl_${cyc}.gif" - - hgttmp500lab="500MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp500dev="gfs_500_hgt_tmp_nh_anl_${cyc}.gif" - - hgtiso500lab="500MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso500dev="gfs_500_hgt_iso_nh_anl_${cyc}.gif" - - hgtiso300lab="300MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso300dev="gfs_300_hgt_iso_nh_anl_${cyc}.gif" - - hgtiso250lab="250MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso250dev="gfs_250_hgt_iso_nh_anl_${cyc}.gif" - - hgttmp250lab="250MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp250dev="gfs_250_hgt_tmp_nh_anl_${cyc}.gif" - - hgtiso200lab="200MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso200dev="gfs_200_hgt_iso_nh_anl_${cyc}.gif" - - hgttmp200lab="200MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp200dev="gfs_200_hgt_tmp_nh_anl_${cyc}.gif" - - hgtiso100lab="100MB ANALYSIS HEIGHTS/ISOTACHS" - hgtiso100dev="gfs_100_hgt_iso_nh_anl_${cyc}.gif" - - hgttmp100lab="100MB ANALYSIS HEIGHTS/TEMPERATURE" - hgttmp100dev="gfs_100_hgt_tmp_nh_anl_${cyc}.gif" - - hgtvor500lab="500MB ANALYSIS HEIGHTS/VORTICITY" - hgtvor500dev="gfs_500_hgt_vor_nh_anl_${cyc}.gif" - - hgtvor500usdev="gfs_500_hgt_vor_uscan_anl_${cyc}.gif" - - mslpthksfclab="ANALYSIS MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gfs_sfc_mslp_thk_nh_anl_${cyc}.gif" - - mslpthksfcusdev="gfs_sfc_mslp_thk_uscan_anl_${cyc}.gif" - - rhvvel700lab="700MB ANALYSIS RH/VERT VEL" - rhvvel700dev="gfs_700_rh_vvel_nh_anl_${cyc}.gif" - - liftlab="ANALYSIS LIFTED INDEX" - liftdev="gfs_lift_nh_anl_${cyc}.gif" - - prswshtroplab="TROPOPAUSE PRESSURE/WIND SHEAR" - prswshtropdev="gfs_trop_prs_wsh_nh_anl_${cyc}.gif" - -# Set grid date and input file name - - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F000 - gdfile=gem_grids${fhr}.gem - -# Execute the GEMPAK program - - $GEMEXE/gdplot2_gif << EOF - -! 700MB HEIGHTS/TEMPERATURES - - restore $NTS/base_nh.nts - restore $NTS/700_hgt_tmp.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgttmp700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgttmp700lab} - l - r - - -! 500MB HEIGHTS/TEMPERATURES - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_tmp.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgttmp500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgttmp500lab} - l - r - - -! 300MB HEIGHTS/ISOTACHS - - restore $NTS/base_nh.nts - restore $NTS/300_hgt_iso.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgtiso300dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = 1/1/1/1/5;5 ! - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtiso300lab} - l - r - - -! 250MB HEIGHTS/TEMPERATURES - - restore $NTS/base_nh.nts - restore $NTS/250_hgt_tmp.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgttmp250dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgttmp250lab} - l - r - - -! 250MB ANALYSIS HEIGHTS/ISOTACHS - - restore $NTS/base_nh.nts - restore $NTS/250_hgt_iso.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtiso250dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtiso250lab} - l - r - - -! 200MB HEIGHTS/ISOTACHS - - restore $NTS/base_nh.nts - restore $NTS/200_hgt_iso.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgtiso200dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = 1/1/1/1/5;5 ! - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtiso200lab} - l - r - - -! 100MB HEIGHTS/TEMPERATURES - - restore $NTS/base_nh.nts - restore $NTS/100_hgt_tmp.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgttmp100dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgttmp100lab} - l - r - - -! 100MB HEIGHTS/ISOTACHS - - restore $NTS/base_nh.nts - restore $NTS/100_hgt_iso.nts - - CLEAR = yes - GDFILE = $gdfile - GDATTIM = $gdattim - MAP = 1 - DEVICE = gif | ${hgtiso100dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = 1/1/1/1/5;5 ! - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/$TITLE - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtiso100lab} - l - r - - -! ANALYSIS MSLP/1000-500 THICKNESS - - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - - -! ANALYSIS MSLP/1000-500 THICKNESS (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcusdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - -! 500MB ANALYSIS HEIGHTS/VORTICITY - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - -! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500usdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! ANALYSIS LIFTED INDEX - - restore $NTS/base_nh.nts - restore $NTS/100_lift.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${liftdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${liftlab} - l - r - - -! ANALYSIS TROPOPAUSE PRESSURE/WIND SHEAR - - restore $NTS/base_nh.nts - restore $NTS/trop_pres_wshr.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${prswshtropdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${prswshtroplab} - l - r - - -! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY - - restore $NTS/base_nh.nts - restore $NTS/700_rel_vvel.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${rhvvel700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${rhvvel700lab} - l - r - - exit -EOF - - -$GEMEXE/gpend - - -if [ $SENDCOM = YES ]; then - -# Copy the GIF images into my area - - cp ${hgttmp700dev} ${COMOUT} - cp ${hgttmp500dev} ${COMOUT} - cp ${hgtiso300dev} ${COMOUT} - cp ${hgtiso250dev} ${COMOUT} - cp ${hgttmp250dev} ${COMOUT} - cp ${hgtiso200dev} ${COMOUT} - cp ${hgtiso100dev} ${COMOUT} - cp ${hgttmp100dev} ${COMOUT} - cp ${mslpthksfcdev} ${COMOUT} - cp ${mslpthksfcusdev} ${COMOUT} - cp ${hgtvor500dev} ${COMOUT} - cp ${hgtvor500usdev} ${COMOUT} - cp ${liftdev} ${COMOUT} - cp ${prswshtropdev} ${COMOUT} - cp ${rhvvel700dev} ${COMOUT} - -# Copy the GIF images onto the NCDC area on the public ftp server - - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgttmp700dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgttmp500dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtiso300dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtiso250dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgttmp250dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtiso200dev} -# $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgttmp200dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtiso100dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgttmp100dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcusdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500dev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500usdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${liftdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${prswshtropdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${rhvvel700dev} - - -# Convert the 500mb NH Hgts/Temps chart to tif, attach a heading and -# send to TOC via the NTC - - fi - export input=${COMOUT}/${hgttmp500dev} - export HEADER=YES - export OUTPATH=$DATA/gfs_500_hgt_tmp_nh_anl_${cyc}.tif - ${USHgfs}/make_tif.sh -fi - - exit diff --git a/gempak/ush/gempak_gfs_f12_gif.sh b/gempak/ush/gempak_gfs_f12_gif.sh deleted file mode 100755 index 0150affac7..0000000000 --- a/gempak/ush/gempak_gfs_f12_gif.sh +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/sh - -######################################################################### -# -# Script: gempak_gfs_f12_gif.sh -# -# This scripts creates GEMPAK .gif images of 12HR forecast fields from -# GFS model output for archiving at NCDC. -# -# -# History: Ralph Jones 02/16/2005 JIF original version. -# History: Steve Lilly 04/30/2008 Change font size of the Titles -# from .8 to a larger size (1 or 2) -# -# -######################################################################### - - set -x - - MAPAREA="normal" - - LATVAL="1/1/1/1/5;5" - - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp - -########################################################## -# 12HR FORECAST CHARTS # -########################################################## - - -# Create time stamp (bottom) label - - echo 00${fhr}${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates - - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" - - -# Define labels and file names for 12hr forecast charts - - hgtvor500lab="500MB ${fhr}HR FORECAST HEIGHTS/VORTICITY" - hgtvor500dev="gfs_500_hgt_vor_nh_f${fhr}_${cyc}.gif" - - hgtvor500usdev="gfs_500_hgt_vor_uscan_f${fhr}_${cyc}.gif" - - mslpthksfclab="${fhr}HR FORECAST MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gfs_sfc_mslp_thk_nh_f${fhr}_${cyc}.gif" - - rhvvel700lab="700MB ${fhr}HR FORECAST RH/VERT VEL" - rhvvel700dev="gfs_700_rh_vvel_nh_f${fhr}_${cyc}.gif" - -# Set grid date and input file name - - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} - gdfile=gem_grids${fhr}.gem - -# Execute the GEMPAK program - - $GEMEXE/gdplot2_gif << EOF - -! ANALYSIS MSLP/1000-500 THICKNESS - - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - -! 500MB ANALYSIS HEIGHTS/VORTICITY - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - -! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500usdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY - - restore $NTS/base_nh.nts - restore $NTS/700_rel_vvel.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${rhvvel700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${rhvvel700lab} - l - r - - exit -EOF - -$GEMEXE/gpend - -if [ $SENDCOM = YES ]; then - -# Copy the GIF images into my area - - cp ${mslpthksfcdev} ${COMOUT} - cp ${hgtvor500dev} ${COMOUT} - cp ${hgtvor500usdev} ${COMOUT} - cp ${rhvvel700dev} ${COMOUT} - -# Copy the GIF images onto the NCDC area on the public ftp server - - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500dev} -# $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500usdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${rhvvel700dev} - - fi - -fi - - exit diff --git a/gempak/ush/gempak_gfs_f24_gif.sh b/gempak/ush/gempak_gfs_f24_gif.sh deleted file mode 100755 index cad24de9f6..0000000000 --- a/gempak/ush/gempak_gfs_f24_gif.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/sh - - -######################################################################### -# -# Script: gempak_gfs_f24_gif.sh -# -# This scripts creates GEMPAK .gif images of 24HR forecast fields from -# GFS model output for archiving at NCDC. -# -# -# History: Ralph Jones 02/16/2005 JIF original version. -# History: Steve Lilly 04/30/2008 Change font size of the Titles -# from .8 to a larger size (1 or 2) -# -# -######################################################################### - - set -x - - - MAPAREA="normal" - - LATVAL="1/1/1/1/5;5" - - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp - - - -########################################################## -# 24HR FORECAST CHARTS # -########################################################## - - -# Create time stamp (bottom) label - - echo 00${fhr}${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates - - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" - - -# Define labels and file names for 24hr forecast charts - - hgtvor500lab="500MB ${fhr}HR FORECAST HEIGHTS/VORTICITY" - hgtvor500dev="gfs_500_hgt_vor_nh_f${fhr}_${cyc}.gif" - - hgtvor500usdev="gfs_500_hgt_vor_uscan_f${fhr}_${cyc}.gif" - - mslpthksfclab="${fhr}HR FORECAST MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gfs_sfc_mslp_thk_nh_f${fhr}_${cyc}.gif" - - rhvvel700lab="700MB ${fhr}HR FORECAST RH/VERT VEL" - rhvvel700dev="gfs_700_rh_vvel_nh_f${fhr}_${cyc}.gif" - - -# Set grid date and input file name - - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} - gdfile=gem_grids${fhr}.gem - - - -# Execute the GEMPAK program - - $GEMEXE/gdplot2_gif << EOF - - -! ANALYSIS MSLP/1000-500 THICKNESS - - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500usdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY - - restore $NTS/base_nh.nts - restore $NTS/700_rel_vvel.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${rhvvel700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${rhvvel700lab} - l - r - - exit -EOF - - -$GEMEXE/gpend - - -if [ $SENDCOM = YES ]; then - -# Copy the GIF images into my area - - cp ${mslpthksfcdev} ${COMOUT} - cp ${hgtvor500dev} ${COMOUT} - cp ${hgtvor500usdev} ${COMOUT} - cp ${rhvvel700dev} ${COMOUT} - - -# Copy the GIF images onto the NCDC area on the public ftp server - - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500dev} -# $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500usdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${rhvvel700dev} - - fi - -fi - - exit diff --git a/gempak/ush/gempak_gfs_f36_gif.sh b/gempak/ush/gempak_gfs_f36_gif.sh deleted file mode 100755 index 60644e2fa3..0000000000 --- a/gempak/ush/gempak_gfs_f36_gif.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/sh - - -######################################################################### -# -# Script: gempak_gfs_f36_gif.sh -# -# This scripts creates GEMPAK .gif images of 36HR forecast fields from -# GFS model output for archiving at NCDC. -# -# -# History: Ralph Jones 02/16/2005 JIF original version. -# History: Steve Lilly 04/30/2008 Change font size of the Titles -# from .8 to a larger size (1 or 2) -# -# -######################################################################### - - set -x - - - MAPAREA="normal" - - LATVAL="1/1/1/1/5;5" - - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp - - - -########################################################## -# 36HR FORECAST CHARTS # -########################################################## - - -# Create time stamp (bottom) label - - echo 00${fhr}${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates - - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" - - -# Define labels and file names for 36hr forecast charts - - hgtvor500lab="500MB ${fhr}HR FORECAST HEIGHTS/VORTICITY" - hgtvor500dev="gfs_500_hgt_vor_nh_f${fhr}_${cyc}.gif" - - hgtvor500usdev="gfs_500_hgt_vor_uscan_f${fhr}_${cyc}.gif" - - mslpthksfclab="${fhr}HR FORECAST MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gfs_sfc_mslp_thk_nh_f${fhr}_${cyc}.gif" - - rhvvel700lab="700MB ${fhr}HR FORECAST RH/VERT VEL" - rhvvel700dev="gfs_700_rh_vvel_nh_f${fhr}_${cyc}.gif" - - -# Set grid date and input file name - - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} - gdfile=gem_grids${fhr}.gem - - - -# Execute the GEMPAK program - - $GEMEXE/gdplot2_gif << EOF - - -! ANALYSIS MSLP/1000-500 THICKNESS - - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500usdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY - - restore $NTS/base_nh.nts - restore $NTS/700_rel_vvel.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${rhvvel700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${rhvvel700lab} - l - r - - exit -EOF - - -$GEMEXE/gpend - - -if [ $SENDCOM = YES ]; then - -# Copy the GIF images into my area - - cp ${mslpthksfcdev} ${COMOUT} - cp ${hgtvor500dev} ${COMOUT} - cp ${hgtvor500usdev} ${COMOUT} - cp ${rhvvel700dev} ${COMOUT} - - -# Copy the GIF images onto the NCDC area on the public ftp server - - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500dev} -# $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500usdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${rhvvel700dev} - - fi - -fi - - exit diff --git a/gempak/ush/gempak_gfs_f48_gif.sh b/gempak/ush/gempak_gfs_f48_gif.sh deleted file mode 100755 index b63f644ee6..0000000000 --- a/gempak/ush/gempak_gfs_f48_gif.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/sh - - -######################################################################### -# -# Script: gempak_gfs_f48_gif.sh -# -# This scripts creates GEMPAK .gif images of 48HR forecast fields from -# GFS model output for archiving at NCDC. -# -# -# History: Ralph Jones 02/16/2005 JIF original version. -# History: Steve Lilly 04/30/2008 Change font size of the Titles -# from .8 to a larger size (1 or 2) -# -# -######################################################################### - - set -x - - - MAPAREA="normal" - - LATVAL="1/1/1/1/5;5" - - pixels="1728;1472" - - cp ${HOMEgfs}/gempak/fix/coltbl.spc coltbl.xwp - - - -########################################################## -# 48HR FORECAST CHARTS # -########################################################## - - -# Create time stamp (bottom) label - - echo 00${fhr}${PDY}${cyc} > dates - export FORT55="title.output" -# $WEBTITLE < dates - ${UTILgfs}/exec/webtitle < dates - - export TITLE=$(cat title.output) - echo "\n\n TITLE = $TITLE \n" - - -# Define labels and file names for 48hr forecast charts - - hgtvor500lab="500MB ${fhr}HR FORECAST HEIGHTS/VORTICITY" - hgtvor500dev="gfs_500_hgt_vor_nh_f${fhr}_${cyc}.gif" - - hgtvor500usdev="gfs_500_hgt_vor_uscan_f${fhr}_${cyc}.gif" - - mslpthksfclab="${fhr}HR FORECAST MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" - mslpthksfcdev="gfs_sfc_mslp_thk_nh_f${fhr}_${cyc}.gif" - - rhvvel700lab="700MB ${fhr}HR FORECAST RH/VERT VEL" - rhvvel700dev="gfs_700_rh_vvel_nh_f${fhr}_${cyc}.gif" - - -# Set grid date and input file name - - gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} - gdfile=gem_grids${fhr}.gem - - - -# Execute the GEMPAK program - - $GEMEXE/gdplot2_gif << EOF - - -! ANALYSIS MSLP/1000-500 THICKNESS - - restore $NTS/base_nh.nts - restore $NTS/sfc_mslp_thk.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${mslpthksfcdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - MAP = 0 - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${mslpthksfclab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY - - restore $NTS/base_nh.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) - - restore $NTS/base_uscan.nts - restore $NTS/500_hgt_vor.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${hgtvor500usdev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${hgtvor500lab} - l - r - - -! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY - - restore $NTS/base_nh.nts - restore $NTS/700_rel_vvel.nts - - CLEAR = yes - GDFILE = ${gdfile} - GDATTIM = ${gdattim} - MAP = 1 - DEVICE = gif | ${rhvvel700dev} | $pixels - TITLE = - TEXT = 1/2/2/c/sw - LATLON = $LATVAL - l - r - - CLEAR = no - GDPFUN = - TITLE = 1/-4/${TITLE} - TEXT = 2/2/2/c/sw - LATLON = 0 - l - r - - TITLE = 1/3/${rhvvel700lab} - l - r - - exit -EOF - - -$GEMEXE/gpend - - -if [ $SENDCOM = YES ]; then - -# Copy the GIF images into my area - - cp ${mslpthksfcdev} ${COMOUT} - cp ${hgtvor500dev} ${COMOUT} - cp ${hgtvor500usdev} ${COMOUT} - cp ${rhvvel700dev} ${COMOUT} - - -# Copy the GIF images onto the NCDC area on the public ftp server - - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${mslpthksfcdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500dev} -# $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${hgtvor500usdev} - $DBNROOT/bin/dbn_alert MODEL NCDCGIF ${job} ${COMOUT}/${rhvvel700dev} - - fi - -fi - - exit diff --git a/gempak/ush/gempak_gfs_fhhh_gif.sh b/gempak/ush/gempak_gfs_fhhh_gif.sh new file mode 100755 index 0000000000..33f5764068 --- /dev/null +++ b/gempak/ush/gempak_gfs_fhhh_gif.sh @@ -0,0 +1,189 @@ +#! /usr/bin/env bash + +######################################################################### +# +# This scripts creates GEMPAK .gif images of forecast fields from +# GFS model output for archiving at NCDC. +# +######################################################################### + +LATVAL="1/1/1/1/5;5" +pixels="1728;1472" +cp "${HOMEgfs}/gempak/fix/coltbl.spc" coltbl.xwp + +########################################################## +# FORECAST CHARTS # +########################################################## + + +# Create time stamp (bottom) label + +echo "0${fhr3}${PDY}${cyc}" > dates +export FORT55="title.output" +"${HOMEgfs}/exec/webtitle.x" < dates + +TITLE="$(cat title.output)" +echo "TITLE = ${TITLE}" + +# Define labels and file names for forecast charts +hgtvor500lab="500MB ${fhr3}HR FORECAST HEIGHTS/VORTICITY" +hgtvor500dev="gfs_500_hgt_vor_nh_f${fhr3}_${cyc}.gif" + +hgtvor500usdev="gfs_500_hgt_vor_uscan_f${fhr3}_${cyc}.gif" + +mslpthksfclab="${fhr3}HR FORECAST MEAN SEA LEVEL PRESSURE/1000-500MB THICKNESS" +mslpthksfcdev="gfs_sfc_mslp_thk_nh_f${fhr3}_${cyc}.gif" + +rhvvel700lab="700MB ${fhr3}HR FORECAST RH/VERT VEL" +rhvvel700dev="gfs_700_rh_vvel_nh_f${fhr3}_${cyc}.gif" + + +# Set grid date and input file name +gdattim="${PDY:2:6}/${cyc}00F${fhr3}" +gdfile=gem_grids${fhr3}.gem + +# Execute the GEMPAK program + +"${GEMEXE}/gdplot2_gif" << EOF + + +! ANALYSIS MSLP/1000-500 THICKNESS + + restore ${NTS}/base_nh.nts + restore ${NTS}/sfc_mslp_thk.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${mslpthksfcdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + MAP = 0 + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${mslpthksfclab} + l + r + + +! 500MB ANALYSIS HEIGHTS/VORTICITY + + restore ${NTS}/base_nh.nts + restore ${NTS}/500_hgt_vor.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtvor500dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtvor500lab} + l + r + + +! 500MB ANALYSIS HEIGHTS/VORTICITY (US/CANADA) + + restore ${NTS}/base_uscan.nts + restore ${NTS}/500_hgt_vor.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${hgtvor500usdev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${hgtvor500lab} + l + r + + +! ANALYSIS 700MB RELATIVE HUMIDITY AND VERTICAL VELOCITY + + restore ${NTS}/base_nh.nts + restore ${NTS}/700_rel_vvel.nts + + CLEAR = yes + GDFILE = ${gdfile} + GDATTIM = ${gdattim} + MAP = 1 + DEVICE = gif | ${rhvvel700dev} | ${pixels} + TITLE = + TEXT = 1/2/2/c/sw + LATLON = ${LATVAL} + l + r + + CLEAR = no + GDPFUN = + TITLE = 1/-4/${TITLE} + TEXT = 2/2/2/c/sw + LATLON = 0 + l + r + + TITLE = 1/3/${rhvvel700lab} + l + r + + exit +EOF + +"${GEMEXE}/gpend" + +# Copy the GIF images into my area + +cp "${mslpthksfcdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtvor500dev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${hgtvor500usdev}" "${COM_ATMOS_GEMPAK_GIF}" +cp "${rhvvel700dev}" "${COM_ATMOS_GEMPAK_GIF}" + +# Copy the GIF images onto the NCDC area on the public ftp server + +if [[ "${SENDDBN}" == YES ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${mslpthksfcdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtvor500dev}" + # "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${hgtvor500usdev}" + "${DBNROOT}/bin/dbn_alert" MODEL NCDCGIF "${job}" "${COM_ATMOS_GEMPAK_GIF}/${rhvvel700dev}" +fi + +echo "GEMPAK_GIF ${fhr3} hour completed normally" + +exit diff --git a/gempak/ush/gfs_meta_ak.sh b/gempak/ush/gfs_meta_ak.sh index 03db6fa088..88f136ae13 100755 --- a/gempak/ush/gfs_meta_ak.sh +++ b/gempak/ush/gfs_meta_ak.sh @@ -1,48 +1,41 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_ak.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# D.W.Plummer/NCEP 3/97 Added ecmwf comparison. -# D.W.Plummer/NCEP 3/97 Added $MAPFIL specification for lower resolution -# D.W.Plummer/NCEP 4/97 Removed run from 3-HOURLY PRECIP -# J. Carr/HPC 2/99 Changed skip to 0 -# B. Gordon/NCO 5/00 Modified for production on IBM-SP -# Changed gdplot_nc -> gdplot2_nc -# D. Michaud/NCO 4/01 Modified to Reflect Different Title for -# Parallel runs -# J. Carr/PMB 11/04 Added a ? to all title lines -# Changed contur from a 1 to a 2. -# M. Klein/HPC 6/07 Modify for Alaska medium-range desk and rename script. -# -cd $DATA +source "${HOMEgfs}/ush/preamble.sh" -set -xa +cd "${DATA}" || exit 2 -rm -rf $DATA/ak -mkdir -p -m 775 $DATA/ak -cd $DATA/ak -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +rm -rf "${DATA}/ak" +mkdir -p -m 775 "${DATA}/ak" +cd "${DATA}/ak" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl device="nc | gfs.meta.ak" -PDY2=$(echo $PDY | cut -c3-) + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi fend=F216 -if [ "$envir" = "para" ] ; then +if [[ "${envir}" == "para" ]] ; then export m_title="GFSP" else export m_title="GFS" fi export pgm=gdplot2_nc;. prep_step -startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-GFS | ${PDY2}/${cyc}00 -GDATTIM = F00-$fend-6 +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-GFS | ${PDY:2}/${cyc}00 +GDATTIM = F00-${fend}-6 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -71,13 +64,13 @@ HLSYM = 2;1.5//21//hw CLRBAR = 1 WIND = REFVEC = -TITLE = 5/-2/~ ? $m_title PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 +TITLE = 5/-2/~ ? ${m_title} PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 l run GLEVEL = 4400:10000 !0 GVCORD = sgma !none -SKIP = 0 +SKIP = 0 SCALE = 0 GDPFUN = sm5s(relh) !pmsl TYPE = c/f !c @@ -88,11 +81,11 @@ FLINE = 0;24;23;22 HILO = 26;2/H#;L#/1018-1070;900-1012//30;30/y HLSYM = 2;1.5//21//hw CLRBAR = 1 -TITLE = 5/-2/~ ? $m_title PMSL, 1000-500MB MEAN RH|~MSLP, 1000-500 MEAN RH!0 +TITLE = 5/-2/~ ? ${m_title} PMSL, 1000-500MB MEAN RH|~MSLP, 1000-500 MEAN RH!0 run GLEVEL = 850 -GVCORD = pres +GVCORD = pres SKIP = 0 !0 !0 !0 !0/1;-1 SCALE = 0 !0 !0 !-1 !0 GDPFUN = sm9s(tmpc)!sm9s(tmpc)!sm9s(tmpc)!sm5s(hght)!kntv(wnd) @@ -105,7 +98,7 @@ FLINE = 24;30;28;29;25;0;17 HILO = HLSYM = WIND = 18//1 -TITLE = 5/-2/~ ? $m_title @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 l run @@ -119,7 +112,7 @@ LINE = 8//2/0 !23//2/0 !20/1/1/1 !6/1/1/1 ! 24/5/1/1 FINT = 70;90 FLINE = 0;23;22 WIND = -TITLE = 5/-2/~ ? $m_title @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 l run @@ -133,8 +126,8 @@ LINE = 7/5/1/2 ! 29/5/1/2 !5/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! -HLSYM = -TITLE = 5/-2/~ ? $m_title @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 +HLSYM = +TITLE = 5/-2/~ ? ${m_title} @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 l run @@ -150,7 +143,7 @@ FLINE = 0;25;24;29;7;15 HILO = HLSYM = WIND = 18//1 -TITLE = 5/-2/~ ? $m_title @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 l run @@ -158,87 +151,88 @@ GDATTIM = F06-F180-6 GLEVEL = 0 SKIP = 0 GVCORD = none -SCALE = 0 +SCALE = 0 GDPFUN = p06i !pmsl TYPE = f !c -CONTUR = 2 +CONTUR = 2 CINT = !4 LINE = !5/1/1/0 FINT = .01;.1;.25;.5;.75;1;1.25;1.5;1.75;2;2.5;3;4;5;6;7;8;9 FLINE = 0;21-30;14-20;5 HILO = !26;2////30;30/y HLSYM = 2;1.5//21//hw -WIND = -TITLE = 5/-2/~ ? $m_title 6-HR TOTAL PCPN, MSLP|~6-HR TOTAL PCPN, MSLP!0 +WIND = +TITLE = 5/-2/~ ? ${m_title} 6-HR TOTAL PCPN, MSLP|~6-HR TOTAL PCPN, MSLP!0 l run -GDPFUN = p06i -TYPE = f +GDPFUN = p06i +TYPE = f HILO = 31;0/x#2////y HLSYM = 1.5 -TITLE = 5/-2/~ ? $m_title 6-HR TOTAL PCPN |~6-HR TOTAL PCPN!0 +TITLE = 5/-2/~ ? ${m_title} 6-HR TOTAL PCPN |~6-HR TOTAL PCPN!0 run -GDATTIM = F12-$fend-06 +GDATTIM = F12-${fend}-06 GDPFUN = p12i !pmsl TYPE = f !c HILO = !26;2////30;30/y HLSYM = 2;1.5//21//hw -TITLE = 5/-2/~ ? $m_title 12-HR TOTAL PCPN, MSLP|~12-HR TOTAL PCPN, MSLP!0 +TITLE = 5/-2/~ ? ${m_title} 12-HR TOTAL PCPN, MSLP|~12-HR TOTAL PCPN, MSLP!0 run -GDPFUN = p12i +GDPFUN = p12i TYPE = f HILO = 31;0/x#2////y HLSYM = 1.5 -TITLE = 5/-2/~ ? $m_title 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN!0 +TITLE = 5/-2/~ ? ${m_title} 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN!0 l run -GDATTIM = F24-$fend-06 +GDATTIM = F24-${fend}-06 GDPFUN = p24i !pmsl TYPE = f !c HILO = !26;2////30;30/y HLSYM = 2;1.5//21//hw -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN, MSLP|~24-HR TOTAL PCPN, MSLP!0 -run +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN, MSLP|~24-HR TOTAL PCPN, MSLP!0 +run -GDPFUN = p24i +GDPFUN = p24i TYPE = f HILO = 31;0/x#2////y HLSYM = 1.5 -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN run exit EOF -export err=$?;err_chk +export err=$? ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l gfs.meta.ak -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - - -if [ $SENDCOM = "YES" ] ; then - mv gfs.meta.ak ${COMOUT}/gfs_${PDY}_${cyc}_ak - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_ak - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_ak - fi - if [ $fhr -eq 216 ] ; then - ${DBNROOT}/bin/dbn_alert MODEL GFS_METAFILE_LAST $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_ak +if (( err != 0 )) || [[ ! -s gfs.meta.ak ]]; then + echo "FATAL ERROR: Failed to create alaska meta file" + exit "${err}" +fi + +mv gfs.meta.ak "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_ak" +export err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: Failed to move meta file to ${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_ak" + exit $(( err + 100 )) +fi + +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_ak" + if [[ ${DBN_ALERT_TYPE} = "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_ak" fi - fi fi diff --git a/gempak/ush/gfs_meta_bwx.sh b/gempak/ush/gfs_meta_bwx.sh index af7f43e3de..eee5f496b7 100755 --- a/gempak/ush/gfs_meta_bwx.sh +++ b/gempak/ush/gfs_meta_bwx.sh @@ -1,55 +1,38 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_bwx_new # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# J. Carr/HPC 12/12/97 Converted from gdplot to gdplot2 -# J. Carr/HPC 08/05/98 Changed map to medium resolution -# J. Carr/HPC 02/02/99 Changed skip to 0 -# J. Carr/HPC 04/12/99 Added gfs out to 84 hrs. -# J. Carr/HPC 6/99 Added a filter to map -# J. Carr/HPC 1/2000 Eliminated 250 mb vort and pw field. Eliminated pv field. Added another ptype field. -# J. Carr/HPC 2/2001 Edited to run on the IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 6/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 7/2001 Submitted. -# J. Carr/PMB 11/2004 Added a ? to all title/TITLE lines. -# M. Klein/HPC 01/2010 Extend to 180 hours -# # Set up Local Variables # -set -x -# -export PS4='BWX:$SECONDS + ' -mkdir -p -m 775 $DATA/BWX -cd $DATA/BWX -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -mdl=gfs -MDL="GFS" +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/BWX" +cd "${DATA}/BWX" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + metatype="bwx" -metaname="${mdl}_${metatype}_${cyc}.meta" +metaname="${RUN}_${PDY}_${cyc}_us_${metatype}" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -#if [ ${cyc} -eq 00 ] ; then -# fend=F126 -#elif [ ${cyc} -eq 12 ] ; then -# fend=F126 -#else -# fend=F126 -#fi +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi fend=F180 -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc<< EOFplt -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOFplt +gdfile = F-${RUN} | ${PDY:2}/${cyc}00 gdattim = F00-${fend}-6 CONTUR = 1 garea = bwus -proj = +proj = map = 1/1/1/yes latlon = 0 text = 1/22/2/hw @@ -68,12 +51,12 @@ cint = 4/200/308 !4/312/324 !4/328 line = 16/1/1 !2/1/3 !32/1/2/1 fint = 328;336;344;352;360;368 fline = 0;24;30;29;15;18;20 -hilo = -hlsym = +hilo = +hlsym = clrbar = 1/V/LL !0 -wind = bk0 !bk0 !bk0 !bk9/0.7/2/112 -refvec = -title = 1/0/~ ? ${MDL} BL THTE & WIND (KTS)|~BL THTE & WIND!0 +wind = bk0 !bk0 !bk0 !bk9/0.7/2/112 +refvec = +title = 1/0/~ ? ${RUN} BL THTE & WIND (KTS)|~BL THTE & WIND!0 l r @@ -90,9 +73,9 @@ hilo = 0 !0 !0 !20/H#;L#/1020-1070;900-1012 hlsym = 0 !0 !0 !1.3;1.3//22;22/3;3/hw clrbar = 1/V/LL !0 wind = bk0 !bk0 !bk0 !bk0 !bk9/0.7/2/112 -refvec = -title = 1/0/~ ? ${MDL} PMSL, BL TEMP, WIND (KTS)|~PMSL, BL TEMP, WIND!0 -r +refvec = +title = 1/0/~ ? ${RUN} PMSL, BL TEMP, WIND (KTS)|~PMSL, BL TEMP, WIND!0 +r GLEVEL = 1000 !1000 !0 !1000 GVCORD = pres !pres !none !pres @@ -110,9 +93,9 @@ HLSYM = !!1.5;1.5//22;22/3;3/hw CLRBAR = 1 WIND = !!!bk9/0.6/2/121/.6 REFVEC = -TITLE = 1/0/~ ? ${MDL} PMSL, 1000 MB TMP (F), FRONTOGENESIS (F)|~@ FRONTOGENESIS!0 +TITLE = 1/0/~ ? ${RUN} PMSL, 1000 MB TMP (F), FRONTOGENESIS (F)|~@ FRONTOGENESIS!0 r - + glevel = 700 !700 !9950 !0 gdpfun = sm5s(kinx)!sm5s(tmpc)!sm5s(dwpf)!sm5s(pmsl) gvcord = pres !pres !sgma !none @@ -127,63 +110,63 @@ hlsym = !!!1.5;1.5//22;22/3;3/hw clrbar = 1/V/LL!0 wind = refvec = -title = 1/0/~ ? ${MDL} K INDEX, 700mb TEMP (>6 C), sfc DWPT & MSLP|~K INDEX!0 +title = 1/0/~ ? ${RUN} K INDEX, 700mb TEMP (>6 C), sfc DWPT & MSLP|~K INDEX!0 r -gdattim = F06-${fend}-06 +gdattim = F06-${fend}-06 glevel = 0!500:1000!500:1000!0 -gvcord = none!pres!pres!none -skip = 0 -scale = 0 !-1 !-1 !0 +gvcord = none!pres!pres!none +skip = 0 +scale = 0 !-1 !-1 !0 gdpfun = p06i!sm5s(ldf(hght) !sm5s(ldf(hght)!sm5s(pmsl) type = f !c !c cint = !3/0/540 !3/543/1000 !4 -line = !4/5/2 !2/5/2 !19//3 +line = !4/5/2 !2/5/2 !19//3 fint = .01;.1;.25;.5;.75;1;1.25;1.5;1.75;2;2.5;3;4;5;6;7;8;9 fline = 0;21-30;14-20;5 hilo = !0!0!19/H#;L#/1020-1070;900-1010 hlsym = !0!0!1.3;1.3//22;22/3;3/hw clrbar = 1 -wind = bk0 +wind = bk0 CONTUR = 2 -refvec = -title = 1/0/~ ? ${MDL} 6-HR TOTAL PCPN, 1000-500mb THK |~6-HR PCPN & 1000-500 THK!0 +refvec = +title = 1/0/~ ? ${RUN} 6-HR TOTAL PCPN, 1000-500mb THK |~6-HR PCPN & 1000-500 THK!0 r gdattim = F00-${fend}-6 GLEVEL = 700!700!700!850!850!9950!9950 GVCORD = PRES!PRES!PRES!PRES!PRES!sgma!sgma -SKIP = 0 -SCALE = 0 +SKIP = 0 +SCALE = 0 GDPFUN = sm5s(relh)!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc) TYPE = c/f ! c -CINT = 50;70;90;95!2;-2 !200;0 !2;-2 !200;0 !2;-2 !-100;0;100 -LINE = 32//1/0 !6/3/2!6/1/2 !2/3/2!2/1/2 !20/3/2!20/1/2 +CINT = 50;70;90;95!2;-2 !200;0 !2;-2 !200;0 !2;-2 !-100;0;100 +LINE = 32//1/0 !6/3/2!6/1/2 !2/3/2!2/1/2 !20/3/2!20/1/2 FINT = 50;70;90 FLINE = 0;24;23;22 -HILO = -HLSYM = +HILO = +HLSYM = CLRBAR = 1 -WIND = +WIND = REFVEC = -TITLE = 1/0/~ ? ${MDL} @ RH, T (BL yel,850 red,700 cyan)|~@ RH, R/S TEMP!0 -r +TITLE = 1/0/~ ? ${RUN} @ RH, T (BL yel,850 red,700 cyan)|~@ RH, R/S TEMP!0 +r GLEVEL = 4400:10000!700:500!700:500!850 !850 !9950!9950 GVCORD = SGMA !PRES !PRES !PRES!PRES!SGMA!SGMA -SCALE = 0!3!3!0 +SCALE = 0!3!3!0 GDPFUN = sm5s(relh)!sm5s(lav(omeg))!sm5s(lav(omeg))!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc) TYPE = c/f ! c -CINT = 50;70;90;95!1/1!-1;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21!2;-2!200;0!2;-2!200;0 -LINE = 32//2/0 !30/10/3!6/1/2 !2/3/2!2/1/2 !20/3/2!20/1/2 +CINT = 50;70;90;95!1/1!-1;-3;-5;-7;-9;-11;-13;-15;-17;-19;-21!2;-2!200;0!2;-2!200;0 +LINE = 32//2/0 !30/10/3!6/1/2 !2/3/2!2/1/2 !20/3/2!20/1/2 FINT = 50;70;90 FLINE = 0;24;23;22 -HILO = -HLSYM = +HILO = +HLSYM = CLRBAR = 1 -WIND = +WIND = REFVEC = -TITLE = 1/0/~ ? ${MDL} @ RH,T (BL yel,850 red),7-500 VV|~@ RH,R/S T,VV!0 +TITLE = 1/0/~ ? ${RUN} @ RH,T (BL yel,850 red),7-500 VV|~@ RH,R/S T,VV!0 r glevel = 0!0!0!0!700:500 !4400:10000 @@ -197,7 +180,7 @@ line = 22/1/2/0!4/1/2/0!7/1/2/0!2/1/2/0!6/1/3!21/1/3 fint = 50;200!50;200!50;200!50;200 fline = 0;23;23!0;25;25!0;30;30!0;15;15 clrbar = -title = 1/0/~ ? ${MDL} PCPN TYPE, 1000-500 RH & 7-500 VV|~PCPN TYPE & VV!0 +title = 1/0/~ ? ${RUN} PCPN TYPE, 1000-500 RH & 7-500 VV|~PCPN TYPE & VV!0 r glevel = 0 !0 !0 !0 @@ -211,7 +194,7 @@ line = 22/1/2/0 !4/1/2/0 !7/1/2/0 !2/1/2/0 fint = 50;200 !50;200 !50;200 !50;200 fline = 0;23;23 !0;25;25 !0;30;30 !0;15;15 clrbar = -title = 1/0/~ ? ${MDL} PCPN TYPE|~PCPN TYPE!0 +title = 1/0/~ ? ${RUN} PCPN TYPE|~PCPN TYPE!0 r GLEVEL = 500 @@ -230,7 +213,7 @@ HLSYM = CLRBAR = 1 WIND = !!!am1/.2/1/121/.4 REFVEC = -TITLE = 1/0/~ ? ${MDL} @ HGHT, TEMP & WIND|~500 HGHT,TMP,WIND!0 +TITLE = 1/0/~ ? ${RUN} @ HGHT, TEMP & WIND|~500 HGHT,TMP,WIND!0 TEXT = 1/21//hw MAP = 11/1/2/yes STNPLT = @@ -266,9 +249,9 @@ FLINE = 0 !0;24;25;30;29;28;27 !11;12;2;10;15;14;0 HILO = 0 !0 !0 !5/H#;L# HLSYM = 0 ! !0 !1.5//21//hw CLRBAR = 0 !0 !1 !0 -WIND = -REFVEC = -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +WIND = +REFVEC = +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 TEXT = 1/21////hw CLEAR = YES l @@ -276,59 +259,59 @@ run GDATTIM = f24 GDPFUN = sm5s(hght)!(sub(hght^f24,hght^f12))!(sub(hght^f24,hght^f12))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l -run +run GDATTIM = f36 GDPFUN = sm5s(hght)!(sub(hght^f36,hght^f24))!(sub(hght^f36,hght^f24))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f48 GDPFUN = sm5s(hght)!(sub(hght^f48,hght^f36))!(sub(hght^f48,hght^f36))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f60 GDPFUN = sm5s(hght)!(sub(hght^f60,hght^f48))!(sub(hght^f60,hght^f48))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f72 GDPFUN = sm5s(hght)!(sub(hght^f72,hght^f60))!(sub(hght^f72,hght^f60))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f84 GDPFUN = sm5s(hght)!(sub(hght^f84,hght^f72))!(sub(hght^f84,hght^f72))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f96 GDPFUN = sm5s(hght)!(sub(hght^f96,hght^f84))!(sub(hght^f96,hght^f84))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f108 GDPFUN = sm5s(hght)!(sub(hght^f108,hght^f96))!(sub(hght^f108,hght^f96))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run GDATTIM = f120 GDPFUN = sm5s(hght)!(sub(hght^f120,hght^f108))!(sub(hght^f120,hght^f108))!sm5s(hght) -TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${MDL} @ MB 12-HR HGT FALLS!0 +TITLE = 1/-1/~ ? ${RUN} @ MB HGT|~500 HGT CHG!1/-2/~ ? ${RUN} @ MB 12-HR HGT FALLS!0 l run -MAP = 4/1/2/yes +MAP = 4/1/2/yes garea = 38.5;-91.3;51.4;-71.4 proj = nps//3;3;0;1 GDATTIM = F00-${fend}-6 @@ -346,31 +329,32 @@ hlsym = 0 clrbar = 1/V/LL !0 wind = bk0 !bk0 !bk0 !bk0 !bk9/0.9/2/112 refvec = -title = 1/0/~ ? ${MDL} 720-940 MB AVG RH,BL1 WND,850 MB OMG,850-2m dT,850 T|~GR LAKE!0 +title = 1/0/~ ? ${RUN} 720-940 MB AVG RH,BL1 WND,850 MB OMG,850-2m dT,850 T|~GR LAKE!0 FILTER = y r exit EOFplt -export err=$?;err_chk +export err=$? + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s "${metaname}" ]]; then + echo "FATAL ERROR: Failed to create bwx meta file" + exit $(( err + 100 )) +fi -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${metaname}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${metaname}" + if [[ ${DBN_ALERT_TYPE} = "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${metaname}" + fi fi exit diff --git a/gempak/ush/gfs_meta_comp.sh b/gempak/ush/gfs_meta_comp.sh index e033d11bd8..5f01de5d48 100755 --- a/gempak/ush/gfs_meta_comp.sh +++ b/gempak/ush/gfs_meta_comp.sh @@ -1,184 +1,161 @@ -#! /bin/sh +#! /usr/bin/env bash # Metafile Script : gfs_meta_comp.sh # -# This is a script which creates a metafile that runs a comparison of 500 MB -# heights and PMSL between the older GFS model run and the newer one. The +# This is a script which creates a metafile that runs a comparison of 500 MB +# heights and PMSL between the older GFS model run and the newer one. The # metafile also generates a comparison between the UKMET older run and the newer # GFS model run. # -# Log : -# J. Carr/HPC 5/12/97 Developed Script -# J. Carr/HPC 8/05/98 Changed map to medium resolution and redefined yesterday code -# J. Carr/HPC 2/01/99 Changed skip to 0 -# J. Carr/HPC 4/12/99 Added gfs model out to 84 hours. -# J. Carr/HPC 6/99 put a filter on map -# J. Carr/HPC 4/2000 Upped the eta comp to 60 hrs. -# J. Carr/HPC 2/2001 Edited to run on the IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 7/2001 Added more comparison times. -# J. Carr/HPC 7/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 7/2001 Submitted. -# J. Carr/HPC 11/2004 Changed all eta/ETA entries to nam/NAM. -# Inserted a ? in all title/TITLE lines. -# # Set up Local Variables # -set -x -# -export PS4='COMP:$SECONDS + ' -rm -Rf $DATA/COMP $DATA/GEMPAK_META_COMP -mkdir -p -m 775 $DATA/COMP $DATA/GEMPAK_META_COMP -cd $DATA/COMP -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -export COMPONENT=${COMPONENT:-atmos} +source "${HOMEgfs}/ush/preamble.sh" + +rm -Rf "${DATA}/COMP" "${DATA}/GEMPAK_META_COMP" +mkdir -p -m 775 "${DATA}/COMP" "${DATA}/GEMPAK_META_COMP" +cd "${DATA}/COMP" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl mdl=gfs MDL=GFS metatype="comp" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -# -#XXW export MODEL=$COMROOT/nawips/prod -# BV export MODEL=$COMROOT/nawips/${envir} -# BV export HPCGFS=${MODEL}/${mdl}.$PDY -export HPCGFS=${COMINgempak}/${mdl}.${PDY}/${cyc}/${COMPONENT}/gempak -export COMIN00=${COMINgempak}/${mdl}.${PDY}/00/${COMPONENT}/gempak -export COMIN06=${COMINgempak}/${mdl}.${PDY}/06/${COMPONENT}/gempak -export COMIN12=${COMINgempak}/${mdl}.${PDY}/12/${COMPONENT}/gempak -export COMIN18=${COMINgempak}/${mdl}.${PDY}/18/${COMPONENT}/gempak -if [ ${cyc} -eq 00 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_COMP -elif [ ${cyc} -eq 06 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_COMP - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_COMP -elif [ ${cyc} -eq 12 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_COMP - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_COMP - cp $COMIN12/gfs_${PDY}12f* $DATA/GEMPAK_META_COMP -elif [ ${cyc} -eq 18 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_COMP - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_COMP - cp $COMIN12/gfs_${PDY}12f* $DATA/GEMPAK_META_COMP - cp $COMIN18/gfs_${PDY}18f* $DATA/GEMPAK_META_COMP -fi -export COMIN=$DATA/GEMPAK_META_COMP -#XXW export HPCNAM=${MODEL}/nam.$PDY -#XXW export HPCNGM=${MODEL}/ngm.$PDY -# BV export HPCNAM=$COMROOT/nawips/prod/nam.$PDY -export HPCNAM=${COMINnam}.$PDY/gempak +export COMIN="gfs.multi" +mkdir "${COMIN}" +for cycle in $(seq -f "%02g" -s ' ' 0 "${STEP_GFS}" "${cyc}"); do + YMD=${PDY} HH=${cycle} GRID="1p00" generate_com gempak_dir:COM_ATMOS_GEMPAK_TMPL + for file_in in "${gempak_dir}/gfs_1p00_${PDY}${cycle}f"*; do + file_out="${COMIN}/$(basename "${file_in}")" + if [[ ! -L "${file_out}" ]]; then + ln -sf "${file_in}" "${file_out}" + fi + done +done + +export HPCNAM="nam.${PDY}" +if [[ ! -L ${HPCNAM} ]]; then + ln -sf "${COMINnam}/nam.${PDY}/gempak" "${HPCNAM}" +fi -# export HPCNGM=$COMROOT/nawips/prod/ngm.$PDY # # DEFINE YESTERDAY -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDY2m1=$(echo $PDYm1 | cut -c 3-) +PDYm1=$(date --utc +%Y%m%d -d "${PDY} - 24 hours") # # DEFINE 2 DAYS AGO -PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) -PDY2m2=$(echo $PDYm2 | cut -c 3-) -# -# DEFINE 3 DAYS AGO -PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) -PDY2m3=$(echo $PDYm3 | cut -c 3-) -# -# THE 1200 UTC CYCLE -# -if [ ${cyc} -eq 12 ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in US NP - do - if [ ${gareas} = US ] ; then +PDYm2=$(date --utc +%Y%m%d -d "${PDY} - 48 hours") + +grid="F-${MDL} | ${PDY:2}/${cyc}00" +for gareas in US NP; do + case ${gareas} in + US) garea="bwus" proj=" " latlon="0" - elif [ ${gareas} = NP ] ; then + ;; + NP) garea="5;-177;45;-72" proj="STR/90.0;-155.0;0.0" latlon="1/1/1/1/10" + ;; + *) + echo "FATAL ERROR: Unknown domain" + exit 100 + esac + + case ${cyc} in + 00 | 12) + offsets=(6 12 24 48) + contours=1 + type_param="CTYPE" + ex="" + ;; + 06 | 18) + offsets=(6 12 18 24) + contours=2 + type_param="TYPE" + ex="ex" + ;; + *) + echo "FATAL ERROR: Invalid cycle ${cyc} passed to ${BASH_SOURCE[0]}" + ;; + esac + + for offset in "${offsets[@]}"; do + init_time=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${offset} hours") + init_PDY=${init_time:0:8} + init_cyc=${init_time:8:2} + + if (( init_time <= SDATE )); then + echo "Skipping generation for ${init_time} because it is before the experiment began" + if (( offset == "${offsets[0]}" )); then + echo "First forecast time, no metafile produced" + exit 0 + fi + continue fi - for runtime in 06 00 12y 122d - do - if [ ${runtime} = "06" ] ; then - cyc2="06" - desc="T" - grid2="F-${MDL} | ${PDY2}/0600" - add="06" - testgfsfhr="120" - elif [ ${runtime} = "00" ] ; then - cyc2="00" - desc="T" - grid2="F-${MDL} | ${PDY2}/0000" - add="12" - testgfsfhr="114" - elif [ ${runtime} = "12y" ] ; then - cyc2="12" - desc="Y" - #XXW export HPCGFS=${MODEL}/gfs.${PDYm1} - # BV export HPCGFS=$COMROOT/nawips/${envir}/gfs.${PDYm1} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - grid2="F-GFSHPC | ${PDY2m1}/1200" - add="24" - testgfsfhr="102" - elif [ ${runtime} = "122d" ] ; then - cyc2="12" - desc="Y2" - #XXW export HPCGFS=${MODEL}/gfs.${PDYm2} - # BV export HPCGFS=$COMROOT/nawips/${esnvir}/gfs.${PDYm2} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm2}/${cyc2}/${COMPONENT}/gempak + # Create symlink in DATA to sidestep gempak path limits + HPCGFS="${RUN}.${init_time}" + if [[ ! -L ${HPCGFS} ]]; then + YMD="${init_PDY}" HH="${init_cyc}" GRID="1p00" generate_com source_dir:COM_ATMOS_GEMPAK_TMPL + ln -sf "${source_dir}" "${HPCGFS}" + fi - grid2="F-GFSHPC | ${PDY2m2}/1200" - add="48" - testgfsfhr="96" - fi + if [[ ${init_PDY} == "${PDY}" ]]; then + desc="T" + elif [[ ${init_PDY} == "${PDYm1}" ]]; then + desc="Y" + elif [[ ${init_PDY} == "${PDYm2}" ]]; then + desc="Y2" + else + echo "FATAL ERROR: Unexpected offset" + exit 100 + fi + + testgfsfhr=$(( 126 - offset )) + + for fhr in $(seq -s ' ' 0 6 126); do + gfsfhr=F$(printf "%02g" "${fhr}") + gfsoldfhr=F$(printf "%02g" $((fhr + offset))) + grid2="F-GFSHPC | ${init_time:2}/${init_cyc}00" gdpfun1="sm5s(hght)!sm5s(hght)" gdpfun2="sm5s(pmsl)!sm5s(pmsl)" line="5/1/3/2/2!6/1/3/2/2" hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z ${desc} CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z ${desc} CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr=F${gfsfhr} - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi + title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${init_cyc}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${init_cyc}Z ${desc} CYAN)" + title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${init_cyc}Z PMSL!6/-3/~ ? ${MDL} PMSL (${init_cyc}Z ${desc} CYAN)" + if (( fhr > testgfsfhr )); then + grid="F-${MDL} | ${PDY:2}/${cyc}00" + grid2=" " + gfsoldfhr=" " + gdpfun1="sm5s(hght)" + gdpfun2="sm5s(pmsl)" + line="5/1/3/2/2" + hilo1="5/H#;L#//5/5;5/y" + hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y" + title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${init_cyc}Z 500 HGT" + title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${init_cyc}Z PMSL" + fi -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL= mepowo.gsf DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes GAREA = ${garea} -PROJ = ${proj} +PROJ = ${proj} LATLON = ${latlon} SKIP = 0 PANEL = 0 -CONTUR = 2 -CLRBAR = -FINT = -FLINE = -REFVEC = +CONTUR = ${contours} +CLRBAR = +FINT = +FLINE = +REFVEC = WIND = 0 GDFILE = ${grid} !${grid2} @@ -188,7 +165,7 @@ GVCORD = PRES GDPFUN = ${gdpfun1} LINE = ${line} SCALE = -1 -CTYPE = c +${type_param} = c CINT = 6 HLSYM = 1.2;1.2//21//hw TEXT = 1/21//hw @@ -211,22 +188,58 @@ HILO = ${hilo2} TITLE = ${title2} run +${ex} EOF -export err=$?;err_chk - done + export err=$?;err_chk done - # COMPARE THE 1200 UTC GFS MODEL TO THE 0000 UTC UKMET MODEL - grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDY}/gempak - grid2="F-UKMETHPC | ${PDY2}/0000" - # for gfsfhr in 00 12 24 36 48 60 84 108 - for gfsfhr in 00 12 24 84 108 - do - ukmetfhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} + done + + if (( 10#${cyc} % 12 ==0 )); then + + # + # There are some differences between 00z and 12z + # The YEST string makes sense (but is inconsistently used) + # The others I'm not sure why they differ. - WCK + # + case ${cyc} in + 00) + type_param="TYPE" + hlsym="1.2;1.2//21//hw" + wind="" + yest=" YEST" + run_cmd="run" + extra_cmd="\nHLSYM = 1.2;1.2//21//hw\nTEXT = s/21//hw" + ;; + 12) + type_param="CTYPE" + hlsym="1;1//21//hw" + wind="0" + yest="" + run_cmd="ru" + extra_cmd="" + ;; + *) + echo "FATAL ERROR: Invalid cycle ${cyc}" + exit 100 + ;; + esac + + # COMPARE THE GFS MODEL TO THE UKMET MODEL 12-HOURS PRIOR + ukmet_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - 12 hours") + ukmet_PDY=${ukmet_date:0:8} + ukmet_cyc=${ukmet_date:8:2} + export HPCUKMET=ukmet.${ukmet_PDY} + if [[ ! -L "${HPCUKMET}" ]]; then + ln -sf "${COMINukmet}/ukmet.${ukmet_PDY}/gempak" "${HPCUKMET}" + fi + grid2="F-UKMETHPC | ${ukmet_PDY:2}/${ukmet_date}" + + for fhr in 0 12 24 84 108; do + gfsfhr=F$(printf "%02g" "${fhr}") + ukmetfhr=F$(printf "%02g" $((fhr + 12))) -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL= mepowo.gsf DEVICE = ${device} MAP = 1/1/1/yes @@ -240,22 +253,22 @@ GDATTIM = ${gfsfhr} SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = +CLRBAR = GLEVEL = 500 GVCORD = PRES GDPFUN = sm5s(hght) LINE = 5/1/3/2 SCALE = -1 -CTYPE = c +${type_param} = c CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw +FINT = +FLINE = +HLSYM = ${hlsym} TEXT = s/21//hw -WIND = 0 -REFVEC = +WIND = ${wind} +REFVEC = HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} 12Z VS UK 00Z 500 HGT!0 +TITLE = 5/-1/~ ? ${MDL} @ HGT (${cyc}Z YELLOW)|~${gareas} ${cyc}Z VS UK ${ukmet_cyc}Z 500 HGT!0 l run @@ -265,23 +278,23 @@ GDATTIM = ${ukmetfhr} GDPFUN = sm5s(hght) LINE = 6/1/3/2 HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? UKMET @ HGT (00Z CYAN)!0 +TITLE = 6/-2/~ ? UKMET @ HGT (${ukmet_cyc}Z${yest} CYAN)!0 l -ru +${run_cmd} CLEAR = yes GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 +CINT = 4${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 5/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} 12Z VS UK 00Z PMSL!0 +TITLE = 5/-1/~ ? ${MDL} PMSL (${cyc}Z YELLOW)|~${gareas} ${cyc}Z VS UK ${ukmet_cyc}Z PMSL!0 l -ru +${run_cmd} CLEAR = no GDFILE = ${grid2} @@ -291,426 +304,55 @@ LINE = 6/1/3/2 HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y TITLE = 6/-2/~ ? UKMET PMSL (00Z CYAN)!0 l -ru +${run_cmd} EOF -export err=$?;err_chk - done - # COMPARE THE 1200 UTC GFS MODEL TO THE 1200 UTC ECMWF FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - #XXW grid2=${MODEL}/ecmwf.${PDYm1}/ecmwf_glob_${PDYm1}12 - grid2=${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12 - for gfsfhr in 00 24 48 72 96 120 - do - ecmwffhr=F$(expr ${gfsfhr} + 24) - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -CTYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw -TEXT = s/21//hw -WIND = 0 -REFVEC = -HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} 12Z VS EC Y 12Z 500 HGT!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${ecmwffhr} -GDPFUN = sm5s(hght) -LINE = 6/1/3/2 -HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? ECMWF @ HGT (12Z YEST CYAN)!0 -l -run + export err=$?;err_chk + done -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 5/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} 12Z VS EC Y 12Z PMSL!0 -l -run + # COMPARE THE GFS MODEL TO THE 12 UTC ECMWF FROM YESTERDAY + offset=$(( (10#${cyc}+12)%24 + 12 )) + ecmwf_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${offset} hours") + ecmwf_PDY=${ecmwf_date:0:8} + # ecmwf_cyc=${ecmwf_date:8:2} + grid2=${COMINecmwf}/ecmwf.${ecmwf_PDY}/gempak/ecmwf_glob_${ecmwf_date} -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${ecmwffhr} -LINE = 6/1/3/2 -HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? ECMWF PMSL (12Z YEST CYAN)!0 -l -run + for fhr in $(seq -s ' ' $(( offset%24 )) 24 120 ); do + gfsfhr=F$(printf "%02g" "${fhr}") + ecmwffhr=F$(printf "%02g" $((fhr + 24))) -EOF -export err=$?;err_chk - done - # COMPARE THE 1200 UTC GFS MODEL TO THE 1200 UTC NAM AND NGM - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2="F-NAMHPC | ${PDY2}/${cyc}00" - # grid2ngm="F-NGMHPC | ${PDY2}/${cyc}00" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - namfhr=F${gfsfhr} - # ngmfhr=F${gfsfhr} - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL= mepowo.gsf DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes GAREA = ${garea} PROJ = ${proj} -LATLON = ${latlon} +LATLON = ${latlon} GDFILE = ${grid} GDATTIM = ${gfsfhr} -SKIP = 0 +SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 3/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw -TEXT = s/21//hw -WIND = -REFVEC = -HILO = 3/H#;L#//5/5;5/y -TITLE = 3/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} ${MDL}/NAM/NGM 500 HGT!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${namfhr} +CLRBAR = +GLEVEL = 500 +GVCORD = PRES GDPFUN = sm5s(hght) LINE = 5/1/3/2 -HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-2/~ ? NAM @ HGT (12Z CYAN)!0 -l -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 3/1/3/2 -HILO = 3/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 3/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} ${MDL}/NAM/NGM PMSL!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${namfhr} -LINE = 5/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-2/~ ? NAM PMSL (12Z CYAN)!0 -l -run - -EOF -export err=$?;err_chk - done - done -fi - -if [ ${cyc} -eq 00 ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in US NP - do - if [ ${gareas} = US ] ; then - garea="bwus" - proj=" " - latlon="0" - elif [ ${gareas} = NP ] ; then - garea="5;-177;45;-72" - proj="STR/90.0;-155.0;0.0" - latlon="1/1/1/1/10" - fi - for runtime in 18 12 00y 002d - do - if [ ${runtime} = "18" ] ; then - cyc2="18" - desc="Y" -# BV export HPCGFS=${MODEL}/gfs.${PDYm1} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1800" - add="06" - testgfsfhr="120" - elif [ ${runtime} = "12" ] ; then - cyc2="12" - desc="Y" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1200" - add="12" - testgfsfhr="114" - elif [ ${runtime} = "00y" ] ; then - cyc2="00" - desc="Y" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/0000" - add="24" - testgfsfhr="102" - elif [ ${runtime} = "002d" ] ; then - cyc2="00" - desc="Y2" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm2}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m2}/0000" - add="48" - testgfsfhr="96" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z ${desc} CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z ${desc} CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr=F${gfsfhr} - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 - -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} SCALE = -1 -CTYPE = c +${type_param} = c CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -EOF -export err=$?;err_chk - done - done - # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC UKMET FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDYm1}/gempak - grid2="F-UKMETHPC | ${PDY2m1}/1200" - # for gfsfhr in 00 12 24 36 48 60 84 108 - for gfsfhr in 00 12 24 84 108 - do - ukmetfhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = -HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HEIGHTS (00Z YELLOW)|~${gareas} 00Z VS UK Y 12Z 500 HGT!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${ukmetfhr} -GDPFUN = sm5s(hght) -LINE = 6/1/3/2 -HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? UKMET @ HEIGHTS (12Z YEST CYAN)!0 -l -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 5/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} 00Z VS UK Y 12Z PMSL!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${ukmetfhr} -LINE = 6/1/3/2 -HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? UKMET PMSL (12Z YEST CYAN)!0 -l -run - -EOF -export err=$?;err_chk - done - # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC ECMWF FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - # JY grid2="$COMROOT/nawips/prod/ecmwf.${PDYm1}/ecmwf_glob_${PDYm1}12" - grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" - for gfsfhr in 12 36 60 84 108 - do - ecmwffhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = +FINT = +FLINE = +HLSYM = ${hlsym} +TEXT = s/21//hw +WIND = ${wind} +REFVEC = HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (00Z YELLOW)|~${gareas} 00Z VS EC Y 12Z 500 HGT!0 +TITLE = 5/-1/~ ? ${MDL} @ HGT (${cyc}Z YELLOW)|~${gareas} ${cyc}Z VS EC Y 12Z 500 HGT!0 l run @@ -729,14 +371,12 @@ GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw +CINT = 4 ${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 5/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} 00Z VS EC Y 12Z PMSL!0 +TITLE = 5/-1/~ ? ${MDL} PMSL (${cyc}Z YELLOW)|~${gareas} ${cyc}Z VS EC Y 12Z PMSL!0 l run @@ -751,18 +391,18 @@ l run EOF -export err=$?;err_chk + + export err=$?;err_chk done - # COMPARE THE 0000 UTC GFS MODEL TO THE 0000 UTC NAM AND NGM - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2="F-NAMHPC | ${PDY2}/${cyc}00" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - namfhr=F${gfsfhr} - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + + # COMPARE THE GFS MODEL TO THE NAM and NGM + grid2="F-NAMHPC | ${PDY:2}/${cyc}00" + for fhr in $(seq -s ' ' 0 6 84); do + gfsfhr=F$(printf "%02g" "${fhr}") + namfhr=F$(printf "%02g" "${fhr}") + + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL= mepowo.gsf DEVICE = ${device} MAP = 1/1/1/yes @@ -773,25 +413,25 @@ LATLON = ${latlon} GDFILE = ${grid} GDATTIM = ${gfsfhr} -SKIP = 0 +SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES +CLRBAR = +GLEVEL = 500 +GVCORD = PRES GDPFUN = sm5s(hght) -LINE = 3/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = +LINE = 3/1/3/2 +SCALE = -1 +TYPE = c +CINT = 6 +FINT = +FLINE = +HLSYM = ${hlsym} +TEXT = s/21//hw +WIND = +REFVEC = HILO = 3/H#;L#//5/5;5/y -TITLE = 3/-1/~ ? ${MDL} @ HGT (00Z YELLOW)|~${gareas} ${MDL}/NAM/NGM 500 HGT!0 +TITLE = 3/-1/~ ? ${MDL} @ HGT (${cyc}Z YELLOW)|~${gareas} ${MDL}/NAM/NGM 500 HGT!0 l run @@ -801,7 +441,7 @@ GDATTIM = ${namfhr} GDPFUN = sm5s(hght) LINE = 5/1/3/2 HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-2/~ ? NAM @ HGT (00Z CYAN)!0 +TITLE = 5/-2/~ ? NAM @ HGT (${cyc}Z CYAN)!0 l run @@ -810,14 +450,12 @@ GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw +CINT = 4${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 3/1/3/2 HILO = 3/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 3/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} ${MDL}/NAM/NGM PMSL!0 +TITLE = 3/-1/~ ? ${MDL} PMSL (${cyc}Z YELLOW)|~${gareas} ${MDL}/NAM/NGM PMSL!0 l run @@ -827,295 +465,40 @@ GDPFUN = sm5s(pmsl) GDATTIM = ${namfhr} LINE = 5/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-2/~ ? NAM PMSL (CYAN)!0 +TITLE = 5/-2/~ ? NAM PMSL (${cyc}Z CYAN)!0 l run EOF -export err=$?;err_chk - done - done -fi - -if [ ${cyc} -eq 18 ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in US NP - do - if [ ${gareas} = US ] ; then - garea="bwus" - proj=" " - latlon="0" - elif [ ${gareas} = NP ] ; then - garea="5;-177;45;-72" - proj="STR/90.0;-155.0;0.0" - latlon="1/1/1/1/10" - fi - for runtime in 12 06 00 18y - do - if [ ${runtime} = "12" ] ; then - cyc2="12" - desc="T" - grid2="F-${MDL} | ${PDY2}/1200" - add="06" - testgfsfhr="120" - elif [ ${runtime} = "06" ] ; then - cyc2="06" - desc="T" - grid2="F-${MDL} | ${PDY2}/0600" - add="12" - testgfsfhr="114" - elif [ ${runtime} = "00" ] ; then - cyc2="00" - desc="T" - grid2="F-${MDL} | ${PDY2}/0000" - add="18" - testgfsfhr="108" - elif [ ${runtime} = "18y" ] ; then - cyc2="18" - desc="Y" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1800" - add="24" - testgfsfhr="102" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z ${desc} CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z ${desc} CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr="F${gfsfhr}" - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 1 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 - -GDFILE = ${grid}!${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} -SCALE = -1 -TYPE = c -CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -ex -EOF -export err=$?;err_chk - done - done - done -fi - -if [ ${cyc} -eq 06 ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in US NP - do - if [ ${gareas} = US ] ; then - garea="bwus" - proj=" " - latlon="0" - elif [ ${gareas} = NP ] ; then - garea="5;-177;45;-72" - proj="STR/90.0;-155.0;0.0" - latlon="1/1/1/1/10" - fi - for runtime in 00 18 12 06 - do - if [ ${runtime} -eq 00 ] ; then - cyc2="00" - desc="T" - grid2="F-${MDL} | ${PDY2}/0000" - add="06" - testgfsfhr="120" - elif [ ${runtime} -eq 18 ] ; then - cyc2="18" - desc="Y" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - grid2="F-GFSHPC | ${PDY2m1}/1800" - add="12" - testgfsfhr="114" - elif [ ${runtime} -eq 12 ] ; then - cyc2="12" - desc="Y" - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1200" - add="18" - testgfsfhr="108" - elif [ ${runtime} -eq 06 ] ; then - cyc2="06" - desc="Y" - export HPCGFS=${COMINgempak}/${NET}/${envir}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/0600" - add="24" - testgfsfhr="102" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z ${desc} CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z ${desc} CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr="F${gfsfhr}" - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -\$MAPFIL= mepowo.gsf -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 1 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 - -GDFILE = ${grid}!${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} -SCALE = -1 -TYPE = c -CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -ex -EOF -export err=$?;err_chk - done + export err=$?;err_chk done - done -fi + fi +done -#################################################### +##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" + if [[ ${DBN_ALERT_TYPE} = "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" fi - if [ $fhr -eq 126 ] ; then - ${DBNROOT}/bin/dbn_alert MODEL GFS_METAFILE_LAST $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} + if (( fhr == 126 )) ; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_METAFILE_LAST "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" fi - fi fi - exit diff --git a/gempak/ush/gfs_meta_crb.sh b/gempak/ush/gfs_meta_crb.sh index 181afab6c1..aeed1a788a 100755 --- a/gempak/ush/gfs_meta_crb.sh +++ b/gempak/ush/gfs_meta_crb.sh @@ -1,50 +1,40 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_crb_new # -# Log : -# J.Carr/HPC 03/13/2001 New script for the Caribbean desk. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 6/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 7/2001 Submitted. -# J. Carr/PMB 11/15/2004 Added a ? to all title/TITLE lines. Changed contur parameter to 2. -# Changed 12-hr increments to 6-hr with regards to 12-hr and 24-hr pcpn. -# # Set Up Local Variables # -set -x -# -export PS4='crb:$SECONDS + ' -mkdir -p -m 775 $DATA/crb -cd $DATA/crb -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/crb" +cd "${DATA}/crb" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl # mdl=gfs MDL=GFS metatype="crb" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo ${PDY} | cut -c3-) + # -# DEFINE YESTERDAY -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDY2m1=$(echo ${PDYm1} | cut -c 3-) +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -#if [ ${cyc} -eq 00 ] ; then -# fend=F126 -#elif [ ${cyc} -eq 12 ] ; then -# fend=F126 -#else -# fend=F126 -# fend=F84 -#fi +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi + +# DEFINE YESTERDAY +PDYm1=$(date --utc +%Y%m%d -d "${PDY} 00 - 24 hours") fend=F126 -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-${MDL} | ${PDY2}/${cyc}00 -GDATTIM = F00-${fend}-06 +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-${MDL} | ${PDY:2}/${cyc}00 +GDATTIM = F00-${fend}-06 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -70,13 +60,13 @@ HILO = !!26;2/H#;L#/1020-1070;900-1012//30;30/y HLSYM = !!2;1.5//21//hw CLRBAR = 1 WIND = ! !bk9/0.7/2/112 -REFVEC = +REFVEC = TITLE = 5/-2/~ ? ${MDL} MSLP, 1000-500mb THICK & 850mb WIND|~MSLP, 1000-500 THKN! ru glevel = 9950 gvcord = sgma -scale = 7 !0 +scale = 7 !0 gdpfun = sm5s(sdiv(mixr@0%none;wnd)!kntv(wnd) type = f !b cint = 0 ! @@ -90,22 +80,22 @@ wind = am0!bk9/0.8/2/112 refvec = title = 1/-2/~ ? ${MDL} BL MOIST CONV & WIND|~BL MOISTURE CONV!0 r - + glevel = 0 !9950 gvcord = none !sgma scale = 0 skip = 0/1 gdpfun = sm5s(thte)!kntv(wnd) type = c/f !b -cint = 4/200/336 -line = 5/1/1 +cint = 4/200/336 +line = 5/1/1 fint = 336;340;344;348;352;356;360;364;368;372;376 fline = 0 ; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 14 -hilo = -hlsym = +hilo = +hlsym = clrbar = 1/V/LL!0 wind = bk0 !bk9/0.9/2/112 -refvec = +refvec = title = 1/-2/~ ? ${MDL} BL THTE & WIND (KTS)|~BL THTE & WIND r @@ -115,9 +105,9 @@ SKIP = 0/1;2 GDPFUN = vor(wnd) !vor(wnd)!kntv(wnd) CINT = 2/-99/-2 !2/2/99 LINE = 29/5/1/2 !7/5/1/2 -HILO = 2;6/X;N/-99--4;4-99 ! -SCALE = 5 !5 -WIND = !!bk6/.8/2/112!0 +HILO = 2;6/X;N/-99--4;4-99 ! +SCALE = 5 !5 +WIND = !!bk6/.8/2/112!0 TITLE = 1//~ ? ${MDL} @ WIND AND REL VORT|~@ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 @@ -134,23 +124,23 @@ CINT = 5/20 LINE = 26//1 FINT = 5/20 FLINE = 0;24;30;29;23;22;14;15;16;17;20;5 -HILO = +HILO = HLSYM = CLRBAR = 1 WIND = bk0!ak7/.3/1/221/.4!ak6/.3/1/221/.4 REFVEC = 0 TITLE = 1/-2/~ ? ${MDL} @ WIND SHEAR (KNTS)|~850MB-300MB WIND SHEAR!0 filter = no - + GLEVEL = 700 GVCORD = pres GDPFUN = vor(wnd) !vor(wnd)!kntv(wnd) CINT = 2/-99/-2 !2/2/99 LINE = 29/5/1/2 !7/5/1/2 -HILO = 2;6/X;N/-99--4;4-99 ! -SCALE = 5 !5 -WIND = !!bk6/.8/2/112!0 +HILO = 2;6/X;N/-99--4;4-99 ! +SCALE = 5 !5 +WIND = !!bk6/.8/2/112!0 TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~@ WIND AND REL VORT!0 FINT = 6;8;10;12;14;16;18;20 FLINE = 0;14-21 @@ -167,8 +157,8 @@ LINE = 7/5/1/2 !29/5/1/2!7/5/1/2 !29/5/1/2 !20/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! !2;6/X;N/10-99;10-99! ! -HLSYM = -WIND = bk0 !bk0 !bk0 !bk0 !bk0 !bk9/0.7/2/112!0 +HLSYM = +WIND = bk0 !bk0 !bk0 !bk0 !bk0 !bk9/0.7/2/112!0 TITLE = 1/-2/~ ? ${MDL} @ HEIGHT AND VORTICITY|~@ HGT AND VORTICITY!0 ru @@ -209,7 +199,7 @@ FLINE = 0;21-30;14-20;5 HILO = 31;0/x#/10-400///y HLSYM = 1.5 CLRBAR = 1/V/LL -WIND = +WIND = REFVEC = TITLE = 1/-2/~ ? ${MDL} 12-HR TOTAL PCPN|~12-HR TOTAL PCPN r @@ -228,7 +218,7 @@ type = c !c/f !b cint = 6/6/18!6/24 line = 22///2!32//2/2 fint = !13;25;38;50 -fline = !0;23;22;21;2 +fline = !0;23;22;21;2 hilo = 0!0 HLSYM = 0!0 clrbar = 0!1 @@ -246,11 +236,11 @@ CINT = 10;20;80;90 !30;40;50;60;70 LINE = 32//2 !23//2 FINT = 10;30;70;90 FLINE = 18;8;0;22;23 -HILO = +HILO = HLSYM = CLRBAR = 1 -WIND = -REFVEC = +WIND = +REFVEC = TITLE = 1/-2/~ ? ${MDL} @ LYR RH|~MEAN RH!0 ru @@ -259,19 +249,29 @@ EOF export err=$?;err_chk -if [ ${cyc} -eq 00 ] ; then - export HPCECMWF=${COMINecmwf}.${PDY}/gempak - export HPCUKMET=${COMINukmet}.${PDYm1}/gempak - grid1="F-${MDL} | ${PDY2}/${cyc}00" - grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" - grid3="F-UKMETHPC | ${PDY2m1}/1200" - for gfsfhr in 12 36 60 84 108 - do - ecmwffhr="F$(expr ${gfsfhr} + 12)" - gfsfhr="F${gfsfhr}" +if [[ ${cyc} == 00 ]] ; then + export HPCECMWF=ecmwf.${PDY} + HPCECMWF_m1=ecmwf.${PDY} + export HPCUKMET=ukmet.${PDYm1} + if [[ ! -L "${HPCECMWF}" ]]; then + ln -sf "${COMINecmwf}ecmwf.${PDY}/gempak" "${HPCECMWF}" + fi + if [[ ! -L "${HPCECMWF_m1}" ]]; then + ln -sf "${COMINecmwf}ecmwf.${PDYm1}/gempak" "${HPCECMWF_m1}" + fi + if [[ ! -L "${HPCUKMET}" ]]; then + ln -sf "${COMINukmet}/ukmet.${PDYm1}/gempak" "${HPCUKMET}" + fi + + grid1="F-${MDL} | ${PDY:2}/${cyc}00" + grid2="${HPCECMWF_m1}/ecmwf_glob_${PDYm1}12" + grid3="F-UKMETHPC | ${PDYm1:2}/1200" + for fhr in $(seq -s ' ' 12 24 108); do + gfsfhr=F$(printf "%02g" "${fhr}") + ecmwffhr=F$(printf "%02g" $((fhr + 12))) -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF10 + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF10 GDFILE = ${grid1} !${grid2} GDATTIM = ${gfsfhr}!${ecmwffhr} DEVICE = ${device} @@ -280,8 +280,8 @@ TEXT = 1/21//hw MAP = 6/1/1/yes CLEAR = yes CLRBAR = 1 -PROJ = mer//3;3;0;1 -GAREA = -25;-130;40;-15 +PROJ = mer//3;3;0;1 +GAREA = -25;-130;40;-15 LATLON = 18//1/1/10 GLEVEL = 500 @@ -327,16 +327,15 @@ r ex EOF10 -export err=$?;err_chk + export err=$?;err_chk done - for gfsfhr in 00 12 24 36 48 60 84 108 132 - do - ukmetfhr="F$(expr ${gfsfhr} + 12)" - gfsfhr=F${gfsfhr} + for fhr in 0 12 24 36 48 60 84 108 132; do + gfsfhr=F$(printf "%02g" "${fhr}") + ukmetfhr=F$(printf "%02g" $((fhr + 12))) -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF25 + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF25 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -390,7 +389,7 @@ r ex EOF25 -export err=$?;err_chk + export err=$?;err_chk done fi @@ -400,20 +399,20 @@ fi # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + fi fi exit diff --git a/gempak/ush/gfs_meta_hi.sh b/gempak/ush/gfs_meta_hi.sh index 5272204b7a..23423381f9 100755 --- a/gempak/ush/gfs_meta_hi.sh +++ b/gempak/ush/gfs_meta_hi.sh @@ -1,43 +1,37 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_hi.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# D.W.Plummer/NCEP 4/97 Changed SKIP for grid2 -# B. Gordon 4/00 Converted for production on the IBM-SP -# and changed gdplot_nc -> gdplot2_nc -# D. Michaud 4/16 Added logic to display different title -# for parallel runs -# B. Gordon 7/02 Converted to run off the GFS due to demise -# of the MRF. -# J. Carr 11/04 Added a ? to all title/TITLE lines. Changed contur parameter to a 2. -# Changed the GDATTIM line to end at F240 every 6 hrs instead of out to -# F384 every 12 hrs. This is to account for 06 and 18 UTC runs. -# M. Klein 4/07 Fix bug in PW display. -# -set -xa -mkdir -p -m 775 $DATA/mrfhi -cd $DATA/mrfhi -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/mrfhi" +cd "${DATA}/mrfhi" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl device="nc | mrfhi.meta" -PDY2=$(echo $PDY | cut -c3-) +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi -if [ "$envir" = "prod" ] ; then +if [[ "${envir}" = "prod" ]] ; then export m_title="GFS" else export m_title="GFSP" fi export pgm=gdplot2_nc;. prep_step -startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-GFS | ${PDY2}/${cyc}00 +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-GFS | ${PDY:2}/${cyc}00 GDATTIM = F000-F192-06; F214-F240-12 -DEVICE = $device +DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw CONTUR = 2 @@ -51,7 +45,7 @@ restore ${HOMEgfs}/gempak/ush/restore/pmsl_thkn.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title MSL PRESSURE, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 +TITLE = 5/-2/~ ? ${m_title} MSL PRESSURE, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 l ru @@ -59,7 +53,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/850mb_hght_tmpc.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGHTS, TEMPERATURE AND WIND (KTS)|~@ HGHT, TMP, WIND!0!0!0 +TITLE = 5/-2/~ ? ${m_title} @ HGHTS, TEMPERATURE AND WIND (KTS)|~@ HGHT, TMP, WIND!0!0!0 l ru @@ -67,7 +61,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/700mb_hght_relh_omeg.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGHTS, REL HUMIDITY AND OMEGA|~@ HGHT, RH AND OMEGA!0 +TITLE = 5/-2/~ ? ${m_title} @ HGHTS, REL HUMIDITY AND OMEGA|~@ HGHT, RH AND OMEGA!0 l ru @@ -75,7 +69,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_absv.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HEIGHTS AND VORTICITY|~@ HGHT AND VORTICITY!0 +TITLE = 5/-2/~ ? ${m_title} @ HEIGHTS AND VORTICITY|~@ HGHT AND VORTICITY!0 l ru @@ -83,7 +77,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/200mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 l ru @@ -91,7 +85,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/250mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 l ru @@ -99,7 +93,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/300mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HEIGHTS, ISOTACHS AND WIND (KTS)|~@ HGHT AND WIND!0 l ru @@ -109,7 +103,7 @@ GVCORD = sgma GDPFUN = sm5s(relh) CINT = 10 LINE = 21/1/2 -TITLE = 5/-2/~ ? $m_title MEAN RELATIVE HUMIDITY|~1000-440 MB MEAN RH!0 +TITLE = 5/-2/~ ? ${m_title} MEAN RELATIVE HUMIDITY|~1000-440 MB MEAN RH!0 SCALE = 0 FINT = 10;70;90 FLINE = 20;0;22;23 @@ -122,7 +116,7 @@ GVCORD = none GDPFUN = sm5s(quo(pwtr,25.4)) !sm5s(quo(pwtr,25.4)) CINT = 0.25/0.25/0.5 !0.25/0.75/6.0 LINE = 22///2 !32//2/2 -TITLE = 5/-2/~ ? $m_title PRECIPITABLE WATER (in)|~PRECIPITABLE WATER!0 +TITLE = 5/-2/~ ? ${m_title} PRECIPITABLE WATER (in)|~PRECIPITABLE WATER!0 SCALE = 0 SKIP = 0 FINT = 0.5;1.0;1.5;2.0 @@ -137,7 +131,7 @@ GVCORD = pres GDPFUN = sm5s(tmpc) !kntv(wnd) CINT = 5 LINE = 2/1/3 -TITLE = 5/-2/~ ? $m_title @ TEMPERATURE|~1000 MB TEMP!0 +TITLE = 5/-2/~ ? ${m_title} @ TEMPERATURE|~1000 MB TEMP!0 SCALE = 0 SKIP = 0 FINT = 0;30 @@ -154,7 +148,7 @@ CLRBAR = 1 TEXT = 1/21//hw GDATTIM = F12-F192-06; F214-F384-12 GDPFUN = (quo(p12m,25.4)) -TITLE = 5/-2/~ ? $m_title 12-HOUR TOTAL PRECIPITATION (IN)|~12-HOURLY TOTAL PCPN +TITLE = 5/-2/~ ? ${m_title} 12-HOUR TOTAL PRECIPITATION (IN)|~12-HOURLY TOTAL PCPN hilo = 31;0/x#2/.01-20//50;50/y!17/H#;L#/1020-1070;900-1012 hlsym = 1.5!1;1//22;22/2;2/hw l @@ -162,13 +156,13 @@ ru GDATTIM = F24-F192-06; F214-F384-12 GDPFUN = (quo(p24m,25.4)) -TITLE = 5/-2/~ ? $m_title 24-HOUR TOTAL PRECIPITATION (IN)|~24-HOURLY TOTAL PCPN +TITLE = 5/-2/~ ? ${m_title} 24-HOUR TOTAL PRECIPITATION (IN)|~24-HOURLY TOTAL PCPN l ru GDATTIM = F180 GDPFUN = (quo(p180m,25.4)) -TITLE = 5/-2/~ ? $m_title 180-HOUR TOTAL PRECIPITATION (IN)|~180-HOURLY TOTAL PCPN +TITLE = 5/-2/~ ? ${m_title} 180-HOUR TOTAL PRECIPITATION (IN)|~180-HOURLY TOTAL PCPN l ru @@ -181,20 +175,20 @@ export err=$?; err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l mrfhi.meta -export err=$?;export pgm="GEMPAK CHECK FILE"; err_chk - -if [ $SENDCOM = "YES" ] ; then - mv mrfhi.meta ${COMOUT}/gfs_${PDY}_${cyc}_hi - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_hi - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +if (( err != 0 )) || [[ ! -s mrfhi.meta ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file mrfhi.meta" + exit $(( err + 100 )) +fi + +mv mrfhi.meta "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_hi" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_hi" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_hi - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_hi" + fi fi # diff --git a/gempak/ush/gfs_meta_hur.sh b/gempak/ush/gfs_meta_hur.sh index 04224ee39b..c85466ca23 100755 --- a/gempak/ush/gfs_meta_hur.sh +++ b/gempak/ush/gfs_meta_hur.sh @@ -1,87 +1,56 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_hur_new # -# Log : -# D.W. Plummer/NCEP 2/97 Add log header -# J.W. Carr/HPC 4/15/97 changed the skip parameter -# J.W. Carr/HPC 4/06/98 Converted from gdplot to gdplot2 -# J.L. Partain/MPC 5/25/98 Chg VOR to AVOR @ 500mb,chg 200 to 250mb to match ETA,NGM -# J.W. Carr/HPC 8/05/98 Changed map to medium resolution -# J.W. Carr/HPC 2/02/99 Changed skip to 0 -# J.W. Carr/HPC 4/12/99 Added 84-hr time step. -# J. Carr/HPC 6/99 Added a filter to map. -# J. Carr/HPC 2/2001 Edited to run on the IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 6/2001 Incorporated the crb metafile into this one. -# J. Carr/HPC 6/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 7/2001 Submitted. -# J. Carr/PMB 11/2004 Added a ? to all title lines. Changed contur to a 2 from a 1. -# # Set up Local Variables # -set -x -# -export PS4='hur:$SECONDS + ' -mkdir -p -m 775 $DATA/hur -cd $DATA/hur -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/hur" +cd "${DATA}/hur" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl mdl=gfs MDL=GFS metatype="hur" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo ${PDY} | cut -c3-) + # -# DEFINE YESTERDAY -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDY2m1=$(echo ${PDYm1} | cut -c 3-) +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -if [ ${cyc} -eq 00 ] ; then - gdat="F000-F126-06" - gdatpcpn06="F006-F126-06" - gdatpcpn12="F012-F126-06" - gdatpcpn24="F024-F126-06" - gdatpcpn48="F048-F126-06" - gdatpcpn60="F060-F126-06" - gdatpcpn72="F072-F126-06" - gdatpcpn84="F084-F126-06" - gdatpcpn96="F096-F126-06" - gdatpcpn120="F120-F126-06" - gdatpcpn126="F126" - run="r" -elif [ ${cyc} -eq 12 ] ; then - gdat="F000-F126-06" - gdatpcpn06="F006-F126-06" - gdatpcpn12="F012-F126-06" - gdatpcpn24="F024-F126-06" - gdatpcpn48="F048-F126-06" - gdatpcpn60="F060-F126-06" - gdatpcpn72="F072-F126-06" - gdatpcpn84="F084-F126-06" - gdatpcpn96="F096-F126-06" - gdatpcpn120="F120-F126-06" - gdatpcpn126="F126" - run="r" -else - gdat="F000-F126-06" - gdatpcpn06="F006-F126-06" - gdatpcpn12="F012-F126-06" - gdatpcpn24="F024-F126-06" - gdatpcpn48="F048-F126-06" - gdatpcpn60="F060-F126-06" - gdatpcpn72="F072-F126-06" - gdatpcpn84="F084-F126-06" - gdatpcpn96="F096-F126-06" - gdatpcpn120="F120-F126-06" - gdatpcpn126="F126" - run="r" +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" fi -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +# +# DEFINE YESTERDAY +PDYm1=$(date --utc +%Y%m%d -d "${PDY} 00 - 24 hours") +# +case ${cyc} in + 00) + gdat="F000-F126-06" + gdatpcpn12="F012-F126-06" + gdatpcpn24="F024-F126-06" + ;; + 12) + gdat="F000-F126-06" + gdatpcpn12="F012-F126-06" + gdatpcpn24="F024-F126-06" + ;; + *) + gdat="F000-F126-06" + gdatpcpn12="F012-F126-06" + gdatpcpn24="F024-F126-06" + ;; +esac + +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOF +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = ${gdat} GAREA = -6;-111;52;-14 PROJ = MER/0.0;-49.5;0.0 @@ -89,7 +58,7 @@ MAP = 1/1/1/yes LATLON = 1//1/1/10 CONTUR = 2 clear = y -device = ${device} +device = ${device} TEXT = 1/22/2/hw PANEL = 0 filter = yes @@ -205,10 +174,10 @@ GDPFUN = vor(wnd) !vor(wnd) !sm5s(pmsl)!kntv(wnd) TYPE = c/f !c !c !b CINT = 2/-99/-2 !2/2/99 !2//1008 LINE = 29/5/1/2 !7/5/1/2 !6/1/1 -HILO = 2;6/X;N/-99--4;4-99! !6/L#/880-1004///1 +HILO = 2;6/X;N/-99--4;4-99! !6/L#/880-1004///1 HLSYM = 1;1//22;22/3;3/hw SCALE = 5 !5 !0 -WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 +WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~@ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 @@ -222,7 +191,7 @@ LINE = 29/5/1/2 !7/5/1/2 !6//1 HILO = 2;6/X;N/-99--4;4-99! !6/L#/880-1004///1 HLSYM = 1;1//22;22/3;3/hw SCALE = 5 !5 !0 -WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 +WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~@ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 @@ -238,12 +207,12 @@ LINE = 29/5/1/2 !7/5/1/2 !20/1/2/1 HILO = 2;6/X;N/-99--4;4-99! ! HLSYM = 1;1//22;22/3;3/hw ! SCALE = 5 !5 !-1 -WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 +WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 TITLE = 1/-2/~ ? ${MDL} @ WIND AND ABS VORT|~@ WIND AND ABS VORT!0 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 TYPE = c/f !c !c !b -r +r GLEVEL = 250 GVCORD = PRES @@ -260,14 +229,14 @@ CINT = 5/20 LINE = 26//1 FINT = 5/25 FLINE = 0;24;30;29;23;22;14;15;16;17;20;5 -HILO = +HILO = HLSYM = CLRBAR = 1 WIND = ak0!ak7/.1/1/221/.2!ak6/.1/1/221/.2 -REFVEC = +REFVEC = TITLE = 1/-2/~ ? ${MDL} @ WIND SHEAR (850=Purple, 300=Cyan) |~850-300MB WIND SHEAR!0 filter = no -r +r glevel = 250 gvcord = pres @@ -295,13 +264,13 @@ type = b !c cint = 0!4 line = 0!20//3 SKIP = 0/2;2 -fint = -fline = +fint = +fline = hilo = 0!26;2/H#;L#/1020-1070;900-1012//30;30/y hlsym = 0!2;1.5//21//hw clrbar = 0 wind = bk10/0.9/1.4/112!bk0 -refvec = +refvec = title = 1/-2/~ ? ${MDL} 850-400mb MLW and MSLP|~850-400mb MLW & MSLP!0 r @@ -333,22 +302,28 @@ exit EOF export err=$?;err_chk -if [ ${cyc} -eq 00 ] ; then - # BV export MODEL=/com/nawips/prod - # JY export HPCECMWF=${MODEL}/ecmwf.${PDY} - # JY export HPCUKMET=${MODEL}/ukmet.${PDY} - export HPCECMWF=${COMINecmwf}.${PDY}/gempak - export HPCUKMET=${COMINukmet}.${PDY}/gempak - grid1="F-${MDL} | ${PDY2}/${cyc}00" - grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" - grid3="F-UKMETHPC | ${PDY2}/${cyc}00" - for gfsfhr in 12 36 60 84 108 - do - ecmwffhr="F$(expr ${gfsfhr} + 12)" - gfsfhr="F${gfsfhr}" - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF +if [[ ${cyc} -eq 00 ]] ; then + export HPCECMWF=ecmwf.${PDY} + HPCECMWF_m1=ecmwf.${PDY} + export HPCUKMET=ukmet.${PDYm1} + if [[ ! -L "${HPCECMWF}" ]]; then + ln -sf "${COMINecmwf}ecmwf.${PDY}/gempak" "${HPCECMWF}" + fi + if [[ ! -L "${HPCECMWF_m1}" ]]; then + Ln -sf "${COMINecmwf}ecmwf.${PDYm1}/gempak" "${HPCECMWF_m1}" + fi + if [[ ! -L "${HPCUKMET}" ]]; then + ln -sf "${COMINukmet}/ukmet.${PDYm1}/gempak" "${HPCUKMET}" + fi + grid1="F-${MDL} | ${PDY:2}/${cyc}00" + grid2="${HPCECMWF_m1}/ecmwf_glob_${PDYm1}12" + grid3="F-UKMETHPC | ${PDY:2}/${cyc}00" + for fhr in $(seq -s ' ' 12 24 108); do + gfsfhr=F$(printf "%02g" "${fhr}") + ecmwffhr=F$(printf "%02g" $((fhr + 12))) + + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF GDFILE = ${grid1} !${grid2} GDATTIM = ${gfsfhr}!${ecmwffhr} DEVICE = ${device} @@ -405,16 +380,15 @@ r ex EOF -export err=$?;err_chk + export err=$?;err_chk done - for gfsfhr in 12 24 36 48 60 72 96 120 - do - ukmetfhr=F${gfsfhr} - gfsfhr=F${gfsfhr} + for gfsfhr in 12 24 36 48 60 72 96 120; do + gfsfhr=F$(printf "%02g" "${fhr}") + ukmetfhr=F$(printf "%02g" $((fhr))) -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -468,7 +442,7 @@ r ex EOF -export err=$?;err_chk + export err=$?;err_chk done fi @@ -477,19 +451,19 @@ fi # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + fi fi exit diff --git a/gempak/ush/gfs_meta_mar_atl.sh b/gempak/ush/gfs_meta_mar_atl.sh index b76a25f247..50a4e0dda6 100755 --- a/gempak/ush/gfs_meta_mar_atl.sh +++ b/gempak/ush/gfs_meta_mar_atl.sh @@ -1,31 +1,36 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_mar_atl.sh # -# Log : -# J. Carr/PMB 12/08/2004 Pushed into production. -# # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/MAR_ATL" +cd "${DATA}/MAR_ATL" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='MAR_ATL:$SECONDS + ' -mkdir -p -m 775 $DATA/MAR_ATL -cd $DATA/MAR_ATL -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" metatype="mar_atl" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt +"${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL=mepowo.gsf+mehsuo.ncp+mereuo.ncp+mefbao.ncp -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = f00-f180-6 GAREA = 16;-100;71;5 PROJ = mer//3;3;0;1 @@ -34,7 +39,7 @@ LATLON = 18/2///10 CONTUR = 0 clear = y -device = $device +device = ${device} GLEVEL = 850:1000 !0 GVCORD = pres !none @@ -69,8 +74,8 @@ fline = 29;30;24;0 ! hilo = 0!0!0!20/H#;L#/1020-1070;900-1012 hlsym = 0!0!0!1;1//22;22/3;3/hw clrbar = 1/V/LL!0 -wind = bk9/0.8/1/112! -refvec = +wind = bk9/0.8/1/112! +refvec = title = 1/-2/~ ? |~ PMSL, BL TEMP, WIND!1//${MDL} MSL PRES,BL TEMP,WIND (KTS)!0 text = 1.2/22/2/hw clear = y @@ -113,9 +118,9 @@ LINE = 7/5/1/2 !20/1/2/1 FINT = 15;21;27;33;39;45;51;57 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 -WIND = +WIND = REFVEC = TITLE = 5//~ ? ${MDL} @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 TEXT = 1/21//hw @@ -146,22 +151,22 @@ CLEAR = yes li r -glevel = 300!300!300 -gvcord = pres!pres!pres +glevel = 300!300!300 +gvcord = pres!pres!pres panel = 0 skip = 1!1!1/3/3!1 scale = 0!0!5!5!-1 GDPFUN = mag(kntv(wnd))//jet!jet!div(wnd)//dvg!dvg!sm5s(hght) TYPE = c!c/f!c/f!c!c cint = 30;50!70;90;110;130;150;170;190!-11;-9;-7;-5;-3!2/3/18!12/720 -line = 26!32//2!19/-2//2!20!1//2 -fint = !70;90;110;130;150;170;190!3;5;7;9;11;13! +line = 26!32//2!19/-2//2!20!1//2 +fint = !70;90;110;130;150;170;190!3;5;7;9;11;13! fline = !0;24;25;29;7;15;14;2!0;23;22;21;17;16;2! hilo = 0!0!0!0!1/H;L/3 hlsym = 0!0!0!0!1.5;1.5//22;22/2;2/hw clrbar = 0!0!1/V/LL!0 -wind = !!am16/0.3//211/0.4! -refvec = 10 +wind = !!am16/0.3//211/0.4! +refvec = 10 title = 1/-2/~ ?|~ @ SPEED & DIVERG!1//${MDL} @ HGHTS, ISOTACHS, & DIVERGENCE!0 text = 1.2/22/2/hw clear = y @@ -262,14 +267,15 @@ export err=$?;err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_atl - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_atl - fi +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_atl" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_atl" fi diff --git a/gempak/ush/gfs_meta_mar_comp.sh b/gempak/ush/gfs_meta_mar_comp.sh index 0c179b6270..9573dd6bd6 100755 --- a/gempak/ush/gfs_meta_mar_comp.sh +++ b/gempak/ush/gfs_meta_mar_comp.sh @@ -1,158 +1,162 @@ -#! /bin/sh -# Metafile Script : gfs_meta_mar_comp.sh +#! /usr/bin/env bash # -# This is a script which creates a metafile that runs a comparison of 500 MB -# heights and PMSL between the older GFS model run and the newer one. The -# metafile also generates a comparison between the UKMET older run and the newer -# GFS model run. +# Metafile Script : gfs_meta_mar_comp.sh # -# Log : -# J. Carr/PMB 12/07/2004 Pushed into production. - # Set up Local Variables # -set -x -# -export PS4='MAR_COMP_F${fend}:$SECONDS + ' -rm -Rf $DATA/GEMPAK_META_MAR -mkdir -p -m 775 $DATA/GEMPAK_META_MAR $DATA/MAR_COMP -cd $DATA/MAR_COMP -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +source "${HOMEgfs}/ush/preamble.sh" + +rm -Rf "${DATA}/GEMPAK_META_MAR" +mkdir -p -m 775 "${DATA}/GEMPAK_META_MAR" "${DATA}/MAR_COMP" + +cd "${DATA}/MAR_COMP" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl -export COMPONENT=${COMPONENT:-atmos} +export COMIN="gfs.multi" +mkdir -p "${COMIN}" +for cycle in $(seq -f "%02g" -s ' ' 0 "${STEP_GFS}" "${cyc}"); do + YMD=${PDY} HH=${cycle} GRID="1p00" generate_com gempak_dir:COM_ATMOS_GEMPAK_TMPL + for file_in in "${gempak_dir}/gfs_1p00_${PDY}${cycle}f"*; do + file_out="${COMIN}/$(basename "${file_in}")" + if [[ ! -L "${file_out}" ]]; then + ln -sf "${file_in}" "${file_out}" + fi + done +done + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export HPCNAM="nam.${PDY}" +if [[ ! -L ${HPCNAM} ]]; then + ln -sf "${COMINnam}/nam.${PDY}/gempak" "${HPCNAM}" +fi mdl=gfs MDL="GFS" metatype="mar_comp" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -# -# BV export MODEL=/com/nawips/prod -#XXW export HPCGFS=${MODEL}/${mdl}.$PDY -# BV export HPCGFS=${COMROOT}/nawips/${envir}/${mdl}.$PDY -export HPCGFS=${COMINgempak}/${mdl}.${PDY}/${cyc}/${COMPONENT}/gempak -export COMIN00=${COMINgempak}/${mdl}.${PDY}/00/${COMPONENT}/gempak -export COMIN06=${COMINgempak}/${mdl}.${PDY}/06/${COMPONENT}/gempak -export COMIN12=${COMINgempak}/${mdl}.${PDY}/12/${COMPONENT}/gempak -export COMIN18=${COMINgempak}/${mdl}.${PDY}/18/${COMPONENT}/gempak -if [ ${cyc} -eq 00 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_MAR -elif [ ${cyc} -eq 06 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_MAR - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_MAR -elif [ ${cyc} -eq 12 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_MAR - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_MAR - cp $COMIN12/gfs_${PDY}12f* $DATA/GEMPAK_META_MAR -elif [ ${cyc} -eq 18 ] ; then - cp $COMIN00/gfs_${PDY}00f* $DATA/GEMPAK_META_MAR - cp $COMIN06/gfs_${PDY}06f* $DATA/GEMPAK_META_MAR - cp $COMIN12/gfs_${PDY}12f* $DATA/GEMPAK_META_MAR - cp $COMIN18/gfs_${PDY}18f* $DATA/GEMPAK_META_MAR -fi -export COMIN=$DATA/GEMPAK_META_MAR - -# export HPCNAM=${COMINnam}.$PDY -export HPCNAM=${COMINnam}.$PDY/gempak -# export HPCNGM=${MODEL}/ngm.$PDY -# -# DEFINE YESTERDAY -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDY2m1=$(echo $PDYm1 | cut -c 3-) -# -# DEFINE 2 DAYS AGO -PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) -PDY2m2=$(echo $PDYm2 | cut -c 3-) -# -# DEFINE 3 DAYS AGO -PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) -PDY2m3=$(echo $PDYm3 | cut -c 3-) -# -# THE 1200 UTC CYCLE -# -if [ ${cyc} -eq 12 ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in NAtl NPac - do - if [ ${gareas} = "NAtl" ] ; then +grid="F-${MDL} | ${PDY:2}/${cyc}00" +for garea in NAtl NPac; do + case ${garea} in + NAtl) garea="natl" proj=" " latlon="18/2/1/1/10" - elif [ ${gareas} = "NPac" ] ; then + ;; + NPac) garea="mpac" proj=" " latlon="18/2/1/1/10" - fi - for runtime in 06 00 - do - if [ ${runtime} = "06" ] ; then - cyc2="06" - grid2="F-${MDL} | ${PDY2}/0600" - add="06" - testgfsfhr="78" - elif [ ${runtime} = "00" ] ; then - cyc2="00" - grid2="F-${MDL} | ${PDY2}/0000" - add="12" - testgfsfhr="114" + ;; + *) + echo "FATAL ERROR: Unknown domain" + exit 100 + esac + + offsets=(6 12) + for offset in "${offsets[@]}"; do + init_time=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${offset} hours") + init_PDY=${init_time:0:8} + init_cyc=${init_time:8:2} + + if (( init_time <= SDATE )); then + echo "Skipping generation for ${init_time} because it is before the experiment began" + if (( offset == "${offsets[0]}" )); then + echo "First forecast time, no metafile produced" + exit 0 fi + continue + fi + + # Create symlink in DATA to sidestep gempak path limits + HPCGFS="${RUN}.${init_time}" + if [[ ! -L ${HPCGFS} ]]; then + YMD="${init_PDY}" HH="${init_cyc}" GRID="1p00" generate_com source_dir:COM_ATMOS_GEMPAK_TMPL + ln -sf "${source_dir}" "${HPCGFS}" + fi + + case ${cyc} in + 00 | 12) + contours=1 + type_param="CTYPE" + ex="" + ;; + 06 | 18) + contours=2 + type_param="TYPE" + ex="ex" + ;; + *) + echo "FATAL ERROR: Invalid cycle ${cyc} passed to ${BASH_SOURCE[0]}" + esac + + case ${cyc}_${init_cyc} in + 00_*) testgfsfhr=114;; + 06_00) testgfsfhr=84;; + 06_18) testgfsfhr=72;; + 12_00) testgfsfhr=114;; + 12_06) testgfsfhr=78;; + 18_06) testgfsfhr=72;; + 18_12) testgfsfhr=84;; + *) + echo "FATAL ERROR: Undefined pairing of cycles" + exit 200 + ;; + esac + + for fhr in $(seq -s ' ' 0 6 126); do + gfsfhr=F$(printf "%02g" "${fhr}") + gfsoldfhr=F$(printf "%02g" $((fhr + offset))) + grid2="F-GFSHPC | ${init_time:2}/${init_cyc}00" gdpfun1="sm5s(hght)!sm5s(hght)" gdpfun2="sm5s(pmsl)!sm5s(pmsl)" line="5/1/3/2/2!6/1/3/2/2" hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr=F${gfsfhr} - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${garea} ${cyc}Z vs ${init_cyc}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${init_cyc}Z CYAN)" + title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${garea} ${cyc}Z vs ${init_cyc}Z PMSL!6/-3/~ ? ${MDL} PMSL (${init_cyc}Z CYAN)" + if (( fhr > testgfsfhr )); then + grid2=" " + gfsoldfhr=" " + gdpfun1="sm5s(hght)" + gdpfun2="sm5s(pmsl)" + line="5/1/3/2/2" + hilo1="5/H#;L#//5/5;5/y" + hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y" + title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${garea} ${cyc}Z vs ${init_cyc}Z 500 HGT" + title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${garea} ${cyc}Z vs ${init_cyc}Z PMSL" + fi + + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes GAREA = ${garea} -PROJ = ${proj} +PROJ = ${proj} LATLON = ${latlon} -SKIP = 0 +SKIP = 0 PANEL = 0 -CONTUR = 2 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 +CONTUR = ${contours} +CLRBAR = +FINT = +FLINE = +REFVEC = +WIND = 0 GDFILE = ${grid} !${grid2} GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 +GLEVEL = 500 GVCORD = PRES GDPFUN = ${gdpfun1} LINE = ${line} SCALE = -1 -CTYPE = c +${type_param} = c CINT = 6 HLSYM = 1.2;1.2//21//hw TEXT = 1/21//hw @@ -175,100 +179,59 @@ HILO = ${hilo2} TITLE = ${title2} run +${ex} EOF -export err=$?;err_chk - done + export err=$?;err_chk done - # COMPARE THE 1200 UTC GFS MODEL TO THE 0000 UTC UKMET MODEL - grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDY}/gempak - grid2="F-UKMETHPC | ${PDY2}/0000" - # for gfsfhr in 00 12 24 36 48 60 84 108 - for gfsfhr in 00 12 24 84 108 - do - ukmetfhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} - -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -CTYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw -TEXT = s/21//hw -WIND = 0 -REFVEC = -HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} 12Z vs UKM 00Z 500 HGT!0 -l -run + done -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${ukmetfhr} -GDPFUN = sm5s(hght) -LINE = 6/1/3/2 -HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? UKMET @ HGT (00Z CYAN)!0 -l -ru + if (( 10#${cyc} % 12 ==0 )); then + + # + # There are some differences between 00z and 12z + # The YEST string makes sense (but is inconsistently used) + # The others I'm not sure why they differ. - WCK + # + case ${cyc} in + 00) + type_param="TYPE" + hlsym="1.2;1.2//21//hw" + wind="" + yest=" YEST" + run_cmd="run" + extra_cmd="\nHLSYM = 1.2;1.2//21//hw\nTEXT = s/21//hw" + ;; + 12) + type_param="CTYPE" + hlsym="1;1//21//hw" + wind="0" + yest="" + run_cmd="ru" + extra_cmd="" + ;; + *) + echo "FATAL ERROR: Invalid cycle {cyc} in ${BASH_SOURCE[0]}" + exit 100 + ;; + esac + + # COMPARE THE GFS MODEL TO THE UKMET MODEL 12-HOURS PRIOR + ukmet_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - 12 hours") + ukmet_PDY=${ukmet_date:0:8} + ukmet_cyc=${ukmet_date:8:2} + + export HPCUKMET="ukmet.${ukmet_PDY}" + if [[ ! -L "${HPCUKMET}" ]]; then + ln -sf "${COMINukmet}/ukmet.${ukmet_PDY}/gempak" "${HPCUKMET}" + fi + grid2="F-UKMETHPC | ${ukmet_PDY:2}/${ukmet_date}" -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 5/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} 12Z vs UKM 00Z PMSL!0 -l -ru + for fhr in 00 12 24 84 108; do + gfsfhr=F$(printf "%02g" "${fhr}") + ukmetfhr=F$(printf "%02g" $((fhr + 12))) -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${ukmetfhr} -LINE = 6/1/3/2 -HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? UKMET PMSL (00Z CYAN)!0 -l -ru - -EOF -export err=$?;err_chk - done - # COMPARE THE 1200 UTC GFS MODEL TO THE 1200 UTC ECMWF FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12 - for gfsfhr in 00 24 48 72 96 120 - do - ecmwffhr=F$(expr ${gfsfhr} + 24) - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes @@ -278,271 +241,85 @@ LATLON = ${latlon} GDFILE = ${grid} GDATTIM = ${gfsfhr} -SKIP = 0 +SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES +CLRBAR = +GLEVEL = 500 +GVCORD = PRES GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -CTYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw -TEXT = s/21//hw -WIND = 0 -REFVEC = +LINE = 5/1/3/2 +SCALE = -1 +${type_param} = c +CINT = 6 +FINT = +FLINE = +HLSYM = ${hlsym} +TEXT = s/21//hw +WIND = 0 +REFVEC = HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} 12Z vs ECM yest 12Z 500 HGT!0 +TITLE = 5/-1/~ ? ${MDL} @ HGT (${cyc}Z YELLOW)|~${garea} ${cyc}Z vs UKM ${ukmet_cyc}Z 500 HGT!0 l run CLEAR = no GDFILE = ${grid2} -GDATTIM = ${ecmwffhr} +GDATTIM = ${ukmetfhr} GDPFUN = sm5s(hght) LINE = 6/1/3/2 HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? ECMWF @ HGT (12Z YEST CYAN)!0 +TITLE = 6/-2/~ ? UKMET @ HGT (${ukmet_cyc}Z${yest} CYAN)!0 l -run +${run_cmd} CLEAR = yes GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 +CINT = 4${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 5/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} 12Z vs ECM yest 12Z PMSL!0 +TITLE = 5/-1/~ ? ${MDL} PMSL (${cyc}Z YELLOW)|~${garea} ${cyc}Z vs UKM ${ukmet_cyc}Z PMSL!0 l -run +${run_cmd} CLEAR = no GDFILE = ${grid2} GDPFUN = sm5s(pmsl) -GDATTIM = ${ecmwffhr} +GDATTIM = ${ukmetfhr} LINE = 6/1/3/2 HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? ECMWF PMSL (12Z YEST CYAN)!0 +TITLE = 6/-2/~ ? UKMET PMSL (${ukmet_cyc}Z CYAN)!0 l -run +${run_cmd} EOF -export err=$?;err_chk + export err=$?;err_chk done - # COMPARE THE 1200 UTC GFS MODEL TO THE 1200 UTC NAM AND NGM - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2="F-NAMHPC | ${PDY2}/${cyc}00" - # grid2ngm="F-NGMHPC | ${PDY2}/${cyc}00" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - namfhr=F${gfsfhr} - # ngmfhr=F${gfsfhr} - gfsfhr=F${gfsfhr} - -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} - -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1;1//21//hw -TEXT = s/21//hw -WIND = -REFVEC = -HILO = 3/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${gareas} ${MDL}/NAM/NGM 500 HGT!0 -l -run -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${namfhr} -GDPFUN = sm5s(hght) -LINE = 6/1/3/2 -HILO = 5/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? NAM @ HGT (12Z CYAN)!0 -l -run + # COMPARE THE GFS MODEL TO THE 12 UTC ECMWF FROM YESTERDAY + offset=$(( (10#${cyc}+12)%24 + 12 )) + ecmwf_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${offset} hours") + ecmwf_PDY=${ecmwf_date:0:8} + # ecmwf_cyc=${ecmwf_date:8:2} -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 5/1/3/2 -HILO = 3/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${gareas} ${MDL}/NAM/NGM PMSL!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${namfhr} -LINE = 6/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? NAM PMSL (12Z CYAN)!0 -l -run - -EOF -export err=$?;err_chk - done - done -fi -if [ ${cyc} = "00" ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in NAtl NPac - do - if [ ${gareas} = "NAtl" ] ; then - garea="natl" - proj=" " - latlon="0" - elif [ ${gareas} = "NPac" ] ; then - garea="mpac" - proj=" " - latlon="18/2/1/1/10" + HPCECMWF=ecmwf.${PDY} + if [[ ! -L "${HPCECMWF}" ]]; then + ln -sf "${COMINecmwf}/ecmwf.${ecmwf_PDY}/gempak" "${HPCECMWF}" fi - for runtime in 18 12 - do - if [ ${runtime} = "18" ] ; then - cyc2="18" - #XXW export HPCGFS=${MODEL}/${mdl}.${PDYm1} - # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${PDYm1} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1800" - add="06" - testgfsfhr="114" - elif [ ${runtime} = "12" ] ; then - cyc2="12" - #XXW export HPCGFS=${MODEL}/${mdl}.${PDYm1} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - - grid2="F-GFSHPC | ${PDY2m1}/1200" - add="12" - testgfsfhr="114" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr=F${gfsfhr} - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 + grid2="${HPCECMWF}/ecmwf_glob_${ecmwf_date}" -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} -SCALE = -1 -CTYPE = c -CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -EOF -export err=$?;err_chk + for fhr in $(seq -s ' ' $(( offset%24 )) 24 120 ); do + gfsfhr=F$(printf "%02g" "${fhr}") + ecmwffhr=F$(printf "%02g" $((fhr + 24))) - done - done - # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC UKMET FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDYm1}/gempak - grid2="F-UKMETHPC | ${PDY2m1}/1200" - # for gfsfhr in 00 12 24 36 48 60 84 108 - for gfsfhr in 00 12 24 84 108 - do - ukmetfhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes @@ -551,103 +328,26 @@ PROJ = ${proj} LATLON = ${latlon} GDFILE = ${grid} GDATTIM = ${gfsfhr} -SKIP = 0 -PANEL = 0 -CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = -HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HEIGHTS (00Z YELLOW)|~${gareas} 00Z vs UKM 12Z 500 HGT!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDATTIM = ${ukmetfhr} -GDPFUN = sm5s(hght) -LINE = 6/1/3/2 -HILO = 6/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? UKMET @ HEIGHTS (12Z YEST CYAN)!0 -l -run -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -LINE = 5/1/3/2 -HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} 00Z vs UKM 12Z PMSL!0 -l -run - -CLEAR = no -GDFILE = ${grid2} -GDPFUN = sm5s(pmsl) -GDATTIM = ${ukmetfhr} -LINE = 6/1/3/2 -HILO = 6/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? UKMET PMSL (12Z YEST CYAN)!0 -l -run - -EOF -export err=$?;err_chk - done - # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC ECMWF FROM YESTERDAY - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" - for gfsfhr in 12 36 60 84 108 - do - ecmwffhr=F$(expr ${gfsfhr} + 12) - gfsfhr=F${gfsfhr} - -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -GDFILE = ${grid} -GDATTIM = ${gfsfhr} -SKIP = 0 +SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES +CLRBAR = +GLEVEL = 500 +GVCORD = PRES GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = +LINE = 5/1/3/2 +SCALE = -1 +${type_param} = c +CINT = 6 +FINT = +FLINE = +HLSYM = ${hlsym} +TEXT = s/21//hw +WIND = ${wind} +REFVEC = HILO = 5/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (00Z YELLOW)|~${gareas} 00Z vs ECM 12Z 500 HGT!0 +TITLE = 5/-1/~ ? ${MDL} @ HGT (12Z YELLOW)|~${garea} 12Z vs ECM yest 12Z 500 HGT!0 l run @@ -666,14 +366,12 @@ GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw +CINT = 4${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 5/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} 00Z vs ECM 12Z PMSL!0 +TITLE = 5/-1/~ ? ${MDL} PMSL (12Z YELLOW)|~${garea} 12Z vs ECM yest 12Z PMSL!0 l run @@ -688,18 +386,16 @@ l run EOF -export err=$?;err_chk + export err=$?;err_chk done - # COMPARE THE 0000 UTC GFS MODEL TO THE 0000 UTC NAM AND NGM - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2="F-NAMHPC | ${PDY2}/${cyc}00" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - namfhr=F${gfsfhr} - gfsfhr=F${gfsfhr} - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF + + # COMPARE THE GFS MODEL TO THE NAM and NGM + grid2="F-NAMHPC | ${PDY:2}/${cyc}00" + for fhr in $(seq -s ' ' 0 6 84); do + gfsfhr=F$(printf "%02g" "${fhr}") + namfhr=F$(printf "%02g" "${fhr}") + + "${GEMEXE}/gdplot2_nc" << EOF DEVICE = ${device} MAP = 1/1/1/yes CLEAR = yes @@ -709,25 +405,25 @@ LATLON = ${latlon} GDFILE = ${grid} GDATTIM = ${gfsfhr} -SKIP = 0 +SKIP = 0 PANEL = 0 CONTUR = 2 -CLRBAR = -GLEVEL = 500 -GVCORD = PRES +CLRBAR = +GLEVEL = 500 +GVCORD = PRES GDPFUN = sm5s(hght) -LINE = 5/1/3/2 -SCALE = -1 -TYPE = c -CINT = 6 -FINT = -FLINE = -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw -WIND = -REFVEC = +LINE = 5/1/3/2 +SCALE = -1 +TYPE = c +CINT = 6 +FINT = +FLINE = +HLSYM = ${hlsym} +TEXT = s/21//hw +WIND = +REFVEC = HILO = 3/H#;L#//5/5;5/y -TITLE = 5/-1/~ ? ${MDL} @ HGT (00Z YELLOW)|~${gareas} ${MDL}/NAM/NGM 500 HGT!0 +TITLE = 5/-1/~ ? ${MDL} @ HGT (${cyc}Z YELLOW)|~${garea} ${MDL}/NAM/NGM 500 HGT!0 l run @@ -737,7 +433,7 @@ GDATTIM = ${namfhr} GDPFUN = sm5s(hght) LINE = 6/1/3/2 HILO = 5/H#;L#//5/5;5/y -TITLE = 6/-2/~ ? NAM @ HGT (00Z CYAN)!0 +TITLE = 6/-2/~ ? NAM @ HGT (${cyc}Z CYAN)!0 l run @@ -746,14 +442,12 @@ GLEVEL = 0 GVCORD = none SCALE = 0 GDPFUN = sm5s(pmsl) -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = s/21//hw +CINT = 4${extra_cmd} GDFILE = ${grid} GDATTIM = ${gfsfhr} LINE = 5/1/3/2 HILO = 3/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 5/-1/~ ? ${MDL} PMSL (00Z YELLOW) |~${gareas} ${MDL}/NAM/NGM PMSL!0 +TITLE = 5/-1/~ ? ${MDL} PMSL (${cyc}Z YELLOW)|~${garea} ${MDL}/NAM/NGM PMSL!0 l run @@ -763,252 +457,30 @@ GDPFUN = sm5s(pmsl) GDATTIM = ${namfhr} LINE = 6/1/3/2 HILO = 5/H#;L#/1018-1060;900-1012/5/10;10/y -TITLE = 6/-2/~ ? NAM PMSL (CYAN)!0 +TITLE = 6/-2/~ ? NAM PMSL (${cyc}Z CYAN)!0 l run EOF -export err=$?;err_chk - + export err=$?;err_chk done - done -fi + fi +done -if [ ${cyc} -eq "18" ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in NAtl NPac - do - if [ ${gareas} = "NAtl" ] ; then - garea="natl" - proj=" " - latlon="0" - elif [ ${gareas} = "NPac" ] ; then - garea="mpac" - proj=" " - latlon="18/2/1/1/10" - fi - for runtime in 12 06 - do - if [ ${runtime} = "12" ] ; then - cyc2="12" - grid2="F-${MDL} | ${PDY2}/1200" - add="06" - testgfsfhr="84" - elif [ ${runtime} = "06" ] ; then - cyc2="06" - grid2="F-${MDL} | ${PDY2}/0600" - add="12" - testgfsfhr="72" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr="F${gfsfhr}" - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi -export pgm=gdplot2_nc;. prep_step; startmsg - -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 1 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 - -GDFILE = ${grid}!${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} -SCALE = -1 -TYPE = c -CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -ex -EOF -export err=$?;err_chk - done - done - done -fi - -if [ ${cyc} -eq "06" ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - for gareas in NAtl NPac - do - if [ ${gareas} = "NAtl" ] ; then - garea="natl" - proj=" " - latlon="0" - elif [ ${gareas} = "NPac" ] ; then - garea="mpac" - proj=" " - latlon="18/2/1/1/10" - fi - for runtime in 00 18 - do - if [ ${runtime} = "00" ] ; then - cyc2="00" - grid2="F-${MDL} | ${PDY2}/0000" - add="06" - testgfsfhr="84" - elif [ ${runtime} = "18" ] ; then - cyc2="18" - #XXW export HPCGFS=${MODEL}/${mdl}.${PDYm1} - export HPCGFS=${COMINgempak}/${mdl}.${PDYm1}/${cyc2}/${COMPONENT}/gempak - grid2="F-GFSHPC | ${PDY2m1}/1800" - add="12" - testgfsfhr="72" - fi - gdpfun1="sm5s(hght)!sm5s(hght)" - gdpfun2="sm5s(pmsl)!sm5s(pmsl)" - line="5/1/3/2/2!6/1/3/2/2" - hilo1="5/H#;L#//5/5;5/y!6/H#;L#//5/5;5/y" - hilo2="5/H#;L#/1018-1060;900-1012/5/10;10/y!6/H#;L#/1018-1060;900-1012/5/10;10/y" - hilo3="5/H#;L#//5/5;5/y" - hilo4="5/H#;L#/1018-1060;900-1012/5/10;10/y" - title1="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT!6/-3/~ ? ${MDL} @ HGT (${cyc2}Z CYAN)" - title2="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL!6/-3/~ ? ${MDL} PMSL (${cyc2}Z CYAN)" - title3="5/-2/~ ? ^ ${MDL} @ HGT (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z 500 HGT" - title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" - for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 - do - gfsoldfhr=F$(expr ${gfsfhr} + ${add}) - gfsfhr2=$(echo ${gfsfhr}) - gfsfhr="F${gfsfhr}" - if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then - grid="F-${MDL} | ${PDY2}/${cyc}00" - grid2=" " - gfsoldfhr=" " - gdpfun1="sm5s(hght)" - gdpfun2="sm5s(pmsl)" - line="5/1/3/2/2" - hilo1=$(echo ${hilo3}) - hilo2=$(echo ${hilo4}) - title1=$(echo ${title3}) - title2=$(echo ${title4}) - fi -export pgm=gdplot2_nc;. prep_step; startmsg - -$GEMEXE/gdplot2_nc << EOF -DEVICE = ${device} -MAP = 1/1/1/yes -CLEAR = yes -GAREA = ${garea} -PROJ = ${proj} -LATLON = ${latlon} -SKIP = 0 -PANEL = 0 -CONTUR = 1 -CLRBAR = -FINT = -FLINE = -REFVEC = -WIND = 0 - -GDFILE = ${grid}!${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -GLEVEL = 500 -GVCORD = PRES -GDPFUN = ${gdpfun1} -LINE = ${line} -SCALE = -1 -TYPE = c -CINT = 6 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -HILO = ${hilo1} -TITLE = ${title1} -run - -CLEAR = yes -GLEVEL = 0 -GVCORD = none -SCALE = 0 -GDPFUN = ${gdpfun2} -CINT = 4 -HLSYM = 1.2;1.2//21//hw -TEXT = 1/21//hw -GDFILE = ${grid} !${grid2} -GDATTIM = ${gfsfhr}!${gfsoldfhr} -LINE = ${line} -HILO = ${hilo2} -TITLE = ${title2} -run - -ex -EOF -export err=$?;err_chk - - done - done - done -fi - -#################################################### +##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l ${metaname} -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_comp - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_comp - fi +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_comp" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert MODEL" "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_comp" fi exit diff --git a/gempak/ush/gfs_meta_mar_pac.sh b/gempak/ush/gfs_meta_mar_pac.sh index 06165e837c..c53a208d55 100755 --- a/gempak/ush/gfs_meta_mar_pac.sh +++ b/gempak/ush/gfs_meta_mar_pac.sh @@ -1,31 +1,36 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_mar_pac.sh # -# Log : -# J. Carr/PMB 12/08/2004 Pushed into production - # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/MAR_PAC" +cd "${DATA}/MAR_PAC" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='MAR_PAC:$SECONDS + ' -mkdir -p -m 775 $DATA/MAR_PAC -cd $DATA/MAR_PAC -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" metatype="mar_pac" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt +"${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL=mepowo.gsf+mehsuo.ncp+mereuo.ncp+himouo.nws -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = f00-f180-6 GAREA = 4;120;69;-105 PROJ = mer//3;3;0;1 @@ -34,7 +39,7 @@ LATLON = 18/2///10 CONTUR = 1 clear = y -device = $device +device = ${device} GLEVEL = 850:1000 !0 GVCORD = pres !none @@ -69,8 +74,8 @@ fline = 29;30;24;0 ! hilo = 0!0!0!20/H#;L#/1020-1070;900-1012 hlsym = 0!0!0!1;1//22;22/3;3/hw clrbar = 1/V/LL!0 -wind = bk9/0.8/1/112! -refvec = +wind = bk9/0.8/1/112! +refvec = title = 1/-2/~ ?|~ PMSL, BL TEMP, WIND!1//${MDL} MSL PRES,BL TEMP,WIND (KTS)!0 text = 1.2/22/2/hw clear = y @@ -113,9 +118,9 @@ LINE = 7/5/1/2 !20/1/2/1 FINT = 15;21;27;33;39;45;51;57 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 -WIND = +WIND = REFVEC = TITLE = 5//~ ? ${MDL} @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 TEXT = 1/21//hw @@ -146,22 +151,22 @@ CLEAR = yes li r -glevel = 300!300!300 -gvcord = pres!pres!pres +glevel = 300!300!300 +gvcord = pres!pres!pres panel = 0 skip = 1!1!1/3/3!1 scale = 0!0!5!5!-1 GDPFUN = mag(kntv(wnd))//jet!jet!div(wnd)//dvg!dvg!sm5s(hght) TYPE = c!c/f!c/f!c!c cint = 30;50!70;90;110;130;150;170;190!-11;-9;-7;-5;-3!2/3/18!12/720 -line = 26!32//2!19/-2//2!20!1//2 -fint = !70;90;110;130;150;170;190!3;5;7;9;11;13! +line = 26!32//2!19/-2//2!20!1//2 +fint = !70;90;110;130;150;170;190!3;5;7;9;11;13! fline = !0;24;25;29;7;15;14;2!0;23;22;21;17;16;2! hilo = 0!0!0!0!1/H;L/3 hlsym = 0!0!0!0!1.5;1.5//22;22/2;2/hw clrbar = 0!0!1/V/LL!0 -wind = !!am16/0.3//211/0.4! -refvec = 10 +wind = !!am16/0.3//211/0.4! +refvec = 10 title = 1/-2/~ ?|~ @ SPEED & DIVERG!1//${MDL} @ HGHTS, ISOTACHS, & DIVERGENCE!0 text = 1.2/22/2/hw clear = y @@ -255,19 +260,21 @@ exit EOFplt export err=$?;err_chk + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_pac - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_pac - fi +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_pac" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_pac" fi exit diff --git a/gempak/ush/gfs_meta_mar_ql.sh b/gempak/ush/gfs_meta_mar_ql.sh index 71ee9d2fee..6d653bb550 100755 --- a/gempak/ush/gfs_meta_mar_ql.sh +++ b/gempak/ush/gfs_meta_mar_ql.sh @@ -1,39 +1,43 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_mar_ql.sh # -# Log : -# J. Carr/PMB 12/07/2004 Pushed into production -# # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/MAR_QL" +cd "${DATA}/MAR_QL" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='MAR_QL_F${fend}:$SECONDS + ' -mkdir -p -m 775 $DATA/MAR_QL -cd $DATA/MAR_QL -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" metatype="mar_ql" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -# fend=180 -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt +"${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL=mepowo.gsf+mehsuo.ncp+mereuo.ncp+mefbao.ncp -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = f00-f${fend}-6 GAREA = 15;-100;70;5 PROJ = mer//3;3;0;1 MAP = 31 + 6 + 3 + 5 LATLON = 18/2/1/1/10 CONTUR = 0 -device = $device +device = ${device} GLEVEL = 9950!0 GVCORD = sgma!none PANEL = 0 @@ -83,7 +87,7 @@ ru GLEVEL = 500 GVCORD = PRES -SKIP = 0 +SKIP = 0 SCALE = 5 !-1 GDPFUN = (avor(wnd)) !hght TYPE = c/f !c @@ -92,7 +96,7 @@ LINE = 7/5/1/2 !20/1/2/1 FINT = 15;21;27;33;39;45;51;57 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = WIND = 0 TITLE = 5//~ ? GFS @ HEIGHTS AND VORTICITY|~WATL @ HGHT AND VORT!0 li @@ -148,7 +152,7 @@ ru GLEVEL = 500 GVCORD = PRES -SKIP = 0 +SKIP = 0 SCALE = 5 !-1 GDPFUN = (avor(wnd)) !hght TYPE = c/f !c @@ -157,27 +161,29 @@ LINE = 7/5/1/2 !20/1/2/1 FINT = 15;21;27;33;39;45;51;57 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = WIND = 0 TITLE = 5//~ ? GFS @ HEIGHTS AND VORTICITY|~EPAC @ HGHT AND VORT!0 li ru exit EOFplt +export err=$?;err_chk ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_ql - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_ql - fi +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_ql" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_ql" fi exit diff --git a/gempak/ush/gfs_meta_mar_skewt.sh b/gempak/ush/gfs_meta_mar_skewt.sh index a49439d6a0..e61c4cb1dc 100755 --- a/gempak/ush/gfs_meta_mar_skewt.sh +++ b/gempak/ush/gfs_meta_mar_skewt.sh @@ -1,31 +1,35 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_mar_skewt.sh # -# Log : -# J. Carr/PMB 12/08/2004 Pushed into production - # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/MAR_SKEWT" +cd "${DATA}/MAR_SKEWT" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='MAR_SKEWT:$SECONDS + ' -mkdir -p -m 775 $DATA/MAR_SKEWT -cd $DATA/MAR_SKEWT -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" metatype="mar_skewt" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -for fhr in 000 006 012 018 024 030 036 042 048 054 060 066 072 -do - export pgm=gdprof;. prep_step; startmsg +for fhr in $(seq -f "%03g" -s ' ' 0 6 72); do + export pgm=gdprof;. prep_step -$GEMEXE/gdprof << EOFplt + "${GEMEXE}/gdprof" << EOFplt GDATTIM = F${fhr} GVCORD = PRES GDFILE = F-${MDL} @@ -38,12 +42,12 @@ SCALE = 0 XAXIS = -40/50/10/1;1;1 YAXIS = 1050/100//1;1;1 WIND = bk1 -REFVEC = +REFVEC = WINPOS = 1 FILTER = no PANEL = 0 TEXT = 1.2/22/2/hw -DEVICE = $device +DEVICE = ${device} OUTPUT = T THTALN = 18/1/1 THTELN = 23/2/1 @@ -272,25 +276,26 @@ ru exit EOFplt -export err=$?;err_chk + export err=$?;err_chk done -$GEMEXE/gpend +"${GEMEXE}/gpend" ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_skewt - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_skewt - fi +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_skewt" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_skewt" fi exit diff --git a/gempak/ush/gfs_meta_mar_ver.sh b/gempak/ush/gfs_meta_mar_ver.sh index 79f4fc7096..32b5117ce0 100755 --- a/gempak/ush/gfs_meta_mar_ver.sh +++ b/gempak/ush/gfs_meta_mar_ver.sh @@ -1,31 +1,36 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_mar_ver.sh # -# Log : -# J. Carr/PMB 12/08/2004 Pushed into production -# # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/MAR_VER" +cd "${DATA}/MAR_VER" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='MAR_VER:$SECONDS + ' -mkdir -p -m 775 $DATA/MAR_VER -cd $DATA/MAR_VER -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" metatype="mar_ver" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -export pgm=gdplot2_nc;. prep_step; startmsg +export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt +"${GEMEXE}/gdplot2_nc" << EOFplt \$MAPFIL=hipowo.gsf+mefbao.ncp -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = f00-f48-6 GLEVEL = 9950 GVCORD = sgma @@ -42,7 +47,7 @@ FLINE = HILO = HLSYM = CLRBAR = -WIND = +WIND = REFVEC = TITLE = 31/-2/~ ? ${MDL} Gridded BL Wind Direction (40m AGL)|~ WATL GRIDDED WIND DIR!0 TEXT = 0.8/21/1/hw @@ -51,7 +56,7 @@ GAREA = 27.2;-81.9;46.7;-61.4 PROJ = STR/90.0;-67.0;1.0 MAP = 31+6 LATLON = 18/1/1/1;1/5;5 -DEVICE = $device +DEVICE = ${device} STNPLT = 31/1.3/22/1.6/hw|25/19/1.3/1.6|buoys.tbl SATFIL = RADFIL = @@ -86,19 +91,21 @@ exit EOFplt export err=$?;err_chk + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_ver - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}_${PDY}_${cyc}_mar_ver - fi +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_ver" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_mar_ver" fi exit diff --git a/gempak/ush/gfs_meta_nhsh.sh b/gempak/ush/gfs_meta_nhsh.sh index 47ac4b1331..d52ed9a64c 100755 --- a/gempak/ush/gfs_meta_nhsh.sh +++ b/gempak/ush/gfs_meta_nhsh.sh @@ -1,39 +1,34 @@ -#!/bin/sh - +#! /usr/bin/env bash # # Metafile Script : mrf_meta_nhsh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# D.W.Plummer/NCEP 2/97 Added $MAPFIL=mepowo.gsf -# D.W.Plummer/NCEP 4/97 Changed SKIP for grid2 -# B. Gordon 4/00 Converted for production on IBM-SP -# and changed gdplot_nc -> gdplot2_nc -# D. Michaud 4/16 Added logic to display different titles -# for parallel runs -# B. Gordon 7/02 Converted to run off the GFS due to demise -# of the MRF. -# J. Carr 11/04 Changed contur from 1 to a 2. -# Added a ? to all title/TITLE lines. -# -set -xa -mkdir -p -m 775 $DATA/mrfnhsh -cd $DATA/mrfnhsh -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -PDY2=$(echo $PDY | cut -c3-) +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/mrfnhsh" +cd "${DATA}/mrfnhsh" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi -if [ "$envir" = "para" ] ; then +if [[ "${envir}" == "para" ]] ; then export m_title="GFSP" else export m_title="GFS" fi -export pgm=gdplot2_nc; prep_step; startmsg +export pgm=gdplot2_nc; prep_step -$GEMEXE/gdplot2_nc << EOF +"${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL=mepowo.gsf -GDFILE = F-GFS | ${PDY2}/${cyc}00 +GDFILE = F-GFS | ${PDY:2}/${cyc}00 GDATTIM = F000-F384-12 DEVICE = nc | Nmeta_nh PANEL = 0 @@ -47,7 +42,7 @@ restore ${HOMEgfs}/gempak/ush/restore/garea_nh.nts restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_absv.2.nts CLRBAR = 1 -TEXT = 1/21//hw +TEXT = 1/21//hw SKIP = 0 !0 !1 SCALE = 5 !5 !-1 GFUNC = (avor(wnd))//v !mul(v,-1) !hght @@ -59,8 +54,8 @@ HILO = 2;6/X;N/10-99;10-99!2;6/X;N/10-99;10-99! TITLE = 5//~ ? @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY! TEXT = 1/21//hw CLEAR = yes - -TITLE = 5//~ ? $m_title @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 + +TITLE = 5//~ ? ${m_title} @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 l ru @@ -68,7 +63,7 @@ ru restore ${HOMEgfs}/gempak/ush/restore/garea_sh.nts DEVICE = nc | Nmeta_sh -TITLE = 5//~ ? $m_title @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 +TITLE = 5//~ ? ${m_title} @ HEIGHTS AND VORTICITY|~ @ HGHT AND VORTICITY!0 l ru @@ -80,7 +75,7 @@ restore ${HOMEgfs}/gempak/ush/restore/250mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw GDPFUN = knts((mag(wnd))) !sm9s(hght) -TITLE = 5/-2/~ ? $m_title @ HEIGHTS, ISOTACHS AND WIND (KTS)|~ @ HGHT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HEIGHTS, ISOTACHS AND WIND (KTS)|~ @ HGHT AND WIND!0 l ru @@ -95,7 +90,7 @@ TEXT = 1/21//hw GDATTIM = F12-F240-12 GDPFUN = (quo(mul(pr12,43200),25.4)) GDPFUN = (quo(p12m,25.4)) -TITLE = 5//~ ? $m_title 12-HOUR TOTAL PRECIPITATION (IN)|~ 12-HOURLY TOTAL PCPN +TITLE = 5//~ ? ${m_title} 12-HOUR TOTAL PRECIPITATION (IN)|~ 12-HOURLY TOTAL PCPN l r @@ -112,27 +107,20 @@ export err=$?; err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l Nmeta_nh -export err=$?;export pgm="GEMPAK CHECK FILE"; err_chk -ls -l Nmeta_sh -export err=$?;export pgm="GEMPAK CHECK FILE"; err_chk - -if [ $SENDCOM = "YES" ] ; then - mv Nmeta_nh ${COMOUT}/gfs_${PDY}_${cyc}_nh - mv Nmeta_sh ${COMOUT}/gfs_${PDY}_${cyc}_sh - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_nh - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_sh - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_nh - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_sh - fi - fi -fi - -# +for metaname in Nmeta_nh Nmeta_sh; do + if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) + fi + + mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_${metaname/Nmeta_}" + if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_${metaname/Nmeta_}" + if [[ ${DBN_ALERT_TYPE} = "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_${metaname/Nmeta_}" + fi + fi +done diff --git a/gempak/ush/gfs_meta_opc_na_ver b/gempak/ush/gfs_meta_opc_na_ver index 3c0798ebc6..1d543c52e9 100755 --- a/gempak/ush/gfs_meta_opc_na_ver +++ b/gempak/ush/gfs_meta_opc_na_ver @@ -1,247 +1,79 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_opc_na_ver # -# Log : -# J. Carr/HPC 12/08/2004 Submitted into production. -# # Set up Local Variables # -set -x -# -export PS4='OPC_NA_VER_F${fend}:$SECONDS + ' -mkdir -p -m 775 $DATA/OPC_NA_VER_F${fend} -cd $DATA/OPC_NA_VER_F${fend} -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -export COMPONENT=${COMPONENT:-atmos} +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/OPC_NA_VER_F${fend}" +cd "${DATA}/OPC_NA_VER_F${fend}" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" -metatype="ver" metaname="gfsver_mpc_na_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -# -# DEFINE 1 CYCLE AGO -dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) -date1=$(echo ${dc1} | cut -c -8) -sdate1=$(echo ${dc1} | cut -c 3-8) -cycle1=$(echo ${dc1} | cut -c 9,10) -# DEFINE 2 CYCLES AGO -dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) -date2=$(echo ${dc2} | cut -c -8) -sdate2=$(echo ${dc2} | cut -c 3-8) -cycle2=$(echo ${dc2} | cut -c 9,10) -# DEFINE 3 CYCLES AGO -dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) -date3=$(echo ${dc3} | cut -c -8) -sdate3=$(echo ${dc3} | cut -c 3-8) -cycle3=$(echo ${dc3} | cut -c 9,10) -# DEFINE 4 CYCLES AGO -dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) -date4=$(echo ${dc4} | cut -c -8) -sdate4=$(echo ${dc4} | cut -c 3-8) -cycle4=$(echo ${dc4} | cut -c 9,10) -# DEFINE 5 CYCLES AGO -dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) -date5=$(echo ${dc5} | cut -c -8) -sdate5=$(echo ${dc5} | cut -c 3-8) -cycle5=$(echo ${dc5} | cut -c 9,10) -# DEFINE 6 CYCLES AGO -dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) -date6=$(echo ${dc6} | cut -c -8) -sdate6=$(echo ${dc6} | cut -c 3-8) -cycle6=$(echo ${dc6} | cut -c 9,10) -# DEFINE 7 CYCLES AGO -dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) -date7=$(echo ${dc7} | cut -c -8) -sdate7=$(echo ${dc7} | cut -c 3-8) -cycle7=$(echo ${dc7} | cut -c 9,10) -# DEFINE 8 CYCLES AGO -dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) -date8=$(echo ${dc8} | cut -c -8) -sdate8=$(echo ${dc8} | cut -c 3-8) -cycle8=$(echo ${dc8} | cut -c 9,10) -# DEFINE 9 CYCLES AGO -dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) -date9=$(echo ${dc9} | cut -c -8) -sdate9=$(echo ${dc9} | cut -c 3-8) -cycle9=$(echo ${dc9} | cut -c 9,10) -# DEFINE 10 CYCLES AGO -dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) -date10=$(echo ${dc10} | cut -c -8) -sdate10=$(echo ${dc10} | cut -c 3-8) -cycle10=$(echo ${dc10} | cut -c 9,10) -# DEFINE 11 CYCLES AGO -dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) -date11=$(echo ${dc11} | cut -c -8) -sdate11=$(echo ${dc11} | cut -c 3-8) -cycle11=$(echo ${dc11} | cut -c 9,10) -# DEFINE 12 CYCLES AGO -dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) -date12=$(echo ${dc12} | cut -c -8) -sdate12=$(echo ${dc12} | cut -c 3-8) -cycle12=$(echo ${dc12} | cut -c 9,10) -# DEFINE 13 CYCLES AGO -dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) -date13=$(echo ${dc13} | cut -c -8) -sdate13=$(echo ${dc13} | cut -c 3-8) -cycle13=$(echo ${dc13} | cut -c 9,10) -# DEFINE 14 CYCLES AGO -dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) -date14=$(echo ${dc14} | cut -c -8) -sdate14=$(echo ${dc14} | cut -c 3-8) -cycle14=$(echo ${dc14} | cut -c 9,10) -# DEFINE 15 CYCLES AGO -dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) -date15=$(echo ${dc15} | cut -c -8) -sdate15=$(echo ${dc15} | cut -c 3-8) -cycle15=$(echo ${dc15} | cut -c 9,10) -# DEFINE 16 CYCLES AGO -dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) -date16=$(echo ${dc16} | cut -c -8) -sdate16=$(echo ${dc16} | cut -c 3-8) -cycle16=$(echo ${dc16} | cut -c 9,10) -# DEFINE 17 CYCLES AGO -dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) -date17=$(echo ${dc17} | cut -c -8) -sdate17=$(echo ${dc17} | cut -c 3-8) -cycle17=$(echo ${dc17} | cut -c 9,10) -# DEFINE 18 CYCLES AGO -dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) -date18=$(echo ${dc18} | cut -c -8) -sdate18=$(echo ${dc18} | cut -c 3-8) -cycle18=$(echo ${dc18} | cut -c 9,10) -# DEFINE 19 CYCLES AGO -dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) -date19=$(echo ${dc19} | cut -c -8) -sdate19=$(echo ${dc19} | cut -c 3-8) -cycle19=$(echo ${dc19} | cut -c 9,10) -# DEFINE 20 CYCLES AGO -dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) -date20=$(echo ${dc20} | cut -c -8) -sdate20=$(echo ${dc20} | cut -c 3-8) -cycle20=$(echo ${dc20} | cut -c 9,10) -# DEFINE 21 CYCLES AGO -dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) -date21=$(echo ${dc21} | cut -c -8) -sdate21=$(echo ${dc21} | cut -c 3-8) -cycle21=$(echo ${dc21} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. -vergrid="F-${MDL} | ${PDY2}/${cyc}00" +vergrid="F-${MDL} | ${PDY:2}/${cyc}00" fcsthr="f00" # SET WHAT RUNS TO COMPARE AGAINST BASED ON MODEL CYCLE TIME. -if [ ${cyc} -eq 00 ] ; then - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc16} ${dc18} ${dc20}" -elif [ ${cyc} -eq 12 ] ; then - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc16} ${dc18} ${dc20}" -else - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc17} ${dc19} ${dc21}" -fi +# seq won't give us any splitting problems, ignore warnings +# shellcheck disable=SC2207,SC2312 +case ${cyc} in + 00 | 12) IFS=$'\n' lookbacks=($(seq 6 6 84) $(seq 96 12 120)) ;; + 06 | 18) IFS=$'\n' lookbacks=($(seq 6 6 84) $(seq 90 12 126)) ;; + *) + echo "FATAL ERROR: Invalid cycle ${cyc} passed to ${BASH_SOURCE[0]}" + exit 100 + ;; +esac #GENERATING THE METAFILES. MDL2="GFSHPC" -for verday in ${verdays} - do - cominday=$(echo ${verday} | cut -c -8) - #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} - # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak +for lookback in "${lookbacks[@]}"; do + init_time="$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${lookback} hours")" + init_PDY=${init_time:0:8} + init_cyc=${init_time:8:2} + + if (( init_time <= ${SDATE:-0} )); then + echo "Skipping ver for ${init_time} because it is before the experiment began" + if (( lookback == "${lookbacks[0]}" )); then + echo "First forecast time, no metafile produced" + exit 0 + else + break + fi + fi - if [ ${verday} -eq ${dc1} ] ; then - dgdattim=f006 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle1}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate1}/${cycle1}00" - elif [ ${verday} -eq ${dc2} ] ; then - dgdattim=f012 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle2}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate2}/${cycle2}00" - elif [ ${verday} -eq ${dc3} ] ; then - dgdattim=f018 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle3}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate3}/${cycle3}00" - elif [ ${verday} -eq ${dc4} ] ; then - dgdattim=f024 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle4}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate4}/${cycle4}00" - elif [ ${verday} -eq ${dc5} ] ; then - dgdattim=f030 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle5}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate5}/${cycle5}00" - elif [ ${verday} -eq ${dc6} ] ; then - dgdattim=f036 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle6}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate6}/${cycle6}00" - elif [ ${verday} -eq ${dc7} ] ; then - dgdattim=f042 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle7}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate7}/${cycle7}00" - elif [ ${verday} -eq ${dc8} ] ; then - dgdattim=f048 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle8}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate8}/${cycle8}00" - elif [ ${verday} -eq ${dc9} ] ; then - dgdattim=f054 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle9}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate9}/${cycle9}00" - elif [ ${verday} -eq ${dc10} ] ; then - dgdattim=f060 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle10}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate10}/${cycle10}00" - elif [ ${verday} -eq ${dc11} ] ; then - dgdattim=f066 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle11}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate11}/${cycle11}00" - elif [ ${verday} -eq ${dc12} ] ; then - dgdattim=f072 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle12}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate12}/${cycle12}00" - elif [ ${verday} -eq ${dc13} ] ; then - dgdattim=f078 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle13}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate13}/${cycle13}00" - elif [ ${verday} -eq ${dc14} ] ; then - dgdattim=f084 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle14}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate14}/${cycle14}00" - elif [ ${verday} -eq ${dc15} ] ; then - dgdattim=f090 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle15}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate15}/${cycle15}00" - elif [ ${verday} -eq ${dc16} ] ; then - dgdattim=f096 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle16}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate16}/${cycle16}00" - elif [ ${verday} -eq ${dc17} ] ; then - dgdattim=f102 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle17}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate17}/${cycle17}00" - elif [ ${verday} -eq ${dc18} ] ; then - dgdattim=f108 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle18}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate18}/${cycle18}00" - elif [ ${verday} -eq ${dc19} ] ; then - dgdattim=f114 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle19}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate19}/${cycle19}00" - elif [ ${verday} -eq ${dc20} ] ; then - dgdattim=f120 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle20}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate20}/${cycle20}00" - elif [ ${verday} -eq ${dc21} ] ; then - dgdattim=f126 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle21}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate21}/${cycle21}00" + dgdattim="f$(printf "%03g" "${lookback}")" + + # Create symlink in DATA to sidestep gempak path limits + HPCGFS="${RUN}.${init_time}" + if [[ ! -L ${HPCGFS} ]]; then + YMD=${init_PDY} HH=${init_cyc} GRID="1p00" generate_com source_dir:COM_ATMOS_GEMPAK_TMPL + ln -sf "${source_dir}" "${HPCGFS}" fi -# 500 MB HEIGHT METAFILE -export pgm=gdplot2_nc;. prep_step; startmsg + grid="F-${MDL2} | ${init_PDY}/${init_cyc}00" + + # 500 MB HEIGHT METAFILE + export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt -PROJ = MER + "${GEMEXE}/gdplot2_nc" << EOFplt +PROJ = MER GAREA = 15.0;-100.0;70.0;20.0 map = 1//2 clear = yes @@ -294,11 +126,11 @@ r gdfile = ${vergrid} gdattim = ${fcsthr} gdpfun = mag(kntv(wnd)) -glevel = 9950 -gvcord = sgma -scale = 0 -cint = 35;50;65 -line = 6/1/3 +glevel = 9950 +gvcord = sgma +scale = 0 +cint = 35;50;65 +line = 6/1/3 title = 6/-2/~ GFS WIND ISOTACHS 30m|~WIND DIFF clear = yes r @@ -306,29 +138,35 @@ r gdfile = ${grid} gdattim = ${dgdattim} line = 5/1/3 -contur = 0 -title = 5/-1/~ GFS WIND ISOTACHS 30m +contur = 0 +title = 5/-1/~ GFS WIND ISOTACHS 30m clear = no r ex EOFplt -export err=$?;err_chk + export err=$?;err_chk + if (( err != 0 )); then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) + fi done -#################################################### +##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l ${metaname} -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}ver_${PDY}_${cyc}_na_mar - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}ver_${PDY}_${cyc}_na_mar - fi +if [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit 100 +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}ver_${PDY}_${cyc}_na_mar" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}ver_${PDY}_${cyc}_na_mar" fi exit diff --git a/gempak/ush/gfs_meta_opc_np_ver b/gempak/ush/gfs_meta_opc_np_ver index f9f3fc88ab..45a6824fa8 100755 --- a/gempak/ush/gfs_meta_opc_np_ver +++ b/gempak/ush/gfs_meta_opc_np_ver @@ -1,249 +1,79 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_opc_np_ver # -# Log : -# J. Carr/HPC 12/08/2004 Submitted into production. -# # Set up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/OPC_NP_VER_F${fend}" +cd "${DATA}/OPC_NP_VER_F${fend}" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + # -export PS4='OPC_NP_VER_F${fend}:$SECONDS + ' -mkdir -p -m 775 $DATA/OPC_NP_VER_F${fend} -cd $DATA/OPC_NP_VER_F${fend} -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export COMPONENT=${COMPONENT:-atmos} +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL="GFS" -metatype="ver" metaname="gfsver_mpc_np_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) -# -# -# DEFINE 1 CYCLE AGO -dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) -date1=$(echo ${dc1} | cut -c -8) -sdate1=$(echo ${dc1} | cut -c 3-8) -cycle1=$(echo ${dc1} | cut -c 9,10) -# DEFINE 2 CYCLES AGO -dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) -date2=$(echo ${dc2} | cut -c -8) -sdate2=$(echo ${dc2} | cut -c 3-8) -cycle2=$(echo ${dc2} | cut -c 9,10) -# DEFINE 3 CYCLES AGO -dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) -date3=$(echo ${dc3} | cut -c -8) -sdate3=$(echo ${dc3} | cut -c 3-8) -cycle3=$(echo ${dc3} | cut -c 9,10) -# DEFINE 4 CYCLES AGO -dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) -date4=$(echo ${dc4} | cut -c -8) -sdate4=$(echo ${dc4} | cut -c 3-8) -cycle4=$(echo ${dc4} | cut -c 9,10) -# DEFINE 5 CYCLES AGO -dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) -date5=$(echo ${dc5} | cut -c -8) -sdate5=$(echo ${dc5} | cut -c 3-8) -cycle5=$(echo ${dc5} | cut -c 9,10) -# DEFINE 6 CYCLES AGO -dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) -date6=$(echo ${dc6} | cut -c -8) -sdate6=$(echo ${dc6} | cut -c 3-8) -cycle6=$(echo ${dc6} | cut -c 9,10) -# DEFINE 7 CYCLES AGO -dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) -date7=$(echo ${dc7} | cut -c -8) -sdate7=$(echo ${dc7} | cut -c 3-8) -cycle7=$(echo ${dc7} | cut -c 9,10) -# DEFINE 8 CYCLES AGO -dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) -date8=$(echo ${dc8} | cut -c -8) -sdate8=$(echo ${dc8} | cut -c 3-8) -cycle8=$(echo ${dc8} | cut -c 9,10) -# DEFINE 9 CYCLES AGO -dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) -date9=$(echo ${dc9} | cut -c -8) -sdate9=$(echo ${dc9} | cut -c 3-8) -cycle9=$(echo ${dc9} | cut -c 9,10) -# DEFINE 10 CYCLES AGO -dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) -date10=$(echo ${dc10} | cut -c -8) -sdate10=$(echo ${dc10} | cut -c 3-8) -cycle10=$(echo ${dc10} | cut -c 9,10) -# DEFINE 11 CYCLES AGO -dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) -date11=$(echo ${dc11} | cut -c -8) -sdate11=$(echo ${dc11} | cut -c 3-8) -cycle11=$(echo ${dc11} | cut -c 9,10) -# DEFINE 12 CYCLES AGO -dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) -date12=$(echo ${dc12} | cut -c -8) -sdate12=$(echo ${dc12} | cut -c 3-8) -cycle12=$(echo ${dc12} | cut -c 9,10) -# DEFINE 13 CYCLES AGO -dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) -date13=$(echo ${dc13} | cut -c -8) -sdate13=$(echo ${dc13} | cut -c 3-8) -cycle13=$(echo ${dc13} | cut -c 9,10) -# DEFINE 14 CYCLES AGO -dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) -date14=$(echo ${dc14} | cut -c -8) -sdate14=$(echo ${dc14} | cut -c 3-8) -cycle14=$(echo ${dc14} | cut -c 9,10) -# DEFINE 15 CYCLES AGO -dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) -date15=$(echo ${dc15} | cut -c -8) -sdate15=$(echo ${dc15} | cut -c 3-8) -cycle15=$(echo ${dc15} | cut -c 9,10) -# DEFINE 16 CYCLES AGO -dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) -date16=$(echo ${dc16} | cut -c -8) -sdate16=$(echo ${dc16} | cut -c 3-8) -cycle16=$(echo ${dc16} | cut -c 9,10) -# DEFINE 17 CYCLES AGO -dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) -date17=$(echo ${dc17} | cut -c -8) -sdate17=$(echo ${dc17} | cut -c 3-8) -cycle17=$(echo ${dc17} | cut -c 9,10) -# DEFINE 18 CYCLES AGO -dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) -date18=$(echo ${dc18} | cut -c -8) -sdate18=$(echo ${dc18} | cut -c 3-8) -cycle18=$(echo ${dc18} | cut -c 9,10) -# DEFINE 19 CYCLES AGO -dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) -date19=$(echo ${dc19} | cut -c -8) -sdate19=$(echo ${dc19} | cut -c 3-8) -cycle19=$(echo ${dc19} | cut -c 9,10) -# DEFINE 20 CYCLES AGO -dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) -date20=$(echo ${dc20} | cut -c -8) -sdate20=$(echo ${dc20} | cut -c 3-8) -cycle20=$(echo ${dc20} | cut -c 9,10) -# DEFINE 21 CYCLES AGO -dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) -date21=$(echo ${dc21} | cut -c -8) -sdate21=$(echo ${dc21} | cut -c 3-8) -cycle21=$(echo ${dc21} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. -vergrid="F-${MDL} | ${PDY2}/${cyc}00" +vergrid="F-${MDL} | ${PDY:2}/${cyc}00" fcsthr="f00" # SET WHAT RUNS TO COMPARE AGAINST BASED ON MODEL CYCLE TIME. -if [ ${cyc} -eq 00 ] ; then - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc16} ${dc18} ${dc20}" -elif [ ${cyc} -eq 12 ] ; then - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc16} ${dc18} ${dc20}" -else - verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc17} ${dc19} ${dc21}" -fi +# seq won't give us any splitting problems, ignore warnings +# shellcheck disable=SC2207,SC2312 +case ${cyc} in + 00 | 12) IFS=$'\n' lookbacks=($(seq 6 6 84) $(seq 96 12 120)) ;; + 06 | 18) IFS=$'\n' lookbacks=($(seq 6 6 84) $(seq 90 12 126)) ;; + *) + echo "FATAL ERROR: Invalid cycle ${cyc} passed to ${BASH_SOURCE[0]}" + exit 100 + ;; +esac #GENERATING THE METAFILES. MDL2="GFSHPC" -for verday in ${verdays} - do - cominday=$(echo ${verday} | cut -c -8) - #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} - # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak +for lookback in "${lookbacks[@]}"; do + init_time="$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${lookback} hours")" + init_PDY=${init_time:0:8} + init_cyc=${init_time:8:2} + + if (( init_time <= ${SDATE:-0} )); then + echo "Skipping ver for ${init_time} because it is before the experiment began" + if (( lookback == "${lookbacks[0]}" )); then + echo "First forecast time, no metafile produced" + exit 0 + else + break + fi + fi - if [ ${verday} -eq ${dc1} ] ; then - dgdattim=f006 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle1}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate1}/${cycle1}00" - elif [ ${verday} -eq ${dc2} ] ; then - dgdattim=f012 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle2}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate2}/${cycle2}00" - elif [ ${verday} -eq ${dc3} ] ; then - dgdattim=f018 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle3}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate3}/${cycle3}00" - elif [ ${verday} -eq ${dc4} ] ; then - dgdattim=f024 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle4}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate4}/${cycle4}00" - elif [ ${verday} -eq ${dc5} ] ; then - dgdattim=f030 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle5}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate5}/${cycle5}00" - elif [ ${verday} -eq ${dc6} ] ; then - dgdattim=f036 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle6}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate6}/${cycle6}00" - elif [ ${verday} -eq ${dc7} ] ; then - dgdattim=f042 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle7}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate7}/${cycle7}00" - elif [ ${verday} -eq ${dc8} ] ; then - dgdattim=f048 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle8}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate8}/${cycle8}00" - elif [ ${verday} -eq ${dc9} ] ; then - dgdattim=f054 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle9}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate9}/${cycle9}00" - elif [ ${verday} -eq ${dc10} ] ; then - dgdattim=f060 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle10}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate10}/${cycle10}00" - elif [ ${verday} -eq ${dc11} ] ; then - dgdattim=f066 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle11}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate11}/${cycle11}00" - elif [ ${verday} -eq ${dc12} ] ; then - dgdattim=f072 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle12}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate12}/${cycle12}00" - elif [ ${verday} -eq ${dc13} ] ; then - dgdattim=f078 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle13}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate13}/${cycle13}00" - elif [ ${verday} -eq ${dc14} ] ; then - dgdattim=f084 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle14}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate14}/${cycle14}00" - elif [ ${verday} -eq ${dc15} ] ; then - dgdattim=f090 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle15}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate15}/${cycle15}00" - elif [ ${verday} -eq ${dc16} ] ; then - dgdattim=f096 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle16}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate16}/${cycle16}00" - elif [ ${verday} -eq ${dc17} ] ; then - dgdattim=f102 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle17}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate17}/${cycle17}00" - elif [ ${verday} -eq ${dc18} ] ; then - dgdattim=f108 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle18}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate18}/${cycle18}00" - elif [ ${verday} -eq ${dc19} ] ; then - dgdattim=f114 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle19}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate19}/${cycle19}00" - elif [ ${verday} -eq ${dc20} ] ; then - dgdattim=f120 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle20}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate20}/${cycle20}00" - elif [ ${verday} -eq ${dc21} ] ; then - dgdattim=f126 - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle21}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate21}/${cycle21}00" + dgdattim="f$(printf "%03g" "${lookback}")" + + # Create symlink in DATA to sidestep gempak path limits + HPCGFS="${RUN}.${init_time}" + if [[ ! -L "${HPCGFS}" ]]; then + YMD=${init_PDY} HH=${init_cyc} GRID="1p00" generate_com source_dir:COM_ATMOS_GEMPAK_TMPL + ln -sf "${source_dir}" "${HPCGFS}" fi -# 500 MB HEIGHT METAFILE + grid="F-${MDL2} | ${init_PDY}/${init_cyc}00" -export pgm=gdplot2_nc;. prep_step; startmsg + # 500 MB HEIGHT METAFILE + export pgm=gdplot2_nc;. prep_step -$GEMEXE/gdplot2_nc << EOFplt -PROJ = MER + "${GEMEXE}/gdplot2_nc" << EOFplt +PROJ = MER GAREA = 5.0;120.0;70.0;-105.0 map = 1//2 clear = yes @@ -296,11 +126,11 @@ r gdfile = ${vergrid} gdattim = ${fcsthr} gdpfun = mag(kntv(wnd)) -glevel = 9950 -gvcord = sgma -scale = 0 -cint = 35;50;65 -line = 6/1/3 +glevel = 9950 +gvcord = sgma +scale = 0 +cint = 35;50;65 +line = 6/1/3 title = 6/-2/~ GFS WIND ISOTACHS 30m|~WIND DIFF clear = yes r @@ -308,29 +138,34 @@ r gdfile = ${grid} gdattim = ${dgdattim} line = 5/1/3 -contur = 0 -title = 5/-1/~ GFS WIND ISOTACHS 30m +contur = 0 +title = 5/-1/~ GFS WIND ISOTACHS 30m clear = no r ex EOFplt -export err=$?;err_chk - + export err=$?;err_chk + if (( err != 0 )); then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) + fi done -#################################################### +##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l ${metaname} -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}ver_${PDY}_${cyc}_np_mar - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job ${COMOUT}/${mdl}ver_${PDY}_${cyc}_np_mar - fi +if [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit 100 +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}ver_${PDY}_${cyc}_np_mar" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}ver_${PDY}_${cyc}_np_mar" fi exit diff --git a/gempak/ush/gfs_meta_precip.sh b/gempak/ush/gfs_meta_precip.sh index a21bcc7d98..940a450106 100755 --- a/gempak/ush/gfs_meta_precip.sh +++ b/gempak/ush/gfs_meta_precip.sh @@ -1,17 +1,24 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_precip.sh # -# Log : -# M. Klein/WPC 01/29/2014 Created. Adapted from gfs_meta_qpf.sh -# # Set up Local Variables # -set -x -export PS4='qpf:$SECONDS + ' -mkdir -p -m 775 $DATA/precip -cd $DATA/precip -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/precip" +cd "${DATA}/precip" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi # # Set model and metafile naming conventions @@ -21,13 +28,12 @@ MDL=GFS metatype="precip" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) # -# Set range of forecast hours. GFS is available every 6 hours through F192, then +# Set range of forecast hours. GFS is available every 6 hours through F192, then # every 12 hours after. The request was to have the fields go to F216, so will run # the gdplot for the ranges set below, then for the 12-hour and greater QPF periods, -# run the gdplot2 from F204-F216. 6-hour QPF will stop at F192. +# run the gdplot2 from F204-F216. 6-hour QPF will stop at F192. # gdatpcpn06="F006-F192-06" @@ -41,7 +47,6 @@ gdatpcpn96="F096-F192-06" gdatpcpn120="F120-F192-06" gdatpcpn144="F144-F192-06" gdatpcpn168="F168-F192-06" -run="r" # # For CPC - Day 6-10 and Day 8-14 QPFs using a North American regional display @@ -49,49 +54,50 @@ run="r" garea_cpc="17.529;-129.296;53.771;-22.374" proj_cpc="str/90;-105;0" -# Notes -- +# Notes -- # 00Z cycle - 8-14 Day -- No F198 file, so started at F204. Makes a P156I, not P162I. # 06Z cycle - 6-10 Day -- No F258 file, so ended at F252. Makes a P108I, not P114I. -# - 8-14 Day -- No F354 file, so ended at F348. Makes a P156I, not P162I. +# - 8-14 Day -- No F354 file, so ended at F348. Makes a P156I, not P162I. # 12Z cycle - 8-14 Day -- No F210 file, so started at F216. Makes a P156I, not P162I. # 18Z cycle - 6-10 Day -- No F270 file, so ended at F264. Makes a P108I, not P114I. # - 8-14 Day -- No F366 file, so ended at F360. Makes a P156I, not P162I. -gdattim_6to10="" -gdattim_8to14="" -gdpfun_6to10="p114i" -gdpfun_8to14="p162i" -if [ ${cyc} = "00" ] ; then - gdattim_6to10="${PDY2}/${cyc}00F264" - gdattim_8to14="${PDY2}/${cyc}00F360" - gdpfun_6to10="p114i" - gdpfun_8to14="p156i" -elif [ ${cyc} = "06" ] ; then - #gdattim_6to10="${PDY2}/${cyc}00F258" - #gdattim_8to14="${PDY2}/${cyc}00F354" - gdattim_6to10="${PDY2}/${cyc}00F252" - gdattim_8to14="${PDY2}/${cyc}00F348" - gdpfun_6to10="p108i" - gdpfun_8to14="p156i" -elif [ ${cyc} = "12" ] ; then - gdattim_6to10="${PDY2}/${cyc}00F276" - gdattim_8to14="${PDY2}/${cyc}00F372" - gdpfun_6to10="p114i" - gdpfun_8to14="p156i" -elif [ ${cyc} = "18" ] ; then - #gdattim_6to10="${PDY2}/${cyc}00F270" - #gdattim_8to14="${PDY2}/${cyc}00F366" - gdattim_6to10="${PDY2}/${cyc}00F264" - gdattim_8to14="${PDY2}/${cyc}00F360" - gdpfun_6to10="p108i" - gdpfun_8to14="p156i" -fi - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOFplt -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +case ${cyc} in + 00) + gdattim_6to10="${PDY:2}/${cyc}00F264" + gdattim_8to14="${PDY:2}/${cyc}00F360" + gdpfun_6to10="p114i" + gdpfun_8to14="p156i" + ;; + 06) + gdattim_6to10="${PDY:2}/${cyc}00F252" + gdattim_8to14="${PDY:2}/${cyc}00F348" + gdpfun_6to10="p108i" + gdpfun_8to14="p156i" + ;; + 12) + gdattim_6to10="${PDY:2}/${cyc}00F276" + gdattim_8to14="${PDY:2}/${cyc}00F372" + gdpfun_6to10="p114i" + gdpfun_8to14="p156i" + ;; + 18) + gdattim_6to10="${PDY:2}/${cyc}00F264" + gdattim_8to14="${PDY:2}/${cyc}00F360" + gdpfun_6to10="p108i" + gdpfun_8to14="p156i" + ;; + *) + echo "FATAL ERROR: InvaLid cycle ${cyc} passed to ${BASH_SOURCE[0]}" + exit 100 + ;; +esac + +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOFplt +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 garea = us -proj = +proj = map = 1/1/2/yes device = ${device} clear = yes @@ -131,15 +137,15 @@ scale = 0 gdpfun = p06i type = f cint = -line = +line = hilo = 31;0/x#2/.01-20//50;50/y hlsym = 1.5 -wind = +wind = title = 1/-2/~ ? ${MDL} 6-HOUR TOTAL PCPN|~6-HR TOTAL PCPN!0 l r -gdattim = ${gdatpcpn12} +gdattim = ${gdatpcpn12} gdpfun = p12i title = 1/-2/~ ? ${MDL} 12-HOUR TOTAL PCPN|~12-HR TOTAL PCPN!0 l @@ -149,7 +155,7 @@ gdattim = F204-F216-12 l r -gdattim = ${gdatpcpn24} +gdattim = ${gdatpcpn24} gdpfun = p24i title = 1/-2/~ ? ${MDL} 24-HOUR TOTAL PCPN|~24-HR TOTAL PCPN!0 l @@ -177,7 +183,7 @@ r gdattim = F204-F216-12 r -gdattim = ${gdatpcpn72} +gdattim = ${gdatpcpn72} gdpfun = p72i title = 1/-2/~ ? ${MDL} 72 HOUR TOTAL PCPN|~72-HR TOTAL PCPN!0 r @@ -185,7 +191,7 @@ r gdattim = F204-F216-12 r -gdattim = ${gdatpcpn84} +gdattim = ${gdatpcpn84} gdpfun = p84i title = 1/-2/~ ? ${MDL} 84 HOUR TOTAL PCPN|~84-HR TOTAL PCPN!0 r @@ -249,20 +255,20 @@ export err=$?;err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" + fi fi exit diff --git a/gempak/ush/gfs_meta_qpf.sh b/gempak/ush/gfs_meta_qpf.sh index 85cd7b94f8..d4f6c04310 100755 --- a/gempak/ush/gfs_meta_qpf.sh +++ b/gempak/ush/gfs_meta_qpf.sh @@ -1,58 +1,48 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_qpf.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# J. Carr/HPC 7/7/97 Changed script so that it uses gdplot2 instead of gdplot -# J. Carr/HPC 8/5/98 Removed pcpn potential product and changed map to a medium resolution -# J. Carr/HPC 2/2/99 Changed skip to 0 -# J. Carr/HPC 2/10/99 Changed type c/f to just f for pcpn -# J. Carr/HPC 4/12/99 Added 84-hr time for the gfs. -# J. Carr/HPC 6/99 Added a filter on map -# J. Carr/HPC 2/2001 Edited to run on IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 6/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 7/2001 Submitted. -# J. Carr/HPC 11/2004 Changed contur from 1 to a 2. -# Inserted a ? in all title lines. -# Commented out if statement for cycles since this is old code based on when various runs of GFS ran -# out to differing times. -# M. Klein/HPC 02/2010 Run 48-hour QPF out to F216 for medium-range. -# # Set up Local Variables # -set -x -export PS4='qpf:$SECONDS + ' -mkdir -p -m 775 $DATA/qpf -cd $DATA/qpf -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/qpf" +cd "${DATA}/qpf" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL=GFS metatype="qpf" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo $PDY | cut -c3-) - gdat="F000-F126-06" - gdatpcpn06="F006-F126-06" - gdatpcpn12="F012-F126-06" - gdatpcpn24="F024-F126-06" - gdatpcpn48="F048-F216-06" - gdatpcpn60="F060-F126-06" - gdatpcpn72="F072-F126-06" - gdatpcpn84="F084-F126-06" - gdatpcpn96="F096-F126-06" - gdatpcpn120="F120-F126-06" - gdatpcpn126="F126" - run="r" - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOFplt -gdfile = F-${MDL} | ${PDY2}/${cyc}00 +gdat="F000-F126-06" +gdatpcpn06="F006-F126-06" +gdatpcpn12="F012-F126-06" +gdatpcpn24="F024-F126-06" +gdatpcpn48="F048-F216-06" +gdatpcpn60="F060-F126-06" +gdatpcpn72="F072-F126-06" +gdatpcpn84="F084-F126-06" +gdatpcpn96="F096-F126-06" +gdatpcpn120="F120-F126-06" +run="r" + +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOFplt +gdfile = F-${MDL} | ${PDY:2}/${cyc}00 gdattim = ${gdat} garea = us -proj = +proj = map = 1/1/2/yes device = ${device} clear = yes @@ -63,20 +53,20 @@ latlon = 0 filter = yes glevel = 0 -gvcord = none +gvcord = none skip = 0 scale = 0 gdpfun = sm5s(lft4)!sm5s(lft4) !sm5s(lft4)!kntv(wnd@9950%sgma) type = c/f !c !c !b cint = 2/2 !-10000;0.05 !2/-100/-2 -line = 20/-32/2 !0;5//0;4/0;0!32//2 -fint = -8;-6;-4;-2;0.05;10 +line = 20/-32/2 !0;5//0;4/0;0!32//2 +fint = -8;-6;-4;-2;0.05;10 fline = 2;15;21;22;23;0;24 hilo = 0 !0 hlsym = 1;1//22;22/2;2/hw!0 clrbar = 1/V/LL !0 -wind = bk0 !bk0 !bk0 !bk10/0.8/2/112!bk0 -refvec = +wind = bk0 !bk0 !bk0 !bk10/0.8/2/112!bk0 +refvec = title = 1/-2/~ ? ${MDL} Best LI AND BL WINDS|~BEST LI!0 r @@ -89,7 +79,7 @@ type = c !c/f !c !c !c cint = 0.25/0.25/0.5 !0.25/0.75/6.0!4!3/0/540!3/543/1000 line = 22///2 !32//2/2!6//3!4/5/2!5/5/2 fint = 0 !0.5;1.0;1.5;2.0 -fline = 0 !0;23;22;30;14 +fline = 0 !0;23;22;30;14 hilo = 0 !0!6/H#;L#/1020-1070;900-1012!0 HLSYM = 0 !0!1.5;1.5//22;22/3;3/hw!0 clrbar = 0 !1/V/LL!0!0 @@ -143,7 +133,7 @@ type = c!c/f!b cint = 0.25/0.25/0.5!0.25/0.75/6.0 line = 22///2!32//2/2 fint = !0.5;1.0;1.5;2.0 -fline = !0;23;22;21;2 +fline = !0;23;22;21;2 hilo = 0!0 HLSYM = 0!0 clrbar = 0!1/V/LL @@ -169,7 +159,7 @@ WIND = ! REFVEC = TITLE = 1/-2/~ ? ${MDL} PCPN POTENTIAL (PW X (1000-440 MB RH)) INCHES OF PW|~PCPN POT!0 r - + glevel = 850!850!850 gvcord = pres!pres!pres skip = 0/1;1 @@ -180,11 +170,11 @@ cint = -4;-2;0;2;4!2/6/28!3 line = 3//1!32//1!6//3 fint = 4;8;12;16;20 fline = 0;23;22;30;14;2 -hilo = 0!0!6/H#;L# +hilo = 0!0!6/H#;L# hlsym = 0!0!1.5;1.5//22;22/2;2/hw clrbar = 1/V/LL!0 -wind = bk0!bk0!bk0!bk9/0.8/2/212 -refvec = +wind = bk0!bk0!bk0!bk9/0.8/2/212 +refvec = title = 1/-2/~ ? ${MDL} @ DEW POINT, WIND, AND HGHT|~@ DEW POINT!0 r @@ -205,25 +195,25 @@ refvec = title = 1/-2/~ ? ${MDL} @ DEWPOINT, WIND, AND HGHT|~@ DEWPOINT!0 r -glevel = 850 !850 !0 !850 +glevel = 850 !850 !0 !850 gvcord = pres !pres !none !pres skip = 0/1;2 scale = 2 !-1/2 !0 !2 gdpfun = sm5s(mag(smul(mixr;wnd)!sm5s(hght)!sm5s(thte)!smul(mixr;wnd) type = c/f !c !c !a cint = 3 !3 !5 -line = 3 !6//2 !25/10/2 +line = 3 !6//2 !25/10/2 fint = 6;12;18;24;30 fline = 0;23;22;21;14;15;2 hilo = 0!6/H#;L#!0 hlsym = 0!1;1//22;22/2;2/hw clrbar = 1/V/LL!0 -wind = bk0!bk0!bk0!am16/0.6/2/211/0.3!bk0 -refvec = 10 +wind = bk0!bk0!bk0!am16/0.6/2/211/0.3!bk0 +refvec = 10 text = s/22/2/hw title = 1/-2/~ ? ${MDL} @ MOIST. TRNSPT, HGHT, BL THTE|~@ H2O TRANSPORT!0 r - + glevel = 850 gvcord = pres skip = 0/1;1 @@ -234,8 +224,8 @@ cint = 2 !4//304 !4/308/324 !4/328 line = 32/1/2 !23/10/3 !22/10/3 !21/1/2 fint = -14;-10;-6;-2;2;6;10;14! fline = 7;29;30;24;0;14;15;18;5! -hilo = -hlsym = +hilo = +hlsym = clrbar = 1/V/LL!0 wind = bk0 !bk0 !bk0 !bk0 !bk9/0.8/2/112!bk0 refvec = 10 @@ -343,13 +333,13 @@ refvec = title = 1/-2/~ ? ${MDL} 6-HOUR TOTAL PCPN, MSLP |~6-HR TOTAL PCPN!0 r -gdattim = ${gdatpcpn12} +gdattim = ${gdatpcpn12} gdpfun = p12i type = f title = 1/-2/~ ? ${MDL} 12-HOUR TOTAL PCPN|~12-HR TOTAL PCPN!0 r -gdattim = ${gdatpcpn24} +gdattim = ${gdatpcpn24} gdpfun = p24i title = 1/-2/~ ? ${MDL} 24-HOUR TOTAL PCPN|~24-HR TOTAL PCPN!0 r @@ -364,12 +354,12 @@ gdpfun = p60i title = 1/-2/~ ? ${MDL} 60 HOUR TOTAL PCPN|~60-HR TOTAL PCPN!0 r -gdattim = ${gdatpcpn72} +gdattim = ${gdatpcpn72} gdpfun = p72i title = 1/-2/~ ? ${MDL} 72 HOUR TOTAL PCPN|~72-HR TOTAL PCPN!0 r -gdattim = ${gdatpcpn84} +gdattim = ${gdatpcpn84} gdpfun = p84i title = 1/-2/~ ? ${MDL} 84 HOUR TOTAL PCPN|~84-HR TOTAL PCPN!0 r @@ -403,19 +393,19 @@ export err=$?;err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_us_${metatype} - fi +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_us_${metatype}" fi fi diff --git a/gempak/ush/gfs_meta_sa.sh b/gempak/ush/gfs_meta_sa.sh index 1bd2ff7b59..2923cfc24e 100755 --- a/gempak/ush/gfs_meta_sa.sh +++ b/gempak/ush/gfs_meta_sa.sh @@ -1,52 +1,37 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_sa.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# J.W.Carr/HPC 4/97 Changed Comparison to 1200 UTC UKMET instead of 0000 UTC UKMET -# J.W.Carr/HPC 4/97 Added UKMET2 --- past 72 hours to the comparison -# J.W.Carr/HPC 2/98 changed garea of sfc conv, bl dwpt and wind product -# J.W.Carr/HPC 5/98 converted gdplot to gdplot2 -# J.W.Carr/HPC 8/98 Changed map to medium resolution -# J. Carr/HPC 7/99 Put a filter on map. -# J. Carr/HPC 02/2001 Updated to run on IBM and send to ncodas -# J. Carr/HPC 04/2001 Remove old metafiles from metaout before creating new ones. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 6/2001 Converted to a korn shell prior to delivering script to Production. -# J. Carr/HPC 8/2001 Submitted. -# J. Carr/HPC 3/2002 Tweaked a few products. -# # Set Up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/SA" +cd "${DATA}/SA" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='SA:$SECONDS + ' -mkdir -p -m 775 $DATA/SA -cd $DATA/SA -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL=GFS metatype="sa" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo ${PDY} | cut -c3-) -# -#if [ ${cyc} -eq 00 ] ; then -# fend=F126 -#elif [ ${cyc} -eq 12 ] ; then -# fend=F126 -#else -# fend=F126 -#fi fend=F126 # -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-${MDL} | ${PDY2}/${cyc}00 -GDATTIM = F00-${fend}-06 +export pgm=gdplot2_nc;. prep_step +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-${MDL} | ${PDY:2}/${cyc}00 +GDATTIM = F00-${fend}-06 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -72,8 +57,8 @@ FLINE = HILO = !!26;2/H#;L#/1020-1070;900-1012//30;30/y HLSYM = 1.3;1.3//21//hw CLRBAR = 1 -WIND = ! ! -REFVEC = +WIND = ! ! +REFVEC = TITLE = 1/-2/~ ${MDL} MSLP, 1000-500mb THICK|~MSLP, 1000-500 THKN! ru @@ -104,30 +89,30 @@ type = c/f!c!c!c cint = 13;25;38;50;62!4!4/0/540!4/544/600 line = 32/1/1!6/1/3!5/5/2!17/5/2 fint = 13;25;38;50 -fline = 0;23;22;21;2 +fline = 0;23;22;21;2 hilo = 26;2/H#;L#/1017-1050;930-1004/2//y HLSYM = 0!1.5;1.5//22;22/3;3/hw!0 clrbar = 1/V/LL!0 -wind = +wind = refvec = title = 1/-2/~ ${MDL} PW, EST MSLP, THICKNESS|~PRECIP WATER, MSLP!0 r -glevel = 0!0 -gvcord = none -skip = 0 +glevel = 0!0 +gvcord = none +skip = 0 scale = 0 gdpfun = sm5s(lft4)!sm5s(lft4)!sm5s(lft4)!kntv(wnd@9950%sgma) type = c/f !c !c !b cint = 3/3 !1/-0.5/0.5!3/-15/-3 -line = 25/1/1 !22/1/2 !21/1/1 -fint = -9;-6;-3;3;6 +line = 25/1/1 !22/1/2 !21/1/1 +fint = -9;-6;-3;3;6 fline = 2;15;22;0;0;24 hilo = 0!0 hlsym = 1;1//22;22/2;2/hw clrbar = 1/V/LL!0 wind = bk0!bk0!bk0!bk9/0.9/2/112 -refvec = +refvec = title = 1/-2/~ ${MDL} LI AND BL WINDS|~LIFTED INDEX!0 r @@ -142,7 +127,7 @@ scale = 7 !0 !0 gdpfun = sm5s(sdiv(mixr(dwpc;pres@0%none);wnd)!sm5s(dwpc)!sm5s(dwpc)!kntv(wnd@9950%sgma) type = f !c !c !b cint = 1//-1 !3/12 !3/21 -line = 32 !5//2 !6//2 +line = 32 !5//2 !6//2 clrbar = 1/V/LL!0 fint = -8;-6;-4;-2 fline = 2;23;22;3;0 @@ -159,13 +144,13 @@ GAREA = -66;-127;14.5;-19 GLEVEL = 0 !0 !0 !0 GVCORD = none !none !none !none SKIP = 0 -SCALE = 0 +SCALE = 0 GDPFUN = sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(pmsl)!kntv(wnd@9950%sgma) TYPE = c/f !c !c !c !b CINT = 3/-99/0 !3/3/21 !3/24/99 !4 LINE = 27/1/2 !2/1/2 !16/1/2 !19//3 -FINT = -18;-15;-12;-9;-6;-3;0 -FLINE = 30;29;7;6;4;25;24;0 +FINT = -18;-15;-12;-9;-6;-3;0 +FLINE = 30;29;7;6;4;25;24;0 HILO = 0 !0 !0 !26;2/H#;L#/1016-1050;930-1006/2//y HLSYM = 0 !0 !0 !1.5;1.5//22;22/3;3/hw CLRBAR = 1/V/LL !0 @@ -188,13 +173,13 @@ GAREA = -66;-127;14.5;-19 GLEVEL = 9950 !9950 !9950 !0 GVCORD = sgma!sgma!sgma!none SKIP = 0 -SCALE = 0 +SCALE = 0 GDPFUN = sm5s(tmpc)!sm5s(tmpc)!sm5s(tmpc)!sm5s(pmsl)!kntv(wnd@9950%sgma) TYPE = c/f !c !c !c !b CINT = 3/-99/0 !3/3/21 !3/24/99 !4 LINE = 27/1/2 !2/1/2 !16/1/2 !19//3 -FINT = -18;-15;-12;-9;-6;-3;0 -FLINE = 30;29;7;6;4;25;24;0 +FINT = -18;-15;-12;-9;-6;-3;0 +FLINE = 30;29;7;6;4;25;24;0 HILO = 0 !0 !0 !26;2/H#;L#/1016-1050;930-1006/2//y HLSYM = 0 !0 !0 !1.5;1.5//22;22/3;3/hw CLRBAR = 1/V/LL !0 @@ -220,7 +205,7 @@ type = c/f !b cint = 13;25;38;50;62! line = 32/1/2/1 fint = 13;25;38;50 -fline = 0;23;22;21;2 +fline = 0;23;22;21;2 hilo = 0 !0 HLSYM = 0 !0 clrbar = 1 @@ -239,11 +224,11 @@ CINT = 10;20;80;90 !30;40;50;60;70 LINE = 32//2 !23//2 FINT = 10;30;70;90 FLINE = 18;8;0;22;23 -HILO = +HILO = HLSYM = CLRBAR = 1 -WIND = -REFVEC = +WIND = +REFVEC = TITLE = 1/-2/~ ${MDL} @ MEAN LAYER RH|~MEAN LAYER RH!0 ru @@ -276,7 +261,7 @@ LINE = 7/5/1/2 !29/5/1/2!7/5/1/2 !29/5/1/2 !20/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! !2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 WIND = bk0 REFVEC = @@ -308,7 +293,7 @@ gvcord = pres SKIP = 0/2;2 scale = 0 !5/0 !5/0 !-1 gdpfun = sm5s(mag(kntv(wnd))//jet!sm5s(div(wnd)//dvg!dvg !sm5s(hght) -type = c/f !c !c !c +type = c/f !c !c !c cint = 70;90;110;130;150;170 !-11;-9;-7;-5;-3;-1!2/2/100!12 line = 32/1 !20/-2/2 !3/1/2 !1//2 fint = 70;90;110;130;150;170;190! @@ -375,15 +360,15 @@ CINT = 20/70// !2/2 LINE = 32/1/2/1 !5/2/2/2 FINT = 80;90;110;130;150;170;190 !1;2;3;4;5;6;7 FLINE = 0;25;24;29;7;15;20;14 !0;23;22;21;17;16;2;1 -HILO = -HLSYM = +HILO = +HLSYM = CLRBAR = 1/v/ll !0 WIND = bk0 !am16/0.3//211/0.4!Bk9/0.75/2 -REFVEC = +REFVEC = TITLE = 1/-2/~ @ ISOTACHS AND WIND (KTS)|~200 MB WIND!0 FILTER = yes ru - + GAREA = -66;-127;14.5;-19 LATLON = 1//1/1/10 @@ -401,7 +386,7 @@ FLINE = 0;21-30;14-20;5 HILO = 31;0/x#/10-500///y HLSYM = 1.5 CLRBAR = 1/V/LL -WIND = +WIND = REFVEC = TITLE = 1/-2/~ ${MDL} 12-HR TOTAL PCPN|~12-HR TOTAL PCPN!0 r @@ -415,25 +400,26 @@ exit EOF export err=$?;err_chk + ##################################################### # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi + +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + fi fi exit diff --git a/gempak/ush/gfs_meta_sa2.sh b/gempak/ush/gfs_meta_sa2.sh index de4b7775da..c144173ee3 100755 --- a/gempak/ush/gfs_meta_sa2.sh +++ b/gempak/ush/gfs_meta_sa2.sh @@ -1,27 +1,27 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : ukmet_gfs_meta_sa2.sh # -# Creates several South American gfs charts, including 500mb and psml +# Creates several South American gfs charts, including 500mb and psml # comparisons to the ecmwf and ukmet # -# Log : -# J. Carr/HPC 07/2002 Added this metafile -# J. Carr/HPC 07/2002 Gif script. -# M. Klein/HPC 11/2004 Change references to gfs from avn -# M. Klein/HPC 02/2005 Changed location of working directory to /ptmp -# A. Robson/HPC 11/01/2006 Converted to sh prior to gif'ing -# F. Achorn/NCO 11/03/2006 Changed location of working directory to $DATA from ptmp -# -# -set -x -# -echo " start with ukmet_gfs_meta_sa2.sh" -export PS4='SA2:$SECONDS + ' -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +source "${HOMEgfs}/ush/preamble.sh" + +mkdir SA2 +cd SA2 || exit 1 + -export COMPONENT=${COMPONENT:-atmos} +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export HPCGFS="${RUN}.${PDY}${cyc}" +if [[ ! -L ${HPCGFS} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${HPCGFS}" +fi mdl=gfs MDL=GFS @@ -34,30 +34,28 @@ device="nc | ${metaname}" # IF CYCLE IS NOT 00Z OR 06Z EXIT SCRIPT. # Also exit if run from 00z gfs # -if [ ${cyc} -eq "12" ] || [ ${cyc} -eq "18" ] -then - exit -# elif [ ${cyc} -eq "00" ] && [ $(echo $COMIN | awk -F/ '{print $5}' | awk -F. '{print $1}') = "gfs" ] -elif [ ${cyc} -eq "00" ] && [ ${mdl} = "gfs" ] -then - # don't want to run from 00z gfs +if [[ ${cyc} != "06" ]]; then exit fi -PDY2=$(echo ${PDY} | cut -c3-) -# export HPCGFS=$COMROOT/nawips/${envir}/gfs.${PDY} -export HPCGFS=${COMINgempak}/${mdl}.${PDY}/${cyc}/${COMPONENT}/gempak - -grid1="F-GFSHPC | ${PDY2}/${cyc}00" +grid1="F-GFSHPC | ${PDY:2}/${cyc}00" # DEFINE YESTERDAY -PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) -PDY2m1=$(echo ${PDYm1} | cut -c 3-) +PDYm1="$(date --utc +%Y%m%d -d "${PDY} ${cyc} - 24 hours")" + +HPCECMWF="ecmwf.${PDYm1}" +HPCUKMET="ukmet.${PDY}" +if [[ ! -L "${HPCECMWF}" ]]; then + ln -sf "${COMINecmwf}/ecmwf.${PDYm1}/gempak" "${HPCECMWF}" +fi +if [[ ! -L "${HPCUKMET}" ]]; then + ln -sf "${COMINukmet}/ukmet.${PDY}/gempak" "${HPCUKMET}" +fi -$GEMEXE/gdplot2_nc << EOF +"${GEMEXE}/gdplot2_nc" << EOF \$MAPFIL= mepowo.gsf GDFILE = ${grid1} -GDATTIM = F000-F144-12 +GDATTIM = F000-F144-12 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -83,8 +81,8 @@ FLINE = HILO = !!26;2/H#;L#/1020-1070;900-1012//30;30/y HLSYM = 1.3;1.3//21//hw CLRBAR = 1 -WIND = ! ! -REFVEC = +WIND = ! ! +REFVEC = TITLE = 1/-2/~ ? ${MDL} MSLP, 1000-500mb THICK|~MSLP, 1000-500 THKN! l ru @@ -100,7 +98,7 @@ LINE = 7/5/1/2 !29/5/1/2!7/5/1/2 !29/5/1/2 !20/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! !2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 WIND = 0 REFVEC = @@ -123,8 +121,8 @@ FLINE = 0!0;23;24;25;30;29;28;27 !11;12;2;10;15;14;13;0 HILO = 0!0!0!5/H#;L# HLSYM = 0!!1.0//21//hw!1.5 CLRBAR = 0!0!1!0 -WIND = -REFVEC = +WIND = +REFVEC = TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ${MDL} @ MB 24-HR HGT FALLS!0 TEXT = 1/21////hw CLEAR = YES @@ -135,7 +133,7 @@ GDATTIM = f060 GDPFUN = sm5s(hght)!(sub(hght^f60,hght^f36))!(sub(hght^f60,hght^f36))!sm5s(hght) TITLE = 1/-1/~ ? ${MDL} @ MB HGT|~500 HGT CHG!1/-2/~ ${MDL} @ MB 24-HR HGT FALLS!0 l -run +run GDATTIM = f084 GDPFUN = sm5s(hght)!(sub(hght^f84,hght^f60))!(sub(hght^f84,hght^f60))!sm5s(hght) @@ -201,27 +199,17 @@ ru ex EOF -if [ ${cyc} -eq "00" ]; then - times="012 036 060 084 108 132" -else - times="006 030 054 078 102 126" -fi - -for gfsfhr in $(echo ${times}) -do - if [ ${cyc} == "06" ]; then - ecmwffhr="F$(expr ${gfsfhr} + 18)" +for fhr in $(seq -s ' ' 6 24 126); do + gfsfhr="F$(printf "%03g" "${fhr}")" + if (( fhr < 100 )); then + offset=6 else - ecmwffhr="F$(expr ${gfsfhr} + 12)" + offset=18 fi - while [ $(expr length $ecmwffhr) -lt 3 ] - do - ecmwffhr="F0$(expr ${gfsfhr} + 6)" - done - gfsfhr="F${gfsfhr}" - grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" - -$GEMEXE/gdplot2_nc << EOF10 + ecmwffhr="F$(printf "%03g" $((fhr + offset)))" + grid2="${HPCECMWF}/ecmwf_glob_${PDYm1}12" + + "${GEMEXE}/gdplot2_nc" << EOF10 \$MAPFIL = mepowo.gsf GDFILE = ${grid1} !${grid2} GDATTIM = ${gfsfhr}!${ecmwffhr} @@ -236,20 +224,20 @@ PROJ = mer//3;3;0;1 GAREA = -71;-135;20;-20 LATLON = 18//1/1/10 -GLEVEL = 500 -GVCORD = PRES -PANEL = 0 -SKIP = 0 -SCALE = -1 -GDPFUN = sm5s(hght)!sm5s(hght) -TYPE = c -CONTUR = 1 -CINT = 6 -FINT = -FLINE = -HLSYM = -WIND = -REFVEC = +GLEVEL = 500 +GVCORD = PRES +PANEL = 0 +SKIP = 0 +SCALE = -1 +GDPFUN = sm5s(hght)!sm5s(hght) +TYPE = c +CONTUR = 1 +CINT = 6 +FINT = +FLINE = +HLSYM = +WIND = +REFVEC = LINE = 31//2!2//2 HILO = 31/H#;L#//5/5;5/y!2/H#;L#//5/5;5/y TITLE = 31/-1/~ ? ${MDL} @ HGHT (WHITE)|~EC VS ${MDL} 500!2/-2/~ ? ECMWF 500 HGHT (RED) @@ -258,20 +246,20 @@ r GLEVEL = 0 GVCORD = none -PANEL = 0 -SKIP = 0 +PANEL = 0 +SKIP = 0 SCALE = 0 GDPFUN = (pmsl)!(pmsl) -TYPE = c -CONTUR = 7 -CINT = 4 -FINT = -FLINE = -HLSYM = 1.5;1.5//21//hw -CLRBAR = 1 -WIND = -REFVEC = -TEXT = 1/21//hw +TYPE = c +CONTUR = 7 +CINT = 4 +FINT = +FLINE = +HLSYM = 1.5;1.5//21//hw +CLRBAR = 1 +WIND = +REFVEC = +TEXT = 1/21//hw CLEAR = yes GDFILE = ${grid1}!${grid2} GDATTIM = ${gfsfhr}!${ecmwffhr} @@ -285,27 +273,12 @@ ex EOF10 done -if [ ${cyc} -eq "00" ]; then - times="000 012 024 036 048 060 072 096 120 144" -elif [ ${cyc} -eq "06" ]; then - times="006 018 030 042 054 066 090 114 138" -fi - -for gfsfhr in $(echo ${times}) -do - if [ ${cyc} -eq "06" ]; then - ukmetfhr="$(expr ${gfsfhr} + 6)" - while [ $(expr length $ukmetfhr) -lt 3 ] - do - ukmetfhr="0$(expr ${gfsfhr} + 6)" - done - else - ukmetfhr=${gfsfhr} - fi - gfsfhr="F${gfsfhr}" - grid3="${COMINukmet}.${PDY}/gempak/ukmet_${PDY}00f${ukmetfhr}" +for fhr in $(seq -s ' ' 6 12 138); do + gfsfhr="F$(printf "%03g" "${fhr}")" + ukmetfhr="F$(printf "%03g" $((fhr + 6)))" + grid3="${HPCUKMET}/ukmet_${PDY}00f${ukmetfhr}" -$GEMEXE/gdplot2_nc << EOF25 + "${GEMEXE}/gdplot2_nc" << EOF25 \$MAPFIL = mepowo.gsf DEVICE = ${device} PANEL = 0 @@ -313,22 +286,22 @@ TEXT = 1/21//hw CONTUR = 2 MAP = 6/1/1/yes CLEAR = yes -CLRBAR = -GLEVEL = 500 -GVCORD = PRES -PANEL = 0 -SKIP = 0 -SCALE = -1 -GDPFUN = sm5s(hght)!sm5s(hght) -TYPE = c -CONTUR = 1 -CINT = 6 -FINT = -FLINE = -HLSYM = -GVECT = -WIND = -REFVEC = +CLRBAR = +GLEVEL = 500 +GVCORD = PRES +PANEL = 0 +SKIP = 0 +SCALE = -1 +GDPFUN = sm5s(hght)!sm5s(hght) +TYPE = c +CONTUR = 1 +CINT = 6 +FINT = +FLINE = +HLSYM = +GVECT = +WIND = +REFVEC = clear = yes GDFILE = ${grid1}!${grid3} GDATTIM = ${gfsfhr}!F${ukmetfhr} @@ -340,20 +313,20 @@ r GLEVEL = 0 GVCORD = none -PANEL = 0 -SKIP = 0 +PANEL = 0 +SKIP = 0 SCALE = 0 GDPFUN = sm5s(pmsl)!sm5s(pmsl) -TYPE = c -CONTUR = 2 -CINT = 4 -FINT = -FLINE = -HLSYM = 1.5;1.5//21//hw -CLRBAR = -WIND = -REFVEC = -TEXT = 1/21//hw +TYPE = c +CONTUR = 2 +CINT = 4 +FINT = +FLINE = +HLSYM = 1.5;1.5//21//hw +CLRBAR = +WIND = +REFVEC = +TEXT = 1/21//hw CLEAR = yes GDFILE = ${grid1}!${grid3} GDATTIM = ${gfsfhr}!F${ukmetfhr} @@ -362,26 +335,31 @@ HILO = 31/H#;L#/1020-1060;900-1010/5/10;10!2/H#;L#/1020-1060;900-1010/5/10;10 TITLE = 31/-1/~ ? ${MDL} PMSL (WHITE)|~UK VS ${MDL} PMSL!2/-2/~ ? UKMET PMSL (RED) l r - + ex EOF25 done - - -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - fi - fi +export err=$?;err_chk + +##################################################### +# GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE +# WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK +# FOR THIS CASE HERE. +##################################################### +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) fi -#export COMIN=/com/nawips/${envir}/ukmet.${PDY} -echo " end with ukmet_gfs_meta_sa2.sh" +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + fi +fi exit diff --git a/gempak/ush/gfs_meta_trop.sh b/gempak/ush/gfs_meta_trop.sh index a66cb22c74..eb918eaab7 100755 --- a/gempak/ush/gfs_meta_trop.sh +++ b/gempak/ush/gfs_meta_trop.sh @@ -1,59 +1,53 @@ -#! /bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_trop.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# J. Carr/HPC/DTB 3/97 Added WPAC area -# J. Carr/HPC/DTB 4/97 Put more skipping in for winds -# J. Carr/HPC/DTB 4/97 Changed pcpn from mm to inches and added hilo -# J. Carr/HPC/DTB 5/98 Converted gdplot to gdplot2 -# J.L.Partain/MPC 5/98 Mods to make Atl prods same as GFS, MRF, ETA -# J. Carr/HPC/DTB 8/98 Changed map to medium resolution -# J. Carr/HPC 02/01 Updated script to run on IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 7/2001 Converted to a korn shell prior to delivering script -# to Production. -# J. Carr/HPC 7/2001 Submitted as a jif. -# -# B. Gordon 7/02 Converted to run off the GFS due to demise -# of the MRF. -# J. Carr/PMB 11/2004 Added a ? to all title lines. -# Changed contur from a 1 to a 2. -# Changed interval of 24-HR PCPN from 24 to 6. -# # Set Up Local Variables # -set -x + +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/TROP" +cd "${DATA}/TROP" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -export PS4='TROP:$SECONDS + ' -mkdir -p -m 775 $DATA/TROP -cd $DATA/TROP -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi mdl=gfs MDL=GFS metatype="trop" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo ${PDY} | cut -c3-) # -for a in ATL PAC WPAC -do - if [ ${a} = "ATL" ] ; then +for domain in ATL PAC WPAC; do + case ${domain} in + ATL) garea="-6;-111;52;-14" proj="MER/0.0;-49.5;0.0" - elif [ ${a} = "PAC" ] ; then + ;; + PAC) garea="0;-140;45;-75" proj="mer//3;3;0;1" - elif [ ${a} = "WPAC" ] ; then + ;; + WPAC) garea="0;90;45;180" proj="mer//3;3;0;1" - fi - -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-${MDL} | ${PDY2}/${cyc}00 + ;; + *) + echo "FATAL ERROR: Unknown domain in ${BASH_SOURCE[0]}" + exit 100 + esac + + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-${MDL} | ${PDY:2}/${cyc}00 GDATTIM = F00-F180-12 DEVICE = ${device} PANEL = 0 @@ -83,7 +77,7 @@ HLSYM = 0!1;1//22;22/3;3/hw CLRBAR = 1/V/LL!0 WIND = bk0!bk0!bk9/.8/1.4/112 REFVEC = -TITLE = 1/-2/~ ? ${MDL} PMSL, BL WIND (40m AGL; KTS)|~${a} PMSL & BL WIND!0 +TITLE = 1/-2/~ ? ${MDL} PMSL, BL WIND (40m AGL; KTS)|~${domain} PMSL & BL WIND!0 r GLEVEL = 850 @@ -95,7 +89,7 @@ LINE = 29/5/1/2 !7/5/1/2 HILO = 2;6/X;N/-99--4;4-99 ! SCALE = 5 !5 WIND = bk0 !bk0 !bk6/.8/2/112!0 -TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${a} @ WIND AND REL VORT!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${domain} @ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 TYPE = c/f!c!b @@ -110,14 +104,14 @@ HILO = 2;6/X;N/-99--4;4-99! !6/L#/880-1004///1 HLSYM = 1;1//22;22/3;3/hw SCALE = 5 !5 !0 WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 -TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${a} @ WIND AND REL VORT!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${domain} @ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 r GLEVEL = 700 GDPFUN = vor(wnd) !vor(wnd)!kntv(wnd) -TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${a} @ WIND AND REL VORT!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${domain} @ WIND AND REL VORT!0 GLEVEL = 700!700!0!700 GVCORD = pres!pres!none!pres @@ -128,7 +122,7 @@ HILO = 2;6/X;N/-99--4;4-99! !6/L#/880-1004///1 HLSYM = 1;1//22;22/3;3/hw SCALE = 5 !5 !0 WIND = bk0 !bk0 !bk0 !bk9/.8/1.4/112 -TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${a} @ WIND AND REL VORT!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND AND REL VORT|~${domain} @ WIND AND REL VORT!0 FINT = 4;6;8;10;12;14;16;18 FLINE = 0;14-21 TYPE = c/f !c !c !b @@ -145,11 +139,11 @@ LINE = 7/5/1/2 ! 29/5/1/2 ! 7/5/1/2 ! 29/5/1/2 ! 20/1/2/1 FINT = 16;20;24;28;32;36;40;44 FLINE = 0;23-15 HILO = 2;6/X;N/10-99;10-99! !2;6/X;N/10-99;10-99! ! -HLSYM = +HLSYM = CLRBAR = 1 -WIND = bk0!bk0!bk0!bk0!bk0!bk9/0.9/1.4/112!0 +WIND = bk0!bk0!bk0!bk0!bk0!bk9/0.9/1.4/112!0 REFVEC = -TITLE = 1/-2/~ ? ${MDL} @ WIND AND ABS VORT|~${a} @ WIND AND ABS VORT!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND AND ABS VORT|~${domain} @ WIND AND ABS VORT!0 r GLEVEL = 300:850 !850 !300 @@ -167,9 +161,9 @@ HLSYM = CLRBAR = 1 WIND = ak0!ak7/.4/1/221/.2!ak6/.4/1/221/.2 REFVEC = -TITLE = 1/-2/~ ? ${MDL} @ WIND SHEAR (850=Purple, 300=Cyan) |~${a} 850-300MB WIND SHEAR!0 +TITLE = 1/-2/~ ? ${MDL} @ WIND SHEAR (850=Purple, 300=Cyan) |~${domain} 850-300MB WIND SHEAR!0 filter = no - + glevel = 250!250 gvcord = pres!pres @@ -187,7 +181,7 @@ hlsym = 0!0!0!0 clrbar = 0!0!1/V/LL!0 wind = bk0!bk0!bk0!bk0!bk9/.9/1.4/112 refvec = 10 -title = 1/-2/~ ? ${MDL} @ HGHTS, ISOTACHS, & DIVERG|~${a} @ SPEED & DIVERG!0 +title = 1/-2/~ ? ${MDL} @ HGHTS, ISOTACHS, & DIVERG|~${domain} @ SPEED & DIVERG!0 r glevel = 400:850!0 @@ -205,8 +199,8 @@ hlsym = 0!2;1.5//21//hw clrbar = 0 wind = bk10/0.9/1.4/112!bk0 refvec = -title = 1/-2/~ ? ${MDL} 850-400mb MLW and MSLP|~${a} 850-400mb MLW & MSLP!0 - +title = 1/-2/~ ? ${MDL} 850-400mb MLW and MSLP|~${domain} 850-400mb MLW & MSLP!0 + GDATTIM = F24-F144-06 GLEVEL = 0 @@ -214,7 +208,7 @@ GVCORD = none SKIP = 0 SCALE = 0 GDPFUN = p24i -TYPE = f +TYPE = f CINT = 0 LINE = 0 FINT = .01;.1;.25;.5;.75;1;1.25;1.5;1.75;2;2.25;2.5;2.75;3;3.25;3.5;3.75;4 @@ -222,14 +216,14 @@ FLINE = 0;21-30;14-20;5 HILO = 31;0/x#2/.10-8.0///y HLSYM = 1.4//22/2/hw CLRBAR = 1/V/LL -WIND = +WIND = REFVEC = -TITLE = 1/-2/~ ${MDL} 24-HR TOTAL PCPN|~${a} 24-HR TOTAL PCPN!0 +TITLE = 1/-2/~ ${MDL} 24-HR TOTAL PCPN|~${domain} 24-HR TOTAL PCPN!0 r exit EOF -export err=$?;err_chk + export err=$?;err_chk done @@ -238,21 +232,20 @@ done # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk +if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) +fi -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + if [[ "${DBN_ALERT_TYPE}" == "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/${mdl}_${PDY}_${cyc}_${metatype} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/${mdl}_${PDY}_${cyc}_${metatype}" + fi fi - exit diff --git a/gempak/ush/gfs_meta_us.sh b/gempak/ush/gfs_meta_us.sh index f3c6cd0692..b8c9e17a22 100755 --- a/gempak/ush/gfs_meta_us.sh +++ b/gempak/ush/gfs_meta_us.sh @@ -1,45 +1,40 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_us.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# D.W.Plummer/NCEP 3/97 Added ecmwf comparison. -# D.W.Plummer/NCEP 3/97 Added $MAPFIL specification for lower resolution -# D.W.Plummer/NCEP 4/97 Removed run from 3-HOURLY PRECIP -# J. Carr/HPC 2/99 Changed skip to 0 -# B. Gordon/NCO 5/00 Modified for production on IBM-SP -# Changed gdplot_nc -> gdplot2_nc -# D. Michaud/NCO 4/01 Modified to Reflect Different Title for -# Parallel runs -# J. Carr/PMB 11/04 Added a ? to all title lines -# Changed contur from a 1 to a 2. -# -cd $DATA -set -xa +source "${HOMEgfs}/ush/preamble.sh" + +cd "${DATA}" || exit 2 +rm -rf "${DATA}/us" +mkdir -p -m 775 "${DATA}/us" +cd "${DATA}/us" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl -rm -rf $DATA/us -mkdir -p -m 775 $DATA/us -cd $DATA/us -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi device="nc | gfs.meta" -PDY2=$(echo $PDY | cut -c3-) export fend=F216 -if [ "$envir" = "para" ] ; then +if [[ "${envir}" == "para" ]] ; then export m_title="GFSP" else export m_title="GFS" fi export pgm=gdplot2_nc;. prep_step -startmsg -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-GFS | ${PDY2}/${cyc}00 -GDATTIM = F00-$fend-6 + +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-GFS | ${PDY:2}/${cyc}00 +GDATTIM = F00-${fend}-6 DEVICE = ${device} PANEL = 0 TEXT = 1/21//hw @@ -57,7 +52,7 @@ restore ${HOMEgfs}/gempak/ush/restore/pmsl_thkn.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 +TITLE = 5/-2/~ ? ${m_title} PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 l run @@ -66,7 +61,7 @@ restore ${HOMEgfs}/gempak/ush/restore/850mb_hght_tmpc.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 l run @@ -75,7 +70,7 @@ restore ${HOMEgfs}/gempak/ush/restore/700mb_hght_relh_omeg.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 l run @@ -84,7 +79,7 @@ restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_absv.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 l run @@ -93,41 +88,42 @@ restore ${HOMEgfs}/gempak/ush/restore/250mb_hght_wnd.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 5/-2/~ ? $m_title @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 +TITLE = 5/-2/~ ? ${m_title} @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 l run - + + restore ${HOMEgfs}/gempak/ush/restore/p06m_pmsl.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -GDATTIM = F06-$fend-6 -TITLE = 5/-2/~ ? $m_title 6-HR TOTAL PCPN, MSLP|~6-HR TOTAL PCPN, MSLP!0 +GDATTIM = F06-${fend}-6 +TITLE = 5/-2/~ ? ${m_title} 6-HR TOTAL PCPN, MSLP|~6-HR TOTAL PCPN, MSLP!0 l run HILO = 31;0/x#2////y HLSYM = 1.5 -GDATTIM = F12-$fend-06 -GDPFUN = p12i -TITLE = 5/-2/~ ? $m_title 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN +GDATTIM = F12-${fend}-06 +GDPFUN = p12i +TITLE = 5/-2/~ ? ${m_title} 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN l run -GDATTIM = F24-$fend-06 -GDPFUN = p24i -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN +GDATTIM = F24-${fend}-06 +GDPFUN = p24i +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN l run GDATTIM = F72;f78;f84 -GDPFUN = p72i -TITLE = 5/-2/~ ? $m_title 72-HR TOTAL PCPN(IN)|~72-HR TOTAL PCPN +GDPFUN = p72i +TITLE = 5/-2/~ ? ${m_title} 72-HR TOTAL PCPN(IN)|~72-HR TOTAL PCPN l run @@ -135,18 +131,18 @@ run GAREA = 26.52;-119.70;50.21;-90.42 PROJ = str/90;-105;0/3;3;0;1 MAP = 1//2 -GDATTIM = F24-$fend-06 -GDPFUN = p24i -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN (IN)|~WEST: 24-HR PCPN +GDATTIM = F24-${fend}-06 +GDPFUN = p24i +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN (IN)|~WEST: 24-HR PCPN l GAREA = 24.57;-100.55;47.20;-65.42 PROJ = str/90;-90;0/3;3;0;1 MAP = 1//2 -GDATTIM = F24-$fend-06 -GDPFUN = p24i -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN (IN)|~EAST: 24-HR PCPN +GDATTIM = F24-${fend}-06 +GDPFUN = p24i +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN (IN)|~EAST: 24-HR PCPN l exit @@ -158,24 +154,23 @@ export err=$?;err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l gfs.meta -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk - - -if [ $SENDCOM = "YES" ] ; then - mv gfs.meta ${COMOUT}/gfs_${PDY}_${cyc}_us - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_us - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_us +if (( err != 0 )) || [[ ! -s gfs.meta ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file gfs.meta" + exit $(( err + 100 )) +fi + +mv gfs.meta "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_us" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_us" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_us" fi - if [ $fhr -eq 216 ] ; then - ${DBNROOT}/bin/dbn_alert MODEL GFS_METAFILE_LAST $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_us + if (( fhr == 216 )) ; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_METAFILE_LAST "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_us" fi - fi fi diff --git a/gempak/ush/gfs_meta_usext.sh b/gempak/ush/gfs_meta_usext.sh index 59b1ce5bab..5f0e930cdb 100755 --- a/gempak/ush/gfs_meta_usext.sh +++ b/gempak/ush/gfs_meta_usext.sh @@ -1,63 +1,48 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_usext.sh # -# Log : -# D.W.Plummer/NCEP 2/97 Add log header -# D.W.Plummer/NCEP 3/97 Add ecmwf comparison. -# D.W.Plummer/NCEP 3/97 Added $MAPFIL specification for lower resolution -# D.W.Plummer/NCEP 4/97 Changed SKIP for grid2 -# D.W.Plummer/NCEP 4/97 Changed gdplot to gdplot2 and related restore files -# D.W.Plummer/NCEP 4/97 Changed NAOP to NAOP w/ .us suffix -# D.W.Plummer/NCEP 1/98 Added 12hr 2m min and max temps out to day 6 and 7 -# J.L.Partain/MPC 8/98 Added latlon lines -# J. Carr/HPC 2/99 Changed skip to a 0 -# J. Carr/HPC 4/2000 Changed the Alaska 5-day pcpn to a 3-5 day pcpn -# Added other pcpn products for the medium range fcstrs. -# B. Gordon/NCO 4/00 Converted to run as production on the IBM-SP -# D. Michaud/NCO 4/01 Added logic to display different title for parallel -# runs. -# B. Gordon 7/02 Converted to run off the GFS due to demise -# of the MRF. -# J. Carr/PMB 11/04 Added a ? to title lines. -# Changed contur from a 1 to a 2. -# Changed increment in gdattim to every 6 hrs instead of 12. -# Added 3 new products for HPC medium range. (2 48-hr qpf and 1 5 day qpf) -# M. Klein/HPC 01/10 Add boundary layer winds/isotachs to the metafile for CPC. -# -set -xa -mkdir -p -m 775 $DATA/mrfus -cd $DATA/mrfus -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -device="nc | mrf.meta" +source "${HOMEgfs}/ush/preamble.sh" -#XXW cp ${HOMEgfs}/gempak/fix/model/gfs/ak_sfstns.tbl alaska.tbl -cp ${HOMEgfs}/gempak/fix/ak_sfstns.tbl alaska.tbl +mkdir -p -m 775 "${DATA}/mrfus" +cd "${DATA}/mrfus" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl +cp "${HOMEgfs}/gempak/fix/ak_sfstns.tbl" alaska.tbl -month=$(echo $PDY | cut -c5,6) -if [ $month -ge 5 -a $month -le 9 ] ; then -# fint="40;45;50;55;60;65;70;75;80;85;90;95;100" -# fline="26;25;24;23;22;21;20;19;18;17;16;15;14;31" - fint="60;65;70;75;80;85;90;95;100;105;110;115;120" - fline="26;25;24;23;22;21;20;19;18;17;16;15;14;31" -else - fint="-5;0;5;10;15;20;25;30;35;40;45;50;55;60;65;70;75;80" - fline="4;30;29;28;27;26;25;24;23;22;21;20;19;18;17;16;15;14;31" +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this +# +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" fi -PDY2=$(echo $PDY | cut -c3-) +device="nc | mrf.meta" -if [ "$envir" = "para" ] ; then +# Not being used? +# case $(( 10#${PDY:4:2} )) in +# [5-9]) +# fint="60;65;70;75;80;85;90;95;100;105;110;115;120" +# fline="26;25;24;23;22;21;20;19;18;17;16;15;14;31" +# ;; +# *) +# fint="-5;0;5;10;15;20;25;30;35;40;45;50;55;60;65;70;75;80" +# fline="4;30;29;28;27;26;25;24;23;22;21;20;19;18;17;16;15;14;31" +# ;; +# esac + +if [[ "${envir}" = "para" ]] ; then export m_title="GFSP" else export m_title="GFS" fi -export pgm=gdplot2_nc; prep_step; startmsg +export pgm=gdplot2_nc; prep_step -$GEMEXE/gdplot2_nc << EOF -GDFILE = F-GFS | ${PDY2}/${cyc}00 +"${GEMEXE}/gdplot2_nc" << EOF +GDFILE = F-GFS | ${PDY:2}/${cyc}00 GDATTIM = F000-F384-06 DEVICE = ${device} PANEL = 0 @@ -75,42 +60,42 @@ restore ${HOMEgfs}/gempak/ush/restore/pmsl_thkn.2.nts CLRBAR = 1 HLSYM = 2;1.5//21//hw TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 +TITLE = 1/-2/~ ? ${m_title} PMSL, 1000-500 MB THICKNESS|~MSLP, 1000-500 THKN!0 l run restore ${HOMEgfs}/gempak/ush/restore/850mb_hght_tmpc.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 +TITLE = 1/-2/~ ? ${m_title} @ HGT, TEMPERATURE AND WIND (KTS)|~@ HGT, TMP, WIND!0 l run restore ${HOMEgfs}/gempak/ush/restore/700mb_hght_relh_omeg.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 +TITLE = 1/-2/~ ? ${m_title} @ HGT, REL HUMIDITY AND OMEGA|~@ HGT, RH AND OMEGA!0 l run restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_absv.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 +TITLE = 1/-2/~ ? ${m_title} @ HGT AND VORTICITY|~@ HGT AND VORTICITY!0 l run restore ${HOMEgfs}/gempak/ush/restore/500mb_hght_gabsv.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title @ HGT AND GEO ABS VORT|~@ HGT, GEO ABS VORT!0 +TITLE = 1/-2/~ ? ${m_title} @ HGT AND GEO ABS VORT|~@ HGT, GEO ABS VORT!0 l run restore ${HOMEgfs}/gempak/ush/restore/250mb_hght_wnd.2.nts CLRBAR = 1 TEXT = 1/21//hw -TITLE = 1/-2/~ ? $m_title @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 +TITLE = 1/-2/~ ? ${m_title} @ HGT, ISOTACHS AND WIND (KTS)|~@ HGT AND WIND!0 l run @@ -131,7 +116,7 @@ HLSYM = CLRBAR = 1/V/LL!0 WIND = bk18/0.8/1/112 REFVEC = -TITLE = 1/-2/~ ? $m_title BOUNDARY LAYER WINDS (KTS) AND ISOTACHS|~BL WIND, ISOTACHS !0 +TITLE = 1/-2/~ ? ${m_title} BOUNDARY LAYER WINDS (KTS) AND ISOTACHS|~BL WIND, ISOTACHS !0 TEXT = 1/21//hw CLEAR = YES l @@ -144,13 +129,13 @@ HILO = 31;0/x#2/.25-10///y HLSYM = 1.5 GDATTIM = F12-F384-6 GDPFUN = p12i -TITLE = 1/-2/~ ? $m_title 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN +TITLE = 1/-2/~ ? ${m_title} 12-HR TOTAL PCPN (IN)|~12-HR TOTAL PCPN l run GDATTIM = F24-F384-6 GDPFUN = p24i -TITLE = 5/-2/~ ? $m_title 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN +TITLE = 5/-2/~ ? ${m_title} 24-HR TOTAL PCPN (IN)|~24-HR TOTAL PCPN l run @@ -158,34 +143,34 @@ GDATTIM = F84 wind = bk0 gvcord = none type = f -cint = -line = +cint = +line = clrbar = 1/V/LL fint = .01;.1;.25;.5;.75;1;1.5;2;2.5;3;4;5;6;7;8;9;10 fline = 0;21-30;14-20;5 glevel = 0 scale = 0 gdpfun = p72i -refvec = -title = 1/-2/~ ? $m_title 3-day (F12-F84) PCPN|~DAY 1-3 (F12-F84) PCPN +refvec = +title = 1/-2/~ ? ${m_title} 3-day (F12-F84) PCPN|~DAY 1-3 (F12-F84) PCPN l run GDATTIM = F108 gdpfun = p96i -title = 1/-2/~ ? $m_title 4-day (F12-F120) PCPN|~DAY 1-4 (F12-F108) PCPN +title = 1/-2/~ ? ${m_title} 4-day (F12-F120) PCPN|~DAY 1-4 (F12-F108) PCPN l run GDATTIM = F132 -gdpfun = p120i -title = 1/-2/~ ? $m_title 5-day (F12-F132) PCPN|~DAY 1-5 (F12-F132) PCPN +gdpfun = p120i +title = 1/-2/~ ? ${m_title} 5-day (F12-F132) PCPN|~DAY 1-5 (F12-F132) PCPN l run GDATTIM = F132 gdpfun = p48i -title = 1/-2/~ ? $m_title 2-day (F84-F132) PCPN|~DAY 4-5 (F84-F132) PCPN +title = 1/-2/~ ? ${m_title} 2-day (F84-F132) PCPN|~DAY 4-5 (F84-F132) PCPN l run @@ -193,7 +178,7 @@ run GDATTIM = F126 gdpfun = p120i -title = 1/-2/~ ? $m_title 5-day (F06-F126) PCPN|~DAY 1-5 (F06-F126) PCPN +title = 1/-2/~ ? ${m_title} 5-day (F06-F126) PCPN|~DAY 1-5 (F06-F126) PCPN l run @@ -201,7 +186,7 @@ run GDATTIM = F126 gdpfun = p48i -title = 1/-2/~ ? $m_title 2-day (F78-F126) PCPN|~DAY 4-5 (F78-F126) PCPN +title = 1/-2/~ ? ${m_title} 2-day (F78-F126) PCPN|~DAY 4-5 (F78-F126) PCPN l run @@ -209,13 +194,13 @@ run GDATTIM = F138 gdpfun = p48i -title = 1/-2/~ ? $m_title 2-day (F90-F138) PCPN|~DAY 4-5 (F90-F138) PCPN +title = 1/-2/~ ? ${m_title} 2-day (F90-F138) PCPN|~DAY 4-5 (F90-F138) PCPN l run GDATTIM = F156 gdpfun = p72i -title = 1/-2/~ ? $m_title 3-day (F84-F156) PCPN|~DAY 4-6 (F84-F156) PCPN +title = 1/-2/~ ? ${m_title} 3-day (F84-F156) PCPN|~DAY 4-6 (F84-F156) PCPN l run @@ -225,7 +210,7 @@ PROJ = mer//3;3;0;1 STNPLT = 5|5/1//2|alaska.tbl gdattim = f144 gdpfun = p72i -title = 1/-2/~ ? $m_title 3-day (F72-F144) PCPN|~AK 3-DAY(F72-F144) PCPN +title = 1/-2/~ ? ${m_title} 3-day (F72-F144) PCPN|~AK 3-DAY(F72-F144) PCPN l run @@ -240,21 +225,18 @@ export err=$?; err_chk # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK # FOR THIS CASE HERE. ##################################################### -ls -l mrf.meta -export err=$?;export pgm="GEMPAK CHECK FILE"; err_chk - -if [ $SENDCOM = "YES" ] ; then - mv mrf.meta ${COMOUT}/gfs_${PDY}_${cyc}_usext - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/gfs_${PDY}_${cyc}_usext - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then - DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfs_${PDY}_${cyc}_usext - fi - fi +if (( err != 0 )) || [[ ! -s mrf.meta ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file mrf.meta" + exit $(( err + 100 )) fi -# - +mv mrf.meta "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_usext" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_usext" + if [[ ${DBN_ALERT_TYPE} == "GFS_METAFILE_LAST" ]] ; then + DBN_ALERT_TYPE=GFS_METAFILE + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfs_${PDY}_${cyc}_usext" + fi +fi diff --git a/gempak/ush/gfs_meta_ver.sh b/gempak/ush/gfs_meta_ver.sh index 89a413952e..1c03bad235 100755 --- a/gempak/ush/gfs_meta_ver.sh +++ b/gempak/ush/gfs_meta_ver.sh @@ -1,372 +1,68 @@ -#!/bin/sh +#! /usr/bin/env bash # # Metafile Script : gfs_meta_ver_new # -# Log : -# J. Carr/HPC 1/98 Added new metafile -# J. Carr/HPC 5/98 Converted to gdplot2 -# J. Carr/HPC 8/98 Changed map to medium resolution -# J. Carr/HPC 2/99 Changed skip to 0 -# J. Carr/HPC 6/99 Added latlon and a filter to map -# J. Carr/HPC 7/99 Added South American area. -# J. Carr/HPC 2/2001 Edited to run on the IBM. -# J. Carr/HPC 5/2001 Added a mn variable for a/b side dbnet root variable. -# J. Carr/HPC 8/2001 Changed to a korn shell for turnover to production. -# J. Carr/HPC 8/2001 Submitted. -# J. Carr/PMB 11/2004 Inserted a ? into all title/TITLE lines. -# Changed contur from 1 to a 2. -# Added logic to take the script from f126 to f228. -# This will remove need for mrfver. -# Removed logic which differentiated cycles since all cycles run to F384. -# Added a South American area for International desk. -# # Set up Local Variables # -set -x -export PS4='VER:$SECONDS + ' -mkdir -p -m 775 $DATA/VER -cd $DATA/VER -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl -export COMPONENT=${COMPONENT:-atmos} +source "${HOMEgfs}/ush/preamble.sh" + +mkdir -p -m 775 "${DATA}/VER" +cd "${DATA}/VER" || exit 2 +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl -mdl=gfs MDL=GFS -metatype="ver" metaname="gfsver_${cyc}.meta" device="nc | ${metaname}" -PDY2=$(echo ${PDY} | cut -c3-) + +# +# Link data into DATA to sidestep gempak path limits +# TODO: Replace this # -# DEFINE 1 CYCLE AGO -dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) -date1=$(echo ${dc1} | cut -c -8) -sdate1=$(echo ${dc1} | cut -c 3-8) -cycle1=$(echo ${dc1} | cut -c 9,10) -# DEFINE 2 CYCLES AGO -dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) -date2=$(echo ${dc2} | cut -c -8) -sdate2=$(echo ${dc2} | cut -c 3-8) -cycle2=$(echo ${dc2} | cut -c 9,10) -# DEFINE 3 CYCLES AGO -dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) -date3=$(echo ${dc3} | cut -c -8) -sdate3=$(echo ${dc3} | cut -c 3-8) -cycle3=$(echo ${dc3} | cut -c 9,10) -# DEFINE 4 CYCLES AGO -dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) -date4=$(echo ${dc4} | cut -c -8) -sdate4=$(echo ${dc4} | cut -c 3-8) -cycle4=$(echo ${dc4} | cut -c 9,10) -# DEFINE 5 CYCLES AGO -dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) -date5=$(echo ${dc5} | cut -c -8) -sdate5=$(echo ${dc5} | cut -c 3-8) -cycle5=$(echo ${dc5} | cut -c 9,10) -# DEFINE 6 CYCLES AGO -dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) -date6=$(echo ${dc6} | cut -c -8) -sdate6=$(echo ${dc6} | cut -c 3-8) -cycle6=$(echo ${dc6} | cut -c 9,10) -# DEFINE 7 CYCLES AGO -dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) -date7=$(echo ${dc7} | cut -c -8) -sdate7=$(echo ${dc7} | cut -c 3-8) -cycle7=$(echo ${dc7} | cut -c 9,10) -# DEFINE 8 CYCLES AGO -dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) -date8=$(echo ${dc8} | cut -c -8) -sdate8=$(echo ${dc8} | cut -c 3-8) -cycle8=$(echo ${dc8} | cut -c 9,10) -# DEFINE 9 CYCLES AGO -dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) -date9=$(echo ${dc9} | cut -c -8) -sdate9=$(echo ${dc9} | cut -c 3-8) -cycle9=$(echo ${dc9} | cut -c 9,10) -# DEFINE 10 CYCLES AGO -dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) -date10=$(echo ${dc10} | cut -c -8) -sdate10=$(echo ${dc10} | cut -c 3-8) -cycle10=$(echo ${dc10} | cut -c 9,10) -# DEFINE 11 CYCLES AGO -dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) -date11=$(echo ${dc11} | cut -c -8) -sdate11=$(echo ${dc11} | cut -c 3-8) -cycle11=$(echo ${dc11} | cut -c 9,10) -# DEFINE 12 CYCLES AGO -dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) -date12=$(echo ${dc12} | cut -c -8) -sdate12=$(echo ${dc12} | cut -c 3-8) -cycle12=$(echo ${dc12} | cut -c 9,10) -# DEFINE 13 CYCLES AGO -dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) -date13=$(echo ${dc13} | cut -c -8) -sdate13=$(echo ${dc13} | cut -c 3-8) -cycle13=$(echo ${dc13} | cut -c 9,10) -# DEFINE 14 CYCLES AGO -dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) -date14=$(echo ${dc14} | cut -c -8) -sdate14=$(echo ${dc14} | cut -c 3-8) -cycle14=$(echo ${dc14} | cut -c 9,10) -# DEFINE 15 CYCLES AGO -dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) -date15=$(echo ${dc15} | cut -c -8) -sdate15=$(echo ${dc15} | cut -c 3-8) -cycle15=$(echo ${dc15} | cut -c 9,10) -# DEFINE 16 CYCLES AGO -dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) -date16=$(echo ${dc16} | cut -c -8) -sdate16=$(echo ${dc16} | cut -c 3-8) -cycle16=$(echo ${dc16} | cut -c 9,10) -# DEFINE 17 CYCLES AGO -dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) -date17=$(echo ${dc17} | cut -c -8) -sdate17=$(echo ${dc17} | cut -c 3-8) -cycle17=$(echo ${dc17} | cut -c 9,10) -# DEFINE 18 CYCLES AGO -dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) -date18=$(echo ${dc18} | cut -c -8) -sdate18=$(echo ${dc18} | cut -c 3-8) -cycle18=$(echo ${dc18} | cut -c 9,10) -# DEFINE 19 CYCLES AGO -dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) -date19=$(echo ${dc19} | cut -c -8) -sdate19=$(echo ${dc19} | cut -c 3-8) -cycle19=$(echo ${dc19} | cut -c 9,10) -# DEFINE 20 CYCLES AGO -dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) -date20=$(echo ${dc20} | cut -c -8) -sdate20=$(echo ${dc20} | cut -c 3-8) -cycle20=$(echo ${dc20} | cut -c 9,10) -# DEFINE 21 CYCLES AGO -dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) -date21=$(echo ${dc21} | cut -c -8) -sdate21=$(echo ${dc21} | cut -c 3-8) -cycle21=$(echo ${dc21} | cut -c 9,10) -# DEFINE 22 CYCLES AGO -dc22=$($NDATE -132 ${PDY}${cyc} | cut -c -10) -date22=$(echo ${dc22} | cut -c -8) -sdate22=$(echo ${dc22} | cut -c 3-8) -cycle22=$(echo ${dc22} | cut -c 9,10) -# DEFINE 23 CYCLES AGO -dc23=$($NDATE -138 ${PDY}${cyc} | cut -c -10) -date23=$(echo ${dc23} | cut -c -8) -sdate23=$(echo ${dc23} | cut -c 3-8) -cycle23=$(echo ${dc23} | cut -c 9,10) -# DEFINE 24 CYCLES AGO -dc24=$($NDATE -144 ${PDY}${cyc} | cut -c -10) -date24=$(echo ${dc24} | cut -c -8) -sdate24=$(echo ${dc24} | cut -c 3-8) -cycle24=$(echo ${dc24} | cut -c 9,10) -# DEFINE 25 CYCLES AGO -dc25=$($NDATE -150 ${PDY}${cyc} | cut -c -10) -date25=$(echo ${dc25} | cut -c -8) -sdate25=$(echo ${dc25} | cut -c 3-8) -cycle25=$(echo ${dc25} | cut -c 9,10) -# DEFINE 26 CYCLES AGO -dc26=$($NDATE -156 ${PDY}${cyc} | cut -c -10) -date26=$(echo ${dc26} | cut -c -8) -sdate26=$(echo ${dc26} | cut -c 3-8) -cycle26=$(echo ${dc26} | cut -c 9,10) -# DEFINE 27 CYCLES AGO -dc27=$($NDATE -162 ${PDY}${cyc} | cut -c -10) -date27=$(echo ${dc27} | cut -c -8) -sdate27=$(echo ${dc27} | cut -c 3-8) -cycle27=$(echo ${dc27} | cut -c 9,10) -# DEFINE 28 CYCLES AGO -dc28=$($NDATE -168 ${PDY}${cyc} | cut -c -10) -date28=$(echo ${dc28} | cut -c -8) -sdate28=$(echo ${dc28} | cut -c 3-8) -cycle28=$(echo ${dc28} | cut -c 9,10) -# DEFINE 29 CYCLES AGO -dc29=$($NDATE -174 ${PDY}${cyc} | cut -c -10) -date29=$(echo ${dc29} | cut -c -8) -sdate29=$(echo ${dc29} | cut -c 3-8) -cycle29=$(echo ${dc29} | cut -c 9,10) -# DEFINE 30 CYCLES AGO -dc30=$($NDATE -180 ${PDY}${cyc} | cut -c -10) -date30=$(echo ${dc30} | cut -c -8) -sdate30=$(echo ${dc30} | cut -c 3-8) -cycle30=$(echo ${dc30} | cut -c 9,10) -# DEFINE 31 CYCLES AGO -dc31=$($NDATE -192 ${PDY}${cyc} | cut -c -10) -date31=$(echo ${dc31} | cut -c -8) -sdate31=$(echo ${dc31} | cut -c 3-8) -cycle31=$(echo ${dc31} | cut -c 9,10) -# DEFINE 32 CYCLES AGO -dc32=$($NDATE -204 ${PDY}${cyc} | cut -c -10) -date32=$(echo ${dc32} | cut -c -8) -sdate32=$(echo ${dc32} | cut -c 3-8) -cycle32=$(echo ${dc32} | cut -c 9,10) -# DEFINE 33 CYCLES AGO -dc33=$($NDATE -216 ${PDY}${cyc} | cut -c -10) -date33=$(echo ${dc33} | cut -c -8) -sdate33=$(echo ${dc33} | cut -c 3-8) -cycle33=$(echo ${dc33} | cut -c 9,10) +export COMIN="${RUN}.${PDY}${cyc}" +if [[ ! -L ${COMIN} ]]; then + ln -sf "${COM_ATMOS_GEMPAK_1p00}" "${COMIN}" +fi # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. -vergrid="F-${MDL} | ${PDY2}/${cyc}00" +vergrid="F-${MDL} | ${PDY:2}/${cyc}00" fcsthr="f00" -# SET WHAT RUNS TO COMPARE AGAINST BASED ON MODEL CYCLE TIME. -#if [ ${cyc} -eq 00 ] ; then -# verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc16} ${dc17} ${dc18} ${dc19} ${dc20} ${dc21}" -#elif [ ${cyc} -eq 12 ] ; then -# verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc16} ${dc17} ${dc18} ${dc19} ${dc20} ${dc21}" -#else -# verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc16} ${dc17} ${dc18} ${dc19} ${dc20} ${dc21}" -#fi - -verdays="${dc1} ${dc2} ${dc3} ${dc4} ${dc5} ${dc6} ${dc7} ${dc8} ${dc9} ${dc10} ${dc11} ${dc12} ${dc13} ${dc14} ${dc15} ${dc16} ${dc17} ${dc18} ${dc19} -${dc20} ${dc21} ${dc22} ${dc23} ${dc24} ${dc25} ${dc26} ${dc27} ${dc28} ${dc29} ${dc30} ${dc31} ${dc32} ${dc33}" - - -#GENERATING THE METAFILES. MDL2="GFSHPC" -for verday in ${verdays} - do - cominday=$(echo ${verday} | cut -c -8) - #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} - # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} - export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak +#GENERATING THE METAFILES. +# seq won't give us any splitting problems, ignore warnings +# shellcheck disable=SC2207,SC2312 +IFS=$'\n' lookbacks=($(seq 6 6 180) $(seq 192 12 216)) +for lookback in "${lookbacks[@]}"; do + init_time="$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${lookback} hours")" + init_PDY=${init_time:0:8} + init_cyc=${init_time:8:2} + + if (( init_time <= ${SDATE:-0} )); then + echo "Skipping ver for ${init_time} because it is before the experiment began" + if (( lookback == "${lookbacks[0]}" )); then + echo "First forecast time, no metafile produced" + exit 0 + else + break + fi + fi + + dgdattim="f$(printf "%03g" "${lookback}")" - if [ ${verday} -eq ${dc1} ] ; then - dgdattim=f006 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle1}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate1}/${cycle1}00" - elif [ ${verday} -eq ${dc2} ] ; then - dgdattim=f012 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle2}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate2}/${cycle2}00" - elif [ ${verday} -eq ${dc3} ] ; then - dgdattim=f018 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle3}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate3}/${cycle3}00" - elif [ ${verday} -eq ${dc4} ] ; then - dgdattim=f024 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle4}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate4}/${cycle4}00" - elif [ ${verday} -eq ${dc5} ] ; then - dgdattim=f030 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle5}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate5}/${cycle5}00" - elif [ ${verday} -eq ${dc6} ] ; then - dgdattim=f036 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle6}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate6}/${cycle6}00" - elif [ ${verday} -eq ${dc7} ] ; then - dgdattim=f042 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle7}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate7}/${cycle7}00" - elif [ ${verday} -eq ${dc8} ] ; then - dgdattim=f048 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle8}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate8}/${cycle8}00" - elif [ ${verday} -eq ${dc9} ] ; then - dgdattim=f054 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle9}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate9}/${cycle9}00" - elif [ ${verday} -eq ${dc10} ] ; then - dgdattim=f060 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle10}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate10}/${cycle10}00" - elif [ ${verday} -eq ${dc11} ] ; then - dgdattim=f066 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle11}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate11}/${cycle11}00" - elif [ ${verday} -eq ${dc12} ] ; then - dgdattim=f072 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle12}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate12}/${cycle12}00" - elif [ ${verday} -eq ${dc13} ] ; then - dgdattim=f078 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle13}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate13}/${cycle13}00" - elif [ ${verday} -eq ${dc14} ] ; then - dgdattim=f084 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle14}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate14}/${cycle14}00" - elif [ ${verday} -eq ${dc15} ] ; then - dgdattim=f090 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle15}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate15}/${cycle15}00" - elif [ ${verday} -eq ${dc16} ] ; then - dgdattim=f096 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle16}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate16}/${cycle16}00" - elif [ ${verday} -eq ${dc17} ] ; then - dgdattim=f102 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle17}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate17}/${cycle17}00" - elif [ ${verday} -eq ${dc18} ] ; then - dgdattim=f108 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle18}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate18}/${cycle18}00" - elif [ ${verday} -eq ${dc19} ] ; then - dgdattim=f114 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle19}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate19}/${cycle19}00" - elif [ ${verday} -eq ${dc20} ] ; then - dgdattim=f120 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle20}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate20}/${cycle20}00" - elif [ ${verday} -eq ${dc21} ] ; then - dgdattim=f126 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle21}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate21}/${cycle21}00" - elif [ ${verday} -eq ${dc22} ] ; then - dgdattim=f132 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle22}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate22}/${cycle22}00" - elif [ ${verday} -eq ${dc23} ] ; then - dgdattim=f138 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle23}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate23}/${cycle23}00" - elif [ ${verday} -eq ${dc24} ] ; then - dgdattim=f144 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle24}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate24}/${cycle24}00" - elif [ ${verday} -eq ${dc25} ] ; then - dgdattim=f150 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle25}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate25}/${cycle25}00" - elif [ ${verday} -eq ${dc26} ] ; then - dgdattim=f156 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle26}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate26}/${cycle26}00" - elif [ ${verday} -eq ${dc27} ] ; then - dgdattim=f162 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle27}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate27}/${cycle27}00" - elif [ ${verday} -eq ${dc28} ] ; then - dgdattim=f168 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle28}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate28}/${cycle28}00" - elif [ ${verday} -eq ${dc29} ] ; then - dgdattim=f174 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle29}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate29}/${cycle29}00" - elif [ ${verday} -eq ${dc30} ] ; then - dgdattim=f180 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle30}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate30}/${cycle30}00" - elif [ ${verday} -eq ${dc31} ] ; then - dgdattim=f192 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle31}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate31}/${cycle31}00" - elif [ ${verday} -eq ${dc32} ] ; then - dgdattim=f204 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle32}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate32}/${cycle32}00" - elif [ ${verday} -eq ${dc33} ] ; then - dgdattim=f216 - HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cycle33}/${COMPONENT}/gempak - grid="F-${MDL2} | ${sdate33}/${cycle33}00" + # Create symlink in DATA to sidestep gempak path limits + HPCGFS="${RUN}.${init_time}" + if [[ ! -L "${HPCGFS}" ]]; then + YMD=${init_PDY} HH=${init_cyc} GRID="1p00" generate_com source_dir:COM_ATMOS_GEMPAK_TMPL + ln -sf "${source_dir}" "${HPCGFS}" fi -# 500 MB HEIGHT METAFILE + grid="F-${MDL2} | ${init_PDY}/${init_cyc}00" -export pgm=gdplot2_nc;. prep_step; startmsg -$GEMEXE/gdplot2_nc << EOFplt + # 500 MB HEIGHT METAFILE + + export pgm=gdplot2_nc;. prep_step + "${GEMEXE}/gdplot2_nc" << EOFplt PROJ = STR/90.0;-95.0;0.0 GAREA = 5.1;-124.6;49.6;-11.9 map = 1//2 @@ -417,7 +113,7 @@ title = 5/-1/~ ? GFS PMSL clear = no r -!PROJ = +!PROJ = !GAREA = bwus !gdfile = ${vergrid} !gdattim = ${fcsthr} @@ -443,7 +139,7 @@ r ! SOUTH AMERICAN AREA. ! 500 MB -PROJ = +PROJ = GAREA = samps map = 1//2 clear = yes @@ -498,29 +194,29 @@ r ex EOFplt -export err=$?;err_chk -##################################################### -# GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE -# WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK -# FOR THIS CASE HERE. -##################################################### -ls -l $metaname -export err=$?;export pgm="GEMPAK CHECK FILE";err_chk + export err=$?;err_chk + + ##################################################### + # GEMPAK DOES NOT ALWAYS HAVE A NON ZERO RETURN CODE + # WHEN IT CAN NOT PRODUCE THE DESIRED GRID. CHECK + # FOR THIS CASE HERE. + ##################################################### + if (( err != 0 )) || [[ ! -s "${metaname}" ]] &> /dev/null; then + echo "FATAL ERROR: Failed to create gempak meta file ${metaname}" + exit $(( err + 100 )) + fi done -if [ $SENDCOM = "YES" ] ; then - mv ${metaname} ${COMOUT}/gfsver_${PDY}_${cyc} - if [ $SENDDBN = "YES" ] ; then - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfsver_${PDY}_${cyc} - if [ $DBN_ALERT_TYPE = "GFS_METAFILE_LAST" ] ; then +mv "${metaname}" "${COM_ATMOS_GEMPAK_META}/gfsver_${PDY}_${cyc}" +if [[ "${SENDDBN}" == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfsver_${PDY}_${cyc}" + if [[ "${DBN_ALERT_TYPE}" = "GFS_METAFILE_LAST" ]] ; then DBN_ALERT_TYPE=GFS_METAFILE - ${DBNROOT}/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - ${COMOUT}/gfsver_${PDY}_${cyc} - fi - fi + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_META}/gfsver_${PDY}_${cyc}" + fi fi - exit diff --git a/jobs/JGDAS_ATMOS_GEMPAK b/jobs/JGDAS_ATMOS_GEMPAK index d0d1f16f81..b38f4b60bb 100755 --- a/jobs/JGDAS_ATMOS_GEMPAK +++ b/jobs/JGDAS_ATMOS_GEMPAK @@ -27,11 +27,11 @@ export model=${model:-gdas} ############################################## # Define COM directories ############################################## -for grid in 0p25 0p50 1p00; do +for grid in 0p25 1p00; do GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GRIB_${grid}:COM_ATMOS_GRIB_GRID_TMPL" done -for grid in 1p00 0p25; do +for grid in 0p25 1p00; do prod_dir="COM_ATMOS_GEMPAK_${grid}" GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_${grid}:COM_ATMOS_GEMPAK_TMPL" @@ -40,50 +40,38 @@ for grid in 1p00 0p25; do fi done - # TODO: These actions belong in an ex-script not a j-job if [[ -f poescript ]]; then rm -f poescript fi -######################################################## -# Execute the script. -echo "${SCRgfs}/exgdas_atmos_nawips.sh gdas 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" >> poescript -######################################################## +{ + ######################################################## + # Execute the script. + echo "${SCRgfs}/exgdas_atmos_nawips.sh 1p00 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + ######################################################## -######################################################## -# Execute the script for quater-degree grib -echo "${SCRgfs}/exgdas_atmos_nawips.sh gdas_0p25 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" >> poescript -######################################################## + ######################################################## + # Execute the script for quater-degree grib + echo "${SCRgfs}/exgdas_atmos_nawips.sh 0p25 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + ######################################################## +} > poescript cat poescript -chmod 775 ${DATA}/poescript -export MP_PGMMODEL=mpmd -export MP_CMDFILE=${DATA}/poescript - -ntasks=${NTASKS_GEMPAK:-$(cat ${DATA}/poescript | wc -l)} -ptile=${PTILE_GEMPAK:-4} -threads=${NTHREADS_GEMPAK:-1} -export OMP_NUM_THREADS=${threads} -APRUN="mpiexec -l -np ${ntasks} --cpu-bind verbose,core cfp" - -APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-${APRUN}} - -${APRUN_GEMPAKCFP} ${DATA}/poescript +"${HOMEgfs}/ush/run_mpmd.sh" poescript export err=$?; err_chk ############################################ # print exec I/O output ############################################ -if [ -e "${pgmout}" ] ; then - cat ${pgmout} +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi ################################### # Remove temp directories ################################### -if [ "${KEEPDATA}" != "YES" ] ; then - rm -rf ${DATA} +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" fi - diff --git a/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC b/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC index a6c54b8337..27050de942 100755 --- a/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC +++ b/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC @@ -4,14 +4,13 @@ # GDAS GEMPAK META NCDC PRODUCT GENERATION ############################################ -# TODO (#1222) This j-job is not part of the rocoto - source "${HOMEgfs}/ush/preamble.sh" source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak_meta" -c "base gempak" # Now set up GEMPAK/NTRANS environment -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +# datatype.tbl specifies the paths and filenames of files +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl ################################### # Specify NET and RUN Name and model @@ -35,29 +34,37 @@ export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} ############################################## # Define COM directories ############################################## -export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}} -export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}/gempak/meta} -export COMOUTncdc=${COMOUTncdc:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} +GRID=1p00 YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_1p00:COM_ATMOS_GEMPAK_TMPL" -export COMINukmet=${COMINukmet:-$(compath.py ${envir}/ukmet/${ukmet_ver})/ukmet} -export COMINecmwf=${COMINecmwf:-$(compath.py ${envir}/ecmwf/${ecmwf_ver})/ecmwf} +GRID="meta" YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_META:COM_ATMOS_GEMPAK_TMPL" +if [[ ! -d "${COM_ATMOS_GEMPAK_META}" ]]; then + mkdir -m 775 -p "${COM_ATMOS_GEMPAK_META}" +fi -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} +if (( cyc%12 == 0 )); then + GRID="gif" YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_GIF:COM_ATMOS_GEMPAK_TMPL" + if [[ ! -d "${COM_ATMOS_GEMPAK_GIF}" ]]; then + mkdir -m 775 -p "${COM_ATMOS_GEMPAK_GIF}" + fi +fi -mkdir -m 775 -p ${COMOUT} ${COMOUTncdc} ${COMOUTukmet} ${COMOUTecmwf} +export COMINukmet="${COMINukmet:-$(compath.py "${envir}/ukmet/${ukmet_ver}")/ukmet}" +export COMINecmwf="${COMINecmwf:-$(compath.py "${envir}/ecmwf/${ecmwf_ver}")/ecmwf}" export pgmout=OUTPUT.$$ - ######################################################## # Execute the script. -${HOMEgfs}/gempak/ush/gdas_meta_na.sh -${HOMEgfs}/gempak/ush/gdas_ecmwf_meta_ver.sh -${HOMEgfs}/gempak/ush/gdas_meta_loop.sh -${HOMEgfs}/gempak/ush/gdas_ukmet_meta_ver.sh +"${HOMEgfs}/gempak/ush/gdas_meta_na.sh" export err=$?; err_chk +"${HOMEgfs}/gempak/ush/gdas_meta_loop.sh" +export err=$?; err_chk +if [[ "${cyc}" == '06' ]]; then + "${HOMEgfs}/gempak/ush/gdas_ecmwf_meta_ver.sh" + export err=$?; err_chk + "${HOMEgfs}/gempak/ush/gdas_ukmet_meta_ver.sh" + export err=$?; err_chk +fi ######################################################## ############################################ @@ -66,21 +73,23 @@ export err=$?; err_chk ######################################################## # Execute the script. -${SCRgfs}/exgdas_atmos_gempak_gif_ncdc.sh +if (( cyc%12 == 0 )); then + "${SCRgfs}/exgdas_atmos_gempak_gif_ncdc.sh" +fi export err=$?; err_chk ######################################################## ############################################ # print exec I/O output ############################################ -if [ -e "${pgmout}" ] ; then - cat ${pgmout} +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi ################################### # Remove temp directories ################################### -if [ "${KEEPDATA}" != "YES" ] ; then - rm -rf ${DATA} +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" fi diff --git a/jobs/JGFS_ATMOS_GEMPAK b/jobs/JGFS_ATMOS_GEMPAK index e71338b6de..5aa6c6826f 100755 --- a/jobs/JGFS_ATMOS_GEMPAK +++ b/jobs/JGFS_ATMOS_GEMPAK @@ -50,93 +50,75 @@ if (( ocean_domain_max > FHMAX_GFS )); then ocean_domain_max=${FHMAX_GFS} fi -################################################################# -# Execute the script for the 384 hour 1 degree grib -################################################################## -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.2 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.3 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.4 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.5 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.6 " >> poescript - -################################################################# -# Execute the script for the half-degree grib -################################################################## -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.2 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.3 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.4 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.5 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.6 " >> poescript - -################################################################# -# Execute the script for the quater-degree grib -#################################################################### -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.2 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.3 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.4 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.5 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.6 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.7 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.8 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.9 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.10 " >> poescript - -#################################################################### -# Execute the script to create the 35km Pacific grids for OPC -##################################################################### -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs35_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac} &> ${DATA}/gfs35_pac.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs35_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac} &> ${DATA}/gfs35_pac.$$.2 " >> poescript - -#################################################################### -# Execute the script to create the 35km Atlantic grids for OPC -##################################################################### -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs35_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl} &> ${DATA}/gfs35_atl.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs35_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl} &> ${DATA}/gfs35_atl.$$.2 " >> poescript - -##################################################################### -# Execute the script to create the 40km grids for HPC -###################################################################### -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs40 ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km} &> ${DATA}/gfs40.$$.1 " >> poescript -echo "time ${SCRgfs}/exgfs_atmos_nawips.sh gfs40 ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km} &> ${DATA}/gfs40.$$.2 " >> poescript - -if [[ ${CFP_MP:-"NO"} == "YES" ]]; then - # Add task number to the MPMD script - nl -n ln -v 0 poescript > poescript.new - mv poescript.new poescript -fi +{ + ################################################################# + # Execute the script for the 384 hour 1 degree grib + ################################################################## + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 1p00 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" + + ################################################################# + # Execute the script for the half-degree grib + ################################################################## + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50}" + + ################################################################# + # Execute the script for the quater-degree grib + #################################################################### + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" + + #################################################################### + # Execute the script to create the 35km Pacific grids for OPC + ##################################################################### + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 35km_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 35km_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac}" + + #################################################################### + # Execute the script to create the 35km Atlantic grids for OPC + ##################################################################### + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 35km_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 35km_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl}" + + ##################################################################### + # Execute the script to create the 40km grids for HPC + ###################################################################### + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 40km ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km}" + echo "time ${SCRgfs}/exgfs_atmos_nawips.sh 40km ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km}" +} > poescript cat poescript -chmod 775 ${DATA}/poescript -export MP_PGMMODEL=mpmd -export MP_CMDFILE=${DATA}/poescript - -ntasks=$(cat ${DATA}/poescript | wc -l) -ptile=${PTILE_GEMPAK:-4} -threads=${NTHREADS_GEMPAK:-1} -export OMP_NUM_THREADS=${threads} -APRUN=${APRUN:-"mpiexec -l -np ${ntasks} --cpu-bind verbose,core cfp"} - -APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-${APRUN}} -APRUNCFP=${APRUN_GEMPAKCFP} - -${APRUNCFP} ${DATA}/poescript +"${HOMEgfs}/ush/run_mpmd.sh" poescript export err=$?; err_chk ############################################ # print exec I/O output ############################################ -if [ -e "${pgmout}" ] ; then - cat ${pgmout} +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi ################################### # Remove temp directories ################################### -if [ "${KEEPDATA}" != "YES" ] ; then - rm -rf ${DATA} +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" fi - diff --git a/jobs/JGFS_ATMOS_GEMPAK_META b/jobs/JGFS_ATMOS_GEMPAK_META index eebc137f30..ac49a1e9ae 100755 --- a/jobs/JGFS_ATMOS_GEMPAK_META +++ b/jobs/JGFS_ATMOS_GEMPAK_META @@ -18,15 +18,19 @@ export MP_LABELIO=yes export MP_PULSE=0 export MP_DEBUG_NOTIMEOUT=yes -cp ${HOMEgfs}/gempak/fix/datatype.tbl datatype.tbl +cp "${HOMEgfs}/gempak/fix/datatype.tbl" datatype.tbl ############################################# #set the fcst hrs for all the cycles ############################################# -export fhbeg=00 +export fhbeg=0 export fhend=384 export fhinc=12 +if (( fhend > FHMAX_GFS )); then + export fhend=${FHMAX_GFS} +fi + ################################### # Specify NET and RUN Name and model #################################### @@ -41,37 +45,37 @@ export DBN_ALERT_TYPE=GFS_METAFILE ############################################## # Define COM directories ############################################## -export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} -export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}/gempak/meta} -export COMINgempak=${COMINgempak:-$(compath.py ${envir}/${NET}/${gfs_ver})} - -export COMINukmet=${COMINukmet:-$(compath.py ${envir}/ukmet/${ukmet_ver})/ukmet} -export COMINecmwf=${COMINecmwf:-$(compath.py ${envir}/ecmwf/${ecmwf_ver})/ecmwf} -export COMINnam=${COMINnam:-$(compath.py ${envir}/nam/${nam_ver})/nam} +export COMINukmet=${COMINukmet:-$(compath.py "${envir}/ukmet/${ukmet_ver}")/ukmet} +export COMINecmwf=${COMINecmwf:-$(compath.py "${envir}/ecmwf/${ecmwf_ver}")/ecmwf} +export COMINnam=${COMINnam:-$(compath.py "${envir}/nam/${nam_ver}")/nam} export SENDDBN=${SENDDBN:-NO} export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -mkdir -m 775 -p ${COMOUT} +GRID=1p00 YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_1p00:COM_ATMOS_GEMPAK_TMPL" +GRID="meta" YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_META:COM_ATMOS_GEMPAK_TMPL" +if [[ ! -d "${COM_ATMOS_GEMPAK_META}" ]] ; then + mkdir -m 775 -p "${COM_ATMOS_GEMPAK_META}" +fi ######################################################## # Execute the script. -${SCRgfs}/exgfs_atmos_gempak_meta.sh +"${SCRgfs}/exgfs_atmos_gempak_meta.sh" export err=$?; err_chk ######################################################## ############################################ # print exec I/O output ############################################ -if [ -e "${pgmout}" ] ; then - cat ${pgmout} +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi ################################### # Remove temp directories ################################### -if [ "${KEEPDATA}" != "YES" ] ; then - rm -rf ${DATA} +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" fi diff --git a/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF b/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF index 0f83594e72..4be68abcd3 100755 --- a/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF +++ b/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF @@ -1,7 +1,5 @@ #! /usr/bin/env bash -# TODO (#1222) This job is not part of the rocoto suite - ############################################ # GFS GEMPAK NCDC PRODUCT GENERATION ############################################ @@ -14,6 +12,9 @@ export MP_TIMEOUT=2000 # Set up model and cycle specific variables export MODEL=GFS export fend=384 +if (( fend > FHMAX_GFS )); then + export fend="${FHMAX_GFS}" +fi # set increment to 6 hours -- 3 hours is available. export finc=6 @@ -28,37 +29,40 @@ export COMPONENT="atmos" ############################################## # Define COM directories ############################################## -export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} -export COMINgfs=${COMINgfs:-$(compath.py ${envir}/${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} -export COMINobsproc=${COMINobsproc:-$(compath.py ${envir}/obsproc/${obsproc_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}} -export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} +YMD=${PDY} HH=${cyc} generate_com -rx "COM_OBS" +GRID=1p00 YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_1p00:COM_ATMOS_GEMPAK_TMPL" + +for grid in gif upper_air; do + gempak_dir="COM_ATMOS_GEMPAK_${grid^^}" + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "${gempak_dir}:COM_ATMOS_GEMPAK_TMPL" + if [[ ! -d "${!gempak_dir}" ]]; then mkdir -m 775 -p "${!gempak_dir}"; fi +done + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_WMO +if [[ ! -d "${COM_ATMOS_WMO}" ]]; then mkdir -m 775 -p "${COM_ATMOS_WMO}"; fi export SENDDBN=${SENDDBN:-NO} export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -mkdir -m 775 -p ${COMOUT} ${COMOUTwmo} - export pgmout=OUTPUT.$$ - ######################################################## # Execute the script. -${SCRgfs}/exgfs_atmos_gempak_gif_ncdc_skew_t.sh +"${SCRgfs}/exgfs_atmos_gempak_gif_ncdc_skew_t.sh" export err=$?; err_chk ######################################################## ############################################ # print exec I/O output ############################################ -if [ -e "${pgmout}" ] ; then - cat ${pgmout} +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi ################################### # Remove temp directories ################################### -if [ "${KEEPDATA}" != "YES" ] ; then - rm -rf ${DATA} +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" fi diff --git a/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC b/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC index d2d4d81f93..2412731cab 100755 --- a/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC +++ b/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC @@ -20,14 +20,13 @@ export EXT="" ############################################## # Define COM directories ############################################## -export COMIN="${COMIN:-$(compath.py "${envir}"/"${NET}"/"${gfs_ver}")/${RUN}.${PDY}/${cyc}/${COMPONENT}}" -export COMOUT="${COMOUT:-$(compath.py -o "${NET}"/"${gfs_ver}"/"${NET}"."${PDY}")/${cyc}/${COMPONENT}/gempak}" +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GOES +GRID=0p25 YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_0p25:COM_ATMOS_GEMPAK_TMPL" +if [[ ! -d "${COM_ATMOS_GEMPAK_0p25}" ]]; then mkdir -m 775 -p "${COM_ATMOS_GEMPAK_0p25}"; fi export SENDDBN="${SENDDBN:-NO}" export DBNROOT="${DBNROOT:-${UTILROOT}/fakedbn}" -mkdir -m 775 -p "${COMOUT}" - ################################################################# # Execute the script for the regular grib ################################################################# @@ -38,10 +37,13 @@ cd "${DATA_SPECIAL}" || exit 1 export DBN_ALERT_TYPE=GFS_GOESSIM_GEMPAK export RUN2=gfs_goessim export GRIB=goessimpgrb2.0p25.f -export EXT=" " +export EXT="" export fend=180 +if (( fend > FHMAX_GFS )); then + fend=${FHMAX_GFS} +fi export finc=3 -export fstart=000 +export fstart=0 echo "RUNS the Program" @@ -61,8 +63,11 @@ export RUN2=gfs_goessim221 export GRIB=goessimpgrb2f export EXT=".grd221" export fend=180 +if (( fend > FHMAX_GFS )); then + fend=${FHMAX_GFS} +fi export finc=3 -export fstart=000 +export fstart=0 echo "RUNS the Program" diff --git a/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS b/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS index 1c69eecbf1..fba33bb75c 100755 --- a/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS +++ b/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS @@ -21,7 +21,7 @@ export model=${model:-gfs} export SENDDBN=${SENDDBN:-NO} export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GOES +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_MASTER COM_ATMOS_GOES GRID="0p50" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GRIB_0p50:COM_ATMOS_GRIB_GRID_TMPL mkdir -m 775 -p "${COM_ATMOS_GOES}" diff --git a/jobs/rocoto/gempakpgrb2spec.sh b/jobs/rocoto/gempakgrb2spec.sh similarity index 100% rename from jobs/rocoto/gempakpgrb2spec.sh rename to jobs/rocoto/gempakgrb2spec.sh diff --git a/parm/config/gfs/config.base b/parm/config/gfs/config.base index 24129c1cb1..f038dcb453 100644 --- a/parm/config/gfs/config.base +++ b/parm/config/gfs/config.base @@ -29,6 +29,17 @@ export PARMgfs="${HOMEgfs}/parm" export SCRgfs="${HOMEgfs}/scripts" export USHgfs="${HOMEgfs}/ush" +export FIXam="${FIXgfs}/am" +export FIXaer="${FIXgfs}/aer" +export FIXcpl="${FIXgfs}/cpl" +export FIXlut="${FIXgfs}/lut" +export FIXorog="${FIXgfs}/orog" +export FIXcice="${FIXgfs}/cice" +export FIXmom="${FIXgfs}/mom6" +export FIXreg2grb2="${FIXgfs}/reg2grb2" +export FIXugwd="${FIXgfs}/ugwd" +export FIXgdas="${FIXgfs}/gdas" + ######################################################################## # GLOBAL static environment parameters @@ -38,6 +49,12 @@ export COMINsyn="@COMINsyn@" export DMPDIR="@DMPDIR@" export BASE_CPLIC="@BASE_CPLIC@" +# Gempak from external models +# Default locations are to dummy locations for testing +export COMINecmwf=@COMINecmwf@ +export COMINnam=@COMINnam@ +export COMINukmet=@COMINukmet@ + # USER specific paths export HOMEDIR="@HOMEDIR@" export STMP="@STMP@" @@ -77,6 +94,7 @@ export MODE="@MODE@" # cycled/forecast-only # CLEAR #################################################### # Build paths relative to $HOMEgfs +export FIXgsi="${HOMEgfs}/fix/gsi" export HOMEpost="${HOMEgfs}" export HOMEobsproc="${BASE_GIT:-}/obsproc/v${obsproc_run_ver:-1.1.2}" @@ -256,7 +274,7 @@ export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: # GFS output and frequency export FHMIN_GFS=0 export FHMAX_GFS=@FHMAX_GFS@ -export FHOUT_GFS=3 +export FHOUT_GFS=3 # Must be 6 for S2S until #1629 is addressed; 3 for ops export FHMAX_HF_GFS=0 export FHOUT_HF_GFS=1 export FHOUT_OCNICE_GFS=6 @@ -265,7 +283,11 @@ if (( gfs_cyc != 0 )); then else export STEP_GFS="0" fi -export ILPOST=1 # gempak output frequency up to F120 +# TODO: Change gempak to use standard out variables (#2348) +export ILPOST=${FHOUT_HF_GFS} # gempak output frequency up to F120 +if (( FHMAX_HF_GFS < 120 )); then + export ILPOST=${FHOUT_GFS} +fi # GFS restart interval in hours export restart_interval_gfs=12 @@ -304,7 +326,7 @@ export imp_physics=8 export DO_JEDIATMVAR="@DO_JEDIATMVAR@" export DO_JEDIATMENS="@DO_JEDIATMENS@" export DO_JEDIOCNVAR="@DO_JEDIOCNVAR@" -export DO_JEDISNOWDA="@DO_JEDISNOWDA@" +export DO_JEDILANDDA="@DO_JEDILANDDA@" export DO_MERGENSST="@DO_MERGENSST@" # Hybrid related @@ -379,7 +401,7 @@ export netcdf_diag=".true." export binary_diag=".false." # Verification options -export DO_METP="YES" # Run METPLUS jobs - set METPLUS settings in config.metp +export DO_METP="NO" # Run METPLUS jobs - set METPLUS settings in config.metp; not supported with spack-stack export DO_FIT2OBS="YES" # Run fit to observations package export DO_VRFY_OCEANDA="@DO_VRFY_OCEANDA@" # Run SOCA Ocean and Seaice DA verification tasks diff --git a/parm/config/gfs/config.cleanup b/parm/config/gfs/config.cleanup index 1908c91bb5..44e2690f65 100644 --- a/parm/config/gfs/config.cleanup +++ b/parm/config/gfs/config.cleanup @@ -12,6 +12,11 @@ export CLEANUP_COM="YES" # NO=retain ROTDIR. YES default in cleanup.sh export RMOLDSTD=144 export RMOLDEND=24 +if [[ "${DO_GEMPAK}" == "YES" ]]; then + export RMOLDSTD=346 + export RMOLDEND=222 +fi + # Specify the list of files to exclude from the first stage of cleanup # Because arrays cannot be exported, list is a single string of comma- # separated values. This string is split to form an array at runtime. @@ -22,4 +27,4 @@ case ${RUN} in esac export exclude_string -echo "END: config.cleanup" \ No newline at end of file +echo "END: config.cleanup" diff --git a/scripts/exgdas_atmos_gempak_gif_ncdc.sh b/scripts/exgdas_atmos_gempak_gif_ncdc.sh index 1fb9c94ccf..2dc460cc55 100755 --- a/scripts/exgdas_atmos_gempak_gif_ncdc.sh +++ b/scripts/exgdas_atmos_gempak_gif_ncdc.sh @@ -6,55 +6,34 @@ # in the future, we should move it above somewhere else. ############################################################## -source "$HOMEgfs/ush/preamble.sh" - -cd $DATA - -export NTS=${HOMEgfs}/gempak/ush/restore - -if [ $MODEL = GDAS ] -then - case $MODEL in - GDAS) fcsthrs="000";; - esac - - export fhr - for fhr in $fcsthrs - do - icnt=1 - maxtries=180 - while [ $icnt -lt 1000 ] - do - if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} ] ; then - break - else - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING after 1 hour of waiting for F$fhr to end." - err_exit $msg - fi - done - - cp ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} gem_grids${fhr}.gem - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File: ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} does not exist." - exit $err - fi - - if [ $cyc -eq 00 -o $cyc -eq 12 ] - then - ${HOMEgfs}/gempak/ush/gempak_${RUN}_f${fhr}_gif.sh - if [ ! -f ${HOMEgfs}/gempak/ush/gempak_${RUN}_f${fhr}_gif.sh ] ; then - echo "WARNING: ${HOMEgfs}/gempak/ush/gempak_${RUN}_f${fhr}_gif.sh FILE is missing" - fi - fi +source "${HOMEgfs}/ush/preamble.sh" +cd "${DATA}" || exit 2 + +export NTS="${HOMEgfs}/gempak/ush/restore" + +if [[ ${MODEL} == GDAS ]]; then + fcsthrs="000" + + sleep_interval=20 + max_tries=180 + export fhr3 + for fhr3 in ${fcsthrs}; do + gempak_file="${COM_ATMOS_GEMPAK_1p00}/${RUN}_1p00_${PDY}${cyc}f${fhr3}" + if ! wait_for_file "${gempak_file}" "${sleep_interval}" "${max_tries}" ; then + echo "FATAL ERROR: ${gempak_file} not found after ${max_tries} iterations" + exit 10 + fi + + cp "${gempak_file}" "gem_grids${fhr3}.gem" + export err=$? + if (( err != 0 )) ; then + echo "FATAL: Could not copy ${gempak_file}" + exit "${err}" + fi + + "${HOMEgfs}/gempak/ush/gempak_${RUN}_f${fhr3}_gif.sh" done fi - exit diff --git a/scripts/exgdas_atmos_nawips.sh b/scripts/exgdas_atmos_nawips.sh index 64a2b21e39..ea350239c1 100755 --- a/scripts/exgdas_atmos_nawips.sh +++ b/scripts/exgdas_atmos_nawips.sh @@ -12,51 +12,22 @@ source "${USHgfs}/preamble.sh" "${2}" -cd $DATA -RUN2=$1 +cd "${DATA}" || exit 1 +grid=$1 fend=$2 DBN_ALERT_TYPE=$3 destination=$4 -DATA_RUN=$DATA/$RUN2 -mkdir -p $DATA_RUN -cd $DATA_RUN - -cp ${HOMEgfs}/gempak/fix/g2varswmo2.tbl g2varswmo2.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2varswmo2.tbl file is missing." - exit $err -fi -cp ${HOMEgfs}/gempak/fix/g2vcrdwmo2.tbl g2vcrdwmo2.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2vcrdwmo2.tbl file is missing." - exit $err -fi - -cp ${HOMEgfs}/gempak/fix/g2varsncep1.tbl g2varsncep1.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2varsncep1.tbl file is missing." - exit $err -fi - -cp ${HOMEgfs}/gempak/fix/g2vcrdncep1.tbl g2vcrdncep1.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2vcrdncep1.tbl file is missing." - exit $err -fi - -# -NAGRIB=$GEMEXE/nagrib2_nc -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File $GEMEXE/nagrib2_nc is missing." - echo " WARNING: module GEMPAK was not loaded" - exit $err -fi +DATA_RUN="${DATA}/${grid}" +mkdir -p "${DATA_RUN}" +cd "${DATA_RUN}" || exit 1 + +for table in g2varswmo2.tbl g2vcrdwmo2.tbl g2varsncep1.tbl g2vcrdncep1.tbl; do + cp "${HOMEgfs}/gempak/fix/${table}" "${table}" || \ + ( echo "FATAL ERROR: ${table} is missing" && exit 2 ) +done + +NAGRIB="${GEMEXE}/nagrib2" cpyfil=gds garea=dset @@ -68,81 +39,55 @@ proj= output=T pdsext=no -maxtries=180 -fhcnt=$fstart -while [ $fhcnt -le $fend ] ; do - fhr=$(printf "%03d" $fhcnt) - fhcnt3=$(expr $fhr % 3) +sleep_interval=10 +max_tries=180 - fhr3=$(printf "%03d" $fhcnt) +fhr=$(( 10#${fstart} )) +while (( fhr <= 10#${fend} )); do + fhr3=$(printf "%03d" "${fhr}") - GEMGRD=${RUN2}_${PDY}${cyc}f${fhr3} + source_dirvar="COM_ATMOS_GRIB_${grid}" + GEMGRD="${RUN}_${grid}_${PDY}${cyc}f${fhr3}" + export GRIBIN="${!source_dirvar}/${model}.${cycle}.pgrb2.${grid}.f${fhr3}" + GRIBIN_chk="${GRIBIN}.idx" - if [[ ${RUN2} = "gdas_0p25" ]]; then - export GRIBIN=${COM_ATMOS_GRIB_0p25}/${model}.${cycle}.pgrb2.0p25.f${fhr} - if [[ ! -f ${GRIBIN} ]] ; then - echo "WARNING: ${GRIBIN} FILE is missing" - fi - GRIBIN_chk=${COM_ATMOS_GRIB_0p25}${model}.${cycle}.pgrb2.0p25.f${fhr}.idx - else - export GRIBIN=${COM_ATMOS_GRIB_1p00}/${model}.${cycle}.pgrb2.1p00.f${fhr} - if [[ ! -f ${GRIBIN} ]] ; then - echo "WARNING: ${GRIBIN} FILE is missing" - fi - GRIBIN_chk=${COM_ATMOS_GRIB_1p00}/${model}.${cycle}.pgrb2.1p00.f${fhr}.idx + if ! wait_for_file "${GRIBIN_chk}" "${sleep_interval}" "${max_tries}"; then + echo "FATAL ERROR: after 1 hour of waiting for ${GRIBIN_chk} file at F${fhr3} to end." + export err=7 ; err_chk + exit "${err}" fi - icnt=1 - while [ $icnt -lt 1000 ] - do - if [ -r $GRIBIN_chk ] ; then - sleep 5 - break - else - echo "The process is waiting ... ${GRIBIN_chk} file to proceed." - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - echo "ABORTING: after 1 hour of waiting for ${GRIBIN_chk} file at F$fhr to end." - export err=7 ; err_chk - exit $err - fi - done - - cp $GRIBIN grib$fhr - - export pgm="nagrib2 F$fhr" + cp "${GRIBIN}" "grib${fhr3}" + + export pgm="nagrib2 F${fhr3}" startmsg - $NAGRIB << EOF - GBFILE = grib$fhr + ${NAGRIB} << EOF + GBFILE = grib${fhr3} INDXFL = - GDOUTF = $GEMGRD - PROJ = $proj - GRDAREA = $grdarea - KXKY = $kxky - MAXGRD = $maxgrd - CPYFIL = $cpyfil - GAREA = $garea - OUTPUT = $output - GBTBLS = $gbtbls + GDOUTF = ${GEMGRD} + PROJ = ${proj} + GRDAREA = ${grdarea} + KXKY = ${kxky} + MAXGRD = ${maxgrd} + CPYFIL = ${cpyfil} + GAREA = ${garea} + OUTPUT = ${output} + GBTBLS = ${gbtbls} GBDIAG = - PDSEXT = $pdsext + PDSEXT = ${pdsext} l r EOF - export err=$?;err_chk + export err=$?; err_chk - cp "${GEMGRD}" "${destination}/.${GEMGRD}" + cp "${GEMGRD}" "${destination}/${GEMGRD}" export err=$? - if [[ ${err} -ne 0 ]] ; then - echo " File ${GEMGRD} does not exist." + if (( err != 0 )) ; then + echo "FATAL ERROR: ${GEMGRD} does not exist." exit "${err}" fi - mv "${destination}/.${GEMGRD}" "${destination}/${GEMGRD}" if [[ ${SENDDBN} = "YES" ]] ; then "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ "${destination}/${GEMGRD}" @@ -150,14 +95,14 @@ EOF echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" fi - if [ $fhcnt -ge 240 ] ; then - let fhcnt=fhcnt+12 + if (( fhr >= 240 )) ; then + fhr=$((fhr+12)) else - let fhcnt=fhcnt+finc + fhr=$((fhr+finc)) fi done -$GEMEXE/gpend +"${GEMEXE}/gpend" ##################################################################### diff --git a/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh b/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh index 89de036fcb..f7e981c6b6 100755 --- a/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh +++ b/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh @@ -7,107 +7,79 @@ # in the future, we should move it above somewhere else. ############################################################## -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" -cd $DATA +cd "${DATA}" || exit 1 -export NTS=${HOMEgfs}/gempak/ush/restore +export NTS="${HOMEgfs}/gempak/ush/restore" -if [ $MODEL = GDAS -o $MODEL = GFS ] -then - case $MODEL in - GDAS) fcsthrs="00";; - GFS) fcsthrs="00 12 24 36 48";; +if [[ "${MODEL}" == GDAS ]] || [[ "${MODEL}" == GFS ]]; then + case "${MODEL}" in + GDAS) fcsthrs="0";; + GFS) fcsthrs="0 12 24 36 48";; + *) + echo "FATAL ERROR: Unrecognized model type ${MODEL}" + exit 5 + ;; esac - export fhr - for fhr in $fcsthrs - do - icnt=1 - maxtries=180 - export GRIBFILE=${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} - while [ $icnt -lt 1000 ] - do - if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} ] ; then - sleep 5 - break - else - echo "The process is waiting ... ${GRIBFILE} file to proceed." - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - echo "ABORTING: after 1 hour of waiting for ${GRIBFILE} file at F$fhr to end." - export err=7 ; err_chk - exit $err - fi - done - - cp ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} gem_grids${fhr}.gem - -# if [ $cyc -eq 00 -o $cyc -eq 12 ] - #then - ${HOMEgfs}/gempak/ush/gempak_${RUN}_f${fhr}_gif.sh - #fi - + sleep_interval=20 + max_tries=180 + for fhr in ${fcsthrs}; do + fhr3=$(printf %03d "${fhr}") + export GRIBFILE=${COM_ATMOS_GEMPAK_1p00}/${RUN}_1p00_${PDY}${cyc}f${fhr3} + if ! wait_for_file "${GRIBFILE}" "${sleep_interval}" "${max_tries}" ; then + echo "FATAL ERROR: ${GRIBFILE} not found after ${max_tries} iterations" + exit 10 + fi + + cp "${GRIBFILE}" "gem_grids${fhr3}.gem" + export fhr3 + if (( fhr == 0 )); then + "${HOMEgfs}/gempak/ush/gempak_${RUN}_f000_gif.sh" + else + "${HOMEgfs}/gempak/ush/gempak_${RUN}_fhhh_gif.sh" + fi done fi -#################################################################################### -# echo "-----------------------------------------------------------------------------" -# echo "GFS MAG postprocessing script exmag_sigman_skew_k_gfs_gif_ncdc_skew_t.sh " -# echo "-----------------------------------------------------------------------------" -# echo "History: Mar 2012 added to processing for enhanced MAG skew_t" -# echo "2012-03-11 Mabe -- reworked script to add significant level " -# echo " data to existing mandatory level data in a new file" -# echo "2013-04-24 Mabe -- Reworked to remove unneeded output with " -# echo " conversion to WCOSS" -# Add ms to filename to make it different since it has both mandatory -# and significant level data $COMOUT/${RUN}.${cycle}.msupperair -# $COMOUT/${RUN}.${cycle}.msupperairtble -##################################################################################### - -cd $DATA - -export RSHPDY=$(echo $PDY | cut -c5-)$(echo $PDY | cut -c3-4) - -cp $HOMEgfs/gempak/dictionaries/sonde.land.tbl . -cp $HOMEgfs/gempak/dictionaries/metar.tbl . +cd "${DATA}" || exit 1 + +export RSHPDY="${PDY:4:}${PDY:2:2}" + +cp "${HOMEgfs}/gempak/dictionaries/sonde.land.tbl" sonde.land.tbl +cp "${HOMEgfs}/gempak/dictionaries/metar.tbl" metar.tbl sort -k 2n,2 metar.tbl > metar_stnm.tbl -cp $COMINobsproc/${model}.$cycle.adpupa.tm00.bufr_d fort.40 -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File ${model}.$cycle.adpupa.tm00.bufr_d does not exist." - exit $err +cp "${COM_OBS}/${model}.${cycle}.adpupa.tm00.bufr_d" fort.40 +err=$? +if (( err != 0 )) ; then + echo "FATAL ERROR: File ${model}.${cycle}.adpupa.tm00.bufr_d could not be copied (does it exist?)." + exit "${err}" fi -# $RDBFMSUA >> $pgmout 2> errfile -${UTILgfs}/exec/rdbfmsua >> $pgmout 2> errfile +"${HOMEgfs}/exec/rdbfmsua.x" >> "${pgmout}" 2> errfile err=$?;export err ;err_chk +# shellcheck disable=SC2012,SC2155 export filesize=$( ls -l rdbfmsua.out | awk '{print $5}' ) ################################################################ # only run script if rdbfmsua.out contained upper air data. ################################################################ -if [ $filesize -gt 40 ] -then - - cp rdbfmsua.out $COMOUT/${RUN}.${cycle}.msupperair - cp sonde.idsms.tbl $COMOUT/${RUN}.${cycle}.msupperairtble - if [ $SENDDBN = "YES" ]; then - $DBNROOT/bin/dbn_alert DATA MSUPPER_AIR $job $COMOUT/${RUN}.${cycle}.msupperair - $DBNROOT/bin/dbn_alert DATA MSUPPER_AIRTBL $job $COMOUT/${RUN}.${cycle}.msupperairtble +if (( filesize > 40 )); then + cp rdbfmsua.out "${COM_ATMOS_GEMPAK_UPPER_AIR}/${RUN}.${cycle}.msupperair" + cp sonde.idsms.tbl "${COM_ATMOS_GEMPAK_UPPER_AIR}/${RUN}.${cycle}.msupperairtble" + if [[ ${SENDDBN} = "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" DATA MSUPPER_AIR "${job}" "${COM_ATMOS_GEMPAK_UPPER_AIR}/${RUN}.${cycle}.msupperair" + "${DBNROOT}/bin/dbn_alert" DATA MSUPPER_AIRTBL "${job}" "${COM_ATMOS_GEMPAK_UPPER_AIR}/${RUN}.${cycle}.msupperairtble" fi - fi ############################################################ -if [ -e "$pgmout" ] ; then - cat $pgmout +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" fi diff --git a/scripts/exgfs_atmos_gempak_meta.sh b/scripts/exgfs_atmos_gempak_meta.sh index ad5ef823fd..6ae8c77cfb 100755 --- a/scripts/exgfs_atmos_gempak_meta.sh +++ b/scripts/exgfs_atmos_gempak_meta.sh @@ -1,138 +1,91 @@ #! /usr/bin/env bash -source "$HOMEgfs/ush/preamble.sh" +source "${HOMEgfs}/ush/preamble.sh" -cd $DATA - -GEMGRD1=${RUN}_${PDY}${cyc}f -#find out what fcst hr to start processing -fhr=$fhend +GEMGRD1="${RUN}_1p00_${PDY}${cyc}f" export numproc=23 -while [ $fhr -ge $fhbeg ] ; do - fhr=$(printf "%03d" $fhr) - ls -l $COMIN/$GEMGRD1${fhr} - err1=$? - if [ $err1 -eq 0 -o $fhr -eq $fhbeg ] ; then +# Find the last hour available +for (( fhr = fhend; fhr >= fhbeg; fhr = fhr - fhinc )) ; do + fhr3=$(printf "%03d" "${fhr}") + if [[ -r "${COM_ATMOS_GEMPAK_1p00}/${GEMGRD1}${fhr3}" ]]; then break fi - fhr=$(expr $fhr - $fhinc) done -maxtries=180 +sleep_interval=20 +max_tries=180 first_time=0 do_all=0 #loop through and process needed forecast hours -while [ $fhr -le $fhend ] -do - # - # First check to see if this is a rerun. If so make all Meta files - if [ $fhr -gt 126 -a $first_time -eq 0 ] ; then - do_all=1 - fi - first_time=1 - - if [ $fhr -eq 120 ] ; then - fhr=126 - fi - icnt=1 - - while [ $icnt -lt 1000 ] - do - ls -l $COMIN/$GEMGRD1${fhr} - err1=$? - if [ $err1 -eq 0 ] ; then - break - else - sleep 20 - let "icnt= icnt + 1" - fi - if [ $icnt -ge $maxtries ] - then - echo "ABORTING after 1 hour of waiting for gempak grid F$fhr to end." - export err=7 ; err_chk - exit $err - fi - done - - export fhr - - ######################################################## - # Create a script to be poe'd - # - # Note: The number of scripts to be run MUST match the number - # of total_tasks set in the ecf script, or the job will fail. - # -# if [ -f $DATA/poescript ]; then - rm $DATA/poescript -# fi - - fhr=$(printf "%02d" $fhr) - - if [ $do_all -eq 1 ] ; then - do_all=0 - awk '{print $1}' ${HOMEgfs}/gempak/fix/gfs_meta > $DATA/tmpscript - else - # - # Do not try to grep out 12, it will grab the 12 from 126. - # This will work as long as we don't need 12 fhr metafiles - # - if [ $fhr -ne 12 ] ; then - grep $fhr ${HOMEgfs}/gempak/fix/gfs_meta |awk -F" [0-9]" '{print $1}' > $DATA/tmpscript - fi - fi - - for script in $(cat $DATA/tmpscript) - do - eval "echo $script" >> $DATA/poescript - done - - num=$(cat $DATA/poescript |wc -l) - - while [ $num -lt $numproc ] ; do - echo "hostname" >>poescript - num=$(expr $num + 1) - done - - chmod 775 $DATA/poescript - cat $DATA/poescript - export MP_PGMMODEL=mpmd - export MP_CMDFILE=$DATA/poescript - -# If this is the final fcst hour, alert the -# file to all centers. -# - if [ 10#$fhr -ge $fhend ] ; then - export DBN_ALERT_TYPE=GFS_METAFILE_LAST - fi - - export fend=$fhr - - sleep 20 - ntasks=${NTASKS_META:-$(cat $DATA/poescript | wc -l)} - ptile=${PTILE_META:-4} - threads=${NTHREADS_META:-1} - export OMP_NUM_THREADS=$threads - APRUN="mpiexec -l -n $ntasks -ppn $ntasks --cpu-bind verbose,core cfp" - - APRUN_METACFP=${APRUN_METACFP:-$APRUN} - APRUNCFP=$(eval echo $APRUN_METACFP) - - $APRUNCFP $DATA/poescript - export err=$?; err_chk +while (( fhr <= fhend )); do + # + # First check to see if this is a rerun. If so make all Meta files + if (( fhr > 126 )) && (( first_time == 0 )); then + do_all=1 + fi + first_time=1 - fhr=$(printf "%03d" $fhr) - if [ $fhr -eq 126 ] ; then - let fhr=fhr+6 - else - let fhr=fhr+fhinc - fi -done + if (( fhr == 120 )); then + fhr=126 + fi -##################################################################### + gempak_file="${COM_ATMOS_GEMPAK_1p00}/${GEMGRD1}${fhr3}" + if ! wait_for_file "${gempak_file}" "${sleep_interval}" "${max_tries}"; then + echo "FATAL ERROR: gempak grid file ${gempak_file} not available after maximum wait time." + exit 7 + fi + + export fhr + ######################################################## + # Create a script to be poe'd + # + # Note: The number of scripts to be run MUST match the number + # of total_tasks set in the ecf script, or the job will fail. + # + if [[ -f poescript ]]; then + rm poescript + fi + + fhr3=$(printf "%03d" "${fhr}") + + if (( do_all == 1 )) ; then + do_all=0 + # shellcheck disable=SC2312 + awk '{print $1}' "${HOMEgfs}/gempak/fix/gfs_meta" | envsubst > "poescript" + else + # + # Do not try to grep out 12, it will grab the 12 from 126. + # This will work as long as we don't need 12 fhr metafiles + # + if (( fhr != 12 )) ; then + # shellcheck disable=SC2312 + grep "${fhr}" "${HOMEgfs}/gempak/fix/gfs_meta" | awk -F" [0-9]" '{print $1}' | envsubst > "poescript" + fi + fi + + # If this is the final fcst hour, alert the + # file to all centers. + # + if (( fhr >= fhend )) ; then + export DBN_ALERT_TYPE=GFS_METAFILE_LAST + fi + + export fend=${fhr} + + cat poescript + + "${HOMEgfs}/ush/run_mpmd.sh" poescript + export err=$?; err_chk + + if (( fhr == 126 )) ; then + fhr=$((fhr + 6)) + else + fhr=$((fhr + fhinc)) + fi +done exit -# diff --git a/scripts/exgfs_atmos_goes_nawips.sh b/scripts/exgfs_atmos_goes_nawips.sh index ed82082e8a..2c725a6402 100755 --- a/scripts/exgfs_atmos_goes_nawips.sh +++ b/scripts/exgfs_atmos_goes_nawips.sh @@ -13,29 +13,29 @@ source "${USHgfs}/preamble.sh" -cd $DATA +cd "${DATA}" || exit 2 -cp ${HOMEgfs}/gempak/fix/g2varswmo2.tbl g2varswmo2.tbl -cp ${HOMEgfs}/gempak/fix/g2vcrdwmo2.tbl g2vcrdwmo2.tbl -cp ${HOMEgfs}/gempak/fix/g2varsncep1.tbl g2varsncep1.tbl -cp ${HOMEgfs}/gempak/fix/g2vcrdncep1.tbl g2vcrdncep1.tbl +for table in g2varswmo2.tbl g2vcrdwmo2.tbl g2varsncep1.tbl g2vcrdncep1.tbl; do + cp "${HOMEgfs}/gempak/fix/${table}" "${table}" || \ + ( echo "FATAL ERROR: ${table} is missing" && exit 2 ) +done # -# NAGRIB_TABLE=${HOMEgfs}/gempak/fix/nagrib.tbl -NAGRIB=$GEMEXE/nagrib2 -# - -entry=$(grep "^$RUN2 " $NAGRIB_TABLE | awk 'index($1,"#") != 1 {print $0}') - -if [ "$entry" != "" ] ; then - cpyfil=$(echo $entry | awk 'BEGIN {FS="|"} {print $2}') - garea=$(echo $entry | awk 'BEGIN {FS="|"} {print $3}') - gbtbls=$(echo $entry | awk 'BEGIN {FS="|"} {print $4}') - maxgrd=$(echo $entry | awk 'BEGIN {FS="|"} {print $5}') - kxky=$(echo $entry | awk 'BEGIN {FS="|"} {print $6}') - grdarea=$(echo $entry | awk 'BEGIN {FS="|"} {print $7}') - proj=$(echo $entry | awk 'BEGIN {FS="|"} {print $8}') - output=$(echo $entry | awk 'BEGIN {FS="|"} {print $9}') +NAGRIB_TABLE="${HOMEgfs}/gempak/fix/nagrib.tbl" +NAGRIB="${GEMEXE}/nagrib2" + +# shellcheck disable=SC2312 +entry=$(grep "^${RUN2} " "${NAGRIB_TABLE}" | awk 'index($1,"#") != 1 {print $0}') + +if [[ "${entry}" != "" ]] ; then + cpyfil=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $2}') + garea=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $3}') + gbtbls=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $4}') + maxgrd=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $5}') + kxky=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $6}') + grdarea=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $7}') + proj=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $8}') + output=$(echo "${entry}" | awk 'BEGIN {FS="|"} {print $9}') else cpyfil=gds garea=dset @@ -48,71 +48,55 @@ else fi pdsext=no -maxtries=180 -fhcnt=$fstart -while [ $fhcnt -le $fend ] ; do - fhr=$(printf "%03d" $fhcnt) - fhcnt3=$(expr $fhr % 3) - - fhr3=$(printf "03d" $fhcnt) - GRIBIN=$COMIN/${model}.${cycle}.${GRIB}${fhr}${EXT} - GEMGRD=${RUN2}_${PDY}${cyc}f${fhr3} - - GRIBIN_chk=$GRIBIN - - icnt=1 - while [ $icnt -lt 1000 ] - do - if [ -r $GRIBIN_chk ] ; then - break - else - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - echo "ABORTING after 1 hour of waiting for F$fhr to end." - export err=7 ; err_chk - exit $err - fi - done - - cp $GRIBIN grib$fhr - - export pgm="nagrib_nc F$fhr" - startmsg - - $NAGRIB << EOF - GBFILE = grib$fhr +sleep_interval=20 +max_tries=180 +fhr=${fstart} +for (( fhr=fstart; fhr <= fend; fhr=fhr+finc )); do + fhr3=$(printf "%03d" "${fhr}") + GRIBIN="${COM_ATMOS_GOES}/${model}.${cycle}.${GRIB}${fhr3}${EXT}" + GEMGRD="${RUN2}_${PDY}${cyc}f${fhr3}" + + GRIBIN_chk="${GRIBIN}" + + if ! wait_for_file "${GRIBIN_chk}" "${sleep_interval}" "${max_tries}"; then + echo "FATAL ERROR: after 1 hour of waiting for ${GRIBIN_chk} file at F${fhr3} to end." + export err=7 ; err_chk + exit "${err}" + fi + + cp "${GRIBIN}" "grib${fhr3}" + + export pgm="nagrib_nc F${fhr3}" + + ${NAGRIB} << EOF + GBFILE = grib${fhr3} INDXFL = - GDOUTF = $GEMGRD - PROJ = $proj - GRDAREA = $grdarea - KXKY = $kxky - MAXGRD = $maxgrd - CPYFIL = $cpyfil - GAREA = $garea - OUTPUT = $output - GBTBLS = $gbtbls + GDOUTF = ${GEMGRD} + PROJ = ${proj} + GRDAREA = ${grdarea} + KXKY = ${kxky} + MAXGRD = ${maxgrd} + CPYFIL = ${cpyfil} + GAREA = ${garea} + OUTPUT = ${output} + GBTBLS = ${gbtbls} GBDIAG = - PDSEXT = $pdsext + PDSEXT = ${pdsext} l r EOF export err=$?;err_chk - $GEMEXE/gpend + "${GEMEXE}/gpend" - cp $GEMGRD $COMOUT/.$GEMGRD - mv $COMOUT/.$GEMGRD $COMOUT/$GEMGRD - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/$GEMGRD + cpfs "${GEMGRD}" "${COM_ATMOS_GEMPAK_0p25}/${GEMGRD}" + if [[ ${SENDDBN} == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${COM_ATMOS_GEMPAK_0p25}/${GEMGRD}" else echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" fi - let fhcnt=fhcnt+finc done ##################################################################### diff --git a/scripts/exgfs_atmos_grib2_special_npoess.sh b/scripts/exgfs_atmos_grib2_special_npoess.sh index 1b01aed24d..3877b50b77 100755 --- a/scripts/exgfs_atmos_grib2_special_npoess.sh +++ b/scripts/exgfs_atmos_grib2_special_npoess.sh @@ -9,7 +9,7 @@ source "${USHgfs}/preamble.sh" -cd $DATA +cd "${DATA}" || exit 2 ############################################################ # Define Variables: @@ -80,17 +80,17 @@ fi ############################################################################## # Specify Forecast Hour Range F000 - F024 for GFS_NPOESS_PGRB2_0P5DEG ############################################################################## -export SHOUR=000 -export FHOUR=024 -export FHINC=003 -if [[ "${FHOUR}" -gt "${FHMAX_GFS}" ]]; then +export SHOUR=0 +export FHOUR=24 +export FHINC=3 +if (( FHOUR > FHMAX_GFS )); then export FHOUR="${FHMAX_GFS}" fi ############################################################ # Loop Through the Post Forecast Files ############################################################ -for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do +for (( fhr=SHOUR; fhr <= FHOUR; fhr = fhr + FHINC )); do fhr3=$(printf "%03d" "${fhr}") @@ -99,34 +99,22 @@ for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do # existence of the restart files ############################### export pgm="postcheck" - ic=1 - while (( ic <= SLEEP_LOOP_MAX )); do - if [[ -f "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2b.0p50.f${fhr3}.idx" ]]; then - break - else - ic=$((ic + 1)) - sleep "${SLEEP_INT}" - fi - ############################### - # If we reach this point assume - # fcst job never reached restart - # period and error exit - ############################### - if (( ic == SLEEP_LOOP_MAX )); then - echo "FATAL ERROR: 0p50 grib file not available after max sleep time" - export err=9 - err_chk || exit "${err}" - fi - done + grib_file="${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2b.0p50.f${fhr3}.idx" + if ! wait_for_file "${grib_file}" "${SLEEP_INT}" "${SLEEP_LOOP_MAX}"; then + echo "FATAL ERROR: 0p50 grib file not available after max sleep time" + export err=9 + err_chk || exit "${err}" + fi ###################################################################### # Process Global NPOESS 0.50 GFS GRID PRODUCTS IN GRIB2 F000 - F024 # ###################################################################### - paramlist=${PARMgfs}/product/global_npoess_paramlist_g2 + paramlist="${PARMgfs}/product/global_npoess_paramlist_g2" cp "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2.0p50.f${fhr3}" tmpfile2 cp "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2b.0p50.f${fhr3}" tmpfile2b cat tmpfile2 tmpfile2b > tmpfile - ${WGRIB2} tmpfile | grep -F -f ${paramlist} | ${WGRIB2} -i -grib pgb2file tmpfile + # shellcheck disable=SC2312 + ${WGRIB2} tmpfile | grep -F -f "${paramlist}" | ${WGRIB2} -i -grib pgb2file tmpfile export err=$?; err_chk cp pgb2file "${COM_ATMOS_GOES}/${RUN}.${cycle}.pgrb2f${fhr3}.npoess" @@ -135,8 +123,7 @@ for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do "${DBNROOT}/bin/dbn_alert" MODEL GFS_PGBNPOESS "${job}" \ "${COM_ATMOS_GOES}/${RUN}.${cycle}.pgrb2f${fhr3}.npoess" else - msg="File ${RUN}.${cycle}.pgrb2f${fhr3}.npoess not posted to db_net." - postmsg "${msg}" || echo "${msg}" + echo "File ${RUN}.${cycle}.pgrb2f${fhr3}.npoess not posted to db_net." fi echo "${PDY}${cyc}${fhr3}" > "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.control.halfdeg.npoess" rm tmpfile pgb2file @@ -146,10 +133,10 @@ done ################################################################ # Specify Forecast Hour Range F000 - F180 for GOESSIMPGRB files ################################################################ -export SHOUR=000 +export SHOUR=0 export FHOUR=180 -export FHINC=003 -if [[ "${FHOUR}" -gt "${FHMAX_GFS}" ]]; then +export FHINC=3 +if (( FHOUR > FHMAX_GFS )); then export FHOUR="${FHMAX_GFS}" fi @@ -157,7 +144,7 @@ fi # Process GFS PGRB2_SPECIAL_POST ################################# -for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do +for (( fhr=SHOUR; fhr <= FHOUR; fhr = fhr + FHINC )); do fhr3=$(printf "%03d" "${fhr}") @@ -165,38 +152,25 @@ for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do # Start Looping for the # existence of the restart files ############################### - set +x export pgm="postcheck" - ic=1 - while (( ic <= SLEEP_LOOP_MAX )); do - if [[ -f "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.special.grb2if${fhr3}.idx" ]]; then - break - else - ic=$((ic + 1)) - sleep "${SLEEP_INT}" - fi - ############################### - # If we reach this point assume - # fcst job never reached restart - # period and error exit - ############################### - if (( ic == SLEEP_LOOP_MAX )); then - echo "FATAL ERROR: Special goes grib file not available after max sleep time" - export err=9 - err_chk || exit "${err}" - fi - done - set_trace + grib_file="${COM_ATMOS_MASTER}/${RUN}.t${cyc}z.goesmasterf${fhr3}.grb2" + if ! wait_for_file "${grib_file}" "${SLEEP_INT}" "${SLEEP_LOOP_MAX}"; then + echo "FATAL ERROR: GOES master grib file ${grib_file} not available after max sleep time" + export err=9 + err_chk || exit "${err}" + fi ############################### # Put restart files into /nwges # for backup to start Model Fcst ############################### - cp "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.special.grb2if${fhr3}" masterfile + cp "${grib_file}" masterfile export grid0p25="latlon 0:1440:0.25 90:721:-0.25" + # shellcheck disable=SC2086,SC2248 ${WGRIB2} masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ ${opt27} ${opt28} -new_grid ${grid0p25} pgb2file export gridconus="lambert:253.0:50.0:50.0 214.5:349:32463.0 1.0:277:32463.0" + # shellcheck disable=SC2086,SC2248 ${WGRIB2} masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ ${opt27} ${opt28} -new_grid ${gridconus} pgb2file2 diff --git a/scripts/exgfs_atmos_nawips.sh b/scripts/exgfs_atmos_nawips.sh index 36c3c8e74a..25873473a8 100755 --- a/scripts/exgfs_atmos_nawips.sh +++ b/scripts/exgfs_atmos_nawips.sh @@ -18,12 +18,12 @@ source "${USHgfs}/preamble.sh" "${2}" export ILPOST=${ILPOST:-1} cd "${DATA}" || exit 1 -RUN2=$1 +grid=$1 fend=$2 DBN_ALERT_TYPE=$3 destination=$4 -DATA_RUN="${DATA}/${RUN2}" +DATA_RUN="${DATA}/${grid}" mkdir -p "${DATA_RUN}" cd "${DATA_RUN}" || exit 1 @@ -44,20 +44,22 @@ proj= output=T pdsext=no -maxtries=360 -fhcnt=${fstart} -while (( fhcnt <= fend )) ; do +sleep_interval=10 +max_tries=360 +fhr=$(( 10#${fstart} )) +while (( fhr <= 10#${fend} )) ; do - if mkdir "lock.${fhcnt}" ; then - cd "lock.${fhcnt}" || exit 1 - cp "${HOMEgfs}/gempak/fix/g2varswmo2.tbl" "g2varswmo2.tbl" - cp "${HOMEgfs}/gempak/fix/g2vcrdwmo2.tbl" "g2vcrdwmo2.tbl" - cp "${HOMEgfs}/gempak/fix/g2varsncep1.tbl" "g2varsncep1.tbl" - cp "${HOMEgfs}/gempak/fix/g2vcrdncep1.tbl" "g2vcrdncep1.tbl" + fhr3=$(printf "%03d" "${fhr}") - fhr=$(printf "%03d" "${fhcnt}") + if mkdir "lock.${fhr3}" ; then + cd "lock.${fhr3}" || exit 1 - GEMGRD="${RUN2}_${PDY}${cyc}f${fhr}" + for table in g2varswmo2.tbl g2vcrdwmo2.tbl g2varsncep1.tbl g2vcrdncep1.tbl; do + cp "${HOMEgfs}/gempak/fix/${table}" "${table}" || \ + ( echo "FATAL ERROR: ${table} is missing" && exit 2 ) + done + + GEMGRD="${RUN}_${grid}_${PDY}${cyc}f${fhr3}" # Set type of Interpolation for WGRIB2 export opt1=' -set_grib_type same -new_grid_winds earth ' @@ -71,63 +73,42 @@ while (( fhcnt <= fend )) ; do export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" export opt28=' -new_grid_interpolation budget -fi ' - case ${RUN2} in + case ${grid} in # TODO: Why aren't we interpolating from the 0p25 grids for 35-km and 40-km? - 'gfs_0p50' | 'gfs_0p25') res=${RUN2: -4};; - *) res="1p00";; + '0p50' | '0p25') grid_in=${grid};; + *) grid_in="1p00";; esac - source_var="COM_ATMOS_GRIB_${res}" - export GRIBIN="${!source_var}/${model}.${cycle}.pgrb2.${res}.f${fhr}" - GRIBIN_chk="${!source_var}/${model}.${cycle}.pgrb2.${res}.f${fhr}.idx" + source_var="COM_ATMOS_GRIB_${grid_in}" + export GRIBIN="${!source_var}/${model}.${cycle}.pgrb2.${grid_in}.f${fhr3}" + GRIBIN_chk="${!source_var}/${model}.${cycle}.pgrb2.${grid_in}.f${fhr3}.idx" - icnt=1 - while (( icnt < 1000 )); do - if [[ -r "${GRIBIN_chk}" ]] ; then - # File available, wait 5 seconds then proceed - sleep 5 - break - else - # File not available yet, wait 10 seconds and try again - echo "The process is waiting ... ${GRIBIN_chk} file to proceed." - sleep 10 - icnt=$((icnt+1)) - fi - if (( icnt >= maxtries )); then - echo "FATAL ERROR: after 1 hour of waiting for ${GRIBIN_chk} file at F${fhr} to end." - export err=7 ; err_chk - exit "${err}" - fi - done + if ! wait_for_file "${GRIBIN_chk}" "${sleep_interval}" "${max_tries}"; then + echo "FATAL ERROR: after 1 hour of waiting for ${GRIBIN_chk} file at F${fhr3} to end." + export err=7 ; err_chk + exit "${err}" + fi - case "${RUN2}" in - gfs35_pac) - export gfs35_pac='latlon 130.0:416:0.312 75.125:186:-0.312' - # shellcheck disable=SC2086,SC2248 - "${WGRIB2}" "${GRIBIN}" ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs35_pac} "grib${fhr}" - trim_rh "grib${fhr}" - ;; - gfs35_atl) - export gfs35_atl='latlon 230.0:480:0.312 75.125:242:-0.312' - # shellcheck disable=SC2086,SC2248 - "${WGRIB2}" "${GRIBIN}" ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs35_atl} "grib${fhr}" - trim_rh "grib${fhr}" - ;; - gfs40) - export gfs40='lambert:265.0:25.0:25.0 226.541:185:40635.0 12.19:129:40635.0' - # shellcheck disable=SC2086,SC2248 - "${WGRIB2}" "${GRIBIN}" ${opt1uv} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs40} "grib${fhr}" - trim_rh "grib${fhr}" - ;; - *) - cp "${GRIBIN}" "grib${fhr}" + case "${grid}" in + 35km_pac) grid_spec='latlon 130.0:416:0.312 75.125:186:-0.312';; + 35km_atl) grid_spec='latlon 230.0:480:0.312 75.125:242:-0.312';; + 40km) grid_spec='lambert:265.0:25.0:25.0 226.541:185:40635.0 12.19:129:40635.0';; + *) grid_spec='';; esac - export pgm="nagrib2 F${fhr}" + if [[ "${grid_spec}" != "" ]]; then + # shellcheck disable=SC2086,SC2248 + "${WGRIB2}" "${GRIBIN}" ${opt1uv} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${grid_spec} "grib${fhr3}" + trim_rh "grib${fhr3}" + else + cp "${GRIBIN}" "grib${fhr3}" + fi + + export pgm="nagrib2 F${fhr3}" startmsg ${NAGRIB} << EOF -GBFILE = grib${fhr} +GBFILE = grib${fhr3} INDXFL = GDOUTF = ${GEMGRD} PROJ = ${proj} @@ -148,21 +129,20 @@ EOF cpfs "${GEMGRD}" "${destination}/${GEMGRD}" if [[ ${SENDDBN} == "YES" ]] ; then "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ - "${destination}/${GEMGRD}" + "${destination}/${GEMGRD}" fi cd "${DATA_RUN}" || exit 1 else - if (( fhcnt <= 240 )) ; then - if (( fhcnt < 276 )) && [[ "${RUN2}" = "gfs_0p50" ]] ; then - fhcnt=$((fhcnt+6)) - else - fhcnt=$((fhcnt+12)) - fi - elif ((fhcnt < 120)) && [[ "${RUN2}" = "gfs_0p25" ]] ; then - #### let fhcnt=fhcnt+1 - fhcnt=$((hcnt + ILPOST)) + if (( fhr >= 240 )) ; then + if (( fhr < 276 )) && [[ "${grid}" = "0p50" ]] ; then + fhr=$((fhr+6)) + else + fhr=$((fhr+12)) + fi + elif ((fhr < 120)) && [[ "${grid}" = "0p25" ]] ; then + fhr=$((fhr + ILPOST)) else - fhcnt=$((ILPOST > finc ? fhcnt+ILPOST : fhcnt+finc )) + fhr=$((ILPOST > finc ? fhr+ILPOST : fhr+finc )) fi fi done diff --git a/sorc/link_workflow.sh b/sorc/link_workflow.sh index d4c6f45a12..b92ae0e757 100755 --- a/sorc/link_workflow.sh +++ b/sorc/link_workflow.sh @@ -264,8 +264,8 @@ if [[ ! -d "${HOMEgfs}/exec" ]]; then mkdir "${HOMEgfs}/exec" || exit 1 ; fi cd "${HOMEgfs}/exec" || exit 1 for utilexe in fbwndgfs.x gaussian_sfcanl.x gfs_bufr.x supvit.x syndat_getjtbul.x \ - syndat_maksynrc.x syndat_qctropcy.x tocsbufr.x overgridid.x \ - mkgfsawps.x enkf_chgres_recenter_nc.x tave.x vint.x ocnicepost.x + syndat_maksynrc.x syndat_qctropcy.x tocsbufr.x overgridid.x rdbfmsua.x \ + mkgfsawps.x enkf_chgres_recenter_nc.x tave.x vint.x ocnicepost.x webtitle.x do [[ -s "${utilexe}" ]] && rm -f "${utilexe}" ${LINK_OR_COPY} "${HOMEgfs}/sorc/gfs_utils.fd/install/bin/${utilexe}" . diff --git a/ush/bash_functions.sh b/ush/bash_functions.sh new file mode 100644 index 0000000000..12eb2057b4 --- /dev/null +++ b/ush/bash_functions.sh @@ -0,0 +1,2 @@ +#! /usr/bin/env bash + diff --git a/ush/gfs_bufr.sh b/ush/gfs_bufr.sh index 54e8ec52b5..5bd0a5e7f7 100755 --- a/ush/gfs_bufr.sh +++ b/ush/gfs_bufr.sh @@ -82,14 +82,14 @@ ln -sf "${STNLIST:-${PARMgfs}/product/bufr_stalist.meteo.gfs}" fort.8 case "${CASE}" in "C768") - ln -sf "${PARMbufrsnd}/bufr_ij13km.txt" fort.7 + ln -sf "${PARMgfs}/product/bufr_ij13km.txt" fort.7 ;; "C1152") - ln -sf "${PARMbufrsnd}/bufr_ij9km.txt" fort.7 + ln -sf "${PARMgfs}/product/bufr_ij9km.txt" fort.7 ;; *) - echo "FATAL ERROR: Unrecognized bufr_ij*km.txt For CASE ${CASE}, ABORT!" - exit 1 + echo "WARNING: No bufr table for this resolution, using the one for C768" + ln -sf "${PARMgfs}/product/bufr_ij13km.txt" fort.7 ;; esac diff --git a/ush/preamble.sh b/ush/preamble.sh index 35f32d10bc..e791bcb4e0 100644 --- a/ush/preamble.sh +++ b/ush/preamble.sh @@ -172,6 +172,50 @@ function generate_com() { # shellcheck disable= declare -xf generate_com +function wait_for_file() { + # + # Wait for a file to exist and return the status. + # + # Checks if a file exists periodically up to a maximum number of attempts. When the file + # exists or the limit is reached, the status is returned (0 if the file exists,1 if it + # does not). This allows it to be used as a conditional to handle missing files. + # + # Syntax: + # wait_for_file file_name [sleep_interval [max_tries]] + # + # file_name: File to check the existence of (must be readable) + # sleep_interval: Time to wait between each check (in seconds) [default: 60] + # max_tries: The maximum number of checks to make [default: 100] + # + # Example: + # ``` + # file_name=/path/to/foo + # sleep_interval=60 + # max_tries=30 + # if wait_for_file; then + # echo "FATAL ERROR: ${file_name} still does not exist after waiting one-half hour." + # exit 1 + # fi + # # Code that depends on file existing + # ``` + # + set +x + local file_name=${1:?"wait_for_file() requires a file name"} + local sleep_interval=${2:-60} + local max_tries=${3:-100} + + for (( iter=0; iter