diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f7ca608b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# This is the top-level .gitignore file for the Unified Post-Processor (UPP) # +# # +# Filenames and wildcards added below will not be tracked by git in any # +# directory in the repository # +# # +# Ignored file types should include executables, build-time temporary files, # +# and other files which should not ever be added to the code repository. # +# # +# USE CAUTION WHEN ADDING WILDCARDS, as some builds use different filename # +# conventions than others # +############################################################################## +*.exe +*.o +*.mod +*.a +configure.upp* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..318f435f6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "comupp/src/lib/crtm2"] + path = sorc/comlibs/crtm2 + url = https://github.com/NCAR/UPP_CRTM diff --git a/clean b/clean new file mode 100755 index 000000000..62d62f2b5 --- /dev/null +++ b/clean @@ -0,0 +1,57 @@ +#!/bin/bash + +if [[ "$1" == '-a' ]]; then + CLEANALL=true +fi +# execute all make clean in subshell to retain PWD +# we don't care about failures so ignore 'em +printf "\n\n<><><><><><><><> CLEAN BEGIN <><><><><><><><>\n\n" +TOPDIR=$PWD +#Use make as specified in configure file unless it is empty +if [ ! -e configure.upp ]; then + MAKE="make" +else + MAKE=`awk '($1~/^MAKE/) {print substr($0,index($0,"=")+1) }' configure.upp` + MAKE=${MAKE:-make} # If above command returned nothing, set MAKE to "make" +fi +cd $TOPDIR/sorc/comlibs +$MAKE clean +cd $TOPDIR/sorc/ncep_post.fd +$MAKE clean -f makefile_dtc +cd $TOPDIR + +# +# clear configuration file to force a reconfigure after a clean +# Configuration file exists +if [ -e configure.upp ]; then + # + # If configuration file is empty don't overwrite backup + if [ -s configure.upp ]; then + /bin/mv configure.upp configure.upp.backup + fi +fi + +# empty file for clean op +touch configure.upp + +printf "\n\n<><><><><><><> CLEAN COMPLETE <><><><><><><><>\n\n" +# Now remove this to force a reconfigure + +# +# clean -a -- look for anything that may not have been cleaned up and +# remove it +if [[ "$CLEANALL" == 'true' ]]; then + printf "\n\n<><><><><><><> CLEAN ALL <><><><><><><><>\n\n" + set -x + /bin/rm -rf ./netcdf_links + find . -name \*.exe -exec \rm {} \; + find . -name \*.o -exec \rm {} \; + find . -name \*.a -exec \rm {} \; + find . -name \*.mod -exec \rm {} \; + + rm -rf exec + rm -rf lib + rm -rf include + set +x + printf "\n\n<><><><><><> CLEAN ALL COMPLETE <><><><><><><><>\n\n" +fi diff --git a/compile b/compile new file mode 100755 index 000000000..0881e8902 --- /dev/null +++ b/compile @@ -0,0 +1,40 @@ +#!/bin/bash + +# Set current directory for easy navigation +TOPDIR=`pwd` + +# The only arguments should be for the NCEP build; if that's the case +# then configure.upp is not necessary and will be ignored if it exists +if [ "$#" -eq 0 ]; then + if [ ! -e configure.upp ]; then + echo "ERR :: No configure.upp file => Do './configure' first" + exit 1 + elif [ ! -s configure.upp ]; then + echo "ERR :: Empty configure.upp file => Do './configure' first" + exit 2 + fi + + echo "**** Compiling UPP and all libs ****" + MAKE=`awk '($1~/^MAKE/) {print substr($0,index($0,"=")+1) }' configure.upp` + MAKE=${MAKE:-make} # If above command returned nothing, set MAKE to "make" + cd $TOPDIR/sorc/comlibs + $MAKE + cd $TOPDIR/sorc/ncep_post.fd + $MAKE -f makefile_dtc + cd $TOPDIR +else + cd $TOPDIR/sorc + ./build_ncep_post.sh $1 + RETURN=$? + if [ "$RETURN" -ne 0 ]; then + echo "*******************************" + echo " " + echo "Unrecognized compile target $1." + echo " " + echo " For ncep_post, you must provide a valid machine name" + echo " " + echo "*******************************" + exit 1 + fi +fi + diff --git a/configure b/configure new file mode 100755 index 000000000..f527357ef --- /dev/null +++ b/configure @@ -0,0 +1,433 @@ +#!/bin/bash + +# +# Name of this script +SCRIPT=configure + +# +# Process any command line arguments +args=`getopt :d $*` +if [ $? != 0 ] ; then + echo 'Usage: $0 [-d]' + exit 64 # EX_USAGE +fi +set -- $args +for arg ; do + case "$arg" in + -d) DEBUG=1; echo 'Compiling with DEBUG option'; shift;; + esac +done + +# First, check if CRTM submodule has been properly checked out; quit if not +if [ ! -f "sorc/comlibs/crtm2/src/makefile" ] ; then + echo "sorc/comlibs/crtm2/src/makefile does not exist!" + echo "If you cloned the code from github, you probably have not checked out the crtm submodule" + echo "" + echo "Try the following command to fix this issue:" + echo "" + echo "git submodule update --init --recursive --progress" + echo "" + exit 2 +fi + +# ============================================================================= +# If NETCDF is not set, look for legacy locations: +# ============================================================================= +if [ -z "$NETCDF" ] ; then + echo $SCRIPT ": NETCDF environment variable not set" +# User supplied + if [ -d ./netcdf_links ] ; then + NETCDF=`pwd`/netcdf_links +# System default + elif [ -d /usr/local/netcdf ] ; then + NETCDF=/usr/local/netcdf + else + echo "Could not find netCDF libraries" + echo "" + exit 2 #ERROR + fi +fi + +echo "Will use NETCDF in: " $NETCDF +# +# NETCDF 3.6.2 and greater there might be a second library, libnetcdff.a +USENETCDFF="" +if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" ] ; then + USENETCDFF="-lnetcdff" +fi + + +# Find individual NCEP libs, includes, and other files, if they are specified +NCEPLIBLIB='' +NCEPLIBINC='' + +# Create array of required libs and incs +# This way if all required libs and incs are specified, NCEPLIBS_DIR is not required +declare -a REQUIREDDIRS=("BACIOLIBDIR" "SPLIBDIR" "SIGIOLIBDIR" "SIGIOINCDIR" "W3EMCLIBDIR" "W3EMCINCDIR" "W3NCOLIBDIR" "NEMSIOLIBDIR" "NEMSIOINCDIR" "SFCIOLIBDIR" "SFCIOINCDIR" "G2LIBDIR" "G2TMPLLIBDIR" "G2TMPLINCDIR" "GFSIOLIBDIR" "GFSIOINCDIR" "WRFIOLIBDIR" ) + +if [ ! -z "$BACIOLIBDIR" ]; then + BACIOFILE=$BACIOLIBDIR/libbacio.a + if [ -f $BACIOFILE ]; then + echo "Found BACIO library: $BACIOFILE" + NCEPLIBLIB="-L$BACIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"BACIOLIBDIR"}" ) + else + echo "ERROR: BACIOLIBDIR is set but the library does not exist" + echo " BACIOLIBDIR = $BACIOLIBDIR" + echo " Library file should be $BACIOFILE" + exit 4 + fi +fi +if [ ! -z "$SPLIBDIR" ]; then + SPFILE=$SPLIBDIR/libsp.a + if [ -f $SPFILE ]; then + echo "Found SP library: $SPFILE" + NCEPLIBLIB="-L$SPLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"SPLIBDIR"}" ) + else + echo "ERROR: SPLIBDIR is set but the library does not exist" + echo " SPLIBDIR = $SPLIBDIR" + echo " Library file should be $SPFILE" + exit 4 + fi +fi +if [ -z "$SPLIB_VERSION" ]; then + SPLIB_VERSION=2.0.2 +fi +if [ ! -z "$SIGIOLIBDIR" ]; then + SIGIOFILE=$SIGIOLIBDIR/libsigio.a + if [ -f $SIGIOFILE ]; then + echo "Found SIGIO library: $SIGIOFILE" + NCEPLIBLIB="-L$SIGIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"SIGIOLIBDIR"}" ) + else + echo "ERROR: SIGIOLIBDIR is set but the library does not exist" + echo " SIGIOLIBDIR = $SIGIOLIBDIR" + echo " Library file should be $SIGIOFILE" + exit 4 + fi +fi +if [ ! -z "$SIGIOINCDIR" ]; then + SIGIOFILES=( "$SIGIOINCDIR/sigio_module.mod" "$SIGIOINCDIR/sigio_r_module.mod" ) + for f in "${SIGIOFILES[@]}"; do + if [ -f $f ]; then + echo "Found SIGIO include file: $f" + else + echo "ERROR: SIGIOINCDIR is set but one or more necessary include files are missing" + echo " SIGIOINCDIR = $SIGIOINCDIR" + echo " Included file(s) should be ${SIGIOFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$SIGIOINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"SIGIOINCDIR"}" ) +fi +if [ -z "$SIGIOLIB_VERSION" ]; then + SIGIOLIB_VERSION=2.0.1 +fi +if [ ! -z "$W3EMCLIBDIR" ]; then + W3EMCFILE=$W3EMCLIBDIR/libw3emc.a + if [ -f $W3EMCFILE ]; then + echo "Found W3EMC library: $W3EMCFILE" + NCEPLIBLIB="-L$W3EMCLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"W3EMCLIBDIR"}" ) + else + echo "ERROR: W3EMCLIBDIR is set but the library does not exist" + echo " W3EMCLIBDIR = $W3EMCLIBDIR" + echo " Library file should be $W3EMCFILE" + exit 4 + fi +fi +if [ ! -z "$W3EMCINCDIR" ]; then + W3EMCFILES=( "$W3EMCINCDIR/mersenne_twister.mod" ) + for f in "${W3EMCFILES[@]}"; do + if [ -f $f ]; then + echo "Found W3EMC include file: $f" + else + echo "ERROR: W3EMCINCDIR is set but one or more necessary include files are missing" + echo " W3EMCINCDIR = $W3EMCINCDIR" + echo " Included file(s) should be ${W3EMCFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$W3EMCINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"W3EMCINCDIR"}" ) +fi +if [ -z "$W3EMCLIB_VERSION" ]; then + W3EMCLIB_VERSION=2.2.0 +fi +if [ ! -z "$W3NCOLIBDIR" ]; then + W3NCOFILE=$W3NCOLIBDIR/libw3nco.a + if [ -f $W3NCOFILE ]; then + echo "Found W3NCO library: $W3NCOFILE" + NCEPLIBLIB="-L$W3NCOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"W3NCOLIBDIR"}" ) + else + echo "ERROR: W3NCOLIBDIR is set but the library does not exist" + echo " W3NCOLIBDIR = $W3NCOLIBDIR" + echo " Library file should be $W3NCOFILE" + exit 4 + fi +fi +if [ -z "$W3NCOLIB_VERSION" ]; then + W3NCOLIB_VERSION=2.0.6 +fi +if [ ! -z "$NEMSIOLIBDIR" ]; then + NEMSIOFILE=$NEMSIOLIBDIR/libnemsio.a + if [ -f $NEMSIOFILE ]; then + echo "Found NEMSIO library: $NEMSIOFILE" + NCEPLIBLIB="-L$NEMSIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"NEMSIOLIBDIR"}" ) + else + echo "ERROR: NEMSIOLIBDIR is set but the library does not exist" + echo " NEMSIOLIBDIR = $NEMSIOLIBDIR" + echo " Library file should be $NEMSIOFILE" + exit 4 + fi +fi +if [ ! -z "$NEMSIOINCDIR" ]; then + NEMSIOFILES=( "$NEMSIOINCDIR/nemsio_module.mod" "$NEMSIOINCDIR/nemsio_module_mpi.mod" ) + for f in "${NEMSIOFILES[@]}"; do + if [ -f $f ]; then + echo "Found NEMSIO include file: $f" + else + echo "ERROR: NEMSIOINCDIR is set but one or more necessary include files are missing" + echo " NEMSIOINCDIR = $NEMSIOINCDIR" + echo " Included file(s) should be ${NEMSIOFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$NEMSIOINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"NEMSIOINCDIR"}" ) +fi +if [ ! -z "$SFCIOLIBDIR" ]; then + SFCIOFILE=$SFCIOLIBDIR/libsfcio.a + if [ -f $SFCIOFILE ]; then + echo "Found SFCIO library: $SFCIOFILE" + NCEPLIBLIB="-L$SFCIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"SFCIOLIBDIR"}" ) + else + echo "ERROR: SFCIOLIBDIR is set but the library does not exist" + echo " SFCIOLIBDIR = $SFCIOLIBDIR" + echo " Library file should be $SFCIOFILE" + exit 4 + fi +fi +if [ ! -z "$SFCIOINCDIR" ]; then + SFCIOFILES=( "$SFCIOINCDIR/sfcio_module.mod" ) + for f in "${SFCIOFILES[@]}"; do + if [ -f $f ]; then + echo "Found SFCIO include file: $f" + else + echo "ERROR: SFCIOINCDIR is set but one or more necessary include files are missing" + echo " SFCIOINCDIR = $SFCIOINCDIR" + echo " Included file(s) should be ${SFCIOFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$SFCIOINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"SFCIOINCDIR"}" ) +fi +if [ -z "$SFCIOLIB_VERSION" ]; then + SFCIOLIB_VERSION=1.0.0 +fi +if [ ! -z "$G2LIBDIR" ]; then + G2FILE=$G2LIBDIR/libg2.a + if [ -f $G2FILE ]; then + echo "Found G2 library: $G2FILE" + NCEPLIBLIB="-L$G2LIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"G2LIBDIR"}" ) + else + echo "ERROR: G2LIBDIR is set but the library does not exist" + echo " G2LIBDIR = $G2LIBDIR" + echo " Library file should be $G2FILE" + exit 4 + fi +fi +if [ -z "$G2LIB_VERSION" ]; then + G2LIB_VERSION=3.1.0 +fi +if [ ! -z "$G2TMPLLIBDIR" ]; then + G2TMPLFILE=$G2TMPLLIBDIR/libg2tmpl.a + if [ -f $G2TMPLFILE ]; then + echo "Found G2TMPL library: $G2TMPLFILE" + NCEPLIBLIB="-L$G2TMPLLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"G2TMPLLIBDIR"}" ) + else + echo "ERROR: G2TMPLLIBDIR is set but the library does not exist" + echo " G2TMPLLIBDIR = $G2TMPLLIBDIR" + echo " Library file should be $G2TMPLFILE" + exit 4 + fi +fi +if [ ! -z "$G2TMPLINCDIR" ]; then + G2TMPLFILES=( "$G2TMPLINCDIR/grib2_all_tables_module.mod" ) + for f in "${G2TMPLFILES[@]}"; do + if [ -f $f ]; then + echo "Found G2TMPL include file: $f" + else + echo "ERROR: G2TMPLINCDIR is set but one or more necessary include files are missing" + echo " G2TMPLINCDIR = $G2TMPLINCDIR" + echo " Included file(s) should be ${G2TMPLFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$G2TMPLINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"G2TMPLINCDIR"}" ) +fi +if [ -z "$G2TMPLLIB_VERSION" ]; then + G2TMPLLIB_VERSION=1.5.0 +fi +if [ ! -z "$GFSIOLIBDIR" ]; then + GFSIOFILE=$GFSIOLIBDIR/libgfsio.a + if [ -f $GFSIOFILE ]; then + echo "Found GFSIO library: $GFSIOFILE" + NCEPLIBLIB="-L$GFSIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"GFSIOLIBDIR"}" ) + else + echo "ERROR: GFSIOLIBDIR is set but the library does not exist" + echo " GFSIOLIBDIR = $GFSIOLIBDIR" + echo " Library file should be $GFSIOFILE" + exit 4 + fi +fi +if [ ! -z "$GFSIOINCDIR" ]; then + GFSIOFILES=( "$GFSIOINCDIR/gfsio_module.mod" ) + for f in "${GFSIOFILES[@]}"; do + if [ -f $f ]; then + echo "Found GFSIO include file: $f" + else + echo "ERROR: GFSIOINCDIR is set but one or more necessary include files are missing" + echo " GFSIOINCDIR = $GFSIOINCDIR" + echo " Included file(s) should be ${GFSIOFILES[@]}" + exit 4 + fi + done + NCEPLIBINC="-I$GFSIOINCDIR $NCEPLIBINC" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"GFSIOINCDIR"}" ) +fi +if [ ! -z "$WRFIOLIBDIR" ]; then + WRFIOFILE=$WRFIOLIBDIR/libwrfio.a + if [ -f $WRFIOFILE ]; then + echo "Found WRFIO library: $WRFIOFILE" + NCEPLIBLIB="-L$WRFIOLIBDIR $NCEPLIBLIB" + REQUIREDDIRS=( "${REQUIREDDIRS[@]/"WRFIOLIBDIR"}" ) + else + echo "ERROR: WRFIOLIBDIR is set but the library does not exist" + echo " WRFIOLIBDIR = $WRFIOLIBDIR" + echo " Library file should be $WRFIOFILE" + exit 4 + fi +fi + +declare -a UNSETLIBS +for i in "${REQUIREDDIRS[@]}"; do + if [ -z $i ]; then continue; fi #If the variable has been removed from the list, don't add to new array + UNSETDIRS+=($i) #This syntax appends existing array with new element +done + +# Find location of NCEPLIBS full package, if necessary +if [ -z "$NCEPLIBS_DIR" -a ${#UNSETDIRS[@]} -ne 0 ] ; then # Quit if NCEPLIBS_DIR is not set, but only if UNSETDIRS is not empty + echo "ERROR: You must define the location of the NCEP libraries (NCEPLIBS_DIR)" + echo " OR" + echo " You must define the following library/include paths:" + for i in "${UNSETDIRS[@]}"; do + echo " $i" + done + exit 1 +else + if [ ! -z "$NCEPLIBS_DIR" ]; then + echo "Will use NCEPlibs in: " $NCEPLIBS_DIR + NCEPLIBLIB="$NCEPLIBLIB -L$NCEPLIBS_DIR/lib" + NCEPLIBINC="-I$NCEPLIBS_DIR/include" + fi +fi + +# +# if the uname command exists, give it a shot and see if +# we can narrow the choices; otherwise, spam 'em +os="ARCH" +mach="ARCH" +type uname > /dev/null +if [ $? -eq 0 ] ; then + os=`uname` + if [ "$os" = "AIX" -o "$os" = "IRIX" -o "$os" = "IRIX64" -o "$os" = "SunOS" -o "$os" = "HP-UX" -o "$os" = "Darwin" ] ; then + mach="ARCH" + else + if [ "$os" = "OSF1" -o "$os" = "Linux" -o "$os" = "UNICOS/mp" -o "$os" = "UNIX_System_V" ] ; then + mach=`uname -m` + else + os="ARCH" + mach="ARCH" + fi + fi +fi + +# +# Add directory support for build +pwd=`pwd` +if [ ! -e ./exec ] ; then + echo "$SCRIPT: making ./exec" + mkdir ./exec +fi + +#Directory where binary file goes +BINDIR=${pwd}/exec +echo "bindir " ${BINDIR} + +if [ ! -e ./include ] ; then + echo "$SCRIPT: making ./include" + mkdir ./include +fi +INCMOD=${pwd}/include +echo "incmod " ${INCMOD} + +if [ ! -e ./lib ] ; then + echo "$SCRIPT: making ./lib" + mkdir ./lib +fi +LIBDIR=${pwd}/lib +echo "libdir " ${LIBDIR} + +# +# See if the env var DEBUG is set (overriding any arguments passed in) +if [ ! -z "$DEBUG" ] ; then + DEBUG=1 +fi + +# +# proceed with configuration if OS is supported +srch=`grep -i "^#ARCH.*$os" sorc/arch/configure.defaults | grep -i "$mach"` +if [ -n "$srch" ] ; then + perl sorc/arch/Config.pl -netcdf=$NETCDF -USENETCDFF=$USENETCDFF \ + -os=$os -mach=$mach \ + -bindir=$BINDIR -incmod=$INCMOD -libdir=$LIBDIR \ + -debug=$DEBUG -spv=$SPLIB_VERSION \ + -sigiov=$SIGIOLIB_VERSION -w3emcv=$W3EMCLIB_VERSION \ + -w3ncov=$W3NCOLIB_VERSION -sfciov=$SFCIOLIB_VERSION \ + -g2v=$G2LIB_VERSION -g2tmplv=$G2TMPLLIB_VERSION +else + echo '***********************************************' + echo '*** ERROR ERROR ERROR ERROR ***' + echo '*** ***' + echo '*** This platform is not supported: ***' + echo " $os $mach " + echo '*** ***' + echo '*** Edit sorc/arch/configure.defaults to ***' + echo '*** set up a custom configuration file ***' + echo '***********************************************' + exit 2 +fi + +#Escape slashes and spaces +NCEPLIBLIBESC=$(echo $NCEPLIBLIB | sed 's/ /\\ /g') +NCEPLIBLIBESC=$(echo $NCEPLIBLIBESC | sed 's|/|\\/|g') #Hooray for alternate delimiters! +NCEPLIBINCESC=$(echo $NCEPLIBINC | sed 's/ /\\ /g') +NCEPLIBINCESC=$(echo $NCEPLIBINCESC | sed 's|/|\\/|g') #Of course, this assumes that user does not have files or directories with | in the name + #....they wouldn't do that to me, would they?? + +#Add specified NCEPLIBs paths to configure.upp; don't edit file in place because +#sed has platform-specific differences for this functionality +sed "s|CONFIGURE_NCEPLIBS_LIB|$NCEPLIBLIBESC|g" configure.upp > .configure.upp.edit +sed "s/CONFIGURE_NCEPLIBS_INC/$NCEPLIBINCESC/g" .configure.upp.edit > configure.upp + diff --git a/parm/makefile_comm b/parm/makefile_comm new file mode 100644 index 000000000..a4454a28f --- /dev/null +++ b/parm/makefile_comm @@ -0,0 +1,27 @@ +# This makefile is to create Post flat file from available and control XML file + +FLATFILEDIR = /glade/p/work/fossell/UPP/MERGE/DTC_TRUNK/parm + +# Target flat file +FLATFILENAME = postxconfig-NT.txt + +# Source Post XML file +AVAILXMLFILENAME = post_avblflds.xml +CTRLFILENAME = postcntrl.xml + +# Post flat file generator +PERLXML = PostXMLPreprocessor.pl + +# CMD with param +DTCPERLXML = /usr/bin/perl $(PERLXML) $(CTRLFILENAME) $(AVAILXMLFILENAME) $(FLATFILENAME) + +# File to look for change +XMLS = $(AVAILXMLFILENAME) $(CTRLFILENAME) + +# If action is triggered; run the following +all: $(FLATFILENAME) +$(FLATFILENAME): $(XMLS) + $(DTCPERLXML) + +clean: + /bin/rm -f $(FLATFILENAME) diff --git a/parm/nmb_cntrl.parm b/parm/nmb_cntrl.parm new file mode 100644 index 000000000..e759debc0 --- /dev/null +++ b/parm/nmb_cntrl.parm @@ -0,0 +1,503 @@ + KGTYPE******I5*******:(00255)********START OF THIS OUTPUT GRID****** + IMDLTY *I5* :(00125) + DATSET *A6* :(NMBPRS) + (PRESS ON MDL SFCS ) SCAL=( 3.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT ON MDL SFCS ) SCAL=( 6.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POT TEMP ON MDL SFCS) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT TEMP ON MDL SFC) SCAL=( 5.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPEC HUM ON MDL SFCS) SCAL=( 3.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUM ON MDL SFCS ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MST CNVG ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND ON MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (OMEGA ON MDL SFCS ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ABS VORT ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (STRMFUNC ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TRBLNT KE ON MDL SFC) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RCHDSN NO ON MDL SFC) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RAIN ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (F_RimeF ON MDL SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONDENSATE MDL SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL MDL SFCS ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD WTR ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD ICE ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRAUPEL ON MDL SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLD FRAC ON MDL SFCS) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MASTER LENGTH SCALE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ASYMPT MSTR LEN SCL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT OF PRESS SFCS) SCAL=( 6.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (TEMP ON PRESS SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (POT TEMP ON P SFCS ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT TEMP ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (SPEC HUM ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (REL HUMID ON P SFCS ) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (MST CNVG ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND ON PRESS SFCS) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (V WIND ON PRESS SFCS) SCAL=( 4.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (W WIND ON P SFCS ) SCAL=( 5.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (OMEGA ON PRESS SFCS ) SCAL=( 5.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (ABS VORT ON P SFCS ) SCAL=( 3.0) + L=(00000 01001 01010 10101 01010 10101 01010 11111 11111 10000 00000 00000 00000 00000) + (STRMFUNC ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TRBLNT KE ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD ICE ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD WATR ON P SFCS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RAIN ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW ON P SFCS ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (F_RimeF ON P SFCS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL ON P SFCS) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRAUPEL ON P SFCS ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAPS SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MESINGER MEAN SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHUELL MEAN SLP ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER PRESSURE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER TEMPERATURE ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER SPEC HUMID ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER DEWPOINT ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER REL HUMID ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHELTER MIX RATIO ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT ANEMOM HT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT ANEMOM HT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POT TEMP AT 10 M ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPEC HUM AT 10 M ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE POT TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE SPEC HUMID ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE DEWPOINT ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SURFACE REL HUMID ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC (SKIN) TEMPRATUR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BOTTOM SOIL TEMP ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL TEMPERATURE ) SCAL=( 3.0) + L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOISTURE ) SCAL=( 3.0) + L=(11111 10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIQUID SOIL MOISTURE) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL SOIL MOISTURE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PLANT CANOPY SFC WTR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW WATER EQUIVALNT) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PERCENT SNOW COVER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC EXCHANGE COEF ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GREEN VEG COVER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (VEGETATION TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SLOPE TYPE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW FREE ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAXIMUM SNOW ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY CONDUCTANCE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND SOLAR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND HUMID ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CANOPY COND SOILM ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST REFERENCE) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST POROSITY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (NO OF ROOT LAYERS ) SCAL=( 1.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MIN STOMATAL RESIST ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SNOW DEPTH ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AIR DRY SOIL MOIST ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOIST WILT PT ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SOIL MOISTURE AVAIL ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST GROUND HEAT FLX) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--SURFCE) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--BEST ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFTED INDEX--BNDLYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CNVCT AVBL POT ENRGY) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CNVCT INHIBITION ) SCAL=( 3.0) + L=(11110 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRECIPITABLE WATER ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (STORM REL HELICITY ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM TOTAL PRECIP ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM CONVCTIVE PRECIP) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM GRD SCALE PRECIP) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM GRD SCALE SW ICE) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM SNOWFALL ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET SNOW PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET TOTAL PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET CONV PRECIP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BUCKET GRDSCALE PRCP) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM SNOW TOTAL/MELT ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM STORM SFC RNOFF ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACM BSFL-GDWR RNOFF ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTANT PRECIP TYPE ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD PRECIP TYPE ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTANT PRECIP RATE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV PRECIP RATE ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (FROZEN FRAC CLD SCHM) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SEA SFC TEMPERATURE ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LOW CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MID CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HIGH CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG TOTAL CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG STRAT CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVG CNVCT CLD FRAC ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD CLD BOT HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD CLD TOP HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD BOT PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP PRESSURE ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP TEMPS ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD BOTTOM HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CLOUD TOP HEIGHT ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD BOT PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD TOP PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHAL CU CLD BOT PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHAL CU CLD TOP PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DEEP CU CLD BOT PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DEEP CU CLD TOP PRES) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRID CLOUD BOT PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GRID CLOUD TOP PRESS) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CONV CLOUD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX WIND PRESS LEVEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX WIND HGHT LEVEL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP MAX WIND ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP MAX WIND ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PBL HEIGHT ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (COMPOSITE RADAR REFL) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADAR REFL AGL ) SCAL=( 4.0) + L=(11000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (VISIBILITY ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GSD VISIBILITY ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL AGL HEIGHT ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL PRESSURE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE GRDSCL RN TMPTDY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE CNVCT RN TMPTDY ) SCAL=( 2.7) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (RADFLX CNVG TMP TNDY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SW RAD TEMP TNDY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LW RAD TEMP TNDY ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE INCMG SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE INCMG SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BRIGHTNESS TEMP ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (BRIGHTNESS TEMP NCAR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN INC SFC SW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN INC SFC LW RAD) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN CLR INC SFC SW) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ROUGHNESS LENGTH ) SCAL=( 2.7) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (FRICTION VELOCITY ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC DRAG COEFFICIENT) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC U WIND STRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC V WIND STRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC SENHEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE GROUND HEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SNO PHSCNG HT FX) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC LATHEAT FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE SFC MOMENTUM FX ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACC SFC EVAPORATION ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (ACC POT EVAPORATION ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST SFC SENHEAT FX ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST GROUND HEAT FLX) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INST SFC LATHEAT FX ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LATITUDE ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LONGITUDE ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LAND/SEA MASK ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SEA ICE MASK ) SCAL=( 1.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC MIDDAY ALBEDO ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LIFT PCL LVL PRESS ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRESS AT TROPOPAUSE ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT AT TROPOPAUSE) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP AT TROPOPAUSE ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POTENTL TEMP AT TROP) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT TROPOPAUSE) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT TROPOPAUSE) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SHEAR AT TROPOPAUSE ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPE HUM AT FD HEIGHT) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP AT FD HEIGHTS ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND AT FD HEIGHTS) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND AT FD HEIGHTS) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HEIGHT OF FRZ LVL ) SCAL=( 6.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUMID AT FRZ LVL) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (HIGHEST FREEZE LVL ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PRESS IN BNDRY LYR ) SCAL=( 6.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TEMP IN BNDRY LYR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (POT TMP IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (DWPT IN BNDRY LYR ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SPC HUM IN BNDRY LYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (REL HUM IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MST CNV IN BNDRY LYR) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (P WATER IN BNDRY LYR) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U WIND IN BNDRY LYR ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V WIND IN BNDRY LYR ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (OMEGA IN BNDRY LYR ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX 10m WIND SPEED ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX UPDRAFT VERT VEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX DNDRAFT VERT VEL) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX 1km REFLECTIVITY) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX UPDRAFT HELICITY) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MEAN VERT VEL ) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (MAX VERT INTEG GRAUP) SCAL=( 3.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (LCL AGL HEIGHT ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP STORM MOTION ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP STORM MOTION ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP 0-1 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP 0-1 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (U COMP 0-6 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (V COMP 0-6 KM SHEAR ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (SFC WIND GUST ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO TOA SW RAD) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (AVE OUTGO TOA LW RAD) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (INSTN OUT TOA LW RAD) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL CLD FRACTION ) SCAL=( 3.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN CLD WTR) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN CLD ICE) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN RAIN ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLUMN SNOW ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COL CONDENSATE) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL COLD LIQUID ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (TOTAL MELTING ICE ) SCAL=( 5.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (CEILING ) SCAL=( 5.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (EMISSIVITY ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 2 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 3 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 4 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (GOES TB - CH 5 ) SCAL=( 4.0) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + (PV ON THETA SFCS ) SCAL=( 4.0) + L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) +***DONE WITH THIS GRID*** + diff --git a/parm/params_grib2_tbl_new_dtc b/parm/params_grib2_tbl_new_dtc new file mode 100755 index 000000000..6ea5fffd6 --- /dev/null +++ b/parm/params_grib2_tbl_new_dtc @@ -0,0 +1,1254 @@ + 0 7 11 0 4LFTX + 0 7 193 1 4LFTX + 0 3 19 0 5WAVA + 0 3 197 1 5WAVA + 0 3 15 0 5WAVH + 0 3 193 1 5WAVH + 0 20 106 0 AACOEF + 0 2 11 0 ABSD + 4 2 5 0 ABSFRQ + 0 1 18 0 ABSH + 4 2 6 0 ABSRB + 0 2 10 0 ABSV + 0 18 0 0 ACCES + 0 18 1 0 ACIOD + 2 0 228 1 ACOND + 0 1 224 1 ACPCPN + 0 1 10 0 ACPCP + 0 18 2 0 ACRADP + 10 4 13 0 ACWSRD + 1 2 11 0 ACWSR + 0 20 105 0 AECOEF + 0 20 3 0 AEMFLX + 0 13 0 0 AEROT + 0 2 36 0 AFRWE + 0 20 50 0 AIA + 0 18 10 0 AIRCON + 2 0 208 1 AKHS + 2 0 209 1 AKMS + 0 19 1 0 ALBDO + 0 20 108 0 ALBGRD + 0 20 107 0 ALBSAT + 10 0 38 0 ALCWH + 0 20 110 0 ALEGRD + 0 20 109 0 ALESAT + 10 0 39 0 ALRRC + 0 3 11 0 ALTS + 10 0 37 0 ALTWH + 2 0 219 1 AMIXL + 3 192 11 0 AMSRE10 + 3 192 12 0 AMSRE11 + 3 192 13 0 AMSRE12 + 3 192 10 0 AMSRE9 + 0 20 59 0 ANCON + 3 1 23 0 ANGCOE + 0 20 111 0 ANGSTEXP + 0 20 5 0 ANPEMFLX + 0 20 4 0 ANPMFLX + 10 3 197 1 AOHFLX + 3 1 20 0 AOT06 + 3 1 21 0 AOT08 + 3 1 22 0 AOT16 + 0 20 102 0 AOTK + 0 1 223 1 APCPN + 0 1 8 0 APCP + 0 0 21 0 APTMP + 0 1 221 1 ARAIN + 0 20 8 0 AREMFLX + 0 3 21 0 ASGSO + 0 3 24 0 ASGSO + 10 3 198 1 ASHFL + 0 20 60 0 ASNCON + 0 1 29 0 ASNOW + 0 20 104 0 ASYSFK + 0 190 0 0 ATEXT + 3 1 13 0 ATMDIV + 0 20 101 0 ATMTK + 2 3 201 1 AVSFT + 2 3 200 1 BARET + 10 4 7 0 BATHY + 10 0 44 0 BENINX + 1 0 5 0 BGRUN + 1 0 192 1 BGRUN + 10 4 194 1 BKENG + 0 7 1 0 BLI + 0 7 16 0 BLKRN + 0 2 20 0 BLYDP + 2 0 14 0 BMIXL + 2 0 197 1 BMIXL + 0 7 201 1 BNEGELAY + 2 3 4 0 BOTLST + 0 7 202 1 BPOSELAY + 0 15 1 0 BREF + 3 1 27 0 BRFLF + 0 5 7 0 BRTEMP + 0 4 4 0 BRTMP + 0 15 2 0 BRVEL + 0 15 0 0 BSWID + 4 3 0 0 BTOT + 4 3 1 0 BVEC1 + 4 3 2 0 BVEC2 + 4 3 3 0 BVEC3 + 0 18 18 0 CAACL + 4 8 4 0 CAIIRAD + 0 7 206 1 CANGLE + 2 1 192 1 CANL + 0 7 6 0 CAPE + 0 1 88 0 CATCP + 0 19 29 0 CATEDR + 0 19 22 0 CAT + 0 20 63 0 CAVEMDL + 0 20 70 0 CBECSLSP + 0 6 25 0 CBHE + 0 20 67 0 CBLCLDSP + 0 20 73 0 CBLCSRCP + 3 1 14 0 CBTMP + 3 1 98 0 CCMPEMRR + 2 0 15 0 CCOND + 2 0 199 1 CCOND + 0 6 7 0 CDCA + 0 6 11 0 CDCB + 0 6 22 0 CDCC + 0 17 3 0 CDCDLTFD + 0 6 23 0 CDCIMR + 0 6 2 0 CDCON + 0 6 12 0 CDCTOP + 0 6 8 0 CDCT + 0 17 2 0 CDGDLTFD + 0 6 14 0 CDLYR + 0 6 192 1 CDLYR + 0 4 195 1 CDUVB + 10 0 16 0 CDWW + 0 2 29 0 CD + 0 2 196 1 CD + 0 6 13 0 CEIL + 0 5 197 1 CFNLF + 0 4 199 1 CFNSF + 0 1 34 0 CFRZR + 0 1 193 1 CFRZR + 0 20 54 0 CGDRC + 0 20 53 0 CGPRC + 10 3 2 0 CH + 0 18 17 0 CIAIRC + 0 19 206 1 CICEL + 0 1 35 0 CICEP + 0 1 194 1 CICEP + 10 2 12 0 CICES + 0 6 0 0 CICE + 0 19 208 1 CIFLT + 0 1 82 0 CIMIXR + 0 20 66 0 CINCLDSP + 0 20 69 0 CINCSLSP + 0 20 72 0 CINCSRCP + 0 7 7 0 CIN + 0 20 68 0 CIRELREP + 0 20 74 0 CIRERECP + 2 3 22 0 CISICE + 2 3 20 0 CISOILM + 2 0 23 0 CISOILW + 0 19 207 1 CIVIS + 3 2 9 0 CLDALB + 3 2 10 0 CLDEMISS + 3 2 8 0 CLDIWP + 3 2 7 0 CLDLWP + 3 2 5 0 CLDODEP + 3 2 6 0 CLDPER + 3 2 4 0 CLDPHAS + 3 1 16 0 CLDRAD + 3 2 3 0 CLDTYPE + 0 1 235 1 CLLMR + 3 0 7 0 CLOUDM + 0 1 22 0 CLWMR + 0 2 216 1 CNGWDU + 0 2 217 1 CNGWDV + 0 3 209 1 CNVDEMF + 0 3 208 1 CNVDMF + 0 0 196 1 CNVHR + 0 1 213 1 CNVMR + 0 3 207 1 CNVUMF + 0 2 212 1 CNVU + 0 2 213 1 CNVV + 2 0 13 0 CNWAT + 2 0 196 1 CNWAT + 0 20 56 0 COAIA + 0 20 1 0 COLMD + 0 20 51 0 CONAIR + 0 7 19 0 CONAPES + 0 1 216 1 CONDP + 0 19 16 0 CONTB + 0 19 14 0 CONTET + 0 19 13 0 CONTI + 0 19 24 0 CONTKE + 0 19 15 0 CONTT + 0 19 26 0 CONVO + 0 19 222 1 CONVP + 0 192 6 0 COVMM + 0 192 1 0 COVMZ + 0 2 205 1 COVMZ + 0 192 11 0 COVPSPS + 0 192 8 0 COVQM + 0 192 12 0 COVQQ + 0 192 10 0 COVQVV + 0 192 7 0 COVQZ + 0 192 3 0 COVTM + 0 2 207 1 COVTM + 0 192 14 0 COVTT + 0 192 9 0 COVTVV + 0 192 4 0 COVTW + 0 192 2 0 COVTZ + 0 2 206 1 COVTZ + 0 192 13 0 COVVVVV + 0 192 5 0 COVZZ + 0 1 39 0 CPOFP + 1 1 193 1 CPOFP + 1 1 192 1 CPOZP + 1 1 0 0 CPPOP + 0 1 37 0 CPRAT + 0 1 196 1 CPRAT + 0 1 33 0 CRAIN + 0 1 192 1 CRAIN + 0 20 71 0 CRERELSP + 0 1 76 0 CRRATE + 4 2 9 0 CRTFRQ + 1 2 13 0 CSAFC + 3 1 15 0 CSBTMP + 0 5 196 1 CSDLF + 0 4 196 1 CSDSF + 3 2 0 0 CSKPROB + 3 1 17 0 CSKYRAD + 0 1 36 0 CSNOW + 0 1 195 1 CSNOW + 0 1 58 0 CSRATE + 0 1 55 0 CSRWE + 0 5 195 1 CSULF + 0 4 198 1 CSUSF + 3 1 3 0 CTOPHQI + 3 1 2 0 CTOPH + 3 2 2 0 CTOPRES + 3 2 1 0 CTOPTMP + 0 19 21 0 CTP + 0 6 16 0 CUEFI + 0 6 194 1 CUEFI + 0 6 6 0 CWAT + 0 7 195 1 CWDI + 0 6 15 0 CWORK + 0 6 193 1 CWORK + 0 1 48 0 CWP + 1 1 195 1 CWR + 10 4 195 1 DBSS + 0 7 203 1 DCAPE + 0 20 12 0 DDMFLX + 0 3 30 0 DDRATE + 0 20 15 0 DDVEL + 2 0 30 0 DECF + 0 3 14 0 DENALT + 0 3 10 0 DEN + 0 0 7 0 DEPR + 1 0 13 0 DEPWSS + 10 2 2 0 DICED + 4 4 2 0 DIFEFLUX + 4 4 4 0 DIFIFLUX + 4 4 0 0 DIFPFLUX + 3 6 5 0 DIFSOLEX + 3 6 4 0 DIFSOLIR + 0 4 14 0 DIFSWRF + 10 1 0 0 DIRC + 2 3 14 0 DIREC + 10 0 10 0 DIRPW + 3 6 3 0 DIRSOLEX + 3 6 2 0 DIRSOLIR + 10 0 12 0 DIRSW + 10 0 33 0 DIRWTS + 10 0 32 0 DIRWWW + 1 0 7 0 DISRS + 0 3 6 0 DIST + 0 5 8 0 DLWRFCS + 0 5 3 0 DLWRF + 0 5 192 1 DLWRF + 0 3 28 0 DMFLX + 0 0 6 0 DPT + 2 4 8 0 DRTCODE + 0 18 12 0 DRYDEP + 0 19 237 1 DRYTPROB + 4 7 2 0 DSKDAY + 4 7 1 0 DSKINT + 4 7 3 0 DSKNGT + 10 3 1 0 DSLM + 10 191 3 0 DSLOBSO + 0 191 3 0 DSLOBS + 0 4 52 0 DSWRFCS + 0 4 13 0 DSWRFLX + 0 4 7 0 DSWRF + 0 4 192 1 DSWRF + 0 4 204 1 DTRF + 2 4 7 0 DUFMCODE + 0 4 194 1 DUVB + 0 4 12 0 DWUVR + 0 2 9 0 DZDT + 3 2 11 0 EAODR + 3 5 5 0 EBSDSSTS + 3 5 4 0 EBSSTSTD + 0 19 30 0 EDPARM + 0 7 204 1 EFHL + 0 7 9 0 EHLX + 4 2 1 0 ELCDEN + 4 0 1 0 ELECTMP + 10 3 194 1 ELEV + 0 19 238 1 ELLINX + 0 191 197 1 ELONN + 0 191 193 1 ELON + 0 1 211 1 EMNP + 0 0 3 0 EPOT + 0 19 218 1 EPSR + 10 3 252 1 EROSNP + 1 0 3 0 ESCT + 0 7 205 1 ESP + 3 1 0 0 ESTP + 3 1 4 0 ESTUGRD + 3 1 5 0 ESTVGRD + 0 2 32 0 ETACVV + 10 3 250 1 ETCWL + 4 3 4 0 ETOT + 10 3 193 1 ETSRG + 0 2 38 0 ETSS + 4 6 3 0 EUVIRR + 4 8 1 0 EUVRAD + 2 0 6 0 EVAPT + 0 1 79 0 EVARATE + 2 3 198 1 EVBS + 2 0 229 1 EVCW + 4 3 5 0 EVEC1 + 4 3 6 0 EVEC2 + 4 3 7 0 EVEC3 + 2 0 29 0 EVERF + 0 1 6 0 EVP + 2 0 213 1 EWATR + 0 2 39 0 EWTPARM + 4 6 5 0 F107 + 2 4 3 0 FBAREA + 2 4 10 0 FBUPINX + 0 6 37 0 FCONPC + 3 5 3 0 FDNSSTMP + 2 4 11 0 FDSRTE + 1 0 0 0 FFLDG + 1 0 1 0 FFLDRO + 2 4 6 0 FFMCODE + 0 1 228 1 FICEAC + 0 6 21 0 FICE + 0 6 199 1 FICE + 3 0 9 0 FIREDI + 2 4 1 0 FIREODT + 2 4 0 0 FIREOLK + 2 3 203 1 FLDCP + 1 0 12 0 FLDPSW + 0 19 205 1 FLGHT + 0 7 18 0 FLXRN + 2 4 4 0 FOSINDX + 0 1 67 0 FPRATE + 0 6 32 0 FRACCC + 0 1 43 0 FRAIN + 0 1 202 1 FRAIN + 10 0 63 0 FREWWW + 0 2 30 0 FRICV + 10 0 17 0 FRICV + 0 2 197 1 FRICV + 0 1 227 1 FROZR + 2 3 24 0 FRSTINX + 10 0 64 0 FRWWTSW + 0 1 225 1 FRZR + 10 3 204 1 FRZSPR + 0 1 121 0 FSNOWC + 0 6 36 0 FSTRPC + 2 4 5 0 FWINX + 0 1 95 0 FZPRATE + 0 18 3 0 GDCES + 0 18 4 0 GDIOD + 0 18 5 0 GDRADP + 0 191 1 0 GEOLAT + 0 191 2 0 GEOLON + 0 2 43 0 GEOWD + 0 2 44 0 GEOWS + 2 0 10 0 GFLUX + 2 0 193 1 GFLUX + 2 5 1 0 GLACTMP + 0 3 9 0 GPA + 0 1 75 0 GPRATE + 0 3 4 0 GP + 0 4 3 0 GRAD + 0 7 17 0 GRDRN + 0 1 32 0 GRLE + 3 6 1 0 GSOLEXP + 3 6 0 0 GSOLIRR + 0 2 22 0 GUST + 0 2 210 1 GWDU + 0 2 211 1 GWDV + 0 3 23 0 GWD + 1 0 9 0 GWLOWS + 2 0 214 1 GWREC + 1 0 8 0 GWUPS + 0 1 71 0 HAILMXR + 0 19 198 1 HAILPROB + 0 1 73 0 HAILPR + 0 1 31 0 HAIL + 4 8 2 0 HARAD + 0 19 210 1 HAVNI + 0 6 5 0 HCDC + 0 6 26 0 HCONCB + 0 6 27 0 HCONCT + 0 0 12 0 HEATX + 4 8 6 0 HELCOR + 2 0 24 0 HFLUX + 0 20 62 0 HGTMD + 0 3 211 1 HGTN + 0 3 203 1 HGTX + 0 3 204 1 HGTY + 0 3 5 0 HGT + 0 19 32 0 HIFREL + 2 4 2 0 HINDEX + 0 7 8 0 HLCY + 0 18 16 0 HMXACON + 0 3 18 0 HPBL + 0 3 196 1 HPBL + 4 2 8 0 HPRIMF + 0 19 196 1 HRCONO + 0 15 16 0 HSRHT + 0 15 15 0 HSR + 0 3 7 0 HSTDV + 10 0 3 0 HTSGW + 0 3 3 0 ICAHT + 1 2 7 0 ICECIL + 10 2 0 0 ICEC + 10 2 7 0 ICED + 10 2 6 0 ICEG + 10 2 9 0 ICEPRS + 0 19 27 0 ICESC + 0 19 37 0 ICESEV + 1 2 6 0 ICETIL + 10 2 1 0 ICETK + 10 2 8 0 ICETMP + 0 19 6 0 ICIB + 0 19 20 0 ICIP + 0 19 5 0 ICIT + 0 19 7 0 ICI + 0 1 23 0 ICMR + 0 19 233 1 ICPRB + 0 19 234 1 ICSEV + 1 2 5 0 ICTKIL + 2 0 207 1 ICWAT + 0 1 20 0 ILIQW + 10 0 27 0 IMFTSW + 10 0 26 0 IMFWW + 10 0 25 0 IMWF + 2 4 9 0 INFSINX + 4 4 3 0 INTEFLUX + 10 4 196 1 INTFD + 4 4 5 0 INTIFLUX + 4 4 1 0 INTPFLUX + 4 2 3 0 IONDEN + 4 0 3 0 IONTMP + 0 1 68 0 IPRATE + 3 1 1 0 IRRATE + 10 191 0 0 IRTSEC + 3 5 0 0 ISSTMP + 0 19 235 1 JFWPRB + 10 3 201 1 KENG + 0 7 3 0 KOX + 10 0 43 0 KSSEDW + 0 7 2 0 KX + 0 7 198 1 LAI + 1 2 8 0 LANDIL + 2 0 218 1 LANDN + 2 0 8 0 LANDU + 2 0 0 0 LAND + 0 2 202 1 LAPP + 0 0 8 0 LAPR + 0 2 198 1 LAUV + 0 19 209 1 LAVNI + 0 2 200 1 LAVV + 0 3 205 1 LAYTH + 0 6 3 0 LCDC + 10 3 203 1 LCH + 2 0 28 0 LEAINX + 0 7 10 0 LFTX + 0 7 192 1 LFTX + 0 0 10 0 LHTFL + 0 1 229 1 LICEAC + 0 13 195 1 LIPMF + 2 3 10 0 LIQVSM + 0 15 4 0 LMAXBR + 4 7 0 0 LMBINT + 0 3 210 1 LMH + 0 2 218 1 LMV + 0 2 203 1 LOPP + 0 2 199 1 LOUV + 0 2 201 1 LOVV + 2 3 3 0 LOWLSM + 0 13 194 1 LPMTF + 0 3 201 1 LPSX + 0 3 202 1 LPSY + 0 0 195 1 LRGHR + 0 1 217 1 LRGMR + 2 0 212 1 LSOIL + 2 3 199 1 LSPA + 0 1 54 0 LSPRATE + 0 1 77 0 LSRRATE + 0 1 59 0 LSSRATE + 0 1 56 0 LSSRWE + 0 1 47 0 LSWP + 0 17 0 0 LTNGSD + 0 17 192 1 LTNG + 0 17 1 0 LTPINX + 0 5 2 0 LWAVR + 0 5 194 1 LWHR + 0 4 5 0 LWRAD + 2 3 23 0 LWSNWP + 4 8 7 0 MASK + 0 6 38 0 MASSDCD + 0 6 39 0 MASSDCI + 0 20 0 0 MASSDEN + 0 1 98 0 MASSDG + 0 1 99 0 MASSDH + 0 1 96 0 MASSDR + 0 1 97 0 MASSDS + 0 20 2 0 MASSMR + 0 18 15 0 MAXACON + 0 1 28 0 MAXAH + 0 2 221 1 MAXDVV + 0 2 21 0 MAXGUST + 0 16 198 1 MAXREF + 0 1 27 0 MAXRH + 0 2 220 1 MAXUVV + 0 2 222 1 MAXUW + 0 2 223 1 MAXVW + 10 0 24 0 MAXWH + 0 6 4 0 MCDC + 0 1 26 0 MCONV + 0 1 197 1 MCONV + 0 6 40 0 MDCCWD + 0 1 38 0 MDIVER + 0 1 112 0 MDLWGVA + 0 1 109 0 MDLWHVA + 0 1 115 0 MDLWSVA + 3 2 30 0 MEACST + 0 6 200 1 MFLUX + 0 2 26 0 MFLX + 0 2 193 1 MFLX + 0 0 14 0 MINDPD + 0 1 198 1 MINRH + 0 19 3 0 MIXHT + 0 19 204 1 MIXLY + 0 1 2 0 MIXR + 0 191 195 1 MLYNO + 0 1 114 0 MMLWGDA + 0 1 111 0 MMLWHDA + 0 1 117 0 MMLWSDA + 0 2 6 0 MNTSF + 0 7 200 1 MNUPHL + 10 0 40 0 MNWSOW + 0 20 64 0 MOLRDRYA + 0 20 65 0 MOLRWETA + 10 191 1 0 MOSF + 0 19 195 1 MRCONO + 0 3 192 1 MSLET + 0 3 198 1 MSLMA + 0 20 16 0 MSSRDRYA + 0 20 17 0 MSSRWETA + 10 0 20 0 MSSW + 2 0 11 0 MSTAV + 2 0 194 1 MSTAV + 2 0 7 0 MTERH + 10 4 1 0 MTHA + 10 4 0 0 MTHD + 10 2 11 0 MVCICEP + 10 0 53 0 MWDFSWEL + 10 0 41 0 MWDIRW + 10 0 54 0 MWDSSWEL + 10 0 55 0 MWDTSWEL + 10 0 50 0 MWPFSWEL + 10 0 51 0 MWPSSWEL + 10 0 52 0 MWPTSWEL + 10 0 15 0 MWSPER + 0 19 28 0 MWTURB + 0 19 31 0 MXEDPRM + 0 20 61 0 MXMASSD + 0 19 17 0 MXSALB + 0 19 192 1 MXSALB + 0 7 199 1 MXUPHL + 10 0 30 0 MZPTSW + 10 0 29 0 MZPWW + 10 0 28 0 MZWPER + 0 4 202 1 NBDSF + 0 19 213 1 NBSALB + 0 6 29 0 NCCICE + 0 1 207 1 NCIP + 0 6 28 0 NCONCD + 0 1 9 0 NCPCP + 0 6 31 0 NDCICE + 0 4 203 1 NDDSF + 0 6 30 0 NDENCD + 2 0 31 0 NDVINX + 2 0 217 1 NDVI + 0 191 196 1 NLATN + 0 191 192 1 NLAT + 0 3 206 1 NLGSP + 0 3 25 0 NLPRES + 0 5 6 0 NLWRCS + 0 5 5 0 NLWRF + 0 5 0 0 NLWRS + 0 5 1 0 NLWRT + 3 1 6 0 NPIXU + 0 4 11 0 NSWRFCS + 0 4 9 0 NSWRF + 0 4 0 0 NSWRS + 0 4 1 0 NSWRT + 4 4 6 0 NTRNFLUX + 0 2 37 0 NTSS + 0 1 106 0 NUMDG + 0 1 107 0 NUMDH + 0 1 104 0 NUMDR + 0 1 105 0 NUMDS + 0 2 34 0 NWIND + 0 19 214 1 NWSALB + 10 0 19 0 NWSTR + 0 2 40 0 NWTPARM + 0 14 1 0 O3MR + 0 14 192 1 O3MR + 10 4 197 1 OHC + 0 2 215 1 OMGALF + 10 1 192 1 OMLU + 10 1 193 1 OMLV + 0 3 217 1 ORASNW + 0 3 216 1 ORASSW + 0 3 215 1 ORASS + 0 3 214 1 ORASW + 0 3 213 1 ORCONV + 0 3 221 1 ORLSNW + 0 3 220 1 ORLSSW + 0 3 219 1 ORLSS + 0 3 218 1 ORLSW + 10 4 4 0 OVHD + 10 4 6 0 OVMD + 10 4 5 0 OVSD + 10 3 253 1 OWASHP + 0 14 194 1 OZCAT + 0 14 193 1 OZCON + 0 14 200 1 OZMAX1 + 0 14 201 1 OZMAX8 + 10 3 196 1 P2OMLT + 3 3 2 0 PBINFRC + 3 3 1 0 PBLIFRC + 0 19 12 0 PBLREG + 3 3 0 0 PBMVFRC + 0 1 234 1 PCPDUR + 0 14 202 1 PDMAX1 + 0 14 203 1 PDMAX24 + 10 0 11 0 PERPW + 1 0 16 0 PERRATE + 10 0 13 0 PERSW + 0 1 40 0 PEVAP + 0 1 199 1 PEVAP + 0 1 41 0 PEVPR + 0 1 200 1 PEVPR + 0 4 10 0 PHOTAR + 3 0 8 0 PIXST + 0 7 0 0 PLI + 0 3 200 1 PLPL + 4 2 0 0 PLSMDEN + 10 0 23 0 PMAXWH + 0 13 192 1 PMTC + 0 13 193 1 PMTF + 1 1 2 0 POP + 2 3 9 0 POROS + 2 3 197 1 POROS + 0 0 2 0 POT + 0 14 199 1 POZO + 0 14 198 1 POZT + 0 14 196 1 POZ + 10 0 36 0 PPERTS + 10 0 35 0 PPERWW + 1 1 194 1 PPFFG + 0 1 231 1 PPINDX + 1 1 1 0 PPOSP + 0 1 7 0 PRATE + 4 0 4 0 PRATMP + 0 15 5 0 PREC + 0 3 13 0 PRESALT + 0 3 8 0 PRESA + 0 3 212 1 PRESN + 0 3 0 0 PRES + 0 3 1 0 PRMSL + 0 1 232 1 PROBCIP + 0 19 221 1 PROCON + 4 2 2 0 PROTDEN + 4 0 2 0 PROTTMP + 4 0 5 0 PRPTMP + 0 19 216 1 PRSIGSVR + 0 19 215 1 PRSVR + 10 4 21 0 PRTSAL + 0 19 36 0 PSNOWS + 0 3 2 0 PTEND + 0 1 19 0 PTYPE + 0 2 219 1 PVMWW + 0 2 14 0 PVORT + 0 1 3 0 PWAT + 10 0 46 0 PWAVEDIR + 0 1 30 0 PWCAT + 10 0 34 0 PWPER + 0 1 226 1 PWTHER + 0 1 219 1 QMAX + 0 1 220 1 QMIN + 2 0 215 1 QREC + 0 1 218 1 QZ0 + 2 3 202 1 RADT + 3 1 8 0 RAZA + 2 0 21 0 RCQ + 2 0 204 1 RCQ + 2 0 20 0 RCSOL + 2 0 205 1 RCSOL + 2 0 18 0 RCS + 2 0 202 1 RCS + 2 0 19 0 RCT + 2 0 203 1 RCT + 2 0 206 1 RDRIP + 0 15 6 0 RDSP1 + 0 15 7 0 RDSP2 + 0 15 8 0 RDSP3 + 2 0 32 0 RDVEG + 0 16 5 0 REFC + 0 16 196 1 REFC + 0 16 4 0 REFD + 0 16 195 1 REFD + 0 16 2 0 REFZC + 0 16 194 1 REFZC + 0 16 1 0 REFZI + 0 16 193 1 REFZI + 0 16 0 0 REFZR + 0 16 192 1 REFZR + 0 2 13 0 RELD + 0 2 12 0 RELV + 0 16 3 0 RETOP + 0 16 197 1 RETOP + 0 0 194 1 REV + 0 15 9 0 RFCD + 0 15 10 0 RFCI + 0 15 13 0 RFGRPL + 0 15 14 0 RFHAIL + 3 1 9 0 RFL06 + 3 1 10 0 RFL08 + 3 1 11 0 RFL16 + 3 1 12 0 RFL39 + 0 15 12 0 RFRAIN + 0 15 11 0 RFSNOW + 0 1 94 0 RHICE + 0 1 242 1 RHPW + 0 1 93 0 RHWATER + 0 1 1 0 RH + 0 1 44 0 RIME + 0 1 203 1 RIME + 10 1 4 0 RIPCOP + 0 7 12 0 RI + 0 7 194 1 RI + 2 3 6 0 RLYRS + 2 3 193 1 RLYRS + 0 1 65 0 RPRATE + 2 0 16 0 RSMIN + 2 0 200 1 RSMIN + 1 0 2 0 RSSC + 0 191 194 1 RTSEC + 10 3 206 1 RUNUP + 1 0 11 0 RVERSW + 0 1 24 0 RWMR + 0 18 14 0 SACON + 0 20 100 0 SADEN + 0 19 19 0 SALBD + 3 0 1 0 SALBEDO + 10 4 193 1 SALIN + 1 2 12 0 SALTIL + 10 4 3 0 SALTY + 0 1 5 0 SATD + 2 3 17 0 SATOSM + 3 192 4 0 SBC123 + 3 192 5 0 SBC124 + 0 19 211 1 SBSALB + 0 1 212 1 SBSNO + 3 192 6 0 SBT112 + 3 192 7 0 SBT113 + 3 192 8 0 SBT114 + 3 192 9 0 SBT115 + 3 192 0 0 SBT122 + 3 192 1 0 SBT123 + 3 192 2 0 SBT124 + 3 192 3 0 SBT126 + 3 192 23 0 SBTA1610 + 3 192 24 0 SBTA1611 + 3 192 25 0 SBTA1612 + 3 192 26 0 SBTA1613 + 3 192 27 0 SBTA1614 + 3 192 28 0 SBTA1615 + 3 192 29 0 SBTA1616 + 3 192 20 0 SBTA167 + 3 192 21 0 SBTA168 + 3 192 22 0 SBTA169 + 3 192 39 0 SBTA1710 + 3 192 40 0 SBTA1711 + 3 192 41 0 SBTA1712 + 3 192 42 0 SBTA1713 + 3 192 43 0 SBTA1714 + 3 192 44 0 SBTA1715 + 3 192 45 0 SBTA1716 + 3 192 36 0 SBTA177 + 3 192 37 0 SBTA178 + 3 192 38 0 SBTA179 + 3 192 55 0 SBTAGR10 + 3 192 56 0 SBTAGR11 + 3 192 57 0 SBTAGR12 + 3 192 58 0 SBTAGR13 + 3 192 59 0 SBTAGR14 + 3 192 60 0 SBTAGR15 + 3 192 61 0 SBTAGR16 + 3 192 52 0 SBTAGR7 + 3 192 53 0 SBTAGR8 + 3 192 54 0 SBTAGR9 + 3 192 65 0 SBTAHI10 + 3 192 66 0 SBTAHI11 + 3 192 67 0 SBTAHI12 + 3 192 68 0 SBTAHI13 + 3 192 69 0 SBTAHI14 + 3 192 70 0 SBTAHI15 + 3 192 71 0 SBTAHI16 + 3 192 62 0 SBTAHI7 + 3 192 63 0 SBTAHI8 + 3 192 64 0 SBTAHI9 + 3 0 2 0 SBTMP + 4 2 10 0 SCINT + 0 1 84 0 SCLIWC + 0 1 83 0 SCLLWC + 3 1 29 0 SCRAD + 0 20 112 0 SCTAOTK + 3 0 5 0 SCTPRES + 0 20 6 0 SDDMFLX + 0 1 61 0 SDEN + 3 1 99 0 SDMPEMRR + 0 3 20 0 SDSGSO + 0 1 60 0 SDWE + 0 20 11 0 SEDMFLX + 1 2 3 0 SEDTK + 1 2 4 0 SEDTMP + 10 3 207 1 SETUP + 0 1 62 0 SEVAP + 2 0 216 1 SFCRH + 2 0 1 0 SFCR + 2 0 34 0 SFCWRO + 2 0 12 0 SFEXC + 2 0 195 1 SFEXC + 1 0 10 0 SFLORC + 0 20 55 0 SFLUX + 3 192 14 0 SFRA161 + 3 192 15 0 SFRA162 + 3 192 16 0 SFRA163 + 3 192 17 0 SFRA164 + 3 192 18 0 SFRA165 + 3 192 19 0 SFRA166 + 3 192 30 0 SFRA171 + 3 192 31 0 SFRA172 + 3 192 32 0 SFRA173 + 3 192 33 0 SFRA174 + 3 192 34 0 SFRA175 + 3 192 35 0 SFRA176 + 10 4 11 0 SFSALP + 1 2 9 0 SFSAL + 10 4 12 0 SFTMPP + 1 2 10 0 SFTMP + 0 2 7 0 SGCVV + 0 0 201 1 SHAHR + 0 19 201 1 SHAILPRO + 0 1 214 1 SHAMR + 2 3 26 0 SHFLX + 0 0 11 0 SHTFL + 0 1 108 0 SHTPRM + 0 7 13 0 SHWINX + 10 2 3 0 SICED + 4 9 1 0 SIGHAL + 4 9 2 0 SIGPAR + 4 9 0 0 SIGPED + 0 19 217 1 SIPD + 0 0 17 0 SKINT + 3 5 1 0 SKSSTMP + 0 1 230 1 SLACC + 0 19 23 0 SLDP + 3 0 4 0 SLFTI + 10 3 202 1 SLTFL + 2 3 194 1 SLTYP + 0 6 34 0 SLWTC + 2 3 8 0 SMDRY + 2 3 196 1 SMDRY + 0 1 113 0 SMLWGMA + 0 1 110 0 SMLWHMA + 0 1 116 0 SMLWSMA + 2 3 7 0 SMREF + 2 3 195 1 SMREF + 0 19 18 0 SNFALB + 0 19 193 1 SNFALB + 0 1 25 0 SNMR + 0 1 17 0 SNOAG + 0 1 14 0 SNOC + 0 1 11 0 SNOD + 0 0 16 0 SNOHF + 0 0 192 1 SNOHF + 0 1 15 0 SNOL + 0 1 16 0 SNOM + 0 0 18 0 SNOT + 0 1 208 1 SNOT + 0 1 42 0 SNOWC + 0 1 201 1 SNOWC + 0 1 233 1 SNOWLR + 0 19 236 1 SNOWLVL + 0 1 222 1 SNOWT + 2 3 25 0 SNWDEB + 2 3 27 0 SOILDEP + 2 3 21 0 SOILICE + 2 3 5 0 SOILL + 2 3 192 1 SOILL + 2 3 19 0 SOILMOI + 2 0 3 0 SOILM + 2 0 22 0 SOILM + 2 3 15 0 SOILP + 2 3 18 0 SOILTMP + 2 0 38 0 SOILVIC + 2 0 192 1 SOILW + 4 6 6 0 SOLRF + 3 1 7 0 SOLZA + 2 3 0 0 SOTYP + 3 1 28 0 SPBRT + 10 1 1 0 SPC + 4 6 4 0 SPECIRR + 4 1 0 0 SPEED + 0 1 0 0 SPFH + 10 0 45 0 SPFTR + 0 1 102 0 SPNCG + 0 1 103 0 SPNCH + 0 1 100 0 SPNCR + 0 1 101 0 SPNCS + 0 1 66 0 SPRATE + 4 2 7 0 SPRDF + 3 0 3 0 SPWAT + 3 0 0 0 SRAD + 0 1 85 0 SRAINC + 0 19 194 1 SRCONO + 3 192 46 0 SRFAGR1 + 3 192 47 0 SRFAGR2 + 3 192 48 0 SRFAGR3 + 3 192 49 0 SRFAGR4 + 3 192 50 0 SRFAGR5 + 3 192 51 0 SRFAGR6 + 0 1 12 0 SRWEQ + 0 20 103 0 SSALBK + 0 3 22 0 SSGSO + 10 3 195 1 SSHG + 3 5 2 0 SSKSSTMP + 0 1 86 0 SSNOWW + 1 0 6 0 SSRUN + 1 0 193 1 SSRUN + 10 3 200 1 SSST + 3 0 6 0 SSTMP + 2 0 211 1 SSTOR + 10 3 199 1 SSTT + 0 6 35 0 SSWTC + 0 19 200 1 STORPROB + 0 2 4 0 STRM + 0 1 87 0 STRPRATE + 0 6 33 0 SUNSD + 0 6 201 1 SUNSD + 0 6 24 0 SUNS + 10 3 192 1 SURGE + 0 19 220 1 SVRTS + 10 3 208 1 SWASH + 0 4 2 0 SWAVR + 10 0 7 0 SWDIR + 0 20 7 0 SWDMFLX + 0 7 5 0 SWEATX + 10 0 8 0 SWELL + 1 0 4 0 SWEPON + 10 0 47 0 SWHFSWEL + 0 4 197 1 SWHR + 10 0 48 0 SWHSSWEL + 10 0 49 0 SWHTSWEL + 0 19 202 1 SWINDPRO + 10 0 9 0 SWPER + 3 1 194 1 SWQI + 0 4 6 0 SWRAD + 0 19 212 1 SWSALB + 0 6 1 0 TCDC + 0 0 204 1 TCHP + 0 1 81 0 TCICON + 0 14 2 0 TCIOZ + 0 1 64 0 TCIWV + 2 0 35 0 TCLASS + 0 1 209 1 TCLSW + 0 6 20 0 TCOLC + 0 6 198 1 TCOLC + 0 1 74 0 TCOLG + 0 1 72 0 TCOLH + 0 6 19 0 TCOLIO + 0 1 70 0 TCOLI + 0 6 197 1 TCOLI + 0 1 210 1 TCOLM + 0 1 45 0 TCOLR + 0 1 204 1 TCOLR + 0 1 46 0 TCOLS + 0 1 205 1 TCOLS + 0 1 78 0 TCOLWA + 0 6 18 0 TCOLWO + 0 1 69 0 TCOLW + 0 6 196 1 TCOLW + 0 6 17 0 TCONDO + 0 1 21 0 TCOND + 0 6 195 1 TCOND + 10 3 242 1 TCSRG20 + 10 3 243 1 TCSRG30 + 10 3 244 1 TCSRG40 + 10 3 245 1 TCSRG50 + 10 3 246 1 TCSRG60 + 10 3 247 1 TCSRG70 + 10 3 248 1 TCSRG80 + 10 3 249 1 TCSRG90 + 0 1 51 0 TCWAT + 0 0 20 0 TDCHT + 0 2 31 0 TDCMOM + 2 0 36 0 TFRCT + 0 0 197 1 THFLX + 0 3 12 0 THICK + 0 6 10 0 THUNC + 0 0 203 1 THZ0 + 0 18 6 0 TIACCP + 0 18 7 0 TIACIP + 0 18 8 0 TIACRP + 10 3 251 1 TIDE + 0 1 206 1 TIPD + 0 19 11 0 TKE + 0 1 90 0 TKMFLX + 0 17 4 0 TLGTFD + 0 6 9 0 TMAXT + 0 0 4 0 TMAX + 0 0 5 0 TMIN + 0 0 29 0 TMPADV + 0 0 9 0 TMPA + 4 0 0 0 TMPSWP + 0 0 0 0 TMP + 0 2 227 1 TOA10 + 0 2 228 1 TOA50 + 0 2 229 1 TOD50 + 0 2 230 1 TOD90 + 0 19 197 1 TORPROB + 0 7 4 0 TOTALX + 0 1 80 0 TOTCON + 0 18 13 0 TOTLWD + 0 14 0 0 TOZNE + 0 14 197 1 TOZ + 2 0 37 0 TPERCT + 0 19 219 1 TPFI + 0 1 52 0 TPRATE + 0 20 13 0 TRANHH + 2 3 12 0 TRANSO + 2 0 230 1 TRANS + 0 20 14 0 TRSDS + 0 2 226 1 TRWDIR + 0 2 225 1 TRWSPD + 0 0 200 1 TSD1D + 0 191 0 0 TSEC + 4 6 0 0 TSI + 0 3 199 1 TSLSA + 0 1 50 0 TSNOWP + 0 1 241 1 TSNOW + 2 0 2 0 TSOIL + 0 1 57 0 TSRATE + 0 1 53 0 TSRWE + 0 19 203 1 TSTMC + 0 19 2 0 TSTM + 0 0 19 0 TTCHT + 0 0 198 1 TTDIA + 10 4 2 0 TTHDP + 0 0 25 0 TTLWRCS + 0 0 23 0 TTLWR + 0 0 26 0 TTPARM + 0 0 199 1 TTPHY + 0 0 193 1 TTRAD + 0 0 24 0 TTSWRCS + 0 0 22 0 TTSWR + 0 19 9 0 TURBB + 0 19 8 0 TURBT + 0 19 10 0 TURB + 0 1 49 0 TWATP + 0 2 35 0 TWIND + 10 3 210 1 TWLDC + 10 3 209 1 TWLDT + 10 3 205 1 TWLWAV + 0 20 58 0 TYAAL + 0 20 57 0 TYABA + 0 3 16 0 U-GWD + 0 3 194 1 U-GWD + 10 1 194 1 UBARO + 0 3 31 0 UCLSPRS + 0 1 120 0 UCSCIW + 0 1 119 0 UCSCLW + 0 0 28 0 UCTMP + 0 3 29 0 UDRATE + 0 2 17 0 UFLX + 0 2 2 0 UGRD + 0 2 23 0 UGUST + 0 2 41 0 UGWIND + 10 2 4 0 UICE + 0 1 91 0 UKMFLX + 0 5 4 0 ULWRF + 0 5 193 1 ULWRF + 0 3 27 0 UMFLX + 0 1 118 0 UNCSH + 0 2 45 0 UNDIV + 10 1 2 0 UOGRD + 1 0 14 0 UPAPCP + 1 0 15 0 UPASM + 0 7 15 0 UPHL + 0 7 197 1 UPHL + 2 3 2 0 UPLSM + 2 3 1 0 UPLST + 3 1 192 1 USCT + 10 0 21 0 USSD + 0 2 27 0 USTM + 0 2 194 1 USTM + 0 4 53 0 USWRFCS + 0 4 8 0 USWRF + 0 4 193 1 USWRF + 0 4 205 1 UTRF + 0 4 50 0 UVIUCS + 0 4 51 0 UVI + 0 7 196 1 UVI + 0 3 17 0 V-GWD + 0 3 195 1 V-GWD + 0 19 232 1 VAFTD + 0 1 4 0 VAPP + 10 1 195 1 VBARO + 0 4 200 1 VBDSF + 0 4 201 1 VDDSF + 0 0 202 1 VDFHR + 0 1 215 1 VDFMR + 0 14 195 1 VDFOZ + 0 2 208 1 VDFUA + 0 2 209 1 VDFVA + 0 2 204 1 VEDH + 2 0 210 1 VEGT + 2 0 4 0 VEG + 4 1 1 0 VEL1 + 4 1 2 0 VEL2 + 4 1 3 0 VEL3 + 0 2 18 0 VFLX + 0 6 48 0 VFRCICE + 0 6 49 0 VFRCIW + 0 6 47 0 VFRCWD + 0 2 3 0 VGRD + 2 0 198 1 VGTYP + 0 2 24 0 VGUST + 0 2 42 0 VGWIND + 10 2 5 0 VICE + 0 15 3 0 VIL + 0 19 35 0 VISBSN + 0 19 34 0 VISIFOG + 0 19 33 0 VISLFOG + 0 19 0 0 VIS + 0 1 92 0 VKMFLX + 0 20 52 0 VMXR + 10 1 3 0 VOGRD + 3 4 4 0 VOLACDEM + 3 4 7 0 VOLACDEN + 3 4 6 0 VOLACDOD + 3 4 3 0 VOLACDTH + 3 4 2 0 VOLACDTP + 3 4 1 0 VOLACDTT + 3 4 5 0 VOLAEADR + 3 4 8 0 VOLAPER + 3 4 0 0 VOLAPROB + 0 19 4 0 VOLASH + 2 3 13 0 VOLDEC + 2 3 11 0 VOLTSO + 0 2 46 0 VORTADV + 0 2 5 0 VPOT + 0 0 15 0 VPTMP + 0 2 224 1 VRATE + 3 1 193 1 VSCT + 2 0 25 0 VSOILM + 2 3 16 0 VSOSM + 10 0 22 0 VSSD + 0 2 28 0 VSTM + 0 2 195 1 VSTM + 4 2 4 0 VTEC + 0 0 1 0 VTMP + 0 2 15 0 VUCSH + 0 2 16 0 VVCSH + 0 2 8 0 VVEL + 2 0 27 0 VWILTM + 0 2 25 0 VWSH + 0 2 192 1 VWSH + 10 4 17 0 WATDENA + 10 4 16 0 WATERDEN + 10 4 20 0 WATPDENA + 10 4 19 0 WATPDEN + 10 4 18 0 WATPTEMP + 2 0 5 0 WATR + 10 0 62 0 WAVEFREW + 2 0 223 1 WCCONV + 0 0 13 0 WCF + 2 0 221 1 WCINC + 2 0 226 1 WCUFLX + 2 0 227 1 WCVFLX + 0 20 10 0 WDCPMFLX + 10 4 14 0 WDEPTH + 10 0 31 0 WDIRW + 0 2 0 0 WDIR + 1 2 0 0 WDPTHIL + 10 0 56 0 WDWFSWEL + 10 0 57 0 WDWSSWEL + 10 0 58 0 WDWTSWEL + 0 1 13 0 WEASD + 10 0 42 0 WESP + 0 0 27 0 WETBT + 0 18 11 0 WETDEP + 0 20 75 0 WFIREFLX + 1 2 2 0 WFRACT + 10 0 59 0 WFWFSWEL + 10 0 60 0 WFWSSWEL + 10 0 61 0 WFWTSWEL + 4 8 5 0 WHTCOR + 4 8 3 0 WHTRAD + 2 0 26 0 WILT + 2 0 201 1 WILT + 0 2 33 0 WINDF + 0 19 199 1 WINDPROB + 3 1 19 0 WINDS + 0 2 1 0 WIND + 0 19 25 0 WIWW + 10 0 193 1 WLENG + 0 20 9 0 WLSMFLX + 0 2 19 0 WMIXE + 2 0 33 0 WROD + 10 0 192 1 WSTP + 10 0 18 0 WSTR + 0 2 214 1 WTEND + 10 4 192 1 WTMPC + 1 2 1 0 WTMPIL + 10 4 15 0 WTMPSS + 10 3 0 0 WTMP + 2 0 222 1 WVCONV + 10 0 4 0 WVDIR + 10 0 5 0 WVHGT + 2 0 220 1 WVINC + 10 0 6 0 WVPER + 10 0 0 0 WVSP1 + 10 0 1 0 WVSP2 + 10 0 2 0 WVSP3 + 2 0 224 1 WVUFLX + 2 0 225 1 WVVFLX + 10 0 14 0 WWSDIR + 4 6 1 0 XLONG + 0 3 26 0 XPRES + 4 8 0 0 XRAYRAD + 4 6 2 0 XSHRT + 10 2 10 0 ZVCICEP diff --git a/parm/post_avblflds.xml b/parm/post_avblflds.xml index e3c36b8c6..de6f72922 100755 --- a/parm/post_avblflds.xml +++ b/parm/post_avblflds.xml @@ -238,12 +238,12 @@ 30 - LFTX_ON_ISOBARIC_SFC_50-100hpa + LFTX_ON_ISOBARIC_SFC_500-1000hpa LFTX isobaric_sfc - 5000. + 50000. isobaric_sfc - 10000. + 100000. 3.0 @@ -1040,6 +1040,7 @@ 117 SOILW_ON_DEPTH_BEL_LAND_SFC SOILW + NCEP depth_bel_land_sfc depth_bel_land_sfc 3.0 @@ -2337,7 +2338,7 @@ 274 INST_ULWRF_ON_TOP_OF_ATMOS - ULWSF + ULWRF top_of_atmos 4.0 @@ -2411,7 +2412,7 @@ 283 PRES_ON_HYBRID_LVL_1L PRES - hygrib_lvl + hybrid_lvl 3.0 @@ -3000,7 +3001,7 @@ 347 MAX_RHMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m tmpl4_8 - RHMAX + MAXRH MAX spec_hgt_lvl_above_grnd 2. @@ -3011,7 +3012,7 @@ 348 MIN_RHMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m tmpl4_8 - RHMIN + MINRH MIN spec_hgt_lvl_above_grnd 2. @@ -3568,9 +3569,9 @@ 409 GSD_HGT_ON_CLOUD_TOP - GSD_geopotential height on cloud tope + GSD_geopotential height on cloud top HGT - cloud_base + cloud_top 6.0 @@ -3669,7 +3670,7 @@ MAX spec_hgt_lvl_above_grnd 5000. - spec_pres_lvl_above_grnd + spec_hgt_lvl_above_grnd 2000. -3.0 @@ -3679,7 +3680,7 @@ MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km maximum Updraft Helicity on Specified Height Level Above Ground tmpl4_8 - REF + MAXREF MAX spec_hgt_lvl_above_grnd 1000. @@ -3700,29 +3701,31 @@ 423 - MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_40-100hpa - hourly maximum Upward Vertical Velocity between 40-100hpa + MAX_MAXUVV_ON_SPEC_PRES_LVL_ABOVE_GRND_400-1000hpa + hourly maximum Upward Vertical Velocity between 400-1000hpa tmpl4_8 MAXUVV + NCEP MAX spec_pres_lvl_above_grnd - 4000. + 40000. spec_pres_lvl_above_grnd - 10000. + 100000. -3.0 424 - MAX_MAXDVV_ON_SPEC_HGT_LVL_ABOVE_GRND_40-100hpa - hourly maximum Downward Vertical Velocity between 40-100hpa + MAX_MAXDVV_ON_SPEC_HGT_LVL_ABOVE_GRND_400-1000hpa + hourly maximum Downward Vertical Velocity between 400-1000hpa tmpl4_8 MAXDVV MAX + NCEP spec_pres_lvl_above_grnd - 4000. + 40000. spec_pres_lvl_above_grnd - 10000. + 100000. -3.0 @@ -3970,6 +3973,7 @@ LTNG_ON_SURFACE lightning LTNG + NCEP surface 1.0 @@ -6365,7 +6369,7 @@ 700 GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km tmpl4_8 - UPHL + MXUPHL MAX spec_hgt_lvl_above_grnd 6000. @@ -6405,7 +6409,7 @@ 704 GSD_MAX_LTG_THREAT3_ON_ENTIRE_ATMOS - LTGTHREAT3 + LTNG entire_atmos 3.0 @@ -6528,7 +6532,7 @@ 768 GSD_ECHOTOP_ON_CLOUD_TOP Echo top height (Highest height in meters of the 18-dBZ reflectivity on a model level) - ECHOTOP + RETOP cloud_top 3.0 @@ -6569,6 +6573,76 @@ 4.0 + + 969 + SBTAHI7_ON_TOP_OF_ATMOS + SBTAHI7 + top_of_atmos + 4.0 + + + 970 + SBTAHI8_ON_TOP_OF_ATMOS + SBTAHI8 + top_of_atmos + 4.0 + + + 971 + SBTAHI9_ON_TOP_OF_ATMOS + SBTAHI9 + top_of_atmos + 4.0 + + + 972 + SBTAHI10_ON_TOP_OF_ATMOS + SBTAHI10 + top_of_atmos + 4.0 + + + 973 + SBTAHI11_ON_TOP_OF_ATMOS + SBTAHI11 + top_of_atmos + 4.0 + + + 974 + SBTAHI12_ON_TOP_OF_ATMOS + SBTAHI12 + top_of_atmos + 4.0 + + + 975 + SBTAHI13_ON_TOP_OF_ATMOS + SBTAHI13 + top_of_atmos + 4.0 + + + 976 + SBTAHI14_ON_TOP_OF_ATMOS + SBTAHI14 + top_of_atmos + 4.0 + + + 977 + SBTAHI15_ON_TOP_OF_ATMOS + SBTAHI15 + top_of_atmos + 4.0 + + + 978 + SBTAHI16_ON_TOP_OF_ATMOS + SBTAHI16 + top_of_atmos + 4.0 + 927 SBTA167_ON_TOP_OF_ATMOS diff --git a/parm/post_avblflds_comupp.xml b/parm/post_avblflds_comupp.xml deleted file mode 100644 index 9d408ba12..000000000 --- a/parm/post_avblflds_comupp.xml +++ /dev/null @@ -1,5399 +0,0 @@ - - - - - - - 1 - PRES_ON_HYBRID_LVL - PRES - hybrid_lvl - 6.0 - - - - 2 - TMP_ON_HYBRID_LVL - TMP - hybrid_lvl - 4.0 - - - - 3 - POT_ON_HYBRID_LVL - POT - hybrid_lvl - 4.0 - - - - 4 - DPT_ON_HYBRID_LVL - DPT - hybrid_lvl - 5.0 - - - - 5 - SPFH_ON_HYBRID_LVL - SPFH - hybrid_lvl - 7.0 - - - - 6 - RH_ON_HYBRID_LVL - RH - hybrid_lvl - 4.0 - - - - 7 - UGRD_ON_HYBRID_LVL - UGRD - hybrid_lvl - 4.0 - - - - 8 - VGRD_ON_HYBRID_LVL - VGRD - hybrid_lvl - 4.0 - - - - 9 - VVEL_ON_HYBRID_LVL - VVEL - hybrid_lvl - 5.0 - - - - 10 - ABSV_ON_HYBRID_LVL - ABSV - hybrid_lvl - 3.0 - - - - 11 - TKE_ON_HYBRID_LVL - TKE - hybrid_lvl - 3.0 - - - - 12 - HGT_ON_ISOBARIC_SFC - HGT - isobaric_sfc - 6.0 - - - - 13 - TMP_ON_ISOBARIC_SFC - TMP - isobaric_sfc - 3.0 - - - - 14 - POT_ON_ISOBARIC_SFC - POT - isobaric_sfc - 4.0 - - - - 15 - DPT_ON_ISOBARIC_SFC - DPT - isobaric_sfc - 5.0 - - - - 16 - SPFH_ON_ISOBARIC_SFC - SPFH - isobaric_sfc - 4.0 - - - - 17 - RH_ON_ISOBARIC_SFC - RH - isobaric_sfc - 2.0 - - - - 18 - UGRD_ON_ISOBARIC_SFC - UGRD - isobaric_sfc - 4.0 - - - - 19 - VGRD_ON_ISOBARIC_SFC - VGRD - isobaric_sfc - 4.0 - - - - 20 - VVEL_ON_ISOBARIC_SFC - VVEL - isobaric_sfc - 5.0 - - - - 21 - ABSV_ON_ISOBARIC_SFC - ABSV - isobaric_sfc - 4.0 - - - - 22 - TKE_ON_ISOBARIC_SFC - TKE - isobaric_sfc - 3.0 - - - - 23 - MSLET_ON_MEAN_SEA_LVL - MSLET - NCEP - mean_sea_lvl - 6.0 - - - - 24 - PRES_ON_SURFACE - PRES - surface - 6.0 - - - - 25 - HGT_ON_SURFACE - HGT - surface - 6.0 - - - - 26 - TMP_ON_SURFACE - TMP - surface - 4.0 - - - - 27 - POT_ON_SURFACE - POT - surface - 5.0 - - - - 28 - SPFH_ON_SURFACE - SPFH - surface - 3.0 - - - - 29 - DPT_ON_SURFACE - DPT - surface - 4.0 - - - - 30 - LFTX_ON_ISOBARIC_SFC_500-1000hpa - LFTX - isobaric_sfc - 50000. - isobaric_sfc - 100000. - 3.0 - - - - 31 - 4LFTX_ON_SPEC_PRES_ABOVE_GRND - 4LFTX - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 32 - CAPE_ON_SURFACE - CAPE - surface - 4.0 - - - - 33 - ACM_ACPCP_ON_SURFACE - tmpl4_8 - ACPCP - ACM - surface - 4.0 - - - - 34 - ACM_NCPCP_ON_SURFACE - tmpl4_8 - NCPCP - ACM - surface - 4.0 - - - - 35 - ACM_WEASD_ON_SURFACE - tmpl4_8 - WEASD - ACM - surface - 4.0 - - - - 36 - SOILM_ON_DEPTH_BEL_LAND_SFC - SOILM - depth_bel_land_sfc - 2 - depth_bel_land_sfc - 2 - 3.0 - - - - 37 - LCDC_ON_LOW_CLOUD_LYR - LCDC - low_cloud_lyr - 3.0 - - - - 38 - MCDC_ON_MID_CLOUD_LYR - MCDC - mid_cloud_lyr - 3.0 - - - - 39 - HCDC_ON_HIGH_CLOUD_LYR - HCDC - high_cloud_lyr - 3.0 - - - - 40 - SWHR_ON_HYBRID_LVL - SWHR - hybrid_lvl - 3.0 - - - - 41 - LWHR_ON_HYBRID_LVL - LWHR - hybrid_lvl - 3.0 - - - - 42 - AVE_LHTFL_ON_SURFACE - tmpl4_8 - LHTFL - AVE - surface - 4.0 - - - - 43 - AVE_SHTFL_ON_SURFACE - tmpl4_8 - SHTFL - AVE - surface - 4.0 - - - - 44 - SFCR_ON_SURFACE - SFCR - surface - 2.7 - - - - 45 - FRICV_ON_SURFACE - FRICV - surface - 4.0 - - - - 46 - AVE_MFLX_ON_SURFACE - tmpl4_8 - MFLX - AVE - surface - -3.0 - - - - 47 - ACM_EVP_ON_SURFACE - tmpl4_8 - EVP - ACM - surface - 4.0 - - - - 48 - NLAT_ON_SURFACE - NLAT - surface - 4.0 - - - - 49 - ELON_ON_SURFACE - ELON - surface - 4.0 - - - - 50 - LAND_ON_SURFACE - LAND - surface - 1.0 - - - - 51 - ICEC_ON_SURFACE - ICEC - surface - 3.0 - - - - 52 - LMH_ON_SURFACE - LMH - surface - 2.0 - - - - 53 - LMV_ON_SURFACE - LMV - surface - 2.0 - - - - 54 - PRES_ON_TROPOPAUSE - PRES - tropopause - 6.0 - - - - 55 - TMP_ON_TROPOPAUSE - TMP - tropopause - 3.0 - - - - 56 - UGRD_ON_TROPOPAUSE - UGRD - tropopause - 4.0 - - - - 57 - VGRD_ON_TROPOPAUSE - VGRD - tropopause - 4.0 - - - - 58 - VWSH_ON_TROPOPAUSE - VWSH - tropopause - 3.0 - - - - 59 - TMP_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL - TMP - spec_alt_above_mean_sea_lvl - 3.0 - - - - 60 - UGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL - UGRD - spec_alt_above_mean_sea_lvl - 4.0 - - - - 61 - VGRD_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL - VGRD - spec_alt_above_mean_sea_lvl - 4.0 - - - - 62 - HGT_ON_0C_ISOTHERM - HGT - 0C_isotherm - 6.0 - - - - 63 - RH_ON_0C_ISOTHERM - RH - 0C_isotherm - 2.0 - - - - 64 - UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - UGRD - spec_hgt_lvl_above_grnd - 10. - 4.0 - - - - 65 - VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - VGRD - spec_hgt_lvl_above_grnd - 10. - 4.0 - - - - 66 - RH_ON_SIGMA_LVL_0.33-1.0 - RH - sigma_lvl - 2 - 33. - sigma_lvl - 2 - 100. - 2.0 - - - - 67 - PRES_ON_SPEC_PRES_ABOVE_GRND - PRES - spec_pres_above_grnd - spec_pres_above_grnd - 6.0 - - - - 68 - TMP_ON_SPEC_PRES_ABOVE_GRND - TMP - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 69 - POT_ON_SPEC_PRES_ABOVE_GRND - POT - spec_pres_above_grnd - spec_pres_above_grnd - 4.0 - - - - 70 - DPT_ON_SPEC_PRES_ABOVE_GRND - DPT - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 71 - SPFH_ON_SPEC_PRES_ABOVE_GRND - SPFH - spec_pres_above_grnd - spec_pres_above_grnd - 5.0 - - - - 72 - RH_ON_SPEC_PRES_ABOVE_GRND - RH - spec_pres_above_grnd - spec_pres_above_grnd - 2.0 - - - - 73 - UGRD_ON_SPEC_PRES_ABOVE_GRND - UGRD - spec_pres_above_grnd - spec_pres_above_grnd - 4.0 - - - - 74 - VGRD_ON_SPEC_PRES_ABOVE_GRND - VGRD - spec_pres_above_grnd - spec_pres_above_grnd - 4.0 - - - - 75 - PLI_ON_SPEC_PRES_ABOVE_GRND - PLI - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 76 - RH_ON_SURFACE - RH - surface - 4.0 - - - - 77 - HGT_ON_HYBRID_LVL - HGT - hybrid_lvl - 4.0 - - - - 78 - AVE_LRGHR_ON_HYBRID_LVL - tmpl4_8 - LRGHR - AVE - hybrid_lvl - 3.0 - - - - 79 - AVE_CNVHR_ON_HYBRID_LVL - tmpl4_8 - CNVHR - AVE - hybrid_lvl - 2.7 - - - - 80 - PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR - PWAT - entire_atmos_single_lyr - 3.0 - - - - 81 - RH_ON_SIGMA_LVL_0.66-1.0 - RH - sigma_lvl - 2 - 66. - sigma_lvl - 2 - 100. - 2.0 - - - - 82 - RH_ON_SIGMA_LVL_0.33-0.66 - RH - sigma_lvl - 2 - 33. - sigma_lvl - 2 - 66. - 2.0 - - - - 83 - MCONV_ON_HYBRID_LVL - MCONV - hybrid_lvl - 3.0 - - - - 84 - STRM_ON_HYBRID_LVL - STRM - hybrid_lvl - 3.0 - - - - 85 - MCONV_ON_ISOBARIC_SFC - MCONV - isobaric_sfc - 3.0 - - - - 86 - STRM_ON_ISOBARIC_SFC - STRM - isobaric_sfc - 3.0 - - - - 87 - ACM_APCP_ON_SURFACE - tmpl4_8 - APCP - ACM - surface - 4.0 - - - - 88 - MCONV_ON_SPEC_PRES_ABOVE_GRND - MCONV - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 89 - PWAT_ON_SPEC_PRES_ABOVE_GRND - PWAT - spec_pres_above_grnd - spec_pres_above_grnd - 3.0 - - - - 90 - VVEL_ON_SPEC_PRES_ABOVE_GRND - VVEL - spec_pres_above_grnd - spec_pres_above_grnd - 5.0 - - - - 91 - PRES_ON_SIGMA_LVL_0.98230 - PRES - sigma_lvl - 5 - 98230. - 6.0 - - - - 92 - TMP_ON_SIGMA_LVL_0.98230 - TMP - sigma_lvl - 5 - 98230. - 4.0 - - - - 93 - SPFH_ON_SIGMA_LVL_0.98230 - SPFH - sigma_lvl - 5 - 98230. - 3.0 - - - - 94 - RH_ON_SIGMA_LVL_0.98230 - RH - sigma_lvl - 5 - 98230. - 4.0 - - - - 95 - UGRD_ON_SIGMA_LVL_0.98230 - UGRD - sigma_lvl - 5 - 98230. - 5.0 - - - - 96 - VGRD_ON_SIGMA_LVL_0.98230 - VGRD - sigma_lvl - 5 - 98230. - 5.0 - - - - 97 - TMP_ON_SIGMA_LVL_0.89671 - TMP - sigma_lvl - 5 - 89671. - 4.0 - - - - 98 - TMP_ON_SIGMA_LVL_0.78483 - TMP - sigma_lvl - 5 - 78483. - 4.0 - - - - 99 - RH_ON_SIGMA_LVL_0.47_1.0 - RH - sigma_lvl - 2 - 47. - sigma_lvl - 2 - 100. - 2.0 - - - - 100 - RH_ON_SIGMA_LVL_0.47_0.96 - RH - sigma_lvl - 2 - 47. - sigma_lvl - 2 - 96. - 2.0 - - - - 101 - RH_ON_SIGMA_LVL_0.18_0.47 - RH - sigma_lvl - 2 - 18. - sigma_lvl - 2 - 47. - 2.0 - - - - 102 - RH_ON_SIGMA_LVL_0.84_0.98 - RH - sigma_lvl - 2 - 84. - sigma_lvl - 2 - 98. - 2.0 - - - - 103 - MCONV_ON_SIGMA_LVL_0.85_1.0 - MCONV - sigma_lvl - 2 - 85. - sigma_lvl - 2 - 100. - 3.0 - - - - 104 - PWAT_ON_SIGMA_LVL_0.33_1.0 - PWAT - sigma_lvl - 2 - 33. - sigma_lvl - 2 - 100. - 2.0 - - - - 105 - PRES_ON_MEAN_SEA_LVL - PRMSL - mean_sea_lvl - 6.0 - - - - 106 - TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - TMP - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - 107 - CIN_ON_SURFACE - CIN - surface - 4.0 - - - - 108 - POT_ON_TROPOPAUSE - POT - tropopause - 5.0 - - - - 109 - HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC - HGT - lvl_of_adiab_cond_from_sfc - 5.0 - - - - 110 - PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC - PRES - lvl_of_adiab_cond_from_sfc - 6.0 - - - - 111 - RI_ON_HYBRID_LVL - RI - hybrid_lvl - 3.0 - - - - 112 - SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - SPFH - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - 113 - DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - DPT - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - 114 - RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - RH - spec_hgt_lvl_above_grnd - 2. - 3.0 - - - - 115 - TSOIL_ON_DEPTH_BEL_LAND_SFC_3m - TSOIL - depth_bel_land_sfc - 3. - 3.0 - - - - 116 - TSOIL_ON_DEPTH_BEL_LAND_SFC - TSOIL - depth_bel_land_sfc - 2 - depth_bel_land_sfc - 2 - 4.0 - - - - 117 - SOILW_ON_DEPTH_BEL_LAND_SFC - SOILW - NCEP - depth_bel_land_sfc - 2 - depth_bel_land_sfc - 2 - 3.0 - - - - 118 - CNWAT_ON_SURFACE - CNWAT - surface - 1.0 - - - - 119 - WEASD_ON_SURFACE - WEASD - surface - 4.0 - - - - 120 - SNOWC_ON_SURFACE - SNOWC - surface - 3.0 - - - - 121 - ACM_SNOM_ON_SURFACE - tmpl4_8 - SNOM - ACM - surface - 4.0 - - - - 122 - ACM_SSRUN_ON_SURFACE - tmpl4_8 - SSRUN - ACM - surface - 4.0 - - - - 123 - ACM_BGRUN_ON_SURFACE - tmpl4_8 - BGRUN - ACM - surface - 4.0 - - - - 124 - CLWMR_ON_HYBRID_LVL - CLWMR - hybrid_lvl - 3.0 - - - - 125 - CICE_ON_HYBRID_LVL - CICE - hybrid_lvl - 3.0 - - - - 126 - AVE_DSWRF_ON_SURFACE - tmpl4_8 - DSWRF - AVE - surface - 3.0 - - - - 127 - AVE_DLWRF_ON_SURFACE - tmpl4_8 - DLWRF - AVE - surface - 3.0 - - - - 128 - AVE_USWRF_ON_SURFACE - tmpl4_8 - USWRF - AVE - surface - 3.0 - - - - 129 - AVE_ULWRF_ON_SURFACE - tmpl4_8 - ULWRF - AVE - surface - 3.0 - - - - 130 - AVE_USWRF_ON_TOP_OF_ATMOS - tmpl4_8 - USWRF - AVE - top_of_atmos - 3.0 - - - - 131 - AVE_ULWRF_ON_TOP_OF_ATMOS - tmpl4_8 - ULWRF - AVE - top_of_atmos - 3.0 - - - - 132 - CD_ON_SURFACE - CD - surface - 3.0 - - - - 133 - UFLX_ON_SURFACE - UFLX - surface - 3.0 - - - - 134 - VFLX_ON_SURFACE - VFLX - surface - 3.0 - - - - 135 - AVE_GFLUX_ON_SURFACE - tmpl4_8 - GFLUX - AVE - surface - 4.0 - - - - 136 - AVE_SNOHF_ON_SURFACE - tmpl4_8 - SNOHF - AVE - surface - 4.0 - - - - 137 - ACM_PEVAP_ON_SURFACE - tmpl4_8 - PEVAP - ACM - surface - 4.0 - - - - 138 - PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - PRES - spec_hgt_lvl_above_grnd - 2. - 6.0 - - - - 139 - AVE_CDLYR_ON_ENTIRE_ATMOS - tmpl4_8 - CDLYR - AVE - entire_atmos_single_lyr - 3.0 - - - - 140 - TTRAD_ON_HYBRID_LVL - TTRAD - hybrid_lvl - 3.0 - - - - 141 - INST_USWRF_ON_SURFACE - USWRF - surface - 4.0 - - - - 142 - INST_ULWRF_ON_SURFACE - ULWRF - surface - 4.0 - - - - 143 - AVE_CDCON_ON_ENTIRE_ATMOS - tmpl4_8 - CDCON - AVE - entire_atmos_single_lyr - 3.0 - - - - 144 - AVE_TCDC_ON_ENTIRE_ATMOS - tmpl4_8 - TCDC - AVE - entire_atmos_single_lyr - 3.0 - - - - 145 - TCDC_ON_HYBRID_LVL - TCDC - hybrid_lvl - 3.0 - - - - 146 - BMIXL_ON_HYBRID_LVL - BMIXL - hybrid_lvl - 3.0 - - - - 147 - AMIXL_ON_HYBRID_LVL - AMIXL - hybrid_lvl - 3.0 - - - - 148 - PRES_ON_CLOUD_BASE - PRES - cloud_base - 6.0 - - - - 149 - PRES_ON_CLOUD_TOP - PRES - cloud_top - 6.0 - - - - 150 - ALBDO_ON_SURFACE - ALBDO - surface - 3.0 - - - - 151 - WTMP_ON_SURFACE - WTMP - surface - 5.0 - - - - 152 - INST_GFLUX_ON_SURFACE - GFLUX - surface - 3.0 - - - - 153 - CLWMR_ON_ISOBARIC_SFC - CLWMR - isobaric_sfc - 4.0 - - - - 154 - INST_SHTFL_ON_SURFACE - SHTFL - surface - 4.0 - - - - 155 - INST_LHTFL_ON_SURFACE - LHTFL - surface - 4.0 - - - - 156 - INST_DSWRF_ON_SURFACE - DSWRF - surface - 4.0 - - - - 157 - INST_DLWRF_ON_SURFACE - DLWRF - surface - 4.0 - - - - 158 - POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - POT - spec_hgt_lvl_above_grnd - 5.0 - - - - 159 - SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - SPFH - spec_hgt_lvl_above_grnd - 3.0 - - - - 160 - INST_CRAIN_ON_SURFACE - CRAIN - surface - 1.0 - - - - 161 - INST_TCDC_ON_ENTIRE_ATMOS - TCDC - entire_atmos_single_lyr - 3.0 - - - - 162 - HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND - HLCY - spec_hgt_lvl_above_grnd - spec_hgt_lvl_above_grnd - 4.0 - - - - 163 - USTM_ON_SPEC_HGT_LVL_ABOVE_GRND - USTM - spec_hgt_lvl_above_grnd - spec_hgt_lvl_above_grnd - 4.0 - - - - 164 - VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND - VSTM - spec_hgt_lvl_above_grnd - spec_hgt_lvl_above_grnd - 4.0 - - - - 165 - HGT_ON_HGHST_TROP_FRZ_LVL - HGT - hghst_trop_frz_lvl - 6.0 - - - - 166 - CICE_ON_ISOBARIC_SFC - CICE - isobaric_sfc - 6.0 - - - - 167 - INST_PRATE_ON_SURFACE - PRATE - surface - 3.0 - - - - 168 - TMP_ON_CLOUD_TOP - TMP - cloud_top - 5.0 - - - - 169 - SFEXC_ON_SURFACE - SFEXC - surface - 3.0 - - - - 170 - VEG_ON_SURFACE - VEG - surface - 3.0 - - - - 171 - MSTAV_ON_DEPTH_BEL_LAND_SFC - MSTAV - depth_bel_land_sfc - 2 - depth_bel_land_sfc - 2 - 3.0 - - - - 172 - CPOFP_ON_SURFACE - CPOFP - surface - 4.0 - - - - 173 - PRES_ON_MAX_WIND - PRES - max_wind - 6.0 - - - - 174 - HGT_ON_MAX_WIND - HGT - max_wind - 6.0 - - - - 175 - UGRD_ON_MAX_WIND - UGRD - max_wind - 4.0 - - - - 176 - VGRD_ON_MAX_WIND - VGRD - max_wind - 4.0 - - - - 177 - HGT_ON_TROPOPAUSE - HGT - tropopause - 6.0 - - - - 178 - HGT_ON_CLOUD_BASE - HGT - cloud_base - 6.0 - - - - 179 - HGT_ON_CLOUD_TOP - HGT - cloud_top - 6.0 - - - - 180 - VIS_ON_SURFACE - VIS - surface - 3.0 - - - - 181 - RWMR_ON_HYBRID_LVL - RWMR - hybrid_lvl - 3.0 - - - - 182 - SNMR_ON_HYBRID_LVL - SNMR - hybrid_lvl - 3.0 - - - - 183 - RWMR_ON_ISOBARIC_SFC - RWMR - isobaric_sfc - 3.0 - - - - 184 - SNMR_ON_ISOBARIC_SFC - SNMR - isobaric_sfc - 3.0 - - - - 185 - FRAIN_ON_HYBRID_LVL - FRAIN - hybrid_lvl - 3.0 - - - - 186 - FICE_ON_HYBRID_LVL - FICE - hybrid_lvl - 3.0 - - - - 187 - RIME_ON_HYBRID_LVL - RIME - hybrid_lvl - 3.0 - - - - 188 - PRES_ON_CONVECTIVE_CLOUD_BOT_LVL - PRES - convective_cloud_bot_lvl - 6.0 - - - - 189 - PRES_ON_CONVECTIVE_CLOUD_TOP_LVL - PRES - convective_cloud_top_lvl - 6.0 - - - - 190 - PRES_ON_SHALL_CONVECTIVE_CLOUD_BOT_LVL - PRES - shall_convective_cloud_bot_lvl - 6.0 - - - - 191 - PRES_ON_SHALL_CONVECTIVE_CLOUD_TOP_LVL - PRES - shall_convective_cloud_top_lvl - 6.0 - - - - 192 - PRES_ON_DEEP_CONVECTIVE_CLOUD_BOT_LVL - PRES - deep_convective_cloud_bot_lvl - 6.0 - - - - 193 - PRES_ON_DEEP_CONVECTIVE_CLOUD_TOP_LVL - PRES - deep_convective_cloud_top_lvl - 6.0 - - - - 194 - PRES_ON_GRID_SCALE_CLOUD_BOT_LVL - PRES - grid_scale_cloud_bot_lvl - 6.0 - - - - 195 - PRES_ON_GRID_SCALE_CLOUD_TOP_LVL - PRES - grid_scale_cloud_top_lvl - 6.0 - - - - 196 - CDCON_ON_ENTIRE_ATMOS - CDCON - entire_atmos_single_lyr - 2.0 - - - - 197 - CUEFI_ON_ENTIRE_ATMOS_SINGLE_LYR - CUEFI - entire_atmos_single_lyr - 3.0 - - - - 198 - TCOND_ON_ISOBARIC_SFC - TCOND - isobaric_sfc - 3.0 - - - - 199 - TCOND_ON_HYBRID_LVL - TCOND - hybrid_lvl - 3.0 - - - - 200 - TCOLW_ON_ENTIRE_ATMOS - TCOLW - entire_atmos_single_lyr - 5.0 - - - - 201 - TCOLI_ON_ENTIRE_ATMOS - TCOLI - entire_atmos_single_lyr - 5.0 - - - - 202 - TCOLR_ON_ENTIRE_ATMOS - TCOLR - entire_atmos_single_lyr - 5.0 - - - - 203 - TCOLS_ON_ENTIRE_ATMOS - TCOLS - entire_atmos_single_lyr - 5.0 - - - - 204 - TCOLC_ON_ENTIRE_ATMOS - TCOLC - entire_atmos_single_lyr - 5.0 - - - - 205 - HGT_ON_SIGMA_LVLS - HGT - sigma_lvl - 5.0 - - - - 206 - TMP_ON_SIGMA_LVLS - TMP - sigma_lvl - 4.0 - - - - 207 - SPFH_ON_SIGMA_LVLS - SPFH - sigma_lvl - 3.0 - - - - 208 - UGRD_ON_SIGMA_LVLS - UGRD - sigma_lvl - 4.0 - - - - 209 - VGRD_ON_SIGMA_LVLS - VGRD - sigma_lvl - 4.0 - - - - 210 - VVEL_ON_SIGMA_LVLS - VVEL - sigma_lvl - 5.0 - - - - 211 - CLWMR_ON_SIGMA_LVLS - CLWMR - sigma_lvl - 4.0 - - - - 212 - CICE_ON_SIGMA_LVLS - CICE - sigma_lvl - 6.0 - - - - 213 - RWMR_ON_SIGMA_LVLS - RWMR - sigma_lvl - 3.0 - - - - 214 - SNMR_ON_SIGMA_LVLS - SNMR - sigma_lvl - 3.0 - - - - 215 - TCOND_ON_SIGMA_LVLS - TCOND - sigma_lvl - 3.0 - - - - 216 - PRES_ON_SIGMA_LVLS - PRES - sigma_lvl - 6.0 - - - - 217 - TKE_ON_SIGMA_LVLS - TKE - sigma_lvl - 3.0 - - - - 218 - VGTYP_ON_SURFACE - VGTYP - surface - 3.0 - - - - 219 - SOTYP_ON_SURFACE - SOTYP - surface - 3.0 - - - - 220 - CCOND_ON_SURFACE - CCOND - surface - 3.0 - - - - 221 - HPBL_ON_SURFACE - HPBL - surface - 6.0 - - - - 222 - TCDC_ON_SIGMA_LVLS - TCDC - sigma_lvl - 2 - 3.0 - - - - 223 - SLTYP_ON_SURFACE - SLTYP - surface - 3.0 - - - - 224 - SNOD_ON_SURFACE - SNOD - surface - 6.0 - - - - 225 - SOILL_ON_DEPTH_BEL_LAND_SFC - SOILL - depth_bel_land_sfc - depth_bel_land_sfc - 3.0 - - - - 226 - SNFALB_ON_SURFACE - SNFALB - surface - 3.0 - - - - 227 - MXSALB_ON_SURFACE - MXSALB - surface - 3.0 - - - - 228 - EVCW_ON_SURFACE - EVCW - surface - 3.0 - - - - 229 - EVBS_ON_SURFACE - EVBS - surface - 3.0 - - - - 230 - TRANS_ON_SURFACE - TRANS - surface - 3.0 - - - - 231 - SBSNO_ON_SURFACE - SBSNO - surface - 3.0 - - - - 232 - SMDRY_ON_SURFACE - SMDRY - surface - 3.0 - - - - 233 - POROS_ON_SURFACE - POROS - surface - 3.0 - - - - 234 - RSMIN_ON_SURFACE - RSMIN - surface - 3.0 - - - - 235 - RLYRS_ON_SURFACE - RLYRS - surface - 3.0 - - - - 236 - WILT_ON_SURFACE - WILT - surface - 3.0 - - - - 237 - SMREF_ON_SURFACE - SMREF - surface - 3.0 - - - - 238 - RCS_ON_SURFACE - RCS - surface - 3.0 - - - - 239 - RCT_ON_SURFACE - RCT - surface - 5.0 - - - - 240 - RCQ_ON_SURFACE - RCQ - surface - 3.0 - - - - 241 - RCSOL_ON_SURFACE - RCSOL - surface - 3.0 - - - - 242 - PEVPR_ON_SURFACE - PEVPR - surface - 6.0 - - - - 243 - VEDH_ON_SIGMA_LVLS - VEDH - sigma_lvl - 4.0 - - - - 245 - GUST_ON_SURFACE - GUST - surface - 3.0 - - - - 246 - PLPL_ON_SPEC_PRES_ABOVE_GRND - PLPL - NCEP - spec_pres_above_grnd - spec_pres_above_grnd - 6.0 - - - - 247 - HGT_ON_LWST_LVL_OF_WET_BULB_ZERO - HGT - lwst_lvl_of_wet_bulb_zero - -5.0 - - - - 249 - CPRAT_ON_SURFACE - CPRAT - surface - 4.0 - - - - 250 - REFD_ON_HYBRID_LVL - REFD - hybrid_lvl - 4.0 - - - - 251 - REFD_ON_ISOBARIC_SFC - REFD - isobaric_sfc - 4.0 - - - - 252 - REFC_ON_ENTIRE_ATMOS - REFC - entire_atmos_single_lyr - 4.0 - - - - 253 - REFD_ON_SPEC_HGT_LVL_ABOVE_GRND - REFD - spec_hgt_lvl_above_grnd - 4.0 - - - - 254 - LAI_ON_SURFACE - LAI - surface - -3.0 - - - - 255 - GRLE_ON_SIGMA_LVLS - GRLE - sigma_lvl - 3.0 - - - - 256 - ACM_LSPA_ON_SURFACE - tmpl4_8 - LSPA - ACM - surface - 3.0 - - - - 257 - TIPD_ON_ISOBARIC_SFC - TIPD - isobaric_sfc - 6.0 - - - - 258 - TPFI_ON_ISOBARIC_SFC - TPFI - isobaric_sfc - 6.0 - - - - 259 - VWSH_ON_SPEC_HGT_LVL_ABOVE_GRND - VWSH - spec_hgt_lvl_above_grnd - 6.0 - - - - 260 - HGT_ON_CLOUD_CEILING - HGT - cloud_ceilng - 6.0 - - - - 261 - VIS_ON_CLOUD_BASE - VIS - cloud_base - 6.0 - - - - 262 - INST_CSDSF_ON_SURFACE - CSDSF - surface - 4.0 - - - - 263 - RIME_ON_ISOBARIC_SFC - RIME - isobaric_sfc - 3.0 - - - - 264 - DZDT_ON_HYBRID_LVL - DZDT - hybrid_lvl - -5.0 - - - - 265 - SBT122_ON_TOP_OF_ATMOS_FROM_LWRAD - SBT122 - top_of_atmos - 5.0 - - - - 266 - AVE_ALBDO_ON_SURFACE - tmpl4_8 - ALBDO - AVE - surface - 4.0 - - - - 267 - O3MR_ON_HYBRID_LVL - O3MR - hybrid_lvl - 7.0 - - - - 268 - O3MR_ON_ISOBARIC_SFC - O3MR - isobaric_sfc - 5.0 - - - - 269 - AVE_UFLX_ON_SURFACE - tmpl4_8 - UFLX - AVE - surface - 4.0 - - - - 270 - AVE_VFLX_ON_SURFACE - tmpl4_8 - VFLX - AVE - surface - 4.0 - - - - 271 - AVE_PRATE_ON_SURFACE - tmpl4_8 - PRATE - AVE - surface - 4.0 - - - - 272 - AVE_CPRAT_ON_SURFACE - tmpl4_8 - CPRAT - AVE - surface - 4.0 - - - - 273 - PRES_ON_HYBRID_LVL_LLM - PRES - hybrid_lvl - hybrid_lvl - 3.0 - - - - 274 - INST_ULWRF_ON_TOP_OF_ATMOS - ULWRF - top_of_atmos - 4.0 - - - - 275 - BRTMP_ON_TOP_OF_ATMOS - BRTMP - top_of_atmos - 3.0 - - - - 276 - REFZR_ON_ENTIRE_ATMOS - REFZR - entire_atmos_single_lyr - -4.0 - - - - 277 - REFZI_ON_ENTIRE_ATMOS - REFZI - entire_atmos_single_lyr - -4.0 - - - - 278 - REFZC_ON_ENTIRE_ATMOS - REFZC - entire_atmos_single_lyr - -4.0 - - - - 279 - REFZR_ON_SPEC_HGT_LVL_ABOVE_GRND - REFZR - spec_hgt_lvl_above_grnd - -4.0 - - - - 280 - REFZI_ON_SPEC_HGT_LVL_ABOVE_GRND - REFZI - spec_hgt_lvl_above_grnd - -4.0 - - - - 281 - REFZC_ON_SPEC_HGT_LVL_ABOVE_GRND - REFZC - spec_hgt_lvl_above_grnd - -4.0 - - - - 282 - PRES_ON_TOP_OF_ATMOS - PRES - top_of_atmos - 3.0 - - - - - 283 - PRES_ON_HYBRID_LVL_1L - PRES - hybrid_lvl - hybrid_lvl - 3.0 - - - - 284 - DZDT_ON_ISOBARIC_SFC - DZDT - isobaric_sfc - -5.0 - - - - 285 - TCLSW_ON_ENTIRE_ATMOS - TCLSW - entire_atmos_single_lyr - 5.0 - - - - 286 - TCOLM_ON_ENTIRE_ATMOS - TCOLM - entire_atmos_single_lyr - 5.0 - - - - 287 - HGT_ON_LWST_BOT_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR - HGT - lwst_bot_lvl_of_supercooled_liq_water_lyr - 6.0 - - - - 288 - HGT_ON_HGHST_TOP_LVL_OF_SUPERCOOLED_LIQ_WATER_LYR - HGT - hghst_top_lvl_of_supercooled_liq_water_lyr - 5.0 - - - - 289 - HGT_ON_PLANETARY_BOUND_LYR - HGT - planetary_bound_lyr - -4.0 - - - - 290 - SWHR_ON_ENTIRE_ATMOS - SWHR - entire_atmos_single_lyr - 5.0 - - - - 291 - LWHR_ON_ENTIRE_ATMOS - LWHR - entire_atmos_single_lyr - 5.0 - - - - 292 - AVE_LRGHR_ON_ENTIRE_ATMOS - tmpl4_8 - LRGHR - AVE - entire_atmos_single_lyr - 5.0 - - - - 293 - AVE_CNVHR_ON_ENTIRE_ATMOS - tmpl4_8 - CNVHR - AVE - entire_atmos_single_lyr - 5.0 - - - - 294 - TTRAD_ON_ISOBARIC_SFC - TTRAD - isobaric_sfc - 5.0 - - - - 295 - MCONV_ON_ENTIRE_ATMOS - MCONV - entire_atmos_single_lyr - 5.0 - - - - 296 - TMP_ON_SIGMA_LVL_HPC - TMP - sigma_lvl - 2 - -4.0 - - - - 297 - AVE_CDUVB_ON_SURFACE - tmpl4_8 - CDUVB - AVE - surface - 3.0 - - - - 298 - AVE_DUVB_ON_SURFACE - tmpl4_8 - DUVB - AVE - surface - 3.0 - - - - 299 - TOZNE_ON_ENTIRE_ATMOS_SINGLE_LYR - TOZNE - entire_atmos_single_lyr - 4.0 - - - - 300 - AVE_TCDC_ON_LOW_CLOUD_LYR - tmpl4_8 - TCDC - AVE - low_cloud_lyr - 3.0 - - - - 301 - AVE_TCDC_ON_MID_CLOUD_LYR - tmpl4_8 - TCDC - AVE - mid_cloud_lyr - 3.0 - - - - 302 - AVE_TCDC_ON_HIGH_CLOUD_LYR - tmpl4_8 - TCDC - AVE - high_cloud_lyr - 3.0 - - - - 303 - AVE_PRES_ON_LOW_CLOUD_BOT_LVL - tmpl4_8 - PRES - AVE - low_cloud_bot_lvl - 6.0 - - - - 304 - AVE_PRES_ON_LOW_CLOUD_TOP_LVL - tmpl4_8 - PRES - AVE - low_cloud_top_lvl - 6.0 - - - - 305 - AVE_TMP_ON_LOW_CLOUD_TOP_LVL - tmpl4_8 - TMP - AVE - low_cloud_top_lvl - 3.0 - - - - 306 - AVE_PRES_ON_MID_CLOUD_BOT_LVL - tmpl4_8 - PRES - AVE - mid_cloud_bot_lvl - 6.0 - - - - 307 - AVE_PRES_ON_MID_CLOUD_TOP_LVL - tmpl4_8 - PRES - AVE - mid_cloud_top_lvl - 6.0 - - - - 308 - AVE_TMP_ON_MID_CLOUD_TOP_LVL - tmpl4_8 - TMP - AVE - mid_cloud_top_lvl - 3.0 - - - - 309 - AVE_PRES_ON_HIGH_CLOUD_BOT_LVL - tmpl4_8 - PRES - AVE - high_cloud_bot_lvl - 6.0 - - - - 310 - AVE_PRES_ON_HIGH_CLOUD_TOP_LVL - tmpl4_8 - PRES - AVE - high_cloud_top_lvl - 6.0 - - - - 311 - AVE_TMP_ON_HIGH_CLOUD_TOP_LVL - tmpl4_8 - TMP - AVE - high_cloud_top_lvl - 3.0 - - - - 312 - RH_ON_ENTIRE_ATMOS_SINGLE_LYR - RH - entire_atmos_single_lyr - 2.0 - - - - 313 - AVE_CWORK_ON_ENTIRE_ATMOS_SINGLE_LYR - tmpl4_8 - CWORK - AVE - entire_atmos_single_lyr - 4.0 - - - - 314 - TMP_ON_MAX_WIND - TMP - max_wind - 3.0 - - - - 315 - AVE_U-GWD_ON_SURFACE - tmpl4_8 - U-GWD - AVE - surface - 5.0 - - - - 316 - AVE_V-GWD_ON_SURFACE - tmpl4_8 - V-GWD - AVE - surface - 5.0 - - - - 317 - AVE_CRAIN_ON_SURFACE - tmpl4_8 - CRAIN - AVE - surface - 1.0 - - - - 318 - RH_ON_SIGMA_LVL_0.44-1.0 - RH - sigma_lvl - 2 - 44. - sigma_lvl - 2 - 100. - 2.0 - - - - 319 - RH_ON_SIGMA_LVL_0.72-0.94 - RH - sigma_lvl - 2 - 72. - sigma_lvl - 2 - 94. - 2.0 - - - - 320 - RH_ON_SIGMA_LVL_0.44-0.72 - RH - sigma_lvl - 2 - 44. - sigma_lvl - 2 - 72. - 2.0 - - - - 321 - TMP_ON_SIGMA_LVL_0.9950 - TMP - sigma_lvl - 4 - 9950. - 4.0 - - - - 322 - POT_ON_SIGMA_LVL_0.9950 - POT - sigma_lvl - 4 - 9950. - 4.0 - - - - 323 - RH_ON_SIGMA_LVL_0.9950 - RH - sigma_lvl - 4 - 9950. - 3.0 - - - - 324 - UGRD_ON_SIGMA_LVL_0.9950 - UGRD - sigma_lvl - 4 - 9950. - 4.0 - - - - 325 - VGRD_ON_SIGMA_LVL_0.9950 - VGRD - sigma_lvl - 4 - 9950. - 4.0 - - - - 326 - VVEL_ON_SIGMA_LVL_0.9950 - VVEL - sigma_lvl - 4 - 9950. - 5.0 - - - - 327 - SBT122_ON_TOP_OF_ATMOS - SBT122 - top_of_atmos - 4.0 - - - - 328 - SBT123_ON_TOP_OF_ATMOS - SBT123 - top_of_atmos - 4.0 - - - - 329 - SBT124_ON_TOP_OF_ATMOS - SBT124 - top_of_atmos - 4.0 - - - - 330 - SBT126_ON_TOP_OF_ATMOS - SBT126 - top_of_atmos - 4.0 - - - - 331 - TCDC_ON_ISOBARIC_SFC - TCDC - isobaric_sfc - 3.0 - - - - 332 - UGRD_ON_ISENTROPIC_LVL - UGRD - isentropic_lvl - 4.0 - - - - 333 - VGRD_ON_ISENTROPIC_LVL - VGRD - isentropic_lvl - 4.0 - - - - 334 - TMP_ON_ISENTROPIC_LVL - TMP - isentropic_lvl - 3.0 - - - - 335 - PVORT_ON_ISENTROPIC_LVL - PVORT - isentropic_lvl - 4.0 - - - - 336 - UGRD_ON_POT_VORT_SFC - UGRD - pot_vort_sfc - 4.0 - - - - 337 - VGRD_ON_POT_VORT_SFC - VGRD - pot_vort_sfc - 4.0 - - - - 338 - TMP_ON_POT_VORT_SFC - TMP - pot_vort_sfc - 4.0 - - - - 339 - HGT_ON_POT_VORT_SFC - HGT - pot_vort_sfc - 6.0 - - - - 340 - PRES_ON_POT_VORT_SFC - PRES - pot_vort_sfc - 6.0 - - - - 341 - VWSH_ON_POT_VORT_SFC - VWSH - pot_vort_sfc - 3.0 - - - - 342 - AVE_TCDC_ON_BOUND_LYR_CLOUD_LYR - tmpl4_8 - TCDC - AVE - bound_lyr_cloud_lyr - 3.0 - - - - 343 - ACM_WATR_ON_SURFACE - tmpl4_8 - WATR - ACM - surface - 6.0 - - - - 344 - PBLREG_ON_SURFACE - PBLREG - surface - 2.0 - - - - 345 - MAX_TMAX_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - tmpl4_8 - TMAX - MAX - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - 346 - MIN_TMIN_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - tmpl4_8 - TMIN - MIN - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - 347 - MAX_MAXRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - tmpl4_8 - MAXRH - MAX - spec_hgt_lvl_above_grnd - 2. - -2.0 - - - - 348 - MIN_MINRH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - tmpl4_8 - MINRH - NCEP - MIN - spec_hgt_lvl_above_grnd - 2. - -2.0 - - - - 349 - ICETK_ON_SURFACE - ICETK - surface - 3.0 - - - - 350 - RH_ON_HGHST_TROP_FRZ_LVL - RH - hghst_trop_frz_lvl - 2.0 - - - - - 351 - LAPR_ON_ISENTROPIC_LVL - LAPR - isentropic_lvl - 2.0 - - - - 352 - RH_ON_ISENTROPIC_LVL - RH - isentropic_lvl - 2.0 - - - - 353 - MNTSF_ON_ISENTROPIC_LVL - MNTSF - isentropic_lvl - 4.0 - - - - - 354 - SWHR_ON_ISOBARIC_SFC - SWHR - isobaric_sfc - 5.0 - - - - 355 - LWHR_ON_ISOBARIC_SFC - LWHR - isobaric_sfc - 5.0 - - - - 356 - VDFHR_ON_ISOBARIC_SFC - VDFHR - isobaric_sfc - 3.0 - - - - 357 - CNVHR_ON_ISOBARIC_SFC - CNVHR - isobaric_sfc - 2.7 - - - - - 358 - SHAHR_ON_ISOBARIC_SFC - SHAHR - isobaric_sfc - 3.0 - - - - 359 - LRGHR_ON_ISOBARIC_SFC - LRGHR - isobaric_sfc - 3.0 - - - - 360 - VDFMR_ON_ISOBARIC_SFC - VDFMR - isobaric_sfc - 3.0 - - - - 361 - CNVMR_ON_ISOBARIC_SFC - CNVMR - isobaric_sfc - 3.0 - - - - 362 - SHAMR_ON_ISOBARIC_SFC - SHAMR - isobaric_sfc - 3.0 - - - - 363 - LRGMR_ON_ISOBARIC_SFC - LRGMR - isobaric_sfc - 3.0 - - - - 364 - VDFOZ_ON_ISOBARIC_SFC - VDFOZ - isobaric_sfc - 7.0 - - - - 365 - POZ_ON_ISOBARIC_SFC - POZ - isobaric_sfc - 4.0 - - - - 366 - TOZ_ON_ISOBARIC_SFC - TOZ - isobaric_sfc - 3.0 - - - - 367 - PVMW_ON_ISOBARIC_SFC - PVMW - isobaric_sfc - 3.0 - - - - 368 - SNOT_ON_ISOBARIC_SFC - SNOT - isobaric_sfc - 3.0 - - - - 369 - VDFUA_ON_ISOBARIC_SFC - VDFUA - isobaric_sfc - 3.0 - - - - 370 - GWDU_ON_ISOBARIC_SFC - GWDU - isobaric_sfc - 3.0 - - - - 371 - CNVU_ON_ISOBARIC_SFC - CNVU - isobaric_sfc - 3.0 - - - - 372 - VDFVA_ON_ISOBARIC_SFC - VDFVA - isobaric_sfc - 3.0 - - - - 373 - GWDV_ON_ISOBARIC_SFC - GWDV - isobaric_sfc - 3.0 - - - - 374 - CNVV_ON_ISOBARIC_SFC - CNVV - isobaric_sfc - 3.0 - - - - 375 - CDLYR_ON_ISOBARIC_SFC - CDLYR - isobaric_sfc - 3.0 - - - - 376 - SBC123_ON_TOP_OF_ATMOS - SBC123 - top_of_atmos - 4.0 - - - - 377 - SBC124_ON_TOP_OF_ATMOS - SBC124 - top_of_atmos - 4.0 - - - - 378 - VVEL_ON_ISENTROPIC_LVL - VVEL - isentropic_lvl - 5.0 - - - - - - - 379 - TTDIA_ON_ISOBARIC_SFC - TTDIA - isobaric_sfc - 3.0 - - - - 380 - VEDH_ON_HYBRID_LVL - VEDH - hybrid_lvl - 3.0 - - - - 381 - MIXHT_ON_SURFACE - MIXHT - surface - -4.0 - - - - - 382 - AVE_CSDLF_ON_SURFACE - tmpl4_8 - CSDLF - AVE - surface - 3.0 - - - - 383 - AVE_CSDSF_ON_SURFACE - tmpl4_8 - CSDSF - AVE - surface - 3.0 - - - - 384 - AVE_CSULF_ON_SURFACE - tmpl4_8 - CSULF - AVE - surface - 3.0 - - - - 385 - AVE_CSULF_ON_TOP_OF_ATMOS - tmpl4_8 - CSULF - AVE - top_of_atmos - 3.0 - - - - 386 - AVE_CSUSF_ON_SURFACE - tmpl4_8 - CSUSF - AVE - surface - 3.0 - - - - 387 - AVE_CSUSF_ON_TOP_OF_ATMOS - tmpl4_8 - CSUSF - AVE - top_of_atmos - 3.0 - - - - 388 - AVE_DSWRF_ON_TOP_OF_ATMOS - tmpl4_8 - DSWRF - AVE - top_of_atmos - 4.0 - - - - 389 - UGRD_ON_PLANETARY_BOUND_LYR - UGRD - planetary_bound_lyr - -4.0 - - - - 390 - VGRD_ON_PLANETARY_BOUND_LYR - VGRD - planetary_bound_lyr - -4.0 - - - - - 391 - CNVUMF_ON_ISOBARIC_SFC - CNVUMF - isobaric_sfc - 3.0 - - - - 392 - CNVDMF_ON_ISOBARIC_SFC - CNVDMF - isobaric_sfc - 3.0 - - - - 393 - CNVEMF_ON_ISOBARIC_SFC - CNVEMF - isobaric_sfc - 3.0 - - - - 394 - CNVWDU_ON_ISOBARIC_SFC - CNVWDU - isobaric_sfc - 3.0 - - - - 395 - CNVWDV_ON_ISOBARIC_SFC - CNVWDV - isobaric_sfc - 3.0 - - - - - 396 - SUNSD_ON_SURFACE - SUNSD - surface - 5.0 - - - - 397 - FLDCP_ON_SURFACE - FLDCP - NCEP - surface - 4.0 - - - - - 398 - ICAHT_ON_MAX_WIND - ICAHT - max_wind - 6.0 - - - - 399 - ICAHT_ON_TROPOPAUSE - ICAHT - tropopause - 6.0 - - - - 400 - RETOP_ON_ENTIRE_ATMOS_SINGLE_LYR - RETOP - entire_atmos_single_lyr - 6.0 - - - - - - 401 - AVE_VBDSF_ON_SURFACE - averaged surface visible beam downward solar flux - tmpl4_8 - VBDSF - AVE - surface - 3.0 - - - - 402 - AVE_VDDSF_ON_SURFACE - averaged surface visible diffuse downward solar flux - tmpl4_8 - VDDSF - AVE - surface - 3.0 - - - - 403 - AVE_NBDSF_ON_SURFACE - averaged surface near IR beam downward solar flux - tmpl4_8 - NBDSF - AVE - surface - 3.0 - - - - 404 - AVE_NDDSF_ON_SURFACE - averaged surface near IR beam downward solar flux - tmpl4_8 - NDDSF - AVE - surface - 3.0 - - - - 405 - AVE_SRWEQ_ON_SURFACE - averaged snow rate on surface - tmpl4_8 - SRWEQ - AVE - surface - 3.0 - - - - 406 - GSD_PRES_ON_CLOUD_TOP - GSD_pressure on cloud top - PRES - cloud_top - 6.0 - - - - 407 - GSD_INST_CRAIN_ON_SURFACE - GSD_instant precipitation type on surface - CRAIN - surface - 1.0 - - - - 408 - GSD_HGT_ON_CLOUD_BASE - GSD_geopotential height on cloud base - HGT - cloud_base - 6.0 - - - - 409 - GSD_HGT_ON_CLOUD_TOP - GSD_geopotential height on cloud top - HGT - cloud_top - 6.0 - - - - 410 - GSD_VIS_ON_CLOUD_TOP - GSD_visibility on cloud top - VIS - cloud_top - 6.0 - - - - - 411 - WMIXE_ON_SPEC_HGT_LVL_ABOVE_GRND - instant wind mixing energy on Specified Height Level Above Ground - WMIXE - spec_hgt_lvl_above_grnd - -4.0 - - - - 412 - UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND - U-Component of Wind on Specified Height Level Above Ground - UGRD - spec_hgt_lvl_above_grnd - 80. - -4.0 - - - - 413 - VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND - V-Component of Wind on Specified Height Level Above Ground - VGRD - spec_hgt_lvl_above_grnd - 80. - -4.0 - - - - - 415 - GRMR_ON_HYBRID_LVL - Graupel mixing ration on hybrid level - GRMR - hybrid_lvl - 3.0 - - - - 416 - GRMR_ON_ISOBARIC_SFC - Graupel mixing ration on isobaric surface - GRMR - isobaric_sfc - 3.0 - - - - 420 - MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km - maximum Updraft Helicity on Specified Height Level Above Ground - tmpl4_8 - MXUPHL - MAX - spec_hgt_lvl_above_grnd - 5000. - spec_hgt_lvl_above_grnd - 2000. - -3.0 - - - - 421 - MAX_REF_ON_SPEC_HGT_LVL_ABOVE_GRND_1km - maximum Updraft Helicity on Specified Height Level Above Ground - tmpl4_8 - MAXREF - MAX - spec_hgt_lvl_above_grnd - 1000. - -4.0 - - - - 422 - MAX_WIND_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - maximum wind speed on 10 meter Above Ground - tmpl4_8 - WIND - MAX - spec_hgt_lvl_above_grnd - 10. - -4.0 - - - - 423 - MAX_MAXUVV_ON_ISOBARIC_SFC_40-100hpa - hourly maximum Upward Vertical Velocity between 40-100hpa - tmpl4_8 - MAXUVV - NCEP - MAX - isobaric_sfc - 40000. - isobaric_sfc - 100000. - -4.0 - - - - 424 - MAX_MAXDVV_ON_ISOBARIC_SFC_40-100hpa - hourly maximum Downward Vertical Velocity between 40-100hpa - tmpl4_8 - MAXDVV - NCEP - MAX - isobaric_sfc - 40000. - isobaric_sfc - 100000. - -4.0 - - - - - 425 - AVE_DZDT_ON_SIGMA_LVL_0.5-0.8 - average Vertical velocity between sigma lvl 0.5 and 0.8 - tmpl4_8 - DZDT - AVE - sigma_lvl - 2 - 50. - sigma_lvl - 2 - 80. - 3.0 - - - - 426 - HGT_ON_SPEC_HGT_LVL_ABOVE_GRND - Echo Tops in KFT (highest HGTin meters of the 18-dBZ reflectivity on a model level) - HGT - spec_hgt_lvl_above_grnd - 4.0 - - - - 427 - UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km - Updraft Helicity on Specified Height Level Above Ground - UPHL - spec_hgt_lvl_above_grnd - 5000. - spec_hgt_lvl_above_grnd - 2000. - -3.0 - - - - - 428 - GRMR_ON_ENTIRE_ATMOS_SINGLE_LYR - Graupel mixing ratio on entire atmosphere - GRMR - entire_atmos_single_lyr - 3.0 - - - - 429 - MAXVIG_ON_ENTIRE_ATMOS_SINGLE_LYR - Hourly Maximum of Column Vertical Integrated Graupel on entire atmosphere - tmpl4_8 - TCOLG - MAX - entire_atmos_single_lyr - 3.0 - - - - 430 - VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km - Vertical u-component shear between 0 to 1000m Above Ground - VUCSH - spec_hgt_lvl_above_grnd - 0. - spec_hgt_lvl_above_grnd - 1000. - 3.0 - - - - 431 - VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-1km - Vertical v-component shear between 0 to 1000m Above Ground - VVCSH - spec_hgt_lvl_above_grnd - 0. - spec_hgt_lvl_above_grnd - 1000. - 3.0 - - - - 432 - VUCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km - Vertical u-component shear between 0 to 6000m Above Ground - VUCSH - spec_hgt_lvl_above_grnd - 0. - spec_hgt_lvl_above_grnd - 6000. - 3.0 - - - - 433 - VVCSH_ON_SPEC_HGT_LVL_ABOVE_GRND_0-6km - Vertical v-component shear between 0 to 6000m Above Ground - VVCSH - spec_hgt_lvl_above_grnd - 0. - spec_hgt_lvl_above_grnd - 6000. - 3.0 - - - - - 434 - BUCKET_APCP_ON_SURFACE - bucket Total precipitation on surface - tmpl4_8 - APCP - ACM - surface - 4.0 - - - - 435 - BUCKET_ACPCP_ON_SURFACE - bucket Convective precipitation on surface - tmpl4_8 - ACPCP - ACM - surface - 4.0 - - - - 436 - BUCKET_NCPCP_ON_SURFACE - bucket Large scale precipitation on surface - tmpl4_8 - NCPCP - ACM - surface - 4.0 - - - - 437 - BUCKET_WEASD_ON_SURFACE - bucket snow precipitation on surface - tmpl4_8 - WEASD - ACM - surface - 4.0 - - - - - - 438 - DUST1_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 2 - 7 - 20 - 11.0 - - - - 439 - DUST2_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 20 - 7 - 36 - 11.0 - - - - 440 - DUST3_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 36 - 7 - 60 - 11.0 - - - - 441 - DUST4_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 60 - 7 - 120 - 11.0 - - - - 442 - DUST5_ON_ISOBARIC_LVL - tmpl4_48 - MASSMR - isobaric_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 120 - 7 - 200 - 11.0 - - - - 443 - HGT_ON_EQUIL_LVL - geopotential height on Equilibrium level - HGT - equil_lvl - 6.0 - - - - 444 - LTNG_ON_SURFACE - lightning - LTNG - NCEP - surface - 1.0 - - - - 445 - MAPS_PRMSL_ON_MEAN_SEA_LVL - PRMSL - mean_sea_lvl - 4.0 - - - - 446 - SBT112_ON_TOP_OF_ATMOS - SBT112 - top_of_atmos - 4.0 - - - - 447 - SBT113_ON_TOP_OF_ATMOS - SBT113 - top_of_atmos - 4.0 - - - - 448 - SBT114_ON_TOP_OF_ATMOS - SBT114 - top_of_atmos - 4.0 - - - - 449 - SBT115_ON_TOP_OF_ATMOS - SBT115 - top_of_atmos - 4.0 - - - - - 450 - ICIP_ON_ISOBARIC_SFC - Total Icing Potential Diagnostic on isobaric sfc - ICIP - isobaric_sfc - 3.0 - - - - 451 - SPFH_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL - SPFH - spec_alt_above_mean_sea_lvl - 5.0 - - - - 452 - VTCAPE_ON_SURFACE - Virtual Temperature Based Convective Available Potential Energy on surface - CAPE - surface - 4.0 - - - - 453 - VTCIN_ON_SURFACE - Virtual Temperature Based Convective Inhibition on surface - CIN - surface - 4.0 - - - - - 454 - VRATE_ON_PLANETARY_BOUND_LYR - Ventilation Rate on planetary boundary layer - VRATE - NCEP - planetary_bound_lyr - 3.0 - - - - 455 - HINDEX_ON_SURFACE - Haines Index on surface - HINDEX - surface - 3.0 - - - - 456 - NON_NADIR_SBT122_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES12, Channel 2 on top of atmosphere - SBT122 - top_of_atmos - 4.0 - - - - 457 - NON_NADIR_SBT123_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES12, Channel 3 on top of atmosphere - SBT123 - top_of_atmos - 4.0 - - - - 458 - NON_NADIR_SBT124_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES12, Channel 4 on top of atmosphere - SBT124 - top_of_atmos - 4.0 - - - - 459 - NON_NADIR_SBT126_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES12, Channel 6 on top of atmosphere - SBT126 - top_of_atmos - 4.0 - - - - 460 - SBT112_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES11, Channel 2 on top of atmosphere - SBT112 - top_of_atmos - 4.0 - - - - 461 - SBT113_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere - SBT113 - top_of_atmos - 4.0 - - - - 462 - SBT114_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere - SBT114 - top_of_atmos - 4.0 - - - - 463 - SBT115_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for GOES11, Channel 5 on top of atmosphere - SBT115 - top_of_atmos - 4.0 - - - - 482 - PRES_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL - pressure between Specific Altitude Above Mean Sea Level - PRES - spec_alt_above_mean_sea_lvl - spec_alt_above_mean_sea_lvl - 3.0 - - - - - 483 - AMSRE9_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for AMSRE on Aqua, Channel 9 on top of atmosphere - AMSRE9 - top_of_atmos - 4.0 - - - - 484 - AMSRE10_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for AMSRE on Aqua, Channel 10 on top of atmosphere - AMSRE10 - top_of_atmos - 4.0 - - - - 485 - AMSRE11_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for AMSRE on Aqua, Channel 11 on top of atmosphere - AMSRE11 - top_of_atmos - 4.0 - - - - 486 - AMSRE12_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for AMSRE on Aqua, Channel 12 on top of atmosphere - AMSRE12 - top_of_atmos - 4.0 - - - - 487 - GSD_PRES_ON_CLOUD_BASE - PRES - cloud_base - 3.0 - - - - 488 - TMITB6_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for TMI TRMM, Channel 6 on top of atmosphere - AMSRE9 - top_of_atmos - 4.0 - - - - 489 - TMITB7_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for TMI TRMM, Channel 7 on top of atmosphere - AMSRE10 - top_of_atmos - 4.0 - - - - 490 - TMITB8_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for TMI TRMM, Channel 8 on top of atmosphere - AMSRE11 - top_of_atmos - 4.0 - - - - 490 - TMITB9_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for TMI TRMM, Channel 9 on top of atmosphere - AMSRE12 - top_of_atmos - 4.0 - - - - 492 - SSMITB4_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMI TB, Channel 4 on top of atmosphere - AMSRE9 - top_of_atmos - 4.0 - - - - 493 - SSMITB5_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMI TB, Channel 5 on top of atmosphere - AMSRE10 - top_of_atmos - 4.0 - - - - 494 - SSMITB6_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMI TB, Channel 6 on top of atmosphere - AMSRE11 - top_of_atmos - 4.0 - - - - 495 - SSMITB7_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMI TB, Channel 7 on top of atmosphere - AMSRE12 - top_of_atmos - 4.0 - - - - 496 - SSMISTB15_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMIS TB, Channel 15 on top of atmosphere - AMSRE9 - top_of_atmos - 4.0 - - - - 497 - SSMISTB16_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMIS TB, Channel 16 on top of atmosphere - AMSRE10 - top_of_atmos - 4.0 - - - - 498 - SSMISTB17_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMIS TB, Channel 17 on top of atmosphere - AMSRE11 - top_of_atmos - 4.0 - - - - 499 - SSMISTB18_ON_TOP_OF_ATMOS - Simulated Brightness Temperature for SSMIS TB, Channel 18 on top of atmosphere - AMSRE12 - top_of_atmos - 4.0 - - - - 500 - AVE_SNOWC_ON_SURFACE - tmpl4_8 - SNOWC - AVE - surface - 3.0 - - - - 501 - AVE_PRES_ON_SURFACE - tmpl4_8 - PRES - AVE - surface - 5.0 - - - - 502 - AVE_TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - tmpl4_8 - TMP - AVE - spec_hgt_lvl_above_grnd - 10. - -4.0 - - - - 503 - AVE_AKHS_ON_SURFACE - tmpl4_8 - AKHS - AVE - surface - 3.0 - - - - 504 - AVE_AKMS_ON_SURFACE - tmpl4_8 - AKMS - AVE - surface - 3.0 - - - - 505 - TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - TMP - spec_hgt_lvl_above_grnd - 10. - -4.0 - - - - 506 - MAX_MAXUW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - U Component of Hourly Maximum 10m Wind Speed (m/s) - tmpl4_8 - MAXUW - MAX - spec_hgt_lvl_above_grnd - 10. - -4.0 - - - - 507 - MAX_MAXVW_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - V Component of Hourly Maximum 10m Wind Speed (m/s) - tmpl4_8 - MAXVW - MAX - spec_hgt_lvl_above_grnd - 10. - -4.0 - - - - 551 - CSNOW_ON_SURFACE - Categorical snow on surface - CSNOW - NCEP - surface - 1.0 - - - - 552 - CICEP_ON_SURFACE - Categorical ice pellets on surface - CICEP - NCEP - surface - 1.0 - - - - 553 - CFRZR_ON_SURFACE - Categorical freezing rain on surface - CFRZR - NCEP - surface - 1.0 - - - - 555 - AVE_CSNOW_ON_SURFACE - average Categorical snow on surface - tmpl4_8 - CSNOW - AVE - surface - 1.0 - - - - 556 - AVE_CICEP_ON_SURFACE - average Categorical ice pellets on surface - tmpl4_8 - CICEP - AVE - surface - 1.0 - - - - 557 - AVE_CFRZR_ON_SURFACE - average Categorical freezing rain on surface - tmpl4_8 - CFRZR - AVE - surface - 1.0 - - - - 559 - GSD_CSNOW_ON_SURFACE - GSD_Categorical snow on surface - CSNOW - surface - 1.0 - - - - 560 - GSD_CICEP_ON_SURFACE - GSD_Categorical ice pellets on surface - CICEP - surface - 1.0 - - - - 561 - GSD_CFRZR_ON_SURFACE - GSD_Categorical freezing rain on surface - CFRZR - surface - 1.0 - - - - 563 - GSD_AVE_CSNOW_ON_SURFACE - GSD_average Categorical snow on surface - tmpl4_8 - CSNOW - AVE - surface - 1.0 - - - - 564 - GSD_AVE_CICEP_ON_SURFACE - GSD_average Categorical ice pellets on surface - tmpl4_8 - CICEP - AVE - surface - 1.0 - - - - 565 - GSD_AVE_CFRZR_ON_SURFACE - GSD_average Categorical freezing rain on surface - tmpl4_8 - CFRZR - AVE - surface - 1.0 - - - - 566 - BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND - CAPE - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - 4.0 - - - - 567 - BEST_CIN_ON_SPEC_PRES_ABOVE_GRND - CIN - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - 4.0 - - - - 575 - CWAT_ON_ENTIRE_ATMOS_SINGLE_LYR - CWAT - entire_atmos_single_lyr - 3.0 - - - - 576 - UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - UGRD - spec_hgt_lvl_above_grnd - -4.0 - - - - 577 - VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - VGRD - spec_hgt_lvl_above_grnd - -4.0 - - - - 578 - SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - SPFH - spec_hgt_lvl_above_grnd - 3.0 - - - - 579 - PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - PRES - spec_hgt_lvl_above_grnd - 3.0 - - - - 580 - ICI_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - ICI - spec_alt_above_mean_sea_lvl - 3.0 - - - - 581 - VIL_ON_ENTIRE_ATMOS - entire atmosphere Vertically Integrated Liquid (kg/m-2) - VIL - entire_atmos_single_lyr - 4.0 - - - - 582 - MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND - CAPE - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - 4.0 - - - - 583 - MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND - CIN - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - 4.0 - - - - 584 - UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND - CAPE - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - 4.0 - - - - 585 - UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND - CIN - spec_pres_above_grnd - 0. - spec_pres_above_grnd - 0. - - - - 586 - TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - TMP - spec_hgt_lvl_above_grnd - 3.0 - - - - 587 - ICI_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT - ICI - spec_hgt_lvl_above_grnd - 3.0 - - - - 601 - DUST1_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 2 - 7 - 20 - 11.0 - - - - 602 - DUST2_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 20 - 7 - 36 - 11.0 - - - - 603 - DUST3_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 36 - 7 - 60 - 11.0 - - - - 604 - DUST4_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 60 - 7 - 120 - 11.0 - - - - 605 - DUST5_ON_SPEC_ALT_ABOVE_MEAN_SEA_LVL_FDHGT - tmpl4_48 - MASSMR - spec_alt_above_mean_sea_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 120 - 7 - 200 - 11.0 - - - - - 606 - AECOEF_ON_HYBRID_LVL - AECOFF - hybrid_lvl - 11.0 - - - - 607 - ASYSFK_ON_HYBRID_LVL - ASYSFK - hybrid_lvl - 11.0 - - - - 608 - SSALBK_ON_HYBRID_LVL - SSALBK - hybrid_lvl - 11.0 - - - - 609 - AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 610 - DUST_AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 611 - Seasalt_AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - sea_salt_dry - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 612 - SULFATE_AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - sulphate_dry - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 613 - ORGANIC_CARBON_AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - sea_salt_dry - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 614 - BLACK_CARBON_AER_OPT_DEP_at550 - tmpl4_48 - AOTK - entire_atmos - black_carbondry - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 545 - 9 - 565 - 9.0 - - - - 615 - DUST_EMISSION_FLUX - tmpl4_48 - AEMFLX - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - 9.0 - - - - 616 - DUST_SEDIMENTATION_FLUX - tmpl4_48 - SEDMFLX - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - 9.0 - - - - 617 - DUST_DRY_DEPOSITION_FLUX - tmpl4_48 - DDMFLX - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - 9.0 - - - - 618 - DUST_WET_DEPOSITION_FLUX - tmpl4_48 - WLSMFLX - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 20 - 9.0 - - - - 619 - CR_AER_SFC_MASS_CON - tmpl4_48 - MASSDEN - surface - dust_dry - smaller_than_first_limit - 6 - 10 - 9.0 - - - - 620 - FN_AER_SFC_MASS_CON - tmpl4_48 - MASSDEN - surface - dust_dry - smaller_than_first_limit - 7 - 25 - 9.0 - - - - 621 - CR_AER_COL_MASS_DEN - tmpl4_48 - COLMD - entire_atmos - dust_dry - smaller_than_first_limit - 6 - 10 - 9.0 - - - - 622 - FN_AER_COL_MASS_DEN - tmpl4_48 - COLMD - entire_atmos - dust_dry - smaller_than_first_limit - 7 - 25 - 9.0 - - - - 623 - AER_OPT_DEP_at340 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 338 - 9 - 342 - 9.0 - - - - 624 - AER_OPT_DEP_at440 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 430 - 9 - 450 - 9.0 - - - - 625 - AER_OPT_DEP_at660 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 620 - 9 - 670 - 9.0 - - - - 626 - AER_OPT_DEP_at860 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 841 - 9 - 876 - 9.0 - - - - 627 - AER_OPT_DEP_at1630 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 1628 - 9 - 1652 - 9.0 - - - - 628 - AER_OPT_DEP_at11100 - tmpl4_48 - AOTK - entire_atmos - total_aerosol - smaller_than_first_limit - 6 - 20 - between_first_second_limit - 9 - 11000 - 9 - 11200 - 9.0 - - - - 629 - DUST1_ON_HYBRID_LVL - tmpl4_48 - MASSMR - hybrid_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 2 - 7 - 20 - 11.0 - - - - 630 - DUST2_ON_HYBRID_LVL - tmpl4_48 - MASSMR - hybrid_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 20 - 7 - 36 - 11.0 - - - - 631 - DUST3_ON_HYBRID_LVL - tmpl4_48 - MASSMR - hybrid_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 36 - 7 - 60 - 11.0 - - - - 632 - DUST4_ON_HYBRID_LVL - tmpl4_48 - MASSMR - hybrid_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 60 - 7 - 120 - 11.0 - - - - 633 - DUST5_ON_HYBRID_LVL - tmpl4_48 - MASSMR - hybrid_lvl - dust_dry - between_first_second_limit_noincl2ndlmt - 7 - 120 - 7 - 200 - 11.0 - - - - - 750 - GSD_WV_MIXR_ON_HYBRID_LVL - MIXR - hybrid_lvl - 3.0 - - - - 751 - GSD_VPTMP_ON_HYBRID_LVL - VPTMP - hybrid_lvl - 3.0 - - - - 752 - GSD_NCIP_ON_HYBRID_LVL - Number concentration for ice particles on hybrid level - NCIP - hybrid_lvl - 3.0 - - - - 754 - GSD_NCRAIN_ON_HYBRID_LVL - NCRAIN - hybrid_lvl - 3.0 - - - - 546 - GSD_POT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - POT - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - - 547 - GSD_DEPR_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - DEPR - spec_hgt_lvl_above_grnd - 2. - 3.0 - - - - 548 - GSD_EPOT_ON_SURFACE - EPOT - surface - 3.0 - - - - 753 - GSD_PRES_ON_0C_ISOTHERM - GSD_pressure on Level of 0 deg (C) isotherm - PRES - 0C_isotherm - 3.0 - - - - 756 - GSD_PRES_ON_HGHST_TROP_FRZ_LVL - GSD_pressure on Highest tropospheric freezing level - PRES - hghst_trop_frz_lvl - 3.0 - - - - - 700 - GSD_MAX_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km - tmpl4_8 - MXUPHL - MAX - spec_hgt_lvl_above_grnd - 6000. - spec_hgt_lvl_above_grnd - 1000. - 3.0 - - - - 701 - GSD_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_1-6km - MXUPHL - spec_hgt_lvl_above_grnd - 6000. - spec_hgt_lvl_above_grnd - 1000. - 3.0 - - - - - 702 - GSD_MAX_LTG_THREAT1_ON_ENTIRE_ATMOS - LTGTHREAT1 - entire_atmos - 3.0 - - - - 703 - GSD_MAX_LTG_THREAT2_ON_ENTIRE_ATMOS - LTGTHREAT2 - entire_atmos - 3.0 - - - - 704 - GSD_MAX_LTG_THREAT3_ON_ENTIRE_ATMOS - LTNG - entire_atmos - 3.0 - - - - 705 - GSD_NCI_LTG_ON_ENTIRE_ATMOS - GSD_Convective Initiation Lightning - NCILTG - entire_atmos - 3.0 - - - - 706 - GSD_NCA_LTG_ON_ENTIRE_ATMOS - GSD_Convective Activity Lightning - NCALTG - entire_atmos - 3.0 - - - - 707 - GSD_NCI_WQ_ON_ENTIRE_ATMOS - GSD_Convective Initiation Vertical Hydrometeor Flux - NCIWQ - entire_atmos - 3.0 - - - - 708 - GSD_NCA_WQ_ON_ENTIRE_ATMOS - GSD_Convective Activity Vertical Hydrometeor Flux - NCAWQ - entire_atmos - 3.0 - - - - 709 - GSD_NCI_REFL_ON_ENTIRE_ATMOS - GSD_Convective Initiation Reflectivity - NCIREFL - entire_atmos - 3.0 - - - - 710 - GSD_NCA_REFL_ON_ENTIRE_ATMOS - GSD_Convective Activity Reflectivity - NCAREFL - entire_atmos - 3.0 - - - - 749 - GSD_RH_WRT_PRECIP_WATER_ON_ENTIRE_ATMOS - RELATIVE HUMIDITY WITH RESPECT TO PRECIPITABLE WATER - RH_PWAT - entire_atmos - 3.0 - - - - 748 - GSD_REFL_ON_SPEC_HGT_LVL_ABOVE_GRND_1km - REFL - spec_hgt_lvl_above_grnd - 1000. - 3.0 - - - - 757 - GSD_REFL_ON_SPEC_HGT_LVL_ABOVE_GRND_4km - REFL - spec_hgt_lvl_above_grnd - 4000. - 3.0 - - - - 758 - GSD_HGT_ON_CONVECTIVE_CLOUD_TOP_LVL - HGT - convective_cloud_top_lvl - 4.0 - - - - 760 - GSD_MIXR_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - MIXR - spec_hgt_lvl_above_grnd - 2. - 3.0 - - - - 762 - GSD_MIXR_ON_SURFACE - MIXR - SURFACE - 3.0 - - - - 761 - GSD_INSIDE_SNOW_TMP_ON_SURFACE - TMP - SURFACE - 4.0 - - - - 768 - GSD_ECHOTOP_ON_CLOUD_TOP - Echo top height (Highest height in meters of the 18-dBZ reflectivity on a model level) - RETOP - cloud_top - 3.0 - - - - 769 - GSD_VIL_ON_ENTIRE_ATMOS - VIL - entire_atmos - 4.0 - - - - 770 - GSD_RADARVIL_ON_ENTIRE_ATMOS - VIL - entire_atmos - 3.0 - - - - 727 - GSD_UPHL_ON_SPEC_HGT_LVL_ABOVE_GRND_2-5km - UPHL - spec_hgt_lvl_above_grnd - 5000. - spec_hgt_lvl_above_grnd - 2000. - 3.0 - - - - 808 - APTMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m - APTMP - spec_hgt_lvl_above_grnd - 2. - 4.0 - - - - - diff --git a/parm/postcntrl_comupp.xml b/parm/postcntrl_wrf.xml similarity index 99% rename from parm/postcntrl_comupp.xml rename to parm/postcntrl_wrf.xml index e4df0ba93..cc76fca62 100644 --- a/parm/postcntrl_comupp.xml +++ b/parm/postcntrl_wrf.xml @@ -221,13 +221,6 @@ 6.0 - - SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m - SPFH - 10. - 3.0 - - PRES_ON_SURFACE PRES diff --git a/parm/postxconfig-NT-NMB.txt b/parm/postxconfig-NT-NMB.txt new file mode 100644 index 000000000..efcab404c --- /dev/null +++ b/parm/postxconfig-NT-NMB.txt @@ -0,0 +1,3755 @@ +1 +101 +NMBPRS +4 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +wrf_em_ncar_arwrf +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +1 +PRES_ON_HYBRID_LVL +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +77 +HGT_ON_HYBRID_LVL +? +1 +tmpl4_0 +HGT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +3 +POT_ON_HYBRID_LVL +? +1 +tmpl4_0 +POT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +4 +DPT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DPT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +6 +RH_ON_HYBRID_LVL +? +1 +tmpl4_0 +RH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +9 +VVEL_ON_HYBRID_LVL +? +1 +tmpl4_0 +VVEL +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +250 +REFD_ON_HYBRID_LVL +? +1 +tmpl4_0 +REFD +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +15 +DPT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DPT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +17 +RH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RH +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +20 +VVEL_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VVEL +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +166 +CICE_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +CICE +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +246 +PLPL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLPL +NCEP +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +159 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +27 +POT_ON_SURFACE +? +1 +tmpl4_0 +POT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +28 +SPFH_ON_SURFACE +? +1 +tmpl4_0 +SPFH +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +225 +SOILL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILL +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +36 +SOILM_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILM +? +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +120 +SNOWC_ON_SURFACE +? +1 +tmpl4_0 +SNOWC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +30 +LFTX_ON_ISOBARIC_SFC_500-1000hpa +? +1 +tmpl4_0 +LFTX +NCEP +? +isobaric_sfc +0 +? +1 +50000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +584 +UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +107 +CIN_ON_SURFACE +? +1 +tmpl4_0 +CIN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +567 +BEST_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +583 +MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +585 +UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +80 +PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +PWAT +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +162 +HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +HLCY +? +? +spec_hgt_lvl_above_grnd +0 +? +2 +3000. 1000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +163 +USTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +USTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +164 +VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +VSTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +160 +INST_CRAIN_ON_SURFACE +? +1 +tmpl4_0 +CRAIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +551 +CSNOW_ON_SURFACE +Categorical snow on surface +1 +tmpl4_0 +CSNOW +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +552 +CICEP_ON_SURFACE +Categorical ice pellets on surface +1 +tmpl4_0 +CICEP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +553 +CFRZR_ON_SURFACE +Categorical freezing rain on surface +1 +tmpl4_0 +CFRZR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +180 +VIS_ON_SURFACE +? +1 +tmpl4_0 +VIS +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +410 +GSD_VIS_ON_CLOUD_TOP +GSD_visibility on cloud top +1 +tmpl4_0 +VIS +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +109 +HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +HGT +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +110 +PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +PRES +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +177 +HGT_ON_TROPOPAUSE +? +1 +tmpl4_0 +HGT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +579 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +412 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +U-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +413 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +V-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +73 +UGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +UGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +74 +VGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +90 +VVEL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VVEL +? +? +spec_pres_above_grnd +0 +? +3 +3000. 9000. 18000. +spec_pres_above_grnd +0 +? +3 +0. 6000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +178 +HGT_ON_CLOUD_BASE +? +1 +tmpl4_0 +HGT +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +179 +HGT_ON_CLOUD_TOP +? +1 +tmpl4_0 +HGT +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +252 +REFC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +253 +REFD_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFD +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +260 +HGT_ON_CLOUD_CEILING +? +1 +tmpl4_0 +HGT +? +? +cloud_ceilng +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +138 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +158 +POT_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +POT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +159 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +170 +VEG_ON_SURFACE +? +1 +tmpl4_0 +VEG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +171 +MSTAV_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +MSTAV +NCEP +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +100. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +31 +4LFTX_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +4LFTX +NCEP +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +48 +NLAT_ON_SURFACE +? +1 +tmpl4_0 +NLAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +49 +ELON_ON_SURFACE +? +1 +tmpl4_0 +ELON +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +50 +LAND_ON_SURFACE +? +1 +tmpl4_0 +LAND +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +457 +NON_NADIR_SBT123_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT123 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +458 +NON_NADIR_SBT124_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT124 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-WRF.txt b/parm/postxconfig-NT-WRF.txt new file mode 100644 index 000000000..18130a32d --- /dev/null +++ b/parm/postxconfig-NT-WRF.txt @@ -0,0 +1,3644 @@ +1 +98 +WRFPRS +4 +ncep_nco +v2003 +local_tab_yes1 +fcst +oper +fcst +fcst +hour +nws_ncep +wrf_em_ncar_arwrf +complex_packing_spatial_diff +2nd_ord_sptdiff +fltng_pnt +lossless +1 +PRES_ON_HYBRID_LVL +? +1 +tmpl4_0 +PRES +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +77 +HGT_ON_HYBRID_LVL +? +1 +tmpl4_0 +HGT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +2 +TMP_ON_HYBRID_LVL +? +1 +tmpl4_0 +TMP +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +3 +POT_ON_HYBRID_LVL +? +1 +tmpl4_0 +POT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +4 +DPT_ON_HYBRID_LVL +? +1 +tmpl4_0 +DPT +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +5 +SPFH_ON_HYBRID_LVL +? +1 +tmpl4_0 +SPFH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +7.0 +0 +0 +0 +? +? +? +6 +RH_ON_HYBRID_LVL +? +1 +tmpl4_0 +RH +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +7 +UGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +UGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +8 +VGRD_ON_HYBRID_LVL +? +1 +tmpl4_0 +VGRD +? +? +hybrid_lvl +0 +? +5 +1. 2. 3. 4. 5. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +9 +VVEL_ON_HYBRID_LVL +? +1 +tmpl4_0 +VVEL +? +? +hybrid_lvl +0 +? +1 +1. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +250 +REFD_ON_HYBRID_LVL +? +1 +tmpl4_0 +REFD +NCEP +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +12 +HGT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +HGT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +13 +TMP_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +TMP +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +15 +DPT_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +DPT +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +17 +RH_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +RH +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +2.0 +0 +0 +0 +? +? +? +18 +UGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +UGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +19 +VGRD_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VGRD +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +20 +VVEL_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +VVEL +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +166 +CICE_ON_ISOBARIC_SFC +? +1 +tmpl4_0 +CICE +? +? +isobaric_sfc +0 +? +46 +200. 500. 700. 1000. 2000. 3000. 5000. 7000. 7500. 10000. 12500. 15000. 17500. 20000. 22500. 25000. 27500. 30000. 32500. 35000. 37500. 40000. 42500. 45000. 47500. 50000. 52500. 55000. 57500. 60000. 62500. 65000. 67500. 70000. 72500. 75000. 77500. 80000. 82500. 85000. 87500. 90000. 92500. 95000. 97500. 100000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +64 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +65 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND_10m +? +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +10. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +246 +PLPL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +PLPL +NCEP +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +25 +HGT_ON_SURFACE +? +1 +tmpl4_0 +HGT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +27 +POT_ON_SURFACE +? +1 +tmpl4_0 +POT +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +28 +SPFH_ON_SURFACE +? +1 +tmpl4_0 +SPFH +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +26 +TMP_ON_SURFACE +? +1 +tmpl4_0 +TMP +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +116 +TSOIL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +TSOIL +? +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +117 +SOILW_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILW +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +225 +SOILL_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILL +NCEP +? +depth_bel_land_sfc +4 +2 2 2 2 +4 +0. 10. 40. 100. +depth_bel_land_sfc +4 +2 2 2 2 +4 +10. 40. 100. 200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +36 +SOILM_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +SOILM +? +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +200. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +119 +WEASD_ON_SURFACE +? +1 +tmpl4_0 +WEASD +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +120 +SNOWC_ON_SURFACE +? +1 +tmpl4_0 +SNOWC +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +30 +LFTX_ON_ISOBARIC_SFC_500-1000hpa +? +1 +tmpl4_0 +LFTX +NCEP +? +isobaric_sfc +0 +? +1 +50000. +isobaric_sfc +0 +? +1 +100000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +32 +CAPE_ON_SURFACE +? +1 +tmpl4_0 +CAPE +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +566 +BEST_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +582 +MIXED_LAYER_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +584 +UNSTABLE_CAPE_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CAPE +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +107 +CIN_ON_SURFACE +? +1 +tmpl4_0 +CIN +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +567 +BEST_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +583 +MIXED_LAYER_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +9000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +585 +UNSTABLE_CIN_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +CIN +? +? +spec_pres_above_grnd +0 +? +1 +25500. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +80 +PWAT_ON_ENTIRE_ATMOS_SINGLE_LYR +? +1 +tmpl4_0 +PWAT +? +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +162 +HLCY_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +HLCY +? +? +spec_hgt_lvl_above_grnd +0 +? +2 +3000. 1000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +163 +USTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +USTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +164 +VSTM_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +VSTM +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +1 +6000. +spec_hgt_lvl_above_grnd +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +87 +ACM_APCP_ON_SURFACE +? +1 +tmpl4_8 +APCP +? +ACM +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +160 +INST_CRAIN_ON_SURFACE +? +1 +tmpl4_0 +CRAIN +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +551 +CSNOW_ON_SURFACE +Categorical snow on surface +1 +tmpl4_0 +CSNOW +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +552 +CICEP_ON_SURFACE +Categorical ice pellets on surface +1 +tmpl4_0 +CICEP +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +553 +CFRZR_ON_SURFACE +Categorical freezing rain on surface +1 +tmpl4_0 +CFRZR +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +145 +TCDC_ON_HYBRID_LVL +? +1 +tmpl4_0 +TCDC +? +? +hybrid_lvl +0 +? +2 +1. 2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +37 +LCDC_ON_LOW_CLOUD_LYR +? +1 +tmpl4_0 +LCDC +? +? +low_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +38 +MCDC_ON_MID_CLOUD_LYR +? +1 +tmpl4_0 +MCDC +? +? +mid_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +39 +HCDC_ON_HIGH_CLOUD_LYR +? +1 +tmpl4_0 +HCDC +? +? +high_cloud_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +180 +VIS_ON_SURFACE +? +1 +tmpl4_0 +VIS +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +410 +GSD_VIS_ON_CLOUD_TOP +GSD_visibility on cloud top +1 +tmpl4_0 +VIS +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +109 +HGT_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +HGT +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +110 +PRES_ON_LVL_OF_ADIAB_COND_FROM_SFC +? +1 +tmpl4_0 +PRES +? +? +lvl_of_adiab_cond_from_sfc +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +177 +HGT_ON_TROPOPAUSE +? +1 +tmpl4_0 +HGT +? +? +tropopause +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +579 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_FDHGT +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +4 +30. 50. 80. 100. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +412 +UGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +U-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +UGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +413 +VGRD_ON_SPEC_HGT_LVL_ABOVE_GRND +V-Component of Wind on Specified Height Level Above Ground +1 +tmpl4_0 +VGRD +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +80. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +73 +UGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +UGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +74 +VGRD_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VGRD +? +? +spec_pres_above_grnd +0 +? +6 +3000. 6000. 9000. 12000. 15000. 18000. +spec_pres_above_grnd +0 +? +6 +0. 3000. 6000. 9000. 12000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +90 +VVEL_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +VVEL +? +? +spec_pres_above_grnd +0 +? +3 +3000. 9000. 18000. +spec_pres_above_grnd +0 +? +3 +0. 6000. 15000. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +178 +HGT_ON_CLOUD_BASE +? +1 +tmpl4_0 +HGT +? +? +cloud_base +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +179 +HGT_ON_CLOUD_TOP +? +1 +tmpl4_0 +HGT +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +168 +TMP_ON_CLOUD_TOP +? +1 +tmpl4_0 +TMP +? +? +cloud_top +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +5.0 +0 +0 +0 +? +? +? +252 +REFC_ON_ENTIRE_ATMOS +? +1 +tmpl4_0 +REFC +NCEP +? +entire_atmos_single_lyr +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +253 +REFD_ON_SPEC_HGT_LVL_ABOVE_GRND +? +1 +tmpl4_0 +REFD +NCEP +? +spec_hgt_lvl_above_grnd +0 +? +2 +4000. 1000. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +260 +HGT_ON_CLOUD_CEILING +? +1 +tmpl4_0 +HGT +? +? +cloud_ceilng +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +23 +MSLET_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +MSLET +NCEP +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +105 +PRES_ON_MEAN_SEA_LVL +? +1 +tmpl4_0 +PRMSL +? +? +mean_sea_lvl +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +138 +PRES_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +PRES +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +106 +TMP_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +TMP +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +112 +SPFH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +SPFH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +113 +DPT_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +DPT +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +114 +RH_ON_SPEC_HGT_LVL_ABOVE_GRND_2m +? +1 +tmpl4_0 +RH +? +? +spec_hgt_lvl_above_grnd +0 +? +1 +2. +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +24 +PRES_ON_SURFACE +? +1 +tmpl4_0 +PRES +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +6.0 +0 +0 +0 +? +? +? +170 +VEG_ON_SURFACE +? +1 +tmpl4_0 +VEG +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +171 +MSTAV_ON_DEPTH_BEL_LAND_SFC +? +1 +tmpl4_0 +MSTAV +NCEP +? +depth_bel_land_sfc +1 +2 +1 +0. +depth_bel_land_sfc +1 +2 +1 +100. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +31 +4LFTX_ON_SPEC_PRES_ABOVE_GRND +? +1 +tmpl4_0 +4LFTX +NCEP +? +spec_pres_above_grnd +0 +? +1 +18000. +spec_pres_above_grnd +0 +? +1 +0. +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +3.0 +0 +0 +0 +? +? +? +48 +NLAT_ON_SURFACE +? +1 +tmpl4_0 +NLAT +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +49 +ELON_ON_SURFACE +? +1 +tmpl4_0 +ELON +NCEP +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +50 +LAND_ON_SURFACE +? +1 +tmpl4_0 +LAND +? +? +surface +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +1.0 +0 +0 +0 +? +? +? +457 +NON_NADIR_SBT123_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT123 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +458 +NON_NADIR_SBT124_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES12, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT124 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +461 +SBT113_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 3 on top of atmosphere +1 +tmpl4_0 +SBT113 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? +462 +SBT114_ON_TOP_OF_ATMOS +Simulated Brightness Temperature for GOES11, Channel 4 on top of atmosphere +1 +tmpl4_0 +SBT114 +? +? +top_of_atmos +0 +? +0 +? +? +0 +? +0 +? +? +? +0 +0.0 +0 +0.0 +? +0 +0.0 +0 +0.0 +1 +4.0 +0 +0 +0 +? +? +? diff --git a/parm/postxconfig-NT-WRF_comupp.txt b/parm/postxconfig-NT.txt similarity index 100% rename from parm/postxconfig-NT-WRF_comupp.txt rename to parm/postxconfig-NT.txt diff --git a/parm/wrf_cntrl.parm b/parm/wrf_cntrl.parm index d6dc5cc54..2a7cac7a7 100644 --- a/parm/wrf_cntrl.parm +++ b/parm/wrf_cntrl.parm @@ -282,7 +282,7 @@ (GRID CLOUD TOP PRESS) SCAL=( 6.0) L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (CONV CLOUD FRACTION ) SCAL=( 3.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (MAX WIND PRESS LEVEL) SCAL=( 3.0) L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (MAX WIND HGHT LEVEL ) SCAL=( 3.0) @@ -358,7 +358,7 @@ (AVE SFC MOMENTUM FX ) SCAL=( 4.0) L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (ACC SFC EVAPORATION ) SCAL=( 4.0) - L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) + L=(00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (ACC POT EVAPORATION ) SCAL=( 4.0) L=(10000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000 00000) (INST SFC SENHEAT FX ) SCAL=( 3.0) diff --git a/scripts/run_unipost b/scripts/run_unipost new file mode 100755 index 000000000..a755e2b59 --- /dev/null +++ b/scripts/run_unipost @@ -0,0 +1,467 @@ +#!/bin/ksh +# +set -x +#-------------------------------------------------------- +# Updates: +# +# August 2005: Hui-Ya Chuang, NCEP: This script uses +# NCEP's Unipost to post processes WRF native model +# output, and uses copygb to horizontally interpolate posted +# output from native A-E to a regular projection grid. +# +# July 2006: Meral Demirtas, NCAR/DTC: Added new "copygb" +# options and revised some parts for clarity. +# +# April 2015: Modified to run NMM-B/NEMS, KRF(DTC) +# +# January 2019: Modified to remove NMMB/NMM and add FV3, TH (DTC) +# +# October 2019: Modified for new unified build system; +# ndate.exe and copygb.exe have been removed +# +#-------------------------------------------------------- +# +# This script runs the community version of UPP, unipost.exe +# +#-------------------------------------------------------- + +#---------------------------------------------------------------------------------- +#--- USER EDIT DESCIPTIONS -------------------------------------------------------- +# See UPP User's Guide for more information +# http://www.dtcenter.org/upp/users/docs/user_guide/V4/upp_users_guide.pdf +#---------------------------------------------------------------------------------- +# TOP_DIR : Top level directory for source codes (UPPV4.0) +# DOMAINPATH : Working directory for this run. +# UNIPOST_HOME : Where the UPP build directory located +# POSTEXEC : Where the UPP executables are located +# SCRIPTS : Where the UPP scripts directory is (i.e. UPPV4.0/scripts/) +# modelDataPath : Where are the model data files to be processed located +# e.g. "wrfprd/" for WRF-based runs +# FV3 model filename examples (may need to alter in script) +# inFileName=dynf012.nemsio (default) or gfs.t00z.atmf012.nemsio +# flxFileName=phyf012.nemsio (default) or gfs.t00z.sfcf012.nemsio +# paramFile : Name and location of cntrl.parm file (wrf_cntrl.parm) +# Text file lists desired fields for grib1 output. Template in UPPV4.0/parm/ +# txtCntrlFile : Name and location of post flat file (postxconfig-NT.txt) for grib2 +# Text file listing desired fields to be generated by the user before running UPP. +# Step 1: Edit postcntrl.xml to include desired fields (template in UPPV4.0/parm) +# Step 2: Validate postcntrl.xml and post_avblflds.xml +# Step 3: Type 'make' in parm directory to generate the post flat file +# dyncore : What model is used ARW (WRF) or FV3 (GFS) +# inFormat : Format of the model data +# arw - "netcdf" +# fv3 - "binarynemsiompiio" or "netcdf" +# outFormat : Format of output from UPP +# grib (WRF only) +# grib2 +# startdate : Forecast start date (YYYYMMDDHH) +# fhr : First forecast hour to be post-processed +# lastfhr : Last forecast hour to be post-processed +# incrementhr : Increment (in hours) between forecast files +# * Do not set to 0 or the script will loop continuously * +# domain_list : List of domains for run +# RUN_COMMAND : System run command for serial or parallel runs, examples below. +# +#---------------------------------------------------------------------------------- +#--- BEGIN USER EDIT HERE --------------------------------------------------------- +#---------------------------------------------------------------------------------- + +# Set relevant paths and data information +# This script assumes you created a directory $DOMAINPATH/postprd +# and that your model output is in $DOMAINPATH/wrfprd +# as recommended in the users guide where UPP will output. +export TOP_DIR=/home/username +export DOMAINPATH=${TOP_DIR}/DOMAINS/test_case +export UNIPOST_HOME=${TOP_DIR}/UPPV4.0 +export POSTEXEC=${UNIPOST_HOME}/exec +export SCRIPTS=${UNIPOST_HOME}/scripts +export modelDataPath=${DOMAINPATH}/wrfprd +export paramFile=${DOMAINPATH}/parm/wrf_cntrl.parm # grib1 (WRF only) +export txtCntrlFile=${DOMAINPATH}/parm/postxconfig-NT-WRF.txt # grib2 (or postxconfig-NT-GFS.txt) + +# Specify Dyn Core (ARW or FV3 in upper case) +export dyncore="ARW" + +# Set input format from model and ouput format from unipost +export inFormat="netcdf" +export outFormat="grib2" + +# Set date/time information +export startdate=2014020412 +export fhr=00 +export lastfhr=06 +export incrementhr=03 + +# Set domain lists +export domain_list="d01" + +# Set run command: + +# Serial command example +export RUN_COMMAND="${POSTEXEC}/unipost.exe " + +# Parallel command examples: +#export RUN_COMMAND="mpirun -np 1 ${POSTEXEC}/unipost.exe " +#export RUN_COMMAND="mpirun.lsf ${POSTEXEC}/unipost.exe " +#export RUN_COMMAND="mpiexec_mpt ${POSTEXEC}/unipost.exe " + +# DEBUG command example found further below, search "DEBUG" + + +# Shouldn't need to edit these. +# tmmark is an variable used as the file extention of the output +# filename .GrbF is used if this variable is not set +# COMSP is a variable used as the initial string of the output filename +export tmmark=tm00 +export MP_SHARED_MEMORY=yes +export MP_LABELIO=yes + +#---------------------------------------------------------------------- +#--- END USER EDIT ---------------------------------------------------- +#---------------------------------------------------------------------- + +#---------------------------------------------------------------------- +# Shouldn't need to edit below unless something goes wrong or debugging +#---------------------------------------------------------------------- + +#---------------------------------------------------------------------- +# Do some checks for directory/executable existence, user input, etc. +#---------------------------------------------------------------------- +if [ ! -d ${POSTEXEC} ]; then + echo "ERROR: POSTEXEC, '${POSTEXEC}', does not exist" + exit 1 +fi + +if [ ! -x ${POSTEXEC}/unipost.exe ]; then + echo "ERROR: unipost.exe, '${POSTEXEC}/unipost.exe', does not exist or is not executable." + exit 1 +fi + +# Set tag based on user defined $dyncore (ARW or FV3 in upper case) +if [ $dyncore = "ARW" ]; then + export tag=NCAR +elif [ $dyncore = "FV3" ]; then + export tag=GFS +else + echo "${dyncore} is not supported. Edit script to choose ARW or FV3 dyncore." + exit +fi + +if [[ ${dyncore} == "ARW" ]]; then + if [[ ${inFormat} != "netcdf" ]]; then + echo "ERROR: 'inFormat' must be 'netcdf' for ARW model output. Exiting... " + exit 1 + fi +elif [ ${dyncore} == "FV3" ]; then + if [[ ${inFormat} == "binarynemsiompiio" ]]; then + echo "Check: You are using 'dyncore' 'inFormat'!" + elif [[ ${inFormat} == "netcdf" ]]; then + echo "Check: You are using 'dyncore' 'inFormat'!" + else + echo "ERROR: 'inFormat' must be 'binarynemsiompiio' or 'netcdf' for FV3 model output. Exiting... " + exit 1 + fi +fi + +if [[ ${outFormat} == "grib" ]]; then + if [ ! -e ${paramFile} ]; then + echo "ERROR: 'paramFile' not found in '${paramFile}'. Exiting... " + exit 1 + fi +elif [[ ${outFormat} == "grib2" ]]; then + if [ ! -e ${txtCntrlFile} ]; then + echo "ERROR: 'txtCntrlFile' not found in '${txtCntrlFile}'. Exiting... " + exit 1 + fi +fi + +if [ ! -d ${DOMAINPATH}/postprd ]; then + echo "ERROR: DOMAINPATH/postprd, '${DOMAINPATH}/postprd', does not exist. Exiting..." + exit 1 +fi + +if [ ${incrementhr} -eq 0 ]; then + echo "ERROR: increment hour (incrementhr) cannot be zero. Inifinite loop will result. Please modify. Exiting..." + exit 1 +fi + +#---------------------------------------------------------------------- +# End checks of user input +#---------------------------------------------------------------------- + +#---------------------------------------------------------------------- +# Begin work +#---------------------------------------------------------------------- + +# cd to working directory +cd ${DOMAINPATH}/postprd +err1=$? +if test "$err1" -ne 0; then + echo "ERROR: Could not 'cd' to working directory. Did you create directory: '${DOMAINPATH}/postprd'? \ + Does '${DOMAINPATH}' exist? Exiting... " + exit 1 +fi + +# Get local copy of parm file +# For GRIB1 the code uses wrf_cntrl.parm to select variables for output +# the available fields are set at compilation +if [[ ${outFormat} == "grib" ]]; then + if [[ ${dyncore} == "ARW" ]]; then + ln -fs ${paramFile} wrf_cntrl.parm + elif [[ ${dyncore} == "FV3" ]]; then + echo "ERROR: FV3 not available for grib1 output. Use GRIB2 output. Exiting..." + exit 1 + fi +elif [[ ${outFormat} == "grib2" ]]; then +# For GRIB2 the code reads postxconfig-NT.txt to select variables for output +# the available fields are defined in post_avlbflds.xml -- while we +# set a link to this file for reading during runtime it is not typical +# for one to update this file, therefore the link goes back to the +# program directory - this is true for params_grib2_tbl_new also - a +# file which defines the GRIB2 table values +ln -fs ${txtCntrlFile} postxconfig-NT.txt +ln -fs ${UNIPOST_HOME}/parm/post_avblflds.xml post_avblflds.xml +ln -fs ${UNIPOST_HOME}/parm/params_grib2_tbl_new params_grib2_tbl_new +fi + +# Link microphysics tables - code will use based on mp_physics option +# found in data +ln -fs ${UNIPOST_HOME}/parm/nam_micro_lookup.dat . +ln -fs ${UNIPOST_HOME}/parm/hires_micro_lookup.dat . + +# link coefficients for crtm2 (simulated synthetic satellites) +CRTMDIR=${UNIPOST_HOME}/sorc/comlibs/crtm2/src/fix +ln -fs $CRTMDIR/EmisCoeff/IR_Water/Big_Endian/Nalli.IRwater.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/MW_Water/Big_Endian/FASTEM4.MWwater.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/MW_Water/Big_Endian/FASTEM5.MWwater.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/MW_Water/Big_Endian/FASTEM6.MWwater.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/IR_Land/SEcategory/Big_Endian/NPOESS.IRland.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/IR_Snow/SEcategory/Big_Endian/NPOESS.IRsnow.EmisCoeff.bin ./ +ln -fs $CRTMDIR/EmisCoeff/IR_Ice/SEcategory/Big_Endian/NPOESS.IRice.EmisCoeff.bin ./ +ln -fs $CRTMDIR/AerosolCoeff/Big_Endian/AerosolCoeff.bin ./ +ln -fs $CRTMDIR/CloudCoeff/Big_Endian/CloudCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_g11.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_g11.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_g12.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_g12.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_g13.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_g13.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_g15.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_g15.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_mt1r.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_mt1r.TauCoeff.bin +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_mt2.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_mt2.TauCoeff.bin +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/imgr_insat3d.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/imgr_insat3d.TauCoeff.bin +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/amsre_aqua.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/amsre_aqua.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/tmi_trmm.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/tmi_trmm.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmi_f13.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmi_f13.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmi_f14.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmi_f14.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmi_f15.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmi_f15.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmis_f16.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f16.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmis_f17.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f17.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmis_f18.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f18.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmis_f19.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f19.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ssmis_f20.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ssmis_f20.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/seviri_m10.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/v.seviri_m10.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/abi_gr.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/abi_gr.SpcCoeff.bin ./ +ln -fs $CRTMDIR/TauCoeff/ODPS/Big_Endian/ahi_himawari8.TauCoeff.bin ./ +ln -fs $CRTMDIR/SpcCoeff/Big_Endian/ahi_himawari8.SpcCoeff.bin ./ + +####################################################### +# 1. Run Unipost +# +# The Unipost is used to read native WRF model +# output and put out isobaric state fields and derived fields. +####################################################### + +export NEWDATE=$startdate + +YYY=`echo $startdate | cut -c1-4` +MMM=`echo $startdate | cut -c5-6` +DDD=`echo $startdate | cut -c7-8` +HHH=`echo $startdate | cut -c9-10` + +while [ $((10#${fhr})) -le $((10#${lastfhr})) ]; do + +# Formatted fhr for filenames +fhr=`printf "%02i" ${fhr}` +fhour=`printf "%03i" ${fhr}` + +NEWDATE=`date '+%Y%m%d%H' --date="$YYY$MMM$DDD $HHH $((10#${fhr})) hour"` + +YY=`echo $NEWDATE | cut -c1-4` +MM=`echo $NEWDATE | cut -c5-6` +DD=`echo $NEWDATE | cut -c7-8` +HH=`echo $NEWDATE | cut -c9-10` +iHH=`echo $startdate | cut -c9-10` + +echo 'NEWDATE' $NEWDATE +echo 'YY' $YY + +# Begin looping through domains list +for domain in ${domain_list}; do + +# Create model file name (inFileName) +dom_id=`echo "${domain}" | cut -d 'd' -f 2` +if [[ ${dyncore} == "ARW" ]]; then + inFileName=${modelDataPath}/wrfout_d${dom_id}_${YY}-${MM}-${DD}_${HH}:00:00 +elif [ ${dyncore} == "FV3" ]; then +if [[ ${inFormat} == "binarynemsiompiio" ]]; then + inFileName=${modelDataPath}/dynf${fhour}.nemsio + flxFileName=${modelDataPath}/phyf${fhour}.nemsio +elif [ ${inFormat} == "netcdf" ]; then + inFileName=${modelDataPath}/gfs.t${fhr}z.atmf006.nc + flxFileName=${modelDataPath}/gfs.t${fhr}z.sfcf006.nc +fi +fi + +# Check if the files exist +if [[ ! -e ${inFileName} ]]; then + echo "ERROR: Can't find 'inFileName': ${inFileName}. Directory or file does not exist. Exiting..." + echo "ERROR: Check if 'modelDataPath': ${modelDataPath} exists." + if [[ ${dyncore} == "ARW" ]]; then + echo "ERROR: Check if file: 'wrfout_d${dom_id}_${YY}-${MM}-${DD}_${HH}:00:00' exists in modelDataPath." + elif [ ${dyncore} == "FV3" ]; then + echo "ERROR: Check if file: 'dynf${fhour}.nemsio' exists in modelDataPath." +# echo "ERROR: Check if file: 'gfs.t${iHH}z.sfcf${fhour}.nemsio' exists in modelDataPath." + fi + exit 1 +fi + +# Check if that flux file exists for FV3 +if [ ${dyncore} == "FV3" ]; then + if [[ ! -e ${flxFileName} ]]; then + echo "ERROR: Can't find 'flxFileName': ${flxFileName}. Directory or file does not exist. Exiting..." + echo "ERROR: Check if 'modelDataPath': ${modelDataPath} exists." + echo "ERROR: Check if file: 'phyf${fhour}.nemsio' exists in modelDataPath." +# echo "ERROR: Check if file: 'gfs.t${iHH}z.sfcf${fhour}.nemsio' exists in modelDataPath." + exit 1 + fi +fi + +# Create itag based on user provided info. +# Output format now set by user so if-block below uses this +# to generate the correct itag. + +if [[ ${outFormat} == "grib" ]]; then + +cat > itag < itag < itag < unipost_${domain}.${fhr}.out 2>&1 +elif [ ${dyncore} == "FV3" ]; then + ${RUN_COMMAND} > unipost.${fhr}.out 2>&1 +fi + +#---------------------------------------------------------------------- +# DEBUG Example, uncomment below and comment ${RUN_COMMAND} line above. + +# debugger runs - enter your debugger and hour of error +#if [[ $((10#${fhr})) -eq 3 ]]; then +# mpirun.dbg.totalview -progname ${POSTEXEC}/unipost.exe > unipost_${domain}.${fhr}.out 2>&1 +#else +# mpirun -np 1 ${POSTEXEC}/unipost.exe > unipost_${domain}.${fhr}.out 2>&1 +#fi +#---------------------------------------------------------------------- + +# This prefix was given in the wrf_cntl.parm file (GRIB1) +# or postcntrl.xml(GRIB2) + +if [[ ${dyncore} == "ARW" ]]; then + mv WRFPRS${fhr}.${tmmark} WRFPRS_${domain}.${fhr} +elif [ ${dyncore} == "FV3" ]; then + mv GFSPRS.GrbF${fhr} GFSPRS.${fhr} +fi + +# +#---------------------------------------------------------------------- +# End of unipost job +#---------------------------------------------------------------------- + +# check to make sure UPP was successful and script linked the file +if [[ ${dyncore} == "ARW" ]]; then + ls -l WRFPRS_${domain}.${fhr} + err1=$? +elif [ ${dyncore} == "FV3" ]; then + ls -l GFSPRS.${fhr} + err1=$? +fi + +if test "$err1" -ne 0; then + echo 'UNIPOST FAILED, EXITTING' + exit +fi + +done + +fhr=$((10#${fhr}+$((${incrementhr})))) + +NEWDATE=`date '+%Y%m%d%H' --date="$YYY$MMM$DDD $HHH $((10#${fhr})) hour"` + +done + +date +echo "End of Output Job" +exit diff --git a/sorc/arch/Config.pl b/sorc/arch/Config.pl new file mode 100644 index 000000000..78c840f50 --- /dev/null +++ b/sorc/arch/Config.pl @@ -0,0 +1,326 @@ +#!/usr/bin/perl +# +# Build configuration file used during UPP compile command +# BE SURE TO RUN AS ./configure (to avoid getting a system configure +# command by mistake). +# +# This file will ask the user which type of compile they would like to +# configure for - based on machine and available compilers. +# +# After receiving valid user input the preamble file is placed in the +# configuration file, followed by the machine dependent +# compiler/linker/archive setting, followed by the postamble. This will +# be the configure.upp file which is used to compile all of UPP or any +# subdirectory. + +# Make STDOUT hot no matter what +select((select(STDOUT), $|=1)[0]); + +# +# Initialize variables +$sw_netcdf_path = "" ; +$sw_usenetcdff = "" ; # for 3.6.2 and greater, the fortran bindings + # might be in a separate lib file +$sw_os = "ARCH" ; # ARCH will match any +$sw_mach = "ARCH" ; # ARCH will match any +$sw_fc = "\$(SFC)" ; +$sw_cc = "\$(SCC)" ; +$sw_f90 = "\$(SF90)" ; +$sw_dmparallel = "" ; +$sw_ompparallel = "" ; # Not supported +$sw_comms_obj = "" ; +$sw_comms_objst = "" ; +$sw_comms_lib = "" ; +$sw_serial_mpi_stub = "" ; # Assume parallel build +$sw_serial_mpi_lib = "" ; +$sw_bindir = "" ; # bin directory +$sw_incmod = "" ; # include directory +$sw_libdir = "" ; # library directory +$sw_debug = 0 ; # Default is NOT to set debugging flags +$sw_spv = "" ; # splib version number +$sw_sigiov = "" ; # sigiolib version number +$sw_w3emcv = "" ; # w3emclib version number +$sw_w3ncov = "" ; # w3ncolib version number +$sw_sfciov = "" ; # sfciolib version number +$sw_g2v = "" ; # g2lib version number +$sw_g2tmplv = "" ; # g2tmpllib version number + +# make sure we do not buffer stdout +select((select(STDOUT), $|=1)[0]); + +# +# Read in command line arguments :: set local variables +while ( substr( $ARGV[0], 0, 1 ) eq "-" ) + { + if ( substr( $ARGV[0], 1, 7 ) eq "netcdf=" ) + { + $sw_netcdf_path = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 3 ) eq "os=" ) + { + $sw_os = substr( $ARGV[0], 4 ) ; + } + if ( substr( $ARGV[0], 1, 5 ) eq "mach=" ) + { + $sw_mach = substr( $ARGV[0], 6 ) ; + } + if ( substr( $ARGV[0], 1, 11 ) eq "dmparallel=" ) + { + $sw_dmparallel=substr( $ARGV[0], 12 ) ; + } + if ( substr( $ARGV[0], 1, 12 ) eq "ompparallel=" ) + { + $sw_ompparallel=substr( $ARGV[0], 13 ) ; + } + if ( substr( $ARGV[0], 1, 11 ) eq "USENETCDFF=" ) + { + $sw_usenetcdff = substr( $ARGV[0], 12 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "bindir=" ) + { + $sw_bindir = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "incmod=" ) + { + $sw_incmod = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "libdir=" ) + { + $sw_libdir = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "debug=1" ) + { + $sw_debug = 1; + } + if ( substr( $ARGV[0], 1, 4 ) eq "spv=" ) + { + $sw_spv = substr( $ARGV[0], 5 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "sigiov=" ) + { + $sw_sigiov = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "w3emcv=" ) + { + $sw_w3emcv = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "w3ncov=" ) + { + $sw_w3ncov = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 7 ) eq "sfciov=" ) + { + $sw_sfciov = substr( $ARGV[0], 8 ) ; + } + if ( substr( $ARGV[0], 1, 4 ) eq "g2v=" ) + { + $sw_g2v = substr( $ARGV[0], 5 ) ; + } + if ( substr( $ARGV[0], 1, 8 ) eq "g2tmplv=" ) + { + $sw_g2tmplv = substr( $ARGV[0], 9 ) ; + } + shift @ARGV ; + } + +# Build string of nceplib flags based off input from configure script +$nceplib_flags = "-lwrfio -lg2_v${sw_g2v}_4 -lg2tmpl_v${sw_g2tmplv} -lnemsio_d -lsigio_v${sw_sigiov}_4 -lsfcio_v${sw_sfciov}_4 -lgfsio_4 -lsp_v${sw_spv}_d -lw3nco_v${sw_w3ncov}_4 -lw3emc_v${sw_w3emcv}_4 -lbacio_4" ; + + +# +# Display the choices to the user and get selection +$validresponse = 0 ; + +## UPP only supports dmpar @platforms for this release +@platforms = qw ( serial dmpar ) ; + +until ( $validresponse ) { + print "-"x73 . "\n" . + "Please select from among the following supported platforms.\n\n" ; + + open CONFIGURE_DEFAULTS, "< ./sorc/arch/configure.defaults" + or die "Cannot open ./sorc/arch/configure.defaults for reading" ; + +# +# Read configure.defaults :: display all records which contain the ARCH +# directive, a matching OS, and a matching machine + $opt = 1 ; + while ( ) + { + for $paropt ( @platforms ) + { + if ( substr( $_, 0, 5 ) eq "#ARCH" + && ( index( $_, $sw_os) >= 0 ) + && ( index( $_, $sw_mach) >= 0 ) + && ( index( $_, $paropt) >= 0 ) ) + { + $optstr[$opt] = substr($_,6) ; + $optstr[$opt] =~ s/^[ ]*// ; + $optstr[$opt] =~ s/#.*$//g ; + chomp($optstr[$opt]) ; + $optstr[$opt] = $optstr[$opt]." (".$paropt.")" ; + if ( substr( $optstr[$opt], 0,4 ) ne "NULL" ) + { + printf " %2d. %s\n",$opt,$optstr[$opt] ; + $opt++ ; + } + } + } + } + close CONFIGURE_DEFAULTS ; + +# +# Get to end of our array + $opt -- ; + +# +# Get response - ask again and again - unless -1 -> exit + printf "\nEnter selection [%d-%d] : ",1,$opt ; + $response = ; + + if ( $response == -1 ) { exit ; } + + if ( $response >= 1 && $response <= $opt ) + { $validresponse = 1 ; } + else + { printf("\nInvalid response (%d)\n",$response);} +} +print "-"x73 . "\n"; + +$optchoice = $response ; + +# +# Open configure.defaults again to read record configuration settings +open CONFIGURE_DEFAULTS, "< ./sorc/arch/configure.defaults" + or die "Cannot open ./sorc/arch/configure.defaults for reading" ; +$latchon = 0 ; +while ( ) +{ + if ( substr( $_, 0, 5 ) eq "#ARCH" && $latchon == 1 ) + { + $latchon = 0 ; + } + +# +# Got our record make substitutions with local variables set above + if ( $latchon == 1 ) + { + $_ =~ s/CONFIGURE_FC/$sw_fc/g ; + $_ =~ s/CONFIGURE_F90/$sw_f90/g ; + $_ =~ s/CONFIGURE_CC/$sw_cc/g ; + + if ($sw_debug) + { + $_ =~ s/\bCONFIGURE_FFLAGS\b/\$(FDEBUG)/g ; + $_ =~ s/\bCONFIGURE_FFLAGS_CRTM\b/\$(FDEBUG)/g ; + $_ =~ s/\bCONFIGURE_CFLAGS\b/\$(CDEBUG)/g ; + } + else + { + $_ =~ s/\bCONFIGURE_FFLAGS\b/\$(FOPT)/g ; + $_ =~ s/\bCONFIGURE_FFLAGS_CRTM\b/\$(FOPT)/g ; + $_ =~ s/\bCONFIGURE_CFLAGS\b/\$(COPT)/g ; + } + + @machopts = ( @machopts, $_ ) ; + } + +# +# Loop through records to find the match based on ARCH directive and latchon +# matching OS, matching machine, matching processor selection + for $paropt ( @platforms ) + { + if ( substr( $_, 0, 5 ) eq "#ARCH" && $latchon == 0 + && ( index( $_, $sw_os ) >= 0 ) && ( index( $_, $sw_mach ) >= 0 ) + && ( index($_, $paropt) >= 0 ) ) + { + $x=substr($_,6) ; + $x=~s/^[ ]*// ; + $x =~ s/#.*$//g ; + chomp($x) ; + $x = $x." (".$paropt.")" ; + if ( $x eq $optstr[$optchoice] ) + { + $latchon = 1 ; + $sw_ompparallel = "" ; + $sw_dmparallel = "" ; + $validresponse = 0 ; + +# Serial compile uses a stub library for mpi calls + if ( $paropt eq 'serial' ) + { + die "\nERROR ERROR ERROR ERROR ERROR ERROR\n\nserial builds are not available for this release;\nThis option will be re-implemented in the future\n\nERROR ERROR ERROR ERROR ERROR ERROR\n"; + $sw_serial_mpi_stub = "wrfmpi_stubs" ; + $sw_serial_mpi_lib = "-lmpi" ; + $sw_dmparallelflag = "-DSTUBMPI" ; + } +# DM parallel + elsif ( $paropt eq 'dmpar' ) + { + $sw_comms_lib = "" ; + $sw_comms_obj = "" ; + $sw_comms_objst = ""; + $sw_dmparallel = "" ; + $sw_dmparallelflag = "-DDM_PARALLEL" ; + $sw_fc = "\$(DM_FC)" ; + $sw_f90 = "\$(DM_F90)" ; + $sw_cc = "\$(DM_CC)" ; + } + } + } + } +} +close CONFIGURE_DEFAULTS ; + +# +# Build configure.upp +open CONFIGURE_UPP, "> configure.upp" or die "cannot append configure.upp" ; + +# +# preamble +open ARCH_PREAMBLE, "< sorc/arch/preamble" or die "cannot open sorc/arch/preamble" ; +my @preamble; +# +# apply substitutions to the preamble... +while ( ) + { + @preamble = ( @preamble, $_ ) ; + } +close ARCH_PREAMBLE ; + +print CONFIGURE_UPP @preamble ; +close ARCH_PREAMBLE ; + +# +# machine/compiler configuration values +printf CONFIGURE_UPP "# Settings for %s", $optstr[$optchoice] ; +print CONFIGURE_UPP @machopts ; + +# +# postamble +open ARCH_POSTAMBLE, "< sorc/arch/postamble" or die "cannot open sorc/arch/postamble" ; +while ( ) { + $_ =~ s/CONFIGURE_NETCDF_PATH/$sw_netcdf_path/g ; + $_ =~ s/CONFIGURE_NETCDF_LIBS/$sw_usenetcdff -lnetcdf/g ; + $_ =~ s/CONFIGURE_COMMS_OBJST/$sw_comms_objst/g ; + $_ =~ s/CONFIGURE_COMMS_OBJ/$sw_comms_obj/g ; + $_ =~ s/CONFIGURE_COMMS_LIB/$sw_comms_lib/g ; + $_ =~ s/CONFIGURE_GRIB2_LIBS/$sw_grib2_libs/g ; + $_ =~ s/CONFIGURE_GRIB2_INC/$sw_grib2_inc/g ; + $_ =~ s/CONFIGURE_SERIAL_MPI_STUB/$sw_serial_mpi_stub/g ; + $_ =~ s/CONFIGURE_SERIAL_MPI_LIB/$sw_serial_mpi_lib/g ; + $_ =~ s/CONFIGURE_BLD_BINDIR/$sw_bindir/g ; + $_ =~ s/CONFIGURE_BLD_INCMOD/$sw_incmod/g ; + $_ =~ s/CONFIGURE_BLD_LIBDIR/$sw_libdir/g ; + $_ =~ s/CONFIGURE_PARALLEL_FLAG/$sw_dmparallelflag/g ; + $_ =~ s/CONFIGURE_NCEPLIB_FLAGS/$nceplib_flags/g ; + print CONFIGURE_UPP; + } +close ARCH_POSTAMBLE ; + +close CONFIGURE_UPP ; + +print "Configuration successful. To build the UPP, type: compile \n" . + "-"x73 . "\n"; + + diff --git a/sorc/arch/configure.defaults b/sorc/arch/configure.defaults new file mode 100644 index 000000000..2c79c6d46 --- /dev/null +++ b/sorc/arch/configure.defaults @@ -0,0 +1,692 @@ +########################################################### +# This file defines the compilation, link, and archive flags for +# supported systems. Each record entry should follow the same +# format +# +# Preprocessor flags +# IBM4, IBM8, LINUX, CRAY90, HP, SGI, LINUXF90, VPP500 +# VERBOSE +########################################################### +#ARCH AIX #serial dmpar +# +SFC = xlf_r +SF90 = xlf90_r -qfree=f90 +SCC = cc_r + +DM_FC = mpxlf_r +DM_F90 = mpxlf90_r -qfree=f90 +DM_CC = mpcc_r -DMPI2_SUPPORT + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /usr/bin/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPBIGENDIAN +SIZE_I8R8 = -qintsize=8 -qrealsize=8 +SIZE_I4R8 = -qintsize=4 -qrealsize=8 +SIZE_I4R4 = -qintsize=4 -qrealsize=4 +SIZE = + +PPDEFINE = -WF,-DCOMMCODE -WF,-DIBM4 -WF,-D$(BYTE_ORDER) +PPDEFINE_C = -DCOMMCODE -DIBM4 -DAIX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -qfullpath -qflttrap=inv:ov:zero:en -qcheck -qsigtrap +CRTMDBUG= +CDEBUG = -g -O0 + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS= -P -traditional-cpp $(PPDEFINE_C) +INC_FLAGS= +LDFLAGS = -lessl +FFLAGS = -qmaxmem=-1 -qarch=auto -q64 -qessl -qnosave $(SIZE) \ + -qinitauto=FF911299 $(FPPDEFINE) CONFIGURE_FFLAGS +CFLAGS = -q64 -C -qfullpath -qcpluscmt -qarch=auto $(PPDEFINE_C) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -qmaxmem=-1 -qarch=auto -q64 -qessl -qnosave -qfloat=nomaf + -qinitauto -qhalt=W -qsuffix=f=f90:cpp=F90 $(SIZE) \ + CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux i486 i586 i686, PGI compiler #serial dmpar +# +SFC = pgf90 +SF90 = pgf90 -Mfree +SCC = pgcc + +DM_FC = mpif90 +DM_F90 = mpif90 -Mfree +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -i8 -r8 +SIZE_I4R8 = -i4 -r8 +SIZE_I4R4 = -i4 -r4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -Mbounds -Mchkfpstk -Mchkptr -Mchkstk -traceback \ + -Ktrap=ovf,divz +CRTMDBUG= +CDEBUG = -g -O0 -Mbounds -Mchkfpstk -Mchkstk -traceback \ + -Ktrap=ovf,divz + + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec -Kieee +FFLAGS = -Kieee -pc 32 -byteswapio $(SIZE) $(FPPDEFINE) \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -byteswapio -Mchkstk -Mdclchk $(SIZE)\ + -Minform,inform -Mnosave -Mref_externals -Kieee \ + CONFIGURE_FFLAGS_CRTM +FL_CRTM = -Kieee + +########################################################### +#ARCH Linux x86_64, PGI compiler # serial dmpar +# +SFC = pgf90 +SF90 = pgf90 -Mfree +SCC = pgcc + +DM_FC = mpif90 +DM_F90 = mpif90 -Mfree +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -i8 -r8 +SIZE_I4R8 = -i4 -r8 +SIZE_I4R4 = -i4 -r4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -Mbounds -Mchkfpstk -Mchkptr -Mchkstk -traceback \ + -Ktrap=ovf,divz +CRTMDBUG= +CDEBUG = -O0 -g -Mbounds -Mchkfpstk -Mchkstk -traceback \ + -Ktrap=ovf,divz + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec -Kieee +FFLAGS = -Kieee -pc 64 -byteswapio $(SIZE) $(FPPDEFINE) \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -byteswapio -Mchkstk -Mdclchk $(SIZE)\ + -Minform,inform -Mnosave -Mref_externals -Kieee \ + CONFIGURE_FFLAGS_CRTM +FL_CRTM = -Kieee + +########################################################### +#ARCH Linux i486 i586 i686, Intel compiler # serial dmpar +# +SFC = ifort +SF90 = ifort -free +SCC = icc + +DM_FC = mpif90 +DM_F90 = mpif90 -free +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -r8 -i8 +SIZE_I4R8 = -r8 -i4 +SIZE_I4R4 = -r4 -i4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -traceback -check all -ftrapuv -fpe0 +CRTMDBUG= +CDEBUG = -O0 -g -traceback -debug all -Wall -check-uninit + +FOPT = -O3 +CRTMOPT = -O3 +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fp-model source -ftz -assume byterecl -convert big_endian \ + -heap-arrays $(SIZE) $(FPPDEFINE) CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fp-model source -ftz -assume byterecl \ + -convert big_endian $(SIZE) CONFIGURE_FFLAGS_CRTM +#FFLAGS_CRTM = -c -checkbound -convert big_endian -e03 -assume byterecl -fp-stack-check -mieee-fp +FL_CRTM = + +########################################################### +#ARCH Linux x86_64, Intel compiler # serial dmpar +# +SFC = ifort +SF90 = ifort -free +SCC = icc + +DM_FC = mpif90 +DM_F90 = mpif90 -free +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -r8 -i8 +SIZE_I4R8 = -r8 -i4 +SIZE_I4R4 = -r4 -i4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -traceback -check all -ftrapuv -fpe0 +CRTMDBUG= -O0 -g -traceback -check all -ftrapuv -fpe0 +CDEBUG = -O0 -g -traceback -debug all -Wall -check-uninit + +FOPT = -O3 +CRTMOPT = -O3 +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fp-model source -ftz -assume byterecl -convert big_endian \ + -heap-arrays $(SIZE) $(FPPDEFINE) CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fp-model source -ftz -assume byterecl -convert big_endian \ + $(SIZE) CONFIGURE_FFLAGS_CRTM +#FFLAGS_CRTM = -c -checkbound -convert big_endian -e03 -free -assume byterecl -fp-stack-check -mieee-fp +FL_CRTM = + +########################################################### +#ARCH Linux x86_64, Intel compiler, SGI MPT # serial dmpar +# +SFC = ifort +SF90 = ifort -free +SCC = icc + +DM_FC = mpif90 +DM_F90 = mpif90 -free +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -r8 -i8 +SIZE_I4R8 = -r8 -i4 +SIZE_I4R4 = -r4 -i4 +SIZE = + +PPDEFINE = -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -traceback -check all -ftrapuv -fpe0 +CRTMDBUG= -O0 -g -traceback -check all -ftrapuv -fpe0 +CDEBUG = -O0 -g -traceback -debug all -Wall -check-uninit + +FOPT = -O3 +CRTMOPT = -O3 +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = -I$(MPI_ROOT)/include +LDFLAGS = -Wl,-noinhibit-exec -L$(MPI_ROOT)/lib +LDFLAGS_MPI += -lmpi +FFLAGS = -fp-model source -ftz -assume byterecl -convert big_endian \ + -heap-arrays $(SIZE) $(FPPDEFINE) -I$(MPI_ROOT)/include \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fp-model source -ftz -assume byterecl \ + -convert big_endian -I$(MPI_ROOT)/include \ + $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux i486 i586 i686, gfortran compiler # serial dmpar +# +FORMAT_FREE = -ffree-form -ffree-line-length-none + +SFC = gfortran +SF90 = gfortran $(FORMAT_FREE) +SCC = gcc + +DM_FC = mpif90 +DM_F90 = mpif90 $(FREE_FORMAT) +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = TIMEF.o +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -fdefault-integer-8 -fdefault-real-8 +SIZE_I4R8 = -fdefault-real-8 +SIZE_I4R4 = +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -ffpe-trap=overflow,zero -fbounds-check -Wuninitialized \ + -ftrapv -Wall +CRTMDBUG= +CDEBUG = -g -O0 -Wall + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + $(FPPDEFINE) $(SIZE) -fno-range-check CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) -D_OPENMP CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + -ggdb -static $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux x86_64, gfortran compiler # serial dmpar +# +FORMAT_FREE = -ffree-form -ffree-line-length-none + +SFC = gfortran +SF90 = gfortran $(FORMAT_FREE) +SCC = gcc + +DM_FC = mpif90 +DM_F90 = mpif90 $(FORMAT_FREE) +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = TIMEF.o +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -fdefault-integer-8 -fdefault-real-8 +SIZE_I4R8 = -fdefault-real-8 +SIZE_I4R4 = +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -ffpe-trap=overflow,zero -fbounds-check -Wuninitialized \ + -ftrapv -Wall +CRTMDBUG= +CDEBUG = -g -O0 -Wall + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + $(FPPDEFINE) $(SIZE) -fno-range-check CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) -D_OPENMP CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + -ggdb -static $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux x86_64, Intel compiler, IBM POE # serial dmpar +# +SFC = ifort +SF90 = ifort -free +SCC = icc + +DM_FC = mpfort +DM_F90 = mpfort -free +DM_CC = mpcc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -i8 -r8 +SIZE_I4R8 = -i4 -r8 +SIZE_I4R4 = -i4 -r4 +SIZE = + +PPDEFINE = -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -check all -ftrapuv -fpe0 +CRTMDBUG= -O0 -g -check all -ftrapuv -fpe0 +CDEBUG = -O0 -g -debug all -Wall -check-uninit + +FOPT = -O3 -msse2 +CRTMOPT = -O3 -msse2 +COPT = -O3 -msse2 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = -I$(MPI_ROOT)/include +LDFLAGS = -Wl,-noinhibit-exec -L$(MPI_ROOT)/lib +FFLAGS = -fp-model source -ftz -assume byterecl -convert big_endian \ + -heap-arrays $(SIZE) $(FPPDEFINE) -I$(MPI_ROOT)/include \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fp-model source -ftz -assume byterecl -convert big_endian \ + $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux i486 i586 i686, gfortran compiler: -f90=gfortran # serial dmpar +# +FORMAT_FREE = -ffree-form -ffree-line-length-none + +SFC = gfortran +SF90 = gfortran $(FORMAT_FREE) +SCC = gcc + +DM_FC = mpif90 -f90=$(SFC) +DM_F90 = mpif90 $(FREE_FORMAT) -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = TIMEF.o +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -fdefault-integer-8 -fdefault-real-8 +SIZE_I4R8 = -fdefault-real-8 +SIZE_I4R4 = +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -ffpe-trap=overflow,zero -fbounds-check -Wuninitialized \ + -ftrapv -Wall +CRTMDBUG= +CDEBUG = -g -O0 -Wall + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + $(FPPDEFINE) $(SIZE) -fno-range-check CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) -D_OPENMP CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + -ggdb -static $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux x86_64, gfortran compiler: -f90=gfortran # serial dmpar +# +FORMAT_FREE = -ffree-form -ffree-line-length-none + +SFC = gfortran +SF90 = gfortran $(FORMAT_FREE) +SCC = gcc + +DM_FC = mpif90 -f90=$(SFC) +DM_F90 = mpif90 $(FORMAT_FREE) -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = TIMEF.o +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -fdefault-integer-8 -fdefault-real-8 +SIZE_I4R8 = -fdefault-real-8 +SIZE_I4R4 = +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -ffpe-trap=overflow,zero -fbounds-check -Wuninitialized \ + -ftrapv -Wall +CRTMDBUG= +CDEBUG = -g -O0 -Wall + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec +FFLAGS = -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + $(FPPDEFINE) $(SIZE) -fno-range-check CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) -D_OPENMP CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + -ggdb -static $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH Linux i486 i586 i686, PGI compiler: -f90=pgf90 #serial dmpar +# +SFC = pgf90 +SF90 = pgf90 -Mfree +SCC = pgcc + +DM_FC = mpif90 -f90=$(SFC) +DM_F90 = mpif90 -Mfree -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -i8 -r8 +SIZE_I4R8 = -i4 -r8 +SIZE_I4R4 = -i4 -r4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -Mbounds -Mchkfpstk -Mchkptr -Mchkstk -traceback \ + -Ktrap=ovf,divz +CRTMDBUG= +CDEBUG = -g -O0 -Mbounds -Mchkfpstk -Mchkstk -traceback \ + -Ktrap=ovf,divz + + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec -Kieee +FFLAGS = -Kieee -pc 32 -byteswapio $(SIZE) $(FPPDEFINE) \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -byteswapio -Mchkstk -Mdclchk $(SIZE)\ + -Minform,inform -Mnosave -Mref_externals -Kieee \ + CONFIGURE_FFLAGS_CRTM +FL_CRTM = -Kieee + +########################################################### +#ARCH Linux x86_64, PGI compiler: -f90=pgf90 # serial dmpar +# +SFC = pgf90 +SF90 = pgf90 -Mfree +SCC = pgcc + +DM_FC = mpif90 -f90=$(SFC) +DM_F90 = mpif90 -Mfree -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = /lib/cpp + +LINUX_OBJ = +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -i8 -r8 +SIZE_I4R8 = -i4 -r8 +SIZE_I4R4 = -i4 -r4 +SIZE = + +PPDEFINE = -DCOMMCODE -DLINUX -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -O0 -g -Mbounds -Mchkfpstk -Mchkptr -Mchkstk -traceback \ + -Ktrap=ovf,divz +CRTMDBUG= +CDEBUG = -O0 -g -Mbounds -Mchkfpstk -Mchkstk -traceback \ + -Ktrap=ovf,divz + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = -Wl,-noinhibit-exec -Kieee +FFLAGS = -Kieee -pc 64 -byteswapio $(SIZE) $(FPPDEFINE) \ + CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -byteswapio -Mchkstk -Mdclchk $(SIZE)\ + -Minform,inform -Mnosave -Mref_externals -Kieee \ + CONFIGURE_FFLAGS_CRTM +FL_CRTM = -Kieee + +########################################################### +#ARCH Darwin (MACOS) gfortran with gcc #serial smpar dmpar dm+sm +# +FORMAT_FREE = -ffree-form -ffree-line-length-none + +SFC = gfortran +SF90 = gfortran $(FORMAT_FREE) +SCC = gcc + +DM_FC = mpif90 +DM_F90 = mpif90 $(FORMAT_FREE) +DM_CC = mpicc + +FC = CONFIGURE_FC +F90 = CONFIGURE_F90 +CC = CONFIGURE_CC +CPP = cpp -x assembler-with-cpp + +LINUX_OBJ = TIMEF.o +BYTE_ORDER = UPPLITTLEENDIAN +SIZE_I8R8 = -fdefault-integer-8 -fdefault-real-8 +SIZE_I4R8 = -fdefault-real-8 +SIZE_I4R4 = +SIZE = + +PPDEFINE = -DCOMMCODE -D$(BYTE_ORDER) +FPPDEFINE = $(PPDEFINE) + +FDEBUG = -g -O0 -ffpe-trap=overflow,zero -fbounds-check -Wuninitialized \ + -ftrapv -Wall +CRTMDBUG= +CDEBUG = -g -O0 -Wall + +FOPT = -O3 +CRTMOPT = +COPT = -O3 + +CPP_FLAGS = -P -traditional-cpp $(FPPDEFINE) +INC_FLAGS = +LDFLAGS = #Left blank intentionally; --noinhibit-exec option does not seem to exist for MacOS linker +FFLAGS = -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + $(FPPDEFINE) $(SIZE) -fno-range-check CONFIGURE_FFLAGS +CFLAGS = $(PPDEFINE) -D_OPENMP CONFIGURE_CFLAGS +ARFLAGS = ru + +FFLAGS_CRTM = -c -fconvert=big-endian -fno-second-underscore -frecord-marker=4 \ + -ggdb -static $(SIZE) CONFIGURE_FFLAGS_CRTM +FL_CRTM = + +########################################################### +#ARCH NULL + diff --git a/sorc/arch/postamble b/sorc/arch/postamble new file mode 100644 index 000000000..016adf52d --- /dev/null +++ b/sorc/arch/postamble @@ -0,0 +1,58 @@ +# +# Macros, these should be generic for all machines +LN = ln -sf +MAKE = make +RM = /bin/rm -f +CP = /bin/cp +MV = /bin/mv +AR = ar +RANLIB = ranlib + +NCEPLIBLIB = CONFIGURE_NCEPLIBS_LIB +NCEPLIBINC = CONFIGURE_NCEPLIBS_INC +NCEPLIB_FLAGS = CONFIGURE_NCEPLIB_FLAGS + +NETCDFPATH = CONFIGURE_NETCDF_PATH +NETCDFLIBS = CONFIGURE_NETCDF_LIBS + +COMMS_ADD_OBJ = CONFIGURE_COMMS_OBJ +COMMS_ADD_OBJST = CONFIGURE_COMMS_OBJST +COMMS_LIB = CONFIGURE_COMMS_LIB + +SERIAL_MPI_STUB = CONFIGURE_SERIAL_MPI_STUB +SERIAL_MPI_LIB = CONFIGURE_SERIAL_MPI_LIB + +PARALLEL_FLAG = CONFIGURE_PARALLEL_FLAG + +GRIB2SUPT_LIB = CONFIGURE_GRIB2_LIBS +GRIB2SUPT_INC = CONFIGURE_GRIB2_INC + +BINDIR = CONFIGURE_BLD_BINDIR +INCMOD = CONFIGURE_BLD_INCMOD +LIBDIR = CONFIGURE_BLD_LIBDIR + +# +# These files may be changed to enable other files with the same +# functions definitions, but different logic. This is typically +# how backward compatibilty is achieved for the community code. +GRIBIT = GRIBIT.f +CALRAD = CALRAD_WCLOUD_crtm.f + +# There is probably no reason to modify these rules +.SUFFIXES : .c .f .f90 +.c.o: + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< + +.f.o: + $(FC) $(FFLAGS) $(EXTRA_FFLAGS) $< + +.f90.o : + $(F90) $(FFLAGS) $(EXTRA_FFLAGS) $< + +.F.o: + $(CPP) $(CPP_FLAGS) $< > $*.f + $(FC) $(FFLAGS) $(EXTRA_FFLAGS) $< + +.F90.o: + $(CPP) $(CPP_FLAGS) $< > $*.f90 + $(F90) $(FFLAGS) $(EXTRA_FFLAGS) $< diff --git a/sorc/arch/preamble b/sorc/arch/preamble new file mode 100644 index 000000000..fe5556b39 --- /dev/null +++ b/sorc/arch/preamble @@ -0,0 +1,18 @@ +# configure.upp +# +# This file was automatically generated by the configure script in the +# top level directory. You may make changes to the settings in this +# file but be aware they will be overwritten each time you run configure. +# Ordinarily, it is necessary to run configure once, when the code is +# first installed. +# +# To permanently change options, change the settings for your platform +# in the file arch/configure.defaults then rerun configure. +# + +SHELL = /bin/sh + +LDFLAGS_MPI = # to be overridden later + +#### Architecture specific settings #### + diff --git a/sorc/arch/version b/sorc/arch/version new file mode 100644 index 000000000..cd5e75810 --- /dev/null +++ b/sorc/arch/version @@ -0,0 +1,19 @@ +Community release_version = 'UPPV4.0.1' + +Synced with NCEP vesion 'v8.0.0' + +Library Versions: +* --> libs with custom mods for community version +bacio - v2.0.1 +g2 - v3.1.0* +g2tmpl - v1.5.0* +gfsio - v1.1.0 +ip - v3.0.0 +nemsio - v2.2.2* +sfcio - v1.1.0 +sigio - v2.1.0 +sp - v2.0.2* +w3emc - v2.2.0 +w3nco - v2.0.6 +xml - v2.0.0 +crtm - v2.2.3 diff --git a/sorc/build_ncep_post.sh b/sorc/build_ncep_post.sh index a0d7694ca..fb5c8413c 100755 --- a/sorc/build_ncep_post.sh +++ b/sorc/build_ncep_post.sh @@ -1,5 +1,4 @@ -SHELL=/bin/sh - +#!/bin/bash #################################################################################################### # # post using module compile standard @@ -8,44 +7,103 @@ SHELL=/bin/sh # 01/16 Lin Gan: Update to use GFS Vertical Structure # 07/16 J. Carley: Generalize for other machines using modules # 07/18 Wen Meng: Set post to v8.0.0 for fv3gfs +# 10/19 M Kavulich: Provide machine name as an input argument # ##################################################################################################### ##################################################################################################### +#List of valid machines: +validmachines=(theia jet wcoss_dell_p3 wcoss cray-intel hera orion odin) + +function usage { + echo "Usage:" + echo " $0 machinename" + echo "" + echo " Valid values for 'machinename' are: ${validmachines[@]}" + exit 1 +} + +if [ "$#" -eq 0 ]; then + #Check to see if we are building the old way + module purge + set -x + mac=$(hostname | cut -c1-1) + mac2=$(hostname | cut -c1-2) + if [ $mac2 = tf ] ; then # For Theia + machine=theia + elif [ $mac = f ] ; then # For Jet + machine=jet + elif [ $mac = v -o $mac = m ] ; then # For Dell + machine=wcoss_dell_p3 + elif [ $mac = t -o $mac = e -o $mac = g ] ; then # For WCOSS + machine=wcoss + elif [ $mac = l -o $mac = s ] ; then # wcoss_c (i.e. luna and surge) + export machine=cray-intel + elif [ $mac2 = hf ] ; then # For Hera + machine=hera + elif [ $mac = O ] ; then + machine=orion + elif [ $mac2 = od ] ; then + machine=odin + else + echo "" + echo "ERROR ERROR ERROR" + echo "" + echo "Error: To use this build script without arguments you must be on a valid machine" + echo "Valid machines are:" + echo "${validmachines[@]}" + echo "" + echo "ERROR ERROR ERROR" + fi + +elif [ "$#" -gt 1 ]; then + echo "Error: too many input arguments" + exit 2 +else + machine=$1 +fi # Lin Gan Module Load -module purge set -x -mac=$(hostname | cut -c1-1) -mac2=$(hostname | cut -c1-2) -if [ $mac2 = tf ] ; then # For Theia - machine=theia +case $machine in +theia) # For Theia + module purge . /etc/profile . /etc/profile.d/modules.sh -elif [ $mac = f ] ; then # For Jet - machine=jet + ;; +jet) # For Jet + module purge . /etc/profile . /etc/profile.d/modules.sh -elif [ $mac = v -o $mac = m ] ; then # For Dell - machine=wcoss_dell_p3 - . $MODULESHOME/init/bash -elif [ $mac = t -o $mac = e -o $mac = g ] ; then # For WCOSS - machine=wcoss + ;; +wcoss_dell_p3) # For Dell + module purge + . $MODULESHOME/init/bash + ;; +wcoss) # For WCOSS + module purge . /usrx/local/Modules/default/init/bash -elif [ $mac = l -o $mac = s ] ; then # wcoss_c (i.e. luna and surge) - export machine=cray-intel -elif [ $mac2 = hf ] ; then # For Hera - machine=hera + ;; +cray-intel) # For wcoss_c (i.e. luna and surge) + module purge + ;; +hera) # For Hera . /etc/profile . /etc/profile.d/modules.sh -elif [ $mac = O ] ; then # For Orion - machine=orion + ;; +orion) # For Orion . /etc/profile -elif [ $mac2 = od ] ; then # For Odin at NSSL - machine=odin + ;; +odin) # For Odin at NSSL . /etc/profile . /etc/profile.d/modules.sh -fi + ;; +*) + set +x + echo "ERROR: Invalid machine name specified" + usage + ;; +esac # Lin Gan modifiy to use NCO vertical structure prefix for NCO deployment - 20160131 moduledir=`dirname $(readlink -f ../modulefiles/post)` @@ -62,3 +120,5 @@ if [ ! -d "../../exec" ] ; then mkdir -p ../../exec fi cp ncep_post ../../exec/ + +exit 0 diff --git a/sorc/comlibs/crtm2 b/sorc/comlibs/crtm2 new file mode 160000 index 000000000..c87b0a507 --- /dev/null +++ b/sorc/comlibs/crtm2 @@ -0,0 +1 @@ +Subproject commit c87b0a50726446e6aaf10cbd139718be72cd5bd5 diff --git a/sorc/comlibs/crtm2.makefile b/sorc/comlibs/crtm2.makefile new file mode 100755 index 000000000..e23b2e8af --- /dev/null +++ b/sorc/comlibs/crtm2.makefile @@ -0,0 +1,49 @@ +# +# This is transitional makefile from Community UPP to the CRTM library +# +#============================================================================== +# +# Community Radiate Transfer Model (CRTM) Makefile +# The library name is set in the CRTM makefiles -- so this file must +# be modified if CRTM uodates theirs +#============================================================================== + +SHELL = /bin/sh +LIB = libCRTM.a +INCMOD_CRTM = $(INCMOD)/crtm2 + +# +# configuration file contains architecture and compile information +include ../../../configure.upp + +# +# Needed system commands + +# +# Extra Flags +EXTRA_FFLAGS = -c $(PROMOTION) +EXTRA_CFLAGS = -c +EXTRA_ARFLAGS = + +# +# TARGETS +all : + ( cd src && echo "Making CRTM library in `pwd`" ; \ + $(MAKE) FC="$(F90)" FL="$(F90)" FC_FLAGS="$(FFLAGS_CRTM)" FL_FLAGS="$(FL_CRTM)" install; \ + \ + $(CP) lib/libCRTM.a $(LIBDIR)/$(LIB) ; \ + $(LN) `pwd`/include $(INCMOD_CRTM) ; \ + ) + +# +# Make clean - always use crtm distclean +clean: + ( cd src && echo "Cleaning CRTM library" && \ + $(MAKE) distclean ; \ + $(RM) $(INCMOD_CRTM) ; \ + $(RM) $(LIBDIR)/$(LIB) ; \ + ) +distclean: clean + +.IGNORE: +.PHONY: distclean clean diff --git a/sorc/comlibs/makefile b/sorc/comlibs/makefile new file mode 100644 index 000000000..301b11e88 --- /dev/null +++ b/sorc/comlibs/makefile @@ -0,0 +1,40 @@ +# +# This is a makefile for the UPP libraries +SHELL=/bin/sh + +# +# The configuration file created based on the architecture and compiler +include ../../configure.upp + +# +# Note crtm2 library not part of the UPP repository at NCAR - but is available +# at NCAR in the external-lib repository -- the library is bundled as part +# of UPP for any official release +SUBDIRS = crtm2 xml $(SERIAL_MPI_STUB) +LIBDIR = ../../lib +INCMOD = ../../include + +#---------------------------------------------------------------------------- +# Make all directories + +all: $(SUBDIRS) + $(CP) crtm2.makefile crtm2/makefile + @for dir in $(SUBDIRS); do \ + ( cd $$dir; \ + echo -e "\n===== Making $@ in `pwd` =====" ; \ + $(MAKE) $@ ) ; \ + done + +#----------------------------------------------------------------------------- +# clean all directories -- being tidy + +clean: $(SUBDIRS) wrfmpi_stubs + @for dir in $(SUBDIRS) wrfmpi_stubs; do \ + ( cd $$dir && \ + echo -e "\n====== $@ in `pwd` ======" && \ + $(MAKE) $@ ) ; \ + done + $(RM) -f crtm2/makefile + +.IGNORE: +.PHONY: clean diff --git a/sorc/comlibs/wrfmpi_stubs/makefile b/sorc/comlibs/wrfmpi_stubs/makefile new file mode 100755 index 000000000..e76d36f0d --- /dev/null +++ b/sorc/comlibs/wrfmpi_stubs/makefile @@ -0,0 +1,52 @@ +#------------------------------------------------------------------------- +# This makefile is for the wrfmpi_stubs library +#------------------------------------------------------------------------- + +SHELL = /bin/sh +LIB = libmpi.a + +# +# configuration based on architecture and compiler +include ../../../configure.upp + +# +#extra flags +EXTRA_FFLAGS = -c $(PROMOTION) -I$(INCMOD) +EXTRA_CFLAGS = -c $(PROMOTION) -I$(INCMOD) +EXTRA_ARFLAGS = + +# +# Library object files +OBJS_F = +OBJS_F77 = mpi_fortran.o +OBJS_C = mpi_c.o +OBJS = $(OBJS_F) $(OBJS_F77) $(OBJS_C) + +SRCS_F = +SRCS_F77 = $(OBJS_F77:.o=.f) +SRCS_C = $(OBJS_C:.o=.c) +SRCS = $(SRCS_F) $(SRCS_F77) $(SRCS_C) + +INCLUDE = mpi.h + +# +# TARGETs +# all - build the library and install it +all: $(LIB) + +# +# Link must be made when using mpi stub for serial compiles +$(LIB): $(OBJS) + $(AR) $(ARFLAGS) $(EXTRA_ARFLAGS) $@ $(OBJS) + $(CP) $(LIB) $(LIBDIR) + if [ $(SERIAL_MPI_STUB) != "" ] ; then \ + $(LN) ../lib/wrfmpi_stubs/mpif.h ../../unipost/mpif.h ; \ + fi + +clean: + $(RM) ../../unipost/mpif.h + $(RM) $(LIBDIR)/$(LIB) + $(RM) $(OBJS) $(LIB) + +.IGNORE: +.PHONY: clean diff --git a/sorc/comlibs/wrfmpi_stubs/mpi.h b/sorc/comlibs/wrfmpi_stubs/mpi.h new file mode 100644 index 000000000..32f8d55fe --- /dev/null +++ b/sorc/comlibs/wrfmpi_stubs/mpi.h @@ -0,0 +1,16 @@ +/* Dummy defs for MPI C stubs */ + +#define MPI_Comm int +#define MPI_Request int +#define MPI_Status int +#define MPI_Datatype int +#define MPI_Op int + +#define MPI_INT 6 +#define MPI_FLOAT 10 +#define MPI_DOUBLE 11 +#define MPI_BYTE 3 + +#define MPI_SUM 102 +#define MPI_MAX 100 +#define MPI_MIN 101 diff --git a/sorc/comlibs/wrfmpi_stubs/mpi_c.c b/sorc/comlibs/wrfmpi_stubs/mpi_c.c new file mode 100644 index 000000000..4d928fa66 --- /dev/null +++ b/sorc/comlibs/wrfmpi_stubs/mpi_c.c @@ -0,0 +1,276 @@ +/* Stub versions of MPI C routines (single processor) - most do nothing */ + +#include "mpi.h" +#include "stdio.h" + +/* function prototypes */ + +void mpi_copy_integer(int *, int *, int); +void mpi_copy_float(float *, float *, int); +void mpi_copy_double(double *, double *, int); +void mpi_copy_byte(char *, char *, int); + +/* MPI Functions */ + +void MPI_Comm_rank(MPI_Comm comm, int *me) +{ + *me = 0; +} + +void MPI_Comm_size(MPI_Comm comm, int *nprocs) +{ + *nprocs = 1; +} + +void MPI_Send(void *buf, int count, MPI_Datatype datatype, + int dest, int tag, MPI_Comm comm) +{ + printf("MPI Stub WARNING: Should not send message to self\n"); +} + +void MPI_Recv(void *buf, int count, MPI_Datatype datatype, + int source, int tag, MPI_Comm comm, MPI_Status *status) +{ + printf("MPI Stub WARNING: Should not recv message from self\n"); +} + +void MPI_Irecv(void *buf, int count, MPI_Datatype datatype, + int source, int tag, MPI_Comm comm, MPI_Request *request) +{ + printf("MPI Stub WARNING: Should not recv message from self\n"); +} + +void MPI_Isend(void *buf, int count, MPI_Datatype datatype, + int source, int tag, MPI_Comm comm, MPI_Request *request) +{ + printf("MPI Stub WARNING: Should not send message from self\n"); +} + + +void MPI_Wait(MPI_Request *request, MPI_Status *status) +{ + printf("MPI Stub WARNING: Should not wait on message from self\n"); +} + +void MPI_Abort(MPI_Comm comm, MPI_Status *status) +{ + printf("MPI Stub : from Abort\n"); +} + +void MPI_Finalize( void ) +{ + printf("MPI Stub WARNING: Should not MPI_Finalize\n"); +} + +void MPI_Initialized( int * tag ) +{ + printf("MPI Stub WARNING: Should not MPI_Initialize\n"); +} + + +void MPI_Waitany(int count, MPI_Request *request, int *index, + MPI_Status *status) +{ + printf("MPI Stub WARNING: Should not wait on message from self\n"); +} + +void MPI_Comm_dup(MPI_Comm comm, MPI_Comm *comm_out) { } + +void MPI_Comm_free(MPI_Comm *comm) { } + +int MPI_Bcast(void *sendbuf, int sendcount, MPI_Datatype datatype, + int task, MPI_Comm comm) +{ + return 0; +} + +/* copy values from data1 to data2 */ + +void MPI_Allreduce(void *sendbuf, void *recvbuf, int sendcount, + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) +{ + if (datatype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (datatype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf, sendcount); + else if (datatype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf, sendcount); + else if (datatype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf, sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, + void *recvbuf, int recvcount, MPI_Datatype recvtype, + int task, MPI_Comm comm) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, + void *recvbuf, int *recvcounts, MPI_Datatype recvtype, + int *task, MPI_Comm comm) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Scatterv(void *sendbuf, int sendcount, int *displs, + MPI_Datatype sendtype, void *recvbuf, + int *recvcounts, MPI_Datatype recvtype, + int *task, MPI_Comm comm) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, + void *recvbuf, int recvcount, MPI_Datatype recvtype, + MPI_Comm comm) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, + void *recvbuf, int *recvcounts, int *displs, + MPI_Datatype recvtype, MPI_Comm comm) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,sendcount); + else if (sendtype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,sendcount); +} + +/* copy values from data1 to data2 */ + +void MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) +{ + if (datatype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,*recvcounts); + else if (datatype == MPI_FLOAT) + mpi_copy_float(sendbuf,recvbuf,*recvcounts); + else if (datatype == MPI_DOUBLE) + mpi_copy_double(sendbuf,recvbuf,*recvcounts); + else if (datatype == MPI_BYTE) + mpi_copy_byte(sendbuf,recvbuf,*recvcounts); +} + + +/* +------------------- +Added routines for data copying +------------------- +*/ + +void mpi_copy_integer(int *data1, int *data2, int n) +{ + int i; + for (i = 0; i < n; i++) data2[i] = data1[i]; +} + +void mpi_copy_float(float *data1, float *data2, int n) +{ + int i; + for (i = 0; i < n; i++) data2[i] = data1[i]; +} + +void mpi_copy_double(double *data1, double *data2, int n) +{ + int i; + for (i = 0; i < n; i++) data2[i] = data1[i]; +} + +void mpi_copy_byte(char *data1, char *data2, int n) +{ + int i; + for (i = 0; i < n; i++) data2[i] = data1[i]; +} + +void MPI_Cart_shift(MPI_Comm comm,int direction,int disp, + int *rank_source,int *rank_dest) +{ + +} + + +int MPI_Cart_rank ( MPI_Comm comm, int *coords, int *rank ) +{ + return 0; +} + +int MPI_Alltoall ( void *sendbuf, int *sendcnts, MPI_Datatype sendtype, + void *recvbuf, int *recvcnts, MPI_Datatype recvtype, MPI_Comm comm ) +{ + if (sendtype == MPI_INT) + mpi_copy_integer(sendbuf,recvbuf,sendcnts[0]); + else if (sendtype == MPI_FLOAT) + mpi_copy_float((float *)sendbuf,(float *)recvbuf, sendcnts[0]); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double((double *)sendbuf,(double *)recvbuf, sendcnts[0]); + else if (sendtype == MPI_BYTE) + mpi_copy_byte((char *)sendbuf,(char *)recvbuf, sendcnts[0]); + return 0; +} + +int MPI_Alltoallv ( void *sendbuf, int *sendcnts, int *sdispls, MPI_Datatype sendtype, + void *recvbuf, int *recvcnts, int *rdispls, MPI_Datatype recvtype, MPI_Comm comm ) +{ + int *recv_offset; + + recv_offset = recvbuf + *sdispls; + + if (sendtype == MPI_INT) + mpi_copy_integer((int *)sendbuf,(int *)recv_offset,sendcnts[0]); + else if (sendtype == MPI_FLOAT) + mpi_copy_float((float *)sendbuf,(float *)recv_offset, sendcnts[0]); + else if (sendtype == MPI_DOUBLE) + mpi_copy_double((double *)sendbuf,(double *)recv_offset, sendcnts[0]); + else if (sendtype == MPI_BYTE) + mpi_copy_byte((char *)sendbuf,(char *)recv_offset, sendcnts[0]); + return 0; +} + +int MPI_Cart_coords ( MPI_Comm comm, int rank, int maxdims, int *coords ) +{ + return 0; +} diff --git a/sorc/comlibs/wrfmpi_stubs/mpi_fortran.f b/sorc/comlibs/wrfmpi_stubs/mpi_fortran.f new file mode 100644 index 000000000..06a997497 --- /dev/null +++ b/sorc/comlibs/wrfmpi_stubs/mpi_fortran.f @@ -0,0 +1,543 @@ +c Stub versions of MPI F77 routines (single processor) - most do nothing +c 20101228 slovacek add mpi_file_open and mpi_file_read_at declarations +c these files will do nothing, but report that serial bbuilds +c don't support the functionalty and return a failure code + +c timer routine +c can replace etime with standard UNIX call on a particular system + + double precision function mpi_wtime() + real array(2) + + mpi_wtime = etime(array) + + return + end + + + subroutine mpi_init(ierror) + + return + end + + subroutine mpi_initialized(mpi_inited, ierror) + logical mpi_inited + + return + end + + + + subroutine mpi_finalize(ierror) + + return + end + + + subroutine mpi_abort(mpi_comm,ierror) + + stop + end + +c return me = 0 + + subroutine mpi_comm_rank(mpi_comm,me,ierror) + + me = 0 + + return + end + +c return nprocs = 1 + + subroutine mpi_comm_size(mpi_comm,nprocs,ierror) + + nprocs = 1 + + return + end + + + subroutine mpi_barrier(mpi_comm,ierror) + + return + end + +c warn against sending message to self, since no data copy is done + + subroutine mpi_send(data,n,mpi_datatype,iproc,itag, + $ mpi_comm,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not send message to self' + + return + end + + subroutine mpi_comm_dup(oldcomm, newcomm,ierror) + integer oldcomm, newcomm,ierror + newcomm = oldcomm + return + end + + subroutine mpi_isend(buf,count,datatype,source, + & tag,comm,request,ierror) + integer buf(*), count,datatype,source,tag,comm, + & request,ierror + call mpi_error() + return + end + + subroutine mpi_error() + print *, 'mpi_error called' + stop + end + + subroutine mpi_comm_group (com,group,ierr ) + integer com,group,ierr + write(6,*) 'dont want to see this' + group=com + return + end + + subroutine mpi_group_excl(intin,n,ranks,ngroup,ierr) + integer intin,n,ranks(n),ngroup,ierr + ngroup=intin + return + end + + subroutine mpi_group_free (intin,ierr ) + integer intin,ierr + return + end + + subroutine mpi_intercomm_create (lcom,llead,ipeer,irem,itag, + & newcom,ierr ) + integer lcom,llead,ipeer,irem,itag,newcom,ierr + newcom=lcom + write(6,*) 'shouldnt be calling this!' + return + end + + subroutine mpi_comm_create (com,group,ncom,ierr ) + integer com,group,ncom,ierr + ncom=com + return + end + + subroutine mpi_sendrecv(sendbuf,sendcount,sendtype, + + dest,sendtag,recvbuf,recvcount,recvtype,source,recvtag, + + comm,status,ierr) + + integer sendcount,sendtype + integer dest,sendtag,recvcount + integer recvtype,source,recvtag,comm,ierr,status(*) + + write(6,*) 'should never execute this when running with one CPU' + + return + end + + subroutine mpi_gatherv(sendbuf,sendcount,sendtype, + + recvbuf,recvcounts,displs,recvtype,root,comm,ierr) + + integer sendcount,sendtype,recvcounts(*),displs(*) + integer recvtype,root,comm,ierr + write(6,*) 'should never execute this when running with one CPU' + + return + end + + subroutine mpi_alltoall(sendbuf,sendcount,sendtype, + + recvbuf, recvcount, recvtype, comm,ierr) + + integer sendcount,sendtype,recvcount,recvtype,comm + integer ierr=0 + + if (sendtype.eq.mpi_integer) then + call mpi_copy_integer(sendbuf,recvbuf,sendcount) + else if (sendtype.eq.mpi_real) then + call mpi_copy_real(sendbuf,recvbuf,sendcount) + else if (sendtype.eq.mpi_double_precision) then + call mpi_copy_double_precision(sendbuf,recvbuf,sendcount) + else if (sendtype.eq.mpi_real8) then + call mpi_copy_double_precision(sendbuf,recvbuf,sendcount) + endif + + return + end + + subroutine mpi_alltoallv(sendbuf,sendcount,sdispls, sendtype, + + recvbuf, recvcount, rdispls, recvtype, comm,ierr) + + integer sendcount,sendtype,recvcount,recvtype,comm + integer sdispls, rdispls + integer ierr + integer recv_offset + + ierr = 0 + recv_offset = recvbuf + rdispls(1) + if (sendtype.eq.mpi_integer) then + call mpi_copy_integer(sendbuf,recv_offset,sendcount) + else if (sendtype.eq.mpi_real) then + call mpi_copy_real(sendbuf,recv_offset,sendcount) + else if (sendtype.eq.mpi_double_precision) then + call mpi_copy_double_precision(sendbuf,recv_offset,sendcount) + else if (sendtype.eq.mpi_real8) then + call mpi_copy_double_precision(sendbuf,recv_offset,sendcount) + endif + + return + end + +c warn against sending message to self, since no data copy is done + + subroutine mpi_rsend(data,n,mpi_datatype,iproc,itag, + $ mpi_comm,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not send message to self' + + return + end + +c warn against receiving message from self, since no data copy is done + + subroutine mpi_probe(iproc,itag,mpi_comm,istatus,ierror) + + return + end + + + subroutine mpi_recv(data,n,mpi_datatype,iproc,itag, + $ mpi_comm,istatus,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not recv message from self' + + return + end + +c warn against querying message from self, since no data copy is done + + subroutine mpi_get_count(istatus,mpi_datatype,icount,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not query message from self' + + return + end + + +c warn against receiving message from self, since no data copy is done + + subroutine mpi_irecv(data,n,mpi_datatype,iproc,itag, + $ mpi_comm,irequest,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not recv message from self' + + return + end + +c warn against waiting on message from self, since no data copy is done + + subroutine mpi_wait(irequest,istatus,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not wait on message from self' + + return + end + +c warn against waiting on message from self, since no data copy is done + + subroutine mpi_waitall(icount,irequest,istatus,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not wait on message from self' + + return + end + +c warn against waiting on message from self, since no data copy is done + + subroutine mpi_waitany(icount,array_of_requests, + $ index,istatus,ierror) + + write (6,*) + $ 'MPI Stub WARNING: Should not wait on message from self' + + return + end + + + subroutine mpi_bcast(data,n,mpi_datatype,node,mpi_comm,ierror) + + return + end + + subroutine mpi_type_size(mpi_datatype,isize,ierror) + + return + end + +c copy values from data1 to data2 + + subroutine mpi_reduce(data1,data2,n,mpi_datatype, + $ mpi_operation,io_task,mpi_comm,ierror) + include "mpif.h" + + if (mpi_datatype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,n) + else if (mpi_datatype.eq.mpi_real) then + call mpi_copy_real(data1,data2,n) + else if (mpi_datatype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,n) + else if (mpi_datatype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,n) + endif + + return + end + + + subroutine mpi_allreduce(data1,data2,n,mpi_datatype, + $ mpi_operation,mpi_comm,ierror) + include "mpif.h" + + print *,'allreduce ',mpi_datatype,mpi_integer,mpi_real + if (mpi_datatype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,n) + else if (mpi_datatype.eq.mpi_real) then + call mpi_copy_real(data1,data2,n) + else if (mpi_datatype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,n) + else if (mpi_datatype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,n) + endif + + return + end + + subroutine mpi_gather(data1,nsend,mpi_sendtype,data2, + $ nrecv,mpi_recvtype,io_task,mpi_comm,ierror) + include "mpif.h" + + if (mpi_sendtype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real) then + call mpi_copy_real(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,nsend) + endif + + return + end + + +c copy values from data1 to data2 + + subroutine mpi_allgather(data1,nsend,mpi_sendtype, + $ data2,nrecv,mpi_recvtype,mpi_comm,ierror) + include "mpif.h" + + if (mpi_sendtype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real) then + call mpi_copy_real(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,nsend) + endif + + return + end + + +c copy values from data1 to data2 + + subroutine mpi_allgatherv(data1,nsend,mpi_sendtype, + $ data2,nrecv,ndispls,mpi_recvtype,mpi_comm,ierror) + include "mpif.h" + + if (mpi_sendtype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real) then + call mpi_copy_real(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,nsend) + else if (mpi_sendtype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,nsend) + endif + + return + end + + +c copy values from data1 to data2 + + subroutine mpi_reduce_scatter(data1,data2,n,mpi_datatype, + $ mpi_operation,mpi_comm,ierror) + include "mpif.h" + + if (mpi_datatype.eq.mpi_integer) then + call mpi_copy_integer(data1,data2,n) + else if (mpi_datatype.eq.mpi_real) then + call mpi_copy_real(data1,data2,n) + else if (mpi_datatype.eq.mpi_double_precision) then + call mpi_copy_double_precision(data1,data2,n) + else if (mpi_datatype.eq.mpi_real8) then + call mpi_copy_double_precision(data1,data2,n) + endif + + return + end + + + subroutine mpi_cart_create(mpi_comm,ndims,dims, + $ periods,reorder,mpi_comm_cart,ierror) + logical periods(*),reorder + integer dims(*) + + return + end + + +c set all coords = 0 + + subroutine mpi_cart_get(mpi_comm,ndims,dims,periods, + $ coords,ierror) + logical periods(*) + integer dims(*),coords(*) + + do i = 1,ndims + coords(i) = 0 + enddo + + return + end + + +c set isource = idest = self = 0 + + subroutine mpi_cart_shift(mpi_comm,idir,idisp, + $ isource,idest,ierror) + + isource = 0 + idest = 0 + + return + end + + + subroutine mpi_comm_split(mpi_comm,icolor,ikey,new_comm,ierror) + + return + end + + + subroutine mpi_comm_free(mpi_comm,ierror) + + return + end + + +c ------------------- +c Added routines for data copying +c ------------------- + + subroutine mpi_copy_integer(data1,data2,n) + integer data1(*),data2(*) + + do i = 1,n + data2(i) = data1(i) + enddo + + return + end + + + subroutine mpi_copy_real(data1,data2,n) + real data1(*),data2(*) + + do i = 1,n + data2(i) = data1(i) + enddo + + return + end + + + subroutine mpi_copy_double_precision(data1,data2,n) + double precision data1(*),data2(*) + + do i = 1,n + data2(i) = data1(i) + enddo + + return + end + + subroutine mpi_cart_coords(mpi_comm, rank, maxdims, coords, ierr) + integer coords(*) + + return + end + + subroutine mpi_scatterv(globbuf, counts, displs, gettype, + $ field, my_count, sendtype, root, comm, ierr) + return + end + + subroutine mpi_group_incl(group,n,ranks,newgroup,ierror) + return + end + +c----------------------------- +c Add file IO routines - which are littly supported +c----------------------------- + subroutine mpi_file_open(comm, filename, amode, info, fh, ierr) + character(*) filename + integer comm, amode, info, fh + integer ierr=0 + + print *, "MPI STUB - file open ignored " + + return + end + + subroutine mpi_file_read_at(fh, offset, buf, count, dtype, status, + $ ierr) + integer ierr + + print *, "MPI STUB - mpi_file_read_at not supported" + ierr = 255 + + return + end + + subroutine mpi_file_write_at(fh, offset, buf, count, dtype, status, + & ierr) + include "mpif.h" + + integer fh, count, dtype, status + integer ierr=0 + + ! This is from bacio - and count is expected as 4 byte quantity + ! We ignore count as this should be serial and one big fat write + ! operation + print *, "MPI STUB - file write on ", FH + print *, " byte count assumed to be 4 byte relative" + CALL WRYTE(FH, COUNT, BUF) + + return + end + + subroutine mpi_file_close(fh, ierr) + integer ierr=0 + return + end diff --git a/sorc/comlibs/wrfmpi_stubs/mpif.h b/sorc/comlibs/wrfmpi_stubs/mpif.h new file mode 100644 index 000000000..069b43404 --- /dev/null +++ b/sorc/comlibs/wrfmpi_stubs/mpif.h @@ -0,0 +1,250 @@ +! +! +! (C) 1993 by Argonne National Laboratory and Mississipi State University. +! All rights reserved. See COPYRIGHT in top-level directory. +! +! +! user include file for MPI programs, with no dependencies +! +! It really is not possible to make a perfect include file that can +! be used by both F77 and F90 compilers, but this is close. We have removed +! continuation lines (allows free form input in F90); systems whose +! Fortran compilers support ! instead of just C or * for comments can +! globally replace a C in the first column with !; the resulting file +! should work for both Fortran 77 and Fortran 90. +! +! If your Fortran compiler supports ! for comments, you can run this +! through sed with +! sed -e 's/^C/\!/g' +! +! We have also removed the use of contractions (involving the single quote) +! character because some users use .F instead of .f files (to invoke the +! cpp preprocessor) and further, their preprocessor is determined to find +! matching single quote pairs (and probably double quotes; given the +! different rules in C and Fortran, this sounds like a disaster). Rather than +! take the position that the poor users should get a better system, we +! have removed the text that caused problems. Of course, the users SHOULD +! get a better system... +! +! return codes + INTEGER MPI_SUCCESS,MPI_ERR_BUFFER,MPI_ERR_COUNT,MPI_ERR_TYPE + INTEGER MPI_ERR_TAG,MPI_ERR_COMM,MPI_ERR_RANK,MPI_ERR_ROOT + INTEGER MPI_ERR_GROUP + INTEGER MPI_ERR_OP,MPI_ERR_TOPOLOGY,MPI_ERR_DIMS,MPI_ERR_ARG + INTEGER MPI_ERR_UNKNOWN,MPI_ERR_TRUNCATE,MPI_ERR_OTHER + INTEGER MPI_ERR_INTERN,MPI_ERR_IN_STATUS,MPI_ERR_PENDING + INTEGER MPI_ERR_REQUEST, MPI_ERR_LASTCODE + PARAMETER (MPI_SUCCESS=0,MPI_ERR_BUFFER=1,MPI_ERR_COUNT=2) + PARAMETER (MPI_ERR_TYPE=3,MPI_ERR_TAG=4,MPI_ERR_COMM=5) + PARAMETER (MPI_ERR_RANK=6,MPI_ERR_ROOT=7,MPI_ERR_GROUP=8) + PARAMETER (MPI_ERR_OP=9,MPI_ERR_TOPOLOGY=10,MPI_ERR_DIMS=11) + PARAMETER (MPI_ERR_ARG=12,MPI_ERR_UNKNOWN=13) + PARAMETER (MPI_ERR_TRUNCATE=14,MPI_ERR_OTHER=15) + PARAMETER (MPI_ERR_INTERN=16,MPI_ERR_IN_STATUS=17) + PARAMETER (MPI_ERR_PENDING=18,MPI_ERR_REQUEST=19) + PARAMETER (MPI_ERR_LASTCODE=1073741823) +! + INTEGER MPI_UNDEFINED + parameter (MPI_UNDEFINED = (-32766)) +! + INTEGER MPI_GRAPH, MPI_CART + PARAMETER (MPI_GRAPH = 1, MPI_CART = 2) + INTEGER MPI_PROC_NULL + PARAMETER ( MPI_PROC_NULL = (-1) ) +! + INTEGER MPI_BSEND_OVERHEAD + PARAMETER ( MPI_BSEND_OVERHEAD = 512 ) + + INTEGER MPI_SOURCE, MPI_TAG, MPI_ERROR + PARAMETER(MPI_SOURCE=2, MPI_TAG=3, MPI_ERROR=4) + INTEGER MPI_STATUS_SIZE + PARAMETER (MPI_STATUS_SIZE=4) + INTEGER MPI_MAX_PROCESSOR_NAME, MPI_MAX_ERROR_STRING + PARAMETER (MPI_MAX_PROCESSOR_NAME=256) + PARAMETER (MPI_MAX_ERROR_STRING=512) + INTEGER MPI_MAX_NAME_STRING + PARAMETER (MPI_MAX_NAME_STRING=63) +! + INTEGER MPI_COMM_NULL + PARAMETER (MPI_COMM_NULL=0) +! + INTEGER MPI_DATATYPE_NULL + PARAMETER (MPI_DATATYPE_NULL = 0) + + INTEGER MPI_ERRHANDLER_NULL + PARAMETER (MPI_ERRHANDLER_NULL = 0) + + INTEGER MPI_GROUP_NULL + PARAMETER (MPI_GROUP_NULL = 0) + + INTEGER MPI_KEYVAL_INVALID + PARAMETER (MPI_KEYVAL_INVALID = 0) + + INTEGER MPI_REQUEST_NULL + PARAMETER (MPI_REQUEST_NULL = 0) +! + INTEGER MPI_IDENT, MPI_CONGRUENT, MPI_SIMILAR, MPI_UNEQUAL + PARAMETER (MPI_IDENT=0, MPI_CONGRUENT=1, MPI_SIMILAR=2) + PARAMETER (MPI_UNEQUAL=3) +! +! MPI_BOTTOM needs to be a known address; here we put it at the +! beginning of the common block. The point-to-point and collective +! routines know about MPI_BOTTOM, but MPI_TYPE_STRUCT as yet does not. +! +! MPI_STATUS_IGNORE and MPI_STATUSES_IGNORE are similar objects +! Until the underlying MPI library implements the C version of these +! (a null pointer), these are declared as arrays of MPI_STATUS_SIZE +! +! The types MPI_INTEGER1,2,4 and MPI_REAL4,8 are OPTIONAL. +! Their values are zero if they are not available. Note that +! using these reduces the portability of code (though may enhance +! portability between Crays and other systems) +! + INTEGER MPI_TAG_UB, MPI_HOST, MPI_IO + INTEGER MPI_BOTTOM + INTEGER MPI_STATUS_IGNORE(MPI_STATUS_SIZE) + INTEGER MPI_STATUSES_IGNORE(MPI_STATUS_SIZE) + INTEGER MPI_INTEGER, MPI_REAL, MPI_DOUBLE_PRECISION + INTEGER MPI_COMPLEX, MPI_DOUBLE_COMPLEX,MPI_LOGICAL + INTEGER MPI_CHARACTER, MPI_BYTE, MPI_2INTEGER, MPI_2REAL + INTEGER MPI_2DOUBLE_PRECISION, MPI_2COMPLEX, MPI_2DOUBLE_COMPLEX + INTEGER MPI_UB, MPI_LB + INTEGER MPI_PACKED, MPI_WTIME_IS_GLOBAL + INTEGER MPI_COMM_WORLD, MPI_COMM_SELF, MPI_GROUP_EMPTY + INTEGER MPI_SUM, MPI_MAX, MPI_MIN, MPI_PROD, MPI_LAND, MPI_BAND + INTEGER MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR, MPI_MINLOC + INTEGER MPI_MAXLOC + INTEGER MPI_OP_NULL + INTEGER MPI_ERRORS_ARE_FATAL, MPI_ERRORS_RETURN +! + PARAMETER (MPI_ERRORS_ARE_FATAL=119) + PARAMETER (MPI_ERRORS_RETURN=120) +! + PARAMETER (MPI_COMPLEX=23,MPI_DOUBLE_COMPLEX=24,MPI_LOGICAL=25) + PARAMETER (MPI_REAL=26,MPI_DOUBLE_PRECISION=27,MPI_INTEGER=28) + PARAMETER (MPI_2INTEGER=29,MPI_2COMPLEX=30,MPI_2DOUBLE_COMPLEX=31) + PARAMETER (MPI_2REAL=32,MPI_2DOUBLE_PRECISION=33,MPI_CHARACTER=1) + PARAMETER (MPI_BYTE=3,MPI_UB=16,MPI_LB=15,MPI_PACKED=14) + + INTEGER MPI_ORDER_C, MPI_ORDER_FORTRAN + PARAMETER (MPI_ORDER_C=56, MPI_ORDER_FORTRAN=57) + INTEGER MPI_DISTRIBUTE_BLOCK, MPI_DISTRIBUTE_CYCLIC + INTEGER MPI_DISTRIBUTE_NONE, MPI_DISTRIBUTE_DFLT_DARG + PARAMETER (MPI_DISTRIBUTE_BLOCK=121, MPI_DISTRIBUTE_CYCLIC=122) + PARAMETER (MPI_DISTRIBUTE_NONE=123) + PARAMETER (MPI_DISTRIBUTE_DFLT_DARG=-49767) + INTEGER MPI_MAX_INFO_KEY, MPI_MAX_INFO_VAL + PARAMETER (MPI_MAX_INFO_KEY=255, MPI_MAX_INFO_VAL=1024) + INTEGER MPI_INFO_NULL + PARAMETER (MPI_INFO_NULL=0) + +! +! Optional Fortran Types. Configure attempts to determine these. +! + INTEGER MPI_INTEGER1, MPI_INTEGER2, MPI_INTEGER4, MPI_INTEGER8 + INTEGER MPI_INTEGER16 + INTEGER MPI_REAL4, MPI_REAL8, MPI_REAL16 + INTEGER MPI_COMPLEX8, MPI_COMPLEX16, MPI_COMPLEX32 + PARAMETER (MPI_INTEGER1=1,MPI_INTEGER2=4) + PARAMETER (MPI_INTEGER4=6) + PARAMETER (MPI_INTEGER8=13) + PARAMETER (MPI_INTEGER16=0) + PARAMETER (MPI_REAL4=10) + PARAMETER (MPI_REAL8=11) + PARAMETER (MPI_REAL16=0) + PARAMETER (MPI_COMPLEX8=23) + PARAMETER (MPI_COMPLEX16=24) + PARAMETER (MPI_COMPLEX32=0) +! +! This is now handled with either the "pointer" extension or this same +! code, appended at the end. +! COMMON /MPIPRIV/ MPI_BOTTOM,MPI_STATUS_IGNORE,MPI_STATUSES_IGNORE +!C +!C Without this save, some Fortran implementations may make the common +!C dynamic! +!C +!C For a Fortran90 module, we might replace /MPIPRIV/ with a simple +!C SAVE MPI_BOTTOM +!C +! SAVE /MPIPRIV/ +! + PARAMETER (MPI_MAX=100,MPI_MIN=101,MPI_SUM=102,MPI_PROD=103) + PARAMETER (MPI_LAND=104,MPI_BAND=105,MPI_LOR=106,MPI_BOR=107) + PARAMETER (MPI_LXOR=108,MPI_BXOR=109,MPI_MINLOC=110) + PARAMETER (MPI_MAXLOC=111, MPI_OP_NULL=0) +! + PARAMETER (MPI_GROUP_EMPTY=90,MPI_COMM_WORLD=91,MPI_COMM_SELF=92) + PARAMETER (MPI_TAG_UB=80,MPI_HOST=82,MPI_IO=84) + PARAMETER (MPI_WTIME_IS_GLOBAL=86) +! + INTEGER MPI_ANY_SOURCE + PARAMETER (MPI_ANY_SOURCE = (-2)) + INTEGER MPI_ANY_TAG + PARAMETER (MPI_ANY_TAG = (-1)) +! + INTEGER MPI_VERSION, MPI_SUBVERSION + PARAMETER (MPI_VERSION = 1, MPI_SUBVERSION = 2) +! +! There are additional MPI-2 constants + INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND + PARAMETER (MPI_ADDRESS_KIND=4) + PARAMETER (MPI_OFFSET_KIND=8) +! +! All other MPI routines are subroutines +! This may cause some Fortran compilers to complain about defined and +! not used. Such compilers should be improved. +! +! Some Fortran compilers will not link programs that contain +! external statements to routines that are not provided, even if +! the routine is never called. Remove PMPI_WTIME and PMPI_WTICK +! if you have trouble with them. +! +! DOUBLE PRECISION MPI_WTIME, MPI_WTICK,PMPI_WTIME,PMPI_WTICK +! EXTERNAL MPI_WTIME, MPI_WTICK,PMPI_WTIME,PMPI_WTICK +! +! The attribute copy/delete subroutines are symbols that can be passed +! to MPI routines +! +! EXTERNAL MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN, MPI_DUP_FN +! COMMON /MPIPRIV/ MPI_BOTTOM,MPI_STATUS_IGNORE,MPI_STATUSES_IGNORE +! +! Without this save, some Fortran implementations may make the common +! dynamic! +! +! For a Fortran90 module, we might replace /MPIPRIV/ with a simple +! SAVE MPI_BOTTOM +! +! SAVE /MPIPRIV/ +! +! $Id: mpiof.h.in,v 1.3 1999/08/06 18:33:09 thakur Exp $ +! +! Copyright (C) 1997 University of Chicago. +! See COPYRIGHT notice in top-level directory. +! +! +! user include file for Fortran MPI-IO programs +! + INTEGER MPI_MODE_RDONLY, MPI_MODE_RDWR, MPI_MODE_WRONLY + INTEGER MPI_MODE_DELETE_ON_CLOSE, MPI_MODE_UNIQUE_OPEN + INTEGER MPI_MODE_CREATE, MPI_MODE_EXCL + INTEGER MPI_MODE_APPEND, MPI_MODE_SEQUENTIAL + PARAMETER (MPI_MODE_RDONLY=2, MPI_MODE_RDWR=8, MPI_MODE_WRONLY=4) + PARAMETER (MPI_MODE_CREATE=1, MPI_MODE_DELETE_ON_CLOSE=16) + PARAMETER (MPI_MODE_UNIQUE_OPEN=32, MPI_MODE_EXCL=64) + PARAMETER (MPI_MODE_APPEND=128, MPI_MODE_SEQUENTIAL=256) +! + INTEGER MPI_FILE_NULL + PARAMETER (MPI_FILE_NULL=0) +! + INTEGER MPI_MAX_DATAREP_STRING + PARAMETER (MPI_MAX_DATAREP_STRING=128) +! + INTEGER MPI_SEEK_SET, MPI_SEEK_CUR, MPI_SEEK_END + PARAMETER (MPI_SEEK_SET=600, MPI_SEEK_CUR=602, MPI_SEEK_END=604) +! + INTEGER MPIO_REQUEST_NULL + PARAMETER (MPIO_REQUEST_NULL=0) +! + integer*8 MPI_DISPLACEMENT_CURRENT + PARAMETER (MPI_DISPLACEMENT_CURRENT=-54278278) + diff --git a/sorc/comlibs/xml/make_xmlreadf90 b/sorc/comlibs/xml/make_xmlreadf90 new file mode 100644 index 000000000..5f1170152 --- /dev/null +++ b/sorc/comlibs/xml/make_xmlreadf90 @@ -0,0 +1,26 @@ +#!/bin/sh +# +# This makefile is used at NCEP/EMC to build the post_t.f90 file +# based on the post_t.xml. The post_t.f90 file is part of the +# unipost source code. It is unlikely a community user will +# need to utilize this routine + +echo post_t > xmlreader.inp +xmlreader +cp post_t.f90 .. + +echo "created and installed post_t.f90" + +exit 0 + +echo postcntrl_t > xmlreader.inp +xmlreader + +echo "created postcntrl_t.f90" + +echo postavblfld_t > xmlreader.inp +xmlreader + +echo "created postavblfld_t.f90" + +exit 0 diff --git a/sorc/comlibs/xml/makefile b/sorc/comlibs/xml/makefile new file mode 100644 index 000000000..2ceb7dd26 --- /dev/null +++ b/sorc/comlibs/xml/makefile @@ -0,0 +1,45 @@ +# +# for the XML-Fortran modules and parsing library +SHELL = /bin/sh -x +LIB = libxmlparse.a +PGM = xmlreader + +# +#configuration file contains architecture and compile information +include ../../../configure.upp + +# +# extra flags +EXTRA_CPPFLAGS = +EXTRA_FFLAGS = -c -O2 +EXTRA_CFLAGS = -c +EXTRA_ARFLAGS = + +all : $(LIB) + +# +# PGM xmlreader is a program which creates the template file for +# post to build with - not created or used for building community post +$(PGM) : xmlreader.o $(LIB) + $(FC) -o $(PGM) xmlreader.o $(LIB) + +$(LIB) : xmlparse.o read_xml_prims.o + $(AR) $(ARFLAGS) $@ $? + $(CP) *.mod $(INCMOD) + $(CP) $(LIB) $(LIBDIR) + +clean: + @for f in `ls *.mod` ; do \ + $(RM) $$f ; $(RM) $(INCMOD)/$$f ; \ + done + $(RM) *.o + $(RM) *.mod + $(RM) *.a + $(RM) $(LIBDIR)/$(LIB) + $(RM) $(PGM) + +.f90.o: + $(FC) $(FFLAGS) $(EXTRA_FFLAGS) $< + +#-------------Dependencies------------------------------------ +read_xml_prims.o : read_xml_array.inc read_xml_scalar.inc read_from_buffer.inc diff --git a/sorc/comlibs/xml/post_t.xml b/sorc/comlibs/xml/post_t.xml new file mode 100644 index 000000000..aafe8519c --- /dev/null +++ b/sorc/comlibs/xml/post_t.xml @@ -0,0 +1,62 @@ + + diff --git a/sorc/comlibs/xml/read_from_buffer.inc b/sorc/comlibs/xml/read_from_buffer.inc new file mode 100755 index 000000000..0cb6ee959 --- /dev/null +++ b/sorc/comlibs/xml/read_from_buffer.inc @@ -0,0 +1,79 @@ +! Part of XML-Fortran library: +! +! $Id: read_from_buffer.inc,v 1.2 2006/03/26 19:05:48 arjenmarkus Exp $ +! + character(len=*), intent(in) :: buffer + integer, intent(inout) :: ierror + + integer :: n + integer :: i + integer :: step + integer :: ierr + ! + ! First allocate an array that is surely large enough + ! Note: + ! This is not completely failsafe: with list-directed + ! input you can also use repeat counts (10000*1.0 for + ! instance). + ! + allocate( work(len(buffer)/2+1) ) + + ! + ! NOTE: + ! This is not portable!! + ! + ! read( buffer, *, iostat = ierror ) (work(n), n=1,size(work)) + ! + ! So, use a different strategy: a binary search + ! First: establish that we have at least one item to read + ! Second: do the binary search + ! +! read( buffer, *, iostat = ierr ) work(1) +! if ( ierr /= 0 ) then +! n = 0 +! else + n = 1 + do while ( n <= size(work) ) + n = 2 * n + enddo + n = n / 2 + step = n / 2 +! step = n / 2 + + do while ( step > 0 ) + read( buffer, *, iostat = ierr ) (work(i), i = 1,n) + if ( ierr /= 0 ) then + ierror = ierr ! Store the error code for later use + n = n - step + else + n = n + step + endif + step = step / 2 + enddo +! endif + + ! + ! Then allocate an array of the actual size needed + ! and copy the data + ! + ! + if ( associated( var ) ) then + deallocate( var ) + endif + ! + ! One complication: we may have one too many + ! (consequence of the binary search) + ! + read( buffer, *, iostat = ierr ) (work(i), i = 1,n) + if ( ierr < 0 ) then + n = n - 1 + endif + + allocate( var(n) ) + var(1:n) = work(1:n) + deallocate( work ) + + if ( ierror .lt. 0 ) then + ierror = 0 + endif + diff --git a/sorc/comlibs/xml/read_xml_array.inc b/sorc/comlibs/xml/read_xml_array.inc new file mode 100755 index 000000000..a88086e74 --- /dev/null +++ b/sorc/comlibs/xml/read_xml_array.inc @@ -0,0 +1,54 @@ +! Part of XML-Fortran library: +! +! $Id: read_xml_array.inc,v 1.3 2007/02/26 20:33:38 arjenmarkus Exp $ +! + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + logical, intent(inout) :: endtag + character(len=*), dimension(:,:), intent(in) :: attribs + integer, intent(in) :: noattribs + character(len=*), dimension(:), intent(in) :: data + integer, intent(in) :: nodata + logical, intent(inout) :: has_var + + character(len=len(attribs(1,1))) :: buffer + integer :: idx + integer :: ierr + + ! + ! The big trick: + ! A string long enough to hold all data strings + ! + character(len=nodata*(len(data(1))+1)) :: bufferd + integer :: start + + ! + ! The value can be stored in an attribute values="..." or in + ! the data + ! + has_var = .false. + idx = xml_find_attrib( attribs, noattribs, 'values', buffer ) + if ( idx .gt. 0 ) then + call read_from_buffer( buffer, var, ierr ) + if ( buffer .ne. ' ' ) then + has_var = .true. + endif + else + bufferd = ' ' + start = 1 + do idx = 1,nodata + if ( data(idx) .ne. ' ' ) then + bufferd(start:) = data(idx) + start = start + len(data(idx)) + 1 + endif + enddo + call read_from_buffer( bufferd, var, ierr ) + if ( bufferd .ne. ' ' ) then + has_var = .true. + endif + endif + + if ( ierr .ne. 0 ) then + write(*,*) 'Error reading variable - tag = ', trim(tag) + has_var = .false. + endif diff --git a/sorc/comlibs/xml/read_xml_prims.f90 b/sorc/comlibs/xml/read_xml_prims.f90 new file mode 100755 index 000000000..80975c054 --- /dev/null +++ b/sorc/comlibs/xml/read_xml_prims.f90 @@ -0,0 +1,359 @@ +! read_xml_prims.f90 - Read routines for primitive data +! +! $Id: read_xml_prims.f90,v 1.5 2007/02/26 20:33:38 arjenmarkus Exp $ +! +! Arjen Markus +! +! General information: +! This module is part of the XML-Fortran library. Its +! purpose is to help read individual items from an XML +! file into the variables that have been connected to +! the various tags. It is used by the code generated +! by the make_xml_reader program. +! +! Because the routines differ mostly by the type of the +! output variable, the body is included, to prevent +! too much repeated blocks of code with all the maintenance +! issues that causes. +! +! Program log: +! Feb 2011 Jun Wang adopted from xml parser to read xml file +! +! +module read_xml_primitives + use xmlparse + implicit none + + private :: read_from_buffer + private :: read_from_buffer_integers + private :: read_from_buffer_reals + private :: read_from_buffer_doubles + private :: read_from_buffer_logicals + private :: read_from_buffer_words + + interface read_from_buffer + module procedure read_from_buffer_integers + module procedure read_from_buffer_reals + module procedure read_from_buffer_doubles + module procedure read_from_buffer_logicals + module procedure read_from_buffer_words + end interface + +contains + +! skip_until_endtag -- +! Routine to read the XML file until the end tag is encountered +! +! Arguments: +! info The XML file data structure +! tag The tag in question +! attribs Array of attributes and their values +! data Array of strings, representing the data +! error Has an error occurred? +! +subroutine skip_until_endtag( info, tag, attribs, data, error ) + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + character(len=*), dimension(:,:), intent(inout) :: attribs + character(len=*), dimension(:), intent(inout) :: data + logical, intent(out) :: error + + integer :: noattribs + integer :: nodata + integer :: ierr + logical :: endtag + character(len=len(tag)) :: newtag + + error = .true. + do + call xml_get( info, newtag, endtag, attribs, noattribs, & + data, nodata ) + if ( xml_error(info) ) then + error = .true. + exit + endif + if ( endtag .and. newtag .eq. tag ) then + exit + endif + enddo +end subroutine skip_until_endtag + +! read_xml_integer -- +! Routine to read a single integer from the parsed data +! +! Arguments: +! info XML parser structure +! tag The tag in question (error message only) +! endtag End tag found? (Dummy argument, actually) +! attribs Array of attributes and their values +! noattribs Number of attributes found +! data Array of strings, representing the data +! nodata Number of data strings +! var Variable to be filled +! has_var Has the variable been set? +! +subroutine read_xml_integer( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + integer, intent(inout) :: var + + include 'read_xml_scalar.inc' + +end subroutine read_xml_integer + +! read_xml_line -- +! Routine to read a single line of text from the parsed data +! +! Arguments: +! info XML parser structure +! tag The tag in question (error message only) +! endtag End tag found? (Dummy argument, actually) +! attribs Array of attributes and their values +! noattribs Number of attributes found +! data Array of strings, representing the data +! nodata Number of data strings +! var Variable to be filled +! has_var Has the variable been set? +! +subroutine read_xml_line( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + logical, intent(inout) :: endtag + character(len=*), dimension(:,:), intent(in) :: attribs + integer, intent(in) :: noattribs + character(len=*), dimension(:), intent(in) :: data + integer, intent(in) :: nodata + character(len=*), intent(inout) :: var + logical, intent(inout) :: has_var + + character(len=len(attribs(1,1))) :: buffer + integer :: idx + integer :: ierr + + ! + ! The value can be stored in an attribute value="..." or in + ! the data + ! + has_var = .false. + idx = xml_find_attrib( attribs, noattribs, 'value', buffer ) + if ( idx .gt. 0 ) then + var = buffer + has_var = .true. + else + do idx = 1,nodata + if ( data(idx) .ne. ' ' ) then + var = data(idx) + has_var = .true. + exit + endif + enddo + endif +end subroutine read_xml_line + +! read_xml_real, ... -- +! See read_xml_integer for an explanation +! +subroutine read_xml_real( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + real, intent(inout) :: var + + include 'read_xml_scalar.inc' + +end subroutine read_xml_real + +subroutine read_xml_double( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + real(kind=kind(1.0d00)), intent(inout) :: var + + include 'read_xml_scalar.inc' + +end subroutine read_xml_double + +subroutine read_xml_logical( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + logical, intent(inout) :: var + + include 'read_xml_scalar.inc' + +end subroutine read_xml_logical + +subroutine read_xml_word( info, tag, endtag, attribs, noattribs, data, nodata, & + var, has_var ) + character(len=*), intent(inout) :: var + + include 'read_xml_scalar.inc' + +end subroutine read_xml_word + +! read_xml_integer_array -- +! Routine to read a one-dimensional integer array from the parsed +! ata +! +! Arguments: +! info XML parser structure +! tag The tag in question (error message only) +! endtag End tag found? (Dummy argument, actually) +! attribs Array of attributes and their values +! noattribs Number of attributes found +! data Array of strings, representing the data +! nodata Number of data strings +! var Variable to be filled +! has_var Has the variable been set? +! +subroutine read_xml_integer_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + integer, dimension(:), pointer :: var + + include 'read_xml_array.inc' + +end subroutine read_xml_integer_array + +! read_xml_line_array -- +! Routine to read an array of lines of text from the parsed data +! +! Arguments: +! info XML parser structure +! tag The tag in question (error message only) +! attribs Array of attributes and their values +! noattribs Number of attributes found +! data Array of strings, representing the data +! nodata Number of data strings +! var Variable to be filled +! has_var Has the variable been set? +! +subroutine read_xml_line_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + logical, intent(inout) :: endtag + character(len=*), dimension(:,:), intent(in) :: attribs + integer, intent(in) :: noattribs + character(len=*), dimension(:), intent(in) :: data + integer, intent(in) :: nodata + character(len=*), dimension(:), pointer :: var + logical, intent(inout) :: has_var + + character(len=len(attribs(1,1))) :: buffer + integer :: idx + integer :: idxv + integer :: ierr + logical :: started + + ! + ! The value can be stored in an attribute values="..." or in + ! the data + ! + has_var = .false. + idx = xml_find_attrib( attribs, noattribs, 'values', buffer ) + if ( idx .gt. 0 ) then + allocate( var(1:1) ) + var(1) = buffer + if ( buffer .ne. ' ' ) then + has_var = .true. + endif + else + idxv = 0 + started = .false. + do idx = 1,nodata + if ( data(idx) .ne. ' ' .or. started ) then + if ( .not. started ) then + allocate( var(1:nodata-idx+1) ) + started = .true. + endif + idxv = idxv + 1 + var(idxv) = data(idx) + endif + enddo + if ( started ) then + has_var = .true. + endif + endif +end subroutine read_xml_line_array + +! read_xml_real_array, ... -- +! See read_xml_integer_array for an explanation +! +subroutine read_xml_real_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + real, dimension(:), pointer :: var + + include 'read_xml_array.inc' + +end subroutine read_xml_real_array + +subroutine read_xml_double_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + real(kind=kind(1.0d00)), dimension(:), pointer :: var + + include 'read_xml_array.inc' + +end subroutine read_xml_double_array + +subroutine read_xml_logical_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + logical, dimension(:), pointer :: var + + include 'read_xml_array.inc' + +end subroutine read_xml_logical_array + +subroutine read_xml_word_array( info, tag, endtag, attribs, noattribs, data, & + nodata, var, has_var ) + character(len=*), dimension(:), pointer :: var + + include 'read_xml_array.inc' + +end subroutine read_xml_word_array + +! read_from_buffer_integers -- +! Routine to read all integers from a long string +! +! Arguments: +! buffer String containing the data +! var Variable to be filled +! ierror Error flag +! +subroutine read_from_buffer_integers( buffer, var, ierror ) + integer, dimension(:), pointer :: var + integer, dimension(:), pointer :: work + + include 'read_from_buffer.inc' + +end subroutine read_from_buffer_integers + +! read_xml_from_buffer_reals, ... - +! See read_xml_from_buffer_integers for an explanation +! +subroutine read_from_buffer_reals( buffer, var, ierror ) + real, dimension(:), pointer :: var + real, dimension(:), pointer :: work + + include 'read_from_buffer.inc' + +end subroutine read_from_buffer_reals + +subroutine read_from_buffer_doubles( buffer, var, ierror ) + real(kind=kind(1.0d00)), dimension(:), pointer :: var + real(kind=kind(1.0d00)), dimension(:), pointer :: work + + include 'read_from_buffer.inc' + +end subroutine read_from_buffer_doubles + +subroutine read_from_buffer_logicals( buffer, var, ierror ) + logical, dimension(:), pointer :: var + logical, dimension(:), pointer :: work + + include 'read_from_buffer.inc' + +end subroutine read_from_buffer_logicals + +subroutine read_from_buffer_words( buffer, var, ierror ) + character(len=*), dimension(:), pointer :: var + character(len=len(var)), dimension(:), pointer :: work + + include 'read_from_buffer.inc' + +end subroutine read_from_buffer_words + +end module read_xml_primitives diff --git a/sorc/comlibs/xml/read_xml_scalar.inc b/sorc/comlibs/xml/read_xml_scalar.inc new file mode 100755 index 000000000..b28ba3c7a --- /dev/null +++ b/sorc/comlibs/xml/read_xml_scalar.inc @@ -0,0 +1,40 @@ +! Part of XML-Fortran library: +! +! $Id: read_xml_scalar.inc,v 1.3 2007/02/26 20:33:38 arjenmarkus Exp $ +! + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + logical, intent(inout) :: endtag + character(len=*), dimension(:,:), intent(in) :: attribs + integer, intent(in) :: noattribs + character(len=*), dimension(:), intent(in) :: data + integer, intent(in) :: nodata + logical, intent(inout) :: has_var + + character(len=len(attribs(1,1))) :: buffer + integer :: idx + integer :: ierr + + ! + ! The value can be stored in an attribute value="..." or in + ! the data + ! + has_var = .false. + idx = xml_find_attrib( attribs, noattribs, 'value', buffer ) + if ( idx .gt. 0 ) then + read( buffer, *, iostat=ierr ) var + has_var = .true. + else + do idx = 1,nodata + if ( data(idx) .ne. ' ' ) then + read( data(idx), *, iostat=ierr ) var + has_var = .true. + exit + endif + enddo + endif + + if ( ierr .ne. 0 ) then + write(*,*) 'Error reading variable - tag = ', trim(tag) + has_var = .false. + endif diff --git a/sorc/comlibs/xml/xmlparse.f90 b/sorc/comlibs/xml/xmlparse.f90 new file mode 100755 index 000000000..0c194bf8c --- /dev/null +++ b/sorc/comlibs/xml/xmlparse.f90 @@ -0,0 +1,1019 @@ +! xmlparse.f90 - Simple, limited XML parser in Fortran +! +! $Id: xmlparse.f90,v 1.13 2007/04/03 19:23:20 arjenmarkus Exp $ +! +! Arjen Markus +! +! General information: +! The module reads XML files by: +! - Identifying the tag and all attributes and data belonging +! to the tag. +! - Returning to the calling subprogram to let it take care of +! the tag, attributes and data. +! - If the tag is actually an ending tag, then this is flagged +! too. +! - Handling all the data is left to the calling subprogram, +! the module merely facilitates in the parsing. +! +! Note: +! The module in its current version has a number of limitations: +! - It does not handle escape sequences (like >. to signify +! a ">" sign) +! - It does not handle tags with attributes that are spread +! over more than one line +! - The maximum length of a line is 1000 characters +! - It may report too many lines of data (empty lines) +! - No DOM support nor support for an object tree +! - It is probably not very robust in detecting malformed XML files +! +! Some questions: +! - What to do with leading blanks? +! +! Update - several ideas: +! - Introduce at least two options (via xml_options): +! - ignore_whitespace - remove leading blanks and leading and trailing +! empty lines from the PCDATA +! - no_data_truncation - consider truncation of data (more +! attributes or lines of character data than +! can be stored) a read error +! - Introduce convenience functions and subroutines: +! - xml_ok() - all is well, reading can continue +! - xml_data_trunc() - was there truncation of the data? +! - xml_find_attrib() - find an attribute by name +! +! Program log: +! Feb 2011 Jun Wang adopted from xml parser to read xml file +! Jan 2012 Jun Wang set initial value for primitive data type +! +module xmlparse + + implicit none + + integer, parameter :: XML_BUFFER_LENGTH = 1000 + ! + ! Define the data type that holds the parser information + ! + type XML_PARSE + integer :: lun ! LU-number of the XML-file + integer :: level ! Indentation level (output) + integer :: lineno ! Line in file + logical :: ignore_whitespace ! Ignore leading blanks etc. + logical :: no_data_truncation ! Do not allow data truncation + logical :: too_many_attribs ! More attributes than could be stored? + logical :: too_many_data ! More lines of data than could be stored? + logical :: eof ! End of file? + logical :: error ! Invalid XML file or other error? + character(len=XML_BUFFER_LENGTH) :: line ! Buffer + end type XML_PARSE + + ! + ! Global options + ! + integer, parameter :: XML_STDOUT = -1 +! integer, private :: report_lun_ = XML_STDOUT + integer, private :: report_lun_ = 600 + logical, private :: report_errors_ = .false. + logical, private :: report_details_ = .false. + + ! + ! Global data (the ampersand must come first) + ! + character(len=10), dimension(2,3), save, private :: entities = & + reshape( (/ '& ', '&', & + '> ', '> ', & + '< ', '< ' /), (/2,3/) ) + + ! + ! Auxiliary routines - private + + private :: xml_compress_ + private :: xml_put_open_tag_ + private :: xml_put_element_ + private :: xml_put_close_tag_ + private :: xml_replace_entities_ + ! + ! Interfaces to reporting routines + ! + private :: xml_report_details_int_ + private :: xml_report_details_string_ + private :: xml_report_errors_int_ + private :: xml_report_errors_string_ + + interface xml_report_details + module procedure xml_report_details_int_ + module procedure xml_report_details_string_ + end interface + interface xml_report_errors + module procedure xml_report_errors_int_ + module procedure xml_report_errors_string_ + module procedure xml_report_errors_extern_ + end interface + +contains + +! xml_report_details_int_ -- +! Routine to write a text with an integer value +! Arguments: +! text Text to be written +! int Integer value to be added +! +subroutine xml_report_details_int_( text, int ) + character(len=*), intent(in) :: text + integer, intent(in) :: int + + if ( report_details_ ) then + if ( report_lun_ .eq. XML_STDOUT ) then + write(*,*) trim(text), int + else + write(report_lun_,*) trim(text), int + endif + endif +end subroutine xml_report_details_int_ + +! xml_report_details_string_ -- +! Routine to write a text with a string value +! Arguments: +! text Text to be written +! string String to be added +! +subroutine xml_report_details_string_( text, string ) + character(len=*), intent(in) :: text + character(len=*), intent(in) :: string + + if ( report_details_ ) then + if ( report_lun_ .eq. XML_STDOUT ) then + write(*,*) trim(text), ' ', trim(string) + else + write(report_lun_,*) trim(text), ' ', trim(string) + endif + endif +end subroutine xml_report_details_string_ + + +! xml_report_errors_string_ -- +! Routine to write an error message text with an integer value +! Arguments: +! text Text to be written +! int Integer value to be added +! lineno Line number in the file +! +subroutine xml_report_errors_int_( text, int, lineno ) + character(len=*), intent(in) :: text + integer, intent(in) :: int + integer, optional, intent(in) :: lineno + + if ( report_errors_ .or. report_details_ ) then + if ( report_lun_ .eq. XML_STDOUT ) then + write(*,*) trim(text), int + if ( present(lineno) ) then + write(*,*) ' At or near line', lineno + endif + else + write(report_lun_,*) trim(text), int + if ( present(lineno) ) then + write(report_lun_,*) ' At or near line', lineno + endif + endif + endif +end subroutine xml_report_errors_int_ + +! xml_report_errors_string_ -- +! Routine to write an error message text with a string value +! Arguments: +! text Text to be written +! string String to be added +! lineno Line number in the file +! +subroutine xml_report_errors_string_( text, string, lineno ) + character(len=*), intent(in) :: text + character(len=*), intent(in) :: string + integer, optional, intent(in) :: lineno + + if ( report_errors_ .or. report_details_ ) then + if ( report_lun_ .eq. XML_STDOUT ) then + write(*,*) trim(text), ' ', trim(string) + if ( present(lineno) ) then + write(*,*) ' At or near line', lineno + endif + else + write(report_lun_,*) trim(text), ' ', trim(string) + if ( present(lineno) ) then + write(report_lun_,*) ' At or near line', lineno + endif + endif + endif +end subroutine xml_report_errors_string_ + +! xml_report_errors_extern_ -- +! Routine to write an error message text with a string value +! Arguments: +! info Structure holding information on the XML-file +! text Text to be written +! Note: +! This routine is meant for use by routines outside +! this module +! +subroutine xml_report_errors_extern_( info, text ) + type(XML_PARSE), intent(in) :: info + character(len=*), intent(in) :: text + + if ( report_lun_ .eq. XML_STDOUT ) then + write(*,*) trim(text), ' - at or near line', info%lineno + else + write(report_lun_,*) trim(text), ' - at or near line', info%lineno + endif +end subroutine xml_report_errors_extern_ + +! xml_open -- +! Routine to open an XML file for reading or writing +! Arguments: +! info Structure holding information on the XML-file +! fname Name of the file +! mustread The file will be read (.true.) or written (.false.) +! +subroutine xml_open( info, fname, mustread ) + character(len=*), intent(in) :: fname + logical, intent(in) :: mustread + type(XML_PARSE), intent(out) :: info + + integer :: i + integer :: k + integer :: kend + integer :: ierr + logical :: opend + logical :: exists + + info%lun = 10 + info%ignore_whitespace = .false. + info%no_data_truncation = .false. + info%too_many_attribs = .false. + info%too_many_data = .false. + info%eof = .false. + info%error = .false. + info%level = -1 + info%lineno = 0 + + do i = 10,99 + inquire( unit = i, opened = opend ) + if ( .not. opend ) then + info%lun = i + inquire( file = fname, exist = exists ) + if ( .not. exists .and. mustread ) then + call xml_report_errors( 'XML_OPEN: file does not exist:', trim(fname)) + info%lun = -1 + info%error = .true. + else + open( unit = info%lun, file = fname ) + call xml_report_details( 'XML_OPEN: opened file ', trim(fname) ) + call xml_report_details( 'at LU-number: ', info%lun ) + endif + exit + endif + enddo + if ( .not. info%error .and. mustread ) then + k = 1 + do while ( k .ge. 1 ) + read( info%lun, '(a)', iostat = ierr ) info%line + if ( ierr .eq. 0 ) then + info%line = adjustl( info%line ) + k = index( info%line, ' appears on a single line! + ! + if ( k .ge. 1 ) then + kend = index( info%line, '?>' ) + if ( kend .le. 0 ) then + call xml_report_errors( 'XML_OPEN: error reading file with LU-number: ', info%lun ) + call xml_report_errors( 'Line starting with ""', ' ' ) + info%error = .true. + exit + endif + endif + else + call xml_report_errors( 'XML_OPEN: error reading file with LU-number: ', info%lun ) + call xml_report_errors( 'Possibly no line starting with "' + endif +end subroutine xml_open + +! xml_close -- +! Routine to close an XML file +! Arguments: +! info Structure holding information on the XML-file +! +subroutine xml_close( info ) + type(XML_PARSE), intent(inout) :: info + + close( info%lun ) + + ! + ! Only clean up the LU-number, so that the calling program + ! can examine the last condition + ! + call xml_report_details( 'XML_CLOSE: Closing file with LU-number ', info%lun ) + info%lun = -1 +end subroutine xml_close + +! xml_get -- +! Routine to get the next bit of information from an XML file +! Arguments: +! info Structure holding information on the XML-file +! tag Tag that was encountered +! endtag Whether the end of the element was encountered +! attribs List of attribute-value pairs +! no_attribs Number of pairs in the list +! data Lines of character data found +! no_data Number of lines of character data +! +subroutine xml_get( info, tag, endtag, attribs, no_attribs, & + data, no_data ) + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(out) :: tag + logical, intent(out) :: endtag + character(len=*), intent(out), dimension(:,:) :: attribs + integer, intent(out) :: no_attribs + character(len=*), intent(out), dimension(:) :: data + integer, intent(out) :: no_data + + integer :: kspace + integer :: kend + integer :: keq + integer :: kfirst + integer :: ksecond + integer :: idxat + integer :: idxdat + integer :: ierr + logical :: close_bracket + logical :: comment_tag + character(len=XML_BUFFER_LENGTH) :: nextline + + ! + ! Initialise the output + ! + endtag = .false. + no_attribs = 0 + no_data = 0 + + info%too_many_attribs = .false. + info%too_many_data = .false. + + if ( info%lun .lt. 0 ) then + call xml_report_details( 'XML_GET on closed file ', ' ' ) + return + endif + + ! + ! From the previous call or the call to xmlopen we have + ! the line that we need to parse already in memory: + ! + ! + comment_tag = .false. + close_bracket = .false. + kspace = index( info%line, ' ' ) + kend = index( info%line, '>' ) + do while ( kend .le. 0 ) + read( info%lun, '(a)', iostat = ierr ) nextline + info%lineno = info%lineno + 1 + + if ( ierr .eq. 0 ) then + info%line = trim(info%line) // ' ' // adjustl(nextline) + else + info%error = .true. + call xml_report_errors( 'XML_GET - end of tag not found ', & + '(buffer too small?)', info%lineno ) + call xml_close( info ) + return + endif + kend = index( info%line, '>' ) + enddo + if ( kend .gt. kspace ) then + kend = kspace + else + close_bracket = .true. + endif + + ! + ! Check for the end of an ordianry tag and of + ! a comment tag + ! + if ( info%line(1:3) .eq. '-->' ) then + endtag = .true. + tag = info%line(4:kend-1) + else if ( info%line(1:2) .eq. '' ) + if ( keq .gt. kend ) keq = 0 ! Guard against multiple tags + ! with attributes on one line + + ! + ! No attributes any more? + ! + if ( keq .lt. 1 ) then + kend = index( info%line, '/>' ) + if ( kend .ge. 1 ) then + kend = kend + 1 ! To go beyond the ">" character + endtag = .true. + else + kend = index( info%line, '>' ) + if ( kend .lt. 1 ) then + call xml_report_errors( 'XML_GET - wrong ending of tag ', & + trim(info%line), info%lineno ) + info%error = .true. ! Wrong ending of line! + call xml_close( info ) + return + else + close_bracket = .true. + endif + endif + if ( kend .ge. 1 ) then + info%line = adjustl( info%line(kend+1:) ) + endif + exit + endif + + idxat = idxat + 1 + if ( idxat .le. size(attribs,2) ) then + no_attribs = idxat + attribs(1,idxat) = adjustl(info%line(1:keq-1)) ! Use adjustl() to avoid + ! multiple spaces, etc + info%line = adjustl( info%line(keq+1:) ) + + ! + ! We have almost found the start of the attribute's value + ! + kfirst = index( info%line, '"' ) + if ( kfirst .lt. 1 ) then + call xml_report_errors( 'XML_GET - malformed attribute-value pair: ', & + trim(info%line), info%lineno ) + info%error = .true. ! Wrong form of attribute-value pair + call xml_close( info ) + return + endif + + ksecond = index( info%line(kfirst+1:), '"' ) + kfirst + if ( ksecond .lt. 1 ) then + call xml_report_errors( 'XML_GET - malformed attribute-value pair: ', & + trim(info%line), info%lineno ) + info%error = .true. ! Wrong form of attribute-value pair + call xml_close( info ) + return + endif + + attribs(2,idxat) = info%line(kfirst+1:ksecond-1) + info%line = adjustl( info%line(ksecond+1:) ) + endif + + if ( idxat .gt. size(attribs,2) ) then + call xml_report_errors( 'XML_GET - more attributes than could be stored: ', & + trim(info%line), info%lineno ) + info%too_many_attribs = .true. + info%line = ' ' + exit + endif + enddo + + ! + ! Now read the data associated with the current tag + ! - all the way to the next "<" character + ! + ! To do: reduce the number of data lines - empty ones + ! at the end should not count. + ! + do + if ( comment_tag ) then + kend = index( info%line, '-->' ) + else + kend = index( info%line, '<' ) + endif + idxdat = idxdat + 1 + if ( idxdat .le. size(data) ) then + no_data = idxdat + if ( kend .ge. 1 ) then + data(idxdat) = info%line(1:kend-1) + info%line = info%line(kend:) + else + data(idxdat) = info%line + endif + else + call xml_report_errors( 'XML_GET - more data lines than could be stored: ', & + trim(info%line), info%lineno ) + info%too_many_data = .true. + exit + endif + + ! + ! No more data? Otherwise, read on + ! + if ( kend .ge. 1 ) then + exit + else + read( info%lun, '(a)', iostat = ierr ) info%line + info%lineno = info%lineno + 1 + + if ( ierr .lt. 0 ) then + call xml_report_details( 'XML_GET - end of file found - LU-number: ', & + info%lun ) + info%eof = .true. + elseif ( ierr .gt. 0 ) then + call xml_report_errors( 'XML_GET - error reading file with LU-number ', & + info%lun, info%lineno ) + info%error = .true. + endif + if ( ierr .ne. 0 ) then + exit + endif + endif + enddo + + ! + ! Compress the data? + ! + if ( info%ignore_whitespace ) then + call xml_compress_( data, no_data ) + endif + + ! + ! Replace the entities, if any + ! + call xml_replace_entities_( data, no_data ) + + call xml_report_details( 'XML_GET - number of attributes: ', no_attribs ) + call xml_report_details( 'XML_GET - number of data lines: ', no_data ) + +end subroutine xml_get + +! xml_put -- +! Routine to write a tag with the associated data to an XML file +! Arguments: +! info Structure holding information on the XML-file +! tag Tag that was encountered +! endtag Whether the end of the element was encountered +! attribs List of attribute-value pairs +! no_attribs Number of pairs in the list +! data Lines of character data found +! no_data Number of lines of character data +! type Type of action: +! open - just the opening tag with attributes +! elem - complete element +! close - just the closing tag +! +subroutine xml_put(info, tag, attribs, no_attribs, & + data, no_data, type) + + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + character(len=*), intent(in), dimension(:,:) :: attribs + integer, intent(in) :: no_attribs + character(len=*), intent(in), dimension(:) :: data + integer, intent(in) :: no_data + character(len=*) :: type + + integer :: i + + character(len=300), parameter :: indent = ' ' + + select case(type) + case('open') + call xml_put_open_tag_(info, tag, attribs, no_attribs, & + data, no_data) + case('elem') + call xml_put_element_(info, tag, attribs, no_attribs, & + data, no_data) + case('close') + call xml_put_close_tag_(info, tag, attribs, no_attribs, & + data, no_data) + end select + +end subroutine xml_put + +! xml_put_open_tag_ -- +! Routine to write the opening tag with the attributes +! Arguments: +! info Structure holding information on the XML-file +! tag Tag that was encountered +! endtag Whether the end of the element was encountered +! attribs List of attribute-value pairs +! no_attribs Number of pairs in the list +! data Lines of character data found +! no_data Number of lines of character data +! +subroutine xml_put_open_tag_(info, tag, attribs, no_attribs, & + data, no_data) + + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + character(len=*), intent(in), dimension(:,:) :: attribs + integer, intent(in) :: no_attribs + character(len=*), intent(in), dimension(:) :: data + integer, intent(in) :: no_data + + character(len=1) :: aa + integer :: i + + character(len=300), parameter :: indent = ' ' + + write( info%lun, '(3a)', advance = 'no' ) & + indent(1:3*info%level), '<', adjustl(tag) + do i=1,no_attribs + if (attribs(2,i).ne.'') then + write( info%lun, '(5a)', advance = 'no' ) & + ' ',trim(attribs(1,i)),'="', trim(attribs(2,i)),'"' + endif + enddo + write( info%lun, '(a)' ) '>' + info%level = info%level + 1 + +end subroutine xml_put_open_tag_ + +! xml_put_element_ -- +! Routine to write the complete element +! Arguments: +! info Structure holding information on the XML-file +! tag Tag that was encountered +! endtag Whether the end of the element was encountered +! attribs List of attribute-value pairs +! no_attribs Number of pairs in the list +! data Lines of character data found +! no_data Number of lines of character data +! +subroutine xml_put_element_(info, tag, attribs, no_attribs, & + data, no_data) + + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + character(len=*), intent(in), dimension(:,:) :: attribs + integer, intent(in) :: no_attribs + character(len=*), intent(in), dimension(:) :: data + integer, intent(in) :: no_data + + logical :: logic + character(len=1) :: aa + integer :: i, ii + + character(len=300), parameter :: indent = ' ' + + if ( (no_attribs.eq.0 .and. no_data.eq.0) ) then + return + else + logic = .true. + do ii = 1,no_attribs + logic = logic .and. (attribs(2,ii).eq.'') + enddo + do ii = 1,no_data + logic = logic .and. (data(ii).eq.'') + enddo + if ( logic ) then + return + else + write( info%lun, '(3a)', advance = 'no' ) & + indent(1:3*info%level), '<', adjustl(tag) + do i = 1,no_attribs + if (attribs(2,i).ne.'') then + write( info%lun, '(5a)', advance = 'no' ) & + ' ',trim(attribs(1,i)),'="', trim(attribs(2,i)),'"' + endif + enddo + if ( no_attribs.gt.0 .and. no_data.eq.0 ) then + aa='a' + elseif ( (no_attribs.gt.0 .and. no_data.gt.0) .or. & + (no_attribs.eq.0 .and. no_data.gt.0) ) then + aa='b' + else + write(*,*) no_attribs, no_data + endif + endif + endif + + select case(aa) + case('a') + write( info%lun, '(a)' ) '/>' + case('b') + write( info%lun, '(a)',advance='no' ) '>' + write( info%lun, '(2a)', advance='no') & + ( ' ', trim(data(i)), i=1,no_data ) + write( info%lun, '(4a)' ) ' ','' + end select + +end subroutine xml_put_element_ + +! xml_put_close_tag_ -- +! Routine to write the closing tag +! Arguments: +! info Structure holding information on the XML-file +! tag Tag that was encountered +! endtag Whether the end of the element was encountered +! attribs List of attribute-value pairs +! no_attribs Number of pairs in the list +! data Lines of character data found +! no_data Number of lines of character data +! +subroutine xml_put_close_tag_(info, tag, attribs, no_attribs, & + data, no_data) + + type(XML_PARSE), intent(inout) :: info + character(len=*), intent(in) :: tag + character(len=*), intent(in), dimension(:,:) :: attribs + integer, intent(in) :: no_attribs + character(len=*), intent(in), dimension(:) :: data + integer, intent(in) :: no_data + + integer :: i + + character(len=300), parameter :: indent = ' ' + + info%level=info%level-1 + write( info%lun, '(4a)' ) & + indent(1:3*info%level), '' + +end subroutine xml_put_close_tag_ + +! xml_compress_ -- +! Routine to remove empty lines from the character data +! Arguments: +! data Lines of character data found +! no_data (Nett) number of lines of character data +! +subroutine xml_compress_( data, no_data ) + character(len=*), intent(inout), dimension(:) :: data + integer, intent(inout) :: no_data + + integer :: i + integer :: j + logical :: empty + + j = 0 + empty = .true. + do i = 1,no_data + if ( len_trim(data(i)) .ne. 0 .or. .not. empty ) then + j = j + 1 + data(j) = adjustl(data(i)) + empty = .false. + endif + enddo + + no_data = j + + do i = no_data,1,-1 + if ( len_trim(data(i)) .ne. 0 ) then + exit + else + no_data = no_data - 1 + endif + enddo + +end subroutine xml_compress_ + +! xml_replace_entities_ -- +! Routine to replace entities such as > by their +! proper character representation +! Arguments: +! data Lines of character data found +! no_data (Nett) number of lines of character data +! +subroutine xml_replace_entities_( data, no_data ) + character(len=*), intent(inout), dimension(:) :: data + integer, intent(inout) :: no_data + + integer :: i + integer :: j + integer :: j2 + integer :: k + integer :: pos + logical :: found + + do i = 1,no_data + j = 1 + do + do k = 1,size(entities,2) + found = .false. + pos = index( data(i)(j:), trim(entities(2,k)) ) + if ( pos .gt. 0 ) then + found = .true. + j = j + pos - 1 + j2 = j + len_trim(entities(2,k)) + data(i)(j:) = trim(entities(1,k)) // data(i)(j2:) + j = j2 + endif + enddo + if ( .not. found ) exit + enddo + enddo + +end subroutine xml_replace_entities_ + +! xml_options -- +! Routine to handle the parser options +! Arguments: +! info Structure holding information on the XML-file +! ignore_whitespace Ignore whitespace (leading blanks, empty lines) or not +! no_data_truncation Consider truncation of strings an error or not +! report_lun LU-number for reporting information +! report_errors Write messages about errors or not +! report_details Write messages about all kinds of actions or not +! +subroutine xml_options( info, ignore_whitespace, no_data_truncation, & + report_lun, report_errors, & + report_details ) + type(XML_PARSE), intent(inout) :: info + logical, intent(in), optional :: ignore_whitespace + logical, intent(in), optional :: no_data_truncation + + integer, intent(in), optional :: report_lun + logical, intent(in), optional :: report_errors + logical, intent(in), optional :: report_details + + if ( present(ignore_whitespace) ) then + info%ignore_whitespace = ignore_whitespace + endif + if ( present(no_data_truncation) ) then + info%no_data_truncation = no_data_truncation + endif + if ( present(report_lun) ) then + report_lun_ = report_lun + endif + if ( present(report_errors) ) then + report_errors_ = report_errors + endif + if ( present(report_details) ) then + report_details_ = report_details + endif +end subroutine xml_options + +! xml_ok -- +! Function that returns whether all was okay or not +! Arguments: +! info Structure holding information on the XML-file +! Returns: +! .true. if there was no error, .false. otherwise +! +logical function xml_ok( info ) + type(XML_PARSE), intent(in) :: info + + xml_ok = info%eof .or. info%error .or. & + ( info%no_data_truncation .and. & + ( info%too_many_attribs .or. info%too_many_data ) ) + xml_ok = .not. xml_ok +end function xml_ok + +! xml_error -- +! Function that returns whether there was an error +! Arguments: +! info Structure holding information on the XML-file +! Returns: +! .true. if there was an error, .false. if there was none +! +logical function xml_error( info ) + type(XML_PARSE), intent(in) :: info + + xml_error = info%error .or. & + ( info%no_data_truncation .and. & + ( info%too_many_attribs .or. info%too_many_data ) ) +end function xml_error + +! xml_data_trunc -- +! Function that returns whether data were truncated or not +! Arguments: +! info Structure holding information on the XML-file +! Returns: +! .true. if data were truncated, .false. otherwise +! +logical function xml_data_trunc( info ) + type(XML_PARSE), intent(in) :: info + + xml_data_trunc = info%too_many_attribs .or. info%too_many_data +end function xml_data_trunc + +integer function xml_find_attrib( attribs, no_attribs, name, value, inival ) + character(len=*), dimension(:,:) :: attribs + integer :: no_attribs + character(len=*) :: name + character(len=*) :: value + character(len=*),optional :: inival + + integer :: i + + xml_find_attrib = -1 + do i = 1,no_attribs + if ( name .eq. attribs(1,i) ) then + value = attribs(2,i) + print *,'value=',trim(value),present(inival),'size(attribs,1)=',size(attribs,1) + if(present(inival).and.size(attribs,1)==4) then + inival = attribs(4,i) + print *,'in xml_find_attrib,value=',attribs(2,i),'inival=',inival,attribs(4,i) + endif +! if(present(inival)) inival = attribs(4,i) + xml_find_attrib = i + exit + endif + enddo + +end function xml_find_attrib + +! xml_process -- +! Routine to read the XML file as a whole and distribute processing +! the contents over three user-defined subroutines +! Arguments: +! filename Name of the file to process +! attribs Array for holding the attributes +! data Array for holding the character data +! startfunc Subroutine to handle the start of elements +! datafunc Subroutine to handle the character data +! endfunc Subroutine to handle the end of elements +! error Indicates if there was an error or not +! +subroutine xml_process( filename, attribs, data, startfunc, datafunc, endfunc, lunrep, error ) + character(len=*) :: filename + character(len=*), dimension(:,:) :: attribs + character(len=*), dimension(:) :: data + integer :: lunrep + logical :: error + + interface + subroutine startfunc( tag, attribs, error ) + character(len=*) :: tag + character(len=*), dimension(:,:) :: attribs + logical :: error + end subroutine + end interface + + interface + subroutine datafunc( tag, data, error ) + character(len=*) :: tag + character(len=*), dimension(:) :: data + logical :: error + end subroutine + end interface + + interface + subroutine endfunc( tag, error ) + character(len=*) :: tag + logical :: error + end subroutine + end interface + + type(XML_PARSE) :: info + character(len=80) :: tag + logical :: endtag + integer :: noattribs + integer :: nodata + + call xml_options( info, report_lun = lunrep, report_details = .false. ) + call xml_open( info, filename, .true. ) + + error = .false. + do + call xml_get( info, tag, endtag, attribs, noattribs, data, nodata ) + if ( .not. xml_ok(info) ) then + exit + endif + + if ( xml_error(info) ) then + write(lunrep,*) 'Error reading XML file!' + error = .true. + exit + endif + + if ( .not. endtag .or. noattribs .ne. 0 ) then + call startfunc( tag, attribs(:,1:noattribs), error ) + if ( error ) exit + + call datafunc( tag, data(1:nodata), error ) + if ( error ) exit + endif + + if ( endtag ) then + call endfunc( tag, error ) + if ( error ) exit + endif + enddo + call xml_close( info ) +end subroutine xml_process + +end module xmlparse diff --git a/sorc/comlibs/xml/xmlreader.conf b/sorc/comlibs/xml/xmlreader.conf new file mode 100755 index 000000000..ab8007480 --- /dev/null +++ b/sorc/comlibs/xml/xmlreader.conf @@ -0,0 +1,12 @@ + + + + diff --git a/sorc/comlibs/xml/xmlreader.f90 b/sorc/comlibs/xml/xmlreader.f90 new file mode 100755 index 000000000..84e4744d8 --- /dev/null +++ b/sorc/comlibs/xml/xmlreader.f90 @@ -0,0 +1,1082 @@ +! ------------------------------------------------------------------- +! XMLREADER: +! Read an XML-file that contains a template for the data and the XML +! files that will be used in a program and generate a module with +! reading routines. +! +! $Id: xmlreader.f90,v 1.19 2007/06/19 19:44:15 arjenmarkus Exp $ +! +! TODO: +! - Private routines! +! - Error for unknown data types +! - Length for character items +! ------------------------------------------------------------------- +! +program xmlreader + use XMLPARSE + implicit none + + character(len=60) :: fname + type(XML_PARSE) :: info + + character(len=80) :: tag + character(len=80) :: starttag + logical :: endtag + character(len=80), dimension(1:2,1:20) :: attribs + integer :: noattribs + character(len=200), dimension(1:100) :: data + integer :: nodata + integer :: i + integer :: idx + integer :: j + integer, parameter :: notmps = 5 ! Number of temporary files needed! + integer :: ludef + integer :: ludeflt + integer :: luinit + integer :: lusubs + integer :: luprolog + integer :: lustart + integer :: luloop + integer :: luend + integer :: lumain + logical :: prolog_written + logical :: comp + logical :: error + logical :: contains = .false. + logical :: begin_loop = .true. + logical :: begin_main_loop = .true. + logical :: begin_component = .false. + logical :: strict + logical :: global_type + logical :: dyn_strings + + character(len=32) :: root_name + character(len=32) :: global_name + character(len=32) :: typename + character(len=32), dimension(1:20) :: placeholder + integer :: no_placeholders + + character(len=50) :: declare + character(len=10) :: declare_inival + character(len=50), dimension(1:4,1:30) :: predefined_types + character(len=50), dimension(:,:), pointer :: types + character(len=50), dimension(:,:), pointer :: new_types + integer :: notypes = 21 + data ((predefined_types(i,j) , i=1,4), j=1,21 ) / & +'logical' ,' logical' , 'read_xml_logical', '=.false.', & +'logical-array' ,' logical, dimension(:), pointer' , 'read_xml_logical_array', ' ', & +'logical-shape' ,' logical, dimension(SHAPE)' , 'read_xml_logical_array', ' ', & +'integer' ,' integer' , 'read_xml_integer', '=0', & +'integer-array' ,' integer, dimension(:), pointer' , 'read_xml_integer_array', ' ', & +'integer-shape' ,' integer, dimension(SHAPE)' , 'read_xml_integer_array', ' ', & +'real' ,' real' , 'read_xml_real' , '=0.0', & +'real-array' ,' real, dimension(:), pointer' , 'read_xml_real_array', ' ', & +'real-shape' ,' real, dimension(SHAPE)' , 'read_xml_real_array', ' ', & +'double' ,' real(kind=kind(1.0d0))' , 'read_xml_double', '=0.0', & +'double-array' ,' real(kind=kind(1.0d0)), dimension(:), pointer' , & + 'read_xml_double_array', ' ', & +'double-shape' ,' real(kind=kind(1.0d0)), dimension(SHAPE)' , & + 'read_xml_double_array', ' ', & +'word' ,' character(len=?)' , 'read_xml_word', '=\'\'', & +'word-array' ,' character(len=?), dimension(:), pointer' , 'read_xml_word_array', '', & +'word-shape' ,' character(len=?), dimension(SHAPE)' , 'read_xml_word_array', '', & +'line' ,' character(len=?)' , 'read_xml_line', '=\'\'', & +'line-array' ,' character(len=?), dimension(:), pointer' , 'read_xml_line_array', ' ', & +'line-shape' ,' character(len=?), dimension(SHAPE)' , 'read_xml_line_array', ' ', & +'character' ,' character(len=?)' , 'read_xml_line', '', & +'character-array',' character(len=?), dimension(:), pointer' , 'read_xml_line_array', ' ', & +'character-shape',' character(len=?), dimension(SHAPE)' , 'read_xml_line_array', ' ' / + + allocate( types(1:4,1:notypes) ) + types = predefined_types(1:4,1:notypes) + + ! + ! Read the global options file, if present + ! + strict = .false. + global_type = .false. + dyn_strings = .true. + call get_global_options( attribs, noattribs, strict, global_type, global_name, & + root_name, dyn_strings ) + + ! + ! Open the input file and read the name of the template. + ! Load the template into a tree and then generate it all + ! in stages + ! + open( 10, file = 'xmlreader.inp' ) + open( 20, file = 'xmlreader.out' ) + + call xml_options( info, report_lun = 20, report_details = .true. ) + read( 10, '(a)' ) fname + close( 10 ) + + prolog_written = .false. + ! + ! Set the defaults + ! + global_type = .false. + global_name = fname + root_name = fname + + ludef = 21 + lusubs = 22 + luinit = 23 + open( ludef, file = trim(fname)//'.f90' ) + open( lusubs, status = 'scratch' ) + open( luinit, status = 'scratch' ) + call open_tmp_files( 31 ) + + lumain = luloop + + ! Read the template file and act as we go along: + ! - write the declarations + ! - write the main reading routine + ! - write the individual reading routines + ! - the root element is needed because of the definition of XML files, + ! but we ignore it. + ! + call xml_open( info, trim(fname)//'.xml', .true. ) + + error = .false. + comp = .false. + no_placeholders = 0 + + call xml_get( info, starttag, endtag, attribs, noattribs, data, nodata ) + + do + call xml_get( info, tag, endtag, attribs, noattribs, data, nodata ) + write(20,*) 'tag: ',tag + write(20,*) 'attribs: ',noattribs + if ( noattribs .gt. 0 ) then + write(20,'(4a)') ( ' ', trim(attribs(1,i)), ' = ', trim(attribs(2,i)), i=1,noattribs ) + endif + write(20,*) 'data: ',nodata + if ( nodata .gt. 0 ) then + write(20,'(3a)') ( ' >', trim(data(i)), '<', i=1,nodata ) + endif + if ( xml_error(info) ) then + write(*,*) 'Error reading template file!' + !stop + exit + endif + + ! + ! When encountering the endtag, then close the + ! current definition + ! + if ( endtag .and. noattribs .eq. 0 ) then + select case ( tag ) + case ( 'typedef' ) + call close_typedef( begin_component ) + case ( 'placeholder' ) + !if ( comp ) then + ! call close_placeholder + !endif + !comp = .false. + call close_placeholder + case default + ! + ! Have we found the end of the definition? + ! + if ( tag .eq. starttag ) then + exit + endif + end select + + if ( xml_ok(info) ) then + cycle + else + exit + endif + + endif + + ! + ! Opening tags: dispatch on the actual tag + ! + select case( tag ) + case( 'options' ) + call set_options( attribs, noattribs, strict, global_type, & + global_name, root_name, dyn_strings ) + if ( .not. prolog_written ) then + prolog_written = .true. + call write_prolog + else + write(20,*) 'Options element should be the first child of the root element',& + 'Otherwise it has no effect!' + endif + + if ( strict ) then + write( lumain, '(a)' ) & + & ' strict_ = .true.' + else + write( lumain, '(a)' ) & + & ' strict_ = .false.' + endif + + case( 'comment', '!--' ) + ! Do nothing + + case( 'placeholder' ) + if ( .not. prolog_written ) then + prolog_written = .true. + call write_prolog + endif + if ( begin_loop .or. begin_main_loop ) then + begin_main_loop = .false. + call add_begin_loop( .true., .false. ) + endif + call add_placeholder(strict, dyn_strings ) + begin_component = .false. + + case( 'typedef' ) + if ( .not. prolog_written ) then + prolog_written = .true. + call write_prolog + endif + call add_typedef(strict, dyn_strings ) + + case( 'variable' ) + if ( .not. prolog_written ) then + prolog_written = .true. + call write_prolog + endif + if ( begin_loop .or. begin_main_loop ) then + begin_main_loop = .false. + call add_begin_loop( .true., begin_component ) + endif + call add_variable( component=comp ) + + case( 'component' ) + ! + ! Components of derived types are treated in much the + ! same way as ordinary variables - with one syntactic + ! difference + ! + if ( .not. prolog_written ) then + prolog_written = .true. + call write_prolog + endif + if ( begin_loop ) then + call add_begin_loop( .true., .true. ) + endif + call add_variable( component=.true. ) + begin_component = .true. + + case default + write(20,*) 'Unknown tag: ',trim(tag) + write(20,*) '-- terminating the program!' + stop + end select + end do + + ! + ! Now finish it all + ! + write( luend, '(a)' ) & + & ' if ( present(errout) ) errout = error', & + & 'end subroutine' + + call append_files( luprolog ) + call merge_files + + write( ludef, '(/,a)' ) & + & 'end subroutine', & + & 'end module' + + if ( error ) then + write(*,*) 'Errors found in the definition - please check!' + endif + stop +contains + +! get_global_options -- +! Routine to get the global options from the configuration file +! Arguments: +! strict Option to make the parser check for unknown tags +! global_type Option to generate an overall derived type +! global_name Name of that overall derived type (if requested) +! root_name Name of the root element of the XML file +! dyn_strings Whether to use dynamic strings or not +! +subroutine get_global_options( attribs, noattribs, strict, global_type, global_name, & + root_name, dyn_strings ) + character(len=*), dimension(:,:), intent(inout) :: attribs + integer, intent(inout) :: noattribs + logical, intent(inout) :: strict + logical, intent(inout) :: global_type + character(len=*), intent(inout) :: global_name + character(len=*), intent(inout) :: root_name + logical, intent(inout) :: dyn_strings + + character(len=20) :: tag + character(len=20), dimension(1) :: data + integer :: nodata + logical :: exists + logical :: endtag + type(XML_PARSE) :: info + + inquire( file = 'xmlreader.conf', exist = exists ) + if ( exists ) then + call xml_open( info, 'xmlreader.conf', .true. ) + do while ( xml_ok(info) ) + call xml_get( info, tag, endtag, attribs, noattribs, data, nodata ) + if ( tag .eq. 'xmlreader' ) then + call set_options( attribs, noattribs, strict, global_type, & + global_name, root_name, dyn_strings ) + endif + enddo + call xml_close( info ) + endif +end subroutine get_global_options + +! set_options -- +! Routine to set the options that influence the parser +! Arguments: +! attribs List of attributes +! noattribs Number of attributes +! strict Option to make the parser check for unknown tags +! global_type Option to generate an overall derived type +! global_name Name of that overall derived type (if requested) +! root_name Name of the root element of the XML file +! dyn_strings Whether to use dynamic strings or not +! +subroutine set_options( attribs, noattribs, strict, global_type, global_name, root_name, dyn_strings ) + character(len=*), dimension(:,:), intent(in) :: attribs + integer, intent(in) :: noattribs + logical, intent(inout) :: strict + logical, intent(inout) :: global_type + character(len=*), intent(inout) :: global_name + character(len=*), intent(inout) :: root_name + logical, intent(inout) :: dyn_strings + + integer :: i + + do i = 1,noattribs + select case (attribs(1,i)) + case ('strict') + if ( attribs(2,i) == 'yes' ) then + strict = .true. + else + strict = .false. + endif + case ('globaltype') + if ( attribs(2,i) == 'yes' ) then + global_type = .true. + else + global_type = .false. + endif + case ('globalname') + global_name = attribs(2,i) + case ('rootname') + root_name = attribs(2,i) + case ('dynamicstrings') + if ( attribs(2,i) == 'yes' ) then + dyn_strings = .true. + else + dyn_strings = .false. + endif + case default + write(20,*) 'Unknown option: ',trim(attribs(1,i)), ' - ignored' + end select + enddo +end subroutine set_options + +! open_tmp_files -- +! Routine to open the temporary files +! Arguments: +! lufirst First LU-number to use +! +subroutine open_tmp_files( lufirst ) + integer, intent(in) :: lufirst + + luprolog = lufirst + lustart = lufirst + 1 + luloop = lufirst + 2 + luend = lufirst + 3 + ludeflt = lufirst + 4 + open( luprolog, status = 'scratch' ) + open( lustart, status = 'scratch' ) + open( luloop, status = 'scratch' ) + open( luend, status = 'scratch' ) + open( ludeflt, status = 'unknown' ) +end subroutine open_tmp_files + +! close_tmp_files -- +! Routine to close the temporary files +! Arguments: +! None +! +subroutine close_tmp_files + close( luprolog ) + close( lustart ) + close( luloop ) + close( luend ) + + luprolog = luprolog - notmps + lustart = lustart - notmps + luloop = luloop - notmps + luend = luend - notmps + ludeflt = ludeflt - notmps +end subroutine close_tmp_files + +! append_tmp_files -- +! Routine to append the contents of the temporary files +! Arguments: +! lufirst First LU-number to use +! +subroutine append_files( lufirst ) + integer, intent(in) :: lufirst + + integer :: lu + integer :: io + character(len=120) :: line + + ! + ! If we have not written a subroutine yet, then + ! now is the time to close the overall initialisation + ! routine + ! -- no longer needed + ! + !if ( .not. contains ) then + ! write( lusubs, '(a,/)' ) 'end subroutine' + ! contains = .true. + !endif + + ! + ! Copy the contents of the scratch files + ! + do lu = lufirst,lufirst+notmps-1 + rewind( lu ) + do + read( lu, '(a)', iostat=io ) line + if ( io .ne. 0 ) exit + write( lusubs, '(a)' ) trim(line) + enddo + rewind( lu ) + enddo +end subroutine append_files + +! merge_files -- +! Routine to merge all temporary files into the definite file +! Arguments: +! None +! +subroutine merge_files + + integer :: io + character(len=120) :: line + + ! + ! Copy the contents of the "subroutines" file + ! + rewind( lusubs ) + do + read( lusubs, '(a)', iostat=io ) line + if ( io .ne. 0 ) exit + write( ludef, '(a)' ) trim(line) + enddo + + ! + ! Copy the contents of the "initialisation subroutine" file + ! + rewind( luinit ) + do + read( luinit, '(a)', iostat=io ) line + if ( io .ne. 0 ) exit + write( ludef, '(a)' ) trim(line) + enddo +end subroutine merge_files + +! write_prolog -- +! Routine to write the beginning of the module +! Arguments: +! None +! +subroutine write_prolog + write( ludef, '(a)' ) & + & 'module xml_data_' // trim(fname), & + & ' use READ_XML_PRIMITIVES', & + & ' use XMLPARSE', & + & ' implicit none', & + & ' integer, private :: lurep_', & + & ' logical, private :: strict_' + + write( luprolog, '(a)' ) & + & 'subroutine read_xml_file_'//trim(fname)//'(fname, lurep, errout)' , & + & ' character(len=*), intent(in) :: fname' , & + & ' integer, intent(in), optional :: lurep' , & + & ' logical, intent(out), optional :: errout' , & + & ' ' , & + & ' type(XML_PARSE) :: info' , & + & ' logical :: error' , & + & ' character(len=80) :: tag' , & + & ' character(len=80) :: starttag' , & + & ' logical :: endtag' , & + & ' character(len=80), dimension(1:2,1:20) :: attribs' , & + & ' integer :: noattribs' , & + & ' character(len=200), dimension(1:100) :: data' , & + & ' integer :: nodata' + + write( lusubs, '(a)' ) & + & 'contains' + write( luinit, '(a)' ) & + & 'subroutine init_xml_file_'//trim(fname) + + write( lumain, '(a)' ) & + & ' ', & + & ' call init_xml_file_'//trim(fname), & + & ' call xml_open( info, fname, .true. )', & + & ' call xml_options( info, report_errors=.true., ignore_whitespace=.true.)', & + & ' lurep_ = 0', & + & ' if ( present(lurep) ) then', & + & ' lurep_ = lurep', & + & ' call xml_options( info, report_lun=lurep )', & + & ' endif', & + & ' do', & + & ' call xml_get( info, starttag, endtag, attribs, noattribs, &', & + & ' data, nodata)', & + & ' if ( starttag .ne. ''!--'' ) exit', & + & ' enddo', & + & ' if ( starttag .ne. "' // trim(root_name) // '" ) then', & + & ' call xml_report_errors( info, &', & + & ' ''XML-file should have root element "' // trim(root_name) // '"'')', & + & ' error = .true.', & + & ' call xml_close(info)', & + & ' return', & + & ' endif' + + call add_end_loop +end subroutine write_prolog + +! add_begin_loop -- +! Routine to write the start of the reading loop +! Arguments: +! checktag Whether code for checking the tag is required +! component Whether this is an ordinary variable or a component +! in a derived type +! +subroutine add_begin_loop( checktag, component ) + logical :: checktag + logical :: component + + if ( component ) then + write( luloop, '(a)' ) & + & ' call init_xml_type_'//trim(typename)//'(dvar)', & + & ' has_dvar = .true.' + endif + + begin_loop = .false. + + if ( component ) then + write( luloop, '(a)' ) & + & ' error = .false.' ,& + & ' att_ = 0' ,& + & ' noatt_ = noattribs+1' ,& + & ' endtag_org = endtag' ,& + & ' do', & + & ' if ( nodata .ne. 0 ) then' ,& + & ' noattribs = 0' ,& + & ' tag = starttag' ,& + & ' elseif ( att_ .lt. noatt_ .and. noatt_ .gt. 1 ) then' ,& + & ' att_ = att_ + 1' ,& + & ' if ( att_ .le. noatt_-1 ) then' ,& + & ' tag = attribs(1,att_)' ,& + & ' data(1) = attribs(2,att_)' ,& + & ' noattribs = 0' ,& + & ' nodata = 1' ,& + & ' endtag = .false.' ,& + & ' else' ,& + & ' tag = starttag' ,& + & ' noattribs = 0' ,& + & ' nodata = 0' ,& + & ' endtag = .true.' ,& + & ' cycle' ,& + & ' endif' ,& + & ' else', & + & ' if ( endtag_org ) then', & + & ' return', & + & ' else', & + & ' call xml_get( info, tag, endtag, attribs, noattribs, data, nodata )' ,& + & ' if ( xml_error(info) ) then' ,& + & ' write(lurep_,*) ''Error reading input file!''',& + & ' error = .true.' ,& + & ' return' ,& + & ' endif' ,& + & ' endif' ,& + & ' endif' + else + write( luloop, '(a)' ) & + & ' error = .false.' ,& + & ' do', & + & ' call xml_get( info, tag, endtag, attribs, noattribs, data, nodata )' ,& + & ' if ( xml_error(info) ) then' ,& + & ' write(lurep_,*) ''Error reading input file!''' ,& + & ' error = .true.' ,& + & ' return' ,& + & ' endif' + endif + if ( checktag ) then + write( luloop, '(a)' ) & + & ' if ( endtag .and. tag .eq. starttag ) then' ,& + & ' exit' ,& + & ' endif' + endif + write( luloop, '(a)' ) & + & ' if ( endtag .and. noattribs .eq. 0 ) then' ,& + & ' if ( xml_ok(info) ) then' ,& + & ' cycle' ,& + & ' else' ,& + & ' exit' ,& + & ' endif' ,& + & ' endif' ,& + & ' select case( tag )' +end subroutine add_begin_loop + +! add_end_loop -- +! Routine to write the end of the reading loop +! Arguments: +! None +! +subroutine add_end_loop + + write( luend, '(a)' ) & + & ' case (''comment'', ''!--'')' ,& + & ' ! Simply ignore', & + & ' case default' ,& + & ' if ( strict_ ) then', & + & ' error = .true.', & + & ' call xml_report_errors( info, &', & + & ' ''Unknown or wrongly placed tag: '' // trim(tag))',& + & ' endif' + + write( luend, '(a)' ) & + & ' end select' ,& + & ' nodata = 0' ,& + & ' if ( .not. xml_ok(info) ) exit' , & + & ' end do' +end subroutine add_end_loop + +! add_variable -- +! Routine to write the definition of variables or components of +! derived types +! Arguments: +! component Whether this is an ordinary variable or a component +! in a derived type +! +subroutine add_variable( component ) + logical :: component + + integer :: idx1 + integer :: idx2 + integer :: idx3 + integer :: idx4 + integer :: idx5 + integer :: idx6 + integer :: k + + character(len=32) :: varname + character(len=40) :: varcomp + character(len=40) :: varshape + character(len=100) :: vardefault + character(len=32) :: vartype + character(len=32) :: vartag + character(len=10) :: dim + character(len=10) :: strlength + character(len=32) :: initptr + + idx1 = xml_find_attrib( attribs, noattribs, 'name', varname ) + idx2 = xml_find_attrib( attribs, noattribs, 'type', vartype ) + strlength = "--" + idx5 = xml_find_attrib( attribs, noattribs, 'length', strlength ) + if ( idx1 .le. 0 ) then + write( 20, * ) 'Variable/component found which has no name' + error = .true. + endif + if ( idx2 .le. 0 ) then + write( 20, * ) 'Variable/component found which has no type - ',trim(varname) + error = .true. + else + dim = '--' + idx2 = xml_find_attrib( attribs, noattribs, 'dimension', dim ) + idx6 = xml_find_attrib( attribs, noattribs, 'shape', varshape ) + if ( idx2 .ge. 1 ) then + if ( dim .eq. '1' ) then + vartype = trim(vartype) // '-array' + else + error = .true. + write(20,*) 'Dimension not supported: ',dim + endif + endif + if ( idx6 .ge. 1 ) then + vartype = trim(vartype) // '-shape' + endif + + print *,'types=',size(types,1),size(types,2),notypes,'vartype=',vartype +! print *,'types=',types(4,:) + declare_inival='' + idx3 = xml_find_attrib( types, notypes, vartype, declare, inival=declare_inival ) + print *,'declare=',declare,'declare_inival=',declare_inival + if ( idx3 .le. 0 ) then + write( 20, * ) & + 'Variable/component with unknown type - ',trim(varname) + error = .true. + endif + endif + + idx4 = xml_find_attrib( attribs, noattribs, 'default', vardefault ) + + if ( component ) then + varcomp = 'dvar%'//varname + else + varcomp = varname + endif + + idx1 = xml_find_attrib( attribs, noattribs, 'tag', vartag ) + if ( idx1 .lt. 1 ) then + vartag = varname + endif + + if ( .not. error ) then + if ( index( declare, "pointer" ) .gt. 0 ) then + initptr = " => null()" + else + initptr = "" + + endif +! + k = index( declare, 'SHAPE' ) + if ( k .gt. 0 ) then + declare = declare(1:k-1) // trim(varshape) // declare(k+5:) + endif + + if ( index( declare, "?" ) .le. 0 ) then + write( ludef, '(4a,4a)' ) declare, ' :: ', trim(varname), trim(initptr),trim(declare_inival) + else + if ( strlength .eq. "--" ) then + strlength = "1" ! Hm, error is better? + endif + idx5 = index( declare, "?" ) + write( ludef, '(6a,4a)' ) declare(1:idx5-1), trim(strlength), declare(idx5+1:), & + ' :: ', trim(varname), trim(initptr),trim(declare_inival) + endif + + if ( idx6 .gt. 0 ) then + k = index( types(2,idx3-1), '?' ) + if ( k .le. 0 ) then + write( luprolog, '(3a)' ) types(2,idx3-1), ' :: ', 'p_'//trim(varname) + else + write( luprolog, '(6a)' ) types(2,idx3-1)(1:k-1), trim(strlength), & + types(2,idx3-1)(k+1:), ' :: ', 'p_'//trim(varname) + endif + endif + write( luprolog, '(3a)' ) types(2,1), ' :: ', 'has_'//trim(varname) + write( lustart, '(3a)' ) ' has_', varname, ' = .false.' + if ( dim .ne. '--' ) then + write( lustart, '(3a)' ) ' allocate(' // trim(varcomp), '(0))' + endif + write( luloop, '(a)' ) ' case('''//trim(vartag)//''')' + + if ( idx6 .le. 0 ) then + write( luloop, '(a)' ) & + &' call '//trim(types(3,idx3))//'( &', & + &' info, tag, endtag, attribs, noattribs, data, nodata, &',& + &' ' // trim(varcomp) // ', has_'//trim(varname) // ' )' + else + write( luloop, '(a)' ) & + &' call '//trim(types(3,idx3))//'( &', & + &' info, tag, endtag, attribs, noattribs, data, nodata, &',& + &' p_' // trim(varname) // ', has_'//trim(varname) // ' )',& + &' if ( has_'//trim(varname) // ') then',& + &' if ( size(shape(' // trim(varcomp) //')) == 1 ) then',& + &' '//trim(varcomp)//' = reshape(p_'//trim(varname)//', shape('//trim(varcomp)//'))',& + &' else if ( size(p_'//trim(varname)//') .ge. size('//trim(varcomp)//') ) then',& + &' '//trim(varcomp)//' = reshape(p_'//trim(varname)//', shape('//trim(varcomp)//'))',& + &' else',& + &' has_'//trim(varname)//' = .false.',& + &' call xml_report_errors(info, ''Incorrect number of values for '//trim(varname)//''')', & + &' endif',& + &' endif',& + &' deallocate( p_'//trim(varname)//' )' + endif + if ( idx4 .le. 0 ) then + write( luend, '(a)' ) & + &' if ( .not. has_'//trim(varname)//' ) then' + + if ( component ) then + write( luend, '(a)' ) & + &' has_dvar = .false.' + else + write( luend, '(a)' ) & + &' error = .true.' + endif + + write( luend, '(a)' ) & + &' call xml_report_errors(info, ''Missing data on '//trim(varname)//''')', & + &' endif' + else + ! + ! Note: the attribute value is supposed to have the quotes, if that + ! is relevant for the variable's type + ! + if ( component ) then + write( ludeflt, '(4a)' ) & + &' dvar%', trim(varname), ' = ', attribs(2,idx4) + else + write( luinit, '(4a)' ) & + &' ', trim(varname), ' = ', attribs(2,idx4) + endif + endif + endif + +end subroutine add_variable + +! add_typedef -- +! Routine to write the definition and other code for a derived type +! Arguments: +! strict Whether checking for unknown flags is required +! dyn_strings Whether dynamic string lengths are allowed +! +subroutine add_typedef( strict, dyn_strings ) + logical, intent(in) :: strict + logical, intent(in) :: dyn_strings + + integer :: idx1 + integer :: idx2 + + character(len=32) :: typetag + + idx1 = xml_find_attrib( attribs, noattribs, 'name', typename ) + if ( idx1 .le. 0 ) then + write( 20, * ) 'Type definition found which has no name' + error = .true. + endif + + ! + ! We need a new set of temporary files + ! + call open_tmp_files( luprolog+notmps ) + + idx2 = xml_find_attrib( attribs, noattribs, 'tag', typetag ) + if ( idx1 .lt. 1 ) then + typetag = typename + endif + + if ( .not. error ) then + write( ludef, '(/,2a)' ) 'type ',trim(typename) + write( luprolog, '(a)' ) & + & 'subroutine read_xml_type_'//trim(typename)//'_array( &' ,& + & ' info, tag, endtag, attribs, noattribs, data, nodata, &',& + & ' dvar, has_dvar )' ,& + & ' type(XML_PARSE) :: info' ,& + & ' character(len=*), intent(inout) :: tag ',& + & ' logical, intent(inout) :: endtag ',& + & ' character(len=*), dimension(:,:), intent(inout) :: attribs',& + & ' integer, intent(inout) :: noattribs',& + & ' character(len=*), dimension(:), intent(inout) :: data ',& + & ' integer, intent(inout) :: nodata ',& + & ' type('//trim(typename)//'), dimension(:), pointer :: dvar ',& + & ' logical, intent(inout) :: has_dvar ',& + & ' ' ,& + & ' integer :: newsize ',& + & ' type('//trim(typename)//'), dimension(:), pointer :: newvar',& + & ' ' ,& + & ' newsize = size(dvar) + 1' ,& + & ' allocate( newvar(1:newsize) )' ,& + & ' newvar(1:newsize-1) = dvar' ,& + & ' deallocate( dvar )' ,& + & ' dvar => newvar' ,& + & ' ' ,& + & ' call read_xml_type_'//trim(typename)// & + & '( info, tag, endtag, attribs, noattribs, data, nodata, &',& + & ' dvar(newsize), has_dvar )' ,& + & 'end subroutine read_xml_type_'//trim(typename)//'_array' ,& + & ' ' + + write( luprolog, '(a)' ) & + & 'subroutine read_xml_type_'//trim(typename)//& + & '( info, starttag, endtag, attribs, noattribs, data, nodata, &' ,& + & ' dvar, has_dvar )' ,& + & ' type(XML_PARSE) :: info' ,& + & ' character(len=*), intent(in) :: starttag',& + & ' logical, intent(inout) :: endtag ',& + & ' character(len=*), dimension(:,:), intent(inout) :: attribs',& + & ' integer, intent(inout) :: noattribs',& + & ' character(len=*), dimension(:), intent(inout) :: data ',& + & ' integer, intent(inout) :: nodata ',& + & ' type('//trim(typename)//'), intent(inout) :: dvar' ,& + & ' logical, intent(inout) :: has_dvar ',& + & ' ' ,& + & ' integer :: att_ ',& + & ' integer :: noatt_ ',& + & ' logical :: error ',& + & ' logical :: endtag_org' + if ( dyn_strings ) then + write( luprolog, '(a)' ) & + & ' character(len=len(starttag)) :: tag ' + else + write( luprolog, '(a)' ) & + & ' character(len=80) :: tag ' + endif + + ! + ! Note: this may require a more sophisticated approach + ! when the components of the type are also pointers ... + ! + write( ludeflt, '(a)' ) & + & 'subroutine init_xml_type_'//trim(typename)//'_array( dvar ) ',& + & ' type('//trim(typename)//'), dimension(:), pointer :: dvar ',& + & ' if ( associated( dvar ) ) then' ,& + & ' deallocate( dvar )' ,& + & ' endif' ,& + & ' allocate( dvar(0) )' ,& + & 'end subroutine init_xml_type_'//trim(typename)//'_array' ,& + & 'subroutine init_xml_type_'//trim(typename)//'(dvar)' ,& + & ' type('//trim(typename)//') :: dvar ' + + begin_loop = .true. + + call add_end_loop + + ! + ! Add the names of the two new types to the list + ! + allocate( new_types(1:4,1:notypes+3) ) + new_types(:,1:notypes) = types + deallocate( types ) + types => new_types + + types(1,notypes+1) = typename + types(2,notypes+1) = ' type('//trim(typename)//')' + types(3,notypes+1) = 'read_xml_type_'//trim(typename) + + types(1,notypes+2) = trim(typename) // '-array' + types(2,notypes+2) = ' type('//trim(typename)//'), dimension(:), pointer' + types(3,notypes+2) = 'read_xml_type_'//trim(typename)//'_array' + + types(1,notypes+3) = trim(typename) // '-shape' + types(2,notypes+3) = ' type('//trim(typename)//'), dimension(SHAPE)' + types(3,notypes+3) = 'read_xml_type_'//trim(typename)//'_array' + + notypes = notypes + 3 + + endif +end subroutine add_typedef + +! close_typedef -- +! Routine to write the last code fragments for a derived type +! Arguments: +! component Turn off the "component" parameter +! +subroutine close_typedef( component ) + logical, intent(out) :: component + + component = .false. + write( ludef, '(a)' ) 'end type '//trim(typename) + write( luend, '(a)' ) & + & 'end subroutine read_xml_type_'//trim(typename) + write( ludeflt, '(a)' ) & + & 'end subroutine init_xml_type_'//trim(typename) + call append_files( luprolog ) + call close_tmp_files + +end subroutine close_typedef + +! add_placeholder -- +! Routine to write the starting code fragments for a placeholder tag +! Arguments: +! strict Whether checking for unknown flags is required +! dyn_strings Whether dynamic string lengths are allowed +! +subroutine add_placeholder( strict, dyn_strings ) + logical, intent(in) :: strict + logical, intent(in) :: dyn_strings + + integer :: idx1 + integer :: idx2 + + character(len=32) :: tag + character(len=20) :: optional + + idx1 = xml_find_attrib( attribs, noattribs, 'tag', tag ) + if ( idx1 .le. 0 ) then + write( 20, * ) 'Placeholder definition found which has no tag name' + error = .true. + endif + + optional = 'no' + idx2 = xml_find_attrib( attribs, noattribs, 'optional', optional ) + + if ( optional .eq. 'yes' ) then + if ( begin_loop ) then + call add_begin_loop( .false., .false. ) + endif + write( luloop, '(a)' ) & + ' case('''//trim(tag)//''')',& + ' ! Simply ignore the tag' + else + no_placeholders = no_placeholders + 1 + placeholder(no_placeholders) = tag + + write( luloop, '(a)' ) & + ' case('''//trim(tag)//''')',& + &' call read_xml_place_'//trim(tag)//'( info, &', & + &' tag, attribs, noattribs, data, nodata )' + comp = .false. + + ! + ! We need a new set of temporary files + ! + call open_tmp_files( luprolog+notmps ) + + ! + ! Write the first part of the routine + ! NOTE: + ! Will require an extra argument when collecting all variables + ! in one derived type + ! + write( luprolog, '(a)' ) & + & 'subroutine read_xml_place_'//trim(tag)//& + & '( info, starttag, attribs, noattribs, data, nodata )' ,& + & ' type(XML_PARSE) :: info' ,& + & ' character(len=*), intent(in) :: starttag',& + & ' character(len=*), dimension(:,:), intent(inout) :: attribs',& + & ' integer, intent(inout) :: noattribs',& + & ' character(len=*), dimension(:), intent(inout) :: data ',& + & ' integer, intent(inout) :: nodata ',& + & ' ' ,& + & ' logical :: error ',& + & ' logical :: endtag ' + if ( dyn_strings ) then + write( luprolog, '(a)' ) & + & ' character(len=len(starttag)) :: tag ' + else + write( luprolog, '(a)' ) & + & ' character(len=80) :: tag ' + endif + + begin_loop = .true. + + call add_end_loop + + endif +end subroutine add_placeholder + +! close_placeholder -- +! Routine to write the last code fragments for a placeholder +! Arguments: +! None +! +subroutine close_placeholder + + write( luend, '(a)' ) & + & 'end subroutine read_xml_place_'//trim(placeholder(no_placeholders)) + call append_files( luprolog ) + call close_tmp_files + + no_placeholders = no_placeholders - 1 + +end subroutine close_placeholder + +end program diff --git a/sorc/ncep_post.fd/ALLOCATE_ALL.f b/sorc/ncep_post.fd/ALLOCATE_ALL.f index de0f38e6a..8dd4e2b24 100644 --- a/sorc/ncep_post.fd/ALLOCATE_ALL.f +++ b/sorc/ncep_post.fd/ALLOCATE_ALL.f @@ -90,6 +90,7 @@ SUBROUTINE ALLOCATE_ALL() allocate(F_rain(im,jsta_2l:jend_2u,lm)) allocate(F_RimeF(im,jsta_2l:jend_2u,lm)) allocate(QQW(im,jsta_2l:jend_2u,lm)) + allocate(QRIMEF(im,jsta_2l:jend_2u,lm)) allocate(QQI(im,jsta_2l:jend_2u,lm)) allocate(QQR(im,jsta_2l:jend_2u,lm)) allocate(QQS(im,jsta_2l:jend_2u,lm)) @@ -115,6 +116,9 @@ SUBROUTINE ALLOCATE_ALL() allocate(radius_cloud(im,jsta_2l:jend_2u,lm)) allocate(radius_ice(im,jsta_2l:jend_2u,lm)) allocate(radius_snow(im,jsta_2l:jend_2u,lm)) +! KRS: HWRF Addition for thompson reflectivity +! or non-ferrier physics. wrf-derived + allocate(REFL_10CM(im,jsta_2l:jend_2u,lm)) !GFS FIELD allocate(o3(im,jsta_2l:jend_2u,lm)) allocate(o(im,jsta_2l:jend_2u,lm)) @@ -404,6 +408,8 @@ SUBROUTINE ALLOCATE_ALL() allocate(cldwork(im,jsta_2l:jend_2u)) allocate(gtaux(im,jsta_2l:jend_2u)) allocate(gtauy(im,jsta_2l:jend_2u)) + allocate(cd10(im,jsta_2l:jend_2u)) + allocate(ch10(im,jsta_2l:jend_2u)) allocate(mdltaux(im,jsta_2l:jend_2u)) allocate(mdltauy(im,jsta_2l:jend_2u)) allocate(runoff(im,jsta_2l:jend_2u)) diff --git a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f index 0e24cdb05..7392f8cf3 100644 --- a/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f +++ b/sorc/ncep_post.fd/CALRAD_WCLOUD_newcrtm.f @@ -13,6 +13,7 @@ SUBROUTINE CALRAD_WCLOUD ! FUNCTION EFFR TO COMPUTE EFFECTIVE PARTICLE RADII ! CHANNEL SELECTION USING LVLS FROM WRF_CNTRL.PARM ! 19-04-01 Sharon NEBUDA - Added output option for GOES-16 & GOES-17 ABI IR Channels 7-16 + ! 20-04-09 Tracy Hertneky - Added Himawari-8 AHI CH7-CH16 ! ! USAGE: CALL MDLFLD ! INPUT ARGUMENT LIST: @@ -121,7 +122,7 @@ SUBROUTINE CALRAD_WCLOUD ! integer,parameter:: n_clouds = 4 integer,parameter:: n_aerosols = 0 ! Add your sensors here - integer(i_kind),parameter:: n_sensors=21 + integer(i_kind),parameter:: n_sensors=22 character(len=20),parameter,dimension(1:n_sensors):: sensorlist= & (/'imgr_g15 ', & 'imgr_g13 ', & @@ -143,29 +144,31 @@ SUBROUTINE CALRAD_WCLOUD 'imgr_insat3d ', & 'abi_gr ', & 'abi_g16 ', & - 'abi_g17 '/) - character(len=12),parameter,dimension(1:n_sensors):: obslist= & - (/'goes_img ', & - 'goes_img ', & - 'goes_img ', & - 'goes_img ', & - 'amsre ', & - 'tmi ', & - 'ssmi ', & - 'ssmi ', & - 'ssmi ', & - 'ssmis ', & - 'ssmis ', & - 'ssmis ', & - 'ssmis ', & - 'ssmis ', & - 'seviri ', & - 'imgr_mt2 ', & - 'imgr_mt1r ', & - 'imgr_insat3d', & - 'abi ', & - 'abi ', & - 'abi '/) + 'abi_g17 ', & + 'ahi_himawari8 '/) + character(len=13),parameter,dimension(1:n_sensors):: obslist= & + (/'goes_img ', & + 'goes_img ', & + 'goes_img ', & + 'goes_img ', & + 'amsre ', & + 'tmi ', & + 'ssmi ', & + 'ssmi ', & + 'ssmi ', & + 'ssmis ', & + 'ssmis ', & + 'ssmis ', & + 'ssmis ', & + 'ssmis ', & + 'seviri ', & + 'imgr_mt2 ', & + 'imgr_mt1r ', & + 'imgr_insat3d ', & + 'abi ', & + 'abi ', & + 'abi ', & + 'ahi_himawari8'/) character(len=20),dimension(1:n_sensors):: sensorlist_local ! integer(i_kind) sensorindex @@ -196,7 +199,7 @@ SUBROUTINE CALRAD_WCLOUD real,parameter:: constoz = 604229.0_r_kind real sublat,sublon real RHO,RHOX - character(12)::obstype + character(13)::obstype character(20)::isis character(20)::isis_local @@ -209,6 +212,7 @@ SUBROUTINE CALRAD_WCLOUD logical micrim,microwave logical post_abig16, post_abig17, post_abigr ! if true, user requested at least one abi channel logical fix_abig16, fix_abig17 ! if true, abi_g16, abi_g17 fix files are available + logical post_ahi8 ! if true, user requested at least on ahi channel (himawari8) ! logical,dimension(nobs):: luse logical, parameter :: debugprint = .false. type(crtm_atmosphere_type),dimension(1):: atmosphere @@ -286,13 +290,17 @@ SUBROUTINE CALRAD_WCLOUD do n = 958, 958+9 ! 958 set in RQSTFLD.f if (iget(n) > 0) post_abigr=.true. enddo + post_ahi8=.false. + do n = 969, 969+9 ! 969 set in RQSTFLD.f + if (iget(n) > 0) post_ahi8=.true. + enddo ! DO NOT FORGET TO ADD YOUR NEW IGET HERE (IF YOU'VE ADDED ONE) ! START SUBROUTINE CALRAD. ifactive: if (iget(327) > 0 .or. iget(328) > 0 .or. iget(329) > 0 & .or. iget(330) > 0 .or. iget(446) > 0 .or. iget(447) > 0 & - .or. iget(448) > 0 .or. iget(449) > 0 .or. iget(456) > 0 & + .or. iget(448) > 0 .or. iget(449) > 0 .or. iget(456) > 0 & .or. iget(457) > 0 .or. iget(458) > 0 .or. iget(459) > 0 & .or. iget(460) > 0 .or. iget(461) > 0 .or. iget(462) > 0 & .or. iget(463) > 0 .or. iget(483) > 0 .or. iget(484) > 0 & @@ -326,7 +334,8 @@ SUBROUTINE CALRAD_WCLOUD .or. iget(871) > 0 .or. iget(872) > 0 .or. iget(873) > 0 & .or. iget(874) > 0 .or. iget(875) > 0 .or. iget(876) > 0 & .or. iget(877) > 0 .or. iget(878) > 0 .or. iget(879) > 0 & - .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 & + .or. iget(880) > 0 .or. iget(881) > 0 .or. iget(882) > 0 & + .or. post_ahi8 & .or. post_abig16 .or. post_abig17 .or. post_abigr ) then ! specify numbers of cloud species @@ -338,6 +347,9 @@ SUBROUTINE CALRAD_WCLOUD else if(imp_physics==8 .or. imp_physics==6 .or. imp_physics==2 & .or. imp_physics==28 .or. imp_physics==11)then n_clouds=5 + else + n_clouds=0 + print*,'Warning: number of cloud species (n_clouds) being set to zero for imp_physics=',imp_physics end if ! Initialize debug print gridpoint index to middle of tile: @@ -358,7 +370,7 @@ SUBROUTINE CALRAD_WCLOUD czen(i,j)=cos(sun_zenith_rad) end do end do - if(jj>=jsta .and. jj<=jend.and.debugprint) & + if(jj>=jsta .and. jj<=jend.and.debugprint) & print*,'sample GFS zenith angle=',acos(czen(ii,jj))*rtd ! end if ! Initialize CRTM. Load satellite sensor array. @@ -430,6 +442,20 @@ SUBROUTINE CALRAD_WCLOUD endif endif + ! Himawari-8 AHI infrared + if(post_ahi8)then + nchanl=0 + do n = 969, 969+9 ! 969 set in RQSTFLD.f + if (iget(n) > 0) then + nchanl = nchanl+1 + endif + enddo + if (nchanl > 0 .and. nchanl <10) then + do n = 969, 969+9 ! 969 set in RQSTFLD.f + if (iget(n) == 0) channelinfo(22)%Process_Channel(n-969+1)=.False. ! turn off channel processing + enddo + endif + endif ! SSMI, F13-F15 (19H,19V,??H,37H,37V,85H,85V) if(iget(800)>0)then @@ -470,9 +496,14 @@ SUBROUTINE CALRAD_WCLOUD call select_channels_L(channelinfo(17),4,(/ 1,2,3,4 /),lvls(1:4,iget(864)),iget(864)) endif ! INSAT 3D (Kalpana) - if(iget(864)>0)then + if(iget(865)>0)then call select_channels_L(channelinfo(18),4,(/ 1,2,3,4 /),lvls(1:4,iget(865)),iget(865)) endif + ! Himiwari-8 AHI infrared + if(iget(969)>0)then + call select_channels_L(channelinfo(19),10,(/1,2,3,4,5,6,7,8,9,10/),lvls(1:10,iget(969)),iget(969)) + endif + ! Loop over data types to process sensordo: do isat=1,n_sensors @@ -509,7 +540,8 @@ SUBROUTINE CALRAD_WCLOUD (isis=='abi_g16' .and. post_abig16) .OR. & (isis=='abi_g17' .and. post_abig17) .OR. & (isis=='abi_gr' .and. post_abigr) .OR. & - (isis=='seviri_m10' .and. iget(876)>0) )then + (isis=='seviri_m10' .and. iget(876)>0) .OR. & + (isis=='ahi_himawari8' .and. post_ahi8) )then if(me==0)print*,'obstype, isis= ',obstype,isis ! isis='amsua_n15' @@ -1228,6 +1260,7 @@ SUBROUTINE CALRAD_WCLOUD (isis=='abi_g16' .and. post_abig16) .OR. & (isis=='abi_g17' .and. post_abig17) .OR. & (isis=='seviri_m10' .and. iget(876)>0) .OR. & + (isis=='ahi_himawari8' .and. post_ahi8) .OR. & (isis=='imgr_g12' .and. (iget(456)>0 .or. & iget(457)>0 .or. iget(458)>0 .or. iget(459)>0)) .or. & (isis=='imgr_g11' .and. (iget(460)>0 .or. & @@ -1268,6 +1301,9 @@ SUBROUTINE CALRAD_WCLOUD else if(isis=='imgr_insat3d') then sublat=0.0 sublon=74.0 + else if(isis=='ahi_himawari8') then + sublat=0.0 + sublon=140.7 end if ! use zenith angle = 53.1 for SSMI and SSMIS: @@ -2089,6 +2125,29 @@ SUBROUTINE CALRAD_WCLOUD endif enddo ! channel loop end if ! end of outputting goes 17 + if(isis=='ahi_himawari8') then ! writing Himawari-8 AHI to grib + do ichan=1,10 + igot=iget(968+ichan) + if(igot>0)then + do j=jsta,jend + do i=1,im + grid1(i,j)=tb(i,j,ichan) + enddo + enddo + id(1:25) = 0 + id(02) = 2 + id(08) = 118 + id(09) = 109 + if(grib=="grib1") then + call gribit(igot,28000+ichan, grid1,im,jm) + else if(grib=="grib2" )then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(igot) + datapd(1:im,1:jend-jsta+1,cfld)=grid1(1:im,jsta:jend) + endif + endif + enddo + endif ! end of outputting himawari-8 ahi end if nonnadir ! end if for computing simulated radiance with zenith angle correction @@ -2122,7 +2181,7 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & ! JASON OTKIN AND WILLIAM LEWIS ! 09 DECEMBER 2014 - use params_mod, only: pi, rd, d608 + use params_mod, only: pi, rd, d608, rg implicit none @@ -2174,7 +2233,7 @@ REAL FUNCTION EFFR(pmid,t,q,qqw,qqi,qqr,f_rimef, nlice, nrain, & real, parameter :: min_c=2.e-6, min_r=20.e-6, min_i=4.e-6,min_s=20.e-6, min_g=20.e-6 real, parameter :: max_c=1.e-2, max_r=1.e-2, max_i=1.e-3,max_s=2.e-2, max_g=5.e-0 - real :: rg, am_g, bm_g, mu_g + real :: am_g, bm_g, mu_g real :: cgg(3), cge(3), oge1, obmg, ogg1, ogg2 double precision :: no_exp, no_min, lm_exp, lamg, lamc, lamr, lami, lams diff --git a/sorc/ncep_post.fd/DEALLOCATE.f b/sorc/ncep_post.fd/DEALLOCATE.f index 753919d5a..f7b104f60 100644 --- a/sorc/ncep_post.fd/DEALLOCATE.f +++ b/sorc/ncep_post.fd/DEALLOCATE.f @@ -85,6 +85,7 @@ SUBROUTINE DE_ALLOCATE deallocate(F_rain) deallocate(F_RimeF) deallocate(QQW) + deallocate(QRIMEF) deallocate(QQI) deallocate(QQR) deallocate(QQS) @@ -105,6 +106,9 @@ SUBROUTINE DE_ALLOCATE deallocate(DBZC) deallocate(mcvg) deallocate(NLICE) +! KRS: HWRF addition for thompson reflectivity +! or non-ferrier physics. wrf-derived + deallocate(REFL_10CM) ! Wm Lewis: added deallocate(NRAIN) deallocate(radius_cloud) @@ -115,6 +119,8 @@ SUBROUTINE DE_ALLOCATE deallocate(o) deallocate(o2) deallocate(tcucns) + if(allocated(cd10)) deallocate(cd10) + if(allocated(ch10)) deallocate(ch10) ! Add GFS d3d fields if (d3d_on) then deallocate(vdifftt) diff --git a/sorc/ncep_post.fd/ETAMP_Q2F.f b/sorc/ncep_post.fd/ETAMP_Q2F.f new file mode 100644 index 000000000..b1eaa05b7 --- /dev/null +++ b/sorc/ncep_post.fd/ETAMP_Q2F.f @@ -0,0 +1,43 @@ + SUBROUTINE ETAMP_Q2F(QRIMEF,QQI,QQR,QQW,CWM,F_RAIN,F_ICE,F_RIMEF,T) + ! This subroutine is to be used with the WRF "advected Ferrier + ! scheme" to calculate the F_ICE, F_RIMEF and F_RAIN arrays from + ! the QQW, QQR, QQI and the input array QRIMEF. + use CTLBLK_mod, only: lm,im,jsta,jend,jsta_2l,jend_2u + implicit none + + real, intent(in),dimension(im,jsta_2l:jend_2u,lm) :: & + QRIMEF,QQW,QQR,QQI, T + + real, intent(out),dimension(im,jsta_2l:jend_2u,lm) :: & + f_rain,f_ice,f_rimef,CWM + + integer :: i,j,l + real :: qt + + ! NOTE: these parameters must match the WRF Ferrier scheme. + ! They're wrong elsewhere in the post: + real, parameter :: t_ice=-40., t0c=273.15, t_icek=233.15 + real, parameter :: epsq=1.e-12 + + bigl: do l=1,lm + bigj: do j=jsta,jend + bigi: do i=1,im + QT=QQW(I,J,L)+QQR(I,J,L)+QQI(I,J,L) + CWM(i,j,l)=QT + if(QQI(i,j,l)<=EPSQ) then + f_ice(i,j,l)=0. + f_rimef(i,j,l)=1. + if(T(i,j,l) klim(2) or loops does not run ; klim(2) has a @@ -519,7 +519,7 @@ subroutine mxwind(km,p,u,v,t,h,pmw,umw,vmw,tmw,hmw) real spd(km),spdmw,wmw,dhd,dhu,shrd,shru,dhmw,ub,vb,spdb ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! find maximum wind level - call rsearch1(km,p(1),2,pmwlim(1),klim(1)) + call rsearch1(km,p(1),2,pmwlim,klim) ! klim(1)=klim(1)+1 klim(2)=klim(2)+1 ! spd(klim(1):klim(2))=sqrt(u(klim(1):klim(2))**2+v(klim(1):klim(2))**2) diff --git a/sorc/ncep_post.fd/GRIBIT.F b/sorc/ncep_post.fd/GRIBIT.F index 848b787ff..6d1fb395c 100644 --- a/sorc/ncep_post.fd/GRIBIT.F +++ b/sorc/ncep_post.fd/GRIBIT.F @@ -92,7 +92,7 @@ SUBROUTINE GRIBIT(IFLD,ILVL,GRID,IMOUT,JMOUT) CHARACTER*255 FNAME,FNAME_S,OPATH,PGBOUT,IPVOUT,D3DOUT CHARACTER*90 CMD character CFHOUR*40,CFORM*40 - integer ndig + integer ndig,maskBorderX,maskBorderY INTEGER IBDSFL(9) INTEGER IGRD(IM,JM),IBMASK(IM,JM) REAL GRIDO(IM,JM) @@ -200,7 +200,7 @@ SUBROUTINE GRIBIT(IFLD,ILVL,GRID,IMOUT,JMOUT) AGMT0 = IHRST ID(01) = 28 IF ( (ID(2).NE.129) .AND. (ID(2).NE.130) .AND. & - (ID(2).NE.133) .AND. (ID(2).NE.141) ) THEN + (ID(2).NE.133) .AND. (ID(2).NE.141) .AND. (ID(2).NE.128) ) THEN ID(2) = 2 END IF @@ -467,8 +467,27 @@ SUBROUTINE GRIBIT(IFLD,ILVL,GRID,IMOUT,JMOUT) ! set bitmap ! DO J=1,JMOUT ! DO I=1,IMOUT - DO J=1,JM - DO I=1,IM + + bitmap203grid: if(maptype==203) then + ! WRF-NMM has no data for certain fields at the boundary. + ! This code masks out the outermost rows and columns. This + ! is also consistent with the upscale feedback within + ! WRF-NMM, which does not feed back data to the outermost + ! parent two rows and one column. + maskBorderX=2 + maskBorderY=3 + else + ! No mask border for other models. + maskBorderX=0 + maskBorderY=0 + endif bitmap203grid + + if(maskBorderX/=0 .or. maskBorderY/=0) then + ibmap=0 ! fill border regions lazily when borders are enabled. + endif + + DO J=maskBorderY+1,JM-maskBorderY + DO I=maskBorderX+1,IM-maskBorderY IF(ABS(GRIDO(I,J)-SPVAL).GT.SMALL) THEN ibmap(i,j) = 1 ibitm = ibitm+1 diff --git a/sorc/ncep_post.fd/INITPOST.F b/sorc/ncep_post.fd/INITPOST.F index 90aa41557..1fc0db4e8 100644 --- a/sorc/ncep_post.fd/INITPOST.F +++ b/sorc/ncep_post.fd/INITPOST.F @@ -45,7 +45,7 @@ SUBROUTINE INITPOST use vrbls4d, only: dust, smoke use vrbls3d, only: t, u, uh, v, vh, wh, q, pmid, t, omga, pint, alpint, & qqr, qqs, qqi, qqg, qqnw, qqni,qqnr, cwm, qqw, qqi, qqr, qqs, extcof55,& - f_ice, f_rain, f_rimef, q2, zint, zmid, cfr, cfr_raw, REF_10CM, & + f_ice, f_rain, f_rimef, q2, zint, zmid, ttnd, cfr, cfr_raw, REF_10CM,& qqnwfa,qqnifa,taod5503d,aextc55 use vrbls2d, only: tmax, qrmax, htop, hbot, cuppt, fis, cfrach, cfracl, & sr, cfrach, cfracm, wspd10max, w_up_max, w_dn_max, w_mean, refd_max, & @@ -69,7 +69,7 @@ SUBROUTINE INITPOST ivgtyp, isltyp, islope, pblh, pblhgust, f, & QVl1,REFC_10CM,REF1KM_10CM,REF4KM_10CM, & SWRADmean,U10mean,V10mean,SPDUV10mean,SWNORMmean,SNFDEN,SNDEPAC, & - hbotd,hbots + hbotd,hbots,htopd,htops use soil, only: smc, sh2o, stc, sldpth, sllevel use masks, only: lmv, lmh, vtm, sice, gdlat, gdlon, sm, dx, dy, htm use ctlblk_mod, only: jsta_2l, jend_2u, filename, datahandle, datestr, & @@ -146,6 +146,10 @@ SUBROUTINE INITPOST gridtype='A' hbotd=0 hbots=0 + htopd=0 + htops=0 + ttnd=0 + qs=0 ! STEP 1. READ MODEL OUTPUT FILE ! ! @@ -469,6 +473,7 @@ SUBROUTINE INITPOST ! extinction coef for aerosol extcof55=0. + aextc55=0. if(imp_physics.ne.5 .and. imp_physics.ne.0)then VarName='QCLOUD' @@ -534,7 +539,7 @@ SUBROUTINE INITPOST dummy(i,j)=dum3d(i,j,l) end do end do - print*,'max rain water= ',l,maxval(dummy) +! print*,'max rain water= ',l,maxval(dummy) end do ! if(jj.ge. jsta .and. jj.le.jend) ! + print*,'sample QRAIN= ',qqr(ii,jj,ll) @@ -569,7 +574,7 @@ SUBROUTINE INITPOST dummy(i,j)=dum3d(i,j,l) end do end do - print*,'max snow= ',l,maxval(dummy) +! print*,'max snow= ',l,maxval(dummy) end do end if diff --git a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f index 203955766..114b17525 100644 --- a/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f +++ b/sorc/ncep_post.fd/INITPOST_GFS_NETCDF.f @@ -135,7 +135,7 @@ SUBROUTINE INITPOST_GFS_NETCDF(ncid3d) ! DECLARE VARIABLES. ! ! REAL fhour - integer nfhour ! forecast hour from nems io file +! integer nfhour ! forecast hour from nems io file integer fhzero !bucket real dtp !physics time step REAL RINC(5) @@ -573,7 +573,7 @@ SUBROUTINE INITPOST_GFS_NETCDF(ncid3d) deallocate(glat1d,glon1d) print*,'idate = ',(idate(i),i=1,7) - !print*,'nfhour = ',nfhour +! print*,'nfhour = ',nfhour ! sample print point ii = im/2 diff --git a/sorc/ncep_post.fd/INITPOST_NEMS.f b/sorc/ncep_post.fd/INITPOST_NEMS.f index 25302eba2..bf771c6c9 100644 --- a/sorc/ncep_post.fd/INITPOST_NEMS.f +++ b/sorc/ncep_post.fd/INITPOST_NEMS.f @@ -35,7 +35,8 @@ SUBROUTINE INITPOST_NEMS(NREC,nfile) use vrbls3d, only: t, q, uh, vh, q2, cwm, f_ice, f_rain, f_rimef, cfr, pint,& pint, alpint, pmid, pmidv, zint, zmid, wh, rlwtt, rswtt,& ttnd, tcucn, train, el_pbl, exch_h, omga, qqni, qqnr, qqw, qqi, & - qqr, qqs, qqg, REF_10CM, radius_cloud, radius_ice, radius_snow + qqr, qqs, qqg, REF_10CM, radius_cloud, radius_ice, radius_snow, & + extcof55, aextc55 use vrbls2d, only: f, pd, fis, pblh, mixht, ustar, z0, ths, qs, twbs, qwbs, prec,& acprec, cuprec,ancprc, lspa, sno, snoavg, psfcavg, t10avg, t10m, akhsavg, akmsavg,& refd_max, w_up_max, w_dn_max, up_heli_max, si, cldefi, th10, q10, pshltr,& @@ -337,6 +338,14 @@ SUBROUTINE INITPOST_NEMS(NREC,nfile) print*,'new start yr mo day hr min =',sdat(3),sdat(1) & ,sdat(2),ihrst,imin END IF + + +!KRF: Initialize extinction coef for aerosol to zero to avoid failure. +! These are not in NEMS model output, but new CALVIS_GSD methods uses +! these fields from ARW, and if not initialized here will cause failure. + extcof55=0. + aextc55=0. + !Chuang: set default to Ferrier's MP scheme. NPS does not write MP option !used in model to nemsio output VarName='mp_physi' diff --git a/sorc/ncep_post.fd/INITPOST_NMM.f b/sorc/ncep_post.fd/INITPOST_NMM.f index 962e12f6c..f3e35488d 100644 --- a/sorc/ncep_post.fd/INITPOST_NMM.f +++ b/sorc/ncep_post.fd/INITPOST_NMM.f @@ -48,7 +48,7 @@ SUBROUTINE INITPOST_NMM use vrbls3d, only: t, u, uh, v, vh, q, cwm, f_ice, f_rain, f_rimef, q,& qqw, qqr, qqs, qqi, qqg, qqw, cwm , q2, wh, pint, alpint, pmid,& omga, pmidv, zmid, rlwtt, rswtt, ttnd, tcucn, train, exch_h,& - el_pbl, cfr, zint, REF_10CM, qqni, qqnr + el_pbl, cfr, zint, REF_10CM, qqni, qqnr, qrimef use vrbls2d, only: fis, cfrach, cfracl, cfracm, u10h, u10, v10h, v10,th10,& q10, tshltr, qshltr, pshltr, smstav, smstot, acfrcv, acfrst, ncfrcv,& ncfrst, ssroff, bgroff, sfcevp, sfcexc, vegfrc, acsnow, acsnom,& @@ -59,7 +59,7 @@ SUBROUTINE INITPOST_NMM hbots, sr, rswin, rswinc, czen, tg, soiltb, twbs, sfcshx, qwbs,& sfclhx, grnflx, subshx, potevp, sno, si, pctsno, ivgtyp, isltyp,& islope, albedo, albase, mxsnal, epsr, f, REFC_10CM, REFD_MAX, & - RSWTOA, SWUPT, ACSWUPT, SWDNT, ACSWDNT + RSWTOA, SWUPT, ACSWUPT, SWDNT, ACSWDNT, CD10, CH10 use soil, only: smc, sh2o, stc, sldpth, sllevel use masks, only: lmv, lmh, htm, vtm, hbm2, sm, sice, gdlat, gdlon, dx, dy use params_mod, only: tfrz, g, rd, d608, rtd, dtr, erad @@ -375,7 +375,8 @@ SUBROUTINE INITPOST_NMM print*,'MP_PHYSICS= ',imp_physics ! Initializes constants for Ferrier microphysics - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then + if(imp_physics==5 .or. imp_physics==15 .or. imp_physics==85 & + .or. imp_physics==95)then CALL MICROINIT(imp_physics) end if @@ -422,7 +423,7 @@ SUBROUTINE INITPOST_NMM ! print*,'REFD_MAX at ',ii,jj,' = ',REFD_MAX(ii,jj) ! END KRF - if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then + if(imp_physics==5 .or. imp_physics==15 .or. imp_physics==85 .or. imp_physics==95)then VarName='Q' call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & @@ -438,6 +439,26 @@ SUBROUTINE INITPOST_NMM print*,'finish reading specific humidity' if(jj.ge. jsta .and. jj.le.jend)print*,'sample Q= ',Q(ii,jj,ll) + else + VarName='QVAPOR' + call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & + IM+1,1,JM+1,LM+1,IM,JS,JE,LM) + do l = 1, lm + do j = jsta_2l, jend_2u + do i = 1, im +! q ( i, j, l ) = dum3d ( i, j, l ) +! if(l.eq.1)print*,'Debug: I,J,Q= ',i,j,q( i, j, l ) +!CHC CONVERT MIXING RATIO TO SPECIFIC HUMIDITY + if (dum3d(i,j,l) .lt. 10E-12) dum3d(i,j,l) = 10E-12 + q ( i, j, l ) = dum3d ( i, j, l )/(1.0+dum3d ( i, j, l )) + end do + end do + end do + print*,'finish reading specific humidity' + if(jj.ge. jsta .and. jj.le.jend)print*,'sample Q= ',Q(ii,jj,ll) + endif + + if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then VarName='CWM' !????? call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & IM+1,1,JM+1,LM+1,IM,JS,JE,LM) @@ -487,23 +508,6 @@ SUBROUTINE INITPOST_NMM cwm=spval !make sure set F_RimeF=spval !make sure set - VarName='QVAPOR' - call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & - IM+1,1,JM+1,LM+1,IM,JS,JE,LM) - do l = 1, lm - do j = jsta_2l, jend_2u - do i = 1, im -! q ( i, j, l ) = dum3d ( i, j, l ) -! if(l.eq.1)print*,'Debug: I,J,Q= ',i,j,q( i, j, l ) -!CHC CONVERT MIXING RATIO TO SPECIFIC HUMIDITY - if (dum3d(i,j,l) .lt. 10E-12) dum3d(i,j,l) = 10E-12 - q ( i, j, l ) = dum3d ( i, j, l )/(1.0+dum3d ( i, j, l )) - end do - end do - end do - print*,'finish reading specific humidity' - if(jj.ge. jsta .and. jj.le.jend)print*,'sample Q= ',Q(ii,jj,ll) - if(imp_physics/=0)then VarName='QCLOUD' call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & @@ -546,6 +550,20 @@ SUBROUTINE INITPOST_NMM if(jj.ge. jsta .and. jj.le.jend)print*,'sample qqi= ' & ,Qqi(ii,jj,ll) + if(imp_physics==15) then + VarName='QRIMEF' + call getVariable(fileName,DateStr,DataHandle,VarName,DUM3D, & + IM+1,1,JM+1,LM+1,IM,JS,JE,LM) + do l = 1, lm + do j = jsta_2l, jend_2u + do i = 1, im + qrimef ( i, j, l ) = dum3d ( i, j, l ) + end do + end do + end do + end if + if(jj.ge. jsta .and. jj.le.jend)print*,'sample qrimef= ' & + ,Qrimef(ii,jj,ll) if(imp_physics.ne.0)then VarName='QRAIN' @@ -1202,6 +1220,26 @@ SUBROUTINE INITPOST_NMM end do ! print*,'SFCEVP at ',ii,jj,' = ',SFCEVP(ii,jj) + VarName='CD10' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY,& + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + CD10( i, j ) = dummy ( i, j ) + end do + end do +! print*,'CD10 at ',ii,jj,' = ',CD10(ii,jj) + + VarName='CH10' + call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY,& + IM,1,JM,1,IM,JS,JE,1) + do j = jsta_2l, jend_2u + do i = 1, im + CH10( i, j ) = dummy ( i, j ) + end do + end do +! print*,'CD10 at ',ii,jj,' = ',CD10(ii,jj) + VarName='SFCEXC' call getVariable(fileName,DateStr,DataHandle,VarName,DUMMY, & IM,1,JM,1,IM,JS,JE,1) @@ -2260,6 +2298,11 @@ SUBROUTINE INITPOST_NMM 1,1,1,1,1,1,1,1) print*,'NHEAT= ',NHEAT + ! Compute f_* arrays from q* arrays + if(imp_physics==15) then + print *,'Convert from Q arrays to F arrays for advected Ferrier.' + call etamp_q2f(QRIMEF,QQI,QQR,QQW,CWM,F_RAIN,F_ICE,F_RIMEF,T) + endif ! ! ncdump -h @@ -2412,10 +2455,14 @@ SUBROUTINE INITPOST_NMM ! if(submodelname == 'NEST') then print *,'NMM NEST mode: use projection center as projection center' - else + elseif(submodelname == 'MOAD') then print *,'NMM MOAD mode: use domain center as projection center' CENLAT=NINT(DCENLAT*1000) CENLON=NINT(DCENLON*1000) + elseif(i_parent_start>1 .or. j_parent_start>1) then + print *,'No submodel specified for nested domain. Using projection center as projection center.' + else + print *,'No submodel specified for MOAD. Using domain center as projection center' endif diff --git a/sorc/ncep_post.fd/MDLFLD.f b/sorc/ncep_post.fd/MDLFLD.f index 30e879f16..68e52a83f 100644 --- a/sorc/ncep_post.fd/MDLFLD.f +++ b/sorc/ncep_post.fd/MDLFLD.f @@ -3346,7 +3346,7 @@ SUBROUTINE MDLFLD fld_info(cfld)%lvl=LVLSXML(1,IGET(410)) datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif - ENDIF + ENDIF ! ! --- RADAR REFLECT - 1km ! diff --git a/sorc/ncep_post.fd/MICROINIT.F b/sorc/ncep_post.fd/MICROINIT.F index 78922916b..e58c8ed30 100644 --- a/sorc/ncep_post.fd/MICROINIT.F +++ b/sorc/ncep_post.fd/MICROINIT.F @@ -49,7 +49,7 @@ SUBROUTINE MICROINIT(imp_physics) ! !--- READ IN MASSI FROM LOOKUP TABLES ! - if(imp_physics==5)then + if(imp_physics==5 .or. imp_physics==15)then !-- Changes associated with the Ferrier-Aligo microphysics in NMMB: ! NLImax is now defined internally and FLARGE2 is no longer used. RHgrd=0.98 diff --git a/sorc/ncep_post.fd/RQSTFLD.F b/sorc/ncep_post.fd/RQSTFLD.F index 50410d134..a28162a0a 100644 --- a/sorc/ncep_post.fd/RQSTFLD.F +++ b/sorc/ncep_post.fd/RQSTFLD.F @@ -25,7 +25,7 @@ module RQSTFLD_mod implicit none ! ! increase MXFLD each time you add a new field - INTEGER, PARAMETER :: MXFLD=975 + INTEGER, PARAMETER :: MXFLD=999 #ifdef COMMCODE INTEGER, PARAMETER :: MXLVL=70 #else @@ -2465,7 +2465,13 @@ module RQSTFLD_mod DATA IFILV(911),AVBL(911),IQ(911),IS(911),AVBLGRB2(911) & & /1,'VTEMP AT FD HEIGHTS ',012,103, & & 'VTMP ON spec_alt_above_mean_sea_lvl'/ - +! CD and CH exchange coefficients + DATA IFILV(922),AVBL(922),IQ(922),IS(922),AVBLGRB2(922) & + & /1,'10M DRAG EXCH COEF ',252,105, & !table 2 + & '10M SFC DRAG EXCH COEF CD '/ + DATA IFILV(923),AVBL(923),IQ(923),IS(923),AVBLGRB2(923) & + & /1,'10M HEAT EXCH COEF ',144,105, & !table 128 + & '10M SFC HEAT EXCH COEF CH '/ ! Add GOES-16 & GOES-17 ABI IR Channels 7-16 ! Grib2 defines each channel as a separate output field DATA IFILV(927),AVBL(927),IQ(927),IS(927),AVBLGRB2(927) & @@ -2615,7 +2621,38 @@ module RQSTFLD_mod DATA IFILV(968),AVBL(968),IQ(968),IS(968),AVBLGRB2(968) & & /1,'SEA ICE SKI TEMPERATURE ',080,001, & & 'ICETMP ON surface'/ - +! LVLS-DRIVEN CHANNEL SELECTION (L(1)-L(10)> CRTM CH1-CH10 > AHI CH7-16) +! HWRF satellite additions: Himawari-8, replacement for MTSAT-2 + DATA IFILV(969),AVBL(969),IQ(969),IS(969),AVBLGRB2(969) & + & /1,'HIM-8 AHI CH7 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH7 NON-NADIR BRTEMP'/ + DATA IFILV(970),AVBL(970),IQ(970),IS(970),AVBLGRB2(970) & + & /1,'HIM-8 AHI CH8 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH8 NON-NADIR BRTEMP'/ + DATA IFILV(971),AVBL(971),IQ(971),IS(971),AVBLGRB2(971) & + & /1,'HIM-8 AHI CH9 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH9 NON-NADIR BRTEMP'/ + DATA IFILV(972),AVBL(972),IQ(972),IS(972),AVBLGRB2(972) & + & /1,'HIM-8 AHI CH10 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH10 NON-NADIR BRTEMP'/ + DATA IFILV(973),AVBL(973),IQ(973),IS(973),AVBLGRB2(973) & + & /1,'HIM-8 AHI CH11 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH11 NON-NADIR BRTEMP'/ + DATA IFILV(974),AVBL(974),IQ(974),IS(974),AVBLGRB2(974) & + & /1,'HIM-8 AHI CH12 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH12 NON-NADIR BRTEMP'/ + DATA IFILV(975),AVBL(975),IQ(975),IS(975),AVBLGRB2(975) & + & /1,'HIM-8 AHI CH13 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH13 NON-NADIR BRTEMP'/ + DATA IFILV(976),AVBL(976),IQ(976),IS(976),AVBLGRB2(976) & + & /1,'HIM-8 AHI CH14 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH14 NON-NADIR BRTEMP'/ + DATA IFILV(977),AVBL(977),IQ(977),IS(977),AVBLGRB2(977) & + & /1,'HIM-8 AHI CH15 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH15 NON-NADIR BRTEMP'/ + DATA IFILV(978),AVBL(978),IQ(978),IS(978),AVBLGRB2(978) & + & /1,'HIM-8 AHI CH16 NNADR',118,109, & !table 130 + & 'HIM-8 AHI CH16 NON-NADIR BRTEMP'/ !end initialization ! diff --git a/sorc/ncep_post.fd/SURFCE.f b/sorc/ncep_post.fd/SURFCE.f index e8bd2a49f..2cd528c96 100644 --- a/sorc/ncep_post.fd/SURFCE.f +++ b/sorc/ncep_post.fd/SURFCE.f @@ -85,7 +85,7 @@ SUBROUTINE SURFCE ,fieldcapa,edir,ecan,etrans,esnow,U10mean,V10mean, & avgedir,avgecan,avgetrans,avgesnow,acgraup,acfrain, & acond,maxqshltr,minqshltr,avgpotevp,AVGPREC_CONT, & - AVGCPRATE_CONT,sst + AVGCPRATE_CONT,sst,ch10,cd10 use soil, only: stc, sllevel, sldpth, smc, sh2o use masks, only: lmh, sm, sice, htm, gdlat, gdlon use physcons_post,only: CON_EPS, CON_EPSM1 @@ -5652,6 +5652,41 @@ SUBROUTINE SURFCE datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) endif ENDIF + + write_cd: IF(IGET(922)>0) THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=CD10(I,J) + ENDDO + ENDDO + if(grib=='grib1') then + ID(1:25) = 0 + ID(2)=2 + ID(11)=10 + CALL GRIBIT(IGET(922),LVLS(1,IGET(922)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(922)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF write_cd + write_ch: IF(IGET(923)>0) THEN + DO J=JSTA,JEND + DO I=1,IM + GRID1(I,J)=CH10(I,J) + ENDDO + ENDDO + if(grib=='grib1') then + ID(1:25) = 0 + ID(11)=10 + ID(2)=128 + CALL GRIBIT(IGET(923),LVLS(1,IGET(923)),GRID1,IM,JM) + elseif(grib=='grib2') then + cfld=cfld+1 + fld_info(cfld)%ifld=IAVBLFLD(IGET(923)) + datapd(1:im,1:jend-jsta+1,cfld)=GRID1(1:im,jsta:jend) + endif + ENDIF write_ch ! ! MODEL OUTPUT SURFACE U AND/OR V COMPONENT WIND STRESS IF ( (IGET(900).GT.0) .OR. (IGET(901).GT.0) ) THEN diff --git a/sorc/ncep_post.fd/VRBLS2D_mod.f b/sorc/ncep_post.fd/VRBLS2D_mod.f index 58ab3d8dc..1ac711a22 100644 --- a/sorc/ncep_post.fd/VRBLS2D_mod.f +++ b/sorc/ncep_post.fd/VRBLS2D_mod.f @@ -29,7 +29,7 @@ module vrbls2d ,RSWINC(:,:),VIS(:,:),PD(:,:),MXSNAL(:,:),MIXHT(:,:) & ,SNONC(:,:),EPSR(:,:),RSWTOA(:,:) & ! HWRF additions - ,MDLTAUX(:,:),MDLTAUY(:,:) & + ,MDLTAUX(:,:),MDLTAUY(:,:),CD10(:,:),CH10(:,:) & ,ACSWUPT(:,:),SWDNT(:,:),ACSWDNT(:,:) & ! NAMB additions ,SNOAVG(:,:),PSFCAVG(:,:),T10AVG(:,:),AKHSAVG(:,:),AKMSAVG(:,:) & diff --git a/sorc/ncep_post.fd/VRBLS3D_mod.f b/sorc/ncep_post.fd/VRBLS3D_mod.f index bdd875198..9ea754df1 100644 --- a/sorc/ncep_post.fd/VRBLS3D_mod.f +++ b/sorc/ncep_post.fd/VRBLS3D_mod.f @@ -16,7 +16,7 @@ module vrbls3d ,T_ADJ(:,:,:) & ,F_ice(:,:,:),F_rain(:,:,:),F_RimeF(:,:,:) & ,QQW(:,:,:), QQI(:,:,:), QQR(:,:,:), QQS(:,:,:), QQG(:,:,:) & - ,QQNW(:,:,:), QQNI(:,:,:),QQNR(:,:,:) & + ,QQNW(:,:,:), QQNI(:,:,:),QQNR(:,:,:), QRIMEF(:,:,:) & ,CFR(:,:,:), DBZ(:,:,:), DBZR(:,:,:), DBZI(:,:,:), DBZC(:,:,:) & ,TTND(:,:,:),RSWTT(:,:,:),RLWTT(:,:,:), REF_10CM(:,:,:) & ,EXCH_H(:,:,:),TRAIN(:,:,:),TCUCN(:,:,:),EL_PBL(:,:,:) & @@ -24,6 +24,8 @@ module vrbls3d !! Wm Lewis: added ,NRAIN(:,:,:) & ,radius_cloud(:,:,:),radius_ice(:,:,:),radius_snow(:,:,:) & +! KRS Add HWRF fields + ,REFL_10CM(:,:,:) & ! Add GFS fields ,O3(:,:,:),O(:,:,:),O2(:,:,:) & ! Add GFS D3D fields diff --git a/sorc/ncep_post.fd/WRFPOST.f b/sorc/ncep_post.fd/WRFPOST.f index 7c68ccca9..133a43301 100644 --- a/sorc/ncep_post.fd/WRFPOST.f +++ b/sorc/ncep_post.fd/WRFPOST.f @@ -389,7 +389,7 @@ PROGRAM WRFPOST end if !Chuang: add dynamical allocation if(TRIM(IOFORM) == 'netcdf') THEN - IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR') THEN + IF(MODELNAME == 'NCAR' .OR. MODELNAME == 'RAPR' .OR. MODELNAME == 'NMM') THEN call ext_ncd_ioinit(SysDepInfo,Status) print*,'called ioinit', Status call ext_ncd_open_for_read( trim(fileName), 0, 0, " ", & diff --git a/sorc/ncep_post.fd/makefile_dtc b/sorc/ncep_post.fd/makefile_dtc index a3473a250..42a46f1bd 100644 --- a/sorc/ncep_post.fd/makefile_dtc +++ b/sorc/ncep_post.fd/makefile_dtc @@ -22,23 +22,21 @@ include ../../configure.upp # directories for shared resources LOCALINC = -I$(INCMOD) -I$(INCMOD)/crtm2 NCDFINC = -I$(NETCDFPATH)/include -WRFINC = -I$(WRF_MODS) GRIB2INC = -I$(GRIB2SUPT_INC) LLIBDIR = -L$(LIBDIR) -GRIB2LIBS = -lg2 -lg2tmpl -lxmlparse $(GRIB2SUPT_LIB) -UPPLIBS = -lnemsio -lsigio -lsfcio -lgfsio -lsp -lw3nco -lw3emc -lbacio -lCRTM $(SERIAL_MPI_LIB) -WRFEXTLIBS = $(WRF_LIB) $(WRF_LIB_EXTRA) $(WRF_LIB2) +UPPLIBS = -lCRTM $(SERIAL_MPI_LIB) -lxmlparse +NCEPLIBS = $(NCEPLIBLIB) $(NCEPLIB_FLAGS) $(GRIB2SUPT_LIB) NCDFLIBS = -L$(NETCDFPATH)/lib $(NETCDFLIBS) -LIBS = $(LLIBDIR) $(UPPLIBS) $(GRIB2LIBS) $(WRFEXTLIBS) $(NCDFLIBS) +LIBS = $(LLIBDIR) $(UPPLIBS) $(GRIB2LIBS) $(NCEPLIBS) $(NCDFLIBS) -MODULES = $(WRF_MODS) +MODULES = # # Compilation / Link Flag Configuration EXTRA_CPPFLAGS = -EXTRA_FFLAGS = -c $(LOCALINC) $(NETCDFINC) $(NCDFINC) +EXTRA_FFLAGS = -c $(LOCALINC) $(NETCDFINC) $(NCDFINC) $(NCEPLIBINC) #EXTRA_LDFLAGS = $(LIBS) -Wl,-Map=lm EXTRA_LDFLAGS = $(LIBS) EXTRA_CFLAGS = -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='long long' @@ -47,12 +45,12 @@ EXTRA_CFLAGS = -Dfunder -DFortranByte=char -DFortranInt=int -DFortranLlong='lo # ----------- # Threaded object files # ----------- -OBJS_FT = wrf_io_flags.o getVariable.o getIVariable.o \ +OBJS_FT = wrf_io_flags.o getVariable.o \ getIVariableN.o kinds_mod.o machine.o physcons.o \ - native_endianness.o count_recs_wrf_binary_file.o \ - inventory_wrf_binary_file.o next_buf.o retrieve_index.o ZENSUN.o \ - CLDFRAC_ZHAO.o GFSPOST.o GETGBANDSCATTER.o \ - blockIO.o initialize_byte_swap_wrf_binary_file.o + native_endianness.o \ + retrieve_index.o ZENSUN.o \ + CLDFRAC_ZHAO.o GFSPOST.o GFSPOSTSIG.o GETGBANDSCATTER.o \ + blockIO.o # ----------- # Non-threaded object files @@ -68,20 +66,21 @@ OBJS_F = VRBLS2D_mod.o VRBLS3D_mod.o VRBLS4D_mod.o MASKS_mod.o PMICRPH.o SOIL_m CALWXT_RAMER.o CALWXT_BOURG.o CALWXT_REVISED.o CALRH_PW.o CALWXT_EXPLICIT.o \ CALWXT_DOMINANT.o CLDRAD.o \ CLMAX.o COLLECT.o COLLECT_LOC.o DEWPOINT.o FDLVL.o FGAMMA.o FIXED.o FRZLVL.o FRZLVL2.o \ - GET_BITS.o GRIBIT.o INITPOST.o LFMFLD.o MAPSSLP.o MISCLN.o MIXLEN.o MDL2P.o \ + GET_BITS.o GRIBIT.o INITPOST.o LFMFLD.o MAPSSLP.o MISCLN.o MDL2STD_P.o MIXLEN.o MDL2P.o ETAMP_Q2F.o \ MDLFLD.o MPI_FIRST.o MPI_LAST.o NGMFLD.o NGMSLP.o OTLFT.o OTLIFT.o SLP_new.o SLP_NMM.o \ EXCH.o PARA_RANGE.o PROCESS.o INITPOST_NMM.o EXCH2.o READCNTRL.o READ_xml.o \ SET_OUTFLDS.o SCLFLD.o SERVER.o \ SETUP_SERVERS.o SMOOTH.o SURFCE.o SPLINE.o TABLE.o TABLEQ.o TRPAUS.o TTBLEX.o WETBULB.o \ WRFPOST.o CALMICT.o MICROINIT.o GPVS.o MDL2SIGMA.o ETCALC.o CANRES.o \ CALGUST.o WETFRZLVL.o SNFRAC.o MDL2AGL.o SNFRAC_GFS.o AVIATION.o DEALLOCATE.o \ - INITPOST_NMM_BIN_MPIIO_READ.o INITPOST_NMM_BIN_MPIIO.o CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o \ + CALPBL.o MDL2SIGMA2.o INITPOST_GFS.o CALRH_GFS.o LFMFLD_GFS.o \ CALRAD_WCLOUD_newcrtm.o MDL2THANDPV.o CALPBLREGIME.o POLEAVG.o INITPOST_NEMS.o \ - GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o INITPOST_BIN_MPIIO.o \ + GETNEMSNDSCATTER.o ICAOHEIGHT.o INITPOST_GFS_NEMS.o \ GEO_ZENITH_ANGLE.o GFIP3.o GRIDAVG.o CALUPDHEL.o MSFPS.o INITPOST_GFS_SIGIO.o\ AllGETHERV_GSD.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o INITPOST_GFS_NEMS_MPIIO.o \ - INITPOST_NETCDF.o \ - gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o + INITPOST_NETCDF.o INITPOST_GFS_NETCDF.o \ + gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o CALVESSEL.o \ + CALHEL2.o CALCAPE2.o OBJS = $(OBJS_F) $(OBJXML) $(OBJS_FT) @@ -90,30 +89,20 @@ OBJS = $(OBJS_F) $(OBJXML) $(OBJS_FT) # ----------- all: $(TARGET) -$(TARGET): wrflink $(XML_DEPS) $(OBJS) +$(TARGET): $(XML_DEPS) $(OBJS) $(MODULES) $(F90) -o $@ $(FFLAGS) $(MODULES) $(OBJS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(CP) $@ $(BINDIR) -# -# The following links are done for compilation/link errors found in various compilers -wrflink: $(WRF_DIR)/frame/module_internal_header_util.mod - $(LN) $(WRF_DIR)/frame/module_internal_header_util.mod $(INCMOD)/ - $(LN) $(WRF_DIR)/external/io_int/module_io_int_idx.mod $(INCMOD)/ -# + # This insures a dependency found in some files -- watch file order above remains -- should # be done w/ dependencies $(OBJS_F): $(OBJS_FT) $(OBJXML) # # These files are configurable, but rarely change -INITPOST_NMM_BIN_MPIIO.f: - -$(RM) INITPOST_NMM_BIN_MPIIO.f - $(LN) $(INITPOST_NMM_BIN_MPIIO) INITPOST_NMM_BIN_MPIIO.f - clean: @echo -e "\n<><><><> CLEAN <><><><>\n$@ in `pwd`" $(RM) $(TARGET) $(OBJS) *.lst *.mod $(RM) $(BINDIR)/$(TARGET) - $(RM) $(INCMOD)/module_internal_header_util.mod $(INCMOD)/module_ext_internal.mod for f in `ls -1 *.F|sed "s/.F$$/.f/"` ; do \ $(RM) $$f ; \ done diff --git a/sorc/ncep_post.fd/makefile_module b/sorc/ncep_post.fd/makefile_module index 099f8022e..7a8bfe406 100755 --- a/sorc/ncep_post.fd/makefile_module +++ b/sorc/ncep_post.fd/makefile_module @@ -95,7 +95,7 @@ OBJS = wrf_io_flags.o getVariable.o getIVariableN.o \ AllGETHERV_GSD.o MSFPS.o SELECT_CHANNELS.o ALLOCATE_ALL.o INITPOST_NEMS_MPIIO.o ASSIGNNEMSIOVAR.o \ INITPOST_GFS_NEMS_MPIIO.o INITPOST_NETCDF.o INITPOST_GFS_NETCDF.o INITPOST_GFS_NETCDF_PARA.o \ gtg_ctlblk.o gtg_indices.o gtg_filter.o gtg_compute.o gtg_config.o map_routines.o gtg_algo.o gtg_smoothseams.o CALVESSEL.o \ - CALHEL2.o CALCAPE2.o + CALHEL2.o CALCAPE2.o ETAMP_Q2F.o .SUFFIXES: .F .f .o .f90 .c diff --git a/ush/link_crtm_fix.sh b/ush/link_crtm_fix.sh index 02021e99d..1ce1085ec 100755 --- a/ush/link_crtm_fix.sh +++ b/ush/link_crtm_fix.sh @@ -19,7 +19,7 @@ for what in "amsre_aqua" "imgr_g11" "imgr_g12" "imgr_g13" \ "imgr_g15" "imgr_mt1r" "imgr_mt2" "seviri_m10" \ "ssmi_f13" "ssmi_f14" "ssmi_f15" "ssmis_f16" \ "ssmis_f17" "ssmis_f18" "ssmis_f19" "ssmis_f20" \ - "tmi_trmm" "v.seviri_m10" "imgr_insat3d" "abi_gr" ; do + "tmi_trmm" "v.seviri_m10" "imgr_insat3d" "abi_gr" "ahi_himawari8" ; do ln -s "$FIXCRTM/$what.TauCoeff.bin" . ln -s "$FIXCRTM/$what.SpcCoeff.bin" . done