[Ncep.list.nems.announce] NEMSLegacy r84791: Regression test and documentation updates:

Samuel.Trahan at noaa.gov Samuel.Trahan at noaa.gov
Wed Nov 23 01:28:03 UTC 2016


1.
 Mo...
Message-ID: <5834f0a3.ExaHZNoJU78d18v+%Samuel.Trahan at noaa.gov>
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="=_5834f0a3.cPDgIH+CZcKL/epvepmSoK6I/SyZ0DPHyn+kTVAh5j6qgcB/"

This is a multi-part message in MIME format.

--=_5834f0a3.cPDgIH+CZcKL/epvepmSoK6I/SyZ0DPHyn+kTVAh5j6qgcB/
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Friendly NEMS developers,

This is an automated email about a NEMS commit.

Project: NEMSLegacy
URL: https://svnemc.ncep.noaa.gov/projects/nems/apps/NEMSLegacy/trunk
Revision: 84791
Author:   samuel.trahan at noaa.gov
Date:     2016-11-23T01:26:16.447378Z
Message:
Regression test and documentation updates:
1. Move *.input files from NEMS/tests to app-level compsets directory
2. Delete the wrong.appBuilder (old nemsLegacy.appBuilder)
3. Add a doc/README.md which contains the app-level documentation.
   The NEMS/doc/Makefile knows how to combine this with NEMS-level
   documentation to make a webpage with app, build, and execution
   documentation.


See attached file for full differences.


First 4000 bytes of differences:
Index: checkout/wrong.appBuilder
===================================================================
--- checkout/wrong.appBuilder	(revision 84675)
+++ checkout/wrong.appBuilder	(nonexistent)
@@ -1,41 +0,0 @@
-# NEMSLegacy application
-#
-## NEMS Application Builder file
-
-COMPONENTS=( GSM )
-
-# Gaea environment
-environment_gaea(){
-  source /etc/profile
-  module swap PrgEnv-intel
-  module swap intel/14.0.2.144
-  module swap cray-mpich
-  module swap cray-libsci
-  module load cray-netcdf
-  module load subversion/1.9.3
-  module use ~Gerhard.Theurich/Modulefiles
-  module load esmf/7.0.0
-}
-
-# Theia environment
-environment_theia(){
-  source /etc/profile
-  module use /scratch4/NCEPDEV/nems/save/Gerhard.Theurich/Modulefiles
-  module load intel impi netcdf esmf/7.0.0
-}
-
-# Yellowstone environment
-environment_yellowstone(){
-  source /etc/profile
-  module purge
-  module load ncarenv/1.0 ncarbinlibs/1.1 intel/15.0.0 ncarcompilers/1.0 netcdf/4.3.0 mkl/11.1.2 impi/4.0.3.008
-  export ESMFMKFILE=~theurich/ESMF-INSTALLS/700-Intel15.0.0-IMPI4.0.3.008-NetCDF4.3.0/lib/esmf.mk
-}
-
-# Generic Linux/GNU environment
-environment_linux_gnu(){
-  source /opt/Modules/3.2.9/init/sh
-  module purge
-  module load GCC/4.7.0/GCC GCC/4.7.0/openmpi/1.6.0-threadmultiple esmf/7.0.0
-}
-
Index: checkout/doc/README.md
===================================================================
--- checkout/doc/README.md	(nonexistent)
+++ checkout/doc/README.md	(revision 84791)
@@ -0,0 +1,51 @@
+NEMSLegacy Build and Test Instructions
+======================================
+
+This page documents the build system and test suite for the NEMSLegacy
+app.  This is a NEMS app that runs the Global Spectral Model (GSM) or
+Non-hydrostatic Multi-scale Model (NMM) in uncoupled mode.  In the
+next few weeks, this app will be split into three apps, as discussed
+below.  Until then, it will serve as the main development point for
+GSM, NMM and the NEMS source code.  The app can be found here on the
+EMC Subversion server:
+
+* [https://svnemc.ncep.noaa.gov/projects/nems/apps/NEMSLegacy/trunk](https://svnemc.ncep.noaa.gov/projects/nems/apps/NEMSLegacy/trunk)
+
+This app's current use as the central testing point for NEMS has
+restricted development of coupled tests and has forced either the NMM
+or GSM developers to hold back developments that break the other
+model.  For this and other reasons, we will replace this app with
+three new ones for standalone model development.  The three new apps
+that replace NEMSLegacy will be:
+
+* NEMSGSM - standalone Global Spectral Model (GSM) app
+* NEMSNMM - standalone Non-hydrostatic Multi-scale Model (NMM) app
+* NEMSFV3 - standalone finite volume cube (FV3) app
+
+To support coupled model development, we will change the commit
+process for NEMS.  This will allow NEMS changes to be vetted in
+coupled apps before committing.  The new commit process will be made
+public once it is approved by management.
+
+<a name="supbuild"></a>Supported Builds and Platforms
+-----------------------------------------------------
+
+The NEMSLegacy only works on three clusters: NOAA WCOSS Phase 1 (Tide
+and Gyre), and NOAA Theia.  No other platforms are tested or supported
+at this time.  We have plans to port to the WCOSS Cray systems (Luna
+and Surge) and GAEA in the near future.  However, that may happen
+after NEMSLegacy is replaced with several separate apps.
+
+The app can be built in the following ways via the NEMSAppBuilder.
+Details of each build option can be found in the corresponding
+`(name).appBuilder` files at the top level of the NEMSLegacy checkout.
+
+* `GSM`: standalone global spectral model
+* `GSM-GOCART`: global spectral model with gocart enabled
+* `NMM`: standalone non-hydrostatic multi-scale model
+* `NMM-POST`: same as NMM, but with the inline post processor enabled
+* `NMM-DEBUG`: same as NMM, but with debugging enabled (slow)
+
+Note that none of these build options use a coupler.  They are
+standalone NMM or 


... see attachment for the rest ...

--=_5834f0a3.cPDgIH+CZcKL/epvepmSoK6I/SyZ0DPHyn+kTVAh5j6qgcB/
Content-Type: text/plain;
 charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="84791.diff"

Index: checkout/wrong.appBuilder
===================================================================
--- checkout/wrong.appBuilder	(revision 84675)
+++ checkout/wrong.appBuilder	(nonexistent)
@@ -1,41 +0,0 @@
-# NEMSLegacy application
-#
-## NEMS Application Builder file
-
-COMPONENTS=( GSM )
-
-# Gaea environment
-environment_gaea(){
-  source /etc/profile
-  module swap PrgEnv-intel
-  module swap intel/14.0.2.144
-  module swap cray-mpich
-  module swap cray-libsci
-  module load cray-netcdf
-  module load subversion/1.9.3
-  module use ~Gerhard.Theurich/Modulefiles
-  module load esmf/7.0.0
-}
-
-# Theia environment
-environment_theia(){
-  source /etc/profile
-  module use /scratch4/NCEPDEV/nems/save/Gerhard.Theurich/Modulefiles
-  module load intel impi netcdf esmf/7.0.0
-}
-
-# Yellowstone environment
-environment_yellowstone(){
-  source /etc/profile
-  module purge
-  module load ncarenv/1.0 ncarbinlibs/1.1 intel/15.0.0 ncarcompilers/1.0 netcdf/4.3.0 mkl/11.1.2 impi/4.0.3.008
-  export ESMFMKFILE=~theurich/ESMF-INSTALLS/700-Intel15.0.0-IMPI4.0.3.008-NetCDF4.3.0/lib/esmf.mk
-}
-
-# Generic Linux/GNU environment
-environment_linux_gnu(){
-  source /opt/Modules/3.2.9/init/sh
-  module purge
-  module load GCC/4.7.0/GCC GCC/4.7.0/openmpi/1.6.0-threadmultiple esmf/7.0.0
-}
-
Index: checkout/doc/README.md
===================================================================
--- checkout/doc/README.md	(nonexistent)
+++ checkout/doc/README.md	(revision 84791)
@@ -0,0 +1,51 @@
+NEMSLegacy Build and Test Instructions
+======================================
+
+This page documents the build system and test suite for the NEMSLegacy
+app.  This is a NEMS app that runs the Global Spectral Model (GSM) or
+Non-hydrostatic Multi-scale Model (NMM) in uncoupled mode.  In the
+next few weeks, this app will be split into three apps, as discussed
+below.  Until then, it will serve as the main development point for
+GSM, NMM and the NEMS source code.  The app can be found here on the
+EMC Subversion server:
+
+* [https://svnemc.ncep.noaa.gov/projects/nems/apps/NEMSLegacy/trunk](https://svnemc.ncep.noaa.gov/projects/nems/apps/NEMSLegacy/trunk)
+
+This app's current use as the central testing point for NEMS has
+restricted development of coupled tests and has forced either the NMM
+or GSM developers to hold back developments that break the other
+model.  For this and other reasons, we will replace this app with
+three new ones for standalone model development.  The three new apps
+that replace NEMSLegacy will be:
+
+* NEMSGSM - standalone Global Spectral Model (GSM) app
+* NEMSNMM - standalone Non-hydrostatic Multi-scale Model (NMM) app
+* NEMSFV3 - standalone finite volume cube (FV3) app
+
+To support coupled model development, we will change the commit
+process for NEMS.  This will allow NEMS changes to be vetted in
+coupled apps before committing.  The new commit process will be made
+public once it is approved by management.
+
+<a name="supbuild"></a>Supported Builds and Platforms
+-----------------------------------------------------
+
+The NEMSLegacy only works on three clusters: NOAA WCOSS Phase 1 (Tide
+and Gyre), and NOAA Theia.  No other platforms are tested or supported
+at this time.  We have plans to port to the WCOSS Cray systems (Luna
+and Surge) and GAEA in the near future.  However, that may happen
+after NEMSLegacy is replaced with several separate apps.
+
+The app can be built in the following ways via the NEMSAppBuilder.
+Details of each build option can be found in the corresponding
+`(name).appBuilder` files at the top level of the NEMSLegacy checkout.
+
+* `GSM`: standalone global spectral model
+* `GSM-GOCART`: global spectral model with gocart enabled
+* `NMM`: standalone non-hydrostatic multi-scale model
+* `NMM-POST`: same as NMM, but with the inline post processor enabled
+* `NMM-DEBUG`: same as NMM, but with debugging enabled (slow)
+
+Note that none of these build options use a coupler.  They are
+standalone NMM or GSM configurations that do not interact with another
+model or each other.
Index: checkout/compsets/gsm.input
===================================================================
--- checkout/compsets/gsm.input	(nonexistent)
+++ checkout/compsets/gsm.input	(revision 84791)
@@ -0,0 +1,1645 @@
+load 'platforms.input'
+load 'nemscommon.input'
+
+########################################################################
+
+# Builds for the gsm:
+
+build gsm.x {
+    use plat
+    NEMS.x="@[plat%EXECrt]/NEMS_gsm.x"
+    modules.nems="@[plat%INCrt]/NEMS_gsm.x.modules"
+    target="@[NEMS.x]"
+#    build=rt.sh_build(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+#        ESMF_VER='gsm_intel',NEMS_VER='gsm')
+    build=NEMSAppBuilder(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+                         OPTS="app=GSM")
+}
+
+build gsm_gocart.x {
+    use plat
+    NEMS.x="@[plat%EXECrt]/NEMS_gocart.x"
+    modules.nems="@[plat%INCrt]/NEMS_gocart.x.modules"
+    target="@[NEMS.x]"
+#    build=rt.sh_build(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+#        ESMF_VER='gsm_intel',NEMS_VER='gsm GOCART_MODE=full')
+    build=NEMSAppBuilder(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+                         OPTS="app=GSM-GOCART")
+}
+
+########################################################################
+
+# Common paths used by many tests and input files:
+
+gsm_paths = {
+    fix_gayno="@[plat%INPUTS]/data_GFS/fix.gayno/"
+    fix_am="@[plat%INPUTS]/data_GFS/fix.am/"
+    ngac_fix="@[plat%INPUTS]/data_GOCART/ngac_fix/"
+    fix_am_2="@[fix_gayno]"
+}
+
+########################################################################
+
+test gfs_eulerian: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="GFS eulerian dycore,32 total proc (tasks), 1 thread, quilt, digital filter on reduced grid"
+    CNTL_NAME='GFS_EULERIAN'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+           'sig_ini'   .link.  "siganl.2012010100"
+           'sfc_ini'   .link.  "sfcanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F15'   .link.  "sigf15"
+           'SFC.F15'   .link.  "sfcf15"
+           'FLX.F15'   .link.  "flxf15"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F21'   .link.  "sigf21"
+           'SFC.F21'   .link.  "sfcf21"
+           'FLX.F21'   .link.  "flxf21"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'SIG.F27'   .link.  "sigf27"
+           'SFC.F27'   .link.  "sfcf27"
+           'FLX.F27'   .link.  "flxf27"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F33'   .link.  "sigf33"
+           'SFC.F33'   .link.  "sfcf33"
+           'FLX.F33'   .link.  "flxf33"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F39'   .link.  "sigf39"
+           'SFC.F39'   .link.  "sfcf39"
+           'FLX.F39'   .link.  "flxf39"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F45'   .link.  "sigf45"
+           'SFC.F45'   .link.  "sfcf45"
+           'FLX.F45'   .link.  "flxf45"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sfcf03' .bitcmp. "@[CNTL]"
+            'flxf03' .bitcmp. "@[CNTL]"
+            'sigf03' .bitcmp. "@[CNTL]"
+            'sfcf06' .bitcmp. "@[CNTL]"
+            'flxf06' .bitcmp. "@[CNTL]"
+            'sigf06' .bitcmp. "@[CNTL]"
+            'sfcf12' .bitcmp. "@[CNTL]"
+            'flxf12' .bitcmp. "@[CNTL]"
+            'sigf12' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf48' .bitcmp. "@[CNTL]"
+            'flxf48' .bitcmp. "@[CNTL]"
+            'sigf48' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=32, threads=1}
+    }
+}
+
+########################################################################
+
+test wam_gh_l150: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="WAM enthalpy on general hybrid 2loop 150levels,32 compute tasks / 1 thread ,no quilting"
+    CNTL_NAME='WAM_gh_l150'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+           'sig_ini'   .link.  "siganl.2011092300"
+           'sfc_ini'   .link.  "sfcanl.2011092300"
+     'SIG.F00:03:00'   .link.  "sigf00"
+     'SFC.F00:03:00'   .link.  "sfcf00"
+     'FLX.F00:03:00'   .link.  "flxf00"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F15'   .link.  "sigf15"
+           'SFC.F15'   .link.  "sfcf15"
+           'FLX.F15'   .link.  "flxf15"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F21'   .link.  "sigf21"
+           'SFC.F21'   .link.  "sfcf21"
+           'FLX.F21'   .link.  "flxf21"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l150.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf03' .bitcmp. "@[CNTL]"
+            'flxf03' .bitcmp. "@[CNTL]"
+            'sigf03' .bitcmp. "@[CNTL]"
+            'sfcf06' .bitcmp. "@[CNTL]"
+            'flxf06' .bitcmp. "@[CNTL]"
+            'sigf06' .bitcmp. "@[CNTL]"
+            'sfcf12' .bitcmp. "@[CNTL]"
+            'flxf12' .bitcmp. "@[CNTL]"
+            'sigf12' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=32, threads=1}
+    }
+}
+
+########################################################################
+
+test wam_gh_l150_nemsio: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="WAM enthalpy on general hybrid 2loop 150levels,32 compute tasks / 1 thread ,with quilting and NEMSIO I/O"
+    CNTL_NAME='WAM_gh_l150_nemsio'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2011092400"
+           'sig_ini'   .link.  "gfsanl.2011092400"
+           'sfc_ini'   .link.  "sfnanl.2011092400"
+     'SIG.F00:03:00'   .link.  "sigf00"
+     'SFC.F00:03:00'   .link.  "sfcf00"
+     'FLX.F00:03:00'   .link.  "flxf00"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F15'   .link.  "sigf15"
+           'SFC.F15'   .link.  "sfcf15"
+           'FLX.F15'   .link.  "flxf15"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F21'   .link.  "sigf21"
+           'SFC.F21'   .link.  "sfcf21"
+           'FLX.F21'   .link.  "flxf21"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'SIG.F27'   .link.  "sigf27"
+           'SFC.F27'   .link.  "sfcf27"
+           'FLX.F27'   .link.  "flxf27"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F33'   .link.  "sigf33"
+           'SFC.F33'   .link.  "sfcf33"
+           'FLX.F33'   .link.  "flxf33"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F39'   .link.  "sigf39"
+           'SFC.F39'   .link.  "sfcf39"
+           'FLX.F39'   .link.  "flxf39"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F45'   .link.  "sigf45"
+           'SFC.F45'   .link.  "sfcf45"
+           'FLX.F45'   .link.  "flxf45"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l150.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf03' .bitcmp. "@[CNTL]"
+            'sfcf03' .bitcmp. "@[CNTL]"
+            'flxf03' .bitcmp. "@[CNTL]"
+            'sigf06' .bitcmp. "@[CNTL]"
+            'sfcf06' .bitcmp. "@[CNTL]"
+            'flxf06' .bitcmp. "@[CNTL]"
+            'sigf12' .bitcmp. "@[CNTL]"
+            'sfcf12' .bitcmp. "@[CNTL]"
+            'flxf12' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+            'sigf48' .bitcmp. "@[CNTL]"
+            'sfcf48' .bitcmp. "@[CNTL]"
+            'flxf48' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    TEST_INPUT="@[INPUTS]/tests/@[TEST_NAME]"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[TEST_INPUT]/"
+      'atm_namelist' .atparse. "@[TEST_INPUT]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+           'SIG.F01'   .link.  "sigf01"
+           'SFC.F01'   .link.  "sfcf01"
+           'FLX.F01'   .link.  "flxf01"
+           'SIG.F02'   .link.  "sigf02"
+           'SFC.F02'   .link.  "sfcf02"
+           'FLX.F02'   .link.  "flxf02"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F04'   .link.  "sigf04"
+           'SFC.F04'   .link.  "sfcf04"
+           'FLX.F04'   .link.  "flxf04"
+           'SIG.F05'   .link.  "sigf05"
+           'SFC.F05'   .link.  "sfcf05"
+           'FLX.F05'   .link.  "flxf05"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F07'   .link.  "sigf07"
+           'SFC.F07'   .link.  "sfcf07"
+           'FLX.F07'   .link.  "flxf07"
+           'SIG.F08'   .link.  "sigf08"
+           'SFC.F08'   .link.  "sfcf08"
+           'FLX.F08'   .link.  "flxf08"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F10'   .link.  "sigf10"
+           'SFC.F10'   .link.  "sfcf10"
+           'FLX.F10'   .link.  "flxf10"
+           'SIG.F11'   .link.  "sigf11"
+           'SFC.F11'   .link.  "sfcf11"
+           'FLX.F11'   .link.  "flxf11"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf01' .bitcmp. "@[CNTL]"
+            'sfcf01' .bitcmp. "@[CNTL]"
+            'flxf01' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_2thread: gsm.x {
+    use gfs_slg
+    TEST_DESCR='Run SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions (two threads)'
+    CNTL_NAME='GFS_SLG'
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+         'sigf00'  .bitcmp. "@[CNTL]"
+         'sfcf00'  .bitcmp. "@[CNTL]"
+         'flxf00'  .bitcmp. "@[CNTL]"
+         'SIG.F06' .bitcmp. "@[CNTL]"
+         'SFC.F06' .bitcmp. "@[CNTL]"
+         'FLX.F06' .bitcmp. "@[CNTL]"
+         'sigf24'  .bitcmp. "@[CNTL]"
+         'sfcf24'  .bitcmp. "@[CNTL]"
+         'flxf24'  .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=32, threads=2, ppn=8}
+    }
+}
+
+########################################################################
+
+test gfs_slg_48pe: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions, 48pe"
+    CNTL_NAME='GFS_SLG_48PE'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf06' .bitcmp. "@[CNTL]"
+            'sfcf06' .bitcmp. "@[CNTL]"
+            'flxf06' .bitcmp. "@[CNTL]"
+            'sigf12' .bitcmp. "@[CNTL]"
+            'sfcf12' .bitcmp. "@[CNTL]"
+            'flxf12' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=48, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_adiabatic: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_ADIABATIC'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+           'SIG.F06'   .link.  "sigf06"
+           'SIG.F12'   .link.  "sigf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SIG.F24'   .link.  "sigf24"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sigf06' .bitcmp. "@[CNTL]"
+            'sigf12' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=32, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_land: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_LAND'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_gayno]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.statsgo.t62.192.94.rg.grb"
+    FNVETC="@[fix_gayno]/global_vegtype.igbp.t62.192.94.rg.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_gayno]/global_mxsnoalb.uariz.t62.192.94.rg.grb"
+    FNZORC="igbp"
+    FNALBC="@[fix_gayno]/global_snowfree_albedo.bosu.t62.192.94.rg.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+           'SIG.F01'   .link.  "sigf01"
+           'SFC.F01'   .link.  "sfcf01"
+           'FLX.F01'   .link.  "flxf01"
+           'SIG.F02'   .link.  "sigf02"
+           'SFC.F02'   .link.  "sfcf02"
+           'FLX.F02'   .link.  "flxf02"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F04'   .link.  "sigf04"
+           'SFC.F04'   .link.  "sfcf04"
+           'FLX.F04'   .link.  "flxf04"
+           'SIG.F05'   .link.  "sigf05"
+           'SFC.F05'   .link.  "sfcf05"
+           'FLX.F05'   .link.  "flxf05"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F07'   .link.  "sigf07"
+           'SFC.F07'   .link.  "sfcf07"
+           'FLX.F07'   .link.  "flxf07"
+           'SIG.F08'   .link.  "sigf08"
+           'SFC.F08'   .link.  "sfcf08"
+           'FLX.F08'   .link.  "flxf08"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F10'   .link.  "sigf10"
+           'SFC.F10'   .link.  "sfcf10"
+           'FLX.F10'   .link.  "flxf10"
+           'SIG.F11'   .link.  "sigf11"
+           'SFC.F11'   .link.  "sfcf11"
+           'FLX.F11'   .link.  "flxf11"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf01' .bitcmp. "@[CNTL]"
+            'sfcf01' .bitcmp. "@[CNTL]"
+            'flxf01' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_nsst: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_NSST'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+           'nst_ini'   .link.  "nsnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+     'NST.F00:15:00'   .link.  "nstf00"
+           'SIG.F01'   .link.  "sigf01"
+           'SFC.F01'   .link.  "sfcf01"
+           'FLX.F01'   .link.  "flxf01"
+           'NST.F01'   .link.  "nstf01"
+           'SIG.F02'   .link.  "sigf02"
+           'SFC.F02'   .link.  "sfcf02"
+           'FLX.F02'   .link.  "flxf02"
+           'NST.F02'   .link.  "nstf02"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'NST.F03'   .link.  "nstf03"
+           'SIG.F04'   .link.  "sigf04"
+           'SFC.F04'   .link.  "sfcf04"
+           'FLX.F04'   .link.  "flxf04"
+           'NST.F04'   .link.  "nstf04"
+           'SIG.F05'   .link.  "sigf05"
+           'SFC.F05'   .link.  "sfcf05"
+           'FLX.F05'   .link.  "flxf05"
+           'NST.F05'   .link.  "nstf05"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'NST.F06'   .link.  "nstf06"
+           'SIG.F07'   .link.  "sigf07"
+           'SFC.F07'   .link.  "sfcf07"
+           'FLX.F07'   .link.  "flxf07"
+           'NST.F07'   .link.  "nstf07"
+           'SIG.F08'   .link.  "sigf08"
+           'SFC.F08'   .link.  "sfcf08"
+           'FLX.F08'   .link.  "flxf08"
+           'NST.F08'   .link.  "nstf08"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'NST.F09'   .link.  "nstf09"
+           'SIG.F10'   .link.  "sigf10"
+           'SFC.F10'   .link.  "sfcf10"
+           'FLX.F10'   .link.  "flxf10"
+           'NST.F10'   .link.  "nstf10"
+           'SIG.F11'   .link.  "sigf11"
+           'SFC.F11'   .link.  "sfcf11"
+           'FLX.F11'   .link.  "flxf11"
+           'NST.F11'   .link.  "nstf11"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'NST.F12'   .link.  "nstf12"
+           'SIG.F13'   .link.  "sigf13"
+           'SFC.F13'   .link.  "sfcf13"
+           'FLX.F13'   .link.  "flxf13"
+           'NST.F13'   .link.  "nstf13"
+           'SIG.F14'   .link.  "sigf14"
+           'SFC.F14'   .link.  "sfcf14"
+           'FLX.F14'   .link.  "flxf14"
+           'NST.F14'   .link.  "nstf14"
+           'SIG.F15'   .link.  "sigf15"
+           'SFC.F15'   .link.  "sfcf15"
+           'FLX.F15'   .link.  "flxf15"
+           'NST.F15'   .link.  "nstf15"
+           'SIG.F16'   .link.  "sigf16"
+           'SFC.F16'   .link.  "sfcf16"
+           'FLX.F16'   .link.  "flxf16"
+           'NST.F16'   .link.  "nstf16"
+           'SIG.F17'   .link.  "sigf17"
+           'SFC.F17'   .link.  "sfcf17"
+           'FLX.F17'   .link.  "flxf17"
+           'NST.F17'   .link.  "nstf17"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'NST.F18'   .link.  "nstf18"
+           'SIG.F19'   .link.  "sigf19"
+           'SFC.F19'   .link.  "sfcf19"
+           'FLX.F19'   .link.  "flxf19"
+           'NST.F19'   .link.  "nstf19"
+           'SIG.F20'   .link.  "sigf20"
+           'SFC.F20'   .link.  "sfcf20"
+           'FLX.F20'   .link.  "flxf20"
+           'NST.F20'   .link.  "nstf20"
+           'SIG.F21'   .link.  "sigf21"
+           'SFC.F21'   .link.  "sfcf21"
+           'FLX.F21'   .link.  "flxf21"
+           'NST.F21'   .link.  "nstf21"
+           'SIG.F22'   .link.  "sigf22"
+           'SFC.F22'   .link.  "sfcf22"
+           'FLX.F22'   .link.  "flxf22"
+           'NST.F22'   .link.  "nstf22"
+           'SIG.F23'   .link.  "sigf23"
+           'SFC.F23'   .link.  "sfcf23"
+           'FLX.F23'   .link.  "flxf23"
+           'NST.F23'   .link.  "nstf23"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'NST.F24'   .link.  "nstf24"
+           'SIG.F25'   .link.  "sigf25"
+           'SFC.F25'   .link.  "sfcf25"
+           'FLX.F25'   .link.  "flxf25"
+           'NST.F25'   .link.  "nstf25"
+           'SIG.F26'   .link.  "sigf26"
+           'SFC.F26'   .link.  "sfcf26"
+           'FLX.F26'   .link.  "flxf26"
+           'NST.F26'   .link.  "nstf26"
+           'SIG.F27'   .link.  "sigf27"
+           'SFC.F27'   .link.  "sfcf27"
+           'FLX.F27'   .link.  "flxf27"
+           'NST.F27'   .link.  "nstf27"
+           'SIG.F28'   .link.  "sigf28"
+           'SFC.F28'   .link.  "sfcf28"
+           'FLX.F28'   .link.  "flxf28"
+           'NST.F28'   .link.  "nstf28"
+           'SIG.F29'   .link.  "sigf29"
+           'SFC.F29'   .link.  "sfcf29"
+           'FLX.F29'   .link.  "flxf29"
+           'NST.F29'   .link.  "nstf29"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'NST.F30'   .link.  "nstf30"
+           'SIG.F31'   .link.  "sigf31"
+           'SFC.F31'   .link.  "sfcf31"
+           'FLX.F31'   .link.  "flxf31"
+           'NST.F31'   .link.  "nstf31"
+           'SIG.F32'   .link.  "sigf32"
+           'SFC.F32'   .link.  "sfcf32"
+           'FLX.F32'   .link.  "flxf32"
+           'NST.F32'   .link.  "nstf32"
+           'SIG.F33'   .link.  "sigf33"
+           'SFC.F33'   .link.  "sfcf33"
+           'FLX.F33'   .link.  "flxf33"
+           'NST.F33'   .link.  "nstf33"
+           'SIG.F34'   .link.  "sigf34"
+           'SFC.F34'   .link.  "sfcf34"
+           'FLX.F34'   .link.  "flxf34"
+           'NST.F34'   .link.  "nstf34"
+           'SIG.F35'   .link.  "sigf35"
+           'SFC.F35'   .link.  "sfcf35"
+           'FLX.F35'   .link.  "flxf35"
+           'NST.F35'   .link.  "nstf35"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'NST.F36'   .link.  "nstf36"
+           'SIG.F37'   .link.  "sigf37"
+           'SFC.F37'   .link.  "sfcf37"
+           'FLX.F37'   .link.  "flxf37"
+           'NST.F37'   .link.  "nstf37"
+           'SIG.F38'   .link.  "sigf38"
+           'SFC.F38'   .link.  "sfcf38"
+           'FLX.F38'   .link.  "flxf38"
+           'NST.F38'   .link.  "nstf38"
+           'SIG.F39'   .link.  "sigf39"
+           'SFC.F39'   .link.  "sfcf39"
+           'FLX.F39'   .link.  "flxf39"
+           'NST.F39'   .link.  "nstf39"
+           'SIG.F40'   .link.  "sigf40"
+           'SFC.F40'   .link.  "sfcf40"
+           'FLX.F40'   .link.  "flxf40"
+           'NST.F40'   .link.  "nstf40"
+           'SIG.F41'   .link.  "sigf41"
+           'SFC.F41'   .link.  "sfcf41"
+           'FLX.F41'   .link.  "flxf41"
+           'NST.F41'   .link.  "nstf41"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'NST.F42'   .link.  "nstf42"
+           'SIG.F43'   .link.  "sigf43"
+           'SFC.F43'   .link.  "sfcf43"
+           'FLX.F43'   .link.  "flxf43"
+           'NST.F43'   .link.  "nstf43"
+           'SIG.F44'   .link.  "sigf44"
+           'SFC.F44'   .link.  "sfcf44"
+           'FLX.F44'   .link.  "flxf44"
+           'NST.F44'   .link.  "nstf44"
+           'SIG.F45'   .link.  "sigf45"
+           'SFC.F45'   .link.  "sfcf45"
+           'FLX.F45'   .link.  "flxf45"
+           'NST.F45'   .link.  "nstf45"
+           'SIG.F46'   .link.  "sigf46"
+           'SFC.F46'   .link.  "sfcf46"
+           'FLX.F46'   .link.  "flxf46"
+           'NST.F46'   .link.  "nstf46"
+           'SIG.F47'   .link.  "sigf47"
+           'SFC.F47'   .link.  "sfcf47"
+           'FLX.F47'   .link.  "flxf47"
+           'NST.F47'   .link.  "nstf47"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+           'NST.F48'   .link.  "nstf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'nstf00' .bitcmp. "@[CNTL]"
+            'sigf01' .bitcmp. "@[CNTL]"
+            'sfcf01' .bitcmp. "@[CNTL]"
+            'flxf01' .bitcmp. "@[CNTL]"
+            'nstf01' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+            'nstf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_rsthst: gsm.x, gfs_slg {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG restart from history file non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_RSTHST'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "@[gfs_slg%COM]/sigf24"
+           'sig_ini'   .link.  "@[gfs_slg%COM]/sigf24"
+           'sfc_ini'   .link.  "@[gfs_slg%COM]/sfcf24"
+           'nst_ini'   .link.  "@[gfs_slg%COM]/nstf24"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf30' .bitcmp. "@[CNTL]"
+            'sfcf30' .bitcmp. "@[CNTL]"
+            'flxf30' .bitcmp. "@[CNTL]"
+            'sigf48' .bitcmp. "@[CNTL]"
+            'sfcf48' .bitcmp. "@[CNTL]"
+            'flxf48' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_stochy: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run SLG non-adiabatic test with NEMSIO and digital filter and stochastic physics from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_STOCHY'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t62.192.94.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012010100"
+           'sig_ini'   .link.  "gfsanl.2012010100"
+           'sfc_ini'   .link.  "sfnanl.2012010100"
+     'SIG.F00:15:00'   .link.  "sigf00"
+     'SFC.F00:15:00'   .link.  "sfcf00"
+     'FLX.F00:15:00'   .link.  "flxf00"
+           'SIG.F01'   .link.  "sigf01"
+           'SFC.F01'   .link.  "sfcf01"
+           'FLX.F01'   .link.  "flxf01"
+           'SIG.F02'   .link.  "sigf02"
+           'SFC.F02'   .link.  "sfcf02"
+           'FLX.F02'   .link.  "flxf02"
+           'SIG.F03'   .link.  "sigf03"
+           'SFC.F03'   .link.  "sfcf03"
+           'FLX.F03'   .link.  "flxf03"
+           'SIG.F04'   .link.  "sigf04"
+           'SFC.F04'   .link.  "sfcf04"
+           'FLX.F04'   .link.  "flxf04"
+           'SIG.F05'   .link.  "sigf05"
+           'SFC.F05'   .link.  "sfcf05"
+           'FLX.F05'   .link.  "flxf05"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F07'   .link.  "sigf07"
+           'SFC.F07'   .link.  "sfcf07"
+           'FLX.F07'   .link.  "flxf07"
+           'SIG.F08'   .link.  "sigf08"
+           'SFC.F08'   .link.  "sfcf08"
+           'FLX.F08'   .link.  "flxf08"
+           'SIG.F09'   .link.  "sigf09"
+           'SFC.F09'   .link.  "sfcf09"
+           'FLX.F09'   .link.  "flxf09"
+           'SIG.F10'   .link.  "sigf10"
+           'SFC.F10'   .link.  "sfcf10"
+           'FLX.F10'   .link.  "flxf10"
+           'SIG.F11'   .link.  "sigf11"
+           'SFC.F11'   .link.  "sfcf11"
+           'FLX.F11'   .link.  "flxf11"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+           'SIG.F30'   .link.  "sigf30"
+           'SFC.F30'   .link.  "sfcf30"
+           'FLX.F30'   .link.  "flxf30"
+           'SIG.F36'   .link.  "sigf36"
+           'SFC.F36'   .link.  "sfcf36"
+           'FLX.F36'   .link.  "flxf36"
+           'SIG.F42'   .link.  "sigf42"
+           'SFC.F42'   .link.  "sfcf42"
+           'FLX.F42'   .link.  "flxf42"
+           'SIG.F48'   .link.  "sigf48"
+           'SFC.F48'   .link.  "sfcf48"
+           'FLX.F48'   .link.  "flxf48"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t62.192.94.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t62.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t62.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+            'sigf01' .bitcmp. "@[CNTL]"
+            'sfcf01' .bitcmp. "@[CNTL]"
+            'flxf01' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=33, threads=1}
+    }
+}
+
+########################################################################
+
+test gfs_slg_t574: gsm.x {
+    use gsm_paths
+
+    TEST_DESCR="Run T574 SLG non-adiabatic test with NEMSIO and digital filter from NEMSIO initial conditions"
+    CNTL_NAME='GFS_SLG_T574'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNALBC2="@[fix_am]/global_albedo4.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t574.1152.576.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #                       WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+          'grid_ini'   .link.  "gfsanl.2012102400"
+           'sig_ini'   .link.  "gfsanl.2012102400"
+           'sfc_ini'   .link.  "sfnanl.2012102400"
+     'SIG.F00:10:00'   .link.  "sigf00"
+     'SFC.F00:10:00'   .link.  "sfcf00"
+     'FLX.F00:10:00'   .link.  "flxf00"
+           'SIG.F06'   .link.  "sigf06"
+           'SFC.F06'   .link.  "sfcf06"
+           'FLX.F06'   .link.  "flxf06"
+           'SIG.F12'   .link.  "sigf12"
+           'SFC.F12'   .link.  "sfcf12"
+           'FLX.F12'   .link.  "flxf12"
+           'SIG.F18'   .link.  "sigf18"
+           'SFC.F18'   .link.  "sfcf18"
+           'FLX.F18'   .link.  "flxf18"
+           'SIG.F24'   .link.  "sigf24"
+           'SFC.F24'   .link.  "sfcf24"
+           'FLX.F24'   .link.  "flxf24"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t574.1152.576.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t574.1152.576.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t574.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+            'sigf00' .bitcmp. "@[CNTL]"
+            'sfcf00' .bitcmp. "@[CNTL]"
+            'flxf00' .bitcmp. "@[CNTL]"
+           'SIG.F06' .bitcmp. "@[CNTL]"
+           'SFC.F06' .bitcmp. "@[CNTL]"
+           'FLX.F06' .bitcmp. "@[CNTL]"
+           'SIG.F12' .bitcmp. "@[CNTL]"
+           'SFC.F12' .bitcmp. "@[CNTL]"
+           'FLX.F12' .bitcmp. "@[CNTL]"
+            'sigf24' .bitcmp. "@[CNTL]"
+            'sfcf24' .bitcmp. "@[CNTL]"
+            'flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm.x%target]", ranks=96, threads=1, ppn=8}
+    }
+}
+
+########################################################################
+
+test gfs_gocart_nemsio: gsm_gocart.x {
+    use gsm_paths
+
+    TEST_DESCR="GFS_GOCART with NEMSIO"
+    CNTL_NAME='GFS_GOCART_NEMSIO'
+
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Test result area
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"      # Test work area
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    INPUTS="@[plat%INPUTS]"                   # Test input data
+
+    FNABSC="@[fix_am]/global_snoalb.1x1.grb"
+    FNSMCC="@[fix_am]/global_soilmgldas.t126.384.190.grb"
+    FNMSKH="@[fix_am]/seaice_newland.grb"
+    FNVMNC="@[fix_am]/global_shdmin.0.144x0.144.grb"
+    FNACNA=""
+    FNSOTC="@[fix_gayno]/global_soiltype.1x1.grb"
+    FNVETC="@[fix_am]/global_vegtype.1x1.grb"
+    FNVMXC="@[fix_am]/global_shdmax.0.144x0.144.grb"
+    FNVEGC="@[fix_am]/global_vegfrac.0.144.decpercent.grb"
+    FNZORC="sib"
+    FNALBC="@[fix_am]/global_albedo4.1x1.grb"
+    FNMXIC="@[fix_am]/global_maxice.2x2.grb"
+    FNAISC="@[fix_am]/CFSR.SEAICE.1982.2012.monthly.clim.grb"
+    FNTG3C="@[fix_am]/global_tg3clim.2.6x1.5.grb"
+    FNTSFC="@[fix_am]/RTGSST.1982.2012.monthly.clim.grb"
+    FNSLPC="@[fix_am]/global_slope.1x1.grb"
+    FNTSFA=""
+    FNGLAC="@[fix_am]/global_glacier.2x2.grb"
+    FNSNOA=""
+    FNSNOC="@[fix_am]/global_snoclim.1.875.grb"
+
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[gsm_gocart.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # Specify input files.
+    filters input {
+      #   WORK FILE  .method.  SOURCE
+                 '*' .copydir. "@[INPUTS]/gfs_2012010100_common/"
+                 '*' .copydir. "@[INPUTS]/tests/@[TEST_NAME]/"
+          'ngac_fix'   .link.  "@[ngac_fix]"
+      'atm_namelist' .atparse. "@[INPUTS]/tests/@[TEST_NAME]/atm_namelist"
+             "GRDR1"   .link.  "grdr1"
+             "GRDR2"   .link.  "grdr2"
+              "NSTR"   .link.  "nstr"
+     'SIG.F00:07:30'   .link.  "ngac.t00z.sigf00"
+     'NST.F00:07:30'   .link.  "ngac.t00z.nstf00"
+     'G3D.F00:07:30'   .link.  "ngac.t00z.g3df00"
+     'D3D.F00:07:30'   .link.  "ngac.t00z.d3df00"
+     'SFC.F00:07:30'   .link.  "ngac.t00z.sfcf00"
+     'FLX.F00:07:30'   .link.  "ngac.t00z.flxf00"
+     'AER.F00:07:30'   .link.  "ngac.t00z.aerf00"
+           'SIG.F03'   .link.  "ngac.t00z.sigf03"
+           'NST.F03'   .link.  "ngac.t00z.nstf03"
+           'G3D.F03'   .link.  "ngac.t00z.g3df03"
+           'D3D.F03'   .link.  "ngac.t00z.d3df03"
+           'SFC.F03'   .link.  "ngac.t00z.sfcf03"
+           'FLX.F03'   .link.  "ngac.t00z.flxf03"
+           'AER.F03'   .link.  "ngac.t00z.aerf03"
+           'SIG.F06'   .link.  "ngac.t00z.sigf06"
+           'NST.F06'   .link.  "ngac.t00z.nstf06"
+           'G3D.F06'   .link.  "ngac.t00z.g3df06"
+           'D3D.F06'   .link.  "ngac.t00z.d3df06"
+           'SFC.F06'   .link.  "ngac.t00z.sfcf06"
+           'FLX.F06'   .link.  "ngac.t00z.flxf06"
+           'AER.F06'   .link.  "ngac.t00z.aerf06"
+           'SIG.F09'   .link.  "ngac.t00z.sigf09"
+           'NST.F09'   .link.  "ngac.t00z.nstf09"
+           'G3D.F09'   .link.  "ngac.t00z.g3df09"
+           'D3D.F09'   .link.  "ngac.t00z.d3df09"
+           'SFC.F09'   .link.  "ngac.t00z.sfcf09"
+           'FLX.F09'   .link.  "ngac.t00z.flxf09"
+           'AER.F09'   .link.  "ngac.t00z.aerf09"
+           'SIG.F12'   .link.  "ngac.t00z.sigf12"
+           'NST.F12'   .link.  "ngac.t00z.nstf12"
+           'G3D.F12'   .link.  "ngac.t00z.g3df12"
+           'D3D.F12'   .link.  "ngac.t00z.d3df12"
+           'SFC.F12'   .link.  "ngac.t00z.sfcf12"
+           'FLX.F12'   .link.  "ngac.t00z.flxf12"
+           'AER.F12'   .link.  "ngac.t00z.aerf12"
+           'SIG.F15'   .link.  "ngac.t00z.sigf15"
+           'NST.F15'   .link.  "ngac.t00z.nstf15"
+           'G3D.F15'   .link.  "ngac.t00z.g3df15"
+           'D3D.F15'   .link.  "ngac.t00z.d3df15"
+           'SFC.F15'   .link.  "ngac.t00z.sfcf15"
+           'FLX.F15'   .link.  "ngac.t00z.flxf15"
+           'AER.F15'   .link.  "ngac.t00z.aerf15"
+           'SIG.F18'   .link.  "ngac.t00z.sigf18"
+           'NST.F18'   .link.  "ngac.t00z.nstf18"
+           'G3D.F18'   .link.  "ngac.t00z.g3df18"
+           'D3D.F18'   .link.  "ngac.t00z.d3df18"
+           'SFC.F18'   .link.  "ngac.t00z.sfcf18"
+           'FLX.F18'   .link.  "ngac.t00z.flxf18"
+           'AER.F18'   .link.  "ngac.t00z.aerf18"
+           'SIG.F21'   .link.  "ngac.t00z.sigf21"
+           'NST.F21'   .link.  "ngac.t00z.nstf21"
+           'G3D.F21'   .link.  "ngac.t00z.g3df21"
+           'D3D.F21'   .link.  "ngac.t00z.d3df21"
+           'SFC.F21'   .link.  "ngac.t00z.sfcf21"
+           'FLX.F21'   .link.  "ngac.t00z.flxf21"
+           'AER.F21'   .link.  "ngac.t00z.aerf21"
+           'SIG.F24'   .link.  "ngac.t00z.sigf24"
+           'NST.F24'   .link.  "ngac.t00z.nstf24"
+           'G3D.F24'   .link.  "ngac.t00z.g3df24"
+           'D3D.F24'   .link.  "ngac.t00z.d3df24"
+           'SFC.F24'   .link.  "ngac.t00z.sfcf24"
+           'FLX.F24'   .link.  "ngac.t00z.flxf24"
+           'AER.F24'   .link.  "ngac.t00z.aerf24"
+   'model_configure'   .link.  "atm_namelist.rc"
+           'fort.48'   .link.  "@[fix_am]/global_o3clim.txt"
+      'orography_uf'   .link.  "@[fix_am]/global_orography_uf.t126.384.190.grb"
+         'orography'   .link.  "@[fix_am]/global_orography.t126.grb"
+           'fort.28'   .link.  "@[fix_am]/global_o3prdlos.f77"
+           'fort.29'   .link.  "@[fix_am]/global_h2o_pltc.f77"
+           'fort.15'   .link.  "@[fix_am]/global_co2con.l64.f77"
+           'fort.24'   .link.  "@[fix_am]/global_mtnvar.t126.f77"
+    }
+
+    # Specify output files:
+    criteria output {
+      # WORKFILE .comparison. TARGET
+  'ngac.t00z.gfsanl' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfnanl' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sigf00' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfcf00' .bitcmp. "@[CNTL]"
+  'ngac.t00z.aerf00' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sigf03' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfcf03' .bitcmp. "@[CNTL]"
+  'ngac.t00z.aerf03' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sigf06' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfcf06' .bitcmp. "@[CNTL]"
+  'ngac.t00z.aerf06' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sigf12' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfcf12' .bitcmp. "@[CNTL]"
+  'ngac.t00z.aerf12' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sigf24' .bitcmp. "@[CNTL]"
+  'ngac.t00z.sfcf24' .bitcmp. "@[CNTL]"
+  'ngac.t00z.aerf24' .bitcmp. "@[CNTL]"
+#  'ngac.t00z.flxf03' .bitcmp. "@[CNTL]"
+#  'ngac.t00z.flxf06' .bitcmp. "@[CNTL]"
+#  'ngac.t00z.flxf12' .bitcmp. "@[CNTL]"
+#  'ngac.t00z.flxf00' .bitcmp. "@[CNTL]"
+#  'ngac.t00z.flxf24' .bitcmp. "@[CNTL]"
+    }
+
+    spawn execute {
+        {"@[gsm_gocart.x%target]", ranks=64, threads=1}
+    }
+}
+
Index: checkout/compsets/nmm.input
===================================================================
--- checkout/compsets/nmm.input	(nonexistent)
+++ checkout/compsets/nmm.input	(revision 84791)
@@ -0,0 +1,1117 @@
+load 'platforms.input'
+load 'nemscommon.input'
+
+########################################################################
+
+# NMM build targets:
+
+build nmm.x {
+    use plat
+    NEMS.x="@[plat%EXECrt]/NEMS_nmm.x"
+    modules.nems="@[plat%INCrt]/NEMS_nmm.x.modules"
+    target="@[NEMS.x]"
+#    build=rt.sh_build(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+#        ESMF_VER='nmmb_intel',NEMS_VER='nmm')
+    build=NEMSAppBuilder(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+                         OPTS="app=NMM")
+}
+
+build nmm_post.x {
+    use plat
+    NEMS.x="@[plat%EXECrt]/NEMS_nmm_post.x"
+    modules.nems="@[plat%INCrt]/NEMS_nmm_post.x.modules"
+    target="@[NEMS.x]"
+#    build=rt.sh_build(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+#        ESMF_VER='nmmb_intel',NEMS_VER='nmm')
+    build=NEMSAppBuilder(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+                         OPTS="app=NMM-POST")
+}
+
+build nmm.debug.x {
+    use plat
+    NEMS.x="@[plat%EXECrt]/NEMS_nmm_debug.x"
+    modules.nems="@[plat%INCrt]/NEMS_nmm_debug.x.modules"
+    target="@[NEMS.x]"
+#    build=rt.sh_build(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+#        ESMF_VER='nmmb_intel',NEMS_VER='nmm DEBUG=on')
+    build=NEMSAppBuilder(NEMS.x="@[NEMS.x]",modules.nems="@[modules.nems]",
+                         OPTS="app=NMM-DEBUG")
+}
+
+########################################################################
+
+# NMM variables used by many tests:
+
+nmm_vars={
+    GBRG='reg'          ,  NEMSI='false'       , RSTRT='false'
+    AFFN='core'         ,  NODE=1
+    NCHILD='0'          ,  MODE='1-way'        , WGT='0.0'
+    FCSTL='48'
+    PCPFLG='false'      ,  WPREC='false'
+    TS='false'
+    RADTN='rrtm'        ,  CONVC='bmj'         , TURBL='myj'
+    NP3D='3'            ,  CLDFRACTION='default'
+    SFC_LAYER='myj'     ,  LAND_SURFACE='noah'
+    MICRO='fer_hires'   ,  gfsP='false'        , SPEC_ADV='false'
+}
+
+nmm_uncoupled={
+    atm_model='nmm'
+    nems_configure='atm_nostep'
+}
+
+nmm_aliases={
+    wrtdopost="@[WRITE_DOPOST]"
+    postgrbvs="@[POST_GRIBVERSION]"
+    coupling_interval_fast_sec="@[med_atm_coupling_interval_sec]"
+}
+
+nmm_vars_global={
+    use plat%nmm_dflt
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="glob"
+    CNTL_NAME='NMMB_glob'
+}
+
+nmm_vars_regional={
+    use plat%nmm_dflt
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="reg"
+    CNTL_NAME='NMMB_reg'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+nmm_vars_nests={
+    use plat%nmm_nest
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="nests"
+    CNTL_NAME='NMMB_nests'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+nmm_vars_fltr={
+    use plat%nmm_fltr
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="fltr"
+    CNTL_NAME='NMMB_reg_filt'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+nmm_vars_mvg={
+    use plat%nmm_mvg1
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="mnests"
+    CNTL_NAME='NMMB_mvg_nests'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+nmm_vars_2way={
+    use plat%nmm_mvg2
+    use nems_vars
+    use common_vars
+    use nmm_vars
+    use nmm_aliases
+    use nmm_uncoupled
+    GBRG="mnests_2way"
+    CNTL_NAME='NMMB_2way_nests'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+########################################################################
+
+# NMM Tests:
+
+# NMM GLOBAL -----------------------------------------------------------
+
+# nmm_cntrl test
+test nmm_cntrl: nmm.x {
+    use nmm_vars_global
+
+    # Convenience variables:
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    TEST_DESCR="Compare NMMB-global results with previous trunk version"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    TEST_IN="@[plat%INPUTS]/@[CNTL_NAME]"   # Test-specific input data
+    COM="@[plat%COMrt]/@[TEST_NAME]"
+
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        "nmmb_hst_01_bin_0000h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_hst_01_bin_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_hst_01_bin_0048h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_hst_01_nio_0000h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_hst_01_nio_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_hst_01_nio_0048h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_rst_01_bin_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+	"nmmb_rst_01_nio_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+    }
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        # work file         operation   input file
+     "input_domain_01"        .copy. "@[TEST_IN]/test_input_nmmb_global"
+     "input_domain_01_nemsio" .copy. "@[TEST_IN]/test_input_nmmb_global.nemsio"
+     "GWD_bin_01"             .copy. "@[TEST_IN]/GWD_bin_01"
+
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "model_configure"        .copy. "configure_file_01"
+
+     "*"                   .copydir. "@[plat%NMM_DATA]"
+
+     "VEGPARM.TBL"            .copy. "IGBP_VEGPARM.TBL"
+     "LANDUSE.TBL"            .copy. "IGBP_LANDUSE.TBL"
+     "ETAMPNEW_DATA"          .copy. "ETAMPNEW_DATA.expanded_rain"
+     "fort.28"                .link. "global_o3prdlos.f77"
+     "fort.48"                .link. "global_o3clim.txt"
+
+     "solver_state.txt"       .copy. "@[plat%PARMnems]/solver_state.txt"
+     "nests.txt"              .copy. "@[plat%PARMnems]/nests.txt"
+    }
+}
+
+test nmm_nemsio: nmm.x {
+    use nmm_cntrl
+    NEMSI="true"
+    TEST_DESCR="Test NMMB-global NEMSIO as input file"
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_rest: nmm_cntrl, nmm.x {
+    use nmm_cntrl
+    RSTRT="true"
+    TEST_DESCR="Test NMMB-global restart run"
+    filters input {
+        use nmm_cntrl%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"        .copy. "configure_file_01"
+        "restart_file_01"        .copy. "@[TEST_IN]/nmmb_rst_01_bin_0024h_00m_00.00s"
+        "restart_file_01_nemsio" .copy. "@[TEST_IN]/nmmb_rst_01_nio_0024h_00m_00.00s"
+    }
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        "nmmb_hst_01_bin_0048h_00m_00.00s" .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_rest_nio: nmm.x {
+    use nmm_cntrl
+    NEMSI="true"
+    RSTRT="true"
+    TEST_DESCR="Test NMMB-global restart run from NEMSIO file"
+    filters input {
+        use nmm_cntrl%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"        .copy. "configure_file_01"
+        "restart_file_01_nemsio" .copy. "@[TEST_IN]/nmmb_rst_01_nio_0024h_00m_00.00s"
+    }
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+	"nmmb_hst_01_bin_0048h_00m_00.00s" .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_decomp: nmm.x {
+    use nmm_cntrl
+    FCSTL=24
+    TEST_DESCR="Test NMMB-global different decomposition"
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+	"nmmb_hst_01_bin_0000h_00m_00.00s" .bitcmp. "@[CNTL]"
+        "nmmb_hst_01_bin_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+        "nmmb_hst_01_nio_0000h_00m_00.00s" .bitcmp. "@[CNTL]"
+        "nmmb_hst_01_nio_0024h_00m_00.00s" .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_thread: nmm.x {
+    use nmm_cntrl
+    use plat%nmm_thrd
+    TEST_DESCR="Test NMMB-global threading"
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_rst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+# NMM REGIONAL ---------------------------------------------------------
+
+test nmm_reg_ctl: nmm.x {
+    use nmm_vars_regional
+    WPREC='true'
+    CNTL_NAME='NMMB_reg'
+    TEST_DESCR="Compare NMMB-regional results with previous trunk version"
+
+    # Convenience variables:
+    COM="@[plat%COMrt]/@[TEST_NAME]"
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    REG_IN="@[plat%INPUTS]/NMMB_reg"          # Regional input data
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        # work file         operation   input file
+     "input_domain_01"        .copy. "@[REG_IN]/input_nmmb_regional.d01"
+     "input_domain_01_nemsio" .copy. "@[REG_IN]/input_nmmb_regional.d01_nemsio"
+     "GWD_bin_01"             .copy. "@[REG_IN]/GWD_bin_01"
+     "boco.*"              .copydir. "@[REG_IN]"
+
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "model_configure"        .copy. "configure_file_01"
+
+     "*"                   .copydir. "@[plat%NMM_DATA]"
+
+     "VEGPARM.TBL"            .copy. "IGBP_VEGPARM.TBL"
+     "LANDUSE.TBL"            .copy. "IGBP_LANDUSE.TBL"
+     "ETAMPNEW_DATA"          .copy. "ETAMPNEW_DATA.expanded_rain"
+     "fort.28"                .link. "global_o3prdlos.f77"
+     "fort.48"                .link. "global_o3clim.txt"
+
+     "solver_state.txt"       .copy. "@[plat%PARMnems]/solver_state.txt"
+     "nests.txt"              .copy. "@[plat%PARMnems]/nests.txt"
+    }
+
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_01_bin_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_rst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'pcp.hr1.01.bin'                   .bitcmp. "@[CNTL]"
+        'pcp.hr2.01.bin'                   .bitcmp. "@[CNTL]"
+        'pcp.hr3.01.bin'                   .bitcmp. "@[CNTL]"
+        'pcp.hr4.01.bin'                   .bitcmp. "@[CNTL]"
+	'pcp.hr5.01.bin'                   .bitcmp. "@[CNTL]"
+        'pcp.hr6.01.bin'                   .bitcmp. "@[CNTL]"
+        'pcp.hr7.01.bin'                   .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_ctl_debug: nmm.debug.x {
+    use nmm_reg_ctl
+    FCSTL=3
+    TEST_DESCR="Compare NMMB-regional results with previous trunk version DEBUG"
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.debug.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+    criteria output {}
+}
+
+test nmm_reg_nemsio: nmm.x {
+    use nmm_reg_ctl
+    WPREC='false'
+    CNTL_NAME='NMMB_reg'
+    NEMSI='true'
+    FCSTL=12
+    TEST_DESCR="Test NMMB-regional NEMSIO as input file"
+
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_rst: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional restart run"
+    RSTRT='true'
+    WPREC='false'
+    filters input {
+        use nmm_reg_ctl%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"        .copy. "configure_file_01"
+        "restart_file_01"        .copy. "@[REG_IN]/nmmb_rst_01_bin_0024h_00m_00.00s"
+        "restart_file_01_nemsio" .copy. "@[REG_IN]/nmmb_rst_01_nio_0024h_00m_00.00s"
+    }
+    criteria output {
+        "nmmb_hst_01_bin_0048h_00m_00.00s" .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_rst_debug: nmm.debug.x {
+    use nmm_reg_rst
+    TEST_DESCR="Test NMMB-regional restart run DEBUG"
+    FCSTL=27
+    spawn execute {
+        { "@[nmm.debug.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+    filters input {
+        use nmm_reg_rst%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"     .copy.    "configure_file_01"
+    }
+    criteria output {}
+}
+
+test nmm_reg_rst_nio: nmm.x {
+    use nmm_reg_rst
+    TEST_DESCR="Test NMMB-regional restart run with NEMSIO file"
+    NEMSI='true'
+}
+
+test nmm_reg_rst_nio_debug: nmm.debug.x {
+    use nmm_reg_rst_debug
+    TEST_DESCR="Test NMMB-regional restart run with NEMSIO file DEBUG"
+    NEMSI='true'
+    filters input {
+        use nmm_reg_rst_debug%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"     .copy.    "configure_file_01"
+    }
+}
+
+
+test nmm_reg_decomp: nmm.x {
+    use nmm_reg_ctl
+    INPES=plat%nmm_dflt%INPES
+    JNPES=plat%nmm_dflt%JNPES
+    WPREC='false'
+    TEST_DESCR="Test NMMB-regional different decomposition"
+    FCSTL=12
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_thread: nmm.x {
+    use nmm_reg_ctl
+    use plat%nmm_thrd
+    TEST_DESCR="Test NMMB-regional threading"
+    WPREC='false'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0048h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+    # The execute step runs the program:
+    spawn execute {
+      { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]", ppn="@[ThreadPPN]" }
+    }
+}
+
+test nmm_reg_sel_phy: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with selected GFS physics schemes"
+    CNTL_NAME='NMMB_reg_sel_phy'
+    WPREC='false'
+    FCSTL='24'
+    CONVC='sas'
+    MICRO='gfs'
+    TURBL='gfs'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_spec_adv: nmm.x {
+    use nmm_reg_ctl
+    SPEC_ADV='true'
+    FCSTL='24'
+    NEMSI='true'
+    WPREC='false'
+    CNTL_NAME='NMMB_reg_spec_adv'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_spec_adv_rst: nmm.x {
+    use nmm_reg_spec_adv
+    RSTRT='true'
+    CNTL_NAME='NMMB_reg_spec_adv'
+    filters input {
+        use nmm_reg_spec_adv%input
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "model_configure"        .copy. "configure_file_01"
+        'restart_file_01'        .copy. "@[plat%INPUTS]/NMMB_reg_spec_adv/nmmb_rst_01_bin_0012h_00m_00.00s"
+        'restart_file_01_nemsio' .copy. "@[plat%INPUTS]/NMMB_reg_spec_adv/nmmb_rst_01_nio_0012h_00m_00.00s"
+    }
+    criteria output {
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_wsm6_gfdl: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with physics schemes WSM6 and GFDL"
+    CNTL_NAME='NMMB_reg_wsm6_gfdl'
+    WPREC='false'
+    MICRO='wsm6'
+    RADTN='gfdl'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_wsm6_rrtm: nmm.x {
+    use nmm_reg_wsm6_gfdl
+    TEST_DESC="Test NMMB-regional with physics schemes WSM6 and RRTM"
+    CNTL_NAME='NMMB_reg_wsm6_rrtm'
+    RADTN='rrtm'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_sas_zhao: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with physics schemes SAS, ZHAO"
+    CNTL_NAME='NMMB_reg_sas_zhao'
+    WPREC='false'
+    FCSTL='24'
+    CONVC='sas'
+    MICRO='gfs'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_thomp: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with THOMPSON microphysics scheme"
+    CNTL_NAME='NMMB_reg_thomp'
+    WPREC='false'
+    FCSTL='24'
+    MICRO='thompson'
+    SPEC_ADV='true'
+    NP3D='8'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_hur: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with 2014 HWRF physics"
+    CNTL_NAME='NMMB_reg_hur'
+    WPREC='false'
+    FCSTL='24'
+    TURBL='gfsedmfhur'
+    CONVC='scalecu'
+    MICRO='fer_hires'
+    RADTN='gfdl'
+    SFC_LAYER='gfdl'
+    LAND_SURFACE='noah'
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_pcpadj: nmm.x, nmm_reg_ctl {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional with precipitation adjustment on"
+    WPREC='false'
+    FCSTL='12'
+    PCPFLG='true'
+    CNTL_NAME='NMMB_reg_pcpadj'
+    filters input {
+        use nmm_reg_ctl%input
+        'pcp.hr*'     .copydir.     "../nmm_reg_ctl"
+        # Need to redo these with different settings:
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+    }
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_timesr: nmm.x {
+    use nmm_reg_ctl
+    TEST_DESCR="Test NMMB-regional writing time series"
+    CNTL_NAME="NMMB_reg_timesr"
+    TS='true'
+    WPREC='false'
+    FCSTL='06'
+    filters input {
+        use nmm_reg_ctl%input
+        # work file         operation   input file
+        "ts_locations.nml"   .copy.  "@[plat%PARMnems]/ts_locations.nml"
+        # Need to redo these with different settings:
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+    }
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0006h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'ts_p01_d01.bin'                   .bitcmp. "@[CNTL]"
+        'ts_p02_d01.bin'                   .bitcmp. "@[CNTL]"
+    }
+}
+
+# NMM NESTS ------------------------------------------------------------
+
+test nmm_nests: nmm.x {
+    use nmm_vars_nests
+    FCSTL=24
+    NCHILD='02'
+
+    # Convenience variables:
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    TEST_DESCR="Test NMMB-regional with static nests"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    TEST_IN="@[plat%INPUTS]/@[CNTL_NAME]"   # Test-specific input data
+    COM="@[plat%COMrt]/@[TEST_NAME]"
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+                           CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        # work file         operation   input file
+     "input_domain_01"        .copy. "@[TEST_IN]/input_nmmb_regional.d01"
+     "input_domain_01_nemsio" .copy. "@[TEST_IN]/input_nmmb_regional.d01_nemsio"
+     "boco.*"              .copydir. "@[TEST_IN]"
+     "GWD_bin_*"           .copydir. "@[TEST_IN]"
+
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "configure_file_02"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_02.IN"
+     "configure_file_03"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_03.IN"
+     "configure_file_04"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_04.IN"
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+     "model_configure"        .copy. "configure_file_01"
+
+     "*"                   .copydir. "@[plat%NMM_DATA]"
+
+     "VEGPARM.TBL"            .copy. "IGBP_VEGPARM.TBL"
+     "LANDUSE.TBL"            .copy. "IGBP_LANDUSE.TBL"
+     "ETAMPNEW_DATA"          .copy. "ETAMPNEW_DATA.expanded_rain"
+     "fort.28"                .link. "global_o3prdlos.f77"
+     "fort.48"                .link. "global_o3clim.txt"
+
+     "solver_state.txt"       .copy. "@[plat%PARMnems]/solver_state.txt"
+     "nests.txt"              .copy. "@[plat%PARMnems]/nests.txt"
+    }
+
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_03_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_03_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_04_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_04_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_nest_rest: nmm_nests, nmm.x {
+    use nmm_nests
+    FCSTL=24
+    NCHILD='02'
+    RSTRT='true'
+    TEST_DESCR="Test NMMB-regional static nests with restart"
+
+    filters input {
+        use nmm_nests%input
+        "restart_file_01"        .copy. "@[TEST_IN]/nmmb_rst_01_bin_0012h_00m_00.00s"
+        "restart_file_02"        .copy. "@[TEST_IN]/nmmb_rst_02_bin_0012h_00m_00.00s"
+        "restart_file_03"        .copy. "@[TEST_IN]/nmmb_rst_03_bin_0012h_00m_00.00s"
+        "restart_file_04"        .copy. "@[TEST_IN]/nmmb_rst_04_bin_0012h_00m_00.00s"
+    }
+
+    criteria output {
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+# NMM DIGITAL FILTERING ------------------------------------------------
+
+test nmm_reg_filt: nmm.x {
+    use nmm_vars_fltr
+
+    FCSTL='03'
+    NEMSI='true'
+    NCHILD='01'
+
+    # Convenience variables:
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    TEST_DESCR="Test NMMB-regional digital filter with static nests"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    NEST_IN="@[plat%INPUTS]/NMMB_nests"       # NMM nesting input files
+    FILT_IN="@[plat%INPUTS]/NMMB_reg_filt"    # NMM filtering input files
+    COM="@[plat%COMrt]/@[TEST_NAME]"
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        'input_domain_01'          .copy. "@[NEST_IN]/input_nmmb_regional.d01"
+        'input_domain_01_nemsio'   .copy. "@[NEST_IN]/input_nmmb_regional.d01_nemsio"
+        'boco*'                 .copydir. "@[NEST_IN]"
+        '*'                     .copydir. "@[plat%NMM_DATA]"
+        'GWD_bin_*'             .copydir. "@[FILT_IN]"
+        'VEGPARM.TBL'              .copy. 'IGBP_VEGPARM.TBL'
+        'LANDUSE.TBL'              .copy. 'IGBP_LANDUSE.TBL'
+        'ETAMPNEW_DATA'            .copy. 'ETAMPNEW_DATA.expanded_rain'
+
+        "configure_file_01"     .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "nems.configure"        .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+        "atmos.configure"       .atparse. "@[CONF]/atmos.configure_nmm"
+        "model_configure"          .copy. "configure_file_01"
+        
+        'configure_file_02'        .copy. "@[CONF]/nmm_conf/nmm_fltr_conf_02"
+        'configure_file_03'        .copy. "@[CONF]/nmm_conf/nmm_fltr_conf_03"
+
+        "fort.28"                  .link. "global_o3prdlos.f77"
+        "fort.48"                  .link. "global_o3clim.txt"
+        "solver_state.txt"         .copy. "@[plat%PARMnems]/solver_state.txt"
+        "filt_vars.txt"            .copy. "@[plat%PARMnems]/filt_vars.txt"
+        "nests.txt"                .copy. "@[plat%PARMnems]/nests.txt"
+    }
+
+    criteria output {
+        'nmmb_hst_01_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_reg_filt_zombie: nmm.x {
+    use nmm_reg_filt
+    GBRG='fltr_zombie'
+    CNTL_NAME='NMMB_reg_filt_zombie'
+    TEST_DESCR="Test NMMB-regional digital filter with zombie grandchild"
+    criteria output {
+        'nmmb_hst_01_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0003h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+    filters input {
+        use nmm_reg_filt%input
+        'configure_file_03' .copy. "@[CONF]/nmm_conf/nmm_fltr_zombie_conf_03"
+    }
+}
+
+# NMM MOVING NESTING TESTS ---------------------------------------------
+
+test nmm_mvg_nests: nmm.x {
+    use nmm_vars_mvg
+    FCSTL='24'
+    NCHILD='02'
+    NEMSI='true'
+
+    # Convenience variables:
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    TEST_DESCR="Test NMMB-regional with 2-way moving nests"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    IN_MOVE="@[plat%INPUTS]/NMMB_mvg_nests"   # Moving nesting inputs
+    IN_2WAY="@[plat%INPUTS]/NMMB_2way_nests"  # 2-way nesting inputs
+    COM="@[plat%COMrt]/@[TEST_NAME]"
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        # work file           operation  input file
+        'input_domain_01_nemsio' .copy. "@[IN_MOVE]/input_domain_01_nemsio"
+        'input_domain_02_nemsio' .copy. "@[IN_MOVE]/input_domain_02_nemsio"
+        'input_domain_03_nemsio' .copy. "@[IN_MOVE]/input_domain_03_nemsio"
+        'input_domain_04_nemsio' .copy. "@[IN_MOVE]/input_domain_04_nemsio"
+        'boco.*'              .copydir. "@[IN_MOVE]/"
+        '*'                   .copydir. "@[plat%NMM_DATA]/"
+        'GWD_bin_*'           .copydir. "@[IN_MOVE]/"
+        '*_3.nc'              .copydir. "@[IN_MOVE]/"
+        '*_9.nc'              .copydir. "@[IN_MOVE]/"
+        'VEGPARM.TBL'            .copy. "IGBP_VEGPARM.TBL"
+        'LANDUSE.TBL'            .copy. "IGBP_LANDUSE.TBL"
+        'ETAMPNEW_DATA'          .copy. "ETAMPNEW_DATA.expanded_rain"
+
+        "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "configure_file_02"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_02.IN"
+        "configure_file_03"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_03.IN"
+        "configure_file_04"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_04.IN"
+        "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+        "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+        "model_configure"        .copy. "configure_file_01"
+        "fort.28"                .link. "global_o3prdlos.f77"
+        "fort.48"                .link. "global_o3clim.txt"
+
+        "solver_state.txt"       .copy. "@[plat%PARMnems]/solver_state.txt"
+        "nests.txt"              .copy. "@[plat%PARMnems]/nests.txt"
+    }
+
+    criteria output {
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_03_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_03_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_04_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_04_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_mvg_nests_restart: nmm_mvg_nests, nmm.x {
+    use nmm_mvg_nests
+    TEST_DESCR="Test NMMB-regional with moving nests - RESTART"
+    RSTRT='true'
+    filters input {
+        use nmm_mvg_nests%input
+        'restart_file_01'        .copy. "@[IN_MOVE]/nmmb_rst_01_bin_0012h_00m_00.00s"
+        'restart_file_01_nemsio' .copy. "@[IN_MOVE]/nmmb_rst_01_nio_0012h_00m_00.00s"
+        'restart_file_02'        .copy. "@[IN_MOVE]/nmmb_rst_02_bin_0012h_00m_00.00s"
+        'restart_file_02_nemsio' .copy. "@[IN_MOVE]/nmmb_rst_02_nio_0012h_00m_00.00s"
+        'restart_file_03'        .copy. "@[IN_MOVE]/nmmb_rst_03_bin_0012h_00m_00.00s"
+        'restart_file_03_nemsio' .copy. "@[IN_MOVE]/nmmb_rst_03_nio_0012h_00m_00.00s"
+        'restart_file_04'        .copy. "@[IN_MOVE]/nmmb_rst_04_bin_0012h_00m_00.00s"
+        'restart_file_04_nemsio' .copy. "@[IN_MOVE]/nmmb_rst_04_nio_0012h_00m_00.00s"
+    }
+    criteria output {
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_mvg_nests_gens: nmm.x {
+    use nmm_mvg_nests
+    use plat%nmm_mvg2
+    TEST_DESCR="Test NMMB-regional with 1-way moving nests and generational task assignments"
+    MODE='2-way'
+    filters input {
+        use nmm_mvg_nests%input
+        'configure_file_02' .atparse. "@[CONF]/nmm_conf/nmm_mnests_2way_conf_02.IN"
+        'configure_file_03' .atparse. "@[CONF]/nmm_conf/nmm_mnests_2way_conf_03.IN"
+        'configure_file_04' .atparse. "@[CONF]/nmm_conf/nmm_mnests_2way_conf_04.IN"
+
+        # Need to regenerate these due to nmm_mvg2:
+        "configure_file_01" .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+        "nems.configure"    .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+        "atmos.configure"   .atparse. "@[CONF]/atmos.configure_nmm"
+        "model_configure"      .copy. "configure_file_01"
+    }
+    criteria output {
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+# NMM 2-WAY STATIONARY NEST TESTS --------------------------------------
+
+test nmm_2way_nests: nmm.x {
+    use nmm_vars_2way
+    FCSTL=24
+    NCHILD='02'
+    NEMSI='true'
+    MODE='2-way'
+    WGT='1.0'
+
+    # Convenience variables:
+    RUNDIR_ROOT="@[plat%TMPrt]"
+    RUNDIR="@[RUNDIR_ROOT]/@[TEST_NAME]"
+    TEST_DESCR="Test NMMB-regional with 2-way moving nests"
+    CNTL="@[plat%BASELINE]/@[CNTL_NAME]"      # Control baseline area
+    IN_MOVE="@[plat%INPUTS]/NMMB_mvg_nests"   # Moving nesting inputs
+    IN_2WAY="@[plat%INPUTS]/NMMB_2way_nests"  # 2-way nesting inputs
+    COM="@[plat%COMrt]/@[TEST_NAME]"          # Path to test output area
+
+    # The prep is run at the top of any job.  It should do such things
+    # like making directories and loading modules.
+    prep=nems_regtest_prep(
+        RUNDIR="@[RUNDIR]",modules="@[nmm.x%modules.nems]",
+        CNTL="@[CNTL]")
+
+    # The execute step runs the program:
+    spawn execute {
+        { "@[nmm.x%NEMS.x]", ranks="@[TASKS]", threads="@[OpenMPThreads]" }
+    }
+
+    filters input {
+        # work file         operation   input file
+     "input_domain_01_nemsio" .copy. "@[IN_MOVE]/input_domain_01_nemsio"
+     "input_domain_02_nemsio" .copy. "@[IN_MOVE]/input_domain_02_nemsio"
+     "input_domain_03_nemsio" .copy. "@[IN_MOVE]/input_domain_03_nemsio"
+     "input_domain_04_nemsio" .copy. "@[IN_MOVE]/input_domain_04_nemsio"
+
+     "boco.*"              .copydir. "@[IN_MOVE]"
+     "*"                   .copydir. "@[plat%NMM_DATA]"
+     "GWD_bin_*"           .copydir. "@[IN_MOVE]"
+     "*_3.nc"              .copydir. "@[IN_MOVE]"
+     "*_9.nc"              .copydir. "@[IN_MOVE]"
+
+     "VEGPARM.TBL"            .copy. "IGBP_VEGPARM.TBL"
+     "LANDUSE.TBL"            .copy. "IGBP_LANDUSE.TBL"
+     "ETAMPNEW_DATA"          .copy. "ETAMPNEW_DATA.expanded_rain"
+     "fort.28"                .link. "global_o3prdlos.f77"
+     "fort.48"                .link. "global_o3clim.txt"
+
+     "configure_file_01"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf.IN"
+     "configure_file_02"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_02.IN"
+     "configure_file_03"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_03.IN"
+     "configure_file_04"   .atparse. "@[CONF]/nmm_conf/nmm_@[GBRG]_conf_04.IN"
+     "nems.configure"      .atparse. "@[CONF]/nems.configure.@[nems_configure].IN"
+     "atmos.configure"     .atparse. "@[CONF]/atmos.configure_nmm"
+     "model_configure"        .copy. "configure_file_01"
+
+     "solver_state.txt"       .copy. "@[plat%PARMnems]/solver_state.txt"
+     "nests.txt"              .copy. "@[plat%PARMnems]/nests.txt"
+    }
+
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_01_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_rst_01_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_01_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_02_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_02_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_02_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_03_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_03_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_rst_03_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_03_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_04_bin_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_hst_04_nio_0000h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+	'nmmb_rst_04_bin_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_rst_04_nio_0012h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
+
+test nmm_2way_nests_debug: nmm.debug.x {
+    use nmm_2way_nests
+    FCSTL=3
+    TEST_DESCR="Test NMMB-regional with 2-way moving nests DEBUG"
+    criteria output {}
+}
+
+test nmm_2way_nests_restart: nmm_2way_nests, nmm.x {
+    use nmm_2way_nests
+    RSTRT='true'
+    TEST_DESCR="Test NMMB-regional with 2-way moving nests - RESTART"
+
+    filters input {
+        use nmm_2way_nests%input
+        "restart_file_01"        .copy. "@[IN_2WAY]/nmmb_rst_01_bin_0012h_00m_00.00s"
+        "restart_file_02"        .copy. "@[IN_2WAY]/nmmb_rst_02_bin_0012h_00m_00.00s"
+        "restart_file_03"        .copy. "@[IN_2WAY]/nmmb_rst_03_bin_0012h_00m_00.00s"
+        "restart_file_04"        .copy. "@[IN_2WAY]/nmmb_rst_04_bin_0012h_00m_00.00s"
+        "restart_file_01_nemsio" .copy. "@[IN_2WAY]/nmmb_rst_01_nio_0012h_00m_00.00s"
+        "restart_file_02_nemsio" .copy. "@[IN_2WAY]/nmmb_rst_02_nio_0012h_00m_00.00s"
+        "restart_file_03_nemsio" .copy. "@[IN_2WAY]/nmmb_rst_03_nio_0012h_00m_00.00s"
+        "restart_file_04_nemsio" .copy. "@[IN_2WAY]/nmmb_rst_04_nio_0012h_00m_00.00s"
+    }
+    
+    criteria output {
+        #    NEMS.x output file --------- comparison - control file or dir
+        'nmmb_hst_01_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_01_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_02_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_bin_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_03_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+        'nmmb_hst_04_nio_0024h_00m_00.00s' .bitcmp. "@[CNTL]"
+    }
+}
Index: checkout/compsets/platforms.input
===================================================================
--- checkout/compsets/platforms.input	(nonexistent)
+++ checkout/compsets/platforms.input	(revision 84791)
@@ -0,0 +1,243 @@
+# DEFAULTS VALUES OVERRIDDEN BY PLATFORMS
+
+platform.defaults={
+    BUILD_WALLTIME=3600 # Wallclock limit in seconds for build jobs
+    DEFAULT_TEST_WALLTIME=1800 # Default wallclock limit in seconds for test jobs
+
+    SRCnems="@[HOMEnems]/NEMS/src"
+    PARMnems="@[HOMEnems]/NEMS/tests"
+
+    SRCrt="@[HOMErt]/src"
+    EXECrt="@[HOMErt]/exec"
+    INCrt="@[HOMErt]/include"
+
+    # The TMPrt is the scrub area for running regression tests.
+    TMPrt="@[RT_SCRATCH_DIR]/tmp"
+
+    # The COMrt is the output area for files to be verified.
+    COMrt="@[HOMErt]/com"
+
+    # NMM_DATA is the general NMM input directory, with files common
+    # to all NMM configurations.
+    NMM_DATA="@[INPUTS]/data"   # NMM regression test inputs
+
+    # The BASELINE directory contains the "last known good" baseline
+    # to compare to COMrt in verification mode.  In baseline mode,
+    # files are installed to the BASELINE directory, and this variable
+    # is overridden with some temporary directory.
+    BASELINE="@[INPUTS]" # Baseline input or output directory
+}
+
+
+########################################################################
+
+# NMM COMPONENT RESOURCES PER PLATFORM
+
+nmm.nothreads={
+  nmm_dflt={ TASKS=48, OpenMPThreads=1, INPES="05", JNPES="09", WTPG=3 }
+  nmm_thrd={ TASKS=48, OpenMPThreads=1, INPES="05", JNPES='09', WTPG=3, 
+             ThreadPPN="@[plat%cores_per_node]" }
+  nmm_nest={ TASKS=96, OpenMPThreads=1, INPES="02", JNPES="02", WTPG=1 }
+  nmm_fltr={ TASKS=64, OpenMPThreads=1, INPES='02', JNPES='02', WTPG=1 }
+  nmm_mvg1={ TASKS=96, OpenMPThreads=1, INPES='05', JNPES='07', WTPG=1 }
+  nmm_mvg2={ TASKS=96, OpenMPThreads=1, INPES='05', JNPES='18', WTPG=2 }
+}
+
+nmm.threaded.wcoss1={
+  nmm_dflt={ TASKS=32, OpenMPThreads=1, INPES='05', JNPES='06', WTPG=2 }
+  nmm_thrd={ TASKS=16, OpenMPThreads=2, INPES='03', JNPES='05', WTPG=1, 
+             ThreadPPN="8" }
+  nmm_nest={ TASKS=96, OpenMPThreads=1, INPES='02', JNPES='02', WTPG=1 }
+  nmm_fltr={ TASKS=64, OpenMPThreads=1, INPES='02', JNPES='02', WTPG=1 }
+  nmm_mvg1={ TASKS=96, OpenMPThreads=1, INPES='05', JNPES='07', WTPG=1 }
+  nmm_mvg2={ TASKS=96, OpenMPThreads=1, INPES='05', JNPES='18', WTPG=2 }
+}
+
+########################################################################
+
+# WCOSS PLATFORMS
+
+wcoss.common={   # Common resources for all WCOSSes
+    use platform.defaults
+    use nmm.threaded.wcoss1
+    MACHINE_ID='wcoss'
+
+    HOMEnems=PWD_UP5
+    HOMErt=OUTPUT_PATH
+    BASELINE="/nems/noscrub/emc.nemspara/REGRESSION_TEST"
+    BASELINE_TEMPLATE="/nems/noscrub/emc.nemspara/REGRESSION_TEST_baselines"
+    INPUTS="@[BASELINE]"
+#    INPUTS='/meso/noscrub/wx20rv/REGRESSION_TEST'
+}
+
+platform wcoss.phase1 {
+    use wcoss.common
+    CPU_ACCOUNT='NAM-T2O'
+    pex='1'
+    cores_per_node=32
+    MPI='LSF'
+    SHORT_TEST_QUEUE='&SHORTQ;'
+    LONG_TEST_QUEUE='&LONGQ;'
+    BUILD_QUEUE='&BUILDQ;'
+
+    embed bash detect [[[
+        # This function is used at PARSE TIME to detect whether we are
+        # on WCOSS Phase 1.  It must be very fast and low resource
+        # usage since the parser runs it.
+        if [[ -d /usrx && -d /global && -e /etc/redhat-release && \
+              -e /etc/prod ]] ; then
+            # We are on WCOSS Phase 1 or 2.
+            if ( ! cat /proc/cpuinfo |grep 'processor.*32' ) ; then
+                # Fewer than 32 fake (hyperthreading) cpus, so Phase 1.
+                exit 0
+            fi
+        fi
+        exit 1
+    ]]]
+
+    # ROCOTO SUPPORT ---------------------------------------------------
+    rocoto={
+        install_dir="@[HOMErt]"
+        log_dir="@[TMPrt]/log"
+        scheduler="lsf"
+        entities=[[[
+  <!ENTITY SHORTQ "dev">
+  <!ENTITY LONGQ "dev">
+  <!ENTITY BUILDQ "dev_shared">
+]]]
+        build_resources=[[[
+      <!-- Build job resources minus wallclock -->
+      <queue>@[BUILD_QUEUE]</queue>
+      <memory>4G</memory>
+      <cores>1</cores>
+      <native>-R 'affinity[core(1)]'</native>
+]]]
+        short_test_resources=[[[
+    <!-- Short test job -->
+    <queue>@[SHORT_TEST_QUEUE]</queue>
+    <memory></memory> <!-- Unlimited memory -->
+    <native>-a poe</native>
+]]]
+        long_test_resources=[[[
+    <!-- Long test job -->
+    <queue>@[LONG_TEST_QUEUE]</queue>
+    <memory></memory> <!-- Unlimited memory -->
+    <native>-a poe</native>
+]]]
+    }
+
+}
+
+platform wcoss.cray {
+    # FIXME: WCOSS CRAY SUPPORT DOES NOT WORK YET
+    use platform.defaults
+    use nmm.threaded.wcoss1
+    MACHINE_ID='wcoss'
+    pex='cray'
+    BUILD_QUEUE='dev'
+    SHORT_TEST_QUEUE='dev'
+    LONG_TEST_QUEUE='dev'
+    MPI='LSFCray'
+
+    # The *nems locations are in NEMS checkout areas.
+    HOMEnems="FIXME"
+
+    # The *rt locations are auto-generated areas.
+    HOMErt="FIXME"
+
+    # INPUTS is the input directory, which should contain fix and parm
+    # files, plus any restarts or other inputs.
+    INPUTS="FIXME"
+
+    rocoto={
+        ## FIXME: INSERT TEXT HERE
+    }
+
+    embed bash detect [[[
+        # This function is used at PARSE TIME to detect whether we are
+        # on WCOSS Cray.  It must be very fast and low resource usage
+        # since the parser runs it.
+        if [[ -d /gpfs/hps && -e /etc/SuSE-release && -d /usrx ]] ; then
+            exit 0
+        fi
+        exit 1
+    ]]]
+}
+
+########################################################################
+
+# THEIA SUPPORT
+
+platform theia {
+    use platform.defaults
+    use nmm.nothreads
+    MACHINE_ID='theia' # Name of this platform.
+
+    MPI='MPICH'
+
+    CPU_ACCOUNT='nems'
+    BUILD_QUEUE='&BUILDQ;' # Queue to use for compilation jobs
+    SHORT_TEST_QUEUE='&SHORTQ;' # Queue to use for short test jobs
+    LONG_TEST_QUEUE='&LONGQ;' # Queue to use for long test jobs
+
+    cores_per_node=24 # Number of cores per node on compute nodes
+
+    # The *nems locations are in NEMS checkout areas.
+    HOMEnems=PWD_UP5
+
+    # The *rt locations are auto-generated areas.
+    HOMErt=OUTPUT_PATH
+
+    # INPUTS is the input directory, which should contain fix and parm
+    # files, plus any restarts or other inputs.
+    BASELINE="/scratch4/NCEPDEV/nems/noscrub/emc.nemspara/REGRESSION_TEST"
+    BASELINE_TEMPLATE="/scratch4/NCEPDEV/nems/noscrub/emc.nemspara/REGRESSION_TEST_baselines"
+    INPUTS="@[BASELINE]"
+
+    # PLATFORM DETECTION -----------------------------------------------
+    embed bash detect [[[
+        # This function is used at PARSE TIME to detect whether we are
+        # on NOAA Theia.  It must be very fast and low resource usage
+        # since the parser runs it.
+        if [[ -d /scratch3 && -d /scratch4 && -d /contrib ]] ; then
+            exit 0
+        fi
+        exit 1
+    ]]]
+
+    # ROCOTO SUPPORT ---------------------------------------------------
+    rocoto={
+        install_dir="@[HOMErt]"
+        log_dir="@[TMPrt]/log"
+        scheduler="moabtorque"
+        entities=[[[
+  <!ENTITY SHORTQ "batch">
+  <!ENTITY LONGQ "batch">
+  <!ENTITY BUILDQ "service">
+]]]
+        build_resources=[[[
+      <!-- Build job resources minus wallclock -->
+      <queue>@[BUILD_QUEUE]</queue>
+      <memory>4G</memory>
+      <cores>1</cores>
+]]]
+        short_test_resources=[[[
+    <!-- Short test job -->
+    <queue>@[SHORT_TEST_QUEUE]</queue>
+    <memory></memory> <!-- Unlimited memory -->
+]]]
+        long_test_resources=[[[
+    <!-- Long test job -->
+    <queue>@[LONG_TEST_QUEUE]</queue>
+    <memory></memory> <!-- Unlimited memory -->
+]]]
+    }
+
+}
+
+########################################################################
+
+# Autodetection of available platforms.  Calls the "detect" function
+# from each of the listed platforms.
+
+autodetect plat (/ wcoss.phase1, theia /) # , wcoss.cray
Index: checkout/compsets/all.input
===================================================================
--- checkout/compsets/all.input	(nonexistent)
+++ checkout/compsets/all.input	(revision 84791)
@@ -0,0 +1,55 @@
+load 'gsm.input'
+load 'nmm.input'
+
+
+run nmm_cntrl              @ nmm, standard, baseline, nmmglob
+run nmm_nemsio             @ nmm,                     nmmglob
+run nmm_rest               @ nmm,                     nmmglob
+run nmm_rest_nio           @ nmm, standard,           nmmglob
+run nmm_decomp             @ nmm, standard,           nmmglob
+run nmm_thread             @ nmm, standard,           nmmglob
+run nmm_reg_ctl            @ nmm,           baseline, nmmreg
+run nmm_reg_nemsio         @ nmm, standard,           nmmreg
+run nmm_reg_rst            @ nmm, standard,           nmmreg
+run nmm_reg_rst_nio        @ nmm,                     nmmreg
+run nmm_reg_decomp         @ nmm,                     nmmreg
+run nmm_reg_thread         @ nmm,                     nmmreg
+run nmm_reg_sel_phy        @ nmm,           baseline, nmmreg
+run nmm_reg_spec_adv       @ nmm,           baseline, nmmreg
+run nmm_reg_spec_adv_rst   @ nmm,                     nmmreg
+run nmm_reg_wsm6_gfdl      @ nmm,           baseline, nmmreg
+run nmm_reg_wsm6_rrtm      @ nmm,           baseline, nmmreg
+run nmm_reg_sas_zhao       @ nmm,           baseline, nmmreg
+run nmm_reg_thomp          @ nmm,           baseline, nmmreg
+run nmm_reg_hur            @ nmm,           baseline, nmmreg
+run nmm_reg_pcpadj         @ nmm,           baseline, nmmreg
+run nmm_reg_timesr         @ nmm,           baseline, nmmreg
+run nmm_nests              @ nmm,           baseline, nmmnests
+run nmm_nest_rest          @ nmm, standard,           nmmnests
+run nmm_reg_filt           @ nmm,           baseline, nmmreg
+run nmm_reg_filt_zombie    @ nmm,           baseline, nmmreg
+run nmm_mvg_nests          @ nmm,           baseline, nmmmove
+run nmm_mvg_nests_restart  @ nmm,                     nmmmove
+run nmm_mvg_nests_gens     @ nmm,                     nmmmove
+run nmm_2way_nests         @ nmm,           baseline, nmm2way
+run nmm_2way_nests_restart @ nmm,                     nmm2way
+run nmm_reg_rst_nio_debug  @ nmm, standard,           nmmreg,   debug
+run nmm_reg_rst_debug      @ nmm, standard,           nmmreg,   debug
+run nmm_reg_ctl_debug      @ nmm, standard,           nmmreg,   debug
+run nmm_2way_nests_debug   @ nmm, standard,           nmm2way,  debug
+
+
+run gfs_eulerian           @ gfs, standard, baseline
+run wam_gh_l150            @ gfs, standard, baseline, wam
+run wam_gh_l150_nemsio     @ gfs, standard, baseline, wam
+run gfs_slg                @ gfs, standard, baseline, slg
+run gfs_slg_2thread        @ gfs, standard, baseline, slg, plat==wcoss.phase1
+run gfs_slg_48pe           @ gfs, standard, baseline, slg
+run gfs_slg_adiabatic      @ gfs, standard, baseline, slg
+run gfs_slg_land           @ gfs, standard, baseline, slg
+run gfs_slg_nsst           @ gfs, standard, baseline, slg
+run gfs_slg_rsthst         @ gfs, standard, baseline, slg
+run gfs_slg_stochy         @ gfs, standard, baseline, slg
+run gfs_slg_t574           @ gfs, standard, baseline, slg
+run gfs_gocart_nemsio      @ gfs, standard, baseline, gocart
+
Index: checkout/compsets/nemscommon.input
===================================================================
--- checkout/compsets/nemscommon.input	(nonexistent)
+++ checkout/compsets/nemscommon.input	(revision 84791)
@@ -0,0 +1,77 @@
+
+# Common variables used by many tests:
+
+nems_vars={
+    atm_model='none'
+    atm_petlist_bounds="-1 -1"
+    ocn_model='none'
+    ocn_petlist_bounds="-1 -1"
+    ice_model='none'
+    ice_petlist_bounds="-1 -1"
+    med_model='nems'
+    med_petlist_bounds="-1 -1"
+    med_atm_coupling_interval_sec='-1'
+    med_ocn_coupling_interval_sec='-1'
+}
+
+common_vars={
+    THRD=1
+    WLCLK=15
+    GEFS_ENSEMBLE=0
+    GEN_ENSEMBLE=0
+    WRITE_DOPOST='.false.'
+    POST_GRIBVERSION='grib1'
+    CONF="@[plat%PARMnems]"          # Configuration files (NEMS/tests)
+}
+
+########################################################################
+
+# Common prep step at the top of all tests:
+
+embed bash nems_regtest_prep(RUNDIR,modules,CNTL) [[[
+        mkdir -p "$RUNDIR" "$CNTL"
+        cd @[RUNDIR]
+        source "$modules"
+        export MPI_TYPE_DEPTH=20
+        export ESMF_RUNTIME_COMPLIANCECHECK=OFF:depth=4
+]]]
+
+########################################################################
+
+# Old rt.sh build system.  Note that the $NEMS_VER must use $ not @ to
+# ensure it is not quoted.  Any shell metacharacters, such as spaces,
+# should be interpreted:
+
+embed bash rt.sh_build(NEMS.x,modules.nems,ESMF_VER,
+                       MACHINE_ID="@[plat%MACHINE_ID]",NEMS_VER)
+[[[
+        mkdir -p "@[plat%EXECrt]" "@[plat%INCrt]"
+        rm -f "@[NEMS.x]" "@[modules.nems]"
+        cd @[plat%SRCnems]
+        ./configure @[ESMF_VER]_@[MACHINE_ID]
+        cp -fp conf/modules.nems "@[modules.nems]"
+        source "@[modules.nems]"
+        module list
+        gmake clean
+        gmake $NEMS_VER J=-j2
+        cp -fp ../exe/NEMS.x "@[NEMS.x]"
+]]]
+
+########################################################################
+
+# NEMSAppBuilder build system.  Note $OPTS must use $ not @ since
+# shell metacharacters should be expanded, especially spaces.
+
+embed bash NEMSAppBuilder(NEMS.x,modules.nems,OPTS)
+[[[
+        mkdir -p "@[plat%EXECrt]" "@[plat%INCrt]"
+        rm -f "@[NEMS.x]" "@[modules.nems]"
+        cd @[plat%HOMEnems]
+
+        # NOTE: Replace "rebuild" with "norebuild" to disable "gmake clean"
+        ./NEMS/NEMSAppBuilder rebuild $OPTS
+
+        cd @[plat%SRCnems]
+        cp -fp ../exe/NEMS.x "@[NEMS.x]"
+        cp -fp conf/modules.nems "@[modules.nems]"
+]]]
Index: checkout
===================================================================
--- checkout	(revision 84675)
+++ checkout	(revision 84791)

Property changes on: checkout
___________________________________________________________________
Modified: svn:externals
## -1,5 +1,4 ##
-NEMS                  -r 84674 https://svnemc.ncep.noaa.gov/projects/nems/trunk
+NEMS                  -r 84790 https://svnemc.ncep.noaa.gov/projects/nems/trunk
 NEMS/src/atmos/gsm    -r 83593 https://svnemc.ncep.noaa.gov/projects/gsm/trunk
 NEMS/src/atmos/nmm    -r 84154 https://svnemc.ncep.noaa.gov/projects/nmmb/trunk
 NEMS/src/chem         -r 80652 https://svnemc.ncep.noaa.gov/projects/nceplibs/chem/trunk
-NEMS/tests/produtil   -r 84032 https://svnemc.ncep.noaa.gov/projects/nceplibs/produtil/branches/regtests
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /nems/apps/NEMSLegacy/branches/regtests:r84323-84789

--=_5834f0a3.cPDgIH+CZcKL/epvepmSoK6I/SyZ0DPHyn+kTVAh5j6qgcB/--


More information about the Ncep.list.nems.announce mailing list