From 834ce31348a627e14d448cdbe33d4ec0dabe99e4 Mon Sep 17 00:00:00 2001 From: Walter Kolczynski - NOAA Date: Fri, 29 Mar 2024 13:17:08 -0400 Subject: [PATCH] Refactor gempak jobs for new COM and style (#2374) Updates the gempak jobs to fit the new COM structure while also refactoring them some to improve the style. Despite these technical changes, the overall structure is left unchanged for most scripts, though some have been rewritten to make the needed changes easier. Some of these scripts had already been updated some in the original COM refactor and thus needed fewer updates. Style updates includes converting all gempak scripts to bash, making them shellcheck compliant, and removing trailing whitespace. Further refactoring to improve maintainability will be needed in the future (see #2341, #2342, #2343, #2348). The GFS gif scripts were identical except the forecast hour, so they are collapsed down into two: one for f000 and one for other forecast hours. The gempak executables have short path limits. To get around this without having the gempak module recompiled, target directories (mostly relevant for the gempak meta jobs) are symlinked into the working directory to drasticly reduce the path lengths. Part of this update includes replacing existing MPMD calls with the new standard `ush/run_mpmd.sh` script. A new function, `wait_for_file()`, is introduced to standardize waiting for a file to be available. Gempak forecast hours are often hard-coded within scripts. In addition to issues with maintainability, this causes problems for shorter forecasts, such as we typically run for testing purposes. For now, we simply check the values against the forecast length and reduce if necessary. Future work (#2348) will be needed to remove these hard-coded values with variables set in the config file (or just use update gempak products to match standard output time variables). One-degree gempak files have been updated to include `1p00` in the filename. Several gempak job dependencies are corrected. Fake gempak data for external models is being staged on tier-1 machines to allow testing. **Output has not been verified.** Future PRs will likely be needed to bring full functionality online. Resolves #2158 Resolves #2152 Resolves #2151 Resolves #2249 Resolves #2247 Refs #2157 Refs #2348 --- .shellcheckrc | 3 + gempak/fix/datatype.tbl | 14 +- gempak/ush/gdas_ecmwf_meta_ver.sh | 145 +-- gempak/ush/gdas_meta_loop.sh | 191 +-- gempak/ush/gdas_meta_na.sh | 78 +- gempak/ush/gdas_ukmet_meta_ver.sh | 169 +-- gempak/ush/gempak_gdas_f000_gif.sh | 288 ++--- gempak/ush/gempak_gfs_f000_gif.sh | 584 +++++++++ gempak/ush/gempak_gfs_f00_gif.sh | 596 --------- gempak/ush/gempak_gfs_f12_gif.sh | 207 --- gempak/ush/gempak_gfs_f24_gif.sh | 220 ---- gempak/ush/gempak_gfs_f36_gif.sh | 220 ---- gempak/ush/gempak_gfs_f48_gif.sh | 220 ---- gempak/ush/gempak_gfs_fhhh_gif.sh | 189 +++ gempak/ush/gfs_meta_ak.sh | 136 +- gempak/ush/gfs_meta_bwx.sh | 190 ++- gempak/ush/gfs_meta_comp.sh | 1131 ++++------------- gempak/ush/gfs_meta_crb.sh | 177 ++- gempak/ush/gfs_meta_hi.sh | 96 +- gempak/ush/gfs_meta_hur.sh | 210 ++- gempak/ush/gfs_meta_mar_atl.sh | 68 +- gempak/ush/gfs_meta_mar_comp.sh | 1060 ++++----------- gempak/ush/gfs_meta_mar_pac.sh | 69 +- gempak/ush/gfs_meta_mar_ql.sh | 60 +- gempak/ush/gfs_meta_mar_skewt.sh | 57 +- gempak/ush/gfs_meta_mar_ver.sh | 51 +- gempak/ush/gfs_meta_nhsh.sh | 96 +- gempak/ush/gfs_meta_opc_na_ver | 312 ++--- gempak/ush/gfs_meta_opc_np_ver | 311 ++--- gempak/ush/gfs_meta_precip.sh | 142 ++- gempak/ush/gfs_meta_qpf.sh | 144 +-- gempak/ush/gfs_meta_sa.sh | 136 +- gempak/ush/gfs_meta_sa2.sh | 274 ++-- gempak/ush/gfs_meta_trop.sh | 127 +- gempak/ush/gfs_meta_us.sh | 125 +- gempak/ush/gfs_meta_usext.sh | 148 +-- gempak/ush/gfs_meta_ver.sh | 436 +------ jobs/JGDAS_ATMOS_GEMPAK | 46 +- jobs/JGDAS_ATMOS_GEMPAK_META_NCDC | 53 +- jobs/JGFS_ATMOS_GEMPAK | 134 +- jobs/JGFS_ATMOS_GEMPAK_META | 34 +- jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF | 34 +- jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC | 19 +- jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS | 2 +- .../{gempakpgrb2spec.sh => gempakgrb2spec.sh} | 0 parm/config/gfs/config.base | 30 +- parm/config/gfs/config.cleanup | 7 +- scripts/exgdas_atmos_gempak_gif_ncdc.sh | 73 +- scripts/exgdas_atmos_nawips.sh | 151 +-- scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh | 126 +- scripts/exgfs_atmos_gempak_meta.sh | 191 ++- scripts/exgfs_atmos_goes_nawips.sh | 130 +- scripts/exgfs_atmos_grib2_special_npoess.sh | 84 +- scripts/exgfs_atmos_nawips.sh | 122 +- sorc/link_workflow.sh | 4 +- ush/bash_functions.sh | 2 + ush/gfs_bufr.sh | 8 +- ush/preamble.sh | 45 + workflow/applications/gfs_cycled.py | 9 +- workflow/hosts/hera.yaml | 3 + workflow/hosts/hercules.yaml | 3 + workflow/hosts/jet.yaml | 3 + workflow/hosts/orion.yaml | 3 + workflow/hosts/wcoss2.yaml | 3 + workflow/rocoto/gfs_tasks.py | 27 +- 65 files changed, 3559 insertions(+), 6467 deletions(-) create mode 100755 gempak/ush/gempak_gfs_f000_gif.sh delete mode 100755 gempak/ush/gempak_gfs_f00_gif.sh delete mode 100755 gempak/ush/gempak_gfs_f12_gif.sh delete mode 100755 gempak/ush/gempak_gfs_f24_gif.sh delete mode 100755 gempak/ush/gempak_gfs_f36_gif.sh delete mode 100755 gempak/ush/gempak_gfs_f48_gif.sh create mode 100755 gempak/ush/gempak_gfs_fhhh_gif.sh rename jobs/rocoto/{gempakpgrb2spec.sh => gempakgrb2spec.sh} (100%) create mode 100644 ush/bash_functions.sh 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