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, '' )
+ !
+ ! Assume (for now at least) that 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. '' ) then
+ endtag = .true.
+ tag = info%line(3:kend-1)
+ else
+ if ( info%line(1:1) .eq. '<' ) then
+ tag = info%line(2:kend-1)
+ call xml_report_details( 'XML_GET - tag found: ', trim(tag) )
+ else
+ kend = 0 ! Beginning of data!
+ endif
+ endif
+
+ info%line = adjustl( info%line(kend+1:) )
+
+ idxat = 0
+ idxdat = 0
+
+ if ( tag(1:3) .eq. '!--' ) comment_tag = .true.
+
+ do while ( info%line .ne. ' ' .and. .not. close_bracket .and. .not. comment_tag )
+
+ keq = index( info%line, '=' )
+ kend = index( info%line, '>' )
+ 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)' ) ' ','', tag, '>'
+ 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), '', adjustl(tag), '>'
+
+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