Repository: EC-USGS/pywatershed (language: python)

Issue:
bools as ints
These variables are really booleans but we are treating them as ints to be consistent with PRMS. This is happening in a translation step in meta.py that I'm removing, so I'm changing the types to int in the metadata/variables.yaml. These should eventually be changed to boolean in the metadata and handled as such.  this list may not be comprehensive.

```
diff --git a/pynhm/static/metadata/variables.yaml b/pynhm/static/metadata/variables.yaml
index 17e075c..fdd19b3 100644
--- a/pynhm/static/metadata/variables.yaml
+++ b/pynhm/static/metadata/variables.yaml
@@ -1636,7 +1636,7 @@ iasw:
     on curve and maximum (1) or is on the defined curve (0)
   dimensions:
     0: nhru
-  type: bool
+  type: int32
   units: none
 imperv_evap:
   desc: Evaporation from impervious area for each HRU
@@ -1896,7 +1896,7 @@ lst:
     the albedo curve (1) (albset_snm or albset_sna) otherwise (0)
   dimensions:
     0: nhru
-  type: bool
+  type: int32
   units: none
 lwrad_net:
   desc: Net long-wave radiation for each HRU
@@ -2109,7 +2109,7 @@ pptmix_nopack:
     present on an HRU (1), otherwise (0)
   dimensions:
     0: nhru
-  type: bool
+  type: int32
   units: none
 precip:
   desc: Precipitation at each measurement station
```

ci_covarage 1



Discussion / hints:

Fix patch:
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 0a2bfbbd..075fa567 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -121,6 +121,15 @@ jobs:
       - name: Checkout repo
         uses: actions/checkout@v2.4.0
 
+      - name: Symlink gfortran (macOS)
+        if: runner.os == 'macOS'
+        run: |
+          # make sure gfortran is available
+          sudo ln -s /usr/local/bin/gfortran-10 /usr/local/bin/gfortran
+          which gfortran
+          gfortran --version
+          cd prms_src/prms5.2.1; make; cp bin/prms ../../bin/prms_mac; cd -
+
       - name: Set environment variables
         run: |
           echo "PYTHON_VERSION=${{ matrix.python-version }}" >> $GITHUB_ENV
diff --git a/doc/api.rst b/doc/api.rst
index 7151a156..5ed89bf7 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -8,11 +8,10 @@ Full API Listing
 ---------------------------------------
 
 
-
-.. include:: api/preprocess.rst
-
 .. include:: api/atmosphere.rst
 
+.. include:: api/hydrology.rst
+
 .. include:: api/base.rst
 
 .. include:: api/utils.rst
diff --git a/doc/api/atmosphere.rst b/doc/api/atmosphere.rst
index 00ea494f..a5e89176 100644
--- a/doc/api/atmosphere.rst
+++ b/doc/api/atmosphere.rst
@@ -5,12 +5,10 @@
 Atmosphere
 ##########
 
-Models for the atmospheric interactions and forcings.
+Atmospheric forcing models.
 
 .. autosummary::
    :toctree: generated/
 
-    NHMSolarGeometry
-    AtmBoundaryLayer
-    NHMBoundaryLayer
-
+   PRMSSolarGeometry
+   PRMSBoundaryLayer
diff --git a/doc/api/base.rst b/doc/api/base.rst
index f3505419..595fa10c 100644
--- a/doc/api/base.rst
+++ b/doc/api/base.rst
@@ -10,5 +10,10 @@ Base classes for the modeling system.
 .. autosummary::
    :toctree: generated/
 
-    StateAccess
-    Time
+   Accessor
+   Adapter
+   Control
+   Meta
+   Budget
+   StorageUnit
+   Model
diff --git a/doc/api/hydrology.rst b/doc/api/hydrology.rst
new file mode 100644
index 00000000..3963afa1
--- /dev/null
+++ b/doc/api/hydrology.rst
@@ -0,0 +1,18 @@
+.. currentmodule:: pynhm
+
+		   
+##########
+Hydrology
+##########
+
+Hydrologic model components.
+
+.. autosummary::
+   :toctree: generated/
+
+   PRMSCanopy
+   PRMSSnow
+   PRMSRunoff
+   PRMSSoilzone
+   PRMSGroundwater
+   PRMSChannel
diff --git a/doc/api/preprocess.rst b/doc/api/preprocess.rst
deleted file mode 100644
index 210820a6..00000000
--- a/doc/api/preprocess.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. currentmodule:: pynhm
-
-		   
-##########
-Preprocess
-##########
-
-Preprocess tasks (can) happen before model run time.
-
-.. autosummary::
-   :toctree: generated/
-
-    CBH
-    CsvFile
diff --git a/doc/conf.py b/doc/conf.py
index ce6cc335..355103ca 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -40,7 +40,7 @@
     "sphinx.ext.napoleon",
     # "nbsphinx",
     "sphinx_autosummary_accessors",
-    # "sphinx.ext.intersphinx",
+    "sphinx.ext.intersphinx",
     # "sphinx.ext.extlinks",
     # "sphinx_copybutton",
     # "sphinx.ext.mathjax",
@@ -51,7 +51,19 @@
 
 
 autosummary_generate = True
-autosummary_imported_members = True
+autodoc_typehints = "none"
+# autosummary_imported_members = True
+
+autodoc_default_options = {
+    "members": False,
+    # "imported-members": True,
+    # "inherited-members": True,
+    #     "undoc-members": True,
+    #     "private-members": True,  #
+    # "special-members": [],
+    "exclude-members": "__init__",
+}
+
 
 # Napoleon configurations
 napoleon_google_docstring = True
@@ -61,18 +73,9 @@
 napoleon_use_rtype = False
 napoleon_preprocess_types = True
 
-autodoc_default_options = {
-    "members": True,
-    "imported-members": True,
-    "inherited-members": True,
-    #     "undoc-members": True,
-    #     "private-members": True,  #
-    #     "special-members": True,  # e.g. __special__
-}
-
 
 # Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates", sphinx_autosummary_accessors.templates_path]
+# templates_path = ["_templates", sphinx_autosummary_accessors.templates_path]
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
@@ -119,7 +122,7 @@
 html_theme_options = dict(
     # analytics_id=''  this is configured in rtfd.io
     # canonical_url="",
-    repository_url="https://github.com/langevin-usgs/pynhm",
+    repository_url="https://github.com/EC-USGS/pynhm",
     repository_branch="main",
     path_to_docs="doc",
     use_edit_page_button=True,
diff --git a/doc/index.rst b/doc/index.rst
index d5aa0ef6..c72ed911 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -13,8 +13,8 @@ pynhm: The USGS National Hydrologic Model in python
    :caption: API Reference
 
     API Reference <api.rst>
-    Preprocess <api/preprocess>
     Atmosphere <api/atmosphere>
+    Hydrology <api/hydrology>
     Base <api/base>
     Utils <api/utils>
 
diff --git a/examples/model_graph.ipynb b/examples/model_graph.ipynb
new file mode 100644
index 00000000..78143284
--- /dev/null
+++ b/examples/model_graph.ipynb
@@ -0,0 +1,2664 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "55c56634-c85e-4e55-9500-96dfe5e2a3f0",
+   "metadata": {},
+   "source": [
+    "# Model Graph\n",
+    "\n",
+    "Here we programatically generate a \"model graph\" for two different moels. The graphs show the linkages between all the model components and files.\n",
+    "\n",
+    "The graph uses pydot and IPython packages as optional dependencies of pynhm."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "b2dc9766-0473-4b1c-aa6e-1bb00355cdd6",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pathlib as pl \n",
+    "from pprint import pprint\n",
+    "import pynhm\n",
+    "import tempfile"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b4aec578-edc0-4cf5-8b96-be462b16ef25",
+   "metadata": {},
+   "source": [
+    "Make a temp dir that combines PRMS inputs and outputs as potential \"inputs\" to pynhm."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "595e2fe7-0b6c-49ab-b0a2-c365947df938",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dom_dir = pl.Path(\"../test_data/drb_2yr\")\n",
+    "\n",
+    "tmp_dir = pl.Path(tempfile.mkdtemp())\n",
+    "input_dir = tmp_dir / \"input\"\n",
+    "input_dir.mkdir()\n",
+    "for ff in dom_dir.resolve().glob(\"*.nc\"):\n",
+    "    (input_dir / ff.name).symlink_to(ff)\n",
+    "for ff in (dom_dir / \"output\").resolve().glob(\"*.nc\"):\n",
+    "    (input_dir / ff.name).symlink_to(ff)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8a9dd5d1-425a-4c29-b040-114c8f6b88be",
+   "metadata": {},
+   "source": [
+    "## Example 1: Full NHM"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "001e4fd5-359b-4131-bf76-9988d21d898c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_1_components = [\n",
+    "    pynhm.PRMSBoundaryLayer,\n",
+    "    pynhm.PRMSSolarGeometry,\n",
+    "    pynhm.PRMSCanopy,\n",
+    "    pynhm.PRMSSnow,\n",
+    "    pynhm.PRMSRunoff,\n",
+    "    pynhm.PRMSSoilzone,\n",
+    "    pynhm.PRMSGroundwater, \n",
+    "    pynhm.PRMSChannel\n",
+    "]\n",
+    "\n",
+    "params = pynhm.PrmsParameters.load(dom_dir / \"myparam.param\")\n",
+    "control = pynhm.Control.load(dom_dir / \"control.test\", params=params)\n",
+    "model_1 = pynhm.Model(*model_1_components, control=control, input_dir=input_dir)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9eb7d42d-fbd1-49c1-8723-e6bcfd207881",
+   "metadata": {},
+   "source": [
+    "A model graph is mostly a visualization of the following attribute of a model. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "b314468f-c62b-4b68-9a3c-5caa0824d258",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "{'PRMSBoundaryLayer': {'prcp': PosixPath('/var/folders/rf/pj_9dt9x55b9gfnv34f3xktc0000gn/T/tmpirmwl4bz/input/prcp.nc'),\n",
+      "                       'tmax': PosixPath('/var/folders/rf/pj_9dt9x55b9gfnv34f3xktc0000gn/T/tmpirmwl4bz/input/tmax.nc'),\n",
+      "                       'tmin': PosixPath('/var/folders/rf/pj_9dt9x55b9gfnv34f3xktc0000gn/T/tmpirmwl4bz/input/tmin.nc')},\n",
+      " 'PRMSCanopy': {'hru_ppt': 'PRMSBoundaryLayer',\n",
+      "                'hru_rain': 'PRMSBoundaryLayer',\n",
+      "                'hru_snow': 'PRMSBoundaryLayer',\n",
+      "                'pkwater_ante': 'PRMSSnow',\n",
+      "                'potet': 'PRMSBoundaryLayer',\n",
+      "                'transp_on': 'PRMSBoundaryLayer'},\n",
+      " 'PRMSChannel': {'gwres_flow': 'PRMSGroundwater',\n",
+      "                 'sroff': 'PRMSRunoff',\n",
+      "                 'ssres_flow': 'PRMSSoilzone'},\n",
+      " 'PRMSGroundwater': {'dprst_seep_hru': 'PRMSRunoff',\n",
+      "                     'soil_to_gw': 'PRMSSoilzone',\n",
+      "                     'ssr_to_gw': 'PRMSSoilzone'},\n",
+      " 'PRMSRunoff': {'hru_intcpevap': 'PRMSCanopy',\n",
+      "                'intcp_changeover': 'PRMSCanopy',\n",
+      "                'net_ppt': 'PRMSCanopy',\n",
+      "                'net_rain': 'PRMSCanopy',\n",
+      "                'net_snow': 'PRMSCanopy',\n",
+      "                'pkwater_equiv': 'PRMSSnow',\n",
+      "                'potet': 'PRMSBoundaryLayer',\n",
+      "                'pptmix_nopack': 'PRMSSnow',\n",
+      "                'snow_evap': 'PRMSSnow',\n",
+      "                'snowcov_area': 'PRMSSnow',\n",
+      "                'snowmelt': 'PRMSSnow',\n",
+      "                'soil_moist_prev': 'PRMSSoilzone'},\n",
+      " 'PRMSSnow': {'hru_intcpevap': 'PRMSCanopy',\n",
+      "              'hru_ppt': 'PRMSBoundaryLayer',\n",
+      "              'net_ppt': 'PRMSCanopy',\n",
+      "              'net_rain': 'PRMSCanopy',\n",
+      "              'net_snow': 'PRMSCanopy',\n",
+      "              'orad_hru': 'PRMSBoundaryLayer',\n",
+      "              'potet': 'PRMSBoundaryLayer',\n",
+      "              'pptmix': 'PRMSBoundaryLayer',\n",
+      "              'prmx': 'PRMSBoundaryLayer',\n",
+      "              'soltab_horad_potsw': 'PRMSSolarGeometry',\n",
+      "              'swrad': 'PRMSBoundaryLayer',\n",
+      "              'tavgc': 'PRMSBoundaryLayer',\n",
+      "              'tmaxc': 'PRMSBoundaryLayer',\n",
+      "              'tminc': 'PRMSBoundaryLayer',\n",
+      "              'transp_on': 'PRMSBoundaryLayer'},\n",
+      " 'PRMSSoilzone': {'dprst_evap_hru': 'PRMSRunoff',\n",
+      "                  'dprst_seep_hru': 'PRMSRunoff',\n",
+      "                  'hru_impervevap': 'PRMSRunoff',\n",
+      "                  'hru_intcpevap': 'PRMSCanopy',\n",
+      "                  'infil': 'PRMSRunoff',\n",
+      "                  'potet': 'PRMSBoundaryLayer',\n",
+      "                  'snow_evap': 'PRMSSnow',\n",
+      "                  'snowcov_area': 'PRMSSnow',\n",
+      "                  'sroff': 'PRMSRunoff',\n",
+      "                  'transp_on': 'PRMSBoundaryLayer'},\n",
+      " 'PRMSSolarGeometry': {}}\n"
+     ]
+    }
+   ],
+   "source": [
+    "pprint(model_1.component_input_from)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "0ce2ad6b-8366-40f3-8df9-f13e495c6454",
+   "metadata": {},
+   "source": [
+    "Before plotting, let's choose a color scheme. [Colorbrewer](https://colorbrewer2.org/) palettes are implemented as a class/closure in pynhm"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "bcdd1a20-1bb8-47a1-9734-4968624e55fe",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<span style=\"font-family: monospace\">#7fc97f <span style=\"color: #7fc97f\">████████</span></span><br><span style=\"font-family: monospace\">#beaed4 <span style=\"color: #beaed4\">████████</span></span><br><span style=\"font-family: monospace\">#fdc086 <span style=\"color: #fdc086\">████████</span></span><br><span style=\"font-family: monospace\">#ffff99 <span style=\"color: #ffff99\">████████</span></span><br><span style=\"font-family: monospace\">#386cb0 <span style=\"color: #386cb0\">████████</span></span><br><span style=\"font-family: monospace\">#f0027f <span style=\"color: #f0027f\">████████</span></span><br><span style=\"font-family: monospace\">#bf5b17 <span style=\"color: #bf5b17\">████████</span></span><br><span style=\"font-family: monospace\">#666666 <span style=\"color: #666666\">████████</span></span>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "cb = pynhm.ColorBrewer()\n",
+    "palette = cb.get_palette('Accent')(len(model_1_components))\n",
+    "cb.jupyter_palette(palette)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f72f2997-123b-42a9-8b1b-e25e82e05443",
+   "metadata": {},
+   "source": [
+    "Map these on to the component/class names in a way that might make some sense."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "fa343516-2f40-4404-ae3f-f698d6db5a34",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<span style=\"font-family: monospace\">PRMSSolarGeometry <span style=\"color: #ffff99\">████████</span></span><br><span style=\"font-family: monospace\">PRMSBoundaryLayer <span style=\"color: #fdc086\">████████</span></span><br><span style=\"font-family: monospace\">PRMSCanopy <span style=\"color: #7fc97f\">████████</span></span><br><span style=\"font-family: monospace\">PRMSSnow <span style=\"color: #beaed4\">████████</span></span><br><span style=\"font-family: monospace\">PRMSRunoff <span style=\"color: #f0027f\">████████</span></span><br><span style=\"font-family: monospace\">PRMSSoilzone <span style=\"color: #bf5b17\">████████</span></span><br><span style=\"font-family: monospace\">PRMSGroundwater <span style=\"color: #666666\">████████</span></span><br><span style=\"font-family: monospace\">PRMSChannel <span style=\"color: #386cb0\">████████</span></span>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "component_colors = {\n",
+    "    'PRMSSolarGeometry': palette[3],\n",
+    "    'PRMSBoundaryLayer': palette[2], \n",
+    "    'PRMSCanopy': palette[0],\n",
+    "    'PRMSSnow': palette[1],\n",
+    "    'PRMSRunoff': palette[5],\n",
+    "    'PRMSSoilzone': palette[6],\n",
+    "    'PRMSGroundwater': palette[7],\n",
+    "    'PRMSChannel': palette[4],    \n",
+    "}\n",
+    "cb.jupyter_palette(component_colors)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "48ac2ecd-f854-4e55-ac60-d52d4dee80a8",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Displaying SVG written to temp file: /var/folders/rf/pj_9dt9x55b9gfnv34f3xktc0000gn/T/tmp5ei7z0uz\n"
+     ]
+    },
+    {
+     "data": {
+      "image/svg+xml": [
+       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"1294pt\" height=\"943pt\" viewBox=\"0.00 0.00 1293.80 942.69\">\n",
+       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 938.69)\">\n",
+       "<title>G</title>\n",
+       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-938.69 1289.8,-938.69 1289.8,4 -4,4\"/>\n",
+       "<!-- PRMSSolarGeometry -->\n",
+       "<g id=\"node1\" class=\"node\">\n",
+       "<title>PRMSSolarGeometry</title>\n",
+       "<polygon fill=\"none\" stroke=\"#ffff99\" stroke-width=\"2\" points=\"142,-577 0,-577 0,-573 -4,-573 -4,-569 0,-569 0,-332 -4,-332 -4,-328 0,-328 0,-324 142,-324 142,-577\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#ffff99\" stroke-width=\"2\" points=\"0,-573 4,-573 4,-569 0,-569 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#ffff99\" stroke-width=\"2\" points=\"0,-332 4,-332 4,-328 0,-328 \"/>\n",
+       "<text text-anchor=\"start\" x=\"10.5\" y=\"-560.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSSolarGeometry</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"8,-363.5 8,-555.5 59,-555.5 59,-363.5 8,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"13.5\" y=\"-455.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-543.5 59,-555.5 134,-555.5 134,-543.5 59,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"76.5\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">dday_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-531.5 59,-543.5 134,-543.5 134,-531.5 59,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"76\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">dday_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-519.5 59,-531.5 134,-531.5 134,-519.5 59,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"81\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-507.5 59,-519.5 134,-519.5 134,-507.5 59,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"77\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_aspect</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-495.5 59,-507.5 134,-507.5 134,-495.5 59,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"84\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_lat</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-483.5 59,-495.5 134,-495.5 134,-483.5 59,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"78.5\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-471.5 59,-483.5 134,-483.5 134,-471.5 59,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"88\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-459.5 59,-471.5 134,-471.5 134,-459.5 59,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"75\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">ppt_rad_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-447.5 59,-459.5 134,-459.5 134,-447.5 59,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"74.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">radadj_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-435.5 59,-447.5 134,-447.5 134,-435.5 59,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"73.5\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">radadj_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-423.5 59,-435.5 134,-435.5 134,-423.5 59,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"79.5\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">radj_sppt</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-411.5 59,-423.5 134,-423.5 134,-411.5 59,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"78\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">radj_wppt</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-399.5 59,-411.5 134,-411.5 134,-399.5 59,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"83\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">radmax</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-387.5 59,-399.5 134,-399.5 134,-387.5 59,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"62\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allrain_offset</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-375.5 59,-387.5 134,-387.5 134,-375.5 59,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"71.5\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allsnow</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"59,-363.5 59,-375.5 134,-375.5 134,-363.5 59,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"75.5\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_index</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"8,-327.5 8,-363.5 59,-363.5 59,-327.5 8,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"9\" y=\"-341.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"59,-351.5 59,-363.5 134,-363.5 134,-351.5 59,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"60\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">soltab_horad_potsw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"59,-339.5 59,-351.5 134,-351.5 134,-339.5 59,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"72.5\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">soltab_potsw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"59,-327.5 59,-339.5 134,-339.5 134,-327.5 59,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"71.5\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">soltab_sunhrs</text>\n",
+       "</g>\n",
+       "<!-- PRMSSnow -->\n",
+       "<g id=\"node4\" class=\"node\">\n",
+       "<title>PRMSSnow</title>\n",
+       "<polygon fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"460,-901 318,-901 318,-897 314,-897 314,-893 318,-893 318,-8 314,-8 314,-4 318,-4 318,0 460,0 460,-901\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"318,-897 322,-897 322,-893 318,-893 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"318,-8 322,-8 322,-4 318,-4 \"/>\n",
+       "<text text-anchor=\"start\" x=\"355\" y=\"-884.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSSnow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"326,-699.5 326,-879.5 377,-879.5 377,-699.5 326,-699.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"334.5\" y=\"-785.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-867.5 377,-879.5 452,-879.5 452,-867.5 377,-867.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"389\" y=\"-871.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-855.5 377,-867.5 452,-867.5 452,-855.5 377,-855.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"400.5\" y=\"-859.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-843.5 377,-855.5 452,-855.5 452,-843.5 377,-843.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"401\" y=\"-847.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-831.5 377,-843.5 452,-843.5 452,-831.5 377,-831.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"400\" y=\"-835.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_rain</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-819.5 377,-831.5 452,-831.5 452,-819.5 377,-819.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"397\" y=\"-823.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_snow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-807.5 377,-819.5 452,-819.5 452,-807.5 377,-807.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398\" y=\"-811.3\" font-family=\"Times,serif\" font-size=\"9.00\">orad_hru</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-795.5 377,-807.5 452,-807.5 452,-795.5 377,-795.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"405.5\" y=\"-799.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-783.5 377,-795.5 452,-795.5 452,-783.5 377,-783.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402\" y=\"-787.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-771.5 377,-783.5 452,-783.5 452,-771.5 377,-771.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"405\" y=\"-775.3\" font-family=\"Times,serif\" font-size=\"9.00\">prmx</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-759.5 377,-771.5 452,-771.5 452,-759.5 377,-759.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"378\" y=\"-763.3\" font-family=\"Times,serif\" font-size=\"9.00\">soltab_horad_potsw</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-747.5 377,-759.5 452,-759.5 452,-747.5 377,-747.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"403.5\" y=\"-751.3\" font-family=\"Times,serif\" font-size=\"9.00\">swrad</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-735.5 377,-747.5 452,-747.5 452,-735.5 377,-735.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"405\" y=\"-739.3\" font-family=\"Times,serif\" font-size=\"9.00\">tavgc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-723.5 377,-735.5 452,-735.5 452,-723.5 377,-723.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"403.5\" y=\"-727.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-711.5 377,-723.5 452,-723.5 452,-711.5 377,-711.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"404.5\" y=\"-715.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-699.5 377,-711.5 452,-711.5 452,-699.5 377,-699.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396.5\" y=\"-703.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"326,-375.5 326,-699.5 377,-699.5 377,-375.5 326,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"331.5\" y=\"-533.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-687.5 377,-699.5 452,-699.5 452,-687.5 377,-687.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396\" y=\"-691.3\" font-family=\"Times,serif\" font-size=\"9.00\">albset_rna</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-675.5 377,-687.5 452,-687.5 452,-675.5 377,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394.5\" y=\"-679.3\" font-family=\"Times,serif\" font-size=\"9.00\">albset_rnm</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-663.5 377,-675.5 452,-675.5 452,-663.5 377,-663.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396\" y=\"-667.3\" font-family=\"Times,serif\" font-size=\"9.00\">albset_sna</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-651.5 377,-663.5 452,-663.5 452,-651.5 377,-651.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394.5\" y=\"-655.3\" font-family=\"Times,serif\" font-size=\"9.00\">albset_snm</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-639.5 377,-651.5 452,-651.5 452,-639.5 377,-639.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396.5\" y=\"-643.3\" font-family=\"Times,serif\" font-size=\"9.00\">cecn_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-627.5 377,-639.5 452,-639.5 452,-627.5 377,-627.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398\" y=\"-631.3\" font-family=\"Times,serif\" font-size=\"9.00\">cov_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-615.5 377,-627.5 452,-627.5 452,-615.5 377,-615.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391.5\" y=\"-619.3\" font-family=\"Times,serif\" font-size=\"9.00\">covden_sum</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-603.5 377,-615.5 452,-615.5 452,-603.5 377,-603.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392.5\" y=\"-607.3\" font-family=\"Times,serif\" font-size=\"9.00\">covden_win</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-591.5 377,-603.5 452,-603.5 452,-591.5 377,-591.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"400\" y=\"-595.3\" font-family=\"Times,serif\" font-size=\"9.00\">den_init</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-579.5 377,-591.5 452,-591.5 452,-579.5 377,-579.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398\" y=\"-583.3\" font-family=\"Times,serif\" font-size=\"9.00\">den_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-567.5 377,-579.5 452,-579.5 452,-567.5 377,-567.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393.5\" y=\"-571.3\" font-family=\"Times,serif\" font-size=\"9.00\">emis_noppt</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-555.5 377,-567.5 452,-567.5 452,-555.5 377,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392.5\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">freeh2o_cap</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-543.5 377,-555.5 452,-555.5 452,-543.5 377,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_deplcrv</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-531.5 377,-543.5 452,-543.5 452,-531.5 377,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398.5\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-519.5 377,-531.5 452,-531.5 452,-519.5 377,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"395.5\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">melt_force</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-507.5 377,-519.5 452,-519.5 452,-507.5 377,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396.5\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">melt_look</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-495.5 377,-507.5 452,-507.5 452,-495.5 377,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"399\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">ndeplval</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-483.5 377,-495.5 452,-495.5 452,-483.5 377,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-471.5 377,-483.5 452,-483.5 452,-471.5 377,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"399\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">nmonths</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-459.5 377,-471.5 452,-471.5 452,-459.5 377,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391.5\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet_sublim</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-447.5 377,-459.5 452,-459.5 452,-447.5 377,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">rad_trncf</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-435.5 377,-447.5 452,-447.5 452,-435.5 377,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393.5\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">settle_const</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-423.5 377,-435.5 452,-435.5 452,-423.5 377,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">snarea_curve</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-411.5 377,-423.5 452,-423.5 452,-411.5 377,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"390\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">snarea_thresh</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-399.5 377,-411.5 452,-411.5 452,-399.5 377,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"388.5\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowpack_init</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-387.5 377,-399.5 452,-399.5 452,-387.5 377,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"389.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allsnow</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"377,-375.5 377,-387.5 452,-387.5 452,-375.5 377,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"395\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">tstorm_mo</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"326,-3.5 326,-375.5 377,-375.5 377,-3.5 326,-3.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"327\" y=\"-185.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-363.5 377,-375.5 452,-375.5 452,-363.5 377,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"411\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">ai</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-351.5 377,-363.5 452,-363.5 452,-351.5 377,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402.5\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">albedo</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-339.5 377,-351.5 452,-351.5 452,-339.5 377,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"398\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">frac_swe</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-327.5 377,-339.5 452,-339.5 452,-327.5 377,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"400.5\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">freeh2o</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-315.5 377,-327.5 452,-327.5 452,-315.5 377,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">iasw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-303.5 377,-315.5 452,-315.5 452,-303.5 377,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">int_alb</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-291.5 377,-303.5 452,-303.5 452,-291.5 377,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"409\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">iso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-279.5 377,-291.5 452,-291.5 452,-279.5 377,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"409\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">lso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-267.5 377,-279.5 452,-279.5 452,-267.5 377,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"410\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">lst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-255.5 377,-267.5 452,-267.5 452,-255.5 377,-255.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406.5\" y=\"-259.3\" font-family=\"Times,serif\" font-size=\"9.00\">mso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-243.5 377,-255.5 452,-255.5 452,-243.5 377,-243.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402\" y=\"-247.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_def</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-231.5 377,-243.5 452,-243.5 452,-231.5 377,-231.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"401\" y=\"-235.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_den</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-219.5 377,-231.5 452,-231.5 452,-219.5 377,-219.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"397.5\" y=\"-223.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_depth</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-207.5 377,-219.5 452,-219.5 452,-207.5 377,-207.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402.5\" y=\"-211.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_ice</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-195.5 377,-207.5 452,-207.5 452,-195.5 377,-195.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"396.5\" y=\"-199.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_precip</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-183.5 377,-195.5 452,-195.5 452,-183.5 377,-183.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"399\" y=\"-187.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_temp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-171.5 377,-183.5 452,-183.5 452,-171.5 377,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"405.5\" y=\"-175.3\" font-family=\"Times,serif\" font-size=\"9.00\">pksv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-159.5 377,-171.5 452,-171.5 452,-159.5 377,-159.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"390.5\" y=\"-163.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_ante</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-147.5 377,-159.5 452,-159.5 452,-147.5 377,-147.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"388\" y=\"-151.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_equiv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-135.5 377,-147.5 452,-147.5 452,-135.5 377,-135.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"387\" y=\"-139.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix_nopack</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-123.5 377,-135.5 452,-135.5 452,-123.5 377,-123.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"408\" y=\"-127.3\" font-family=\"Times,serif\" font-size=\"9.00\">pss</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-111.5 377,-123.5 452,-123.5 452,-111.5 377,-111.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"409\" y=\"-115.3\" font-family=\"Times,serif\" font-size=\"9.00\">pst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-99.5 377,-111.5 452,-111.5 452,-99.5 377,-99.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"407\" y=\"-103.3\" font-family=\"Times,serif\" font-size=\"9.00\">salb</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-87.5 377,-99.5 452,-99.5 452,-87.5 377,-87.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406.5\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"9.00\">scrv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-75.5 377,-87.5 452,-87.5 452,-75.5 377,-75.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"408\" y=\"-79.3\" font-family=\"Times,serif\" font-size=\"9.00\">slst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-63.5 377,-75.5 452,-75.5 452,-63.5 377,-63.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394\" y=\"-67.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_evap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-51.5 377,-63.5 452,-63.5 452,-51.5 377,-51.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"388.5\" y=\"-55.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_area</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-39.5 377,-51.5 452,-51.5 452,-39.5 377,-39.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"384.5\" y=\"-43.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_areasv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-27.5 377,-39.5 452,-39.5 452,-27.5 377,-27.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"397\" y=\"-31.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowmelt</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-15.5 377,-27.5 452,-27.5 452,-15.5 377,-15.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406\" y=\"-19.3\" font-family=\"Times,serif\" font-size=\"9.00\">snsv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-3.5 377,-15.5 452,-15.5 452,-3.5 377,-3.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"408\" y=\"-7.3\" font-family=\"Times,serif\" font-size=\"9.00\">tcal</text>\n",
+       "</g>\n",
+       "<!-- PRMSSolarGeometry&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge16\" class=\"edge\">\n",
+       "<title>PRMSSolarGeometry:soltab_horad_potsw-&gt;PRMSSnow:soltab_horad_potsw</title>\n",
+       "<path fill=\"none\" stroke=\"#ffff99\" d=\"M135,-357.5C150.1,-357.5 147.31,-886.35 151,-901 153.18,-909.67 152.39,-914.3 160,-919 186.65,-935.47 415.35,-935.47 442,-919 449.61,-914.3 448.88,-909.69 451,-901 457.22,-875.51 476.97,-791.61 462.06,-770.4\"/>\n",
+       "<polygon fill=\"#ffff99\" stroke=\"#ffff99\" points=\"463.46,-767.18 453,-765.5 460.13,-773.34 463.46,-767.18\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer -->\n",
+       "<g id=\"node2\" class=\"node\">\n",
+       "<title>PRMSBoundaryLayer</title>\n",
+       "<polygon fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"300,-733 160,-733 160,-729 156,-729 156,-725 160,-725 160,-176 156,-176 156,-172 160,-172 160,-168 300,-168 300,-733\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"160,-729 164,-729 164,-725 160,-725 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"160,-176 164,-176 164,-172 160,-172 \"/>\n",
+       "<text text-anchor=\"start\" x=\"169\" y=\"-716.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSBoundaryLayer</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"168,-675.5 168,-711.5 220,-711.5 220,-675.5 168,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"177\" y=\"-689.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"220,-699.5 220,-711.5 292,-711.5 292,-699.5 220,-699.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"248\" y=\"-703.3\" font-family=\"Times,serif\" font-size=\"9.00\">prcp</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"220,-687.5 220,-699.5 292,-699.5 292,-687.5 220,-687.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"247\" y=\"-691.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"220,-675.5 220,-687.5 292,-687.5 292,-675.5 220,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"248\" y=\"-679.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmin</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"168,-339.5 168,-675.5 220,-675.5 220,-339.5 168,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"174\" y=\"-503.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-663.5 220,-675.5 292,-675.5 292,-663.5 220,-663.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234.5\" y=\"-667.3\" font-family=\"Times,serif\" font-size=\"9.00\">adjmix_rain</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-651.5 220,-663.5 292,-663.5 292,-651.5 220,-651.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236\" y=\"-655.3\" font-family=\"Times,serif\" font-size=\"9.00\">dday_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-639.5 220,-651.5 292,-651.5 292,-639.5 220,-639.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"235.5\" y=\"-643.3\" font-family=\"Times,serif\" font-size=\"9.00\">dday_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-627.5 220,-639.5 292,-639.5 292,-627.5 220,-627.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"240.5\" y=\"-631.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-615.5 220,-627.5 292,-627.5 292,-615.5 220,-615.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236.5\" y=\"-619.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_aspect</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-603.5 220,-615.5 292,-615.5 292,-603.5 220,-603.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"243.5\" y=\"-607.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_lat</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-591.5 220,-603.5 292,-603.5 292,-591.5 220,-591.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"238\" y=\"-595.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-579.5 220,-591.5 292,-591.5 292,-579.5 220,-579.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242.5\" y=\"-583.3\" font-family=\"Times,serif\" font-size=\"9.00\">jh_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-567.5 220,-579.5 292,-579.5 292,-567.5 220,-567.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234.5\" y=\"-571.3\" font-family=\"Times,serif\" font-size=\"9.00\">jh_coef_hru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-555.5 220,-567.5 292,-567.5 292,-555.5 220,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"247.5\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-543.5 220,-555.5 292,-555.5 292,-543.5 220,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234.5\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">ppt_rad_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-531.5 220,-543.5 292,-543.5 292,-531.5 220,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">radadj_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-519.5 220,-531.5 292,-531.5 292,-519.5 220,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"233\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">radadj_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-507.5 220,-519.5 292,-519.5 292,-507.5 220,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"239\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">radj_sppt</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-495.5 220,-507.5 292,-507.5 292,-495.5 220,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"237.5\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">radj_wppt</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-483.5 220,-495.5 292,-495.5 292,-483.5 220,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242.5\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">radmax</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-471.5 220,-483.5 292,-483.5 292,-471.5 220,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"233\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">rain_cbh_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-459.5 220,-471.5 292,-471.5 292,-459.5 220,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"230\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_cbh_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-447.5 220,-459.5 292,-459.5 292,-447.5 220,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"221.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allrain_offset</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-435.5 220,-447.5 292,-447.5 292,-435.5 220,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"221.5\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allrain_offset</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-423.5 220,-435.5 292,-435.5 292,-423.5 220,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"231\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allsnow</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-411.5 220,-423.5 292,-423.5 292,-411.5 220,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"231\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_allsnow</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-399.5 220,-411.5 292,-411.5 292,-399.5 220,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"231\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_cbh_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-387.5 220,-399.5 292,-399.5 292,-387.5 220,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"235\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax_index</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-375.5 220,-387.5 292,-387.5 292,-375.5 220,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"231.5\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmin_cbh_adj</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-363.5 220,-375.5 292,-375.5 292,-363.5 220,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_beg</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-351.5 220,-363.5 292,-363.5 292,-351.5 220,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_end</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"220,-339.5 220,-351.5 292,-351.5 292,-339.5 220,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_tmax</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"168,-171.5 168,-339.5 220,-339.5 220,-171.5 168,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"169.5\" y=\"-251.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-327.5 220,-339.5 292,-339.5 292,-327.5 220,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_ppt</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-315.5 220,-327.5 292,-327.5 292,-315.5 220,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"240.5\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_rain</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-303.5 220,-315.5 292,-315.5 292,-303.5 220,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"237.5\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_snow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-291.5 220,-303.5 292,-303.5 292,-291.5 220,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"239.5\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">orad_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-279.5 220,-291.5 292,-291.5 292,-279.5 220,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"247\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-267.5 220,-279.5 292,-279.5 292,-267.5 220,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"243.5\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-255.5 220,-267.5 292,-267.5 292,-255.5 220,-255.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246.5\" y=\"-259.3\" font-family=\"Times,serif\" font-size=\"9.00\">prmx</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-243.5 220,-255.5 292,-255.5 292,-243.5 220,-243.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245\" y=\"-247.3\" font-family=\"Times,serif\" font-size=\"9.00\">swrad</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-231.5 220,-243.5 292,-243.5 292,-231.5 220,-231.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246.5\" y=\"-235.3\" font-family=\"Times,serif\" font-size=\"9.00\">tavgc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-219.5 220,-231.5 292,-231.5 292,-219.5 220,-219.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245\" y=\"-223.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-207.5 220,-219.5 292,-219.5 292,-207.5 220,-207.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245.5\" y=\"-211.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxf</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-195.5 220,-207.5 292,-207.5 292,-195.5 220,-195.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246\" y=\"-199.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-183.5 220,-195.5 292,-195.5 292,-183.5 220,-183.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246.5\" y=\"-187.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminf</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"220,-171.5 220,-183.5 292,-183.5 292,-171.5 220,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"238\" y=\"-175.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy -->\n",
+       "<g id=\"node3\" class=\"node\">\n",
+       "<title>PRMSCanopy</title>\n",
+       "<polygon fill=\"none\" stroke=\"#7fc97f\" stroke-width=\"2\" points=\"624,-637 478,-637 478,-633 474,-633 474,-629 478,-629 478,-272 474,-272 474,-268 478,-268 478,-264 624,-264 624,-637\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#7fc97f\" stroke-width=\"2\" points=\"478,-633 482,-633 482,-629 478,-629 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#7fc97f\" stroke-width=\"2\" points=\"478,-272 482,-272 482,-268 478,-268 \"/>\n",
+       "<text text-anchor=\"start\" x=\"511.5\" y=\"-620.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSCanopy</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"486,-543.5 486,-615.5 537,-615.5 537,-543.5 486,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"494.5\" y=\"-575.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-603.5 537,-615.5 616,-615.5 616,-603.5 537,-603.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"562.5\" y=\"-607.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-591.5 537,-603.5 616,-603.5 616,-591.5 537,-591.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"561\" y=\"-595.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_rain</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-579.5 537,-591.5 616,-591.5 616,-579.5 537,-579.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"558\" y=\"-583.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_snow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-567.5 537,-579.5 616,-579.5 616,-567.5 537,-567.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"552.5\" y=\"-571.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_ante</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-555.5 537,-567.5 616,-567.5 616,-555.5 537,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"567.5\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"537,-543.5 537,-555.5 616,-555.5 616,-543.5 537,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"558.5\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"486,-411.5 486,-543.5 537,-543.5 537,-411.5 486,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"491.5\" y=\"-473.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-531.5 537,-543.5 616,-543.5 616,-531.5 537,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"560\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">cov_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-519.5 537,-531.5 616,-531.5 616,-519.5 537,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"553.5\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">covden_sum</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-507.5 537,-519.5 616,-519.5 616,-507.5 537,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"554.5\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">covden_win</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-495.5 537,-507.5 616,-507.5 616,-495.5 537,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"558\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">epan_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-483.5 537,-495.5 616,-495.5 616,-483.5 537,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"561\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-471.5 537,-483.5 616,-483.5 616,-471.5 537,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"568\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-459.5 537,-471.5 616,-471.5 616,-459.5 537,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"553.5\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet_sublim</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-447.5 537,-459.5 616,-459.5 616,-447.5 537,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"555.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-435.5 537,-447.5 616,-447.5 616,-435.5 537,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"555.5\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-423.5 537,-435.5 616,-435.5 616,-423.5 537,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"556.5\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">srain_intcp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"537,-411.5 537,-423.5 616,-423.5 616,-411.5 537,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"555\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">wrain_intcp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"486,-267.5 486,-411.5 537,-411.5 537,-267.5 486,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"487\" y=\"-335.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-399.5 537,-411.5 616,-411.5 616,-399.5 537,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"551\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-387.5 537,-399.5 616,-399.5 616,-387.5 537,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"552.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpstor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-375.5 537,-387.5 616,-387.5 616,-375.5 537,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"538\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpstor_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-363.5 537,-375.5 616,-375.5 616,-363.5 537,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"544.5\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpstor_old</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-351.5 537,-363.5 616,-363.5 616,-351.5 537,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"545\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_changeover</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-339.5 537,-351.5 616,-351.5 616,-339.5 537,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"557\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_evap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-327.5 537,-339.5 616,-339.5 616,-327.5 537,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"556.5\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_form</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-315.5 537,-327.5 616,-327.5 616,-315.5 537,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"558.5\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-303.5 537,-315.5 616,-315.5 616,-303.5 537,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"547.5\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_transp_on</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-291.5 537,-303.5 616,-303.5 616,-291.5 537,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"563\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_ppt</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-279.5 537,-291.5 616,-291.5 616,-279.5 537,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"562\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_rain</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"537,-267.5 537,-279.5 616,-279.5 616,-267.5 537,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"559\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_snow</text>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge2\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:transp_on-&gt;PRMSCanopy:transp_on</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-177.5C313.1,-177.5 304.17,-881.49 309,-901 311.15,-909.68 310.39,-914.3 318,-919 344.84,-935.59 432.84,-935.06 460,-919 583.1,-846.19 577.86,-775.11 615,-637 619.08,-621.81 630.59,-573.98 624.56,-556.22\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"626.8,-553.53 617,-549.5 622.15,-558.76 626.8,-553.53\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge3\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:hru_ppt-&gt;PRMSCanopy:hru_ppt</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-333.5C308.77,-333.5 305.16,-885.7 309,-901 311.18,-909.68 310.39,-914.3 318,-919 344.84,-935.59 432.84,-935.06 460,-919 489.82,-901.36 623.91,-665.59 622.88,-617.88\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"625.61,-615.68 617,-609.5 619.87,-619.7 625.61,-615.68\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge4\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:hru_rain-&gt;PRMSCanopy:hru_rain</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-321.5C309.1,-321.5 305.08,-885.38 309,-901 311.17,-909.68 310.39,-914.3 318,-919 344.84,-935.59 432.84,-935.06 460,-919 490.88,-900.74 626.23,-653.66 623.17,-605.58\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"625.85,-603.32 617,-597.5 620.29,-607.57 625.85,-603.32\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge5\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:hru_snow-&gt;PRMSCanopy:hru_snow</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-309.5C309.44,-309.5 305.01,-885.06 309,-901 311.17,-909.68 310.39,-914.3 318,-919 344.84,-935.59 432.84,-935.06 460,-919 583.1,-846.19 576.76,-774.81 615,-637 619.83,-619.58 632.55,-597.59 626.44,-589.08\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"627.59,-585.78 617,-585.5 625.11,-592.32 627.59,-585.78\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge6\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSCanopy:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-285.5C310.1,-285.5 304.85,-884.41 309,-901 311.17,-909.68 310.39,-914.3 318,-919 344.84,-935.59 432.84,-935.06 460,-919 583.1,-846.19 577.61,-775.04 615,-637 622.68,-608.65 644.15,-572.11 626.91,-563.42\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"627.48,-559.96 617,-561.5 626.15,-566.83 627.48,-559.96\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge7\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:hru_ppt-&gt;PRMSSnow:hru_ppt</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-333.5C356.12,-333.5 272.4,-857.36 318,-901 339.51,-921.59 430.68,-921.79 452,-901 461.43,-891.81 467.16,-874.18 462.02,-865.95\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.52,-862.78 453,-861.5 460.42,-869.06 463.52,-862.78\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge12\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:orad_hru-&gt;PRMSSnow:orad_hru</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-297.5C326.56,-297.5 293.79,-877.77 318,-901 339.49,-921.62 430.82,-921.94 452,-901 476.96,-876.33 489.35,-824.94 462.96,-815.13\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.43,-811.66 453,-813.5 462.3,-818.57 463.43,-811.66\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge13\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSSnow:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-285.5C327.22,-285.5 293.31,-877.3 318,-901 339.48,-921.62 430.84,-921.95 452,-901 465.2,-887.93 472.53,-826.63 461.44,-807.33\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.22,-804.31 453,-801.5 459.24,-810.06 463.22,-804.31\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge14\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:pptmix-&gt;PRMSSnow:pptmix</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-273.5C327.89,-273.5 292.84,-876.83 318,-901 339.47,-921.63 430.85,-921.96 452,-901 467.06,-886.08 475.22,-815.09 461.75,-794.88\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.35,-791.76 453,-789.5 459.69,-797.72 463.35,-791.76\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge15\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:prmx-&gt;PRMSSnow:prmx</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-261.5C328.55,-261.5 292.37,-876.35 318,-901 339.46,-921.64 430.86,-921.97 452,-901 468.97,-884.16 477.96,-802.95 461.85,-782.29\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.46,-779.18 453,-777.5 460.13,-785.34 463.46,-779.18\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge17\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:swrad-&gt;PRMSSnow:swrad</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-249.5C329.22,-249.5 291.9,-875.88 318,-901 339.46,-921.65 430.87,-921.98 452,-901 472.71,-880.43 483.32,-779.5 462.24,-757.67\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.55,-754.42 453,-753.5 460.68,-760.8 463.55,-754.42\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge18\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tavgc-&gt;PRMSSnow:tavgc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-237.5C329.89,-237.5 291.43,-875.41 318,-901 339.45,-921.66 430.88,-921.99 452,-901 474.59,-878.55 486.01,-767.69 462.39,-745.41\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.58,-742.11 453,-741.5 460.89,-748.57 463.58,-742.11\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge19\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tmaxc-&gt;PRMSSnow:tmaxc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-225.5C330.55,-225.5 290.96,-874.94 318,-901 339.44,-921.66 430.88,-921.99 452,-901 476.49,-876.65 488.71,-755.58 462.42,-733.1\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"463.59,-729.8 453,-729.5 461.09,-736.34 463.59,-729.8\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge20\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tminc-&gt;PRMSSnow:tminc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-201.5C331.89,-201.5 290.02,-874 318,-901 339.43,-921.68 430.89,-922 452,-901 464.59,-888.48 471.48,-758.53 459.57,-725.24\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"462.14,-722.86 453,-717.5 456.8,-727.39 462.14,-722.86\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge21\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:transp_on-&gt;PRMSSnow:transp_on</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-177.5C333.22,-177.5 289.07,-873.06 318,-901 339.42,-921.69 430.89,-922 452,-901 465.47,-887.59 472.77,-747.97 459.83,-713.27\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"462.23,-710.7 453,-705.5 456.97,-715.32 462.23,-710.7\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff -->\n",
+       "<g id=\"node5\" class=\"node\">\n",
+       "<title>PRMSRunoff</title>\n",
+       "<polygon fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"962,-841 808,-841 808,-837 804,-837 804,-833 808,-833 808,-68 804,-68 804,-64 808,-64 808,-60 962,-60 962,-841\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"808,-837 812,-837 812,-833 808,-833 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"808,-68 812,-68 812,-64 808,-64 \"/>\n",
+       "<text text-anchor=\"start\" x=\"847\" y=\"-824.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSRunoff</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"816,-675.5 816,-819.5 867,-819.5 867,-675.5 816,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"824.5\" y=\"-743.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-807.5 867,-819.5 954,-819.5 954,-807.5 867,-807.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"885\" y=\"-811.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-795.5 867,-807.5 954,-807.5 954,-795.5 867,-795.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"879\" y=\"-799.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_changeover</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-783.5 867,-795.5 954,-795.5 954,-783.5 867,-783.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"897\" y=\"-787.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-771.5 867,-783.5 954,-783.5 954,-771.5 867,-771.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"896\" y=\"-775.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_rain</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-759.5 867,-771.5 954,-771.5 954,-759.5 867,-759.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"893\" y=\"-763.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_snow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-747.5 867,-759.5 954,-759.5 954,-747.5 867,-747.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884\" y=\"-751.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_equiv</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-735.5 867,-747.5 954,-747.5 954,-735.5 867,-735.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"901.5\" y=\"-739.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-723.5 867,-735.5 954,-735.5 954,-723.5 867,-723.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"883\" y=\"-727.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix_nopack</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-711.5 867,-723.5 954,-723.5 954,-711.5 867,-711.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"890\" y=\"-715.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_evap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-699.5 867,-711.5 954,-711.5 954,-699.5 867,-699.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884.5\" y=\"-703.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_area</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-687.5 867,-699.5 954,-699.5 954,-687.5 867,-687.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"893\" y=\"-691.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowmelt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"867,-675.5 867,-687.5 954,-687.5 954,-675.5 867,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"881.5\" y=\"-679.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_prev</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"816,-387.5 816,-675.5 867,-675.5 867,-387.5 816,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"821.5\" y=\"-527.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-663.5 867,-675.5 954,-675.5 954,-663.5 867,-663.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"891.5\" y=\"-667.3\" font-family=\"Times,serif\" font-size=\"9.00\">carea_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-651.5 867,-663.5 954,-663.5 954,-651.5 867,-651.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"880.5\" y=\"-655.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_depth_avg</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-639.5 867,-651.5 954,-651.5 954,-639.5 867,-639.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"886\" y=\"-643.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_et_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-627.5 867,-639.5 954,-639.5 954,-627.5 867,-627.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"881\" y=\"-631.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_flow_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-615.5 867,-627.5 954,-627.5 954,-615.5 867,-615.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"892\" y=\"-619.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-603.5 867,-615.5 954,-615.5 954,-603.5 867,-603.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"892\" y=\"-607.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-591.5 867,-603.5 954,-603.5 954,-591.5 867,-591.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884.5\" y=\"-595.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_frac_init</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-579.5 867,-591.5 954,-591.5 954,-579.5 867,-579.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"881.5\" y=\"-583.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_frac_open</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-567.5 867,-579.5 954,-579.5 954,-567.5 867,-567.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"873\" y=\"-571.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_rate_clos</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-555.5 867,-567.5 954,-567.5 954,-555.5 867,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"871.5\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_rate_open</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-543.5 867,-555.5 954,-555.5 954,-543.5 867,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"895\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-531.5 867,-543.5 954,-543.5 954,-531.5 867,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"874.5\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_percent_imperv</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-519.5 867,-531.5 954,-531.5 954,-519.5 867,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"894.5\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-507.5 867,-519.5 954,-519.5 954,-507.5 867,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"879\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">imperv_stor_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-495.5 867,-507.5 954,-507.5 954,-495.5 867,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"902\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-483.5 867,-495.5 954,-495.5 954,-483.5 867,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884.5\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">op_flow_thres</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-471.5 867,-483.5 954,-483.5 954,-471.5 867,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"889.5\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">smidx_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-459.5 867,-471.5 954,-471.5 954,-459.5 867,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"890.5\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">smidx_exp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-447.5 867,-459.5 954,-459.5 954,-447.5 867,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"883.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowinfil_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-435.5 867,-447.5 954,-447.5 954,-435.5 867,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-423.5 867,-435.5 954,-435.5 954,-423.5 867,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"873\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">sro_to_dprst_imperv</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-411.5 867,-423.5 954,-423.5 954,-411.5 867,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"877.5\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">sro_to_dprst_perv</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-399.5 867,-411.5 954,-411.5 954,-399.5 867,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"888\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">va_clos_exp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"867,-387.5 867,-399.5 954,-399.5 954,-387.5 867,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"886.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">va_open_exp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"816,-63.5 816,-387.5 867,-387.5 867,-63.5 816,-63.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"817\" y=\"-221.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-375.5 867,-387.5 954,-387.5 954,-375.5 867,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">contrib_fraction</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-363.5 867,-375.5 954,-375.5 954,-363.5 867,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882.5\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_clos</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-351.5 867,-363.5 954,-363.5 954,-351.5 867,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"872.5\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_clos_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-339.5 867,-351.5 954,-351.5 954,-339.5 867,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"881\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_open</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-327.5 867,-339.5 954,-339.5 954,-327.5 867,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"871\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_open_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-315.5 867,-327.5 954,-327.5 954,-315.5 867,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882.5\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_evap_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-303.5 867,-315.5 954,-315.5 954,-303.5 867,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"878.5\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_insroff_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-291.5 867,-303.5 954,-303.5 954,-291.5 867,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"883\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-279.5 867,-291.5 954,-291.5 954,-279.5 867,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_sroff_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-267.5 867,-279.5 954,-279.5 954,-267.5 867,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-255.5 867,-267.5 954,-267.5 954,-255.5 867,-255.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"869.5\" y=\"-259.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-243.5 867,-255.5 954,-255.5 954,-243.5 867,-243.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"876\" y=\"-247.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru_old</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-231.5 867,-243.5 954,-243.5 954,-231.5 867,-231.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884\" y=\"-235.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_clos</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-219.5 867,-231.5 954,-231.5 954,-219.5 867,-219.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"875\" y=\"-223.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_clos_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-207.5 867,-219.5 954,-219.5 954,-207.5 867,-207.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"884.5\" y=\"-211.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-195.5 867,-207.5 954,-207.5 954,-195.5 867,-195.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"882.5\" y=\"-199.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_open</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-183.5 867,-195.5 954,-195.5 954,-183.5 867,-183.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"873.5\" y=\"-187.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_open_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-171.5 867,-183.5 954,-183.5 954,-171.5 867,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"881.5\" y=\"-175.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervevap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-159.5 867,-171.5 954,-171.5 954,-159.5 867,-159.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"883\" y=\"-163.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-147.5 867,-159.5 954,-159.5 954,-147.5 867,-147.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"868\" y=\"-151.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-135.5 867,-147.5 954,-147.5 954,-135.5 867,-135.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"875\" y=\"-139.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor_old</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-123.5 867,-135.5 954,-135.5 954,-123.5 867,-123.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"892\" y=\"-127.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_sroffi</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-111.5 867,-123.5 954,-123.5 954,-111.5 867,-111.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"891\" y=\"-115.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_sroffp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-99.5 867,-111.5 954,-111.5 954,-99.5 867,-99.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"887.5\" y=\"-103.3\" font-family=\"Times,serif\" font-size=\"9.00\">imperv_evap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-87.5 867,-99.5 954,-99.5 954,-87.5 867,-87.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"889\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"9.00\">imperv_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-75.5 867,-87.5 954,-87.5 954,-75.5 867,-75.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"903\" y=\"-79.3\" font-family=\"Times,serif\" font-size=\"9.00\">infil</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"867,-63.5 867,-75.5 954,-75.5 954,-63.5 867,-63.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"901.5\" y=\"-67.3\" font-family=\"Times,serif\" font-size=\"9.00\">sroff</text>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge26\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSRunoff:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-285.5C310.1,-285.5 304.85,-884.41 309,-901 311.17,-909.68 310.39,-914.3 318,-919 362.61,-946.57 738.86,-930.61 790,-919 868.32,-901.23 909.51,-908.52 953,-841 963.01,-825.46 973.14,-766.37 963.27,-747.4\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"965.17,-744.46 955,-741.5 961.11,-750.16 965.17,-744.46\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSoilzone -->\n",
+       "<g id=\"node6\" class=\"node\">\n",
+       "<title>PRMSSoilzone</title>\n",
+       "<polygon fill=\"none\" stroke=\"#bf5b17\" stroke-width=\"2\" points=\"789.5,-865 642.5,-865 642.5,-861 638.5,-861 638.5,-857 642.5,-857 642.5,-44 638.5,-44 638.5,-40 642.5,-40 642.5,-36 789.5,-36 789.5,-865\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#bf5b17\" stroke-width=\"2\" points=\"642.5,-861 646.5,-861 646.5,-857 642.5,-857 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#bf5b17\" stroke-width=\"2\" points=\"642.5,-44 646.5,-44 646.5,-40 642.5,-40 \"/>\n",
+       "<text text-anchor=\"start\" x=\"674\" y=\"-848.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSSoilzone</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"651,-723.5 651,-843.5 702,-843.5 702,-723.5 651,-723.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"659.5\" y=\"-779.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-831.5 702,-843.5 782,-843.5 782,-831.5 702,-831.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"714\" y=\"-835.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_evap_hru</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-819.5 702,-831.5 782,-831.5 782,-819.5 702,-819.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"714.5\" y=\"-823.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_hru</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-807.5 702,-819.5 782,-819.5 782,-807.5 702,-807.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"713\" y=\"-811.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-795.5 702,-807.5 782,-807.5 782,-795.5 702,-795.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"716.5\" y=\"-799.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-783.5 702,-795.5 782,-795.5 782,-783.5 702,-783.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"734.5\" y=\"-787.3\" font-family=\"Times,serif\" font-size=\"9.00\">infil</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-771.5 702,-783.5 782,-783.5 782,-771.5 702,-771.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"733\" y=\"-775.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-759.5 702,-771.5 782,-771.5 782,-759.5 702,-759.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"721.5\" y=\"-763.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_evap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-747.5 702,-759.5 782,-759.5 782,-747.5 702,-747.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"716\" y=\"-751.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_area</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-735.5 702,-747.5 782,-747.5 782,-735.5 702,-735.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"733\" y=\"-739.3\" font-family=\"Times,serif\" font-size=\"9.00\">sroff</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"702,-723.5 702,-735.5 782,-735.5 782,-723.5 702,-723.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"724\" y=\"-727.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"651,-471.5 651,-723.5 702,-723.5 702,-471.5 651,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"656.5\" y=\"-593.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-711.5 702,-723.5 782,-723.5 782,-711.5 702,-711.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"725.5\" y=\"-715.3\" font-family=\"Times,serif\" font-size=\"9.00\">cov_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-699.5 702,-711.5 782,-711.5 782,-699.5 702,-699.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723.5\" y=\"-703.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-687.5 702,-699.5 782,-699.5 782,-687.5 702,-687.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"721\" y=\"-691.3\" font-family=\"Times,serif\" font-size=\"9.00\">fastcoef_lin</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-675.5 702,-687.5 782,-687.5 782,-675.5 702,-675.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"721.5\" y=\"-679.3\" font-family=\"Times,serif\" font-size=\"9.00\">fastcoef_sq</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-663.5 702,-675.5 782,-675.5 782,-663.5 702,-663.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"726.5\" y=\"-667.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-651.5 702,-663.5 782,-663.5 782,-651.5 702,-651.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"706\" y=\"-655.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_percent_imperv</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-639.5 702,-651.5 782,-651.5 782,-639.5 702,-639.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"726\" y=\"-643.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-627.5 702,-639.5 782,-639.5 782,-627.5 702,-627.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"733.5\" y=\"-631.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-615.5 702,-627.5 782,-627.5 782,-615.5 702,-615.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"715.5\" y=\"-619.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_den</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-603.5 702,-615.5 782,-615.5 782,-603.5 702,-603.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"718\" y=\"-607.3\" font-family=\"Times,serif\" font-size=\"9.00\">sat_threshold</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-591.5 702,-603.5 782,-603.5 782,-591.5 702,-591.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"719\" y=\"-595.3\" font-family=\"Times,serif\" font-size=\"9.00\">slowcoef_lin</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-579.5 702,-591.5 782,-591.5 782,-579.5 702,-579.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"719\" y=\"-583.3\" font-family=\"Times,serif\" font-size=\"9.00\">slowcoef_sq</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-567.5 702,-579.5 782,-579.5 782,-567.5 702,-567.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"717.5\" y=\"-571.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil2gw_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-555.5 702,-567.5 782,-567.5 782,-555.5 702,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"706.5\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_init_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-543.5 702,-555.5 782,-555.5 782,-543.5 702,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"713.5\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_max</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-531.5 702,-543.5 782,-543.5 782,-531.5 702,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"707\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_rechr_init_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-519.5 702,-531.5 782,-531.5 782,-519.5 702,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"705.5\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_rechr_max_frac</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-507.5 702,-519.5 782,-519.5 782,-507.5 702,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"725.5\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-495.5 702,-507.5 782,-507.5 782,-495.5 702,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"720\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssr2gw_exp</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-483.5 702,-495.5 782,-495.5 782,-483.5 702,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"720\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssr2gw_rate</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"702,-471.5 702,-483.5 782,-483.5 782,-471.5 702,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"714.5\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssstor_init_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"651,-39.5 651,-471.5 702,-471.5 702,-39.5 651,-39.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"652\" y=\"-251.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-459.5 702,-471.5 782,-471.5 782,-459.5 702,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"719.5\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">cap_infil_tot</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-447.5 702,-459.5 782,-459.5 782,-447.5 702,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"720.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">cap_waterin</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-435.5 702,-447.5 782,-447.5 782,-435.5 702,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"717\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">dunnian_flow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-423.5 702,-435.5 782,-435.5 782,-423.5 702,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"725.5\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_actet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-411.5 702,-423.5 782,-423.5 782,-411.5 702,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"725\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">lakein_sz</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-399.5 702,-411.5 782,-411.5 782,-399.5 702,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723.5\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">perv_actet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-387.5 702,-399.5 782,-399.5 782,-387.5 702,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"720.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet_lower</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-375.5 702,-387.5 782,-387.5 782,-375.5 702,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"722\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet_rechr</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-363.5 702,-375.5 782,-375.5 782,-363.5 702,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"724\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-351.5 702,-363.5 782,-363.5 782,-351.5 702,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"718.5\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_in</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-339.5 702,-351.5 782,-351.5 782,-339.5 702,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"714.5\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_infil</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-327.5 702,-339.5 782,-339.5 782,-327.5 702,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"714.5\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-315.5 702,-327.5 782,-327.5 782,-315.5 702,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"715\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-303.5 702,-315.5 782,-315.5 782,-303.5 702,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"713\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">pref_flow_thrsh</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-291.5 702,-303.5 782,-303.5 782,-291.5 702,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"726.5\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">recharge</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-279.5 702,-291.5 782,-291.5 782,-279.5 702,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"722.5\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">slow_flow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-267.5 702,-279.5 782,-279.5 782,-267.5 702,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"724\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">slow_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-255.5 702,-267.5 782,-267.5 782,-255.5 702,-255.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723\" y=\"-259.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_free</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-243.5 702,-255.5 782,-255.5 782,-243.5 702,-243.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723\" y=\"-247.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_lower</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-231.5 702,-243.5 782,-243.5 782,-231.5 702,-231.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"713\" y=\"-235.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_lower_ratio</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-219.5 702,-231.5 782,-231.5 782,-219.5 702,-219.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723.5\" y=\"-223.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-207.5 702,-219.5 782,-219.5 782,-207.5 702,-207.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"708.5\" y=\"-211.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-195.5 702,-207.5 782,-207.5 782,-195.5 702,-195.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"713\" y=\"-199.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_prev</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-183.5 702,-195.5 782,-195.5 782,-183.5 702,-183.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"716.5\" y=\"-187.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_tot</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-171.5 702,-183.5 782,-183.5 782,-171.5 702,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"724\" y=\"-175.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_rechr</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-159.5 702,-171.5 782,-171.5 782,-159.5 702,-159.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"722\" y=\"-163.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_to_gw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-147.5 702,-159.5 782,-159.5 782,-147.5 702,-147.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"722\" y=\"-151.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_to_ssr</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-135.5 702,-147.5 782,-147.5 782,-135.5 702,-135.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"715\" y=\"-139.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_zone_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-123.5 702,-135.5 782,-135.5 782,-123.5 702,-123.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723\" y=\"-127.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssr_to_gw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-111.5 702,-123.5 782,-123.5 782,-111.5 702,-111.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"722\" y=\"-115.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssres_flow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-99.5 702,-111.5 782,-111.5 782,-99.5 702,-99.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"727\" y=\"-103.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssres_in</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-87.5 702,-99.5 782,-99.5 782,-87.5 702,-87.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"723.5\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssres_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-75.5 702,-87.5 782,-87.5 782,-75.5 702,-75.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"721.5\" y=\"-79.3\" font-family=\"Times,serif\" font-size=\"9.00\">swale_actet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-63.5 702,-75.5 782,-75.5 782,-63.5 702,-63.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"718\" y=\"-67.3\" font-family=\"Times,serif\" font-size=\"9.00\">unused_potet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-51.5 702,-63.5 782,-63.5 782,-51.5 702,-51.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"703\" y=\"-55.3\" font-family=\"Times,serif\" font-size=\"9.00\">upslope_dunnianflow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"702,-39.5 702,-51.5 782,-51.5 782,-39.5 702,-39.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"709.5\" y=\"-43.3\" font-family=\"Times,serif\" font-size=\"9.00\">upslope_interflow</text>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge40\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSSoilzone:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-285.5C310.1,-285.5 304.85,-884.41 309,-901 311.17,-909.68 310.39,-914.3 318,-919 346.92,-936.87 590.47,-924.61 624,-919 696.78,-906.83 737.46,-924.57 781,-865 790.33,-852.24 798.66,-802.45 791.02,-784.23\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"792.91,-781.25 783,-777.5 788.41,-786.61 792.91,-781.25\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge41\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:transp_on-&gt;PRMSSoilzone:transp_on</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M293,-177.5C313.1,-177.5 304.17,-881.49 309,-901 311.15,-909.68 310.39,-914.3 318,-919 346.92,-936.87 590.47,-924.61 624,-919 696.78,-906.83 737.7,-924.75 781,-865 788.42,-854.76 795.41,-766.15 788.54,-738.03\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"791.38,-735.98 783,-729.5 785.51,-739.79 791.38,-735.98\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge8\" class=\"edge\">\n",
+       "<title>PRMSCanopy:hru_intcpevap-&gt;PRMSSnow:hru_intcpevap</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-405.5C648.45,-405.5 638.31,-286.16 616,-264 572.48,-220.78 522.25,-221.53 478,-264 455.27,-285.82 482.49,-793.87 459.19,-865.21\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"456.18,-863.39 453,-873.5 461.79,-867.58 456.18,-863.39\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge9\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_ppt-&gt;PRMSSnow:net_ppt</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-297.5C631.9,-297.5 626.69,-274.37 616,-264 571.99,-221.28 522.28,-221.57 478,-264 456.19,-284.9 481.35,-770.95 459.11,-841.1\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"456.05,-839.35 453,-849.5 461.71,-843.47 456.05,-839.35\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge10\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_rain-&gt;PRMSSnow:net_rain</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-285.5C633.98,-285.5 628.58,-119.84 478,-264 434.45,-305.7 507.89,-781.05 462.18,-832.92\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"460.38,-829.9 453,-837.5 463.51,-836.16 460.38,-829.9\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge11\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_snow-&gt;PRMSSnow:net_snow</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M577,-266.5C577,-222.5 509.65,-236.93 478,-267.5 435.89,-308.18 506.21,-768.69 462.21,-820.72\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"460.27,-817.79 453,-825.5 463.49,-824 460.27,-817.79\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge23\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_rain-&gt;PRMSRunoff:net_rain</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-285.5C634.1,-285.5 629.84,-884.41 634,-901 636.17,-909.68 635.39,-914.3 643,-919 703.43,-956.35 914.19,-900.5 953,-841 966.14,-820.86 978.83,-788.97 964.87,-779.95\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"965.55,-776.51 955,-777.5 963.86,-783.31 965.55,-776.51\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge24\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_ppt-&gt;PRMSRunoff:net_ppt</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-297.5C633.77,-297.5 629.92,-884.73 634,-901 636.18,-909.68 635.39,-914.3 643,-919 703.43,-956.35 913.97,-900.35 953,-841 963.13,-825.6 973.08,-801.64 964.65,-792.86\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"965.59,-789.49 955,-789.5 963.29,-796.1 965.59,-789.49\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge25\" class=\"edge\">\n",
+       "<title>PRMSCanopy:net_snow-&gt;PRMSRunoff:net_snow</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-273.5C634.44,-273.5 629.76,-884.09 634,-901 636.17,-909.68 635.39,-914.3 643,-919 703.43,-956.35 914.34,-900.59 953,-841 960.21,-829.89 967.74,-789.31 962.35,-772.68\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"964.6,-769.99 955,-765.5 959.71,-774.99 964.6,-769.99\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge32\" class=\"edge\">\n",
+       "<title>PRMSCanopy:hru_intcpevap-&gt;PRMSRunoff:hru_intcpevap</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-405.5C644.54,-405.5 627.21,-874.31 634,-901 636.2,-909.67 635.39,-914.3 643,-919 670.79,-936.17 758.14,-926.23 790,-919 868.32,-901.23 907.75,-907.35 953,-841 956.88,-835.31 960.91,-827.32 961.51,-821.42\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"964.05,-819 955,-813.5 958.65,-823.45 964.05,-819\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge33\" class=\"edge\">\n",
+       "<title>PRMSCanopy:intcp_changeover-&gt;PRMSRunoff:intcp_changeover</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-357.5C632.1,-357.5 630.3,-886.36 634,-901 636.19,-909.67 635.39,-914.3 643,-919 670.79,-936.17 758.14,-926.23 790,-919 868.32,-901.23 908.48,-907.84 953,-841 960.08,-830.37 967.21,-814.33 963.83,-806.36\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"965.45,-803.25 955,-801.5 962.07,-809.39 965.45,-803.25\"/>\n",
+       "</g>\n",
+       "<!-- PRMSCanopy&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge37\" class=\"edge\">\n",
+       "<title>PRMSCanopy:hru_intcpevap-&gt;PRMSSoilzone:hru_intcpevap</title>\n",
+       "<path fill=\"none\" stroke=\"#7fc97f\" d=\"M617,-405.5C668.13,-405.5 605.35,-829.86 642.5,-865 665.02,-886.3 759.91,-886.75 782,-865 799.29,-847.98 808.45,-813.32 792.77,-803.9\"/>\n",
+       "<polygon fill=\"#7fc97f\" stroke=\"#7fc97f\" points=\"793.55,-800.49 783,-801.5 791.87,-807.29 793.55,-800.49\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSCanopy -->\n",
+       "<g id=\"edge1\" class=\"edge\">\n",
+       "<title>PRMSSnow:pkwater_ante-&gt;PRMSCanopy:pkwater_ante</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-165.5C505.46,-165.5 439.93,-600.9 478,-637 628.26,-779.51 644.36,-614.69 624.84,-579.74\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"627,-576.99 617,-573.5 622.64,-582.47 627,-576.99\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge27\" class=\"edge\">\n",
+       "<title>PRMSSnow:snowmelt-&gt;PRMSRunoff:snowmelt</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-33.5C477.1,-33.5 463.25,-877.6 469,-901 471.14,-909.69 470.39,-914.3 478,-919 507.49,-937.23 756.19,-926.67 790,-919 868.32,-901.23 909.73,-908.66 953,-841 960.49,-829.3 968.49,-731.45 960.78,-701.91\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"963.55,-699.76 955,-693.5 957.78,-703.72 963.55,-699.76\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge28\" class=\"edge\">\n",
+       "<title>PRMSSnow:snow_evap-&gt;PRMSRunoff:snow_evap</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-69.5C476.1,-69.5 463.48,-878.57 469,-901 471.14,-909.68 470.39,-914.3 478,-919 507.49,-937.23 756.19,-926.67 790,-919 868.32,-901.23 909.64,-908.6 953,-841 965.85,-820.96 978.56,-742.8 963.81,-722.4\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"965.44,-719.3 955,-717.5 962.04,-725.42 965.44,-719.3\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge29\" class=\"edge\">\n",
+       "<title>PRMSSnow:pkwater_equiv-&gt;PRMSRunoff:pkwater_equiv</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-153.5C473.77,-153.5 464.01,-880.84 469,-901 471.15,-909.68 470.39,-914.3 478,-919 507.49,-937.23 756.19,-926.67 790,-919 868.32,-901.23 909.41,-908.46 953,-841 961.58,-827.73 970.38,-778.26 962.94,-760.18\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"964.91,-757.25 955,-753.5 960.4,-762.61 964.91,-757.25\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge30\" class=\"edge\">\n",
+       "<title>PRMSSnow:pptmix_nopack-&gt;PRMSRunoff:pptmix_nopack</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-141.5C474.1,-141.5 463.94,-880.51 469,-901 471.15,-909.68 470.39,-914.3 478,-919 507.49,-937.23 756.19,-926.67 790,-919 868.32,-901.23 909.58,-908.56 953,-841 964.41,-823.25 975.81,-754.87 963.64,-734.97\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"965.32,-731.89 955,-729.5 961.58,-737.81 965.32,-731.89\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge31\" class=\"edge\">\n",
+       "<title>PRMSSnow:snowcov_area-&gt;PRMSRunoff:snowcov_area</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-57.5C476.43,-57.5 463.4,-878.24 469,-901 471.14,-909.69 470.39,-914.3 478,-919 507.49,-937.23 756.19,-926.67 790,-919 868.32,-901.23 909.69,-908.63 953,-841 967.27,-818.71 981.26,-730.93 964,-710\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"965.51,-706.84 955,-705.5 962.38,-713.1 965.51,-706.84\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge42\" class=\"edge\">\n",
+       "<title>PRMSSnow:snow_evap-&gt;PRMSSoilzone:snow_evap</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-69.5C476.1,-69.5 463.48,-878.57 469,-901 471.14,-909.68 470.39,-914.3 478,-919 536.18,-954.96 740.72,-920.27 781,-865 791.89,-850.06 801.42,-790.57 791.34,-771.45\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"793.17,-768.46 783,-765.5 789.11,-774.16 793.17,-768.46\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge43\" class=\"edge\">\n",
+       "<title>PRMSSnow:snowcov_area-&gt;PRMSSoilzone:snowcov_area</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M453,-57.5C476.43,-57.5 463.4,-878.24 469,-901 471.14,-909.69 470.39,-914.3 478,-919 536.18,-954.96 740.78,-920.32 781,-865 793.47,-847.85 804.2,-778.45 791.53,-758.74\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"793.35,-755.75 783,-753.5 789.69,-761.72 793.35,-755.75\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge34\" class=\"edge\">\n",
+       "<title>PRMSRunoff:dprst_evap_hru-&gt;PRMSSoilzone:dprst_evap_hru</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-321.5C984.06,-321.5 974.58,-80.51 954,-60 908.03,-14.2 854.61,-14.86 808,-60 778.83,-88.24 820.55,-749.62 789.87,-829.6\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"786.92,-827.66 783,-837.5 792.21,-832.25 786.92,-827.66\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge35\" class=\"edge\">\n",
+       "<title>PRMSRunoff:dprst_seep_hru-&gt;PRMSSoilzone:dprst_seep_hru</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-297.5C981.39,-297.5 972.7,-78.62 954,-60 908.02,-14.21 854.63,-14.87 808,-60 779.28,-87.8 820.01,-738.98 789.77,-817.73\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"786.93,-815.66 783,-825.5 792.21,-820.26 786.93,-815.66\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge36\" class=\"edge\">\n",
+       "<title>PRMSRunoff:hru_impervevap-&gt;PRMSSoilzone:hru_impervevap</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-177.5C981.11,-177.5 972.54,-78.39 954,-60 907.92,-14.31 854.64,-14.88 808,-60 779.72,-87.36 819.48,-728.33 789.67,-805.85\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"786.93,-803.66 783,-813.5 792.21,-808.26 786.93,-803.66\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge38\" class=\"edge\">\n",
+       "<title>PRMSRunoff:infil-&gt;PRMSSoilzone:infil</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-81.5C964.57,-81.5 960.92,-66.61 954,-60 907.06,-15.2 854.66,-14.91 808,-60 780.66,-86.42 818.25,-704.46 789.64,-781.62\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"786.77,-779.6 783,-789.5 792.12,-784.11 786.77,-779.6\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSSoilzone -->\n",
+       "<g id=\"edge39\" class=\"edge\">\n",
+       "<title>PRMSRunoff:sroff-&gt;PRMSSoilzone:sroff</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M911,-62.5C911,-16.72 840.81,-31.57 808,-63.5 782.73,-88.09 815.85,-660.09 789.36,-733.72\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"786.62,-731.54 783,-741.5 792.04,-735.97 786.62,-731.54\"/>\n",
+       "</g>\n",
+       "<!-- PRMSGroundwater -->\n",
+       "<g id=\"node7\" class=\"node\">\n",
+       "<title>PRMSGroundwater</title>\n",
+       "<polygon fill=\"none\" stroke=\"#666666\" stroke-width=\"2\" points=\"1119.5,-559 980.5,-559 980.5,-555 976.5,-555 976.5,-551 980.5,-551 980.5,-350 976.5,-350 976.5,-346 980.5,-346 980.5,-342 1119.5,-342 1119.5,-559\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#666666\" stroke-width=\"2\" points=\"980.5,-555 984.5,-555 984.5,-551 980.5,-551 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#666666\" stroke-width=\"2\" points=\"980.5,-350 984.5,-350 984.5,-346 980.5,-346 \"/>\n",
+       "<text text-anchor=\"start\" x=\"996\" y=\"-542.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSGroundwater</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"989,-501.5 989,-537.5 1040,-537.5 1040,-501.5 989,-501.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"997.5\" y=\"-515.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1040,-525.5 1040,-537.5 1112,-537.5 1112,-525.5 1040,-525.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1048.5\" y=\"-529.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_hru</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1040,-513.5 1040,-525.5 1112,-525.5 1112,-513.5 1040,-513.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1056\" y=\"-517.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_to_gw</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1040,-501.5 1040,-513.5 1112,-513.5 1112,-501.5 1040,-501.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1057\" y=\"-505.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssr_to_gw</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"989,-417.5 989,-501.5 1040,-501.5 1040,-417.5 989,-417.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"994.5\" y=\"-455.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-489.5 1040,-501.5 1112,-501.5 1112,-489.5 1040,-489.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1052\" y=\"-493.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwflow_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-477.5 1040,-489.5 1112,-489.5 1112,-477.5 1040,-477.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1053\" y=\"-481.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwsink_coef</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-465.5 1040,-477.5 1112,-477.5 1112,-465.5 1040,-465.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1055.5\" y=\"-469.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwstor_init</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-453.5 1040,-465.5 1112,-465.5 1112,-453.5 1040,-453.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1054.5\" y=\"-457.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwstor_min</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-441.5 1040,-453.5 1112,-453.5 1112,-441.5 1040,-441.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1060.5\" y=\"-445.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-429.5 1040,-441.5 1112,-441.5 1112,-429.5 1040,-429.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1068\" y=\"-433.3\" font-family=\"Times,serif\" font-size=\"9.00\">ngw</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1040,-417.5 1040,-429.5 1112,-429.5 1112,-417.5 1040,-417.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1067.5\" y=\"-421.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"989,-345.5 989,-417.5 1040,-417.5 1040,-345.5 989,-345.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"990\" y=\"-377.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-405.5 1040,-417.5 1112,-417.5 1112,-405.5 1040,-405.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1054.5\" y=\"-409.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_flow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-393.5 1040,-405.5 1112,-405.5 1112,-393.5 1040,-393.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1059\" y=\"-397.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_in</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-381.5 1040,-393.5 1112,-393.5 1112,-381.5 1040,-381.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1055\" y=\"-385.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_sink</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-369.5 1040,-381.5 1112,-381.5 1112,-369.5 1040,-369.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1056\" y=\"-373.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-357.5 1040,-369.5 1112,-369.5 1112,-357.5 1040,-357.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1041\" y=\"-361.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_stor_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1040,-345.5 1040,-357.5 1112,-357.5 1112,-345.5 1040,-345.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1048\" y=\"-349.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_stor_old</text>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSGroundwater -->\n",
+       "<g id=\"edge46\" class=\"edge\">\n",
+       "<title>PRMSRunoff:dprst_seep_hru-&gt;PRMSGroundwater:dprst_seep_hru</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-297.5C1013.39,-297.5 937.26,-519.77 980.5,-559 1086.13,-654.83 1120.12,-569.37 1117.8,-540.32\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"1120.85,-538.61 1113,-531.5 1114.7,-541.96 1120.85,-538.61\"/>\n",
+       "</g>\n",
+       "<!-- PRMSChannel -->\n",
+       "<g id=\"node8\" class=\"node\">\n",
+       "<title>PRMSChannel</title>\n",
+       "<polygon fill=\"none\" stroke=\"#386cb0\" stroke-width=\"2\" points=\"1284,-589 1138,-589 1138,-585 1134,-585 1134,-581 1138,-581 1138,-320 1134,-320 1134,-316 1138,-316 1138,-312 1284,-312 1284,-589\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#386cb0\" stroke-width=\"2\" points=\"1138,-585 1142,-585 1142,-581 1138,-581 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#386cb0\" stroke-width=\"2\" points=\"1138,-320 1142,-320 1142,-316 1138,-316 \"/>\n",
+       "<text text-anchor=\"start\" x=\"1170\" y=\"-572.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSChannel</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1146,-531.5 1146,-567.5 1197,-567.5 1197,-531.5 1146,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1154.5\" y=\"-545.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1197,-555.5 1197,-567.5 1276,-567.5 1276,-555.5 1197,-555.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1215\" y=\"-559.3\" font-family=\"Times,serif\" font-size=\"9.00\">gwres_flow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1197,-543.5 1197,-555.5 1276,-555.5 1276,-543.5 1197,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1227.5\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">sroff</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"1197,-531.5 1197,-543.5 1276,-543.5 1276,-531.5 1197,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1216.5\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">ssres_flow</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1146,-351.5 1146,-531.5 1197,-531.5 1197,-351.5 1146,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1151.5\" y=\"-437.8\" font-family=\"Times,serif\" font-size=\"14.00\">params</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-519.5 1197,-531.5 1276,-531.5 1276,-519.5 1197,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1221\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_area</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-507.5 1197,-519.5 1276,-519.5 1276,-507.5 1197,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1213.5\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_segment</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-495.5 1197,-507.5 1276,-507.5 1276,-495.5 1197,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1222\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">mann_n</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-483.5 1197,-495.5 1276,-495.5 1276,-483.5 1197,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1228\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">nhru</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-471.5 1197,-483.5 1276,-483.5 1276,-471.5 1197,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1219.5\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">nsegment</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-459.5 1197,-471.5 1276,-471.5 1276,-459.5 1197,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1209.5\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">obsin_segment</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-447.5 1197,-459.5 1276,-459.5 1276,-447.5 1197,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1207.5\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">obsout_segment</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-435.5 1197,-447.5 1276,-447.5 1276,-435.5 1197,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1218\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_depth</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-423.5 1197,-435.5 1276,-435.5 1276,-423.5 1197,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1217\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_length</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-411.5 1197,-423.5 1276,-423.5 1276,-411.5 1197,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1218.5\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_slope</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-399.5 1197,-411.5 1276,-411.5 1276,-399.5 1197,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1203\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">segment_flow_init</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-387.5 1197,-399.5 1276,-399.5 1276,-387.5 1197,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1212\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">segment_type</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-375.5 1197,-387.5 1276,-387.5 1276,-375.5 1197,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1218\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">tosegment</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-363.5 1197,-375.5 1276,-375.5 1276,-363.5 1197,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1208\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">tosegment_nhm</text>\n",
+       "<polygon fill=\"orange\" stroke=\"transparent\" points=\"1197,-351.5 1197,-363.5 1276,-363.5 1276,-351.5 1197,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1224\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">x_coef</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1146,-315.5 1146,-351.5 1197,-351.5 1197,-315.5 1146,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1147\" y=\"-329.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1197,-339.5 1197,-351.5 1276,-351.5 1276,-339.5 1197,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1203.5\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_lateral_inflow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1197,-327.5 1197,-339.5 1276,-339.5 1276,-327.5 1197,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1214\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_outflow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"1197,-315.5 1197,-327.5 1276,-327.5 1276,-315.5 1197,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"1198\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">seg_upstream_inflow</text>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff&#45;&gt;PRMSChannel -->\n",
+       "<g id=\"edge47\" class=\"edge\">\n",
+       "<title>PRMSRunoff:sroff-&gt;PRMSChannel:sroff</title>\n",
+       "<path fill=\"none\" stroke=\"#f0027f\" d=\"M955,-69.5C978.1,-69.5 966.46,-878.57 972,-901 974.14,-909.68 973.39,-914.3 981,-919 1007.28,-935.24 1093.72,-935.24 1120,-919 1154.68,-897.56 1294.41,-606.59 1284.1,-556.74\"/>\n",
+       "<polygon fill=\"#f0027f\" stroke=\"#f0027f\" points=\"1286.5,-554.19 1277,-549.5 1281.5,-559.09 1286.5,-554.19\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSoilzone&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge22\" class=\"edge\">\n",
+       "<title>PRMSSoilzone:soil_moist_prev-&gt;PRMSRunoff:soil_moist_prev</title>\n",
+       "<path fill=\"none\" stroke=\"#bf5b17\" d=\"M783,-201.5C818.55,-201.5 782.37,-816.35 808,-841 854.77,-885.98 907.97,-886.74 954,-841 976.59,-818.55 988.01,-707.69 964.39,-685.41\"/>\n",
+       "<polygon fill=\"#bf5b17\" stroke=\"#bf5b17\" points=\"965.58,-682.11 955,-681.5 962.89,-688.57 965.58,-682.11\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSoilzone&#45;&gt;PRMSGroundwater -->\n",
+       "<g id=\"edge44\" class=\"edge\">\n",
+       "<title>PRMSSoilzone:soil_to_gw-&gt;PRMSGroundwater:soil_to_gw</title>\n",
+       "<path fill=\"none\" stroke=\"#bf5b17\" d=\"M783,-165.5C803.44,-165.5 794.09,-881.16 799,-901 801.15,-909.68 800.39,-914.3 808,-919 837.11,-936.99 932.89,-936.99 962,-919 1109.3,-827.96 1073.28,-728.01 1111,-559 1113.6,-547.34 1121.71,-533.28 1121.12,-525.47\"/>\n",
+       "<polygon fill=\"#bf5b17\" stroke=\"#bf5b17\" points=\"1123.13,-522.61 1113,-519.5 1118.98,-528.24 1123.13,-522.61\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSoilzone&#45;&gt;PRMSGroundwater -->\n",
+       "<g id=\"edge45\" class=\"edge\">\n",
+       "<title>PRMSSoilzone:ssr_to_gw-&gt;PRMSGroundwater:ssr_to_gw</title>\n",
+       "<path fill=\"none\" stroke=\"#bf5b17\" d=\"M783,-129.5C804.44,-129.5 793.86,-880.19 799,-901 801.15,-909.68 800.39,-914.3 808,-919 837.11,-936.99 932.89,-936.99 962,-919 1000.19,-895.4 1137.69,-565.6 1120.78,-514.21\"/>\n",
+       "<polygon fill=\"#bf5b17\" stroke=\"#bf5b17\" points=\"1122.86,-511.38 1113,-507.5 1118.29,-516.68 1122.86,-511.38\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSoilzone&#45;&gt;PRMSChannel -->\n",
+       "<g id=\"edge48\" class=\"edge\">\n",
+       "<title>PRMSSoilzone:ssres_flow-&gt;PRMSChannel:ssres_flow</title>\n",
+       "<path fill=\"none\" stroke=\"#bf5b17\" d=\"M783,-117.5C804.77,-117.5 793.78,-879.87 799,-901 801.14,-909.68 800.39,-914.3 808,-919 837.49,-937.23 1090.51,-937.23 1120,-919 1155.72,-896.93 1296.2,-595.18 1284.31,-544.65\"/>\n",
+       "<polygon fill=\"#bf5b17\" stroke=\"#bf5b17\" points=\"1286.6,-541.99 1277,-537.5 1281.7,-547 1286.6,-541.99\"/>\n",
+       "</g>\n",
+       "<!-- PRMSGroundwater&#45;&gt;PRMSChannel -->\n",
+       "<g id=\"edge49\" class=\"edge\">\n",
+       "<title>PRMSGroundwater:gwres_flow-&gt;PRMSChannel:gwres_flow</title>\n",
+       "<path fill=\"none\" stroke=\"#666666\" d=\"M1113,-411.5C1152.83,-411.5 1107.93,-562.87 1138,-589 1161.15,-609.12 1253.92,-610.29 1276,-589 1281.36,-583.83 1285.1,-574.75 1284.44,-568.44\"/>\n",
+       "<polygon fill=\"#666666\" stroke=\"#666666\" points=\"1286.7,-565.76 1277,-561.5 1281.92,-570.88 1286.7,-565.76\"/>\n",
+       "</g>\n",
+       "</g>\n",
+       "</svg>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.SVG object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "model_1_graph = pynhm.analysis.ModelGraph(model_1, component_colors=component_colors, show_params=True)\n",
+    "model_1_graph.SVG(verbose=True)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d596019c-d542-480e-be26-581ae3c2170b",
+   "metadata": {},
+   "source": [
+    "## Example 2: Arbitrary submodel\n",
+    "This may not really make sense, but it shows modularity."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "6a310734-0057-4346-8bde-e53465ca1495",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_2_components = [\n",
+    "    pynhm.PRMSBoundaryLayer,\n",
+    "    pynhm.PRMSSnow,\n",
+    "    pynhm.PRMSRunoff,\n",
+    "]\n",
+    "\n",
+    "params = pynhm.PrmsParameters.load(dom_dir / \"myparam.param\")\n",
+    "control = pynhm.Control.load(dom_dir / \"control.test\", params=params)\n",
+    "model_2 = pynhm.Model(*model_2_components, control=control, input_dir=input_dir)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "d68ad4ce-d843-4e20-b703-483dc4f84d1f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_2_graph = pynhm.analysis.ModelGraph(model_2, component_colors=component_colors)  # dont snow parameters by default"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "93a9d535-b9ac-48e3-aafc-78f1fd2dbd28",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"494pt\" height=\"617pt\" viewBox=\"0.00 0.00 494.10 617.09\">\n",
+       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 613.09)\">\n",
+       "<title>G</title>\n",
+       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-613.09 490.1,-613.09 490.1,4 -4,4\"/>\n",
+       "<!-- PRMSBoundaryLayer -->\n",
+       "<g id=\"node1\" class=\"node\">\n",
+       "<title>PRMSBoundaryLayer</title>\n",
+       "<polygon fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"140,-403 0,-403 0,-399 -4,-399 -4,-395 0,-395 0,-182 -4,-182 -4,-178 0,-178 0,-174 140,-174 140,-403\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"0,-399 4,-399 4,-395 0,-395 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#fdc086\" stroke-width=\"2\" points=\"0,-182 4,-182 4,-178 0,-178 \"/>\n",
+       "<text text-anchor=\"start\" x=\"9\" y=\"-386.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSBoundaryLayer</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"8,-345.5 8,-381.5 76,-381.5 76,-345.5 8,-345.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"25\" y=\"-359.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"76,-369.5 76,-381.5 132,-381.5 132,-369.5 76,-369.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"96\" y=\"-373.3\" font-family=\"Times,serif\" font-size=\"9.00\">prcp</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"76,-357.5 76,-369.5 132,-369.5 132,-357.5 76,-357.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"95\" y=\"-361.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmax</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"76,-345.5 76,-357.5 132,-357.5 132,-345.5 76,-345.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"96\" y=\"-349.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmin</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"8,-177.5 8,-345.5 76,-345.5 76,-177.5 8,-177.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"17.5\" y=\"-257.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-333.5 76,-345.5 132,-345.5 132,-333.5 76,-333.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"90\" y=\"-337.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_ppt</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-321.5 76,-333.5 132,-333.5 132,-321.5 76,-321.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"88.5\" y=\"-325.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_rain</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-309.5 76,-321.5 132,-321.5 132,-309.5 76,-309.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"85.5\" y=\"-313.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_snow</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-297.5 76,-309.5 132,-309.5 132,-297.5 76,-297.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"87.5\" y=\"-301.3\" font-family=\"Times,serif\" font-size=\"9.00\">orad_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-285.5 76,-297.5 132,-297.5 132,-285.5 76,-285.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"95\" y=\"-289.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-273.5 76,-285.5 132,-285.5 132,-273.5 76,-273.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"91.5\" y=\"-277.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-261.5 76,-273.5 132,-273.5 132,-261.5 76,-261.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"94.5\" y=\"-265.3\" font-family=\"Times,serif\" font-size=\"9.00\">prmx</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-249.5 76,-261.5 132,-261.5 132,-249.5 76,-249.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"93\" y=\"-253.3\" font-family=\"Times,serif\" font-size=\"9.00\">swrad</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-237.5 76,-249.5 132,-249.5 132,-237.5 76,-237.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"94.5\" y=\"-241.3\" font-family=\"Times,serif\" font-size=\"9.00\">tavgc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-225.5 76,-237.5 132,-237.5 132,-225.5 76,-225.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"93\" y=\"-229.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-213.5 76,-225.5 132,-225.5 132,-213.5 76,-213.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"93.5\" y=\"-217.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxf</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-201.5 76,-213.5 132,-213.5 132,-201.5 76,-201.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"94\" y=\"-205.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminc</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-189.5 76,-201.5 132,-201.5 132,-189.5 76,-189.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"94.5\" y=\"-193.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminf</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"76,-177.5 76,-189.5 132,-189.5 132,-177.5 76,-177.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"86\" y=\"-181.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "</g>\n",
+       "<!-- PRMSSnow -->\n",
+       "<g id=\"node2\" class=\"node\">\n",
+       "<title>PRMSSnow</title>\n",
+       "<polygon fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"300,-577 158,-577 158,-573 154,-573 154,-569 158,-569 158,-8 154,-8 154,-4 158,-4 158,0 300,0 300,-577\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"158,-573 162,-573 162,-569 158,-569 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#beaed4\" stroke-width=\"2\" points=\"158,-8 162,-8 162,-4 158,-4 \"/>\n",
+       "<text text-anchor=\"start\" x=\"195\" y=\"-560.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSSnow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"166,-375.5 166,-555.5 217,-555.5 217,-375.5 166,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"174.5\" y=\"-461.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-543.5 217,-555.5 292,-555.5 292,-543.5 217,-543.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"229\" y=\"-547.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-531.5 217,-543.5 292,-543.5 292,-531.5 217,-531.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"240.5\" y=\"-535.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-519.5 217,-531.5 292,-531.5 292,-519.5 217,-519.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"241\" y=\"-523.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-507.5 217,-519.5 292,-519.5 292,-507.5 217,-507.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"240\" y=\"-511.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_rain</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-495.5 217,-507.5 292,-507.5 292,-495.5 217,-495.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"237\" y=\"-499.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_snow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-483.5 217,-495.5 292,-495.5 292,-483.5 217,-483.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"238\" y=\"-487.3\" font-family=\"Times,serif\" font-size=\"9.00\">orad_hru</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-471.5 217,-483.5 292,-483.5 292,-471.5 217,-471.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245.5\" y=\"-475.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-459.5 217,-471.5 292,-471.5 292,-459.5 217,-459.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242\" y=\"-463.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-447.5 217,-459.5 292,-459.5 292,-447.5 217,-447.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245\" y=\"-451.3\" font-family=\"Times,serif\" font-size=\"9.00\">prmx</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-435.5 217,-447.5 292,-447.5 292,-435.5 217,-435.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"218\" y=\"-439.3\" font-family=\"Times,serif\" font-size=\"9.00\">soltab_horad_potsw</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-423.5 217,-435.5 292,-435.5 292,-423.5 217,-423.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"243.5\" y=\"-427.3\" font-family=\"Times,serif\" font-size=\"9.00\">swrad</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-411.5 217,-423.5 292,-423.5 292,-411.5 217,-411.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245\" y=\"-415.3\" font-family=\"Times,serif\" font-size=\"9.00\">tavgc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-399.5 217,-411.5 292,-411.5 292,-399.5 217,-399.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"243.5\" y=\"-403.3\" font-family=\"Times,serif\" font-size=\"9.00\">tmaxc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-387.5 217,-399.5 292,-399.5 292,-387.5 217,-387.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"244.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"9.00\">tminc</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"217,-375.5 217,-387.5 292,-387.5 292,-375.5 217,-375.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236.5\" y=\"-379.3\" font-family=\"Times,serif\" font-size=\"9.00\">transp_on</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"166,-3.5 166,-375.5 217,-375.5 217,-3.5 166,-3.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"167\" y=\"-185.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-363.5 217,-375.5 292,-375.5 292,-363.5 217,-363.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"251\" y=\"-367.3\" font-family=\"Times,serif\" font-size=\"9.00\">ai</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-351.5 217,-363.5 292,-363.5 292,-351.5 217,-351.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242.5\" y=\"-355.3\" font-family=\"Times,serif\" font-size=\"9.00\">albedo</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-339.5 217,-351.5 292,-351.5 292,-339.5 217,-339.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"238\" y=\"-343.3\" font-family=\"Times,serif\" font-size=\"9.00\">frac_swe</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-327.5 217,-339.5 292,-339.5 292,-327.5 217,-327.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"240.5\" y=\"-331.3\" font-family=\"Times,serif\" font-size=\"9.00\">freeh2o</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-315.5 217,-327.5 292,-327.5 292,-315.5 217,-315.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246\" y=\"-319.3\" font-family=\"Times,serif\" font-size=\"9.00\">iasw</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-303.5 217,-315.5 292,-315.5 292,-303.5 217,-303.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242\" y=\"-307.3\" font-family=\"Times,serif\" font-size=\"9.00\">int_alb</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-291.5 217,-303.5 292,-303.5 292,-291.5 217,-291.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"249\" y=\"-295.3\" font-family=\"Times,serif\" font-size=\"9.00\">iso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-279.5 217,-291.5 292,-291.5 292,-279.5 217,-279.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"249\" y=\"-283.3\" font-family=\"Times,serif\" font-size=\"9.00\">lso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-267.5 217,-279.5 292,-279.5 292,-267.5 217,-267.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"250\" y=\"-271.3\" font-family=\"Times,serif\" font-size=\"9.00\">lst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-255.5 217,-267.5 292,-267.5 292,-255.5 217,-255.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246.5\" y=\"-259.3\" font-family=\"Times,serif\" font-size=\"9.00\">mso</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-243.5 217,-255.5 292,-255.5 292,-243.5 217,-243.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242\" y=\"-247.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_def</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-231.5 217,-243.5 292,-243.5 292,-231.5 217,-231.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"241\" y=\"-235.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_den</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-219.5 217,-231.5 292,-231.5 292,-219.5 217,-219.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"237.5\" y=\"-223.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_depth</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-207.5 217,-219.5 292,-219.5 292,-207.5 217,-207.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"242.5\" y=\"-211.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_ice</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-195.5 217,-207.5 292,-207.5 292,-195.5 217,-195.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"236.5\" y=\"-199.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_precip</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-183.5 217,-195.5 292,-195.5 292,-183.5 217,-183.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"239\" y=\"-187.3\" font-family=\"Times,serif\" font-size=\"9.00\">pk_temp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-171.5 217,-183.5 292,-183.5 292,-171.5 217,-171.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"245.5\" y=\"-175.3\" font-family=\"Times,serif\" font-size=\"9.00\">pksv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-159.5 217,-171.5 292,-171.5 292,-159.5 217,-159.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"230.5\" y=\"-163.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_ante</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-147.5 217,-159.5 292,-159.5 292,-147.5 217,-147.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"228\" y=\"-151.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_equiv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-135.5 217,-147.5 292,-147.5 292,-135.5 217,-135.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"227\" y=\"-139.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix_nopack</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-123.5 217,-135.5 292,-135.5 292,-123.5 217,-123.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"248\" y=\"-127.3\" font-family=\"Times,serif\" font-size=\"9.00\">pss</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-111.5 217,-123.5 292,-123.5 292,-111.5 217,-111.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"249\" y=\"-115.3\" font-family=\"Times,serif\" font-size=\"9.00\">pst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-99.5 217,-111.5 292,-111.5 292,-99.5 217,-99.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"247\" y=\"-103.3\" font-family=\"Times,serif\" font-size=\"9.00\">salb</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-87.5 217,-99.5 292,-99.5 292,-87.5 217,-87.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246.5\" y=\"-91.3\" font-family=\"Times,serif\" font-size=\"9.00\">scrv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-75.5 217,-87.5 292,-87.5 292,-75.5 217,-75.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"248\" y=\"-79.3\" font-family=\"Times,serif\" font-size=\"9.00\">slst</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-63.5 217,-75.5 292,-75.5 292,-63.5 217,-63.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"234\" y=\"-67.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_evap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-51.5 217,-63.5 292,-63.5 292,-51.5 217,-51.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"228.5\" y=\"-55.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_area</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-39.5 217,-51.5 292,-51.5 292,-39.5 217,-39.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"224.5\" y=\"-43.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_areasv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-27.5 217,-39.5 292,-39.5 292,-27.5 217,-27.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"237\" y=\"-31.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowmelt</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-15.5 217,-27.5 292,-27.5 292,-15.5 217,-15.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"246\" y=\"-19.3\" font-family=\"Times,serif\" font-size=\"9.00\">snsv</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"217,-3.5 217,-15.5 292,-15.5 292,-3.5 217,-3.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"248\" y=\"-7.3\" font-family=\"Times,serif\" font-size=\"9.00\">tcal</text>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge1\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:hru_ppt-&gt;PRMSSnow:hru_ppt</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-339.5C186.07,-339.5 118.56,-541.49 158,-577 180.13,-596.92 270.68,-597.79 292,-577 301.43,-567.81 307.16,-550.18 302.02,-541.95\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.52,-538.78 293,-537.5 300.42,-545.06 303.52,-538.78\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge2\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:orad_hru-&gt;PRMSSnow:orad_hru</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-303.5C194.03,-303.5 112.92,-535.86 158,-577 179.99,-597.07 270.82,-597.94 292,-577 316.96,-552.33 329.35,-500.94 302.96,-491.13\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.43,-487.66 293,-489.5 302.3,-494.57 303.43,-487.66\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge3\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSSnow:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-291.5C196.69,-291.5 111.04,-533.98 158,-577 179.96,-597.12 270.84,-597.95 292,-577 305.2,-563.93 312.53,-502.63 301.44,-483.33\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.22,-480.31 293,-477.5 299.24,-486.06 303.22,-480.31\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge4\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:pptmix-&gt;PRMSSnow:pptmix</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-279.5C166.17,-279.5 133.58,-554.55 158,-577 179.92,-597.16 270.85,-597.96 292,-577 307.06,-562.08 315.22,-491.09 301.75,-470.88\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.35,-467.76 293,-465.5 299.69,-473.72 303.35,-467.76\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge5\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:prmx-&gt;PRMSSnow:prmx</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-267.5C167.5,-267.5 132.64,-553.61 158,-577 179.89,-597.19 270.86,-597.97 292,-577 308.97,-560.16 317.96,-478.95 301.85,-458.29\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.46,-455.18 293,-453.5 300.13,-461.34 303.46,-455.18\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge6\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:swrad-&gt;PRMSSnow:swrad</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-255.5C168.83,-255.5 131.7,-552.67 158,-577 179.86,-597.22 270.87,-597.98 292,-577 312.71,-556.43 323.32,-455.5 302.24,-433.67\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.55,-430.42 293,-429.5 300.68,-436.8 303.55,-430.42\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge7\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tavgc-&gt;PRMSSnow:tavgc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-243.5C170.16,-243.5 130.76,-551.73 158,-577 179.83,-597.25 270.88,-597.99 292,-577 314.59,-554.55 326.01,-443.69 302.39,-421.41\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.58,-418.11 293,-417.5 300.89,-424.57 303.58,-418.11\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge8\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tmaxc-&gt;PRMSSnow:tmaxc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-231.5C171.49,-231.5 129.82,-550.78 158,-577 179.8,-597.28 270.88,-597.99 292,-577 316.49,-552.65 328.71,-431.58 302.42,-409.1\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"303.59,-405.8 293,-405.5 301.09,-412.34 303.59,-405.8\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge9\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:tminc-&gt;PRMSSnow:tminc</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-207.5C174.15,-207.5 127.94,-548.9 158,-577 179.76,-597.33 270.89,-598 292,-577 304.59,-564.48 311.48,-434.53 299.57,-401.24\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"302.14,-398.86 293,-393.5 296.8,-403.39 302.14,-398.86\"/>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSSnow -->\n",
+       "<g id=\"edge10\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:transp_on-&gt;PRMSSnow:transp_on</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-183.5C176.81,-183.5 126.05,-547.02 158,-577 179.71,-597.38 270.89,-598 292,-577 305.47,-563.59 312.77,-423.97 299.83,-389.27\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"302.23,-386.7 293,-381.5 296.97,-391.32 302.23,-386.7\"/>\n",
+       "</g>\n",
+       "<!-- PRMSRunoff -->\n",
+       "<g id=\"node3\" class=\"node\">\n",
+       "<title>PRMSRunoff</title>\n",
+       "<polygon fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"472,-535 318,-535 318,-531 314,-531 314,-527 318,-527 318,-50 314,-50 314,-46 318,-46 318,-42 472,-42 472,-535\"/>\n",
+       "<polyline fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"318,-531 322,-531 322,-527 318,-527 \"/>\n",
+       "<polyline fill=\"none\" stroke=\"#f0027f\" stroke-width=\"2\" points=\"318,-50 322,-50 322,-46 318,-46 \"/>\n",
+       "<text text-anchor=\"start\" x=\"357\" y=\"-518.3\" font-family=\"Times,serif\" font-size=\"14.00\">PRMSRunoff</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"326,-369.5 326,-513.5 377,-513.5 377,-369.5 326,-369.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"334.5\" y=\"-437.8\" font-family=\"Times,serif\" font-size=\"14.00\">inputs</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-501.5 377,-513.5 464,-513.5 464,-501.5 377,-501.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"395\" y=\"-505.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_intcpevap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-489.5 377,-501.5 464,-501.5 464,-489.5 377,-489.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"389\" y=\"-493.3\" font-family=\"Times,serif\" font-size=\"9.00\">intcp_changeover</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-477.5 377,-489.5 464,-489.5 464,-477.5 377,-477.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"407\" y=\"-481.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_ppt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-465.5 377,-477.5 464,-477.5 464,-465.5 377,-465.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"406\" y=\"-469.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_rain</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-453.5 377,-465.5 464,-465.5 464,-453.5 377,-453.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"403\" y=\"-457.3\" font-family=\"Times,serif\" font-size=\"9.00\">net_snow</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-441.5 377,-453.5 464,-453.5 464,-441.5 377,-441.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394\" y=\"-445.3\" font-family=\"Times,serif\" font-size=\"9.00\">pkwater_equiv</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-429.5 377,-441.5 464,-441.5 464,-429.5 377,-429.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"411.5\" y=\"-433.3\" font-family=\"Times,serif\" font-size=\"9.00\">potet</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-417.5 377,-429.5 464,-429.5 464,-417.5 377,-417.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393\" y=\"-421.3\" font-family=\"Times,serif\" font-size=\"9.00\">pptmix_nopack</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-405.5 377,-417.5 464,-417.5 464,-405.5 377,-405.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"400\" y=\"-409.3\" font-family=\"Times,serif\" font-size=\"9.00\">snow_evap</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-393.5 377,-405.5 464,-405.5 464,-393.5 377,-393.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394.5\" y=\"-397.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowcov_area</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-381.5 377,-393.5 464,-393.5 464,-381.5 377,-381.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"403\" y=\"-385.3\" font-family=\"Times,serif\" font-size=\"9.00\">snowmelt</text>\n",
+       "<polygon fill=\"lightblue\" stroke=\"transparent\" points=\"377,-369.5 377,-381.5 464,-381.5 464,-369.5 377,-369.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391.5\" y=\"-373.3\" font-family=\"Times,serif\" font-size=\"9.00\">soil_moist_prev</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"326,-45.5 326,-369.5 377,-369.5 377,-45.5 326,-45.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"327\" y=\"-203.8\" font-family=\"Times,serif\" font-size=\"14.00\">variables</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-357.5 377,-369.5 464,-369.5 464,-357.5 377,-357.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392\" y=\"-361.3\" font-family=\"Times,serif\" font-size=\"9.00\">contrib_fraction</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-345.5 377,-357.5 464,-357.5 464,-345.5 377,-345.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392.5\" y=\"-349.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_clos</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-333.5 377,-345.5 464,-345.5 464,-333.5 377,-333.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"382.5\" y=\"-337.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_clos_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-321.5 377,-333.5 464,-333.5 464,-321.5 377,-321.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391\" y=\"-325.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_open</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-309.5 377,-321.5 464,-321.5 464,-309.5 377,-309.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"381\" y=\"-313.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_area_open_max</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-297.5 377,-309.5 464,-309.5 464,-297.5 377,-297.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392.5\" y=\"-301.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_evap_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-285.5 377,-297.5 464,-297.5 464,-285.5 377,-285.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"388.5\" y=\"-289.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_insroff_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-273.5 377,-285.5 464,-285.5 464,-273.5 377,-273.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393\" y=\"-277.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_seep_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-261.5 377,-273.5 464,-273.5 464,-261.5 377,-261.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392\" y=\"-265.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_sroff_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-249.5 377,-261.5 464,-261.5 464,-249.5 377,-249.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394\" y=\"-253.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-237.5 377,-249.5 464,-249.5 464,-237.5 377,-237.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"379.5\" y=\"-241.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-225.5 377,-237.5 464,-237.5 464,-225.5 377,-225.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"386\" y=\"-229.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_stor_hru_old</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-213.5 377,-225.5 464,-225.5 464,-213.5 377,-213.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394\" y=\"-217.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_clos</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-201.5 377,-213.5 464,-213.5 464,-201.5 377,-201.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"385\" y=\"-205.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_clos_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-189.5 377,-201.5 464,-201.5 464,-189.5 377,-189.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"394.5\" y=\"-193.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-177.5 377,-189.5 464,-189.5 464,-177.5 377,-177.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"392.5\" y=\"-181.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_open</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-165.5 377,-177.5 464,-177.5 464,-165.5 377,-165.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"383.5\" y=\"-169.3\" font-family=\"Times,serif\" font-size=\"9.00\">dprst_vol_open_frac</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-153.5 377,-165.5 464,-165.5 464,-153.5 377,-153.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"391.5\" y=\"-157.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervevap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-141.5 377,-153.5 464,-153.5 464,-141.5 377,-141.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"393\" y=\"-145.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-129.5 377,-141.5 464,-141.5 464,-129.5 377,-129.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"378\" y=\"-133.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor_change</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-117.5 377,-129.5 464,-129.5 464,-117.5 377,-117.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"385\" y=\"-121.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_impervstor_old</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-105.5 377,-117.5 464,-117.5 464,-105.5 377,-105.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"402\" y=\"-109.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_sroffi</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-93.5 377,-105.5 464,-105.5 464,-93.5 377,-93.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"401\" y=\"-97.3\" font-family=\"Times,serif\" font-size=\"9.00\">hru_sroffp</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-81.5 377,-93.5 464,-93.5 464,-81.5 377,-81.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"397.5\" y=\"-85.3\" font-family=\"Times,serif\" font-size=\"9.00\">imperv_evap</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-69.5 377,-81.5 464,-81.5 464,-69.5 377,-69.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"399\" y=\"-73.3\" font-family=\"Times,serif\" font-size=\"9.00\">imperv_stor</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-57.5 377,-69.5 464,-69.5 464,-57.5 377,-57.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"413\" y=\"-61.3\" font-family=\"Times,serif\" font-size=\"9.00\">infil</text>\n",
+       "<polygon fill=\"lightgreen\" stroke=\"transparent\" points=\"377,-45.5 377,-57.5 464,-57.5 464,-45.5 377,-45.5\"/>\n",
+       "<text text-anchor=\"start\" x=\"411.5\" y=\"-49.3\" font-family=\"Times,serif\" font-size=\"9.00\">sroff</text>\n",
+       "</g>\n",
+       "<!-- PRMSBoundaryLayer&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge11\" class=\"edge\">\n",
+       "<title>PRMSBoundaryLayer:potet-&gt;PRMSRunoff:potet</title>\n",
+       "<path fill=\"none\" stroke=\"#fdc086\" d=\"M133,-291.5C148.89,-291.5 144.92,-561.65 149,-577 151.3,-585.64 150.39,-590.3 158,-595 216.76,-631.32 422.91,-591.26 463,-535 473.73,-519.94 483.37,-460.53 473.33,-441.44\"/>\n",
+       "<polygon fill=\"#fdc086\" stroke=\"#fdc086\" points=\"475.17,-438.46 465,-435.5 471.11,-444.16 475.17,-438.46\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge12\" class=\"edge\">\n",
+       "<title>PRMSSnow:snowmelt-&gt;PRMSRunoff:snowmelt</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M293,-33.5C348.79,-33.5 277.58,-496.54 318,-535 365.01,-579.73 417.96,-580.73 464,-535 484.71,-514.43 495.32,-413.5 474.24,-391.67\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"475.55,-388.42 465,-387.5 472.68,-394.8 475.55,-388.42\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge13\" class=\"edge\">\n",
+       "<title>PRMSSnow:snow_evap-&gt;PRMSRunoff:snow_evap</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M293,-69.5C344.8,-69.5 280.4,-499.37 318,-535 365.1,-579.64 417.93,-580.7 464,-535 480.97,-518.16 489.96,-436.95 473.85,-416.29\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"475.46,-413.18 465,-411.5 472.13,-419.34 475.46,-413.18\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge14\" class=\"edge\">\n",
+       "<title>PRMSSnow:pkwater_equiv-&gt;PRMSRunoff:pkwater_equiv</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M293,-153.5C335.48,-153.5 287,-505.96 318,-535 462.97,-670.78 488.63,-492.79 472.24,-454.48\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"474.63,-451.92 465,-447.5 469.77,-456.96 474.63,-451.92\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge15\" class=\"edge\">\n",
+       "<title>PRMSSnow:pptmix_nopack-&gt;PRMSRunoff:pptmix_nopack</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M293,-141.5C336.81,-141.5 286.05,-505.02 318,-535 365.32,-579.4 417.91,-580.68 464,-535 479.06,-520.08 487.22,-449.09 473.75,-428.88\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"475.35,-425.76 465,-423.5 471.69,-431.72 475.35,-425.76\"/>\n",
+       "</g>\n",
+       "<!-- PRMSSnow&#45;&gt;PRMSRunoff -->\n",
+       "<g id=\"edge16\" class=\"edge\">\n",
+       "<title>PRMSSnow:snowcov_area-&gt;PRMSRunoff:snowcov_area</title>\n",
+       "<path fill=\"none\" stroke=\"#beaed4\" d=\"M293,-57.5C346.13,-57.5 279.46,-498.43 318,-535 365.07,-579.67 417.95,-580.71 464,-535 482.78,-516.36 492.58,-425.81 474.24,-404.16\"/>\n",
+       "<polygon fill=\"#beaed4\" stroke=\"#beaed4\" points=\"475.5,-400.88 465,-399.5 472.35,-407.13 475.5,-400.88\"/>\n",
+       "</g>\n",
+       "</g>\n",
+       "</svg>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.SVG object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "model_2_graph.SVG()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "39aa9270-608e-4b8f-b549-e339aab8fd46",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'PRMSBoundaryLayer': <pydot.Node at 0x11c179360>,\n",
+       " 'PRMSSnow': <pydot.Node at 0x1175e6a70>,\n",
+       " 'PRMSRunoff': <pydot.Node at 0x11b836920>}"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "model_2_graph.component_nodes"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "1d59b642-b76d-4a36-bbb0-754b020f5e4f",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "PRMSRunoff [color=\"#f0027f\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSRunoff</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"13\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_intcpevap\"><FONT POINT-SIZE=\"9.0\">hru_intcpevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"intcp_changeover\"><FONT POINT-SIZE=\"9.0\">intcp_changeover</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_ppt\"><FONT POINT-SIZE=\"9.0\">net_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_rain\"><FONT POINT-SIZE=\"9.0\">net_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_snow\"><FONT POINT-SIZE=\"9.0\">net_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pkwater_equiv\"><FONT POINT-SIZE=\"9.0\">pkwater_equiv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pptmix_nopack\"><FONT POINT-SIZE=\"9.0\">pptmix_nopack</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snow_evap\"><FONT POINT-SIZE=\"9.0\">snow_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowcov_area\"><FONT POINT-SIZE=\"9.0\">snowcov_area</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowmelt\"><FONT POINT-SIZE=\"9.0\">snowmelt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"soil_moist_prev\"><FONT POINT-SIZE=\"9.0\">soil_moist_prev</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"28\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"contrib_fraction\"><FONT POINT-SIZE=\"9.0\">contrib_fraction</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open\"><FONT POINT-SIZE=\"9.0\">dprst_area_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_open_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_evap_hru\"><FONT POINT-SIZE=\"9.0\">dprst_evap_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_insroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_insroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_seep_hru\"><FONT POINT-SIZE=\"9.0\">dprst_seep_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_sroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_sroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_change\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_old\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervevap\"><FONT POINT-SIZE=\"9.0\">hru_impervevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor\"><FONT POINT-SIZE=\"9.0\">hru_impervstor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_change\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_old\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffi\"><FONT POINT-SIZE=\"9.0\">hru_sroffi</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffp\"><FONT POINT-SIZE=\"9.0\">hru_sroffp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_evap\"><FONT POINT-SIZE=\"9.0\">imperv_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_stor\"><FONT POINT-SIZE=\"9.0\">imperv_stor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"infil\"><FONT POINT-SIZE=\"9.0\">infil</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"sroff\"><FONT POINT-SIZE=\"9.0\">sroff</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(model_2_graph.component_nodes['PRMSRunoff'])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "9c66eaf1-e94a-484d-931b-40d8c564b729",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "digraph G {\n",
+      "engine=neato;\n",
+      "PRMSBoundaryLayer [color=\"#fdc086\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSBoundaryLayer</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"4\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"prcp\"><FONT POINT-SIZE=\"9.0\">prcp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmax\"><FONT POINT-SIZE=\"9.0\">tmax</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmin\"><FONT POINT-SIZE=\"9.0\">tmin</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"15\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_ppt\"><FONT POINT-SIZE=\"9.0\">hru_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_rain\"><FONT POINT-SIZE=\"9.0\">hru_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_snow\"><FONT POINT-SIZE=\"9.0\">hru_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"orad_hru\"><FONT POINT-SIZE=\"9.0\">orad_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pptmix\"><FONT POINT-SIZE=\"9.0\">pptmix</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"prmx\"><FONT POINT-SIZE=\"9.0\">prmx</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"swrad\"><FONT POINT-SIZE=\"9.0\">swrad</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tavgc\"><FONT POINT-SIZE=\"9.0\">tavgc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tmaxc\"><FONT POINT-SIZE=\"9.0\">tmaxc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tmaxf\"><FONT POINT-SIZE=\"9.0\">tmaxf</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tminc\"><FONT POINT-SIZE=\"9.0\">tminc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tminf\"><FONT POINT-SIZE=\"9.0\">tminf</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"transp_on\"><FONT POINT-SIZE=\"9.0\">transp_on</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "PRMSSnow [color=\"#beaed4\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSSnow</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"16\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_intcpevap\"><FONT POINT-SIZE=\"9.0\">hru_intcpevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_ppt\"><FONT POINT-SIZE=\"9.0\">hru_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_ppt\"><FONT POINT-SIZE=\"9.0\">net_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_rain\"><FONT POINT-SIZE=\"9.0\">net_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_snow\"><FONT POINT-SIZE=\"9.0\">net_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"orad_hru\"><FONT POINT-SIZE=\"9.0\">orad_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pptmix\"><FONT POINT-SIZE=\"9.0\">pptmix</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"prmx\"><FONT POINT-SIZE=\"9.0\">prmx</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"soltab_horad_potsw\"><FONT POINT-SIZE=\"9.0\">soltab_horad_potsw</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"swrad\"><FONT POINT-SIZE=\"9.0\">swrad</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tavgc\"><FONT POINT-SIZE=\"9.0\">tavgc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmaxc\"><FONT POINT-SIZE=\"9.0\">tmaxc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tminc\"><FONT POINT-SIZE=\"9.0\">tminc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"transp_on\"><FONT POINT-SIZE=\"9.0\">transp_on</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"32\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"ai\"><FONT POINT-SIZE=\"9.0\">ai</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"albedo\"><FONT POINT-SIZE=\"9.0\">albedo</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"frac_swe\"><FONT POINT-SIZE=\"9.0\">frac_swe</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"freeh2o\"><FONT POINT-SIZE=\"9.0\">freeh2o</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"iasw\"><FONT POINT-SIZE=\"9.0\">iasw</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"int_alb\"><FONT POINT-SIZE=\"9.0\">int_alb</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"iso\"><FONT POINT-SIZE=\"9.0\">iso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"lso\"><FONT POINT-SIZE=\"9.0\">lso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"lst\"><FONT POINT-SIZE=\"9.0\">lst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"mso\"><FONT POINT-SIZE=\"9.0\">mso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_def\"><FONT POINT-SIZE=\"9.0\">pk_def</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_den\"><FONT POINT-SIZE=\"9.0\">pk_den</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_depth\"><FONT POINT-SIZE=\"9.0\">pk_depth</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_ice\"><FONT POINT-SIZE=\"9.0\">pk_ice</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_precip\"><FONT POINT-SIZE=\"9.0\">pk_precip</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_temp\"><FONT POINT-SIZE=\"9.0\">pk_temp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pksv\"><FONT POINT-SIZE=\"9.0\">pksv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pkwater_ante\"><FONT POINT-SIZE=\"9.0\">pkwater_ante</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pkwater_equiv\"><FONT POINT-SIZE=\"9.0\">pkwater_equiv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pptmix_nopack\"><FONT POINT-SIZE=\"9.0\">pptmix_nopack</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pss\"><FONT POINT-SIZE=\"9.0\">pss</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pst\"><FONT POINT-SIZE=\"9.0\">pst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"salb\"><FONT POINT-SIZE=\"9.0\">salb</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"scrv\"><FONT POINT-SIZE=\"9.0\">scrv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"slst\"><FONT POINT-SIZE=\"9.0\">slst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snow_evap\"><FONT POINT-SIZE=\"9.0\">snow_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowcov_area\"><FONT POINT-SIZE=\"9.0\">snowcov_area</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowcov_areasv\"><FONT POINT-SIZE=\"9.0\">snowcov_areasv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowmelt\"><FONT POINT-SIZE=\"9.0\">snowmelt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snsv\"><FONT POINT-SIZE=\"9.0\">snsv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tcal\"><FONT POINT-SIZE=\"9.0\">tcal</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "PRMSRunoff [color=\"#f0027f\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSRunoff</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"13\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_intcpevap\"><FONT POINT-SIZE=\"9.0\">hru_intcpevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"intcp_changeover\"><FONT POINT-SIZE=\"9.0\">intcp_changeover</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_ppt\"><FONT POINT-SIZE=\"9.0\">net_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_rain\"><FONT POINT-SIZE=\"9.0\">net_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_snow\"><FONT POINT-SIZE=\"9.0\">net_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pkwater_equiv\"><FONT POINT-SIZE=\"9.0\">pkwater_equiv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pptmix_nopack\"><FONT POINT-SIZE=\"9.0\">pptmix_nopack</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snow_evap\"><FONT POINT-SIZE=\"9.0\">snow_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowcov_area\"><FONT POINT-SIZE=\"9.0\">snowcov_area</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowmelt\"><FONT POINT-SIZE=\"9.0\">snowmelt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"soil_moist_prev\"><FONT POINT-SIZE=\"9.0\">soil_moist_prev</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"28\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"contrib_fraction\"><FONT POINT-SIZE=\"9.0\">contrib_fraction</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open\"><FONT POINT-SIZE=\"9.0\">dprst_area_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_open_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_evap_hru\"><FONT POINT-SIZE=\"9.0\">dprst_evap_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_insroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_insroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_seep_hru\"><FONT POINT-SIZE=\"9.0\">dprst_seep_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_sroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_sroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_change\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_old\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervevap\"><FONT POINT-SIZE=\"9.0\">hru_impervevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor\"><FONT POINT-SIZE=\"9.0\">hru_impervstor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_change\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_old\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffi\"><FONT POINT-SIZE=\"9.0\">hru_sroffi</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffp\"><FONT POINT-SIZE=\"9.0\">hru_sroffp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_evap\"><FONT POINT-SIZE=\"9.0\">imperv_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_stor\"><FONT POINT-SIZE=\"9.0\">imperv_stor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"infil\"><FONT POINT-SIZE=\"9.0\">infil</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"sroff\"><FONT POINT-SIZE=\"9.0\">sroff</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "subgraph  {\n",
+      "name=0;\n",
+      "rank=source;\n",
+      "PRMSBoundaryLayer [color=\"#fdc086\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSBoundaryLayer</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"4\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"prcp\"><FONT POINT-SIZE=\"9.0\">prcp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmax\"><FONT POINT-SIZE=\"9.0\">tmax</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmin\"><FONT POINT-SIZE=\"9.0\">tmin</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"15\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_ppt\"><FONT POINT-SIZE=\"9.0\">hru_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_rain\"><FONT POINT-SIZE=\"9.0\">hru_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_snow\"><FONT POINT-SIZE=\"9.0\">hru_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"orad_hru\"><FONT POINT-SIZE=\"9.0\">orad_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pptmix\"><FONT POINT-SIZE=\"9.0\">pptmix</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"prmx\"><FONT POINT-SIZE=\"9.0\">prmx</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"swrad\"><FONT POINT-SIZE=\"9.0\">swrad</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tavgc\"><FONT POINT-SIZE=\"9.0\">tavgc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tmaxc\"><FONT POINT-SIZE=\"9.0\">tmaxc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tmaxf\"><FONT POINT-SIZE=\"9.0\">tmaxf</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tminc\"><FONT POINT-SIZE=\"9.0\">tminc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tminf\"><FONT POINT-SIZE=\"9.0\">tminf</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"transp_on\"><FONT POINT-SIZE=\"9.0\">transp_on</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "}\n",
+      "\n",
+      "subgraph  {\n",
+      "name=1;\n",
+      "rank=source;\n",
+      "PRMSSnow [color=\"#beaed4\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSSnow</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"16\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_intcpevap\"><FONT POINT-SIZE=\"9.0\">hru_intcpevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_ppt\"><FONT POINT-SIZE=\"9.0\">hru_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_ppt\"><FONT POINT-SIZE=\"9.0\">net_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_rain\"><FONT POINT-SIZE=\"9.0\">net_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_snow\"><FONT POINT-SIZE=\"9.0\">net_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"orad_hru\"><FONT POINT-SIZE=\"9.0\">orad_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pptmix\"><FONT POINT-SIZE=\"9.0\">pptmix</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"prmx\"><FONT POINT-SIZE=\"9.0\">prmx</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"soltab_horad_potsw\"><FONT POINT-SIZE=\"9.0\">soltab_horad_potsw</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"swrad\"><FONT POINT-SIZE=\"9.0\">swrad</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tavgc\"><FONT POINT-SIZE=\"9.0\">tavgc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tmaxc\"><FONT POINT-SIZE=\"9.0\">tmaxc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"tminc\"><FONT POINT-SIZE=\"9.0\">tminc</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"transp_on\"><FONT POINT-SIZE=\"9.0\">transp_on</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"32\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"ai\"><FONT POINT-SIZE=\"9.0\">ai</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"albedo\"><FONT POINT-SIZE=\"9.0\">albedo</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"frac_swe\"><FONT POINT-SIZE=\"9.0\">frac_swe</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"freeh2o\"><FONT POINT-SIZE=\"9.0\">freeh2o</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"iasw\"><FONT POINT-SIZE=\"9.0\">iasw</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"int_alb\"><FONT POINT-SIZE=\"9.0\">int_alb</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"iso\"><FONT POINT-SIZE=\"9.0\">iso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"lso\"><FONT POINT-SIZE=\"9.0\">lso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"lst\"><FONT POINT-SIZE=\"9.0\">lst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"mso\"><FONT POINT-SIZE=\"9.0\">mso</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_def\"><FONT POINT-SIZE=\"9.0\">pk_def</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_den\"><FONT POINT-SIZE=\"9.0\">pk_den</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_depth\"><FONT POINT-SIZE=\"9.0\">pk_depth</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_ice\"><FONT POINT-SIZE=\"9.0\">pk_ice</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_precip\"><FONT POINT-SIZE=\"9.0\">pk_precip</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pk_temp\"><FONT POINT-SIZE=\"9.0\">pk_temp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pksv\"><FONT POINT-SIZE=\"9.0\">pksv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pkwater_ante\"><FONT POINT-SIZE=\"9.0\">pkwater_ante</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pkwater_equiv\"><FONT POINT-SIZE=\"9.0\">pkwater_equiv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pptmix_nopack\"><FONT POINT-SIZE=\"9.0\">pptmix_nopack</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pss\"><FONT POINT-SIZE=\"9.0\">pss</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"pst\"><FONT POINT-SIZE=\"9.0\">pst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"salb\"><FONT POINT-SIZE=\"9.0\">salb</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"scrv\"><FONT POINT-SIZE=\"9.0\">scrv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"slst\"><FONT POINT-SIZE=\"9.0\">slst</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snow_evap\"><FONT POINT-SIZE=\"9.0\">snow_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowcov_area\"><FONT POINT-SIZE=\"9.0\">snowcov_area</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowcov_areasv\"><FONT POINT-SIZE=\"9.0\">snowcov_areasv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snowmelt\"><FONT POINT-SIZE=\"9.0\">snowmelt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"snsv\"><FONT POINT-SIZE=\"9.0\">snsv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"tcal\"><FONT POINT-SIZE=\"9.0\">tcal</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "}\n",
+      "\n",
+      "subgraph  {\n",
+      "name=2;\n",
+      "rank=source;\n",
+      "PRMSRunoff [color=\"#f0027f\", label=<<TABLE BORDER=\"0\" CELLBORDER=\".5\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n",
+      "    <TR><TD COLSPAN=\"6\">PRMSRunoff</TD></TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"13\"         BGCOLOR=\"lightblue\">inputs</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"hru_intcpevap\"><FONT POINT-SIZE=\"9.0\">hru_intcpevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"intcp_changeover\"><FONT POINT-SIZE=\"9.0\">intcp_changeover</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_ppt\"><FONT POINT-SIZE=\"9.0\">net_ppt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_rain\"><FONT POINT-SIZE=\"9.0\">net_rain</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"net_snow\"><FONT POINT-SIZE=\"9.0\">net_snow</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pkwater_equiv\"><FONT POINT-SIZE=\"9.0\">pkwater_equiv</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"potet\"><FONT POINT-SIZE=\"9.0\">potet</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"pptmix_nopack\"><FONT POINT-SIZE=\"9.0\">pptmix_nopack</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snow_evap\"><FONT POINT-SIZE=\"9.0\">snow_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowcov_area\"><FONT POINT-SIZE=\"9.0\">snowcov_area</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"snowmelt\"><FONT POINT-SIZE=\"9.0\">snowmelt</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightblue\" PORT=\"soil_moist_prev\"><FONT POINT-SIZE=\"9.0\">soil_moist_prev</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"2\" ROWSPAN=\"28\"         BGCOLOR=\"lightgreen\">variables</TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"contrib_fraction\"><FONT POINT-SIZE=\"9.0\">contrib_fraction</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_clos_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_clos_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open\"><FONT POINT-SIZE=\"9.0\">dprst_area_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_area_open_max\"><FONT POINT-SIZE=\"9.0\">dprst_area_open_max</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_evap_hru\"><FONT POINT-SIZE=\"9.0\">dprst_evap_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_insroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_insroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_seep_hru\"><FONT POINT-SIZE=\"9.0\">dprst_seep_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_sroff_hru\"><FONT POINT-SIZE=\"9.0\">dprst_sroff_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_change\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_stor_hru_old\"><FONT POINT-SIZE=\"9.0\">dprst_stor_hru_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_clos_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_clos_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"dprst_vol_open_frac\"><FONT POINT-SIZE=\"9.0\">dprst_vol_open_frac</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervevap\"><FONT POINT-SIZE=\"9.0\">hru_impervevap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor\"><FONT POINT-SIZE=\"9.0\">hru_impervstor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_change\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_change</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_impervstor_old\"><FONT POINT-SIZE=\"9.0\">hru_impervstor_old</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffi\"><FONT POINT-SIZE=\"9.0\">hru_sroffi</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"hru_sroffp\"><FONT POINT-SIZE=\"9.0\">hru_sroffp</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_evap\"><FONT POINT-SIZE=\"9.0\">imperv_evap</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"imperv_stor\"><FONT POINT-SIZE=\"9.0\">imperv_stor</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"infil\"><FONT POINT-SIZE=\"9.0\">infil</FONT></TD>\n",
+      "    </TR>\n",
+      "    <TR>\n",
+      "        <TD COLSPAN=\"4\"  BGCOLOR=\"lightgreen\" PORT=\"sroff\"><FONT POINT-SIZE=\"9.0\">sroff</FONT></TD>\n",
+      "    </TR>\n",
+      "</TABLE>>, penwidth=2, shape=component];\n",
+      "}\n",
+      "\n",
+      "PRMSBoundaryLayer:hru_ppt -> PRMSSnow:hru_ppt  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:orad_hru -> PRMSSnow:orad_hru  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:potet -> PRMSSnow:potet  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:pptmix -> PRMSSnow:pptmix  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:prmx -> PRMSSnow:prmx  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:swrad -> PRMSSnow:swrad  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:tavgc -> PRMSSnow:tavgc  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:tmaxc -> PRMSSnow:tmaxc  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:tminc -> PRMSSnow:tminc  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:transp_on -> PRMSSnow:transp_on  [color=\"#fdc086\"];\n",
+      "PRMSBoundaryLayer:potet -> PRMSRunoff:potet  [color=\"#fdc086\"];\n",
+      "PRMSSnow:snowmelt -> PRMSRunoff:snowmelt  [color=\"#beaed4\"];\n",
+      "PRMSSnow:snow_evap -> PRMSRunoff:snow_evap  [color=\"#beaed4\"];\n",
+      "PRMSSnow:pkwater_equiv -> PRMSRunoff:pkwater_equiv  [color=\"#beaed4\"];\n",
+      "PRMSSnow:pptmix_nopack -> PRMSRunoff:pptmix_nopack  [color=\"#beaed4\"];\n",
+      "PRMSSnow:snowcov_area -> PRMSRunoff:snowcov_area  [color=\"#beaed4\"];\n",
+      "}\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(model_2_graph.graph)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7ef0560e-4af1-4f33-ae66-b012570c3a92",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "pynhm_doc",
+   "language": "python",
+   "name": "pynhm_doc"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/pynhm/__init__.py b/pynhm/__init__.py
index 6a6f12a3..fcdca965 100644
--- a/pynhm/__init__.py
+++ b/pynhm/__init__.py
@@ -1,10 +1,23 @@
+from pynhm.analysis.model_graph import ModelGraph
+from pynhm.analysis.utils.colorbrewer import ColorBrewer
+from pynhm.atmosphere.PRMSAtmosphere import PRMSAtmosphere
+from pynhm.atmosphere.PRMSSolarGeometry import PRMSSolarGeometry
+from pynhm.base import meta
+from pynhm.base.accessor import Accessor
+from pynhm.base.adapter import Adapter
+from pynhm.base.budget import Budget
+from pynhm.base.control import Control
+from pynhm.base.model import Model
+from pynhm.base.storageUnit import StorageUnit
+from pynhm.base.timeseries import TimeseriesArray
 from pynhm.hydrology.PRMSCanopy import PRMSCanopy
 from pynhm.hydrology.PRMSChannel import PRMSChannel
 from pynhm.hydrology.PRMSEt import PRMSEt
 from pynhm.hydrology.PRMSGroundwater import PRMSGroundwater
+from pynhm.hydrology.PRMSRunoff import PRMSRunoff
+from pynhm.hydrology.PRMSSnow import PRMSSnow
+from pynhm.hydrology.PRMSSoilzone import PRMSSoilzone
 
-from .base.accessor import Accessor
-from .base.control import Control
 from .utils import (
     ControlVariables,
     NetCdfCompare,
@@ -17,10 +30,9 @@
 from .version import __author__, __author_email__, __version__
 
 __all__ = [
+    "analysis",
     "atmosphere",
     "base",
     "hydrology",
-    "preprocess",
     "utils",
-    "driver",
 ]
diff --git a/pynhm/analysis/__init__.py b/pynhm/analysis/__init__.py
new file mode 100644
index 00000000..ed20d99a
--- /dev/null
+++ b/pynhm/analysis/__init__.py
@@ -0,0 +1,1 @@
+from .model_graph import ModelGraph
diff --git a/pynhm/analysis/model_graph.py b/pynhm/analysis/model_graph.py
new file mode 100644
index 00000000..9f507581
--- /dev/null
+++ b/pynhm/analysis/model_graph.py
@@ -0,0 +1,234 @@
+import pathlib as pl
+import tempfile
+import warnings
+
+from ..base.model import Model
+
+try:
+    import pydot
+
+    has_pydot = True
+except ModuleNotFoundError:
+    has_pydot = False
+
+try:
+    from IPython.display import SVG, display
+
+    has_ipython = True
+except ModuleNotFoundError:
+    has_ipython = False
+
+
+class ModelGraph:
+    def __init__(
+        self,
+        model: Model,
+        show_params: bool = False,
+        process_colors: dict = None,
+        node_penwidth: int = 2,
+        default_edge_color: str = "gray50",
+        from_file_edge_color: str = None,
+        node_spacing: float = 2.75,
+        hide_variables: bool = True,
+    ):
+        if not has_pydot:
+            warnings.warn("pydot not available")
+
+        self.model = model
+        self.show_params = show_params
+        self.process_colors = process_colors
+        self.node_penwidth = node_penwidth
+        self.default_edge_color = default_edge_color
+        if not from_file_edge_color:
+            self.from_file_edge_color = default_edge_color
+        else:
+            self.from_file_edge_color = from_file_edge_color
+        self.node_spacing = node_spacing
+        self.hide_variables = hide_variables
+
+        self.graph = None
+
+        return
+
+    def build_graph(self):
+        # Build the process nodes in the graph
+        self._current_pos = self.node_spacing
+        self.process_nodes = {}
+        for process in self.model.process_order:
+            self.process_nodes[process] = self._process_node(
+                self.model.processes[process], show_params=self.show_params
+            )
+
+        # Solve the connections
+        files = []
+        connections = []
+        for process in self.model.process_order:
+
+            frm_already = []
+            for var, frm in self.model.process_input_from[process].items():
+
+                var_con = f":{var}"
+                if self.hide_variables:
+                    var_con = ""
+                    if frm in frm_already:
+                        # print(f"skipping: {frm}")
+                        continue
+                    else:
+                        frm_already += [frm]
+                        # print(frm_already)
+
+                if not isinstance(frm, pl.Path):
+                    color = self.default_edge_color
+                    if self.process_colors:
+                        color = self.process_colors[frm]
+                    connections += [
+                        (f"{frm}{var_con}", f"{process}{var_con}", color)
+                    ]
+                else:
+                    file_name = frm.name
+                    files += [file_name]
+                    connections += [
+                        (
+                            f"Files:{file_name.split('.')[0]}",
+                            f"{process}{var_con}",
+                            self.from_file_edge_color,
+                        )
+                    ]
+
+        # Build the file node, reset the position
+        self._current_pos = 0
+        self.file_node = self._file_node(files)
+
+        # build the graph
+        self.graph = pydot.Dot(
+            graph_type="digraph",
+            layout="neato",
+            splines="polyline",
+        )
+
+        self.graph.add_node(self.file_node)
+
+        for process in self.model.process_order:
+            self.graph.add_node(self.process_nodes[process])
+
+        for con in connections:
+            self.graph.add_edge(pydot.Edge(con[0], con[1], color=con[2]))
+
+        return
+
+    def SVG(self, verbose: bool = False):
+        """Display an SVG in jupyter notebook (via tempfile)."""
+
+        if not has_ipython:
+            warnings.warn("IPython is not available")
+        tmp_file = pl.Path(tempfile.NamedTemporaryFile().name)
+        if self.graph is None:
+            self.build_graph()
+        self.graph.write_svg(tmp_file)
+        if verbose:
+            print(f"Displaying SVG written to temp file: {tmp_file}")
+
+        display(SVG(tmp_file))
+        return
+
+    def _process_node(self, process, show_params: bool = False):
+        inputs = process.get_inputs()
+        variables = process.get_variables()
+        params = process.get_parameters()
+        cls = process.__class__.__name__
+
+        label = (
+            f'<<TABLE BORDER="0" CELLBORDER=".5" CELLSPACING="0" CELLPADDING="1">\n'
+            f'    <TR><TD COLSPAN="6">{cls}</TD></TR>\n'
+        )
+
+        category_colors = {
+            "inputs": "lightblue",
+            "params": "orange",
+            "variables": "lightgreen",
+        }
+
+        show_categories = {
+            "inputs": inputs,
+            "params": params,
+            "variables": variables,
+        }
+        if not show_params:
+            _ = show_categories.pop("params")
+
+        mass_budget_vars = [
+            var
+            for comp, vars in process.get_mass_budget_terms().items()
+            for var in vars
+        ]
+
+        for varset_name, varset in show_categories.items():
+
+            n_vars = len(varset)
+            if not n_vars:
+                continue
+
+            varset_col_span = 2
+            if self.hide_variables:
+                varset = []
+                n_vars = 0
+                varset_col_span = 6
+
+            label += f"    <TR>\n"
+            label += (
+                f'        <TD COLSPAN="{varset_col_span}" ROWSPAN="{n_vars+1}"'
+            )
+            label += f'         BGCOLOR="{category_colors[varset_name]}">{varset_name}</TD>\n'
+            label += f"    </TR>\n"
+
+            for ii, vv in enumerate(sorted(varset)):
+                border_color_str = ""
+                if vv in mass_budget_vars:
+                    border_color_str = 'border="1" COLOR="BLUE"'
+                label += f"    <TR>\n"
+                label += f'        <TD COLSPAN="4" BGCOLOR="{category_colors[varset_name]}" {border_color_str} PORT="{vv}" ><FONT POINT-SIZE="9.0">{vv}</FONT></TD>\n'
+                label += f"    </TR>\n"
+
+        label += f"</TABLE>>\n"
+        label = label
+
+        color_str = ""
+        if self.process_colors:
+            color_str = f'"{self.process_colors[cls]}"'
+
+        node = pydot.Node(
+            cls,
+            label=label,
+            pos=f'"{self._current_pos},0!"',
+            shape="process",
+            color=color_str,
+            penwidth=f'"{self.node_penwidth}"',
+        )
+        self._current_pos += self.node_spacing
+
+        return node
+
+    def _file_node(self, files):
+        files = list(set(files))
+        label = (
+            f'<<TABLE BORDER="0" CELLBORDER=".5" CELLSPACING="0" CELLPADDING="1">\n'
+            f'    <TR><TD COLSPAN="1">Files</TD></TR>\n'
+        )
+
+        for file in files:
+            label += f"    <TR>\n"
+            label += f'        <TD COLSPAN="1"  BGCOLOR="gray50" PORT="{file.split(".")[0]}"><FONT POINT-SIZE="9.0">{file}</FONT></TD>\n'
+            label += f"    </TR>\n"
+
+        label += f"</TABLE>>\n"
+        label = label
+        node = pydot.Node(
+            "Files",
+            label=label,
+            pos=f'"{self._current_pos},0!"',
+            shape="note",
+            color=f'"{self.from_file_edge_color}"',
+            penwidth=f'"{self.node_penwidth}"',
+        )
+        self._current_pos += self.node_spacing
+        return node
diff --git a/pynhm/analysis/utils/__init__.py b/pynhm/analysis/utils/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/pynhm/analysis/utils/colorbrewer.py b/pynhm/analysis/utils/colorbrewer.py
new file mode 100644
index 00000000..ef0a2d9d
--- /dev/null
+++ b/pynhm/analysis/utils/colorbrewer.py
@@ -0,0 +1,2374 @@
+# Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State
+# University.
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+# See the ColorBrewer updates
+# http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html
+# for updates to copyright information.
+
+# Translation to Python by David Schoonover and released under the MIT license.
+
+from typing import Union
+
+from ...base.model import Model
+
+
+class ColorBrewer:
+    def __init__(self):
+        self.format = "hex"
+        self._possible_formats = ["hex", "rgb"]
+        self.palettes_by_cat = palettes_by_cat
+        for cat in ColorBrewer.category_list():
+            setattr(self, cat, self.palettes_by_cat[cat])
+        return
+
+    @staticmethod
+    def category_list():
+        return list(palette_names_by_cat.keys())
+
+    @staticmethod
+    def palette_dict():
+        return palette_names_by_cat
+
+    @staticmethod
+    def get_palette(name):
+        for cat in ColorBrewer.category_list():
+            if name in palettes_by_cat[cat].keys():
+
+                def pal(n_levels: int = None, rgb: bool = False):
+                    pal_name = name
+                    pal = palettes_by_cat[cat][name]
+                    if not n_levels:
+                        print(
+                            f"For palette {pal_name}, supply number of "
+                            f"levels in {list(pal.keys())}"
+                        )
+                        return None
+                    if rgb:
+                        return pal[n_levels]
+                    else:
+                        return ColorBrewer._to_hex(pal[n_levels])
+
+                return pal
+
+    def set_format(self, format: str):
+        if format not in self._possible_formats:
+            raise ValueError(
+                f"{format} not in possible formats: {self._possible_formats}"
+            )
+        self.format = format
+        return
+
+    @staticmethod
+    def jupyter_palette(palette: Union[list, dict]):
+        from IPython.display import Markdown, display
+
+        if isinstance(palette, list):
+            display(
+                Markdown(
+                    "<br>".join(
+                        f'<span style="font-family: monospace">{color} <span style="color: {color}">████████</span></span>'
+                        for color in palette
+                    )
+                )
+            )
+        else:
+            display(
+                Markdown(
+                    "<br>".join(
+                        f'<span style="font-family: monospace">{key} <span style="color: {color}">████████</span></span>'
+                        for key, color in palette.items()
+                    )
+                )
+            )
+
+        return
+
+    @staticmethod
+    def _to_hex(rgb_palette):
+        return ["#%02x%02x%02x" % rgb_tuple for rgb_tuple in rgb_palette]
+
+
+YlGn = {
+    3: [(247, 252, 185), (173, 221, 142), (49, 163, 84)],
+    4: [
+        (255, 255, 204),
+        (194, 230, 153),
+        (120, 198, 121),
+        (35, 132, 67),
+    ],
+    5: [
+        (255, 255, 204),
+        (194, 230, 153),
+        (120, 198, 121),
+        (49, 163, 84),
+        (0, 104, 55),
+    ],
+    6: [
+        (255, 255, 204),
+        (217, 240, 163),
+        (173, 221, 142),
+        (120, 198, 121),
+        (49, 163, 84),
+        (0, 104, 55),
+    ],
+    7: [
+        (255, 255, 204),
+        (217, 240, 163),
+        (173, 221, 142),
+        (120, 198, 121),
+        (65, 171, 93),
+        (35, 132, 67),
+        (0, 90, 50),
+    ],
+    8: [
+        (255, 255, 229),
+        (247, 252, 185),
+        (217, 240, 163),
+        (173, 221, 142),
+        (120, 198, 121),
+        (65, 171, 93),
+        (35, 132, 67),
+        (0, 90, 50),
+    ],
+    9: [
+        (255, 255, 229),
+        (247, 252, 185),
+        (217, 240, 163),
+        (173, 221, 142),
+        (120, 198, 121),
+        (65, 171, 93),
+        (35, 132, 67),
+        (0, 104, 55),
+        (0, 69, 41),
+    ],
+}
+
+YlGnBu = {
+    3: [(237, 248, 177), (127, 205, 187), (44, 127, 184)],
+    4: [
+        (255, 255, 204),
+        (161, 218, 180),
+        (65, 182, 196),
+        (34, 94, 168),
+    ],
+    5: [
+        (255, 255, 204),
+        (161, 218, 180),
+        (65, 182, 196),
+        (44, 127, 184),
+        (37, 52, 148),
+    ],
+    6: [
+        (255, 255, 204),
+        (199, 233, 180),
+        (127, 205, 187),
+        (65, 182, 196),
+        (44, 127, 184),
+        (37, 52, 148),
+    ],
+    7: [
+        (255, 255, 204),
+        (199, 233, 180),
+        (127, 205, 187),
+        (65, 182, 196),
+        (29, 145, 192),
+        (34, 94, 168),
+        (12, 44, 132),
+    ],
+    8: [
+        (255, 255, 217),
+        (237, 248, 177),
+        (199, 233, 180),
+        (127, 205, 187),
+        (65, 182, 196),
+        (29, 145, 192),
+        (34, 94, 168),
+        (12, 44, 132),
+    ],
+    9: [
+        (255, 255, 217),
+        (237, 248, 177),
+        (199, 233, 180),
+        (127, 205, 187),
+        (65, 182, 196),
+        (29, 145, 192),
+        (34, 94, 168),
+        (37, 52, 148),
+        (8, 29, 88),
+    ],
+}
+
+GnBu = {
+    3: [(224, 243, 219), (168, 221, 181), (67, 162, 202)],
+    4: [
+        (240, 249, 232),
+        (186, 228, 188),
+        (123, 204, 196),
+        (43, 140, 190),
+    ],
+    5: [
+        (240, 249, 232),
+        (186, 228, 188),
+        (123, 204, 196),
+        (67, 162, 202),
+        (8, 104, 172),
+    ],
+    6: [
+        (240, 249, 232),
+        (204, 235, 197),
+        (168, 221, 181),
+        (123, 204, 196),
+        (67, 162, 202),
+        (8, 104, 172),
+    ],
+    7: [
+        (240, 249, 232),
+        (204, 235, 197),
+        (168, 221, 181),
+        (123, 204, 196),
+        (78, 179, 211),
+        (43, 140, 190),
+        (8, 88, 158),
+    ],
+    8: [
+        (247, 252, 240),
+        (224, 243, 219),
+        (204, 235, 197),
+        (168, 221, 181),
+        (123, 204, 196),
+        (78, 179, 211),
+        (43, 140, 190),
+        (8, 88, 158),
+    ],
+    9: [
+        (247, 252, 240),
+        (224, 243, 219),
+        (204, 235, 197),
+        (168, 221, 181),
+        (123, 204, 196),
+        (78, 179, 211),
+        (43, 140, 190),
+        (8, 104, 172),
+        (8, 64, 129),
+    ],
+}
+
+BuGn = {
+    3: [(229, 245, 249), (153, 216, 201), (44, 162, 95)],
+    4: [
+        (237, 248, 251),
+        (178, 226, 226),
+        (102, 194, 164),
+        (35, 139, 69),
+    ],
+    5: [
+        (237, 248, 251),
+        (178, 226, 226),
+        (102, 194, 164),
+        (44, 162, 95),
+        (0, 109, 44),
+    ],
+    6: [
+        (237, 248, 251),
+        (204, 236, 230),
+        (153, 216, 201),
+        (102, 194, 164),
+        (44, 162, 95),
+        (0, 109, 44),
+    ],
+    7: [
+        (237, 248, 251),
+        (204, 236, 230),
+        (153, 216, 201),
+        (102, 194, 164),
+        (65, 174, 118),
+        (35, 139, 69),
+        (0, 88, 36),
+    ],
+    8: [
+        (247, 252, 253),
+        (229, 245, 249),
+        (204, 236, 230),
+        (153, 216, 201),
+        (102, 194, 164),
+        (65, 174, 118),
+        (35, 139, 69),
+        (0, 88, 36),
+    ],
+    9: [
+        (247, 252, 253),
+        (229, 245, 249),
+        (204, 236, 230),
+        (153, 216, 201),
+        (102, 194, 164),
+        (65, 174, 118),
+        (35, 139, 69),
+        (0, 109, 44),
+        (0, 68, 27),
+    ],
+}
+
+PuBuGn = {
+    3: [(236, 226, 240), (166, 189, 219), (28, 144, 153)],
+    4: [
+        (246, 239, 247),
+        (189, 201, 225),
+        (103, 169, 207),
+        (2, 129, 138),
+    ],
+    5: [
+        (246, 239, 247),
+        (189, 201, 225),
+        (103, 169, 207),
+        (28, 144, 153),
+        (1, 108, 89),
+    ],
+    6: [
+        (246, 239, 247),
+        (208, 209, 230),
+        (166, 189, 219),
+        (103, 169, 207),
+        (28, 144, 153),
+        (1, 108, 89),
+    ],
+    7: [
+        (246, 239, 247),
+        (208, 209, 230),
+        (166, 189, 219),
+        (103, 169, 207),
+        (54, 144, 192),
+        (2, 129, 138),
+        (1, 100, 80),
+    ],
+    8: [
+        (255, 247, 251),
+        (236, 226, 240),
+        (208, 209, 230),
+        (166, 189, 219),
+        (103, 169, 207),
+        (54, 144, 192),
+        (2, 129, 138),
+        (1, 100, 80),
+    ],
+    9: [
+        (255, 247, 251),
+        (236, 226, 240),
+        (208, 209, 230),
+        (166, 189, 219),
+        (103, 169, 207),
+        (54, 144, 192),
+        (2, 129, 138),
+        (1, 108, 89),
+        (1, 70, 54),
+    ],
+}
+
+PuBu = {
+    3: [(236, 231, 242), (166, 189, 219), (43, 140, 190)],
+    4: [
+        (241, 238, 246),
+        (189, 201, 225),
+        (116, 169, 207),
+        (5, 112, 176),
+    ],
+    5: [
+        (241, 238, 246),
+        (189, 201, 225),
+        (116, 169, 207),
+        (43, 140, 190),
+        (4, 90, 141),
+    ],
+    6: [
+        (241, 238, 246),
+        (208, 209, 230),
+        (166, 189, 219),
+        (116, 169, 207),
+        (43, 140, 190),
+        (4, 90, 141),
+    ],
+    7: [
+        (241, 238, 246),
+        (208, 209, 230),
+        (166, 189, 219),
+        (116, 169, 207),
+        (54, 144, 192),
+        (5, 112, 176),
+        (3, 78, 123),
+    ],
+    8: [
+        (255, 247, 251),
+        (236, 231, 242),
+        (208, 209, 230),
+        (166, 189, 219),
+        (116, 169, 207),
+        (54, 144, 192),
+        (5, 112, 176),
+        (3, 78, 123),
+    ],
+    9: [
+        (255, 247, 251),
+        (236, 231, 242),
+        (208, 209, 230),
+        (166, 189, 219),
+        (116, 169, 207),
+        (54, 144, 192),
+        (5, 112, 176),
+        (4, 90, 141),
+        (2, 56, 88),
+    ],
+}
+
+BuPu = {
+    3: [(224, 236, 244), (158, 188, 218), (136, 86, 167)],
+    4: [
+        (237, 248, 251),
+        (179, 205, 227),
+        (140, 150, 198),
+        (136, 65, 157),
+    ],
+    5: [
+        (237, 248, 251),
+        (179, 205, 227),
+        (140, 150, 198),
+        (136, 86, 167),
+        (129, 15, 124),
+    ],
+    6: [
+        (237, 248, 251),
+        (191, 211, 230),
+        (158, 188, 218),
+        (140, 150, 198),
+        (136, 86, 167),
+        (129, 15, 124),
+    ],
+    7: [
+        (237, 248, 251),
+        (191, 211, 230),
+        (158, 188, 218),
+        (140, 150, 198),
+        (140, 107, 177),
+        (136, 65, 157),
+        (110, 1, 107),
+    ],
+    8: [
+        (247, 252, 253),
+        (224, 236, 244),
+        (191, 211, 230),
+        (158, 188, 218),
+        (140, 150, 198),
+        (140, 107, 177),
+        (136, 65, 157),
+        (110, 1, 107),
+    ],
+    9: [
+        (247, 252, 253),
+        (224, 236, 244),
+        (191, 211, 230),
+        (158, 188, 218),
+        (140, 150, 198),
+        (140, 107, 177),
+        (136, 65, 157),
+        (129, 15, 124),
+        (77, 0, 75),
+    ],
+}
+
+RdPu = {
+    3: [(253, 224, 221), (250, 159, 181), (197, 27, 138)],
+    4: [
+        (254, 235, 226),
+        (251, 180, 185),
+        (247, 104, 161),
+        (174, 1, 126),
+    ],
+    5: [
+        (254, 235, 226),
+        (251, 180, 185),
+        (247, 104, 161),
+        (197, 27, 138),
+        (122, 1, 119),
+    ],
+    6: [
+        (254, 235, 226),
+        (252, 197, 192),
+        (250, 159, 181),
+        (247, 104, 161),
+        (197, 27, 138),
+        (122, 1, 119),
+    ],
+    7: [
+        (254, 235, 226),
+        (252, 197, 192),
+        (250, 159, 181),
+        (247, 104, 161),
+        (221, 52, 151),
+        (174, 1, 126),
+        (122, 1, 119),
+    ],
+    8: [
+        (255, 247, 243),
+        (253, 224, 221),
+        (252, 197, 192),
+        (250, 159, 181),
+        (247, 104, 161),
+        (221, 52, 151),
+        (174, 1, 126),
+        (122, 1, 119),
+    ],
+    9: [
+        (255, 247, 243),
+        (253, 224, 221),
+        (252, 197, 192),
+        (250, 159, 181),
+        (247, 104, 161),
+        (221, 52, 151),
+        (174, 1, 126),
+        (122, 1, 119),
+        (73, 0, 106),
+    ],
+}
+
+PuRd = {
+    3: [(231, 225, 239), (201, 148, 199), (221, 28, 119)],
+    4: [
+        (241, 238, 246),
+        (215, 181, 216),
+        (223, 101, 176),
+        (206, 18, 86),
+    ],
+    5: [
+        (241, 238, 246),
+        (215, 181, 216),
+        (223, 101, 176),
+        (221, 28, 119),
+        (152, 0, 67),
+    ],
+    6: [
+        (241, 238, 246),
+        (212, 185, 218),
+        (201, 148, 199),
+        (223, 101, 176),
+        (221, 28, 119),
+        (152, 0, 67),
+    ],
+    7: [
+        (241, 238, 246),
+        (212, 185, 218),
+        (201, 148, 199),
+        (223, 101, 176),
+        (231, 41, 138),
+        (206, 18, 86),
+        (145, 0, 63),
+    ],
+    8: [
+        (247, 244, 249),
+        (231, 225, 239),
+        (212, 185, 218),
+        (201, 148, 199),
+        (223, 101, 176),
+        (231, 41, 138),
+        (206, 18, 86),
+        (145, 0, 63),
+    ],
+    9: [
+        (247, 244, 249),
+        (231, 225, 239),
+        (212, 185, 218),
+        (201, 148, 199),
+        (223, 101, 176),
+        (231, 41, 138),
+        (206, 18, 86),
+        (152, 0, 67),
+        (103, 0, 31),
+    ],
+}
+
+OrRd = {
+    3: [(254, 232, 200), (253, 187, 132), (227, 74, 51)],
+    4: [
+        (254, 240, 217),
+        (253, 204, 138),
+        (252, 141, 89),
+        (215, 48, 31),
+    ],
+    5: [
+        (254, 240, 217),
+        (253, 204, 138),
+        (252, 141, 89),
+        (227, 74, 51),
+        (179, 0, 0),
+    ],
+    6: [
+        (254, 240, 217),
+        (253, 212, 158),
+        (253, 187, 132),
+        (252, 141, 89),
+        (227, 74, 51),
+        (179, 0, 0),
+    ],
+    7: [
+        (254, 240, 217),
+        (253, 212, 158),
+        (253, 187, 132),
+        (252, 141, 89),
+        (239, 101, 72),
+        (215, 48, 31),
+        (153, 0, 0),
+    ],
+    8: [
+        (255, 247, 236),
+        (254, 232, 200),
+        (253, 212, 158),
+        (253, 187, 132),
+        (252, 141, 89),
+        (239, 101, 72),
+        (215, 48, 31),
+        (153, 0, 0),
+    ],
+    9: [
+        (255, 247, 236),
+        (254, 232, 200),
+        (253, 212, 158),
+        (253, 187, 132),
+        (252, 141, 89),
+        (239, 101, 72),
+        (215, 48, 31),
+        (179, 0, 0),
+        (127, 0, 0),
+    ],
+}
+
+YlOrRd = {
+    3: [(255, 237, 160), (254, 178, 76), (240, 59, 32)],
+    4: [
+        (255, 255, 178),
+        (254, 204, 92),
+        (253, 141, 60),
+        (227, 26, 28),
+    ],
+    5: [
+        (255, 255, 178),
+        (254, 204, 92),
+        (253, 141, 60),
+        (240, 59, 32),
+        (189, 0, 38),
+    ],
+    6: [
+        (255, 255, 178),
+        (254, 217, 118),
+        (254, 178, 76),
+        (253, 141, 60),
+        (240, 59, 32),
+        (189, 0, 38),
+    ],
+    7: [
+        (255, 255, 178),
+        (254, 217, 118),
+        (254, 178, 76),
+        (253, 141, 60),
+        (252, 78, 42),
+        (227, 26, 28),
+        (177, 0, 38),
+    ],
+    8: [
+        (255, 255, 204),
+        (255, 237, 160),
+        (254, 217, 118),
+        (254, 178, 76),
+        (253, 141, 60),
+        (252, 78, 42),
+        (227, 26, 28),
+        (177, 0, 38),
+    ],
+    9: [
+        (255, 255, 204),
+        (255, 237, 160),
+        (254, 217, 118),
+        (254, 178, 76),
+        (253, 141, 60),
+        (252, 78, 42),
+        (227, 26, 28),
+        (189, 0, 38),
+        (128, 0, 38),
+    ],
+}
+
+YlOrBr = {
+    3: [(255, 247, 188), (254, 196, 79), (217, 95, 14)],
+    4: [
+        (255, 255, 212),
+        (254, 217, 142),
+        (254, 153, 41),
+        (204, 76, 2),
+    ],
+    5: [
+        (255, 255, 212),
+        (254, 217, 142),
+        (254, 153, 41),
+        (217, 95, 14),
+        (153, 52, 4),
+    ],
+    6: [
+        (255, 255, 212),
+        (254, 227, 145),
+        (254, 196, 79),
+        (254, 153, 41),
+        (217, 95, 14),
+        (153, 52, 4),
+    ],
+    7: [
+        (255, 255, 212),
+        (254, 227, 145),
+        (254, 196, 79),
+        (254, 153, 41),
+        (236, 112, 20),
+        (204, 76, 2),
+        (140, 45, 4),
+    ],
+    8: [
+        (255, 255, 229),
+        (255, 247, 188),
+        (254, 227, 145),
+        (254, 196, 79),
+        (254, 153, 41),
+        (236, 112, 20),
+        (204, 76, 2),
+        (140, 45, 4),
+    ],
+    9: [
+        (255, 255, 229),
+        (255, 247, 188),
+        (254, 227, 145),
+        (254, 196, 79),
+        (254, 153, 41),
+        (236, 112, 20),
+        (204, 76, 2),
+        (153, 52, 4),
+        (102, 37, 6),
+    ],
+}
+
+Purples = {
+    3: [(239, 237, 245), (188, 189, 220), (117, 107, 177)],
+    4: [
+        (242, 240, 247),
+        (203, 201, 226),
+        (158, 154, 200),
+        (106, 81, 163),
+    ],
+    5: [
+        (242, 240, 247),
+        (203, 201, 226),
+        (158, 154, 200),
+        (117, 107, 177),
+        (84, 39, 143),
+    ],
+    6: [
+        (242, 240, 247),
+        (218, 218, 235),
+        (188, 189, 220),
+        (158, 154, 200),
+        (117, 107, 177),
+        (84, 39, 143),
+    ],
+    7: [
+        (242, 240, 247),
+        (218, 218, 235),
+        (188, 189, 220),
+        (158, 154, 200),
+        (128, 125, 186),
+        (106, 81, 163),
+        (74, 20, 134),
+    ],
+    8: [
+        (252, 251, 253),
+        (239, 237, 245),
+        (218, 218, 235),
+        (188, 189, 220),
+        (158, 154, 200),
+        (128, 125, 186),
+        (106, 81, 163),
+        (74, 20, 134),
+    ],
+    9: [
+        (252, 251, 253),
+        (239, 237, 245),
+        (218, 218, 235),
+        (188, 189, 220),
+        (158, 154, 200),
+        (128, 125, 186),
+        (106, 81, 163),
+        (84, 39, 143),
+        (63, 0, 125),
+    ],
+}
+
+Blues = {
+    3: [(222, 235, 247), (158, 202, 225), (49, 130, 189)],
+    4: [
+        (239, 243, 255),
+        (189, 215, 231),
+        (107, 174, 214),
+        (33, 113, 181),
+    ],
+    5: [
+        (239, 243, 255),
+        (189, 215, 231),
+        (107, 174, 214),
+        (49, 130, 189),
+        (8, 81, 156),
+    ],
+    6: [
+        (239, 243, 255),
+        (198, 219, 239),
+        (158, 202, 225),
+        (107, 174, 214),
+        (49, 130, 189),
+        (8, 81, 156),
+    ],
+    7: [
+        (239, 243, 255),
+        (198, 219, 239),
+        (158, 202, 225),
+        (107, 174, 214),
+        (66, 146, 198),
+        (33, 113, 181),
+        (8, 69, 148),
+    ],
+    8: [
+        (247, 251, 255),
+        (222, 235, 247),
+        (198, 219, 239),
+        (158, 202, 225),
+        (107, 174, 214),
+        (66, 146, 198),
+        (33, 113, 181),
+        (8, 69, 148),
+    ],
+    9: [
+        (247, 251, 255),
+        (222, 235, 247),
+        (198, 219, 239),
+        (158, 202, 225),
+        (107, 174, 214),
+        (66, 146, 198),
+        (33, 113, 181),
+        (8, 81, 156),
+        (8, 48, 107),
+    ],
+}
+
+Greens = {
+    3: [(229, 245, 224), (161, 217, 155), (49, 163, 84)],
+    4: [
+        (237, 248, 233),
+        (186, 228, 179),
+        (116, 196, 118),
+        (35, 139, 69),
+    ],
+    5: [
+        (237, 248, 233),
+        (186, 228, 179),
+        (116, 196, 118),
+        (49, 163, 84),
+        (0, 109, 44),
+    ],
+    6: [
+        (237, 248, 233),
+        (199, 233, 192),
+        (161, 217, 155),
+        (116, 196, 118),
+        (49, 163, 84),
+        (0, 109, 44),
+    ],
+    7: [
+        (237, 248, 233),
+        (199, 233, 192),
+        (161, 217, 155),
+        (116, 196, 118),
+        (65, 171, 93),
+        (35, 139, 69),
+        (0, 90, 50),
+    ],
+    8: [
+        (247, 252, 245),
+        (229, 245, 224),
+        (199, 233, 192),
+        (161, 217, 155),
+        (116, 196, 118),
+        (65, 171, 93),
+        (35, 139, 69),
+        (0, 90, 50),
+    ],
+    9: [
+        (247, 252, 245),
+        (229, 245, 224),
+        (199, 233, 192),
+        (161, 217, 155),
+        (116, 196, 118),
+        (65, 171, 93),
+        (35, 139, 69),
+        (0, 109, 44),
+        (0, 68, 27),
+    ],
+}
+
+Oranges = {
+    3: [(254, 230, 206), (253, 174, 107), (230, 85, 13)],
+    4: [
+        (254, 237, 222),
+        (253, 190, 133),
+        (253, 141, 60),
+        (217, 71, 1),
+    ],
+    5: [
+        (254, 237, 222),
+        (253, 190, 133),
+        (253, 141, 60),
+        (230, 85, 13),
+        (166, 54, 3),
+    ],
+    6: [
+        (254, 237, 222),
+        (253, 208, 162),
+        (253, 174, 107),
+        (253, 141, 60),
+        (230, 85, 13),
+        (166, 54, 3),
+    ],
+    7: [
+        (254, 237, 222),
+        (253, 208, 162),
+        (253, 174, 107),
+        (253, 141, 60),
+        (241, 105, 19),
+        (217, 72, 1),
+        (140, 45, 4),
+    ],
+    8: [
+        (255, 245, 235),
+        (254, 230, 206),
+        (253, 208, 162),
+        (253, 174, 107),
+        (253, 141, 60),
+        (241, 105, 19),
+        (217, 72, 1),
+        (140, 45, 4),
+    ],
+    9: [
+        (255, 245, 235),
+        (254, 230, 206),
+        (253, 208, 162),
+        (253, 174, 107),
+        (253, 141, 60),
+        (241, 105, 19),
+        (217, 72, 1),
+        (166, 54, 3),
+        (127, 39, 4),
+    ],
+}
+
+Reds = {
+    3: [(254, 224, 210), (252, 146, 114), (222, 45, 38)],
+    4: [
+        (254, 229, 217),
+        (252, 174, 145),
+        (251, 106, 74),
+        (203, 24, 29),
+    ],
+    5: [
+        (254, 229, 217),
+        (252, 174, 145),
+        (251, 106, 74),
+        (222, 45, 38),
+        (165, 15, 21),
+    ],
+    6: [
+        (254, 229, 217),
+        (252, 187, 161),
+        (252, 146, 114),
+        (251, 106, 74),
+        (222, 45, 38),
+        (165, 15, 21),
+    ],
+    7: [
+        (254, 229, 217),
+        (252, 187, 161),
+        (252, 146, 114),
+        (251, 106, 74),
+        (239, 59, 44),
+        (203, 24, 29),
+        (153, 0, 13),
+    ],
+    8: [
+        (255, 245, 240),
+        (254, 224, 210),
+        (252, 187, 161),
+        (252, 146, 114),
+        (251, 106, 74),
+        (239, 59, 44),
+        (203, 24, 29),
+        (153, 0, 13),
+    ],
+    9: [
+        (255, 245, 240),
+        (254, 224, 210),
+        (252, 187, 161),
+        (252, 146, 114),
+        (251, 106, 74),
+        (239, 59, 44),
+        (203, 24, 29),
+        (165, 15, 21),
+        (103, 0, 13),
+    ],
+}
+
+Greys = {
+    3: [(240, 240, 240), (189, 189, 189), (99, 99, 99)],
+    4: [
+        (247, 247, 247),
+        (204, 204, 204),
+        (150, 150, 150),
+        (82, 82, 82),
+    ],
+    5: [
+        (247, 247, 247),
+        (204, 204, 204),
+        (150, 150, 150),
+        (99, 99, 99),
+        (37, 37, 37),
+    ],
+    6: [
+        (247, 247, 247),
+        (217, 217, 217),
+        (189, 189, 189),
+        (150, 150, 150),
+        (99, 99, 99),
+        (37, 37, 37),
+    ],
+    7: [
+        (247, 247, 247),
+        (217, 217, 217),
+        (189, 189, 189),
+        (150, 150, 150),
+        (115, 115, 115),
+        (82, 82, 82),
+        (37, 37, 37),
+    ],
+    8: [
+        (255, 255, 255),
+        (240, 240, 240),
+        (217, 217, 217),
+        (189, 189, 189),
+        (150, 150, 150),
+        (115, 115, 115),
+        (82, 82, 82),
+        (37, 37, 37),
+    ],
+    9: [
+        (255, 255, 255),
+        (240, 240, 240),
+        (217, 217, 217),
+        (189, 189, 189),
+        (150, 150, 150),
+        (115, 115, 115),
+        (82, 82, 82),
+        (37, 37, 37),
+        (0, 0, 0),
+    ],
+}
+
+sequential = {
+    "multihue": {
+        "YlGn": YlGn,
+        "YlGnBu": YlGnBu,
+        "GnBu": GnBu,
+        "BuGn": BuGn,
+        "PuBuGn": PuBuGn,
+        "PuBu": PuBu,
+        "BuPu": BuPu,
+        "RdPu": RdPu,
+        "PuRd": PuRd,
+        "OrRd": OrRd,
+        "YlOrRd": YlOrRd,
+        "YlOrBr": YlOrBr,
+    },
+    "singlehue": {
+        "Purples": Purples,
+        "Blues": Blues,
+        "Greens": Greens,
+        "Oranges": Oranges,
+        "Reds": Reds,
+        "Greys": Greys,
+    },
+}
+sequential.update(sequential["multihue"])
+sequential.update(sequential["singlehue"])
+
+
+PuOr = {
+    3: [(241, 163, 64), (247, 247, 247), (153, 142, 195)],
+    4: [
+        (230, 97, 1),
+        (253, 184, 99),
+        (178, 171, 210),
+        (94, 60, 153),
+    ],
+    5: [
+        (230, 97, 1),
+        (253, 184, 99),
+        (247, 247, 247),
+        (178, 171, 210),
+        (94, 60, 153),
+    ],
+    6: [
+        (179, 88, 6),
+        (241, 163, 64),
+        (254, 224, 182),
+        (216, 218, 235),
+        (153, 142, 195),
+        (84, 39, 136),
+    ],
+    7: [
+        (179, 88, 6),
+        (241, 163, 64),
+        (254, 224, 182),
+        (247, 247, 247),
+        (216, 218, 235),
+        (153, 142, 195),
+        (84, 39, 136),
+    ],
+    8: [
+        (179, 88, 6),
+        (224, 130, 20),
+        (253, 184, 99),
+        (254, 224, 182),
+        (216, 218, 235),
+        (178, 171, 210),
+        (128, 115, 172),
+        (84, 39, 136),
+    ],
+    9: [
+        (179, 88, 6),
+        (224, 130, 20),
+        (253, 184, 99),
+        (254, 224, 182),
+        (247, 247, 247),
+        (216, 218, 235),
+        (178, 171, 210),
+        (128, 115, 172),
+        (84, 39, 136),
+    ],
+    10: [
+        (127, 59, 8),
+        (179, 88, 6),
+        (224, 130, 20),
+        (253, 184, 99),
+        (254, 224, 182),
+        (216, 218, 235),
+        (178, 171, 210),
+        (128, 115, 172),
+        (84, 39, 136),
+        (45, 0, 75),
+    ],
+    11: [
+        (127, 59, 8),
+        (179, 88, 6),
+        (224, 130, 20),
+        (253, 184, 99),
+        (254, 224, 182),
+        (247, 247, 247),
+        (216, 218, 235),
+        (178, 171, 210),
+        (128, 115, 172),
+        (84, 39, 136),
+        (45, 0, 75),
+    ],
+}
+
+BrBG = {
+    3: [(216, 179, 101), (245, 245, 245), (90, 180, 172)],
+    4: [
+        (166, 97, 26),
+        (223, 194, 125),
+        (128, 205, 193),
+        (1, 133, 113),
+    ],
+    5: [
+        (166, 97, 26),
+        (223, 194, 125),
+        (245, 245, 245),
+        (128, 205, 193),
+        (1, 133, 113),
+    ],
+    6: [
+        (140, 81, 10),
+        (216, 179, 101),
+        (246, 232, 195),
+        (199, 234, 229),
+        (90, 180, 172),
+        (1, 102, 94),
+    ],
+    7: [
+        (140, 81, 10),
+        (216, 179, 101),
+        (246, 232, 195),
+        (245, 245, 245),
+        (199, 234, 229),
+        (90, 180, 172),
+        (1, 102, 94),
+    ],
+    8: [
+        (140, 81, 10),
+        (191, 129, 45),
+        (223, 194, 125),
+        (246, 232, 195),
+        (199, 234, 229),
+        (128, 205, 193),
+        (53, 151, 143),
+        (1, 102, 94),
+    ],
+    9: [
+        (140, 81, 10),
+        (191, 129, 45),
+        (223, 194, 125),
+        (246, 232, 195),
+        (245, 245, 245),
+        (199, 234, 229),
+        (128, 205, 193),
+        (53, 151, 143),
+        (1, 102, 94),
+    ],
+    10: [
+        (84, 48, 5),
+        (140, 81, 10),
+        (191, 129, 45),
+        (223, 194, 125),
+        (246, 232, 195),
+        (199, 234, 229),
+        (128, 205, 193),
+        (53, 151, 143),
+        (1, 102, 94),
+        (0, 60, 48),
+    ],
+    11: [
+        (84, 48, 5),
+        (140, 81, 10),
+        (191, 129, 45),
+        (223, 194, 125),
+        (246, 232, 195),
+        (245, 245, 245),
+        (199, 234, 229),
+        (128, 205, 193),
+        (53, 151, 143),
+        (1, 102, 94),
+        (0, 60, 48),
+    ],
+}
+
+PRGn = {
+    3: [(175, 141, 195), (247, 247, 247), (127, 191, 123)],
+    4: [
+        (123, 50, 148),
+        (194, 165, 207),
+        (166, 219, 160),
+        (0, 136, 55),
+    ],
+    5: [
+        (123, 50, 148),
+        (194, 165, 207),
+        (247, 247, 247),
+        (166, 219, 160),
+        (0, 136, 55),
+    ],
+    6: [
+        (118, 42, 131),
+        (175, 141, 195),
+        (231, 212, 232),
+        (217, 240, 211),
+        (127, 191, 123),
+        (27, 120, 55),
+    ],
+    7: [
+        (118, 42, 131),
+        (175, 141, 195),
+        (231, 212, 232),
+        (247, 247, 247),
+        (217, 240, 211),
+        (127, 191, 123),
+        (27, 120, 55),
+    ],
+    8: [
+        (118, 42, 131),
+        (153, 112, 171),
+        (194, 165, 207),
+        (231, 212, 232),
+        (217, 240, 211),
+        (166, 219, 160),
+        (90, 174, 97),
+        (27, 120, 55),
+    ],
+    9: [
+        (118, 42, 131),
+        (153, 112, 171),
+        (194, 165, 207),
+        (231, 212, 232),
+        (247, 247, 247),
+        (217, 240, 211),
+        (166, 219, 160),
+        (90, 174, 97),
+        (27, 120, 55),
+    ],
+    10: [
+        (64, 0, 75),
+        (118, 42, 131),
+        (153, 112, 171),
+        (194, 165, 207),
+        (231, 212, 232),
+        (217, 240, 211),
+        (166, 219, 160),
+        (90, 174, 97),
+        (27, 120, 55),
+        (0, 68, 27),
+    ],
+    11: [
+        (64, 0, 75),
+        (118, 42, 131),
+        (153, 112, 171),
+        (194, 165, 207),
+        (231, 212, 232),
+        (247, 247, 247),
+        (217, 240, 211),
+        (166, 219, 160),
+        (90, 174, 97),
+        (27, 120, 55),
+        (0, 68, 27),
+    ],
+}
+
+PiYG = {
+    3: [(233, 163, 201), (247, 247, 247), (161, 215, 106)],
+    4: [
+        (208, 28, 139),
+        (241, 182, 218),
+        (184, 225, 134),
+        (77, 172, 38),
+    ],
+    5: [
+        (208, 28, 139),
+        (241, 182, 218),
+        (247, 247, 247),
+        (184, 225, 134),
+        (77, 172, 38),
+    ],
+    6: [
+        (197, 27, 125),
+        (233, 163, 201),
+        (253, 224, 239),
+        (230, 245, 208),
+        (161, 215, 106),
+        (77, 146, 33),
+    ],
+    7: [
+        (197, 27, 125),
+        (233, 163, 201),
+        (253, 224, 239),
+        (247, 247, 247),
+        (230, 245, 208),
+        (161, 215, 106),
+        (77, 146, 33),
+    ],
+    8: [
+        (197, 27, 125),
+        (222, 119, 174),
+        (241, 182, 218),
+        (253, 224, 239),
+        (230, 245, 208),
+        (184, 225, 134),
+        (127, 188, 65),
+        (77, 146, 33),
+    ],
+    9: [
+        (197, 27, 125),
+        (222, 119, 174),
+        (241, 182, 218),
+        (253, 224, 239),
+        (247, 247, 247),
+        (230, 245, 208),
+        (184, 225, 134),
+        (127, 188, 65),
+        (77, 146, 33),
+    ],
+    10: [
+        (142, 1, 82),
+        (197, 27, 125),
+        (222, 119, 174),
+        (241, 182, 218),
+        (253, 224, 239),
+        (230, 245, 208),
+        (184, 225, 134),
+        (127, 188, 65),
+        (77, 146, 33),
+        (39, 100, 25),
+    ],
+    11: [
+        (142, 1, 82),
+        (197, 27, 125),
+        (222, 119, 174),
+        (241, 182, 218),
+        (253, 224, 239),
+        (247, 247, 247),
+        (230, 245, 208),
+        (184, 225, 134),
+        (127, 188, 65),
+        (77, 146, 33),
+        (39, 100, 25),
+    ],
+}
+
+RdBu = {
+    3: [(239, 138, 98), (247, 247, 247), (103, 169, 207)],
+    4: [
+        (202, 0, 32),
+        (244, 165, 130),
+        (146, 197, 222),
+        (5, 113, 176),
+    ],
+    5: [
+        (202, 0, 32),
+        (244, 165, 130),
+        (247, 247, 247),
+        (146, 197, 222),
+        (5, 113, 176),
+    ],
+    6: [
+        (178, 24, 43),
+        (239, 138, 98),
+        (253, 219, 199),
+        (209, 229, 240),
+        (103, 169, 207),
+        (33, 102, 172),
+    ],
+    7: [
+        (178, 24, 43),
+        (239, 138, 98),
+        (253, 219, 199),
+        (247, 247, 247),
+        (209, 229, 240),
+        (103, 169, 207),
+        (33, 102, 172),
+    ],
+    8: [
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (209, 229, 240),
+        (146, 197, 222),
+        (67, 147, 195),
+        (33, 102, 172),
+    ],
+    9: [
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (247, 247, 247),
+        (209, 229, 240),
+        (146, 197, 222),
+        (67, 147, 195),
+        (33, 102, 172),
+    ],
+    10: [
+        (103, 0, 31),
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (209, 229, 240),
+        (146, 197, 222),
+        (67, 147, 195),
+        (33, 102, 172),
+        (5, 48, 97),
+    ],
+    11: [
+        (103, 0, 31),
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (247, 247, 247),
+        (209, 229, 240),
+        (146, 197, 222),
+        (67, 147, 195),
+        (33, 102, 172),
+        (5, 48, 97),
+    ],
+}
+
+RdGy = {
+    3: [(239, 138, 98), (255, 255, 255), (153, 153, 153)],
+    4: [
+        (202, 0, 32),
+        (244, 165, 130),
+        (186, 186, 186),
+        (64, 64, 64),
+    ],
+    5: [
+        (202, 0, 32),
+        (244, 165, 130),
+        (255, 255, 255),
+        (186, 186, 186),
+        (64, 64, 64),
+    ],
+    6: [
+        (178, 24, 43),
+        (239, 138, 98),
+        (253, 219, 199),
+        (224, 224, 224),
+        (153, 153, 153),
+        (77, 77, 77),
+    ],
+    7: [
+        (178, 24, 43),
+        (239, 138, 98),
+        (253, 219, 199),
+        (255, 255, 255),
+        (224, 224, 224),
+        (153, 153, 153),
+        (77, 77, 77),
+    ],
+    8: [
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (224, 224, 224),
+        (186, 186, 186),
+        (135, 135, 135),
+        (77, 77, 77),
+    ],
+    9: [
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (255, 255, 255),
+        (224, 224, 224),
+        (186, 186, 186),
+        (135, 135, 135),
+        (77, 77, 77),
+    ],
+    10: [
+        (103, 0, 31),
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (224, 224, 224),
+        (186, 186, 186),
+        (135, 135, 135),
+        (77, 77, 77),
+        (26, 26, 26),
+    ],
+    11: [
+        (103, 0, 31),
+        (178, 24, 43),
+        (214, 96, 77),
+        (244, 165, 130),
+        (253, 219, 199),
+        (255, 255, 255),
+        (224, 224, 224),
+        (186, 186, 186),
+        (135, 135, 135),
+        (77, 77, 77),
+        (26, 26, 26),
+    ],
+}
+
+RdYlBu = {
+    3: [(252, 141, 89), (255, 255, 191), (145, 191, 219)],
+    4: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (171, 217, 233),
+        (44, 123, 182),
+    ],
+    5: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (255, 255, 191),
+        (171, 217, 233),
+        (44, 123, 182),
+    ],
+    6: [
+        (215, 48, 39),
+        (252, 141, 89),
+        (254, 224, 144),
+        (224, 243, 248),
+        (145, 191, 219),
+        (69, 117, 180),
+    ],
+    7: [
+        (215, 48, 39),
+        (252, 141, 89),
+        (254, 224, 144),
+        (255, 255, 191),
+        (224, 243, 248),
+        (145, 191, 219),
+        (69, 117, 180),
+    ],
+    8: [
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 144),
+        (224, 243, 248),
+        (171, 217, 233),
+        (116, 173, 209),
+        (69, 117, 180),
+    ],
+    9: [
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 144),
+        (255, 255, 191),
+        (224, 243, 248),
+        (171, 217, 233),
+        (116, 173, 209),
+        (69, 117, 180),
+    ],
+    10: [
+        (165, 0, 38),
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 144),
+        (224, 243, 248),
+        (171, 217, 233),
+        (116, 173, 209),
+        (69, 117, 180),
+        (49, 54, 149),
+    ],
+    11: [
+        (165, 0, 38),
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 144),
+        (255, 255, 191),
+        (224, 243, 248),
+        (171, 217, 233),
+        (116, 173, 209),
+        (69, 117, 180),
+        (49, 54, 149),
+    ],
+}
+
+Spectral = {
+    3: [(252, 141, 89), (255, 255, 191), (153, 213, 148)],
+    4: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (171, 221, 164),
+        (43, 131, 186),
+    ],
+    5: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (255, 255, 191),
+        (171, 221, 164),
+        (43, 131, 186),
+    ],
+    6: [
+        (213, 62, 79),
+        (252, 141, 89),
+        (254, 224, 139),
+        (230, 245, 152),
+        (153, 213, 148),
+        (50, 136, 189),
+    ],
+    7: [
+        (213, 62, 79),
+        (252, 141, 89),
+        (254, 224, 139),
+        (255, 255, 191),
+        (230, 245, 152),
+        (153, 213, 148),
+        (50, 136, 189),
+    ],
+    8: [
+        (213, 62, 79),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (230, 245, 152),
+        (171, 221, 164),
+        (102, 194, 165),
+        (50, 136, 189),
+    ],
+    9: [
+        (213, 62, 79),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (255, 255, 191),
+        (230, 245, 152),
+        (171, 221, 164),
+        (102, 194, 165),
+        (50, 136, 189),
+    ],
+    10: [
+        (158, 1, 66),
+        (213, 62, 79),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (230, 245, 152),
+        (171, 221, 164),
+        (102, 194, 165),
+        (50, 136, 189),
+        (94, 79, 162),
+    ],
+    11: [
+        (158, 1, 66),
+        (213, 62, 79),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (255, 255, 191),
+        (230, 245, 152),
+        (171, 221, 164),
+        (102, 194, 165),
+        (50, 136, 189),
+        (94, 79, 162),
+    ],
+}
+
+RdYlGn = {
+    3: [(252, 141, 89), (255, 255, 191), (145, 207, 96)],
+    4: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (166, 217, 106),
+        (26, 150, 65),
+    ],
+    5: [
+        (215, 25, 28),
+        (253, 174, 97),
+        (255, 255, 191),
+        (166, 217, 106),
+        (26, 150, 65),
+    ],
+    6: [
+        (215, 48, 39),
+        (252, 141, 89),
+        (254, 224, 139),
+        (217, 239, 139),
+        (145, 207, 96),
+        (26, 152, 80),
+    ],
+    7: [
+        (215, 48, 39),
+        (252, 141, 89),
+        (254, 224, 139),
+        (255, 255, 191),
+        (217, 239, 139),
+        (145, 207, 96),
+        (26, 152, 80),
+    ],
+    8: [
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (217, 239, 139),
+        (166, 217, 106),
+        (102, 189, 99),
+        (26, 152, 80),
+    ],
+    9: [
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (255, 255, 191),
+        (217, 239, 139),
+        (166, 217, 106),
+        (102, 189, 99),
+        (26, 152, 80),
+    ],
+    10: [
+        (165, 0, 38),
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (217, 239, 139),
+        (166, 217, 106),
+        (102, 189, 99),
+        (26, 152, 80),
+        (0, 104, 55),
+    ],
+    11: [
+        (165, 0, 38),
+        (215, 48, 39),
+        (244, 109, 67),
+        (253, 174, 97),
+        (254, 224, 139),
+        (255, 255, 191),
+        (217, 239, 139),
+        (166, 217, 106),
+        (102, 189, 99),
+        (26, 152, 80),
+        (0, 104, 55),
+    ],
+}
+
+diverging = {
+    "PuOr": PuOr,
+    "BrBG": BrBG,
+    "PRGn": PRGn,
+    "PiYG": PiYG,
+    "RdBu": RdBu,
+    "RdGy": RdGy,
+    "RdYlBu": RdYlBu,
+    "Spectral": Spectral,
+    "RdYlGn": RdYlGn,
+}
+
+
+Accent = {
+    3: [(127, 201, 127), (190, 174, 212), (253, 192, 134)],
+    4: [
+        (127, 201, 127),
+        (190, 174, 212),
+        (253, 192, 134),
+        (255, 255, 153),
+    ],
+    5: [
+        (127, 201, 127),
+        (190, 174, 212),
+        (253, 192, 134),
+        (255, 255, 153),
+        (56, 108, 176),
+    ],
+    6: [
+        (127, 201, 127),
+        (190, 174, 212),
+        (253, 192, 134),
+        (255, 255, 153),
+        (56, 108, 176),
+        (240, 2, 127),
+    ],
+    7: [
+        (127, 201, 127),
+        (190, 174, 212),
+        (253, 192, 134),
+        (255, 255, 153),
+        (56, 108, 176),
+        (240, 2, 127),
+        (191, 91, 23),
+    ],
+    8: [
+        (127, 201, 127),
+        (190, 174, 212),
+        (253, 192, 134),
+        (255, 255, 153),
+        (56, 108, 176),
+        (240, 2, 127),
+        (191, 91, 23),
+        (102, 102, 102),
+    ],
+}
+
+Dark2 = {
+    3: [(27, 158, 119), (217, 95, 2), (117, 112, 179)],
+    4: [
+        (27, 158, 119),
+        (217, 95, 2),
+        (117, 112, 179),
+        (231, 41, 138),
+    ],
+    5: [
+        (27, 158, 119),
+        (217, 95, 2),
+        (117, 112, 179),
+        (231, 41, 138),
+        (102, 166, 30),
+    ],
+    6: [
+        (27, 158, 119),
+        (217, 95, 2),
+        (117, 112, 179),
+        (231, 41, 138),
+        (102, 166, 30),
+        (230, 171, 2),
+    ],
+    7: [
+        (27, 158, 119),
+        (217, 95, 2),
+        (117, 112, 179),
+        (231, 41, 138),
+        (102, 166, 30),
+        (230, 171, 2),
+        (166, 118, 29),
+    ],
+    8: [
+        (27, 158, 119),
+        (217, 95, 2),
+        (117, 112, 179),
+        (231, 41, 138),
+        (102, 166, 30),
+        (230, 171, 2),
+        (166, 118, 29),
+        (102, 102, 102),
+    ],
+}
+
+Paired = {
+    3: [(166, 206, 227), (31, 120, 180), (178, 223, 138)],
+    4: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+    ],
+    5: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+    ],
+    6: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+    ],
+    7: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+    ],
+    8: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+        (255, 127, 0),
+    ],
+    9: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+        (255, 127, 0),
+        (202, 178, 214),
+    ],
+    10: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+        (255, 127, 0),
+        (202, 178, 214),
+        (106, 61, 154),
+    ],
+    11: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+        (255, 127, 0),
+        (202, 178, 214),
+        (106, 61, 154),
+        (255, 255, 153),
+    ],
+    12: [
+        (166, 206, 227),
+        (31, 120, 180),
+        (178, 223, 138),
+        (51, 160, 44),
+        (251, 154, 153),
+        (227, 26, 28),
+        (253, 191, 111),
+        (255, 127, 0),
+        (202, 178, 214),
+        (106, 61, 154),
+        (255, 255, 153),
+        (177, 89, 40),
+    ],
+}
+
+Pastel1 = {
+    3: [(251, 180, 174), (179, 205, 227), (204, 235, 197)],
+    4: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+    ],
+    5: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+        (254, 217, 166),
+    ],
+    6: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+        (254, 217, 166),
+        (255, 255, 204),
+    ],
+    7: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+        (254, 217, 166),
+        (255, 255, 204),
+        (229, 216, 189),
+    ],
+    8: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+        (254, 217, 166),
+        (255, 255, 204),
+        (229, 216, 189),
+        (253, 218, 236),
+    ],
+    9: [
+        (251, 180, 174),
+        (179, 205, 227),
+        (204, 235, 197),
+        (222, 203, 228),
+        (254, 217, 166),
+        (255, 255, 204),
+        (229, 216, 189),
+        (253, 218, 236),
+        (242, 242, 242),
+    ],
+}
+
+Pastel2 = {
+    3: [(179, 226, 205), (253, 205, 172), (203, 213, 232)],
+    4: [
+        (179, 226, 205),
+        (253, 205, 172),
+        (203, 213, 232),
+        (244, 202, 228),
+    ],
+    5: [
+        (179, 226, 205),
+        (253, 205, 172),
+        (203, 213, 232),
+        (244, 202, 228),
+        (230, 245, 201),
+    ],
+    6: [
+        (179, 226, 205),
+        (253, 205, 172),
+        (203, 213, 232),
+        (244, 202, 228),
+        (230, 245, 201),
+        (255, 242, 174),
+    ],
+    7: [
+        (179, 226, 205),
+        (253, 205, 172),
+        (203, 213, 232),
+        (244, 202, 228),
+        (230, 245, 201),
+        (255, 242, 174),
+        (241, 226, 204),
+    ],
+    8: [
+        (179, 226, 205),
+        (253, 205, 172),
+        (203, 213, 232),
+        (244, 202, 228),
+        (230, 245, 201),
+        (255, 242, 174),
+        (241, 226, 204),
+        (204, 204, 204),
+    ],
+}
+
+Set1 = {
+    3: [(228, 26, 28), (55, 126, 184), (77, 175, 74)],
+    4: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+    ],
+    5: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+        (255, 127, 0),
+    ],
+    6: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+        (255, 127, 0),
+        (255, 255, 51),
+    ],
+    7: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+        (255, 127, 0),
+        (255, 255, 51),
+        (166, 86, 40),
+    ],
+    8: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+        (255, 127, 0),
+        (255, 255, 51),
+        (166, 86, 40),
+        (247, 129, 191),
+    ],
+    9: [
+        (228, 26, 28),
+        (55, 126, 184),
+        (77, 175, 74),
+        (152, 78, 163),
+        (255, 127, 0),
+        (255, 255, 51),
+        (166, 86, 40),
+        (247, 129, 191),
+        (153, 153, 153),
+    ],
+}
+
+Set2 = {
+    3: [(102, 194, 165), (252, 141, 98), (141, 160, 203)],
+    4: [
+        (102, 194, 165),
+        (252, 141, 98),
+        (141, 160, 203),
+        (231, 138, 195),
+    ],
+    5: [
+        (102, 194, 165),
+        (252, 141, 98),
+        (141, 160, 203),
+        (231, 138, 195),
+        (166, 216, 84),
+    ],
+    6: [
+        (102, 194, 165),
+        (252, 141, 98),
+        (141, 160, 203),
+        (231, 138, 195),
+        (166, 216, 84),
+        (255, 217, 47),
+    ],
+    7: [
+        (102, 194, 165),
+        (252, 141, 98),
+        (141, 160, 203),
+        (231, 138, 195),
+        (166, 216, 84),
+        (255, 217, 47),
+        (229, 196, 148),
+    ],
+    8: [
+        (102, 194, 165),
+        (252, 141, 98),
+        (141, 160, 203),
+        (231, 138, 195),
+        (166, 216, 84),
+        (255, 217, 47),
+        (229, 196, 148),
+        (179, 179, 179),
+    ],
+}
+
+Set3 = {
+    3: [(141, 211, 199), (255, 255, 179), (190, 186, 218)],
+    4: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+    ],
+    5: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+    ],
+    6: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+    ],
+    7: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+    ],
+    8: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+        (252, 205, 229),
+    ],
+    9: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+        (252, 205, 229),
+        (217, 217, 217),
+    ],
+    10: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+        (252, 205, 229),
+        (217, 217, 217),
+        (188, 128, 189),
+    ],
+    11: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+        (252, 205, 229),
+        (217, 217, 217),
+        (188, 128, 189),
+        (204, 235, 197),
+    ],
+    12: [
+        (141, 211, 199),
+        (255, 255, 179),
+        (190, 186, 218),
+        (251, 128, 114),
+        (128, 177, 211),
+        (253, 180, 98),
+        (179, 222, 105),
+        (252, 205, 229),
+        (217, 217, 217),
+        (188, 128, 189),
+        (204, 235, 197),
+        (255, 237, 111),
+    ],
+}
+
+qualitative = {
+    "Pastel2": Pastel2,
+    "Pastel1": Pastel1,
+    "Dark2": Dark2,
+    "Accent": Accent,
+    "Paired": Paired,
+    "Set1": Set1,
+    "Set2": Set2,
+    "Set3": Set3,
+}
+
+palette_names_by_cat = {
+    "sequential": sequential.keys(),
+    "diverging": diverging.keys(),
+    "qualitative": qualitative.keys(),
+}
+
+palettes_by_cat = {
+    "sequential": sequential,
+    "diverging": diverging,
+    "qualitative": qualitative,
+}
+
+
+def nhm_component_colors(model: Model = None):
+    cb = ColorBrewer
+    palette = cb.get_palette("Accent")(8)  # the full NHM model components
+    component_colors = {
+        "PRMSSolarGeometry": palette[3],
+        "PRMSAtmosphere": palette[2],
+        "PRMSCanopy": palette[0],
+        "PRMSSnow": palette[1],
+        "PRMSRunoff": palette[5],
+        "PRMSSoilzone": palette[6],
+        "PRMSGroundwater": palette[7],
+        "PRMSChannel": palette[4],
+    }
+    if not model:
+        return component_colors
+    else:
+        model_components = list(model.components.keys())
+        model_component_colors = {
+            key: val
+            for key, val in component_colors.items()
+            if key in [cc for cc in model_components]
+        }
+        return model_component_colors
diff --git a/pynhm/atmosphere/PRMSBoundaryLayer.py b/pynhm/atmosphere/PRMSAtmosphere.py
similarity index 54%
rename from pynhm/atmosphere/PRMSBoundaryLayer.py
rename to pynhm/atmosphere/PRMSAtmosphere.py
index bd1e444d..6712a18a 100644
--- a/pynhm/atmosphere/PRMSBoundaryLayer.py
+++ b/pynhm/atmosphere/PRMSAtmosphere.py
@@ -1,19 +1,16 @@
 import pathlib as pl
-from typing import Union
 
 import numpy as np
 
 from pynhm.base.storageUnit import StorageUnit
-from pynhm.utils.netcdf_utils import NetCdfRead, NetCdfWrite
+from pynhm.utils.netcdf_utils import NetCdfWrite
 
+from ..base.adapter import adaptable
 from ..base.control import Control
-from ..constants import inch2cm, nan, one, zero
-from ..utils.time_utils import datetime_month
-from .PRMSSolarGeometry import PRMSSolarGeometry
+from ..constants import epsilon, fileish, inch2cm, nan, one, zero
+from ..utils.time_utils import datetime_doy, datetime_month
 from .solar_constants import solf
 
-fileish = Union[str, pl.Path]
-
 
 # may not use this if they cant be called with jit
 # if it can, put it in a common utility.
@@ -25,87 +22,135 @@ def tile_time_to_space(arr: np.ndarray, n_space) -> np.ndarray:
     return np.transpose(np.tile(arr, (n_space, 1)))
 
 
-class PRMSBoundaryLayer(StorageUnit):
+class PRMSAtmosphere(StorageUnit):
+    """PRMS atmospheric boundary layer model.
+
+    Implementation based on PRMS 5.2.1 with theoretical documentation based on
+    PRMS-IV:
+
+    Markstrom, S. L., Regan, R. S., Hay, L. E., Viger, R. J., Webb, R. M.,
+    Payn, R. A., & LaFontaine, J. H. (2015). PRMS-IV, the
+    precipitation-runoff modeling system, version 4. US Geological Survey
+    Techniques and Methods, 6, B7.
+    https://pubs.usgs.gov/tm/6b7/pdf/tm6-b7.pdf
+
+    This representation uses precipitation and temperature inputs. Relative
+    humidity could be added as well.
+
+    The boundary layer calculates and manages the following variables (given
+    by PRMSAtmosphere.get_variables()):
+
+        tmaxf,
+        tminf,
+        prmx,
+        hru_ppt,
+        hru_rain,
+        hru_snow,
+        swrad,
+        potet,
+        transp_on,
+
+    PRMS adjustments to temperature and precipitation are applied here to
+    the inputs. Shortwave radiation (using degree day method) and potential
+    evapotranspiration (Jensen and Haise ,1963) and a temperature based
+    transpiration flag (transp_on) are also calculated.
+
+    Note that all variables are calculate for all time upon initialization. The
+    full time version of a variable is given by the "private" version of the
+    variable which is named with a single-leading underscore (eg tmaxf for all
+    time is _tmaxf).
+
+    This full-time initialization ma not be tractable for large domains and/or
+    long periods of time and require changes to batch the processing of the
+    variables. The benefits of full-time initialization are 1) the code is
+    vectorized and fast for such a large calculation, 2) the initialization of
+    this class effectively preprocess all the inputs to the rest of the model
+    and can then be skipped in subsequent model calls (unless the parameters
+    are changing).
+
+    Args:
+        control: control object
+        prcp: precipitation cbh netcdf file
+        tmax: maximum daily temperature cbh netcdf file
+        tmin: minimum daily temperature cbh netcdf file
+        budget_type: [None | "diagnostic" |  "strict"].
+        verbose: bool indicating amount of output to terminal.
+        netcdf_output_dir: an existing directory to which to write all
+            variables for all time.
+
+    """
+
     def __init__(
         self,
         control: Control,
         prcp: fileish,
         tmax: fileish,
         tmin: fileish,
+        soltab_potsw: adaptable,
+        soltab_horad_potsw: adaptable,
         budget_type: str = None,
         verbose: bool = False,
         netcdf_output_dir: fileish = None,
         from_file_dir: fileish = None,
+        n_time_chunk: int = -1,
     ):
-        """PRMS atmospheric boundary layer model.
-
-        This representation uses precipitation and temperature inputs. Relative
-        humidity could be added as well.
-
-        Note that all variables are calculate for all time upon initialization.
-        This may not be tractable for large domains and long periods of time
-        and require changes. The benefits are 1) the code is vectorized and
-        fast for such a large calculation, 2) the initialization of this class
-        effectively preprocess all the inputs to the rest of the model and can
-        then be skipped in subsequent model calls (unless the parameters are
-        changing).
 
-        PRMS adjustments to temperature and precipitation are applied here to
-        the inputs. Shortwave radiation (using degree day method) and potential
-        evapotranspiration (Jensen and Haise ,1963) are also calculated.
+        # This could be used to subclass storageUnit or Process classes to have
+        # timeseries. Solar geom bas doy dimension not actual simulation times
 
-        Args:
-            control: control object
-            prcp: precipitation cbh netcdf file
-            tmax: maximum daily temperature cbh netcdf file
-            tmin: minimum daily temperature cbh netcdf file
-            budget_type: [None | "diagnostic" |  "strict"].
-            verbose: bool indicating amount of output to terminal.
-            netcdf_output_dir: an existing directory to which to write all
-                variables for all time.
+        # Defering handling batch handling of time chunks but self.n_time_chunk
+        # is a dimension used in the metadata/variables dimensions.
+        if n_time_chunk <= 0:
+            self.n_time_chunk = control.n_times
+        else:
+            self.n_time_chunk = n_time_chunk
 
+        # Initialize full time with nans
+        self._time = np.full(self.n_time_chunk, nan, dtype="datetime64[s]")
 
-        """
         self.netcdf_output_dir = netcdf_output_dir
 
+        self.set_inputs(locals())
         super().__init__(
             control=control,
             verbose=verbose,
         )
-        self.name = "PRMSBoundaryLayer"
-
-        # Override self.set_inputs(locals())
-        # Get all data at all times: do all forcings up front
-        # There will be no inputs to advance
-        self._input_variables_dict = {}
-        self._datetime = None
-        for input in self.get_inputs():
-            nc_data = NetCdfRead(locals()[input])
-            self[input] = nc_data.dataset[input][:].data
-            # Get the datetimes or check against the first
-            if self._datetime is None:
-                self._datetime = nc_data._datetime
+        self.name = "PRMSAtmosphere"
+        self.budget = None
+
+        self._calculated = False
+
+        return
+
+    def _calculate_all_time(self):
+        # Eventually refactor to work at specific chunks of time
+        for input in ["prcp", "tmax", "tmin"]:
+            # # this is a bit of a mess: ._dataset.dataset
+            input_time = self._input_variables_dict[input]._nc_read.times
+            # dont do this...
+            # self[input][:] = ds.dataset[input][:].data
+            if np.isnan(self._time[0]):
+                self._time[:] = input_time
             else:
-                assert (nc_data._datetime == self._datetime).all()
+                assert (input_time == self._time).all()
 
-        start_time_ind = np.where(self._datetime == self.control._start_time)
-        start_time_ind = start_time_ind[0]
+        start_time_ind = np.where(self._time == self.control._start_time)[0]
         if not len(start_time_ind):
-            msg = "Control start_time is not in the input data datetime"
+            msg = "Control start_time is not in the input data time"
             raise ValueError(msg)
         self._init_time_ind = start_time_ind[0]
 
-        # atm/boundary layer has a solar geometry
-        self.solar_geom = PRMSSolarGeometry(control)
-
         # Solve all variables for all time
-        self._month_ind_12 = datetime_month(self._datetime) - 1  # (time)
-        self._month_ind_1 = np.zeros(self._datetime.shape, dtype=int)  # (time)
+        self._month_ind_12 = datetime_month(self._time) - 1  # (time)
+        self._month_ind_1 = np.zeros(self._time.shape, dtype=int)  # (time)
+        self._month = datetime_month(self._time)  # (time)
+        self._doy = datetime_doy(self._time)  # (time)
 
         self.adjust_temperature()
         self.adjust_precip()
         self.calculate_sw_rad_degree_day()
         self.calculate_potential_et_jh()
+        self.calculate_transp_tindex()
 
         # Budget is not for all time
         # self.set_budget(budget_type)
@@ -118,15 +163,23 @@ def __init__(
         # }
 
         if self.netcdf_output_dir:
-            self.netcdf_output_dir = pl.Path(netcdf_output_dir)
+            self.netcdf_output_dir = pl.Path(self.netcdf_output_dir)
             assert self.netcdf_output_dir.exists()
             self._write_netcdf_timeseries()
 
+        # JLM todo: delete large variables on self for memory management
+        self._calculated = True
         return
 
     @staticmethod
     def get_inputs() -> tuple:
-        return ("prcp", "tmax", "tmin")
+        return (
+            "prcp",
+            "tmax",
+            "tmin",
+            "soltab_potsw",
+            "soltab_horad_potsw",
+        )
 
     @staticmethod
     def get_variables() -> tuple:
@@ -141,6 +194,12 @@ def get_variables() -> tuple:
             "potet",
             # "hru_actet",
             # "available_potet",
+            "transp_on",
+            "tmaxc",
+            "tavgc",
+            "tminc",
+            "pptmix",
+            "orad_hru",
         )
 
     @staticmethod
@@ -156,6 +215,12 @@ def get_init_values() -> dict:
             "potet": nan,
             # "hru_actet": zero,
             # "available_potet": nan,
+            "transp_on": 0,
+            "tmaxc": nan,
+            "tavgc": nan,
+            "tminc": nan,
+            "pptmix": nan,
+            "orad_hru": nan,
         }
 
     @staticmethod
@@ -186,22 +251,42 @@ def get_parameters():
             "snow_cbh_adj",
             "rain_cbh_adj",
             "adjmix_rain",
+            "transp_beg",
+            "transp_end",
+            "transp_tmax",
+            "radadj_intcp",  # below are solar params used by Atmosphere
+            "radadj_slope",
+            "tmax_index",
+            "dday_slope",
+            "dday_intcp",
+            "radmax",
+            "ppt_rad_adj",
+            "tmax_allsnow",
+            "tmax_allrain_offset",
+            "hru_slope",
+            "radj_sppt",
+            "radj_wppt",
+            "hru_lat",
+            "hru_area",
         )
 
     def set_initial_conditions(self):
         return
 
     def _advance_variables(self):
-        """Advance the PRMSBoundaryLayer
+        """Advance the PRMSAtmosphere
 
         Returns:
             None
 
         """
+        if not self._calculated:
+            self._calculate_all_time()
+
         return
 
     def _calculate(self, time_length):
-        """Calculate PRMSBoundaryLayer"
+        """Calculate PRMSAtmosphere"
 
         Sets the current value to the precalculated values.
 
@@ -212,9 +297,6 @@ def _calculate(self, time_length):
             None
 
         """
-        current_ind = self._init_time_ind + self._itime_step
-        for var in self.variables:
-            self[var][:] = self[f"_{var}"][current_ind, :]
         return
 
     def adjust_temperature(self):
@@ -240,10 +322,12 @@ def adjust_temperature(self):
             raise ValueError(msg)
 
         # (time, space) dimensions on these variables
-        self._tmaxf = np.zeros(self.tmax.shape, dtype=self.tmax.dtype)
-        self._tminf = np.zeros(self.tmin.shape, dtype=self.tmin.dtype)
-        self._tmaxf = self["tmax"] + self["tmax_cbh_adj"][month_ind]
-        self._tminf = self["tmin"] + self["tmin_cbh_adj"][month_ind]
+        ivd = self._input_variables_dict
+        self.tmaxf.data[:] = ivd["tmax"].data + self.tmax_cbh_adj[month_ind]
+        self.tminf.data[:] = ivd["tmin"].data + self.tmin_cbh_adj[month_ind]
+        self.tminc.data[:] = (self["tminf"].data - 32.0) * (5 / 9)
+        self.tmaxc.data[:] = (self["tmaxf"].data - 32.0) * (5 / 9)
+        self.tavgc.data[:] = (self["tmaxc"].data + self["tminc"].data) / 2.0
 
         return
 
@@ -254,6 +338,8 @@ def adjust_precip(self):
         in addition to depending on additonal parameters.
         """
 
+        ivd = self._input_variables_dict
+
         # throw an error shapes are inconsistent
         shape_list = np.array(
             [
@@ -281,59 +367,70 @@ def adjust_precip(self):
             msg = "Unexpected month dimension for cbh precip adjustment params"
             raise ValueError(msg)
 
-        # (time, space) dimensions
-        self._hru_ppt = np.zeros(self.prcp.shape, dtype=self.prcp.dtype)
-        self._hru_rain = np.zeros(self.prcp.shape, dtype=self.prcp.dtype)
-        self._hru_snow = np.zeros(self.prcp.shape, dtype=self.prcp.dtype)
-
-        self._prmx = np.zeros(self.prcp.shape, dtype=self.prcp.dtype)
         # Order MATTERS in calculating the prmx mask
         # The logic in PRMS is if(all_snow),elif(all_rain),else(mixed)
         # so we set the mask in the reverse order
         # Calculate the mix everywhere, then set the precip/rain/snow amounts
         # from the conditions.
-        tdiff = self._tmaxf - self._tminf
-        self._prmx = (
-            (self._tmaxf - self.tmax_allsnow[month_ind]) / tdiff
+        tdiff = self.tmaxf.data - self.tminf.data
+        tdiff = np.where(tdiff < epsilon, 0.000100, tdiff)
+        self.prmx.data[:] = (
+            (self.tmaxf.data - self.tmax_allsnow[month_ind]) / tdiff
         ) * self.adjmix_rain[month_ind]
+
+        self.prmx.data[:] = np.where(
+            self.prmx.data < zero, zero, self.prmx.data
+        )
+        self.prmx.data[:] = np.where(self.prmx.data > one, one, self.prmx.data)
         del tdiff
 
-        wh_all_snow = np.where(self._tmaxf <= self.tmax_allsnow[month_ind])
         wh_all_rain = np.where(
             np.logical_or(
-                self._tminf > self.tmax_allsnow[month_ind],
-                self._tmaxf >= tmax_allrain[month_ind],
+                self.tminf.data > self.tmax_allsnow[month_ind],
+                self.tmaxf.data >= tmax_allrain[month_ind],
             )
         )
-        self._prmx[wh_all_rain] = one
-        self._prmx[wh_all_snow] = zero
+        self.prmx.data[wh_all_rain] = one
+
+        wh_all_snow = np.where(self.tmaxf.data <= self.tmax_allsnow[month_ind])
+        self.prmx.data[wh_all_snow] = zero
+
+        # This is in climate_hru as a condition of calling climateflow
+        # (eye roll)
+        self.prmx.data[:] = np.where(
+            ivd["prcp"].data <= zero, zero, self.prmx.data
+        )
+
+        self.pptmix.data[:] = np.where(
+            (self.prmx.data > zero) & (self.prmx.data < one), 1, 0
+        )
 
         # Recalculate/redefine these now based on prmx instead of the
         # temperature logic
-        wh_all_snow = np.where(self._prmx <= zero)
-        wh_all_rain = np.where(self._prmx >= one)
+        wh_all_snow = np.where(self.prmx.data <= zero)
+        wh_all_rain = np.where(self.prmx.data >= one)
 
         # Mixed case (everywhere, to be overwritten by the all-snow/rain-fall
         # cases)
-        self._hru_ppt = self.prcp * self.snow_cbh_adj[month_ind]
-        self._hru_rain = self._prmx * self._hru_ppt
-        self._hru_snow = self._hru_ppt - self._hru_rain
+        self.hru_ppt.data[:] = ivd["prcp"].data * self.snow_cbh_adj[month_ind]
+        self.hru_rain.data[:] = self.prmx.data * self.hru_ppt.data
+        self.hru_snow.data[:] = self.hru_ppt.data - self.hru_rain.data
 
         # All precip is snow case
         # The condition to be used later:
-        self._hru_ppt[wh_all_snow] = (
-            self.prcp * self.snow_cbh_adj[month_ind]
+        self.hru_ppt.data[wh_all_snow] = (
+            ivd["prcp"].data * self.snow_cbh_adj[month_ind]
         )[wh_all_snow]
-        self._hru_snow[wh_all_snow] = self._hru_ppt[wh_all_snow]
-        self._hru_rain[wh_all_snow] = zero
+        self.hru_snow.data[wh_all_snow] = self.hru_ppt.data[wh_all_snow]
+        self.hru_rain.data[wh_all_snow] = zero
 
         # All precip is rain case
         # The condition to be used later:
-        self._hru_ppt[wh_all_rain] = (
-            self.prcp * self.rain_cbh_adj[month_ind]
+        self.hru_ppt.data[wh_all_rain] = (
+            ivd["prcp"].data * self.rain_cbh_adj[month_ind]
         )[wh_all_rain]
-        self._hru_rain[wh_all_rain] = self._hru_ppt[wh_all_rain]
-        self._hru_snow[wh_all_rain] = zero
+        self.hru_rain.data[wh_all_rain] = self.hru_ppt.data[wh_all_rain]
+        self.hru_snow.data[wh_all_rain] = zero
         return
 
     def calculate_sw_rad_degree_day(self) -> None:
@@ -357,13 +454,15 @@ def calculate_sw_rad_degree_day(self) -> None:
             "hru_area",
         )
         for name in solar_param_names:
-            solar_params[name] = self.solar_geom[name]
-
-        self._swrad = self._ddsolrad_run(
-            dates=self._datetime,
-            tmax_hru=self._tmaxf,
-            hru_ppt=self._hru_ppt,
-            soltab_potsw=self.solar_geom._soltab_potsw,
+            solar_params[name] = self[name]
+
+        ivd = self._input_variables_dict
+        self.swrad.data[:], self.orad_hru.data[:] = self._ddsolrad_run(
+            dates=self._time,
+            tmax_hru=self.tmaxf.data,
+            hru_ppt=self.hru_ppt.data,
+            soltab_potsw=ivd["soltab_potsw"].data,
+            soltab_horad_potsw=ivd["soltab_horad_potsw"].data,
             **solar_params,
         )
 
@@ -376,6 +475,7 @@ def _ddsolrad_run(
         tmax_hru: np.ndarray,  # [n_time, n_hru]
         hru_ppt: np.ndarray,  # [n_time, n_hru]
         soltab_potsw: np.ndarray,  # [n_time, n_hru] ??
+        soltab_horad_potsw: np.ndarray,  # [n_time, n_hru] ??
         radadj_intcp,  # param [12, n_hru]
         radadj_slope,  # "    "
         tmax_index,
@@ -390,7 +490,7 @@ def _ddsolrad_run(
         radj_wppt,
         hru_lat,
         hru_area,
-    ) -> np.ndarray:  # [n_time, n_hru]
+    ) -> (np.ndarray, np.ndarray):  # [n_time, n_hru]
 
         # https://github.com/nhm-usgs/prms/blob/6.0.0_dev/src/prmslib/physics/sm_solar_radiation_degday.f90
         n_time, n_hru = tmax_hru.shape
@@ -516,7 +616,8 @@ def doy_to_daily(arr):
             radadj[wh_radadj_lt_2_tenths] = 0.2
 
         swrad = doy_to_daily(soltab_potsw) * radadj / hru_cossl
-        return swrad
+        orad_hru = radadj * doy_to_daily(soltab_horad_potsw)
+        return swrad, orad_hru
 
     # https://github.com/nhm-usgs/prms/blob/6.0.0_dev/src/prmslib/physics/sm_potet_jh.f90
 
@@ -524,27 +625,27 @@ def calculate_potential_et_jh(self) -> None:
         """Calculate potential evapotranspiration following Jensen and Haise
         (1963)."""
 
-        self._potet = self._potet_jh_run(
-            dates=self._datetime,
-            tmax_hru=self._tmaxf,
-            tmin_hru=self._tminf,
-            swrad=self._swrad,
+        self.potet.data[:] = self._potet_jh_run(
+            dates=self._time,
+            tavgc=self.tavgc.data,
+            swrad=self.swrad.data,
             jh_coef=self.jh_coef,
             jh_coef_hru=self.jh_coef_hru,
         )
-
         return
 
     @staticmethod
-    def _potet_jh_run(dates, tmax_hru, tmin_hru, swrad, jh_coef, jh_coef_hru):
-        n_time, n_hru = tmax_hru.shape
+    def _potet_jh_run(dates, tavgc, swrad, jh_coef, jh_coef_hru):
+        """This code mixes celcius and fahrenheit units in its calculation"""
+
+        n_time, n_hru = tavgc.shape
 
         # The vector
         month = (dates.astype("datetime64[M]").astype(int) % 12) + 1
         month = tile_time_to_space(month, n_hru)
-        tavg_f = (tmax_hru + tmin_hru) / 2.0
-        tavg_c = (tavg_f - 32.0) * 5 / 9  # f_to_c
-        elh = (597.3 - (0.5653 * tavg_c)) * inch2cm
+        tavgf = (tavgc * 9 / 5) + 32
+
+        elh = (597.3 - (0.5653 * tavgc)) * inch2cm
 
         # JLM: move this out?
         def monthly_to_daily(arr):
@@ -553,7 +654,7 @@ def monthly_to_daily(arr):
         jh_coef_day = monthly_to_daily(jh_coef)
         jh_coef_hru_day = tile_space_to_time(jh_coef_hru, n_time)
 
-        potet = jh_coef_day * (tavg_f - jh_coef_hru_day) * swrad / elh
+        potet = jh_coef_day * (tavgf - jh_coef_hru_day) * swrad / elh
         cond_potet_lt_zero = potet < zero
         wh_cond = np.where(cond_potet_lt_zero)
         if len(wh_cond[0]):
@@ -571,6 +672,99 @@ def monthly_to_daily(arr):
     #     self.pot_et_consumed += et
     #     return et
 
+    def calculate_transp_tindex(self):
+
+        # INIT: Process_flag==INIT
+        # transp_on inited to 0 everywhere above
+
+        # candidate for worst code lines
+        if self.control.params.parameters["temp_units"] == 0:
+            transp_tmax_f = self.transp_tmax
+        else:
+            transp_tmax_f = (self.transp_tmax * (9.0 / 5.0)) + 32.0
+
+        transp_check = self.transp_on.current.copy()  # dim nhrus only
+        tmax_sum = self.transp_on.current.copy().astype(
+            "float64"
+        )  # dim nhrus only
+        start_day = self.control.start_doy
+        start_month = self.control.start_month
+
+        months_per_year = 12
+        motmp = start_month + months_per_year
+
+        for hh in range(self.nhru):
+            if start_month == self.transp_beg[hh]:
+                # rsr, why 10? if transp_tmax < 300, should be < 10
+                if start_day > 10:
+                    self.transp_on.data[0, hh] = 1
+                else:
+                    transp_check[hh] = 1
+
+            elif self.transp_end[hh] > self.transp_beg[hh]:
+                if (start_month > self.transp_beg[hh]) and (
+                    start_month < self.transp_end[hh]
+                ):
+                    self.transp_on.data[0, hh] = 1
+            else:
+                if (start_month > self.transp_beg[hh]) or (
+                    motmp < self.transp_end[hh] + months_per_year
+                ):
+                    self.transp_on.data[0, hh] = 1
+
+        # vectorize
+        ntime = self.transp_on.data.shape[0]
+        # _transp_check = self.transp_on.data.copy()
+        # self._transp_beg = tile_space_to_time(self.transp_beg, ntime)
+        # self._transp_end = tile_space_to_time(self.transp_end, ntime)
+
+        # RUN: Process_flag == RUN
+        # Set switch for active transpiration period
+        for tt in range(ntime):
+            for hh in range(self.nhru):
+                if tt > 0:
+                    self.transp_on.data[tt, hh] = self.transp_on.data[
+                        tt - 1, hh
+                    ]
+
+                # if tt == 2 and hh == 980:
+                #      asdf
+
+                # check for month to turn check switch on or
+                # transpiration switch off
+
+                if self._doy[tt] == 1:
+                    # check for end of period
+                    if self._month[tt] == self.transp_end[hh]:
+                        self.transp_on.data[tt, hh] = 0
+                        transp_check[hh] = 0
+                        tmax_sum[hh] = zero
+
+                    # <
+                    # check for month to turn transpiration switch on or off
+                    if self._month[tt] == self.transp_beg[hh]:
+                        transp_check[hh] = 1
+                        tmax_sum[hh] = zero
+
+                # <<
+                # If in checking period, then for each day
+                # sum maximum temperature until greater than temperature index
+                # parameter, at which time, turn transpiration switch on, check
+                # switch off freezing temperature assumed to be 32 degrees
+                # Fahrenheit
+                if transp_check[hh] == 1:
+                    if self.tmaxf.data[tt, hh] > 32.0:
+                        tmax_sum[hh] = tmax_sum[hh] + self.tmaxf.data[tt, hh]
+
+                    # <
+                    if tmax_sum[hh] > transp_tmax_f[hh]:
+                        self.transp_on.data[tt, hh] = 1
+                        transp_check[hh] = 0
+                        tmax_sum[hh] = 0.0
+
+        # <<<
+        return
+
     def _write_netcdf_timeseries(self) -> None:
         for var in self.variables:
             nc_path = self.netcdf_output_dir / f"{var}.nc"
@@ -580,8 +774,10 @@ def _write_netcdf_timeseries(self) -> None:
                 [var],
                 {var: self.var_meta[var]},
             )
-            nc.add_all_data(var, self[f"_{var}"], self._datetime)
+            nc.add_all_data(var, self[var].data, self._time)
             nc.close()
             assert nc_path.exists()
             print(f"Wrote preprocessed forcing file: {nc_path}")
+
+        self._output_netcdf = False
         return
diff --git a/pynhm/atmosphere/PRMSSolarGeometry.py b/pynhm/atmosphere/PRMSSolarGeometry.py
index 2f39acce..acd2ceba 100644
--- a/pynhm/atmosphere/PRMSSolarGeometry.py
+++ b/pynhm/atmosphere/PRMSSolarGeometry.py
@@ -1,6 +1,6 @@
 import pathlib as pl
 import warnings
-from typing import Tuple, Union
+from typing import Tuple
 
 # from numba import jit
 import numpy as np
@@ -10,9 +10,9 @@
 from pynhm.utils.netcdf_utils import NetCdfWrite
 
 from ..base.control import Control
-from ..constants import epsilon32, nan, one, zero
+from ..constants import epsilon32, fileish, nan, one, zero
 from ..utils.prms5util import load_soltab_debug
-from .solar_constants import (  # eccentricy,; julian_days,; n_days_per_year_flt,; obliquity,; r0,; rad_day,
+from .solar_constants import (
     n_days_per_year,
     pi,
     pi_12,
@@ -21,9 +21,10 @@
     two_pi,
 )
 
-fileish = Union[str, pl.Path]
 epsilon = epsilon32
 
+doy = np.arange(366) + 1
+
 # The solar geometry model for NHM/PRMS
 # Primary reference
 # * Appendix E of Dingman, S. L., 1994,
@@ -41,8 +42,6 @@ def tile_space_to_time(arr: np.ndarray) -> np.ndarray:
 # def tile_time_to_space(arr: np.ndarray, n_hru) -> np.ndarray:
 #    return np.transpose(np.tile(arr, (n_hru, 1)))
 
-# trying to not subclass storageUnit
-
 
 class PRMSSolarGeometry(StorageUnit):
     def __init__(
@@ -59,30 +58,33 @@ def __init__(
         budget_type = None
         self.set_budget(budget_type)
         self.netcdf_output_dir = netcdf_output_dir
+        self._time = doy
 
         super().__init__(control=control, verbose=verbose)
         self.name = "PRMSSolarGeometry"
 
         if from_prms_file:
             (
-                self._soltab_potsw,
-                self._soltab_horad_potsw,
-                self._soltab_sunhrs,
+                self.soltab_potsw.data[:],
+                self.soltab_horad_potsw.data[:],
+                self.soltab_sunhrs.data[:],
             ) = load_soltab_debug(from_prms_file)
 
         elif from_nc_files_dir:
             raise NotImplementedError()
 
-        else:
-            # compute
-            self._hru_cossl = np.cos(np.arctan(self["hru_slope"]))
-            self._compute_solar_geometry()
+        self._calculated = False
 
         if self.netcdf_output_dir:
+            self._output_netcdf = True
+            self._calculate_all_time()
             self.netcdf_output_dir = pl.Path(netcdf_output_dir)
             assert self.netcdf_output_dir.exists()
             self._write_netcdf_timeseries()
 
+        else:
+            self._output_netcdf = False
+
         return
 
     @staticmethod
@@ -114,6 +116,7 @@ def get_init_values() -> dict:
     @staticmethod
     def get_parameters() -> tuple:
         return (
+            "doy",
             "nhru",
             "radadj_intcp",
             "radadj_slope",
@@ -135,9 +138,10 @@ def get_parameters() -> tuple:
     def set_initial_conditions(self):
         return
 
-    def _compute_solar_geometry(self):
+    def _calculate_all_time(self):
+        self._hru_cossl = np.cos(np.arctan(self["hru_slope"]))
         # The potential radiation on horizontal surfce
-        self._soltab_horad_potsw, _ = self.compute_soltab(
+        self.soltab_horad_potsw.data[:], _ = self.compute_soltab(
             np.zeros(self["nhru"]),
             np.zeros(self["nhru"]),
             self["hru_lat"],
@@ -146,7 +150,10 @@ def _compute_solar_geometry(self):
         )
 
         # The potential radiaton given slope and aspect
-        self._soltab_potsw, self._soltab_sunhrs = self.compute_soltab(
+        (
+            self.soltab_potsw.data[:],
+            self.soltab_sunhrs.data[:],
+        ) = self.compute_soltab(
             self["hru_slope"],
             self["hru_aspect"],
             self["hru_lat"],
@@ -154,6 +161,7 @@ def _compute_solar_geometry(self):
             self.func3,
         )
 
+        self._calculated = True
         return
 
     def _advance_variables(self):
@@ -163,6 +171,9 @@ def _advance_variables(self):
             None
 
         """
+        if not self._calculated:
+            self._calculate_all_time()
+            self._write_netcdf_timeseries()
         return
 
     def _calculate(self, time_length):
@@ -177,9 +188,6 @@ def _calculate(self, time_length):
             None
 
         """
-        iday = self.control.current_doy - 1
-        for var in self.variables:
-            self[var][:] = self[f"_{var}"][iday, :]
         return
 
     # @jit
@@ -414,6 +422,8 @@ def func3(
         return f3
 
     def _write_netcdf_timeseries(self) -> None:
+        if not self._output_netcdf:
+            return
         for var in self.variables:
             nc_path = self.netcdf_output_dir / f"{var}.nc"
             nc = NetCdfWrite(
@@ -424,11 +434,26 @@ def _write_netcdf_timeseries(self) -> None:
             )
             nc.add_all_data(
                 var,
-                self[f"_{var}"],
-                np.arange(366) + 1,
+                self[var].data,
+                self._time,
                 time_coord="doy",
             )
             nc.close()
             assert nc_path.exists()
             print(f"Wrote file: {nc_path}")
+
+        self._output_netcdf = False
+        return
+
+    def initialize_netcdf(self, dir):
+        self.netcdf_output_dir = dir
+        self._output_netcdf = True
+        return
+
+    def output(self):
+        if self._output_netcdf:
+            if self.verbose:
+                print(f"writing FULL timeseries output for: {self.name}")
+            self._write_netcdf_timeseries()
+            self._output_netcdf = False
         return
diff --git a/pynhm/atmosphere/__init__.py b/pynhm/atmosphere/__init__.py
index e69de29b..e3fb130a 100644
--- a/pynhm/atmosphere/__init__.py
+++ b/pynhm/atmosphere/__init__.py
@@ -0,0 +1,2 @@
+from .PRMSAtmosphere import PRMSAtmosphere
+from .PRMSSolarGeometry import PRMSSolarGeometry
diff --git a/pynhm/base/__init__.py b/pynhm/base/__init__.py
index 8b137891..c7cfefa0 100644
--- a/pynhm/base/__init__.py
+++ b/pynhm/base/__init__.py
@@ -1,1 +1,7 @@
-
+from .accessor import Accessor
+from .adapter import Adapter
+from .budget import Budget
+from .control import Control
+from .model import Model
+from .storageUnit import StorageUnit
+from .timeseries import TimeseriesArray
diff --git a/pynhm/base/adapter.py b/pynhm/base/adapter.py
index 68532a92..bfa3230d 100644
--- a/pynhm/base/adapter.py
+++ b/pynhm/base/adapter.py
@@ -4,10 +4,10 @@
 import numpy as np
 
 from pynhm.base.control import Control
+from pynhm.base.timeseries import TimeseriesArray
+from pynhm.constants import fileish
 from pynhm.utils.netcdf_utils import NetCdfRead
 
-fileish = Union[str, pl.Path]
-
 
 class Adapter:
     def __init__(
@@ -40,19 +40,22 @@ def __init__(
         self.name = "AdapterNetcdf"
 
         self._fname = fname
-        self._dataset = NetCdfRead(fname)
+        self._nc_read = NetCdfRead(fname)
+
+        self.data = self._nc_read.dataset[self._variable][:].data
+        self.time = self._nc_read.times
 
         self.control = control
         self._start_time = self.control.start_time
-        self._current_value = control.get_var_nans(self._variable)
+        self._current_value = control.get_var_nans(
+            self._variable, drop_time_dim=True
+        )
         return
 
     def advance(self):
-        # JLM: Seems like the time of the ncdf dataset or variable
-        # should be public
-        if self._dataset._itime_step[self._variable] > self.control.itime_step:
+        if self._nc_read._itime_step[self._variable] > self.control.itime_step:
             return
-        self._current_value[:] = self._dataset.advance(
+        self._current_value[:] = self._nc_read.advance(
             self._variable, self.control.current_time
         )
         return None
@@ -95,9 +98,13 @@ def adapter_factory(
             )
 
     elif isinstance(var, np.ndarray) and len(var.shape) == 1:
-        """One-D np.ndarrays"""
+        """Adapt 1-D np.ndarrays"""
         return AdapterOnedarray(var, variable=variable_name)
 
+    elif isinstance(var, TimeseriesArray):
+        """Adapt TimeseriesArrays as is."""
+        return var
+
     elif var is None:
         """var is specified as None so return None"""
         return None
diff --git a/pynhm/base/budget.py b/pynhm/base/budget.py
index d9d15811..f9b22244 100644
--- a/pynhm/base/budget.py
+++ b/pynhm/base/budget.py
@@ -23,7 +23,6 @@ def __init__(
         inputs: Union[list, dict],
         outputs: Union[list, dict],
         storage_changes: Union[list, dict],
-        meta: dict = None,
         init_accumulations: dict = None,
         accum_start_time: np.datetime64 = None,
         units: str = None,
@@ -40,7 +39,6 @@ def __init__(
         self.inputs = self.init_component(inputs)
         self.outputs = self.init_component(outputs)
         self.storage_changes = self.init_component(storage_changes)
-        self.meta = meta
         self.time_unit = time_unit
         self.description = description
         self.rtol = rtol
@@ -111,31 +109,10 @@ def set(self, data: dict):
 
     @classmethod
     def from_storage_unit(cls, storage_unit, **kwargs):
-        # assemble the meta data, which will determine the budget component
-        # variables
-        components = cls.get_components()
-
-        # kwargs["control"] = storage_unit.control
-        kwargs["meta"] = {}
-
-        meta_obj = {
-            "inputs": ("input_meta", "mass flux"),
-            "outputs": ("var_meta", "mass flux"),
-            "storage_changes": ("var_meta", "mass storage change"),
-        }
-        for comp in components:
-            kwargs["meta"][comp] = {
-                key: val
-                for key, val in storage_unit[meta_obj[comp][0]].items()
-                if (
-                    ("var_category" in val.keys())
-                    and (val["var_category"] == meta_obj[comp][1])
-                )
-            }
-
-        for component in components:
+        mass_budget_terms = storage_unit.get_mass_budget_terms()
+        for component in mass_budget_terms.keys():
             kwargs[component] = {}
-            for var in kwargs["meta"][component].keys():
+            for var in mass_budget_terms[component]:
                 kwargs[component][var] = storage_unit[var]
 
         return Budget(storage_unit.control, **kwargs)
diff --git a/pynhm/base/control.py b/pynhm/base/control.py
index 80945eab..07900461 100644
--- a/pynhm/base/control.py
+++ b/pynhm/base/control.py
@@ -1,13 +1,12 @@
 """The control class."""
-
-import pathlib as pl
-from typing import Union
+import datetime
 
 import numpy as np
 
 from pynhm.utils.parameters import PrmsParameters
 
-from ..base.meta import Meta
+from ..base import meta
+from ..constants import fileish
 from ..utils import ControlVariables
 from ..utils.time_utils import (
     datetime_dowy,
@@ -17,8 +16,6 @@
 )
 from .accessor import Accessor
 
-fileish = Union[str, pl.PosixPath]
-
 
 class Control(Accessor):
     """The control class."""
@@ -37,7 +34,8 @@ def __init__(
         """Initialize time with data and parameters.
 
         Args:
-            start_time: this is the first time of integration NOT the restart time
+            start_time: this is the first time of integration NOT the restart
+                time
             end_time: the last integration time
             time_step: the length fo the time step
             config: a PRMS config file to read and use for contorl
@@ -72,7 +70,7 @@ def __init__(
         self.config = config
         self.params = params
 
-        self.meta = Meta()
+        self.meta = meta
         # This will have the time dimension name
         # This will have the time coordimate name
 
@@ -82,7 +80,7 @@ def load(
         control_file: fileish,
         params: PrmsParameters = None,
         verbosity: int = 0,
-    ) -> "Time":
+    ) -> "Control":
         """Initialize a control object from a PRMS control file
 
         Args:
@@ -109,6 +107,11 @@ def current_time(self):
         """Get the current time."""
         return self._current_time
 
+    @property
+    def current_datetime(self):
+        """Get the current time as a datetime.datetime object"""
+        return self._current_time.astype(datetime.datetime)
+
     @property
     def current_year(self):
         """Get the current year."""
@@ -131,7 +134,7 @@ def current_dowy(self):
 
     @property
     def previous_time(self):
-        """Get the previous time."""
+        """The previous time."""
         return self._previous_time
 
     @property
@@ -141,7 +144,7 @@ def itime_step(self):
 
     @property
     def time_step(self):
-        """Get the time step."""
+        """The time step"""
         return self._time_step
 
     @property
@@ -151,21 +154,31 @@ def init_time(self):
 
     @property
     def start_time(self):
-        """Get the simulation start time"""
+        """The simulation start time"""
         return self._start_time
 
+    @property
+    def start_doy(self):
+        """The simulation start day of year"""
+        return datetime_doy(self._start_time)
+
+    @property
+    def start_month(self):
+        """The simulation start month"""
+        return datetime_month(self._start_time)
+
     @property
     def end_time(self):
-        """Get the simulation end time"""
+        """The simulation end time"""
         return self._end_time
 
     @property
     def n_times(self):
-        """Get the number of times"""
+        """The number of time steps"""
         return self._n_times
 
     def advance(self):
-        """Advance time."""
+        """Advance time"""
         if self._current_time == self._end_time:
             raise ValueError("End of time reached")
 
@@ -180,9 +193,16 @@ def advance(self):
 
         return None
 
-    def get_var_nans(self, var_name):
+    def get_var_nans(self, var_name: str, drop_time_dim: bool = None):
         """Get an array filled with nans for a given variable"""
         var_dims = self.meta.get_dimensions(var_name)[var_name]
+        if drop_time_dim:
+            # This accomodates Timeseries like objects that need to init both
+            # full rank and reduced rank versions of their data
+            # this is pretty adhoc
+            check_list = ["time", "doy"]
+            if len([mm for mm in check_list if mm in var_dims[0]]):
+                del var_dims[0]
         var_dim_sizes = [self.params.parameters[vv] for vv in var_dims]
         var_type = self.meta.get_numpy_types(var_name)[var_name]
         return np.full(var_dim_sizes, np.nan, var_type)
diff --git a/pynhm/base/meta.py b/pynhm/base/meta.py
index 53782264..7e354d13 100644
--- a/pynhm/base/meta.py
+++ b/pynhm/base/meta.py
@@ -6,9 +6,16 @@
 
 from ..constants import __pynhm_root__
 
-fileish = Union[str, pl.Path]
 varoptions = Union[str, list, tuple]
 
+"""Metadata are static, there is no point in a class"""
+
+
+dims_file = __pynhm_root__ / "static/metadata/dimensions.yaml"
+control_file = __pynhm_root__ / "static/metadata/control.yaml"
+params_file = __pynhm_root__ / "static/metadata/parameters.yaml"
+vars_file = __pynhm_root__ / "static/metadata/variables.yaml"
+
 
 def load_yaml_file(the_file: pl.Path) -> dict:
     """Load a yaml file
@@ -25,6 +32,12 @@ def load_yaml_file(the_file: pl.Path) -> dict:
     return data
 
 
+dimensions = load_yaml_file(dims_file)
+control = load_yaml_file(control_file)
+parameters = load_yaml_file(params_file)
+variables = load_yaml_file(vars_file)
+
+
 def meta_netcdf_type(meta_item: dict) -> str:
     """Get the NetCDF data type for a variable
 
@@ -36,13 +49,13 @@ def meta_netcdf_type(meta_item: dict) -> str:
 
     """
     type_str = meta_type(meta_item)
-    if type_str == "I":
+    if type_str == "int32":
         netcdf_type_str = "i4"
-    elif type_str == "B":
+    elif type_str == "bool":
         netcdf_type_str = "i4"
-    elif type_str == "F":
+    elif type_str == "float32":
         netcdf_type_str = "f4"
-    elif type_str == "D":
+    elif type_str == "float64":
         netcdf_type_str = "f8"
     else:
         raise ValueError(f"invalid metadata type '{type_str}'")
@@ -60,14 +73,14 @@ def meta_numpy_type(meta_item: dict) -> str:
 
     """
     type_str = meta_type(meta_item)
-    if type_str == "I":
-        numpy_type_str = int
-    elif type_str == "B":
+    if type_str == "int32":
         numpy_type_str = int
-    elif type_str == "F":
+    elif type_str == "bool":
+        numpy_type_str = bool
+    elif type_str == "float32":
         numpy_type_str = np.float32
-    elif type_str == "D":
-        numpy_type_str = float
+    elif type_str == "float64":
+        numpy_type_str = np.float64
     else:
         raise ValueError(f"invalid metadata type '{type_str}'")
     return numpy_type_str
@@ -99,133 +112,129 @@ def meta_dimensions(meta_item: dict) -> list:
     return list(meta_item["dimensions"].values())
 
 
-class Meta:
-    def __init__(
-        self,
-        dimensions: fileish = (
-            __pynhm_root__ / "static/metadata/dimensions.yaml"
-        ),
-        control: fileish = (__pynhm_root__ / "static/metadata/control.yaml"),
-        parameters: fileish = (
-            __pynhm_root__ / "static/metadata/parameters.yaml"
-        ),
-        variables: fileish = (
-            __pynhm_root__ / "static/metadata/variables.yaml"
-        ),
+def is_available(variable_name: str) -> bool:
+    """Determine if a variable is available in the meta data
+
+    Args:
+        variable_name: variable name
+
+    Returns:
+        avail: boolean indicating of the variable name is available
+
+    """
+    if (
+        variable_name in variables.keys()
+        or variable_name in dimensions.keys()
+        or variable_name in control.keys()
+        or variable_name in parameters.keys()
     ):
+        avail = True
+    else:
+        avail = False
+    return avail
+
+
+def _get_meta_in_list(meta_dict: dict, the_list: Iterable) -> dict:
+    return {key: value for key, value in meta_dict.items() if key in the_list}
+
+
+def get_dims(var_list: Iterable) -> dict:
+    """Get the variable metadata for the supplied subclass."""
+    return _get_meta_in_list(dimensions, var_list)
+
+
+def get_control(var_list: Iterable) -> dict:
+    """Get the variable metadata for the supplied subclass."""
+    return _get_meta_in_list(control, var_list)
+
+
+def get_params(inputs_list: Iterable) -> dict:
+    """Get the variable metadata for the supplied subclass."""
+    return _get_meta_in_list(parameters, inputs_list)
+
 
-        self.name = "Meta"
-
-        print(dimensions)
-
-        self.dimensions = load_yaml_file(dimensions)
-        self.control = load_yaml_file(control)
-        self.parameters = load_yaml_file(parameters)
-        self.variables = load_yaml_file(variables)
-
-        return
-
-    def is_available(self, variable_name: str) -> bool:
-        """Determine if a variable is available in the meta data
-
-        Args:
-            variable_name: variable name
-
-        Returns:
-            avail: boolean indicating of the variable name is available
-
-        """
-        if (
-            variable_name in self.variables.keys()
-            or variable_name in self.dimensions.keys()
-            or variable_name in self.control.keys()
-            or variable_name in self.parameters.keys()
-        ):
-            avail = True
-        else:
-            avail = False
-        return avail
-
-    def _get_meta_in_list(self, meta: str, the_list: Iterable) -> dict:
-        return {
-            key: value
-            for key, value in getattr(self, meta).items()
-            if key in the_list
-        }
-
-    def get_dims(self, var_list: Iterable) -> dict:
-        """Get the variable metadata for the supplied subclass."""
-        return self._get_meta_in_list("dimensions", var_list)
-
-    def get_control(self, var_list: Iterable) -> dict:
-        """Get the variable metadata for the supplied subclass."""
-        return self._get_meta_in_list("control", var_list)
-
-    def get_params(self, inputs_list: Iterable) -> dict:
-        """Get the variable metadata for the supplied subclass."""
-        return self._get_meta_in_list("parameters", inputs_list)
-
-    def get_vars(self, var_list: Iterable) -> dict:
-        """Get the variable metadata for the supplied subclass."""
-        return self._get_meta_in_list("variables", var_list)
-
-    def get_dimensions(
-        self,
-        variables: varoptions,
-    ) -> dict:
-        """
-        Get the dimensions strings for one or more variables for a specific
-        metadata data type.
-
-        Args:
-            variables: variable name(s)
-
-        Returns:
-            dimensions: dictionary with dimension strings for each variable
-
-        """
-        if isinstance(variables, str):
-            variables = [variables]
-        variable_dict = self.find_variables(variables)
-        return {
-            key: [dimension for tag, dimension in value["dimensions"].items()]
-            for key, value in variable_dict.items()
-        }
-
-    def find_variables(self, variables: varoptions) -> dict:
-        """
-        Find metadata for variables from variable, dimensions, control, and
-        parameter metadata types.
-
-        Args:
-            variables: select variable names
-
-        Returns:
-            variable_dict: metadata for select variable names. An empty
-            dictionary will be returned if the select variable names are not
-            found.
-
-        """
-        if isinstance(variables, str):
-            variables = [variables]
-        variable_dict = {}
-        for variable_name in variables:
-            if variable_name in self.variables.keys():
-                variable_dict[variable_name] = self.variables[variable_name]
-            elif variable_name in self.dimensions.keys():
-                variable_dict[variable_name] = self.dimensions[variable_name]
-            elif variable_name in self.control.keys():
-                variable_dict[variable_name] = self.control[variable_name]
-            elif variable_name in self.parameters.keys():
-                variable_dict[variable_name] = self.parameters[variable_name]
-        return variable_dict
-
-    def get_types(self, variables: Iterable) -> dict:
-        """Get the types for the supplied variables."""
-        vars = self.find_variables(variables)
-        return {kk: meta_type(vv) for kk, vv in vars.items()}
-
-    def get_numpy_types(self, variables: Iterable) -> dict:
-        """Get the types for the supplied variables."""
-        vars = self.find_variables(variables)
-        return {kk: meta_numpy_type(vv) for kk, vv in vars.items()}
+def get_vars(var_list: Iterable) -> dict:
+    """Get the variable metadata for the supplied subclass."""
+    return _get_meta_in_list(variables, var_list)
+
+
+# repeat this for dims, control, params as needed. or refactor to DRY.
+def filter_vars(var_list: Iterable, key, vals=None) -> dict:
+    return _filter_dict(get_vars(var_list), key, vals)
+
+
+def _filter_dict(meta_dict, key, vals=None) -> dict:
+    if not isinstance(vals, list):
+        vals = [vals]
+    result = {}
+    for name, meta in meta_dict.items():
+        if key in meta:
+            if not vals:
+                result[name] = meta
+            elif meta[key] in vals:
+                result[name] = meta
+    return result
+
+
+def get_dimensions(
+    vars: varoptions,
+) -> dict:
+    """
+    Get the dimensions strings for one or more variables for a specific
+    metadata data type.
+
+    Args:
+        vars: variable name(s)
+
+    Returns:
+        dimensions: dictionary with dimension strings for each variable
+
+    """
+    if isinstance(vars, str):
+        vars = [vars]
+    variable_dict = find_variables(vars)
+    return {
+        key: [dimension for tag, dimension in value["dimensions"].items()]
+        for key, value in variable_dict.items()
+    }
+
+
+def find_variables(vars: varoptions) -> dict:
+    """
+    Find metadata for variables from variable, dimensions, control, and
+    parameter metadata types.
+
+    Args:
+        variables: select variable names
+
+    Returns:
+        variable_dict: metadata for select variable names. An empty
+        dictionary will be returned if the select variable names are not
+        found.
+
+    """
+    if isinstance(vars, str):
+        vars = [vars]
+    variable_dict = {}
+    for variable_name in vars:
+        if variable_name in variables.keys():
+            variable_dict[variable_name] = variables[variable_name]
+        elif variable_name in dimensions.keys():
+            variable_dict[variable_name] = dimensions[variable_name]
+        elif variable_name in control.keys():
+            variable_dict[variable_name] = control[variable_name]
+        elif variable_name in parameters.keys():
+            variable_dict[variable_name] = parameters[variable_name]
+    return variable_dict
+
+
+def get_types(variables: Iterable) -> dict:
+    """Get the types for the supplied variables."""
+    vars = find_variables(variables)
+    return {kk: meta_type(vv) for kk, vv in vars.items()}
+
+
+def get_numpy_types(variables: Iterable) -> dict:
+    """Get the types for the supplied variables."""
+    vars = find_variables(variables)
+    return {kk: meta_numpy_type(vv) for kk, vv in vars.items()}
diff --git a/pynhm/base/model.py b/pynhm/base/model.py
index 3cbbe935..7954719b 100644
--- a/pynhm/base/model.py
+++ b/pynhm/base/model.py
@@ -1,17 +1,15 @@
-import re
+import math
 from copy import deepcopy
-from pprint import pprint
-
-import numpy as np
 
 from pynhm.base.adapter import adapter_factory
 from pynhm.base.control import Control
+from pynhm.constants import fileish
 
 
 class Model:
     def __init__(
         self,
-        *component_classes,
+        *process_classes,
         control: Control,
         input_dir: str = None,
         budget_type: str = "strict",  # also pass dict
@@ -22,7 +20,7 @@ def __init__(
         self.input_dir = input_dir
         self.verbose = verbose
 
-        class_dict = {comp.__name__: comp for comp in component_classes}
+        class_dict = {comp.__name__: comp for comp in process_classes}
         class_inputs = {kk: vv.get_inputs() for kk, vv in class_dict.items()}
         class_vars = {kk: vv.get_variables() for kk, vv in class_dict.items()}
 
@@ -48,12 +46,12 @@ def __init__(
                         # this should be a list of length one
                         # check?
 
-        # determine component order
+        # determine process order
         # for now this is sufficient. when more classes exist, we can analyze
         # dependencies, might inputs_from_prev above.
-        component_order_prms = [
+        process_order_prms = [
             "PRMSSolarGeometry",
-            "PRMSBoundaryLayer",
+            "PRMSAtmosphere",
             "PRMSCanopy",
             "PRMSSnow",
             "PRMSRunoff",
@@ -62,78 +60,124 @@ def __init__(
             "PRMSGroundwater",
             "PRMSChannel",
         ]
-        self.component_order = []
-        for comp in component_order_prms:
+        self.process_order = []
+        for comp in process_order_prms:
             if comp in class_dict.keys():
-                self.component_order += [comp]
+                self.process_order += [comp]
 
-        missing_components = set(self.component_order).difference(
+        missing_processes = set(self.process_order).difference(
             set(class_dict.keys())
         )
-        if missing_components:
+        if missing_processes:
             raise ValueError(
-                f"Component {missing_components} not currently "
+                f"Process {missing_processes} not currently "
                 f"handled by Model class."
             )
 
-        # If inputs dont come from other components, assume they come from
-        # file in input_dir
+        # If inputs dont come from other processes, assume they come from
+        # file in input_dir. Exception is that PRMSAtmosphere requires its
+        # files on init, so dont adapt these
         file_input_names = set([])
         for k0, v0 in inputs_from.items():
             for k1, v1 in v0.items():
                 if not v1:
                     file_input_names = file_input_names.union([k1])
 
-        # initiate the file inputs here rather than in the components
+        # initiate the file inputs here rather than in the processes
         file_inputs = {}
         for name in file_input_names:
             nc_path = input_dir / f"{name}.nc"
             file_inputs[name] = adapter_factory(nc_path, name, control=control)
 
-        # instantiate components: instance dict
-        self.components = {}
-        for component in self.component_order:
-            component_inputs = {
-                input: None for input in class_dict[component].get_inputs()
+        # instantiate processes: instance dict
+        self.processes = {}
+        for process in self.process_order:
+            process_inputs = {
+                input: None for input in class_dict[process].get_inputs()
             }
+
             # This is a hack. Need to make StorageUnit a subclass of a more
-            # general model/element/component class
+            # general model/element/process class
             args = {
                 "control": control,
-                **component_inputs,
+                **process_inputs,
             }
-            if component not in ["PRMSSolarGeometry"]:
+            if process not in ["PRMSSolarGeometry"]:
                 args["budget_type"] = budget_type
-            self.components[component] = class_dict[component](**args)
+            self.processes[process] = class_dict[process](**args)
 
-        for component in self.component_order:
-            print(f"{component}:")
-            for input, frm in inputs_from[component].items():
+        # Wire it up
+        self.process_input_from = {}
+        for process in self.process_order:
+            self.process_input_from[process] = {}
+            for input, frm in inputs_from[process].items():
                 if not frm:
-                    print(f"    {input}: from file")
-                    self.components[component].set_input_to_adapter(
+                    fname = file_inputs[input]._fname
+                    self.process_input_from[process][input] = fname
+                    self.processes[process].set_input_to_adapter(
                         input, file_inputs[input]
                     )
                 else:
-                    print(f"    {input}: from {frm}")
-                    self.components[component].set_input_to_adapter(
+                    self.process_input_from[process][input] = frm[0]
+                    self.processes[process].set_input_to_adapter(
                         input,
                         adapter_factory(
-                            self.components[frm[0]][input], control=control
+                            self.processes[frm[0]][input], control=control
                         ),  # drop list above
                     )
 
+        return
+
+    def initialize_netcdf(self, dir):
+        for cls in self.process_order:
+            self.processes[cls].initialize_netcdf(dir)
+        return
+
+    def run(self, netcdf_dir: fileish, finalize=True):
+
+        if netcdf_dir:
+            print("model.run(): initializing NetCDF output")
+            self.initialize_netcdf(netcdf_dir)
+
+        last_pct_comp = 0
+        print(f"model.run(): {last_pct_comp} % complete")
+
+        n_time_steps = self.control.n_times
+        for istep in range(n_time_steps):
+
+            # progress for the impatient
+            pct_complete = math.floor((istep + 1) / n_time_steps * 100)
+            if not (pct_complete % 10) and pct_complete != last_pct_comp:
+                last_pct_comp = pct_complete
+                print(f"model.run(): {pct_complete} % complete")
+
+            self.advance()
+            self.calculate()
+            self.output()
+
+        if finalize:
+            print("model.run(): finalizing")
+            self.finalize()
+
+        return
+
     def advance(self):
         self.control.advance()
-        for cls in self.component_order:
-            if self.verbose:
-                print(f"advancing component: {cls}")
-            self.components[cls].advance()
+        for cls in self.process_order:
+            self.processes[cls].advance()
         return
 
     def calculate(self):
-        for cls in self.component_order:
-            if self.verbose:
-                print(f"calculating component: {cls}")
-            self.components[cls].calculate(1.0)
+        for cls in self.process_order:
+            self.processes[cls].calculate(1.0)
+        return
+
+    def output(self):
+        for cls in self.process_order:
+            self.processes[cls].output()
+        return
+
+    def finalize(self):
+        for cls in self.process_order:
+            self.processes[cls].finalize()
         return
diff --git a/pynhm/base/storageUnit.py b/pynhm/base/storageUnit.py
index 8e94b2a4..01168edf 100644
--- a/pynhm/base/storageUnit.py
+++ b/pynhm/base/storageUnit.py
@@ -1,23 +1,18 @@
 import os
 import pathlib as pl
+from warnings import warn
 
 import numpy as np
 
+from pynhm.base import meta
 from pynhm.base.budget import Budget
 
 from ..base.adapter import Adapter, adapter_factory
+from ..base.timeseries import TimeseriesArray
 from ..utils.netcdf_utils import NetCdfWrite
 from .accessor import Accessor
 from .control import Control
 
-# These could be changed in the metadata yaml
-type_translation = {
-    "D": "float64",
-    "F": "float64",
-    "I": "int32",
-    "B": "bool",  # not used despite the popularity of "flags"
-}
-
 
 class StorageUnit(Accessor):
     def __init__(
@@ -30,7 +25,6 @@ def __init__(
         self.control = control
         self.params = self.control.params
         self.verbose = verbose
-        self._simulation_time = 0.0
 
         # netcdf output variables
         self._output_netcdf = False
@@ -52,6 +46,8 @@ def output(self) -> None:
 
         """
         if self._output_netcdf:
+            if self.verbose:
+                print(f"writing output for: {self.name}")
             self.__output_netcdf()
         return
 
@@ -62,6 +58,8 @@ def finalize(self) -> None:
             None
 
         """
+        if self.verbose:
+            print(f"finalizing: {self.name}")
         self._finalize_netcdf()
         return
 
@@ -77,6 +75,28 @@ def get_inputs() -> list:
     def get_variables() -> list:
         raise Exception("This must be overridden")
 
+    @classmethod
+    def get_mass_budget_terms(cls) -> dict:
+        # can this be a static method?
+        mass_budget_terms = {
+            "inputs": list(
+                meta.filter_vars(
+                    cls.get_inputs(), "var_category", "mass flux"
+                ).keys()
+            ),
+            "outputs": list(
+                meta.filter_vars(
+                    cls.get_variables(), "var_category", "mass flux"
+                ).keys()
+            ),
+            "storage_changes": list(
+                meta.filter_vars(
+                    cls.get_variables(), "var_category", "mass storage change"
+                ).keys()
+            ),
+        }
+        return mass_budget_terms
+
     @staticmethod
     def get_restart_variables() -> list:
         raise Exception("This must be overridden")
@@ -130,22 +150,31 @@ def initialize_self_variables(self, restart: bool = False):
 
         return
 
-    def initialize_var(self, var_name):
-        if self.var_meta[var_name]["dimensions"][0] == "nsegment":
-            nsize = self.nsegment
-        else:
-            nsize = self.nhru
+    def initialize_var(self, var_name: str, flt_to_dbl: bool = True):
         init_vals = self.get_init_values()
-        if var_name in init_vals.keys():
-            init_type = type_translation[self.var_meta[var_name]["type"]]
-            setattr(
-                self,
-                var_name,
-                np.full(nsize, init_vals[var_name], dtype=init_type),
-            )
-        elif self.verbose:
-            print(f"{var_name} not initialized (no initial value specified)")
+        if var_name not in init_vals.keys():
+            if self.verbose:
+                warn(
+                    f"{var_name} not initialized (no initial value specified)"
+                )
+            return
+
+        dims = [
+            self[vv] for vv in self.var_meta[var_name]["dimensions"].values()
+        ]
+        init_type = self.var_meta[var_name]["type"]
 
+        if len(dims) == 1:
+            self[var_name] = np.full(
+                dims, init_vals[var_name], dtype=init_type
+            )
+        else:
+            self[var_name] = TimeseriesArray(
+                var_name=var_name,
+                control=self.control,
+                array=np.full(dims, init_vals[var_name], dtype=init_type),
+                time=self._time,
+            )
         return
 
     def set_initial_conditions(self):
@@ -217,6 +246,7 @@ def advance(self):
         Returns:
             None
         """
+
         if self._itime_step >= self.control.itime_step:
             if self.verbose:
                 msg = (
@@ -228,6 +258,9 @@ def advance(self):
                 # is a warning sufficient? an error
             return
 
+        if self.verbose:
+            print(f"advancing: {self.name}")
+
         self._advance_variables()
         self._advance_inputs()
         self._itime_step += 1
@@ -242,6 +275,9 @@ def calculate(self, time_length: float, **kwargs) -> None:
         Returns:
             None
         """
+        if self.verbose:
+            print(f"calculating: {self.name}")
+
         # self._calculate must be implemented by the subclass
         self._calculate(time_length, *kwargs)
 
@@ -306,6 +342,9 @@ def initialize_netcdf(
             None
 
         """
+        if self.verbose:
+            print(f"initializing netcdf output for: {self.name}")
+
         self._output_netcdf = True
         self._netcdf = {}
         if separate_files:
@@ -345,8 +384,7 @@ def __output_netcdf(self) -> None:
             for idx, variable in enumerate(self.variables):
                 if idx == 0 or self._separate_netcdf:
                     self._netcdf[variable].add_simulation_time(
-                        self._itime_step,
-                        self._simulation_time,
+                        self.control.itime_step, self.control.current_datetime
                     )
                 self._netcdf[variable].add_data(
                     variable,
diff --git a/pynhm/base/timeseries.py b/pynhm/base/timeseries.py
new file mode 100644
index 00000000..213abcd7
--- /dev/null
+++ b/pynhm/base/timeseries.py
@@ -0,0 +1,59 @@
+import numpy as np
+
+from ..base.control import Control
+
+# should this be subclassed to DoyArray and TimeseriesArray?
+
+
+class TimeseriesArray:
+    def __init__(
+        self,
+        control: Control,
+        var_name: str,
+        array: np.ndarray,
+        time: np.ndarray = None,
+    ):
+        # check that array is > 1d
+        # check that first dimension of array is the same length as time array
+        self.name = "TimeseriresArray"
+        self.control = control
+        self.variable_name = var_name
+        self.time = time
+        self.data = array
+
+        # check if control.start_time is in time
+        # integer is doy type and np.datetime64 is time type
+        self._time_type = self.time.dtype
+
+        return
+
+    def advance(self):
+        return
+
+    def get_current(self):
+        if not self.control._current_time:
+            # then data is all nans, just use 0
+            time_ind = 0
+
+        else:
+            # Windows represents this as int32, others as int64
+            if self._time_type in [np.int32, np.int64]:
+                time_ind = self.control.current_doy - 1
+
+            else:
+                if self.control.itime_step == 0:
+                    start_time_ind = np.where(
+                        self.time == self.control._start_time
+                    )[0]
+                    if not len(start_time_ind):
+                        msg = "Control start_time is not in the input time"
+                        raise ValueError(msg)
+                    self._init_time_ind = start_time_ind[0]
+
+                time_ind = self._init_time_ind + self.control.itime_step
+
+        return self.data[time_ind, :]
+
+    @property
+    def current(self):
+        return self.get_current()
diff --git a/pynhm/constants.py b/pynhm/constants.py
index 11486893..0cf116cf 100644
--- a/pynhm/constants.py
+++ b/pynhm/constants.py
@@ -1,8 +1,11 @@
 import pathlib as pl
 from enum import Enum
+from typing import Union
 
 import numpy as np
 
+fileish = Union[str, pl.Path]
+
 # PRMS6 Constants module:
 # https://github.com/nhm-usgs/prms/blob/6.0.0_dev/src/prmslib/misc/m_constants.f90
 
diff --git a/pynhm/hydrology/PRMSCanopy.py b/pynhm/hydrology/PRMSCanopy.py
index d4afa3ca..1e5f27f1 100644
--- a/pynhm/hydrology/PRMSCanopy.py
+++ b/pynhm/hydrology/PRMSCanopy.py
@@ -6,9 +6,6 @@
 from ..base.control import Control
 from ..constants import CovType, HruType, zero
 
-# this type should be in base.adapter
-# adaptable = Union[str, np.ndarray, Adapter]
-
 # set constants (may need .value for enum to be used in > comparisons)
 NEARZERO = 1.0e-6
 DNEARZERO = np.finfo(float).eps  # EPSILON(0.0D0)
@@ -43,9 +40,6 @@ def __init__(
         self.set_budget(budget_type)
         return
 
-    def set_initial_conditions(self):
-        return
-
     @staticmethod
     def get_parameters() -> tuple:
         """
@@ -102,6 +96,7 @@ def get_variables() -> tuple:
             "hru_intcpstor_change",
             "hru_intcpevap",
             "intcp_form",
+            "intcp_changeover",
             "intcp_transp_on",  # this is private in prms6 and is not in the metadata
             # i defined metadata for it in a very adhoc way
         )
@@ -123,18 +118,21 @@ def get_init_values() -> dict:
             "hru_intcpstor": zero,
             "hru_intcpstor_old": zero,
             "hru_intcpstor_change": zero,
+            "intcp_changeover": zero,
             "hru_intcpevap": zero,
             "intcp_form": 0,  # could make boolean but would have to make the RAIN/SNOW match
             "intcp_transp_on": 0,  # could make boolean
         }
 
+    def set_initial_conditions(self):
+        return
+
     def _advance_variables(self):
         """Advance canopy
         Returns:
             None
 
         """
-        # self.intcp_stor_old = self.intcp_stor
         self.hru_intcpstor_old[:] = self.hru_intcpstor
         return
 
@@ -326,6 +324,8 @@ def calculate_procedural(self, time_length):
             self.hru_intcpstor[i] = intcpstor * cov
             self.hru_intcpevap[i] = intcpevap * cov
 
+            self.intcp_changeover[i] = changeover + extra_water
+
         return
 
     @staticmethod
diff --git a/pynhm/hydrology/PRMSChannel.py b/pynhm/hydrology/PRMSChannel.py
index 94f0cc87..72a0f403 100644
--- a/pynhm/hydrology/PRMSChannel.py
+++ b/pynhm/hydrology/PRMSChannel.py
@@ -75,6 +75,7 @@ def __init__(
         ssres_flow: adaptable,
         gwres_flow: adaptable,
         verbose: bool = False,
+        budget_type: str = None,
     ) -> "PRMSChannel":
 
         super().__init__(
@@ -84,6 +85,7 @@ def __init__(
         self.name = "PRMSChannel"
 
         self.set_inputs(locals())
+        self.set_budget(budget_type)
 
         # process channel data
         self._initialize_channel_data()
diff --git a/pynhm/hydrology/PRMSGroundwater.py b/pynhm/hydrology/PRMSGroundwater.py
index e1944638..ff22c218 100644
--- a/pynhm/hydrology/PRMSGroundwater.py
+++ b/pynhm/hydrology/PRMSGroundwater.py
@@ -1,13 +1,10 @@
-from typing import Union
-
 import numpy as np
 
 from pynhm.base.storageUnit import StorageUnit
 
-from ..base.adapter import Adapter
+from ..base.adapter import adaptable
 from ..base.control import Control
-
-adaptable = Union[str, np.ndarray, Adapter]
+from ..constants import nan
 
 
 class PRMSGroundwater(StorageUnit):
@@ -22,6 +19,7 @@ def __init__(
         soil_to_gw: adaptable,
         ssr_to_gw: adaptable,
         dprst_seep_hru: adaptable,
+        budget_type: str = None,
         verbose: bool = False,
     ) -> "PRMSGroundwater":
 
@@ -32,12 +30,7 @@ def __init__(
         self.name = "PRMSGroundwater"
 
         self.set_inputs(locals())
-        return
-
-    def set_initial_conditions(self):
-        # initialize groundwater reservoir storage
-        self.gwres_stor = self.gwstor_init.copy()
-        self.gwres_stor_old = self.gwstor_init.copy()
+        self.set_budget(budget_type)
         return
 
     @staticmethod
@@ -82,30 +75,42 @@ def get_variables() -> tuple:
         """
         return (
             "gwres_flow",
-            "gwres_in",
             "gwres_sink",
             "gwres_stor",
+            "gwres_stor_old",
+            "gwres_stor_change",
         )
 
     @staticmethod
     def get_init_values() -> dict:
-        """Get groundwater reservoir initial values
+        """Get groundwater initial values
 
         Returns:
             dict: initial values for named variables
         """
-        # No GW res values need initialized prior to calculation.
-        return {}
+        return {
+            "gwres_flow": nan,
+            "gwres_sink": nan,
+            "gwres_stor": nan,
+            "gwres_stor_old": nan,
+            "gwres_stor_change": nan,
+        }
+
+    def set_initial_conditions(self):
+        # initialize groundwater reservoir storage
+        self.gwres_stor[:] = self.gwstor_init.copy()
+        self.gwres_stor_old[:] = self.gwstor_init.copy()
+        return
 
     def _advance_variables(self) -> None:
         """Advance the groundwater reservoir variables
         Returns:
             None
         """
-        self.gwres_stor_old = self.gwres_stor
+        self.gwres_stor_old[:] = self.gwres_stor
         return
 
-    def calculate(self, simulation_time):
+    def _calculate(self, simulation_time):
         """Calculate groundwater reservoir terms for a time step
 
         Args:
@@ -121,35 +126,31 @@ def calculate(self, simulation_time):
         gwarea = self.hru_area
 
         # calculate volume terms
-        # gwstor_min_vol = self.gwstor_min * gwarea
-        gwres_stor = self.gwres_stor * gwarea
+        # denote volume units with leading underscore
         soil_to_gw_vol = self.soil_to_gw * gwarea
         ssr_to_gw_vol = self.ssr_to_gw * gwarea
         dprst_seep_hru_vol = self.dprst_seep_hru * gwarea
 
-        # initialize calculation variables
-        gwres_in = soil_to_gw_vol + ssr_to_gw_vol + dprst_seep_hru_vol
-
         # todo: what about route order
 
-        gwres_stor += gwres_in
-
-        gwres_flow = gwres_stor * self.gwflow_coef
+        _gwres_stor = self.gwres_stor * gwarea
+        _gwres_stor += soil_to_gw_vol + ssr_to_gw_vol + dprst_seep_hru_vol
 
-        gwres_stor -= gwres_flow
+        _gwres_flow = _gwres_stor * self.gwflow_coef
+        _gwres_stor -= _gwres_flow
 
-        gwres_sink = gwres_stor * self.gwsink_coef
-        idx = np.where(gwres_sink > gwres_stor)
-        gwres_sink[idx] = gwres_stor[idx]
-
-        gwres_stor -= gwres_sink
+        _gwres_sink = _gwres_stor * self.gwsink_coef
+        idx = np.where(_gwres_sink > _gwres_stor)
+        _gwres_sink[idx] = _gwres_stor[idx]
+        _gwres_stor -= _gwres_sink
 
+        # convert most units back to self variables
         # output variables
-        self.gwres_stor = gwres_stor / gwarea
-        self.gwres_in = (
-            gwres_in  # for some stupid reason this is left in acre-inches
-        )
-        self.gwres_flow = gwres_flow / gwarea
-        self.gwres_sink = gwres_sink / gwarea
+        self.gwres_stor[:] = _gwres_stor / gwarea
+        # for some stupid reason this is left in acre-inches
+        self.gwres_flow[:] = _gwres_flow / gwarea
+        self.gwres_sink[:] = _gwres_sink / gwarea
+
+        self.gwres_stor_change[:] = self.gwres_stor - self.gwres_stor_old
 
         return
diff --git a/pynhm/hydrology/PRMSSnow.py b/pynhm/hydrology/PRMSSnow.py
index d0438ee9..aca17e42 100644
--- a/pynhm/hydrology/PRMSSnow.py
+++ b/pynhm/hydrology/PRMSSnow.py
@@ -4,7 +4,7 @@
 
 from ..base.adapter import adaptable
 from ..base.control import Control
-from ..constants import HruType, epsilon32, epsilon64, inch2cm, one, zero
+from ..constants import HruType, epsilon32, epsilon64, inch2cm, nan, one, zero
 
 # These are constants used like variables (on self) in PRMS6
 # They dont appear on any LHS, so it seems they are constants
@@ -54,11 +54,7 @@
 
 
 class PRMSSnow(StorageUnit):
-    """PRMS snow pack
-
-    Args:
-
-    """
+    """PRMS snow pack"""
 
     def __init__(
         self,
@@ -260,6 +256,8 @@ def get_init_values() -> dict:
             "pk_precip": zero,
             "pk_temp": zero,
             "pksv": zero,
+            "pkwater_ante": nan,
+            "pkwater_equiv": nan,
             "pptmix_nopack": False,
             "salb": zero,
             "scrv": zero,
@@ -284,8 +282,7 @@ def set_initial_conditions(self):
         self.deninv = one / self.den_init.copy()
         self.denmaxinv = one / self.den_max.copy()
 
-        self.pkwater_equiv = self.snowpack_init.copy()
-        self.pkwater_ante = None
+        self.pkwater_equiv[:] = self.snowpack_init.copy()
 
         sd = int(self.ndeplval / 11)
         self.snarea_curve_2d = np.reshape(self.snarea_curve, (sd, 11))
@@ -365,7 +362,7 @@ def set_initial_conditions(self):
         return
 
     def _advance_variables(self) -> None:
-        self.pkwater_ante = self.pkwater_equiv.copy()
+        self.pkwater_ante[:] = self.pkwater_equiv.copy()
         return
 
     def calculate(self, simulation_time):
@@ -444,10 +441,10 @@ def calculate(self, simulation_time):
                 self.mso[jj] = 2  # [flag]  # could emume this BEFORE/AFTER
 
             # <
-            if jj == dbgind:
-                print(f"self.pkwater_equiv 0 : {self.pkwater_equiv[dbgind]}")
-                print(f"self.pk_ice 0 : {self.pk_ice[dbgind]}")
-                print(f"self.tcal 0 : {self.tcal[dbgind]}")
+            # if jj == dbgind:
+            #     print(f"self.pkwater_equiv 0 : {self.pkwater_equiv[dbgind]}")
+            #     print(f"self.pk_ice 0 : {self.pk_ice[dbgind]}")
+            #     print(f"self.tcal 0 : {self.tcal[dbgind]}")
 
             if self.pkwater_equiv[jj] < epsilon64:
                 # No existing snowpack
@@ -472,10 +469,10 @@ def calculate(self, simulation_time):
             ) or self.net_snow[jj] > zero:
                 self.ppt_to_pack(jj)
 
-            if jj == dbgind:
-                print(f"self.pkwater_equiv 1 : {self.pkwater_equiv[dbgind]}")
-                print(f"self.net_rain: {self.net_rain[dbgind]}", flush=True)
-                print(f"self.tcal 1 : {self.tcal[dbgind]}")
+            # if jj == dbgind:
+            #     print(f"self.pkwater_equiv 1 : {self.pkwater_equiv[dbgind]}")
+            #     print(f"self.net_rain: {self.net_rain[dbgind]}", flush=True)
+            #     print(f"self.tcal 1 : {self.tcal[dbgind]}")
 
             # <
             if self.pkwater_equiv[jj] > zero:
@@ -483,12 +480,12 @@ def calculate(self, simulation_time):
                 # HRU STEP 2 - CALCULATE THE NEW SNOW COVERED AREA from depletion curve
                 # **********************************************************
                 self.snowcov(jj)
-                if jj == dbgind:
-                    print(
-                        f"self.pkwater_equiv 2 : {self.pkwater_equiv[dbgind]}"
-                    )
-                    print(f"self.snowcov_area: {self.snowcov_area[dbgind]}")
-                    print(f"self.tcal 2 : {self.tcal[dbgind]}")
+                # if jj == dbgind:
+                #     print(
+                #         f"self.pkwater_equiv 2 : {self.pkwater_equiv[dbgind]}"
+                #     )
+                #     print(f"self.snowcov_area: {self.snowcov_area[dbgind]}")
+                #     print(f"self.tcal 2 : {self.tcal[dbgind]}")
 
                 # if self.control._itime_step == 29 and jj == dbgind:
                 #    pdb.set_trace()
@@ -496,21 +493,21 @@ def calculate(self, simulation_time):
                 # HRU STEP 3 - COMPUTE THE NEW ALBEDO
                 # **********************************************************
                 self.snalbedo(jj)
-                if jj == dbgind:
-                    print(
-                        f"self.pkwater_equiv 3 : {self.pkwater_equiv[dbgind]}"
-                    )
-                    print(f"self.tcal 3 : {self.tcal[dbgind]}")
+                # if jj == dbgind:
+                #     print(
+                #         f"self.pkwater_equiv 3 : {self.pkwater_equiv[dbgind]}"
+                #     )
+                #     print(f"self.tcal 3 : {self.tcal[dbgind]}")
 
                 # HRU STEP 4 - DETERMINE RADIATION FLUXES AND SNOWPACK
                 #              STATES NECESSARY FOR ENERGY BALANCE
                 # **********************************************************
                 self.step_4(jj, trd)
-                if jj == dbgind:
-                    print(
-                        f"self.pkwater_equiv 4 : {self.pkwater_equiv[dbgind]}"
-                    )
-                    print(f"self.tcal 4 : {self.tcal[dbgind]}")
+                # if jj == dbgind:
+                #     print(
+                #         f"self.pkwater_equiv 4 : {self.pkwater_equiv[dbgind]}"
+                #     )
+                #     print(f"self.tcal 4 : {self.tcal[dbgind]}")
 
                 #  HRU STEP 5 - CALCULATE SNOWPACK LOSS TO EVAPORATION
                 # ********************************************************
@@ -536,11 +533,11 @@ def calculate(self, simulation_time):
                     # just to be sure negative values are ignored
                     self.pkwater_equiv[jj] = zero
 
-                if jj == dbgind:
-                    print(
-                        f"self.pkwater_equiv 5 : {self.pkwater_equiv[dbgind]}"
-                    )
-                    print(f"self.tcal 5 : {self.tcal[dbgind]}")
+                # if jj == dbgind:
+                #     print(
+                #         f"self.pkwater_equiv 5 : {self.pkwater_equiv[dbgind]}"
+                #     )
+                #     print(f"self.tcal 5 : {self.tcal[dbgind]}")
                 # <
                 # HRU CLEAN-UP - ADJUST FINAL HRU SNOWPACK STATES AND
                 #                INCREMENT THE BASIN TOTALS
diff --git a/pynhm/hydrology/PRMSSoilzone.py b/pynhm/hydrology/PRMSSoilzone.py
index a63edab8..46941e31 100644
--- a/pynhm/hydrology/PRMSSoilzone.py
+++ b/pynhm/hydrology/PRMSSoilzone.py
@@ -41,6 +41,7 @@ def __init__(
         )
         self.name = "PRMSSoilzone"
 
+        budget_type = None
         self.set_inputs(locals())
         self.set_budget(budget_type)
 
@@ -56,6 +57,7 @@ def get_parameters() -> tuple:
         """
         return (
             "nhru",
+            "nssr",
             "dprst_frac",
             "cov_type",
             "fastcoef_lin",
@@ -87,10 +89,9 @@ def get_inputs() -> tuple:
 
         """
         return (
-            "snowcov_area",
-            "dprst_evap_hru",  ## JLM ?? needs this stuff to calculate evap?
+            "dprst_evap_hru",  # JLM ?? needs this stuff to calculate evap?
             "dprst_seep_hru",
-            "hru_impervevap",  ## JLM ??
+            "hru_impervevap",  # JLM ??
             "hru_intcpevap",  # JLM ???
             "infil",
             # soil_moist_chg => model_runoff%soil_moist_chg, &
@@ -118,7 +119,7 @@ def get_variables() -> tuple:
             "cap_waterin",
             "dunnian_flow",
             "hru_actet",
-            "lakein_sz",
+            # "lakein_sz",
             "perv_actet",
             "potet_lower",
             "potet_rechr",
@@ -135,6 +136,8 @@ def get_variables() -> tuple:
             "soil_lower",
             "soil_lower_ratio",
             "soil_moist",
+            "soil_moist_change",
+            "soil_moist_prev",
             "soil_moist_tot",
             "soil_rechr",
             "soil_to_gw",
@@ -146,8 +149,8 @@ def get_variables() -> tuple:
             "ssres_stor",
             "swale_actet",
             "unused_potet",
-            "upslope_dunnianflow",
-            "upslope_interflow",
+            # "upslope_dunnianflow",
+            # "upslope_interflow",
         )
 
     @staticmethod
@@ -190,6 +193,8 @@ def get_init_values() -> dict:
             "soil_lower_ratio": zero,
             "soil_lower_stor_max": nan,  # completely set later
             "soil_moist": nan,  # sm_climateflow
+            "soil_moist_change": nan,  # sm_climateflow
+            "soil_moist_prev": nan,  # sm_climateflow
             "soil_moist_tot": nan,  # completely set later
             "soil_rechr": nan,  # sm_climateflow
             "soil_to_gw": zero,
@@ -384,7 +389,7 @@ def set_initial_conditions(self):
         return
 
     def _advance_variables(self) -> None:
-        # self.stor_old[:] = self.stor
+        self.soil_moist_prev[:] = self.soil_moist
         return
 
     def _calculate(self, simulation_time):
@@ -402,7 +407,7 @@ def _calculate(self, simulation_time):
 
         # <
         gwin = zero
-        update_potet = 0
+        # update_potet = 0
 
         # diagnostic state resets
         self.soil_to_gw[:] = zero
@@ -749,6 +754,8 @@ def _calculate(self, simulation_time):
         if self.control.config["dprst_flag"] == 1:
             self.recharge = self.recharge + self.dprst_seep_hru
 
+        self.soil_moist_change[:] = self.soil_moist - self.soil_moist_prev
+
         # <
         return
 
diff --git a/pynhm/hydrology/__init__.py b/pynhm/hydrology/__init__.py
index e69de29b..e3210f44 100644
--- a/pynhm/hydrology/__init__.py
+++ b/pynhm/hydrology/__init__.py
@@ -0,0 +1,8 @@
+from .PRMSCanopy import PRMSCanopy
+from .PRMSChannel import PRMSChannel
+
+# from PRMSEt import PRMSEt
+from .PRMSGroundwater import PRMSGroundwater
+from .PRMSRunoff import PRMSRunoff
+from .PRMSSnow import PRMSSnow
+from .PRMSSoilzone import PRMSSoilzone
diff --git a/pynhm/static/metadata/dimensions.yaml b/pynhm/static/metadata/dimensions.yaml
index 872cd3a1..81af1151 100644
--- a/pynhm/static/metadata/dimensions.yaml
+++ b/pynhm/static/metadata/dimensions.yaml
@@ -11,7 +11,7 @@ nconsumed:
   default: 0
   desc: Number of consumptive water-use destinations
   size: 0
-ndays:
+doy:
   default: 366
   desc: Maximum number of days in a year
   size: 366
diff --git a/pynhm/static/metadata/variables.yaml b/pynhm/static/metadata/variables.yaml
index 9579151c..7f5adf02 100644
--- a/pynhm/static/metadata/variables.yaml
+++ b/pynhm/static/metadata/variables.yaml
@@ -2,1644 +2,1659 @@ KKITER:
   desc: Current iteration in GSFLOW simulation
   dimensions:
     0: one
-  type: I
+  type: int32
   units: none
 ai:
   desc: Maximum snowpack for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 albedo:
   desc: Snow surface albedo or the fraction of radiation reflected from the snowpack
     surface for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 basin_2ndstflow:
   desc: Basin volume-weighted average streamflow from each lake with a second outlet
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_actet:
   desc: Basin area-weighted average actual ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_actet_mo:
   desc: Monthly basin area-weighted average actual ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_actet_tot:
   desc: Total simulation basin area-weighted average actual ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_actet_yr:
   desc: Yearly basin area-weighted average actual ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_cap_infil_tot:
   desc: Basin area-weighted average infiltration with cascading flow into capillary
     reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_cap_up_max:
   desc: Basin area-weighted average maximum cascade flow that flows to capillary reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_capillary_wb:
   desc: Basin area-weighted average capillary reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_capwaterin:
   desc: Basin area-weighted average infiltration, cascading interflow and Dunnian
     flow added to capillary reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_cfs:
   desc: Streamflow leaving the basin through the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_cfs_mo:
   desc: Monthly total streamflow to stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_cfs_tot:
   desc: Total simulation basin area-weighted average streamflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_cfs_yr:
   desc: Yearly total streamflow to stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_cloud_cover:
   desc: Basin area-weighted average cloud cover proportion
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_cms:
   desc: Streamflow leaving the basin through the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cms
 basin_contrib_fraction:
   desc: Basin area-weighted average contributing area of the pervious area of each
     HRU
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_cpr_stor_frac:
   desc: Basin area-weighted average fraction of capillary reservoir storage of the
     maximum storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_dncascadeflow:
   desc: Basin area-weighted average cascading interflow and Dunnian surface runoff
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dndunnianflow:
   desc: Basin area-weighted average cascading Dunnian flow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dninterflow:
   desc: Basin area-weighted average cascading interflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_evap:
   desc: Basin area-weighted average evaporation from surface-depression storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_seep:
   desc: Basin area-weighted average seepage from surface-depression storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_sroff:
   desc: Basin area-weighted average surface runoff from open surface-depression storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_volcl:
   desc: Basin area-weighted average storage volume in closed surface depressions
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_volop:
   desc: Basin area-weighted average storage volume in open surface depressions
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dprst_wb:
   desc: Basin area-weighted average surface-depression storage water balance
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dunnian:
   desc: Basin area-weighted average Dunnian surface runoff that flows to the stream
     network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dunnian_gvr:
   desc: Basin area-weighted average excess flow to preferential-flow reservoirs from
     gravity reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_dunnian_pfr:
   desc: Basin area-weighted average excess infiltration to preferential-flow reservoirs
     from variable infil
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gravity_wb:
   desc: Basin area-weighted average gravity reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gvr2pfr:
   desc: Basin area-weighted average excess flow to preferential-flow reservoir storage
     from gravity reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gvr2sm:
   desc: Basin area-weighted average gravity flow to capillary reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gvr_stor_frac:
   desc: Basin area-weighted average fraction of gravity reservoir storage of the maximum
     storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_gwflow:
   desc: Basin area-weighted average of groundwater flow to the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwflow_cfs:
   desc: Basin area-weighted average of groundwater flow to the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_gwflow_mo:
   desc: Monthly basin area-weighted average groundwater discharge
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwflow_tot:
   desc: Total simulation basin area-weighted average groundwater discharge
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwflow_yr:
   desc: Yearly basin area-weighted average groundwater discharge
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwin:
   desc: Basin area-weighted average of inflow to GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwsink:
   desc: Basin area-weighted average of GWR outflow to the groundwater sink
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwstor:
   desc: Basin area-weighted average of storage in GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_gwstor_minarea_wb:
   desc: Basin area-weighted average storage added to each GWR when storage is less
     than gwstor_min
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_horad:
   desc: Potential shortwave radiation for the basin centroid
   dimensions:
     0: one
-  type: D
+  type: float64
   units: Langleys
 basin_hortonian:
   desc: Basin area-weighted average Hortonian runoff
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_hortonian_lakes:
   desc: Basin area-weighted average Hortonian surface runoff to lakes
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_hru_apply:
   desc: Basin area-weighted average canopy_gain
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_humidity:
   desc: Basin area-weighted average humidity
   dimensions:
     0: one
-  type: D
+  type: float64
   units: percentage
 basin_imperv_evap:
   desc: Basin area-weighted average evaporation from impervious area
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_imperv_stor:
   desc: Basin area-weighted average storage on impervious area
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_infil:
   desc: Basin area-weighted average infiltration to the capillary reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_intcp_evap:
   desc: Basin area-weighted evaporation from the canopy
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_intcp_evap_mo:
   desc: Monthly basin area-weighted average interception evaporation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_intcp_evap_tot:
   desc: Total simulation basin area-weighted average canopy evaporation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_intcp_evap_yr:
   desc: Yearly basin area-weighted average canopy evaporation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_intcp_stor:
   desc: Basin area-weighted average interception storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_interflow_max:
   desc: Basin area-weighted average maximum interflow that flows from gravity reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_lake_seep:
   desc: Basin area-weighted average of lake-bed seepage to GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: acre-feet
 basin_lake_stor:
   desc: Basin volume-weighted average storage for all lakes using broad-crested weir
     or gate opening routing
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_lakeevap:
   desc: Basin area-weighted average lake evaporation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_lakeinsz:
   desc: Basin area-weighted average lake inflow from land HRUs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_lakeprecip:
   desc: Basin area-weighted average precipitation on lake HRUs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_lapse_max:
   desc: Basin area-weighted average maximum air temperature lapse rate per 1000 feet
   dimensions:
     0: one
-  type: F
+  type: float64
   units: degrees
 basin_lapse_min:
   desc: Basin area-weighted average minimum air temperature lapse rate per 1000 feet
   dimensions:
     0: one
-  type: F
+  type: float64
   units: degrees
 basin_max_temp_mo:
   desc: Monthly basin area-weighted average maximum air temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_max_temp_tot:
   desc: Total simulation basin area-weighted average maximum temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_max_temp_yr:
   desc: Yearly basin area-weighted average maximum temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_min_temp_mo:
   desc: Monthly basin area-weighted average minimum air temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_min_temp_tot:
   desc: Total simulation basin area-weighted average minimum temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_min_temp_yr:
   desc: Yearly basin area-weighted average minimum temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_net_apply:
   desc: Basin area-weighted average net_apply
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_net_ppt:
   desc: Basin area-weighted average throughfall
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_net_ppt_mo:
   desc: Monthly area-weighted average net precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_net_ppt_yr:
   desc: Yearly basin area-weighted average net precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_net_rain:
   desc: Basin area-weighted average rain throughfall
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_net_snow:
   desc: Basin area-weighted average snow throughfall
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_obs_ppt:
   desc: Basin area-weighted average measured precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_orad:
   desc: Basin area-weighted average solar radiation on a horizontal surface
   dimensions:
     0: one
-  type: D
+  type: float64
   units: Langleys
 basin_perv_et:
   desc: Basin area-weighted average ET from capillary reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_pfr_stor_frac:
   desc: Basin area-weighted average fraction of preferential-flow reservoir storage
     of the maximum storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_pk_precip:
   desc: Basin area-weighted average precipitation added to snowpack
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_potet:
   desc: Basin area-weighted average potential ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_potet_mo:
   desc: Monthly basin area-weighted average potential ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_potet_tot:
   desc: Total simulation basin area-weighted average potential ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_potet_yr:
   desc: Yearly basin area-weighted average potential ET
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_potsw:
   desc: Basin area-weighted average shortwave radiation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: Langleys
 basin_ppt:
   desc: Basin area-weighted average precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ppt_mo:
   desc: Monthly basin area-weighted average precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ppt_tot:
   desc: Total simulation basin area-weighted average precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ppt_yr:
   desc: Yearly basin area-weighted average precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_pref_flow_infil:
   desc: Basin area-weighted average infiltration to preferential-flow reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_pref_stor:
   desc: Basin area-weighted average storage in preferential-flow reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_prefflow:
   desc: Basin area-weighted average interflow from preferential-flow reservoirs to
     the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_pweqv:
   desc: Basin area-weighted average snowpack water equivalent
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_radadj:
   desc: Basin area-weighted average radiation adjustment for cloud cover
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_rain:
   desc: Basin area-weighted average rainfall
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_recharge:
   desc: Basin area-weighted average recharge to GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_runoff_ratio:
   desc: Basin area-weighted average discharge/precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_runoff_ratio_mo:
   desc: Monthly area-weighted average discharge/precipitation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_segment_storage:
   desc: Basin area-weighted average storage in the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_slowflow:
   desc: Basin area-weighted average interflow from gravity reservoirs to the stream
     network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_slstor:
   desc: Basin area-weighted average storage of gravity reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sm2gvr:
   desc: Basin area-weighted average excess flow from capillary reservoirs to gravity
     reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sm2gvr_maxin:
   desc: Basin area-weighted average maximum excess flow from capillary reservoirs
     that flows to gravity reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snow:
   desc: Basin area-weighted average snowfall for basin
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowcov:
   desc: Basin area-weighted average snow-covered area
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_snowdepth:
   desc: Basin area-weighted average snow depth
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowevap:
   desc: Basin area-weighted average evaporation and sublimation from snowpack
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowmelt:
   desc: Basin area-weighted average snowmelt
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowmelt_mo:
   desc: Monthly basin area-weighted average snowmelt
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowmelt_tot:
   desc: Total simulation basin area-weighted average snowmelt
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_snowmelt_yr:
   desc: Yearly basin area-weighted average snowmelt
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_soil_lower_stor_frac:
   desc: Basin area-weighted average fraction of soil lower zone storage of the maximum
     storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_soil_moist:
   desc: Basin area-weighted average capillary reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_soil_moist_tot:
   desc: Basin area-weighted average total soil-zone water storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_soil_rechr:
   desc: Basin area-weighted average storage for recharge zone; upper portion of capillary
     reservoir where both evaporation and transpiration occurs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_soil_rechr_stor_frac:
   desc: Basin area-weighted average fraction of soil recharge zone storage of the
     maximum storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_soil_to_gw:
   desc: Basin average excess flow to capillary reservoirs that drains to GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_soilzone_wb:
   desc: Basin area-weighted average storage in soilzone reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff:
   desc: Basin area-weighted average surface runoff to the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff_cfs:
   desc: Basin area-weighted average surface runoff to the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_sroff_down:
   desc: Basin area-weighted average of cascading surface runoff
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff_mo:
   desc: Monthly basin area-weighted average surface runoff
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff_tot:
   desc: Total simulation basin area-weighted average overland flow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff_upslope:
   desc: Basin area-weighted average of cascading surface runoff received from upslope
     HRUs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroff_yr:
   desc: Yearly basin area-weighted average overland runoff
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroffi:
   desc: Basin area-weighted average surface runoff from impervious areas
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sroffp:
   desc: Basin area-weighted average surface runoff from pervious areas
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssflow:
   desc: Basin area-weighted average interflow from gravity and preferential-flow reservoirs
     to the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssflow_cfs:
   desc: Interflow leaving the basin through the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 basin_ssflow_mo:
   desc: Monthly basin area-weighted average interflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssflow_tot:
   desc: Total simulation basin area-weighted average interflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssflow_yr:
   desc: Yearly basin area-weighted average interflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssin:
   desc: Basin area-weighted average inflow to gravity and preferential-flow reservoir
     storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_ssstor:
   desc: Basin weighted average gravity and preferential-flow reservoir storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_stflow_in:
   desc: Basin area-weighted average lateral flow entering the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_stflow_mo:
   desc: Monthly basin area-weighted average simulated streamflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_stflow_out:
   desc: Basin area-weighted average streamflow leaving through the stream network
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_stflow_tot:
   desc: Total simulation basin area-weighted average streamflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_stflow_yr:
   desc: Yearly basin area-weighted average streamflow
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_storage:
   desc: Basin area-weighted average storage in all water storage reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_storvol:
   desc: Basin area-weighted average storage volume in all water storage reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: acre-inches
 basin_surface_storage:
   desc: Basin area-weighted average storage in all surface water storage reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_swale_et:
   desc: Basin area-weighted average ET from swale HRUs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_swrad:
   desc: Basin area-weighted average shortwave radiation
   dimensions:
     0: one
-  type: D
+  type: float64
   units: Langleys
 basin_sz2gw:
   desc: Basin area-weighted average drainage from gravity reservoirs to GWRs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_sz_stor_frac:
   desc: Basin area-weighted average fraction of soil zone storage of the maximum storage
   dimensions:
     0: one
-  type: D
+  type: float64
   units: decimal fraction
 basin_tcal:
   desc: Basin area-weighted average net snowpack energy balance
   dimensions:
     0: one
-  type: D
+  type: float64
   units: Langleys
 basin_temp:
   desc: Basin area-weighted average air temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_tmax:
   desc: Basin area-weighted average maximum air temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_tmin:
   desc: Basin area-weighted average minimum air temperature
   dimensions:
     0: one
-  type: D
+  type: float64
   units: temp_units
 basin_total_storage:
   desc: Basin area-weighted average storage in all water storage reservoirs
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 basin_transp_on:
   desc: Flag indicating whether transpiration is occurring anywhere in the basin (0=no;
     1=yes)
   dimensions:
     0: one
-  type: I
+  type: int32
   units: none
 basin_windspeed:
   desc: Basin area-weighted average wind speed
   dimensions:
     0: one
-  type: D
+  type: float64
   units: meters/second
 canopy_covden:
   desc: Canopy cover density for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 canopy_gain:
   desc: Transfer gain to the canopy reservoir for each HRU for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 canopy_gain_tot:
   desc: Transfer gain to the canopy reservoir for each HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 cap_infil_tot:
   desc: Infiltration and cascading interflow and Dunnian flow added to capillary reservoir
     storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 cap_upflow_max:
   desc: Maximum infiltration and any cascading interflow and Dunnian surface runoff
     that can be added to capillary reservoir storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 cap_waterin:
   desc: Infiltration and any cascading interflow and Dunnian surface runoff added
     to capillary reservoir storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 cascade_dunnianflow:
   desc: Cascading Dunnian flow for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 cascade_interflow:
   desc: Cascading interflow for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 cloud_cover_hru:
   desc: Cloud cover proportion of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 cloud_radadj:
   desc: Radiation adjustment for cloud cover of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 consumed_gain:
   desc: Transfer flow rate to each water-use comsumption destination for each time
     step
   dimensions:
     0: nconsumed
-  type: F
+  type: float64
   units: cfs
 consumed_gain_tot:
   desc: Transfer flow rate to each water-use comsumption destination for the simulation
   dimensions:
     0: nconsumed
-  type: F
+  type: float64
   units: cfs
 contrib_fraction:
   desc: Contributing area of each HRU pervious area
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 cpr_stor_frac:
   desc: Fraction of capillary reservoir storage of the maximum storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 din1:
   desc: Inflow from the previous time step to each lake using Puls or linear storage
     routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 dlit:
   desc: Hours of daylight
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: hours
 dprst_area_clos:
   desc: Surface area of closed surface depressions based on storage volume for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 dprst_area_clos_max:
   desc: Aggregate sum of closed surface-depression storage areas of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 dprst_area_max:
   desc: Aggregate sum of surface-depression storage areas of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 dprst_area_open:
   desc: Surface area of open surface depressions based on storage volume for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 dprst_area_open_max:
   desc: Aggregate sum of open surface-depression storage areas of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 dprst_evap_hru:
   desc: Evaporation from surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 dprst_gain:
   desc: Transfer gain to surface-depression storage for each HRU for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 dprst_gain_tot:
   desc: Transfer gain to surface-depression storage for each HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 dprst_insroff_hru:
   desc: Surface runoff from pervious and impervious portions into open and closed
     surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 dprst_seep_hru:
   desc: Seepage from surface-depression storage to associated GWR for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
   var_category: mass flux
 dprst_sroff_hru:
   desc: Surface runoff from open surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 dprst_stor_hru:
   desc: Surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 dprst_stor_hru_change:
   desc: Surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
   variable_category: mass storage change
 dprst_stor_hru_old:
   desc: Surface-depression storage for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 dprst_transfer:
   desc: Transfer flow rate from surface-depression storage for each HRU for each time
     step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 dprst_transfer_tot:
   desc: Transfer flow rate from surface-depression storage for each HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 dprst_vol_clos:
   desc: Storage volume in closed surface depressions for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: acre-inches
 dprst_vol_clos_frac:
   desc: Fraction of closed surface-depression storage of the maximum storage for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 dprst_vol_frac:
   desc: Fraction of surface-depression storage of the maximum storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 dprst_vol_open:
   desc: Storage volume in open surface depressions for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: acre-inches
 dprst_vol_open_frac:
   desc: Fraction of open surface-depression storage of the maximum storage for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 dunnian_flow:
   desc: Dunnian surface runoff that flows to the stream network for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 elevlake:
   desc: Surface elevation of each lake
   dimensions:
     0: nlake
-  type: F
+  type: float64
   units: feet
 external_gain:
   desc: Transfer gain to each external location for each time step
   dimensions:
     0: nexternal
-  type: F
+  type: float64
   units: cfs
 external_gain_tot:
   desc: Transfer gain to each external location for each time step
   dimensions:
     0: nexternal
-  type: F
+  type: float64
   units: cfs
 external_transfer:
   desc: Transfer flow rate from each external source for each time step
   dimensions:
     0: nexternal
-  type: F
+  type: float64
   units: cfs
 external_transfer_tot:
   desc: Transfer flow rate from each external source for the simulation
   dimensions:
     0: nexternal
-  type: F
+  type: float64
   units: cfs
 flow_headwater:
   desc: Total flow out of headwater segments (segment_type=1)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_in_great_lakes:
   desc: Total flow out into model domain from Great Lakes (segment_type=10)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_in_nation:
   desc: Total flow into model domain from Mexico or Canada (segment_type=4)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_in_region:
   desc: Total flow into region (segment_type=6)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_out:
   desc: Total flow out of model domain
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_out_NHM:
   desc: Total flow out of model domain to Mexico or Canada (segment_type=5)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_out_region:
   desc: Total flow out of region (segment_type=7)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_replacement:
   desc: Total flow out from replacement flow (segment_type=3)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_terminus:
   desc: Total flow to terminus segments (segment_type=9)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_to_great_lakes:
   desc: Total flow to Great Lakes (segment_type=11)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_to_lakes:
   desc: Total flow to lakes (segment_type=2)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 flow_to_ocean:
   desc: Total flow to oceans (segment_type=8)
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 frac_swe:
   desc: Fraction of maximum snow-water equivalent (snarea_thresh) on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 freeh2o:
   desc: Storage of free liquid water in the snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 gate_ht:
   desc: Height of the gate opening at each dam with a gate
   dimensions:
     0: nratetbl
-  type: F
+  type: float64
   units: inches
 grav_gwin:
   desc: Groundwater discharge to gravity-flow reservoirs for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 gravity_stor_res:
   desc: Storage in each gravity-flow reservoir
   dimensions:
     0: nhrucell
-  type: F
+  type: float64
   units: inches
 gvr2sm:
   desc: Gravity flow to soil moist replenishment for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 gvr_stor_frac:
   desc: Fraction of gravity reservoir storage of the maximum storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 gw2sm_grav:
   desc: Groundwater discharge to gravity-flow reservoirs
   dimensions:
     0: nhrucell
-  type: F
+  type: float64
   units: inches
 gw_in_soil:
   desc: Drainage from capillary reservoir excess water for each GWR
   dimensions:
     0: ngw
-  type: D
+  type: float64
   units: acre-inches
 gw_in_ssr:
   desc: Drainage from gravity reservoir excess water for each GWR
   dimensions:
     0: ngw
-  type: D
+  type: float64
   units: acre-inches
 gw_seep_lakein:
   desc: Groundwater discharge to any associated lake for each GWR
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-feet
 gw_upslope:
   desc: Groundwater flow received from upslope GWRs for each GWR
   dimensions:
     0: ngw
-  type: D
+  type: float64
   units: acre-inches
 gwr_gain:
   desc: Transfer gain to the groundwater reservoir of each HRU for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 gwr_gain_tot:
   desc: Transfer gain to the groundwater reservoir of each HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 gwr_transfer:
   desc: Transfer flow rate from the groundwater reservoir of each HRU for each time
     step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 gwr_transfer_tot:
   desc: Transfer flow rate from the groundwater reservoir of each HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 gwres_flow:
   desc: Groundwater discharge from each GWR to the stream network
   dimensions:
     0: ngw
-  type: F
+  type: float64
   units: inches
-gwres_in:
-  desc: Total inflow to each GWR from associated capillary and gravity reservoirs
-  dimensions:
-    0: ngw
-  type: D
-  units: acre-inches
+  var_category: mass flux
 gwres_sink:
   desc: Outflow from GWRs to the groundwater sink; water is considered underflow or
     flow to deep aquifers and does not flow to the stream network
   dimensions:
     0: ngw
-  type: F
+  type: float64
   units: inches
+  var_category: mass flux
 gwres_stor:
   desc: Storage in each GWR
   dimensions:
     0: ngw
-  type: D
+  type: float64
+  units: inches
+  var_category: mass storage
+gwres_stor_change:
+  desc: Change is storage in each GWR
+  dimensions:
+    0: ngw
+  type: float64
+  units: inches
+  var_category: mass storage change
+gwres_stor_old:
+  desc: Previous storage in each GWR
+  dimensions:
+    0: ngw
+  type: float64
   units: inches
+  var_category: mass storage  
 gwstor_minarea_wb:
   desc: Storage added to each GWR when storage is less than gwstor_min
   dimensions:
     0: ngw
-  type: D
+  type: float64
   units: inches
 hortonian_flow:
   desc: Hortonian surface runoff reaching stream network for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hortonian_lakes:
   desc: Surface runoff to lakes for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 hru_actet:
   desc: Actual ET for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_et_yr:
   desc: Yearly area-weighted average actual ET for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 hru_frac_perv:
   desc: Fraction of HRU that is pervious
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 hru_gw_cascadeflow:
   desc: Cascading groundwater flow from each GWR
   dimensions:
     0: ngw
-  type: F
+  type: float64
   units: inches
 hru_hortn_cascflow:
   desc: Cascading Hortonian surface runoff leaving each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 hru_imperv:
   desc: Area of HRU that is impervious
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 hru_impervevap:
   desc: HRU area-weighted average evaporation from impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 hru_impervstor:
   desc: HRU area-weighted average storage on impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_impervstor_change:
-  desc: HRU area-weighted average storage on impervious area for each HRU
+  desc: Change in HRU area-weighted average storage on impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage change
 hru_impervstor_old:
-  desc: HRU area-weighted average storage on impervious area for each HRU
+  desc: Previous HRU area-weighted average storage on impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_intcpevap:
   desc: HRU area-weighted average evaporation from the canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 hru_intcpstor:
   desc: HRU area-weighted average Interception storage in the canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
+  var_category: mass storage
 hru_intcpstor_change:
   desc: HRU area-weighted average Interception storage in the canopy for each HRU at previous time
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage change
 hru_intcpstor_old:
   desc: HRU area-weighted average Interception storage in the canopy for each HRU at previous time
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_lateral_flow:
   desc: Lateral flow to stream network from each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 hru_outflow:
   desc: Total flow leaving each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: cfs
 hru_perv:
   desc: Area of HRU that is pervious
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: acres
 hru_perv_actet:
   desc: Actual ET from the capillary reservoir of each HRU normalized to HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_ppt:
   desc: Precipitation distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: inches
 hru_rain:
   desc: Rain distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: inches
   var_category: mass flux
 hru_snow:
   desc: Snow distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: inches
   var_category: mass flux
 hru_sroffi:
   desc: HRU area-weighted average surface runoff from impervious areas for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_sroffp:
   desc: HRU area-weighted average surface runoff from pervious areas for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 hru_storage:
   desc: Storage for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 hru_streamflow_out:
   desc: Total flow to stream network from each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: cfs
 hru_sz_cascadeflow:
   desc: Cascading interflow and Dunnian surface runoff from each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 humidity:
   desc: Relative humidity at each measurement station
   dimensions:
     0: nhumid
-  type: F
+  type: float64
   units: percentage
 humidity_hru:
   desc: Relative humidity of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: percentage
 iasw:
   desc: Flag indicating that snow covered area is interpolated between previous location
     on curve and maximum (1) or is on the defined curve (0)
   dimensions:
     0: nhru
-  type: B
+  type: int32
   units: none
 imperv_evap:
   desc: Evaporation from impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 imperv_stor:
   desc: Storage on impervious area for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 infil:
   desc: Infiltration to the capillary and preferential-flow reservoirs for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 int_alb:
@@ -1647,505 +1662,508 @@ int_alb:
     curve)'
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 intcp_changeover:
   desc: Canopy throughfall caused by canopy density change from winter to summer
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 intcp_evap:
   desc: Evaporation from the canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 intcp_form:
   desc: Form (rain or snow) of interception for each HRU
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 intcp_on:
   desc: Flag indicating interception storage for each HRU (0=no;1=yes)
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 intcp_stor:
   desc: Interception storage in canopy for cover density for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 intcp_transp_on:
   desc: Flag indicating whether transpiration is occurring in the canopy (0=no;1=yes)
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 interflow_max:
   desc: Maximum interflow for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 iso:
   desc: Flag to indicate if time is before (1) or after (2) the day to force melt
     season (melt_force)
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 lake_2gw:
   desc: Total seepage from each lake using broad-crested weir or gate opening routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_elev:
   desc: Elevation of each simulated lake surface
   dimensions:
     0: nlakeelev
-  type: F
+  type: float64
   units: feet
 lake_evap:
   desc: Total evaporation from each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_gain:
   desc: Transfer gain to each lake HRU for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 lake_gain_tot:
   desc: Transfer gain to each lake HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 lake_gwflow:
   desc: Total groundflow into each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_inflow:
   desc: Total inflow to each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_interflow:
   desc: Total interflow into each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_invol:
   desc: Inflow to each lake using broad-crested weir or gate opening routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-feet
 lake_lateral_inflow:
   desc: Lateral inflow to each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_outcfs:
   desc: Streamflow leaving each lake (includes any second outlet flow)
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_outcms:
   desc: Streamflow leaving each lake (includes any second outlet flow)
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cms
 lake_outflow:
   desc: Evaporation and seepage from each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_outq2:
   desc: Streamflow from second outlet for each lake with a second outlet
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_outvol:
   desc: Outflow from each lake using broad-crested weir or gate opening routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-inches
 lake_outvol_ts:
   desc: Outflow from each lake using broad-crested weir or gate opening routing for
     the time step
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-inches
 lake_precip:
   desc: Total precipitation into each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_seep_in:
   desc: Total seepage into each lake using broad-crested weir or gate opening routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_seepage:
   desc: Lake-bed seepage from each lake to associated GWRs
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-feet
 lake_seepage_gwr:
   desc: Net lake-bed seepage to associated GWRs
   dimensions:
     0: ngw
-  type: D
+  type: float64
   units: inches
 lake_sroff:
   desc: Total surface runoff into each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_sto:
   desc: Storage in each lake using Puls or linear storage routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs-days
 lake_stream_in:
   desc: Total streamflow into each lake
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: cfs
 lake_transfer:
   desc: Transfer flow rate from each lake HRU for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 lake_transfer_tot:
   desc: Transfer flow rate from each lake HRU for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 lake_vol:
   desc: Storage in each lake using broad-crested weir or gate opening routing
   dimensions:
     0: nlake
-  type: D
+  type: float64
   units: acre-feet
 lakein_sz:
   desc: Cascading interflow and Dunnian surface runoff to lake HRUs for each upslope
     HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 last_basin_stor:
   desc: Basin area-weighted average storage in all water storage reservoirs from previous
     time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 lso:
   desc: Counter for tracking the number of days the snowpack is at or above 0 degrees
     Celsius
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: number of iterations
 lst:
   desc: Flag indicating whether there was new snow that was insufficient to reset
     the albedo curve (1) (albset_snm or albset_sna) otherwise (0)
   dimensions:
     0: nhru
-  type: B
+  type: int32
   units: none
 lwrad_net:
   desc: Net long-wave radiation for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: megajoules/m**2/day
 mso:
   desc: Flag to indicate if time is before (1) or after (2) the first potential day
     for melt season (melt_look)
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 net_apply:
   desc: canopy_gain minus interception
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 net_ppt:
   desc: Precipitation (rain and/or snow) that falls through the canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 net_rain:
   desc: Rain that falls through canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 net_snow:
   desc: Snow that falls through canopy for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 newsnow:
   desc: Flag to indicate if new snow fell on each HRU (0=no;1=yes)
   dimensions:
     0: nhru
-  type: I
+  type: int32
   units: none
 obs_runoff_mo:
   desc: Monthly measured streamflow at basin outlet
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 obs_runoff_tot:
   desc: Total simulation measured streamflow at basin outlet
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 obs_runoff_yr:
   desc: Yearly measured streamflow at basin outlet
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 obsq_inches:
   desc: Measured streamflow at specified outlet station
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 obsq_inches_mo:
   desc: Monthly measured streamflow at specified outlet station
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 obsq_inches_tot:
   desc: Total simulation basin area-weighted average measured streamflow at specified
     outlet station
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 obsq_inches_yr:
   desc: Yearly measured streamflow at specified outlet station
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 orad:
   desc: Measured or computed solar radiation on a horizontal surface
   dimensions:
     0: one
-  type: F
+  type: float64
   units: Langleys
 orad_hru:
   desc: Solar radiation on a horizontal surface for each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: Langleys
 pan_evap:
   desc: Pan evaporation at each measurement station
   dimensions:
     0: nevap
-  type: F
+  type: float64
   units: inches
 perv_actet:
   desc: Actual ET from the capillary reservoir of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 perv_avail_et:
   desc: Unsatisfied ET available to the capillary reservoir of each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pfr_stor_frac:
   desc: Fraction of preferential flow reservoir storage of the maximum storage for
     each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 pk_def:
   desc: Heat deficit - amount of heat necessary to make the snowpack isothermal at
     0 degrees Celsius
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: Langleys
 pk_den:
   desc: Density of the snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: gm/cm3
 pk_depth:
   desc: Depth of snowpack on each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 pk_ice:
   desc: Storage of frozen water in the snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pk_precip:
   desc: Precipitation added to snowpack for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pk_temp:
   desc: Temperature of the snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degrees Celsius
 pksv:
   desc: Snowpack water equivalent when there is new snow and in melt phase; used to
     interpolate between depletion curve and100 percent on each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 pkwater_ante:
   desc: Antecedent snowpack water equivalent on each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 pkwater_equiv:
   desc: Snowpack water equivalent on each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 potet:
   desc: Potential ET for each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: inches
 potet_lower:
   desc: Potential ET in the lower zone of the capillary reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 potet_rechr:
   desc: Potential ET in the recharge zone of the capillary reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pptmix:
   desc: Flag to indicate if precipitation is a mixture of rain and snow for each HRU
     (0=no;1=yes)
   dimensions:
-    0: nhru
-  type: I
+    0: n_time_chunk
+    1: nhru
+  type: int32
   units: none
 pptmix_nopack:
   desc: Flag indicating that a mixed precipitation event has occurred with no snowpack
     present on an HRU (1), otherwise (0)
   dimensions:
     0: nhru
-  type: B
+  type: int32
   units: none
 precip:
   desc: Precipitation at each measurement station
   dimensions:
     0: nrain
-  type: F
+  type: float64
   units: precip_units
 pref_flow:
   desc: Interflow from the preferential-flow reservoir that flows to the stream network
     for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pref_flow_in:
   desc: Infiltration and flow from gravity reservoir to the preferential-flow reservoir
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pref_flow_infil:
   desc: Infiltration to the preferential-flow reservoir storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pref_flow_max:
   desc: Maximum storage of the preferential-flow reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 pref_flow_stor:
   desc: Storage in preferential-flow reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 pref_flow_stor_change:
   desc: Storage change in preferential-flow reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage change
-pref_flow_prev:
+pref_flow_stor_prev:
   desc: Previous time storage in preferential-flow reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 pref_flow_thrsh:
@@ -2153,320 +2171,328 @@ pref_flow_thrsh:
     soil saturation minus preferential-flow storage
   dimensions:
     0: nhru
-  type: F
+  type: float64
+  units: inches
+prcp:
+  desc: Input/forcing precipitation to each HRU
+  dimensions:
+    0: nhru
+  type: float64
   units: inches
 prmx:
   desc: Fraction of rain in a mixed precipitation event for each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: decimal fraction
 pss:
   desc: Previous snowpack water equivalent plus new snow
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 pst:
   desc: While a snowpack exists, pst tracks the maximum snow water equivalent of that
     snowpack
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 rain_day:
   desc: Flag to set the form of any precipitation to rain (0=determine form; 1=rain)
   dimensions:
     0: one
-  type: I
+  type: int32
   units: none
 recharge:
   desc: Recharge to the associated GWR as sum of soil_to_gw and ssr_to_gw for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 runoff:
   desc: Streamflow at each measurement station
   dimensions:
     0: nobs
-  type: F
+  type: float64
   units: runoff_units
 salb:
   desc: Days since last new snow to reset albedo for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: days
 scrv:
   desc: Snowpack water equivalent plus a portion of new snow on each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 seg_ccov:
   desc: Area-weighted average cloud cover fraction for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: decimal fraction
 seg_gwflow:
   desc: Area-weighted average groundwater discharge for each segment from HRUs contributing
     flow to the segment and upstream HRUs
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: inches
 seg_humid:
   desc: Area-weighted average relative humidity for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: decimal fraction
 seg_inflow:
   desc: Total flow entering a segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seg_lateral_inflow:
   desc: Lateral inflow entering a segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seg_maxtemp:
   desc: Area-weighted average maximum air temperature for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees Celsius
 seg_melt:
   desc: Area-weighted average snowmelt for each segment from HRUs contributing flow
     to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: inches
 seg_outflow:
   desc: Streamflow leaving a segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seg_potet:
   desc: Hru area-weighted average potential ET for each segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: inches
 seg_rain:
   desc: Area-weighted average rainfall for each segment from HRUs contributing flow
     to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: inches
 seg_shade:
   desc: Area-weighted average shade fraction for each segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: decimal fraction
 seg_sroff:
   desc: Area-weighted average surface runoff for each segment from HRUs contributing
     flow to the segment and upstream HRUs
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: inches
 seg_ssflow:
   desc: Area-weighted average interflow for each segment from HRUs contributing flow
     to the segment and upstream HRUs
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: inches
 seg_upstream_inflow:
   desc: Sum of inflow from upstream segments
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seg_width:
   desc: Width of each segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: meters
 seginc_gwflow:
   desc: Area-weighted average groundwater discharge for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seginc_potet:
   desc: Area-weighted average potential ET for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: inches
 seginc_sroff:
   desc: Area-weighted average surface runoff for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seginc_ssflow:
   desc: Area-weighted average interflow for each segment from HRUs contributing flow
     to the segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 seginc_swrad:
   desc: Area-weighted average solar radiation for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: Langleys
 segment_delta_flow:
   desc: Cummulative flow in minus flow out for each stream segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 segment_gain:
   desc: Transfer gain for each stream segment for each time step
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: cfs
 segment_gain_tot:
   desc: Transfer gain for each stream segment for the simulation
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: cfs
 segment_transfer:
   desc: Transfer flow rate from each stream segment for each time step
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: cfs
 segment_transfer_tot:
   desc: Transfer flow rate from each stream segment for the simulation
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: cfs
 slow_flow:
   desc: Interflow from gravity reservoir storage that flows to the stream network
     for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 slow_stor:
   desc: Storage of gravity reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 slow_stor_change:
   desc: Storage of gravity reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage change
 slow_stor_prev:
   desc: Previous time storage of gravity reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 slst:
   desc: Days since last new snow for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: days
 sm2gw_grav:
   desc: Drainage from each gravity reservoir to each MODFLOW cell
   dimensions:
     0: nhrucell
-  type: F
+  type: float64
   units: inches
 snow_evap:
   desc: Evaporation and sublimation from snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 snow_free:
   desc: Fraction of snow-free surface for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 snowcov_area:
   desc: Snow-covered area on each HRU prior to melt and sublimation unless snowpack
     depleted
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 snowcov_areasv:
   desc: Snow cover fraction when there is new snow and in melt phase; used to interpolate
     between depletion curve and100 percent on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 snowdepth:
   desc: Snow depth at each measurement station
   dimensions:
     0: nsnow
-  type: F
+  type: float64
   units: inches
 snowevap_aet_frac:
   desc: Fraction of sublimation of AET for each HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: decimal fraction
 snowmelt:
   desc: Snowmelt from snowpack on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
+  var_category: mass flux
 snsv:
   desc: Tracks the cumulative amount of new snow until there is enough to reset the
     albedo curve (albset_snm or albset_sna)
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_lower:
   desc: Storage in the lower zone of the capillary reservoir that is only available
     for transpiration for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 soil_lower_change:
@@ -2474,640 +2500,672 @@ soil_lower_change:
     for transpiration for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_lower_ratio:
   desc: Water content ratio in the lower zone of the capillary reservoir for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 soil_moist:
   desc: Storage of capillary reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass storage
 soil_moist_change:
   desc: Storage of capillary reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
+  units: inches
+  var_category: mass storage change
+soil_moist_prev:
+  desc: Previous storage of capillary reservoir for each HRU
+  dimensions:
+    0: nhru
+  type: float64
   units: inches
   var_category: mass storage
 soil_moist_frac:
   desc: Fraction of soil zone storage of the maximum storage for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 soil_moist_prev:
   desc: Previous storage of capillary reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_moist_tot:
   desc: Total soil-zone water storage (soil_moist + ssres_stor)
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_rechr:
   desc: Storage for recharge zone (upper portion) of the capillary reservoir that
     is available for both evaporation and transpiration
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_rechr_max:
   desc: Maximum storage for soil recharge zone (upper portion of capillary reservoir
     where losses occur as both evaporation and transpiration)
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_rechr_ratio:
   desc: Water content ratio in the recharge zone of the capillary reservoir for each
     HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: decimal fraction
 soil_to_gw:
   desc: Portion of excess flow to the capillary reservoir that drains to the associated
     GWR for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
+  var_category: mass flux
 soil_to_ssr:
   desc: Portion of excess flow to the capillary reservoir that flows to the gravity
     reservoir for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soil_zone_max:
   desc: Maximum storage of all soil zone reservoirs
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 soilzone_gain:
   desc: Transfer gain to the capillary reservoir within the soilzone for each HRU
     for each time step
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 soilzone_gain_tot:
   desc: Transfer gain to the capillary reservoir within the soilzone for each HRU
     for the simulation
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: cfs
 solrad:
   desc: Solar radiation at each measurement station
   dimensions:
     0: nsol
-  type: F
+  type: float64
   units: Langleys
 solrad_tmax:
   desc: Basin daily maximum temperature for use with solar radiation calculations
   dimensions:
     0: one
-  type: F
+  type: float64
   units: temp_units
 solrad_tmin:
   desc: Basin daily minimum temperature for use with solar radiation calculations
   dimensions:
     0: one
-  type: F
+  type: float64
   units: temp_units
 soltab_horad_potsw:
   desc: Potential solar radiation on a horizontal plane for each Julian Day for each
     HRU
   dimensions:
-    0: nhru
-  type: D
+    0: doy
+    1: nhru
+  type: float64
   units: Langleys
 soltab_potsw:
   desc: Potential solar radiation for each Julian Day for each HRU
   dimensions:
-    0: nhru
-  type: D
+    0: doy
+    1: nhru
+  type: float64
   units: Langleys
 soltab_sunhrs:
   desc: The number of hours of potential direct sunlight
   dimensions:
-    0: nhru
-  type: D
+    0: doy
+    1: nhru
+  type: float64
   units: hours
 sroff:
   desc: Surface runoff to the stream network for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
   var_category: mass flux
 ssr_to_gw:
   desc: Drainage from the gravity-reservoir to the associated GWR for each HRU
   dimensions:
     0: nssr
-  type: F
+  type: float64
   units: inches
+  var_category: mass flux
 ssres_flow:
   desc: Interflow from gravity and preferential-flow reservoirs to the stream network
     for each HRU
   dimensions:
     0: nssr
-  type: F
+  type: float64
   units: inches
 ssres_in:
   desc: Inflow to the gravity and preferential-flow reservoirs for each HRU
   dimensions:
     0: nssr
-  type: F
+  type: float64
   units: inches
 ssres_stor:
   desc: Storage in the gravity and preferential-flow reservoirs for each HRU
   dimensions:
     0: nssr
-  type: F
+  type: float64
   units: inches
 streamflow_cfs:
   desc: Streamflow at each measurement station
   dimensions:
     0: nobs
-  type: D
+  type: float64
   units: cfs
 streamflow_cms:
   desc: Streamflow at each measurement station
   dimensions:
     0: nobs
-  type: D
+  type: float64
   units: cms
 strm_seg_in:
   desc: Flow in stream segments as a result of cascading flow in each stream segment
   dimensions:
     0: nsegment
-  type: D
+  type: float64
   units: cfs
 sub_cfs:
   desc: Total streamflow leaving each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 sub_cms:
   desc: Total streamflow leaving each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cms
 sub_gwflow:
   desc: Area-weighted average groundwater discharge from associated GWRs to each subbasin
     and from upstream subbasins
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 sub_inq:
   desc: Sum of streamflow from upstream subbasins to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 sub_interflow:
   desc: Area-weighted average interflow to each subbasin from associated HRUs and
     from upstream subbasins
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 sub_sroff:
   desc: Area-weighted average surface runoff from associated HRUs to each subbasin
     and from upstream subbasins
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 subinc_actet:
   desc: Area-weighted average actual ET from associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_capstor_frac:
   desc: Area-weighted average fraction of capillary reservoir water content storage
     for associated HRUs of each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: decimal fraction
 subinc_deltastor:
   desc: Change in storage for each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_gwflow:
   desc: Area-weighted average groundwater discharge from associatedGWRs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 subinc_interflow:
   desc: Area-weighted average interflow from associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 subinc_pkweqv:
   desc: Area-weighted average snowpack water equivalent from associated HRUs of each
     subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_potet:
   desc: Area-weighted average potential ET from associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_precip:
   desc: Area-weighted average precipitation from associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_rain:
   desc: Area-weighted average rain on associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_recharge:
   desc: Area-weighted average recharge from associated HRUs of each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_snow:
   desc: Area-weighted average snow on associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_snowcov:
   desc: Area-weighted average snow-covered area for associated HRUs for each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: decimal fraction
 subinc_snowmelt:
   desc: Area-weighted average snowmelt from associated HRUs of each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_sroff:
   desc: Area-weighted average surface runoff from associated HRUs to each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: cfs
 subinc_stor:
   desc: Area-weighted average total water content in storage reservoirs associated
     HRUs of each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 subinc_swrad:
   desc: Area-weighted average shortwave radiation distributed to associated HRUs of
     each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: Langleys
 subinc_szstor_frac:
   desc: Area-weighted average fraction of soil-zone water content storage for associated
     HRUs of each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: decimal fraction
 subinc_tavgc:
   desc: Area-weighted average air temperature for associated HRUs to each subbasin
   dimensions:
-    0: nsub
-  type: D
+    0: n_time_chunk
+    1: nsub
+  type: float64
   units: degrees Celsius
 subinc_tmaxc:
   desc: Area-weighted average maximum air temperature for associated HRUs to each
     subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: degrees Celsius
 subinc_tminc:
   desc: Area-weighted average minimum air temperature for associated HRUs to each
     subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: degrees Celsius
 subinc_wb:
   desc: Water balance for each subbasin
   dimensions:
     0: nsub
-  type: D
+  type: float64
   units: inches
 swale_actet:
   desc: Evaporation from the gravity and preferential-flow reservoirs that exceeds
     sat_threshold
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 swrad:
   desc: Shortwave radiation distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: Langleys
 t_ground:
   desc: ground temperature
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees C
 t_gw:
   desc: groundwater temperature
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees C
 t_roff:
   desc: Area-weighted average air temperature for each segment from HRUs contributing
     flow to the segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees Celsius
 t_ss:
   desc: subsurface temperature
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees C
 tavgc:
   desc: Average air temperature distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: degrees Celsius
 tavgf:
   desc: Average air temperature distributed to each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degrees Fahrenheit
 tcal:
   desc: Net snowpack energy balance on each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: Langleys
 temp_avg:
   desc: Average stream temperature based on all inflows and previous temperature for
     each segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees Celsius
 tempc_dewpt:
   desc: Air temperature at dew point for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degrees Celsius
 tmax_hru:
   desc: Maximum air temperature distributed to each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degC
 tmax_sta:
   desc: Maximum air temperature at each measurement station
   dimensions:
     0: ntemp
-  type: F
+  type: float64
   units: degC
 tmaxc:
   desc: Maximum air temperature distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: degrees Celsius
 tmaxf:
   desc: Maximum air temperature distributed to each HRU
+  dimensions:
+    0: n_time_chunk
+    1: nhru
+  type: float64
+  units: degrees Fahrenheit
+tmax:
+  desc: Input/forcing maximum air temperature to each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degrees Fahrenheit
 tmin_hru:
   desc: Minimum air temperature distributed to each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degC
 tmin_sta:
   desc: Minimum air temperature at each measurement station
   dimensions:
     0: ntemp
-  type: F
+  type: float64
   units: degC
 tminc:
   desc: Minimum air temperature distributed to each HRU
   dimensions:
-    0: nhru
-  type: F
+    0: n_time_chunk
+    1: nhru
+  type: float64
   units: degrees Celsius
 tminf:
   desc: Minimum air temperature distributed to each HRU
+  dimensions:
+    0: n_time_chunk
+    1: nhru
+  type: float64
+  units: degrees Fahrenheit
+tmin:
+  desc: Input/forcing minimum air temperature to each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: degrees Fahrenheit
 total_canopy_gain:
   desc: Transfer gains to all canopy reservoirs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_consumed_gain:
   desc: Transfer flow rates to all water-use comsumption destinations for each time
     step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_dprst_gain:
   desc: Transfer gains to all surface-depression storage for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_dprst_transfer:
   desc: Transfer flow rates from all surface-depression storage for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_external_gain:
   desc: Transfer gains to all external locations for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_external_transfer:
   desc: Transfer flow rates from all external sources for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_gwr_gain:
   desc: Flow to all groundwater reservoirs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_gwr_transfer:
   desc: Transfer flow rates from all groundwater reservoirs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_lake_gain:
   desc: Transfer gains to all lake HRUs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_lake_transfer:
   desc: Transfer flow rates from all lake HRUs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_segment_gain:
   desc: Transfer gains to all stream segments for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_segment_transfer:
   desc: Transfer flow rates from all stream segments for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_soilzone_gain:
   desc: Transfer gains to all capillary reservoirs for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 total_transfers:
   desc: Transfer of all water-use transfers for each time step
   dimensions:
     0: one
-  type: D
+  type: float64
   units: cfs
 transfer_rate:
   desc: Transfer of each water-use transfer for each time step
   dimensions:
     0: nwateruse
-  type: D
+  type: float64
   units: cfs
 transp_on:
   desc: Flag indicating whether transpiration is occurring (0=no;1=yes)
   dimensions:
-    0: nhru
-  type: I
+    0: n_time_chunk
+    1: nhru
+  type: int32
   units: none
 unused_potet:
   desc: Unsatisfied potential evapotranspiration
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: inches
 upslope_dunnianflow:
   desc: Cascading Dunnian surface runoff that flows to the capillary reservoir of
     each downslope HRU for each upslope HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 upslope_hortonian:
   desc: Hortonian surface runoff received from upslope HRUs
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 upslope_interflow:
   desc: Cascading interflow runoff that flows to the capillary reservoir of each downslope
     HRU for each upslope HRU
   dimensions:
     0: nhru
-  type: D
+  type: float64
   units: inches
 upstrm_temp:
   desc: Temperature of streamflow entering each segment
   dimensions:
     0: nsegment
-  type: F
+  type: float64
   units: degrees Celsius
 vp_actual:
   desc: Actual vapor pressure for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: kilopascals
 vp_sat:
   desc: Saturation vapor pressure for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: kilopascals
 vp_slope:
   desc: Slope of saturation vapor pressure versus air temperature curve for each HRU
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: kilopascals/degrees Celsius
 watbal_sum:
   desc: Water balance aggregate
   dimensions:
     0: one
-  type: D
+  type: float64
   units: inches
 wind_speed:
   desc: Wind speed at each measurement station
   dimensions:
     0: nwind
-  type: F
+  type: float64
   units: mph
 windspeed_hru:
   desc: Area of HRU that is impervious
   dimensions:
     0: nhru
-  type: F
+  type: float64
   units: meters/second
diff --git a/pynhm/utils/csv_utils.py b/pynhm/utils/csv_utils.py
index 4f712e41..73a8dcf7 100644
--- a/pynhm/utils/csv_utils.py
+++ b/pynhm/utils/csv_utils.py
@@ -6,7 +6,7 @@
 import numpy as np
 import pandas as pd
 
-from ..base.meta import Meta, meta_netcdf_type, meta_numpy_type
+from ..base import meta
 
 fileish = Union[str, pl.PosixPath, dict]
 
@@ -32,7 +32,7 @@ def __init__(
         self._variables = None
         self._coordinates = None
         self._data = None
-        self.meta = Meta()
+        self.meta = meta
 
     @property
     def nhm_id(self) -> list:
@@ -157,7 +157,7 @@ def to_netcdf(
             ds.createDimension(key, len(value))
 
         # Dim Variables
-        time = ds.createVariable("datetime", "f4", ("time",))
+        time = ds.createVariable("time", "f4", ("time",))
         start_date = self._data["date"][0].strftime("%Y-%m-%d %H:%M:%S")
         time_units = f"days since {start_date}"
         time.units = time_units
@@ -177,13 +177,13 @@ def to_netcdf(
         for variable_name in self.variable_names:
             if self.meta.is_available(variable_name):
                 meta_dict = self.meta.find_variables(variable_name)
-                variable_type = meta_netcdf_type(meta_dict[variable_name])
+                variable_type = meta.meta_netcdf_type(meta_dict[variable_name])
                 dimension = dimensions[variable_name]
                 if "nsegment" in dimension:
                     dim_name = "nhm_seg"
                 else:
                     dim_name = "nhm_id"
-                dtype = meta_numpy_type(meta_dict[variable_name])
+                dtype = meta.meta_numpy_type(meta_dict[variable_name])
             else:
                 variable_type = "f4"
                 dim_name = "nhm_id"
@@ -273,7 +273,7 @@ def _get_data(self) -> None:
 
             # determine the variable type
             if self.meta.is_available(variable_name):
-                variable_type = meta_numpy_type(
+                variable_type = meta.meta_numpy_type(
                     self.meta.find_variables(variable_name)[variable_name]
                 )
                 if (
diff --git a/pynhm/utils/netcdf_utils.py b/pynhm/utils/netcdf_utils.py
index e7e02e89..4e3735a4 100644
--- a/pynhm/utils/netcdf_utils.py
+++ b/pynhm/utils/netcdf_utils.py
@@ -17,6 +17,9 @@
 #     Still need some mechanism for initial itime_step for datetime coordinate
 #     variables
 
+# JLM TODO: the implied time dimension seems like a bad idea, it should be
+#    an argument.
+
 
 class NetCdfRead(Accessor):
     def __init__(
@@ -25,6 +28,7 @@ def __init__(
         nc_read_vars: list = None,
     ) -> "NetCdfRead":
 
+        self.name = "NetCdfRead"
         self._nc_file = name
         self._nc_read_vars = nc_read_vars
         self._open_nc_file()
@@ -51,11 +55,11 @@ def _open_nc_file(self):
 
         # Set dimension variables which are not chunked
 
-        if "datetime" in self.dataset.variables:
-            self._datetime = (
+        if "time" in self.dataset.variables:
+            self._time = (
                 nc4.num2date(
-                    self.dataset.variables["datetime"][:],
-                    units=self.dataset.variables["datetime"].units,
+                    self.dataset.variables["time"][:],
+                    units=self.dataset.variables["time"].units,
                     calendar="standard",
                     only_use_cftime_datetimes=False,
                 )
@@ -63,9 +67,10 @@ def _open_nc_file(self):
                 .astype("datetime64[s]")
                 # JLM: the global time type as in cbh_utils, define somewhere
             )
-            self._ntimes = self._datetime.shape[0]
+            self._ntimes = self._time.shape[0]
 
         if "doy" in self.dataset.variables:
+            print(self)
             self._doy = self.dataset.variables["doy"][:].data
             self._ntimes = self._doy.shape[0]
 
@@ -93,7 +98,7 @@ def _open_nc_file(self):
         self._variables = [
             name
             for name in self.ds_var_list
-            if name != "datetime" and name not in spatial_id_names
+            if name != "time" and name not in spatial_id_names
         ]
 
     @property
@@ -109,16 +114,21 @@ def ntimes(
         return self._ntimes
 
     @property
-    def date_times(
+    def times(
         self,
     ) -> np.ndarray:
-        """Get the datetimes in the NetCDF file
+        """Get the times in the NetCDF file
 
         Returns:
             data_times: numpy array of datetimes in the NetCDF file
 
         """
-        return self._datetime
+        if hasattr(self, "_time"):
+            return self._time
+        elif hasattr(self, "_doy"):
+            return self._doy
+        else:
+            raise KeyError(f"{self.name} has neither _time nor _doy")
 
     @property
     def nhru(
@@ -177,7 +187,7 @@ def variables(self):
         """Get a list of variable names
 
         Returns:
-            variables: list of variable names, excluding the datetime and
+            variables: list of variable names, excluding the time and
                 nhru variables
 
         """
@@ -226,7 +236,7 @@ def advance(
                 time step
 
         """
-        if "datetime" in self.dataset.variables:
+        if "time" in self.dataset.variables:
             arr = self.get_data(
                 variable,
                 itime_step=self._itime_step[variable],
@@ -278,7 +288,11 @@ def __init__(
         for var_name in variables:
             dimension_name = meta_dimensions(var_meta[var_name])
             variable_dimensions[var_name] = dimension_name
-            if "nhru" in dimension_name or "ngw" in dimension_name:
+            if (
+                "nhru" in dimension_name
+                or "ngw" in dimension_name
+                or "nssr" in dimension_name
+            ):
                 nhru_coordinate = True
             if "nsegment" in dimension_name:
                 nsegment_coordinate = True
@@ -304,47 +318,45 @@ def __init__(
         # Dimensions
 
         # Time is an implied dimension in the netcdf file for most variables
-        # time/datetime is necessary if an alternative time
+        # time is necessary if an alternative time
         # dimenison does not appear in even one variable
-        ndays_time_vars = [
+        doy_time_vars = [
             "soltab_potsw",
             "soltab_horad_potsw",
             "soltab_sunhrs",
         ]
 
         for var_name in variables:
-            if var_name in ndays_time_vars:
+            if var_name in doy_time_vars:
                 continue
             # None for the len argument gives an unlimited dim
             self.dataset.createDimension("time", None)
-            self.datetime = self.dataset.createVariable(
-                "datetime", "f4", ("time",)
-            )
-            self.datetime.units = time_units
+            self.time = self.dataset.createVariable("time", "f4", ("time",))
+            self.time.units = time_units
             break
 
         # similarly, if alternative time dimenions exist.. define them
         for var_name in variables:
-            if var_name not in ndays_time_vars:
+            if var_name not in doy_time_vars:
                 continue
-            self.dataset.createDimension("ndays", 366)
-            self.doy = self.dataset.createVariable("doy", "i4", ("ndays",))
+            self.dataset.createDimension("doy", 366)
+            self.doy = self.dataset.createVariable("doy", "i4", ("doy",))
             self.doy.units = "Day of year"
             break
 
         if nhru_coordinate:
-            self.dataset.createDimension("hru_id", self.nhrus)
+            self.dataset.createDimension("nhm_id", self.nhrus)
         if nsegment_coordinate:
-            self.dataset.createDimension("hru_seg", self.nsegments)
+            self.dataset.createDimension("nhm_seg", self.nsegments)
 
         if nhru_coordinate:
             self.hruid = self.dataset.createVariable(
-                "hru_id", "i4", ("hru_id")
+                "nhm_id", "i4", ("nhm_id")
             )
             self.hruid[:] = np.array(self.hru_ids, dtype=int)
         if nsegment_coordinate:
             self.segid = self.dataset.createVariable(
-                "hru_seg", "i4", ("hru_seg")
+                "nhm_seg", "i4", ("nhm_seg")
             )
             self.segid[:] = np.array(self.hru_segments, dtype=int)
 
@@ -352,12 +364,12 @@ def __init__(
         for var_name in variables:
             variabletype = meta_netcdf_type(var_meta[var_name])
             if "nsegment" in variable_dimensions[var_name]:
-                spatial_coordinate = "hru_seg"
+                spatial_coordinate = "nhm_seg"
             else:
-                spatial_coordinate = "hru_id"
+                spatial_coordinate = "nhm_id"
 
-            if var_name in ndays_time_vars:
-                time_dim = "ndays"
+            if var_name in doy_time_vars:
+                time_dim = "doy"
             else:
                 time_dim = "time"
 
@@ -387,9 +399,7 @@ def close(self):
             return
 
     def add_simulation_time(self, itime_step: int, simulation_time: float):
-        # var = self.variables["datetime"]
-        # var[itime_step] = simulation_time
-        self.datetime[itime_step] = simulation_time
+        self.time[itime_step] = nc4.date2num(simulation_time, self.time.units)
         return
 
     def add_data(
@@ -415,7 +425,7 @@ def add_all_data(
         name: str,
         data: np.ndarray,
         time_data: np.ndarray,
-        time_coord: str = "datetime",
+        time_coord: str = "time",
     ) -> None:
         """Add data to a NetCDF variable
 
diff --git a/pynhm/utils/parameters.py b/pynhm/utils/parameters.py
index f5e95930..1e8a9907 100644
--- a/pynhm/utils/parameters.py
+++ b/pynhm/utils/parameters.py
@@ -148,9 +148,12 @@ def load(parameter_file: fileish) -> "PrmsParameters":
 
         """
         data = PrmsFile(parameter_file, "parameter").get_data()
+
         # could insert dimenion data here. going to add this one for now.
         # it's a little unclear if constants like this are parameters or not
-        data["parameter"]["parameters"]["ndays"] = 366
+        data["parameter"]["parameters"]["doy"] = 366
+        data["parameter"]["parameter_dimensions"]["doy"] = None
+
         return PrmsParameters(
             data["parameter"]["parameters"],
             data["parameter"]["parameter_dimensions"],
diff --git a/pynhm/utils/prms5util.py b/pynhm/utils/prms5util.py
index 3b0fc254..2e354bcd 100644
--- a/pynhm/utils/prms5util.py
+++ b/pynhm/utils/prms5util.py
@@ -284,7 +284,7 @@ def to_netcdf(
         nhm_ids: np.ndarray = None,
         zlib: bool = True,
         complevel: int = 4,
-        chunk_sizes: dict = {"ndays": 0, "hruid": 0},
+        chunk_sizes: dict = {"doy": 0, "hruid": 0},
     ):
         # This is just different enough to make it it's own thing compared
         # to the CSV outputs of PRMS.
@@ -295,7 +295,7 @@ def to_netcdf(
             self.nhm_ids = nhm_ids
             self.spatial_coord_name = "nhm_id"
 
-        ndays = self["soltab_potsw"].shape[0]
+        ndoy = self["soltab_potsw"].shape[0]
         nhru = self["soltab_potsw"].shape[1]
 
         if self.spatial_coord is None:
@@ -309,10 +309,10 @@ def to_netcdf(
             ds.setncattr("Description", "PRMS soltab data")
 
             # time dime and coord
-            ds.createDimension("ndays", ndays)
-            doy = ds.createVariable("doy", "i4", ("ndays",))
+            ds.createDimension("doy", ndoy)
+            doy = ds.createVariable("doy", "i4", ("doy",))
             doy.units = "Day of year"
-            doy[:] = np.arange(ndays) + 1
+            doy[:] = np.arange(ndoy) + 1
 
             # space dim and coord
             ds.createDimension(self.spatial_coord_name, nhru)
@@ -324,7 +324,7 @@ def to_netcdf(
             variables[vv] = ds.createVariable(
                 vv,
                 "f4",
-                ("ndays", self.spatial_coord_name),
+                ("doy", self.spatial_coord_name),
                 fill_value=nc4.default_fillvals["f4"],
                 zlib=zlib,
                 complevel=complevel,


Test patch:
diff --git a/autotest/test_boundary_layer.py b/autotest/test_atmosphere.py
similarity index 58%
rename from autotest/test_boundary_layer.py
rename to autotest/test_atmosphere.py
index 681aba4f..b24fce51 100644
--- a/autotest/test_boundary_layer.py
+++ b/autotest/test_atmosphere.py
@@ -1,9 +1,9 @@
-import pathlib as pl
+from warnings import warn
 
 import numpy as np
 import pytest
 
-from pynhm.atmosphere.PRMSBoundaryLayer import PRMSBoundaryLayer
+from pynhm.atmosphere.PRMSAtmosphere import PRMSAtmosphere
 from pynhm.base.adapter import adapter_factory
 from pynhm.base.control import Control
 from pynhm.utils.parameters import PrmsParameters
@@ -19,8 +19,7 @@ def control(domain, params):
     return Control.load(domain["control_file"], params=params)
 
 
-@pytest.mark.xfail
-class TestPRMSBoundaryLayer:
+class TestPRMSAtmosphere:
     def test_init(self, domain, control, tmp_path):
 
         output_dir = domain["prms_output_dir"]
@@ -35,6 +34,13 @@ def test_init(self, domain, control, tmp_path):
             "hru_snow",
             "swrad",
             "potet",
+            "transp_on",
+            "tmaxc",
+            "tavgc",
+            "tminc",
+            "prmx",
+            "pptmix",
+            "orad_hru",
         ]
         ans = {}
         for key in comparison_var_names:
@@ -44,11 +50,14 @@ def test_init(self, domain, control, tmp_path):
             )
 
         input_variables = {}
-        for key in PRMSBoundaryLayer.get_inputs():
-            nc_pth = cbh_dir / f"{key}.nc"
+        for key in PRMSAtmosphere.get_inputs():
+            dir = ""
+            if "soltab" in key:
+                dir = "output/"
+            nc_pth = cbh_dir / f"{dir}{key}.nc"
             input_variables[key] = nc_pth
 
-        atm = PRMSBoundaryLayer(
+        atm = PRMSAtmosphere(
             control=control,
             **input_variables,
             budget_type="strict",
@@ -63,24 +72,43 @@ def test_init(self, domain, control, tmp_path):
             # print(atm.budget)
 
             # compare along the way
-            atol = 1e-3
-            rtol = 0.0
             for key, val in ans.items():
                 val.advance()
+
             for key in ans.keys():
                 a1 = ans[key].current
-                a2 = atm[key]
-                success = np.allclose(a2, a1, atol=atol, rtol=rtol)
-                if not success:
+                a2 = atm[key].current
+
+                tol = 1e-5
+                if key == "swrad":
+                    tol = 5e-4
+                    warn(f"using tol = {tol} for variable {key}")
+                if key == "tavgc":
+                    tol = 1e-5
+                    warn(f"using tol = {tol} for variable {key}")
+
+                success_a = np.allclose(a2, a1, atol=tol, rtol=0.00)
+                success_r = np.allclose(a2, a1, atol=0.00, rtol=tol)
+                if (not success_a) and (not success_r):
+                    diff = a2 - a1
+                    diffratio = abs(diff / a2)
+                    if (diffratio < 1e-6).all():
+                        success = True
+                        continue
                     all_success = False
-                    diff = a1 - a2
                     diffmin = diff.min()
                     diffmax = diff.max()
+                    abs_diff = abs(diff)
+                    absdiffmax = abs_diff.max()
+                    wh_absdiffmax = np.where(abs_diff)[0]
                     print(f"time step {istep}")
                     print(f"output variable {key}")
                     print(f"prms   {a1.min()}    {a1.max()}")
                     print(f"pynhm  {a2.min()}    {a2.max()}")
                     print(f"diff   {diffmin}  {diffmax}")
+                    print(f"absdiffmax  {absdiffmax}")
+                    print(f"wh_absdiffmax  {wh_absdiffmax}")
+                    asdf
 
         atm.finalize()
 
diff --git a/autotest/test_canopy.py b/autotest/test_canopy.py
index a45832e8..6705cd95 100644
--- a/autotest/test_canopy.py
+++ b/autotest/test_canopy.py
@@ -76,6 +76,7 @@ def test_init(self, domain, control, tmp_path):
             "intcp_evap",
             "hru_intcpstor",
             "hru_intcpevap",
+            "intcp_changeover",
         ]
         ans = {}
         for key in comparison_var_names:
diff --git a/autotest/test_groundwater.py b/autotest/test_groundwater.py
index 58adf8e1..f2ae2002 100644
--- a/autotest/test_groundwater.py
+++ b/autotest/test_groundwater.py
@@ -21,12 +21,20 @@ def test_init(self, domain, tmp_path):
             nc_path = output_dir / f"{key}.nc"
             input_variables[key] = nc_path
 
-        gw = PRMSGroundwater(control, **input_variables)
+        gw = PRMSGroundwater(control, **input_variables, budget_type="strict")
         nc_parent = tmp_path / domain["domain_name"]
         gw.initialize_netcdf(nc_parent)
 
         output_compare = {}
+        vars_compare = (
+            "gwres_flow",
+            "gwres_in",
+            "gwres_sink",
+            "gwres_stor",
+        )
         for key in PRMSGroundwater.get_variables():
+            if key not in vars_compare:
+                continue
             base_nc_path = output_dir / f"{key}.nc"
             compare_nc_path = tmp_path / domain["domain_name"] / f"{key}.nc"
             output_compare[key] = (base_nc_path, compare_nc_path)
diff --git a/autotest/test_meta.py b/autotest/test_meta.py
index 743a9f13..53f460f6 100644
--- a/autotest/test_meta.py
+++ b/autotest/test_meta.py
@@ -1,15 +1,10 @@
 import pytest
 
-from pynhm.base.meta import Meta
+from pynhm.base import meta
 from pynhm.hydrology.PRMSGroundwater import PRMSGroundwater
 
 
-@pytest.fixture(scope="function")
-def meta():
-    return Meta()
-
-
-def test_init(meta):
+def test_init():
     # some random checks
     assert "nhru" in meta.dimensions.keys()
     assert "transp_on_dynamic" in meta.control.keys()
@@ -18,7 +13,7 @@ def test_init(meta):
     return
 
 
-def test_get_in_list(meta):
+def test_get_in_list():
     gw_vars = PRMSGroundwater.get_variables()
     gw_var_meta = meta.get_vars(gw_vars)
     assert set(gw_var_meta.keys()) == set(gw_vars)
diff --git a/autotest/test_model.py b/autotest/test_model.py
index c6f81d2e..11f98063 100644
--- a/autotest/test_model.py
+++ b/autotest/test_model.py
@@ -1,19 +1,13 @@
 import pathlib as pl
-from copy import deepcopy
-from pprint import pprint
+import shutil
 
 import numpy as np
 import pytest
 
-from pynhm.atmosphere.PRMSSolarGeometry import PRMSSolarGeometry
+import pynhm
 from pynhm.base.adapter import adapter_factory
 from pynhm.base.control import Control
 from pynhm.base.model import Model
-from pynhm.hydrology.PRMSCanopy import PRMSCanopy
-from pynhm.hydrology.PRMSEt import PRMSEt
-from pynhm.hydrology.PRMSGroundwater import PRMSGroundwater
-from pynhm.hydrology.PRMSRunoff import PRMSRunoff
-from pynhm.hydrology.PRMSSnow import PRMSSnow
 from pynhm.utils.parameters import PrmsParameters
 
 
@@ -27,41 +21,62 @@ def control(domain, params):
     return Control.load(domain["control_file"], params=params)
 
 
+compare_to_prms521 = False
+n_time_steps = 101
+budget_type = None
 test_models = {
-    "et": [PRMSEt],
-    "et_canopy": [PRMSEt, PRMSCanopy],
-    "et_canopy_runoff": [PRMSEt, PRMSCanopy, PRMSRunoff],
-    # "et_canopy_runoff_soil": [PRMSEt, PRMSCanopy, PRMSRunoff, PRMSSoilzone],
-    # "snow": [PRMSSnow],
-    # "solar_snow": [PRMSSolarGeometry, PRMSSnow],
-    # "canopy_snow_runoff": [
-    #    PRMSCanopy,
-    #    PRMSSnow,
-    #    PRMSRunoff,
-    #    PRMSSoilzone,
-    #    PRMSEt,
-    #    PRMSGroundwater,
-    # ],
+    "nhm": [
+        pynhm.PRMSSolarGeometry,
+        pynhm.PRMSAtmosphere,
+        pynhm.PRMSCanopy,
+        pynhm.PRMSSnow,
+        pynhm.PRMSRunoff,
+        pynhm.PRMSSoilzone,
+        pynhm.PRMSGroundwater,
+        pynhm.PRMSChannel,
+    ],
 }
 
 
 @pytest.mark.parametrize(
-    "components",
+    "processes",
     test_models.values(),
     ids=test_models.keys(),
 )
-def test_model(domain, control, components, tmp_path):
+def test_model(domain, control, processes, tmp_path):
 
     tmp_path = pl.Path(tmp_path)
     output_dir = domain["prms_output_dir"]
 
+    # setup input_dir with symlinked prms inputs and outputs
+    input_dir = tmp_path / "input"
+    input_dir.mkdir()
+    for ff in output_dir.resolve().glob("*.nc"):
+        shutil.copy(ff, input_dir / ff.name)
+    for ff in output_dir.parent.resolve().glob("*.nc"):
+        shutil.copy(ff, input_dir / ff.name)
+
     # TODO: Eliminate potet and other variables from being used
-    model = Model(*components, control=control, input_dir=output_dir)
+    model = Model(
+        *processes,
+        control=control,
+        input_dir=input_dir,
+        budget_type=budget_type,
+    )
 
     # ---------------------------------
-    # get the answer data
+    # get the answer data against PRMS5.2.1
     comparison_vars_dict_all = {
         "PRMSSolarGeometry": [],
+        "PRMSAtmosphere": [
+            "tmaxf",
+            "tminf",
+            "hru_ppt",
+            "hru_rain",
+            "hru_snow",
+            "swrad",
+            "potet",
+        ],
         "PRMSCanopy": [
             "net_rain",
             "net_snow",
@@ -84,6 +99,8 @@ def test_model(domain, control, components, tmp_path):
             "hru_impervstor",
             "sroff",
             "dprst_evap_hru",
+            # "dprst_vol_open",
+            "dprst_seep_hru",
         ],
         "PRMSEt": [
             "potet",
@@ -94,18 +111,55 @@ def test_model(domain, control, components, tmp_path):
             "perv_actet",
             "hru_actet",
         ],
+        "PRMSSoilzone": [
+            "hru_actet",
+            "perv_actet",
+            "potet_lower",
+            "potet_rechr",
+            "recharge",
+            "slow_flow",
+            "slow_stor",
+            "soil_lower",
+            "soil_moist",
+            "soil_moist_tot",
+            "infil",
+            "soil_rechr",
+            "soil_to_gw",
+            "soil_to_ssr",
+            "ssr_to_gw",
+            "ssres_flow",
+            "ssres_in",
+            "ssres_stor",
+        ],
+        "PRMSGroundwater": [
+            "soil_to_gw",  # input
+            "ssr_to_gw",  # input
+            "dprst_seep_hru",  # input
+            "gwres_flow",
+            "gwres_sink",
+            "gwres_stor",
+        ],
+        "PRMSChannel": [
+            "seg_lateral_inflow",
+            "seg_upstream_inflow",
+            "seg_outflow",
+        ],
     }
 
-    atol = {
+    tol = {
         "PRMSSolarGeometry": 1.0e-5,
+        "PRMSAtmosphere": 1.0e-4,
         "PRMSCanopy": 1.0e-5,
         "PRMSSnow": 5e-2,
         "PRMSRunoff": 1.0e-5,
+        "PRMSSoilzone": 1.0e-4,  ##
+        "PRMSGroundwater": 1.0e-2,
         "PRMSEt": 1.0e-5,
+        "PRMSChannel": 1.0e-5,
     }
 
     comparison_vars_dict = {}
-    for cls in components:
+    for cls in processes:
         key = cls.__name__
         comparison_vars_dict[key] = comparison_vars_dict_all[key]
 
@@ -113,40 +167,83 @@ def test_model(domain, control, components, tmp_path):
     ans = {key: {} for key in comparison_vars_dict.keys()}
     for unit_name, var_names in comparison_vars_dict.items():
         for vv in var_names:
-            nc_pth = output_dir / f"{vv}.nc"
+            if vv in ["tmin", "tmax", "prcp"]:
+                nc_pth = input_dir.parent / f"{vv}.nc"
+            else:
+                nc_pth = input_dir / f"{vv}.nc"
             ans[unit_name][vv] = adapter_factory(
                 nc_pth, variable_name=vv, control=control
             )
 
+    # ---------------------------------
+    # itimestep: process: variable: mean
+    regression_ans = {
+        9: {
+            "PRMSChannel": {
+                "seg_outflow": {
+                    "drb_2yr": 1522.4549482501916,
+                    "hru_1": 12.611823245603686,
+                    "ucb_2yr": 1680.5250196362717,
+                },
+            },
+        },
+        99: {
+            "PRMSChannel": {
+                "seg_outflow": {
+                    "drb_2yr": 2228.410057597461,
+                    "hru_1": 22.18093424912333,
+                    "ucb_2yr": 724.1753570676741,
+                },
+            },
+        },
+    }
+
     all_success = True
-    for istep in range(control.n_times):
+    # for istep in range(control.n_times):
+    for istep in range(n_time_steps):
 
         # print(istep)
         model.advance()
         model.calculate()
 
+        # PRMS5 answers
         # advance the answer, which is being read from a netcdf file
         for unit_name, var_names in ans.items():
             for vv in var_names:
                 ans[unit_name][vv].advance()
 
         # make a comparison check with answer
-        check = True
         failfast = True
         detailed = True
-        if check:
+
+        # compare_to_prms521 is a golbal variable
+        if compare_to_prms521:
             for unit_name in ans.keys():
                 success = check_timestep_results(
-                    model.components[unit_name],
+                    model.processes[unit_name],
                     istep,
                     ans[unit_name],
-                    atol[unit_name],
+                    tol[unit_name],
                     detailed,
                     failfast,
                 )
                 if not success:
                     all_success = False
 
+        # Regression checking
+        if istep in regression_ans:
+            for pp, var_ans in regression_ans[istep].items():
+                for vv, aa in var_ans.items():
+                    result = model.processes[pp][vv].mean()
+                    reg_ans = aa[domain["domain_name"]]
+                    if not reg_ans:
+                        print(
+                            f"\nreg_ans: [{istep}][{pp}][{vv}] mean: {result}"
+                        )
+                        all_success = False
+                    else:
+                        assert abs(result - reg_ans) < 1e-5
+
     # check at the end and error if one or more steps didn't pass
     if not all_success:
         raise Exception("pynhm results do not match prms results")
@@ -158,16 +255,20 @@ def check_timestep_results(
     storageunit,
     istep,
     ans,
-    atol,
+    tol,
     detailed=False,
     failfast=False,
 ):
+    # print(storageunit)
     all_success = True
     for key in ans.keys():
+        # print(key)
         a1 = ans[key].current
         a2 = storageunit[key]
-        success = np.isclose(a2, a1, atol=atol).all()
-        if not success:
+        success_a = np.isclose(a2, a1, atol=tol, rtol=0.0)
+        success_r = np.isclose(a2, a1, atol=0.0, rtol=tol)
+        success = success_a | success_r
+        if not success.all():
             all_success = False
             diff = a2 - a1
             diffmin = diff.min()
@@ -178,8 +279,9 @@ def check_timestep_results(
                 print(f"prms   {a1.min()}    {a1.max()}")
                 print(f"pynhm  {a2.min()}    {a2.max()}")
                 print(f"diff   {diffmin}  {diffmax}")
+
                 if detailed:
-                    idx = np.where(np.abs(diff) > atol)[0]
+                    idx = np.where(~success)
                     for i in idx:
                         print(
                             f"hru {i} prms {a1[i]} pynhm {a2[i]} "
diff --git a/autotest/test_soilzone.py b/autotest/test_soilzone.py
index 2527aba8..b53b7d68 100644
--- a/autotest/test_soilzone.py
+++ b/autotest/test_soilzone.py
@@ -41,6 +41,7 @@ def test_init(self, domain, control, tmp_path):
             "soil_lower",
             # "soil_lower_ratio",
             "soil_moist",
+            "soil_moist_prev",
             "soil_moist_tot",
             "infil",
             "soil_rechr",
diff --git a/autotest/test_solar_geom.py b/autotest/test_solar_geom.py
index fc9bdb0c..a71bcdb7 100644
--- a/autotest/test_solar_geom.py
+++ b/autotest/test_solar_geom.py
@@ -55,15 +55,15 @@ def test_solar_geom(domain, control, from_prms_file, tmp_path):
 
     # check the shapes
     for vv in solar_geom.variables:
-        assert ans[vv]._dataset.dataset[vv].shape == solar_geom[f"_{vv}"].shape
+        assert ans[vv]._nc_read.dataset[vv].shape == solar_geom[vv].data.shape
 
     # check the 2D values
     atol = 1e-3
     rtol = 0.0
     for vv in solar_geom.variables:
         assert np.allclose(
-            solar_geom[f"_{vv}"],
-            ans[vv]._dataset.dataset[vv],
+            solar_geom[vv].data,
+            ans[vv]._nc_read.dataset[vv],
             atol=atol,
             rtol=rtol,
         )
@@ -79,8 +79,8 @@ def test_solar_geom(domain, control, from_prms_file, tmp_path):
         for vv in solar_geom.variables:
             ans[vv].advance()
 
-            assert solar_geom[vv].shape == ans[vv].current.shape
-            assert np.allclose(solar_geom[vv], ans[vv].current)
+            assert solar_geom[vv].current.shape == ans[vv].current.shape
+            assert np.allclose(solar_geom[vv].current, ans[vv].current)
 
         assert id(solar_geom.soltab_sunhrs) == sunhrs_id
 
diff --git a/test_data/drb_2yr/prcp.nc b/test_data/drb_2yr/prcp.nc
index 4c849abb..57020de5 100644
Binary files a/test_data/drb_2yr/prcp.nc and b/test_data/drb_2yr/prcp.nc differ
diff --git a/test_data/drb_2yr/tmax.nc b/test_data/drb_2yr/tmax.nc
index 7dccc78d..32a85233 100644
Binary files a/test_data/drb_2yr/tmax.nc and b/test_data/drb_2yr/tmax.nc differ
diff --git a/test_data/drb_2yr/tmin.nc b/test_data/drb_2yr/tmin.nc
index e56e660d..6fbfc871 100644
Binary files a/test_data/drb_2yr/tmin.nc and b/test_data/drb_2yr/tmin.nc differ
diff --git a/test_data/hru_1/prcp.nc b/test_data/hru_1/prcp.nc
index fca1be78..f411368e 100644
Binary files a/test_data/hru_1/prcp.nc and b/test_data/hru_1/prcp.nc differ
diff --git a/test_data/hru_1/tmax.nc b/test_data/hru_1/tmax.nc
index 932fc91c..6025c171 100644
Binary files a/test_data/hru_1/tmax.nc and b/test_data/hru_1/tmax.nc differ
diff --git a/test_data/hru_1/tmin.nc b/test_data/hru_1/tmin.nc
index 6bc1e9d1..514d8dde 100644
Binary files a/test_data/hru_1/tmin.nc and b/test_data/hru_1/tmin.nc differ
diff --git a/test_data/scripts/cbh_nc_indivual.py b/test_data/scripts/cbh_nc_indivual.py
index 229438ba..0845c61e 100644
--- a/test_data/scripts/cbh_nc_indivual.py
+++ b/test_data/scripts/cbh_nc_indivual.py
@@ -11,7 +11,8 @@
     cbh = (
         xr.open_dataset(cbh_file)
         .swap_dims({"hru": "nhm_id"})
-        .set_coords("datetime")
+        .rename(datetime="time")
+        .set_coords("time")
     )
 
     for var in vars:
diff --git a/test_data/scripts/test_run_domains.py b/test_data/scripts/test_run_domains.py
index 3bf1c841..76645653 100644
--- a/test_data/scripts/test_run_domains.py
+++ b/test_data/scripts/test_run_domains.py
@@ -4,10 +4,6 @@
 import os
 import pathlib as pl
 import shutil
-import sys
-from fnmatch import fnmatch
-
-import pytest
 from flopy import run_model
 
 
diff --git a/test_data/ucb_2yr/prcp.nc b/test_data/ucb_2yr/prcp.nc
index e3e577d3..3384572f 100644
Binary files a/test_data/ucb_2yr/prcp.nc and b/test_data/ucb_2yr/prcp.nc differ
diff --git a/test_data/ucb_2yr/tmax.nc b/test_data/ucb_2yr/tmax.nc
index 66311e97..ac493b6b 100644
Binary files a/test_data/ucb_2yr/tmax.nc and b/test_data/ucb_2yr/tmax.nc differ
diff --git a/test_data/ucb_2yr/tmin.nc b/test_data/ucb_2yr/tmin.nc
index f515b04a..2a3c9545 100644
Binary files a/test_data/ucb_2yr/tmin.nc and b/test_data/ucb_2yr/tmin.nc differ