Welcome to Canadian Hydrological Model (CHM)’s documentation!

The Canadian Hydrological Model (CHM) uses a novel, modular, mesh-based approach for developing and testing process representations in hydrological modelling. It can move between spatial scales, temporal scales, and spatial extents. Its key features include the abilities to i) capture spatial heterogeneity in surface discretizations in an efficient manner, ii) include multiple process representations; iii) change, remove, and decouple hydrological process algorithms, iv) work both with spatially localized (point) and non-localized (distributed) models, v) span multiple spatial extents and scales, and vi) utilize a variety of forcing fields for boundary and initial conditions.

The paper describing CHM can be found here.

_images/mesh.png

Compilation

Warning

Conan is no longer used to build CHM. Spack is now used

CHM uses spack to manage and build all dependencies. Because of the various requirements on build configuration, versions, and inter-dependencies, using system libraries it not supported.

Build requirements

Linux (x86_64) and Macos (arm64) are the only supported environments.

The following have been tested

Build env requirements:
  • cmake >=3.21 (via apt-get/brew)

  • C++14 compiler (gcc 9.3.0+) (via apt-get/brew)

  • Fortran 90+ compiler (gfortran) (via apt-get/brew)

Warning

Unfortunately the Intel compiler doesn’t currently work with applications that also link against GSL. This is being investigated. For now, please do no build CHM with Intel Compilers.

Build dependencies

OpenMP

On Macos, the openmp library should be installed via homebrew:

brew install libomp

OpenMPI

Note

Building CHM without MPI support is now deprecated. MPI is now required.

Other MPI versions probably work, but only OpenMPI has been tested.

Ensure MPI is installed on linux: libopenmpi-dev and openmpi-bin

Install spack

Install spack.

Clone the CHM spac-repo

git clone https://github.com/Chrismarsh/spack-repo.git /some/path/here/

then create repos.yml in ~/.spack and add the path to the above cloned spack-repo. It will look like this

$ cat ~/.spack/repos.yaml
    repos:
      - /some/path/here/spack-repo
      - $spack/var/spack/repos/builtin
Setup CHM source folders

An out of source build should be used. That is, build in a separate folder removed from the CHM source. This makes it easier to clean up and start from scratch. An example is given below:

cd ~/
git clone --recurse-submodules https://github.com/Chrismarsh/CHM

mkdir ~/build-CHM
Build dependencies

This step will build and install the dependencies via spack.

spack env create chm path/to/CHM/spack.yml
spack concretize
spack install -j 8 # number of parallel builds, adjust accordingly

Build CHM

Note

The follow instructions assume that they are invoked from within ~/build-CHM (or your equivalent).

You can set the install prefix to be anywhere, such as shown in the example below

cmake ~/CHM -DCMAKE_INSTALL_PREFIX=/opt/chm-install

Both ninja and make (this is the default) are supported. To use ninja, add

cmake ~/CHM -DCMAKE_INSTALL_PREFIX=/opt/chm-install -G "Ninja"

Ninja speeds up compilation of CHM by ~6%.

The default build option creates an optimizted “release” build. To build a debug build, use -DCMAKE_BUILD_TYPE=Debug.

Intel compiler

If the Intel compiler is used, add the following cmake flags:

-DCMAKE_CXX_COMPILER=icpc -DCMAKE_C_COMPILER=icc -DCMAKE_FORTRAN_COMPILER=ifort

High performance allocators

By default jemalloc is used.

-DUSE_TCMALLOC=FALSE -DUSE_JECMALLOC=TRUE.

Building

Using make

make -jN CHM

where N is the number of parallel jobs (e.g., total core count).

Using Ninja

ninja -C .
Run tests

Tests can be enabled with -DBUILD_TESTS=TRUE and run with make check/ ninja check

Install

make install/ninja install

Build docs

To build the documentation requires Doxygen and Sphinx+Breathe+Exhale.

pip install sphinx
pip install sphinx-rtd-theme
pip install breathe
pip install exhale@git+https://github.com/svenevs/exhale.git@refs/pull/205/merge

The exhale version requirement: see issue#200.

The documentation can be built with:

cd CHM/docs
READTHEDOCS="True" make html

The env var is required to ensure the correct directories are searched for in-source builds.

Troubleshooting

The high performance allocators may need to be disabled and can be done via -DUSE_TCMALLOC=FALSE -DUSE_JEMALLOC=FALSE

Building on Compute Canada (WestGrid)

To build on Compute Canada stack machines, such as Graham, all dependencies must be built from source to ensure the correct optimizations are used. This should be done with the Compute Canada easybuild system.

Only the gcc/9.3.0 environment is supported. This can be enabled with

module load gcc/9.3.0

Build all dependencies that are not available from compute canada stack

git clone https://github.com/Chrismarsh/easy_build.git
cd easy_build
chmod +x install-all.sh
./install-all.sh

Ensure the environment is correctly setup

module load armadillo/10.4.1
module load cgal/5.2.1
module load hdf5/1.10.6
module load meteoio
module load func
module load netcdf/4.7.4
module load gdal/3.2.3
module load boost-mpi/1.72.0
module load openblas/0.3.9
module load gsl/2.6
module load eigen/3.3.7
module load sparsehash
module load tbb/2020.2
module load trilinos/13.3.0
module load netcdf-c++4/4.3.1
module load vtk/9.0.1
module load proj/9.0.1
module load jemalloc/5.3.0
module load cmake

Optionally you can save this with module save chm.

Then build CHM

git clone https://github.com/Chrismarsh/CHM  # get CHM source code
mkdir ~/chm-build && cd ~/chm-build # make build directory
cmake ../CHM -DENABLE_SAFE_CHECKS=ON -DBoost_NO_BOOST_CMAKE=ON -DUSE_TCMALLOC=FALSE -DUSE_JEMALLOC=TRUE -DCMAKE_BUILD_TYPE=Release
make -j10

Configuration

Note

Support for full geographic meshes exists, however there is currently an issue with computing surface normals. Thus projected coordinate systems should only be used.

Note

Regardless of input coordinate system all input points are specified in latitude and longitude in WSG84.

Schema

The config file is a JSON file. However, it does support C-style comments: // and /** **/ are both valid.

There are a few required sections: modules, meshes, forcing.

The general layout of a CHM config JSON file is

{
   "option":
   {
      "option_a": true,
      "option_b": 1234,
      ...
   },
   "modules":
   [
      "module1",
      "module2",
      ...
   ],
   "config":
   {
      "module1":
      {
         ...
      },

      ...
   }
   "meshes":
   {
      ...
   },
   "forcing":
   {
     ...
   },
   "output":
   {
      ...
   }
}

For every section, if a top-level key:value pair is found and the value contains “.json”, that file is loaded and inserted into this option. The key-value is not used, and may be anything. Key names are enclosed in quotes (” “). Although it tends to make more sense to arrange the keys in the shown order, the order does not matter (anywhere) and will be read correctly.

Warning

The modules key is an array and requires the use of [ ]

Warning

Do not prefix a number with zero (0). This is the octal prefix and it will cause the JSON parser to choke on lines that otherwise look fine.

Note

A user can specify a number as "5" or 5. Internally to CHM it will be converted to a numeric type. Thus, both are fine, however a non-string should be preferred. This is similar for "true" and true.

Note

Boolean types are case sensitive.

Sections

option

This section contains options for CHM and the simulation in general. This is a required section.

{
   "option":
   {
        "station_N_nearest": 1,
        "interpolant": "nearest",
        "per_triangle_timeseries": false,
        "ui": false,
        "debug_level": "debug",
        "prj_name": "SnowCast",
        "enddate": "20180501T050000"

   }
}
station_search_radius
Type:

double

Default:

None

The search radius (meters) surrounding any given triangle within which to search for a station. This is used to ensure only “close” stations are used. Cannot be used when station_N_nearest is set. Based off the center of the triangle.

station_N_nearest
Type:

int

Default:

5

Use the nearest N stations to include for the interpolation at a triangle. Based off the center of the triangle.

Both station_search_radius and station_N_nearest cannot be simultaneously specified. If neither is specific, then station_N_nearest:5 is used as default. If the interpolant mode is nearest, then this is automatically set to 1.

interpolant
Type:

string

Default:

“spline”

Chooses either thin plate spline with tension (spline) or inverse distance weighting (idw). Nearest selects the closest station and only uses that with no interpolation.

"interpolant" : "idw"
"interpolant" : "spline"
"interpolant" : "nearest"
point_mode
Type:

{ }

Required:

No

Point mode selects that the model should be run in point mode, versus distributed mode.

There is one optional key that need to be specified:

  • forcing (string)

forcing needs to correspond to a specific input point as defined in the forcing section

Usage of this key also requires adding point_mode to the module list. Lastly, no modules which are defined parallel:domain may be used when point_mode is enabled.

"point_mode":
{
  "forcing":"UpperClearing"
},
"point_mode":
{
  // empty to just enable it
},
notification_script
Type:

string

Default:

None

Path to a script to call upon model execution. This is useful for sending a notification to a computer or phone upon the completion of a long model run.

"notification_script":"./finished.sh"

And example of what finished.sh might do is below, which triggers a notification to Pushbullet thus showing up on all computers and phones that the account is active on:

#!/bin/bash

curl -s -u <token here>: https://api.pushbullet.com/v2/pushes -d type=note -d title="Finished model run" >/dev/null
debug_level
Type:

string

Default:

“Debug”

This controls the verbosity of the output. Options are:

  • verbose [ all messages ]

  • debug [ most messages useful for debugging ]

  • warning [only warnings]

  • error [ only errors which terminate model execution ]

Currently most useful internal messages are debug level.

"debug_level":"debug"
startdate
Type:

string

Default:

None

Allows for a different start time than that specified by the input timeseries. In the same ISO format as the forcing data: YYYYMDTHMS.

"startdate":"20010501T000000"
enddate
Type:

string

Default:

None

Allows for a different end time than that specified by the input timeseries. In the same ISO format as the forcing data: YYYYMDTHMS.

"enddate":"20010502T000000"

modules

Modules to run. These are a comma separated list of keys. This is a required section.

A few notes:

  • order as defined in this list has no bearing on the order modules execute

  • may be commented out to remove them from execution

  • names are case sensitive

  • point_mode module is required to enable point mode, in addition to being enabled in option.point_mode.

Note

Modules are in a list ([ ])

"modules":
[
   "Liston_wind",
   "Burridge_iswr",
   "slope_iswr",
   "Liston_monthly_llra_ta",
   "kunkel_rh",
   "Thornton_p",
   "Walcek_cloud",
   "Sicart_ilwr",
   "Harder_precip_phase",
   "snobal",
   "Gray_inf",
   "Richard_albedo"

]

remove_depency

Under some edge cases, a cyclic dependency is created when a module B depends on module A’s output, and module A depends on module B’s output. There is no way to automatically resolve this. It requires the modeller to manually break the cycle and force one module to run ahead of another (essentially time-lagged).

An example of this occurring is that the albedo model requires knowledge of SWE, provided by the snowmodel. However, the snowmodel requires albedo to run. Therefore, the modeller may define that the albedo routine is run first, then the snowpack model.

Specifically: if module A depends on B (A->B), then to remove the decency of B from A, specify it as "A":"B"

This can be thought of as A needs to come before B. If the specified modules are not added to the modules list, they are ignored.

"remove_depency":
{
  "Richard_albedo":"snobal"
}

config

Each module, upon creation is provided a configuration instance. These configuration data are set by creating a key that exactly matches the module name. If a section is added, but that module isn’t specified, the section is ignored.

module_name
Type:

{ }

For example:

"config":
{

   "slope_iswr":
       {
         "no_slope":true
       }
},

If the configuration is sufficiently large or cumbersome, it may be best to have it in a separate file. This can be specified as

//consider this in CHM.json
"config":
{
    "simple_canopy":"canopy.json"
}


And canopy.json is

"canopy":
{
  "LAI":3
}

Note that the sub-keys for a module’s configuration are entirely dependent upon the module. Please see the module’s help for specific options.

meshes

This section defines the mesh and optional the parameter files to use. It is a require section. This section has two keys:

mesh
Type:

string

File path to the .mesh file produced by mesher.

parameters
Type:

{ }

Optionally, A set of key:value pairs to other .param files that contain extra parameters to be used. These are in the format { "file":"<path>"" }

"meshes":
{
 "mesh":"meshes/granger30.mesh",
 "parameters":
 {
   "file":"meshes/granger30.param",
   "file":"meshes/granger30_surface.param"
 }
}

If CHM is in MPI mode, then HDF5-based meshes need to be used to ensure fast partial loading of the mesh on a per-MPI rank basis. Please see meshgen for how to convert the mesh.

parameter_mapping

The parameters may be classified values for use in a look-up table. For example, the landcover may be a numeric class value and values such as LAI need to be obtained from a lookup table. These parameters may be either specified directly in the file or located in another file:

"parameter_mapping":
{
  "soil":"parameters/wolf_soil_param.json"
}

or as a key:value pair. In all cases, the parameter name is how it will be referenced in the module that is looking for it. Please see the module’s documentation for what the expected format is.

{
   "landcover":
   {
      "20":
      {
        "desc":"lake",
        "is_waterbody":true
      },
      "31":
      {
        "desc":"snow ice"
      }
   }
}

output

Output may be either to an ascii-timeseries for a specific triangle on the mesh or it may be the entirety of the mesh. The two output types are set by:

  • a key named "mesh":{ ... } will enable the entire mesh output

  • all other keys ("some_name":{...}`) are assumed to be the names of output timeseries

Both mesh and timeseries can be used together.

output_dir
Type:

string

Default:

“output”

The output directory name.

timeseries output

The name of the timeseries key is used to uniquely identify this output: "output_name"{ ... }.

If using point_mode, this name corresponds to the output key. If a lot of stations are to be output, consider keeping them in a separate file and inserting using the top-level “.json” behaviour.

longitude
Type:

float

WGS84 longitude of output point. The triangle that contains this point is then selected for output. An error is raised if no triangle contains the point.

latitude
Type:

float

WGS84 latitude of output point. The triangle that contains this point is then selected for output. An error is raised if no triangle contains the point.

file

The output file name. The output is in csv format and each column is a variable.

 "output":
 {
    "more_stations":"mystations.json",
    "UpperClearing":
    {
        "longitude": "-115.175362",
        "latitude": "50.956547",
        "file": "uc.txt"
    }
}

where mystations.json would look like

{
     "some_station":
     {
         "longitude": "-115.175362",
         "latitude": "50.956547",
         "file": "somestation.txt"
     }
}
mesh

The entire mesh may be written to Paraview’s vtu format for visualization in Paraview and for analysis. This is denoted by a "mesh":{ ... } key.

For more details, please see the output section.

base_name
Type:

string

The base file name to be used.

variables
Type:

[ "variable", ... ]

The default behaviour to is write every variable at each timestep. This may produce an undesirable amount of output. This takes a list of variables to output.

"variables": [
             "t",
             "U_2m_above_srf",
             "swe",
             "iswr"
         ],

Example:

"output":
{
 "mesh": {
         "base_name": "SC",
         "variables": [
             "t",
             "U_2m_above_srf",
             "swe",
             "iswr"
         ],
         "frequency": "24",
         "write_parameters": false,
         "write_ghost_neighbors": false
     }
}

forcing

Input forcing can be either a ASCII timeseries or a NetCDF. Please see forcing for more details.

Input forcing stations do not need to be located within the simulation domain. Therefore they can act as ‘virtual stations’ so-as to use reanalysis data, or met stations located outside of the basin.

An example of this is shown below, where each black point is a virtual station, representing the center for a NetCDF grid cell from a NWP product.

_images/netcdf.png
UTC_offset
type:

int

default:

0

If the input timeseries it not UTC, then this is the correction to account for UTC offset (all solar radiation calculations are in UTC). This is Positive west!

use_netcdf
Type:

boolean

Default:

false

Specify if a NetCDF (.nc) file will be used. Cannot be used along with ASCII inputs!

Note

ASCII and NetCDF inputs cannot be mixed. It is one or the other.

ASCII timeseries

This is given as "station_name":{ ... }. If using point_mode, then the value station_name must exactly match the input used for option.point_mode.

file

A relative or absolute path to an input forcing file

latitude
Type:

double

Latitude of the input station, WGS84. Positive North. Not “N” or “S” suffix

longitude
Type:

double

Longitude of the input station, WGS84. Positive East. Not “N” or “S” suffix

elevation
Type:

double

Elevation is given in meters. It does not need to be equal to the elevation of the triangle upon which it lies if the station is located in the simulation domain. This value is used in the lapse rate equations to interpolate the data.

If required, forcing station definitions can be located in an external file. For the external file, the name of the key doesn’t matter. The external file should contain the stations in the format as per above. It does not require an addition "forcing": section definition.

"forcing":
  {
    "some_station":
     {
       //definition
     },
    "reanalysis_extract_1": "external_file_1.json",
   "reanalysis_extract_2": "external_file_2.json",
}

where external_file_*.json looks like

{
 "station1":
   {
    //details here
   },
 "station2":
   {
    //details here
   }
}
Filters

Filters perform an operation on the data prior to being passed to a module. They allow for things such as wind-undercatch corrections to be done on the fly.

If a filter is defined, it must be defined on the forcing file and operate upon a variable that exists in the forcing data. They are given as:

"filter_name": { ... }`. The configuration values are filter-specific; please see the filter documentation for what is required. Multiple filters may be specified.

"buckbrush":
{
  "file": "bb_m_2000-2008",
  "latitude": 60.52163,
  "longitude": -135.197151,
  "elevation": 1305,
  "filter":
  {
    "scale_wind_speed": {
      "Z_F": 4.6,
      "variable": "u"
    },
    "goodison_undercatch": {
      "variable": "p"
    }
  }
}

Warning

Filters run in the order defined in the configuration file.

Example
"forcing":
    {

      "UTC_offset": 8,

      "buckbrush":
        {
          "file": "bb_m_2000-2008",
          "latitude": 60.52163,
          "longitude": -135.197151,
          "elevation": 1305,
          "filter":
            {
            "scale_wind_speed":
                {
                "Z_F": 4.6,
                "variable": "u"
            },
            "goodison_undercatch":
            {
                "variable":"p"
            }
         }
      },
      "alpine":
        {
          "file": "alp_m_2000-2008",
          "latitude": 60.567267,
          "longitude": -135.184652,
          "elevation": 1559,
          "filter": {
         "scale_wind_speed": {
             "Z_F": 2.5,
             "variable": "u"
         },
         "goodison_undercatch":
         {
             "variable":"p"
         }

          }
      }
   }
NetCDF

The use NetCDF as input creates virtual stations at the cell-centres. The NetCDF file is lazy loaded as required for each triangle, so only the values required are loaded. The variable names, like for ASCII inputs, needs to correspond to the values expected by the filters.

Warning

NetCDF and point_mode are not supported.

Filters

Filters are the same as for ASCII with one important distinction: every specified filter is run for every virtual station (i.e., grid cell centre).

"filter": {
           "scale_wind_speed": {
               "Z_F": "40",
               "variable": "u"
           }
       }
Example
"forcing": {
        "UTC_offset": "0",
        "use_netcdf": true,
        "file": "GEM-CHM_2p5_west_2017100106_2018080105.nc",
        "filter": {
            "scale_wind_speed": {
                "Z_F": "40",
                "variable": "u"
            }
        }
    }

checkpoint

CHM can save its state after a timestep, allowing CHM to resume from this timestep. Further details on can be found in the Checkpointing section.

save_checkpoint
Type:

boolean

Default:

false

Enable checkpointing. One of frequency or on_last must be set. Must be set true to enable the checkpointing.

frequency
Type:

int64

Default:

empty

The frequency of checkpointing. Checkpoints every frequency timesteps. Can be used with on_last to produce checkpoints every frequency timesteps as well as on the last timestep.

on_last
Type:

bool

Default:

false

Check point only on the last timestep. Can be used with frequency, but does not require frequency to be set.

load_checkpoint_path
Type:

string

Default:

empty

Path to checkpoint file to load from (specifically, the json file). Can be used with the other checkpointing options.

"checkpoint":
{
   "save_checkpoint": true,
   "frequency": 4,
   "on_last": true,
   "load_checkpoint_path":"output/checkpoint/checkpoint_20001001T140000.np1.json"
}

Point Mode

Point mode is a special mode in CHM that evaluates the set of modules only at a specific set of points, i.e., 1D mode. Specifically, only the triangles associated with the output points are run. Four criteria must be met to take advantage of this mode

  1. point_mode is defined in the option configuration section

  2. The module point_mode is used

  3. Only parallel::data modules are used

  4. Have only timeseries outputs at named points

The last constraint limits the module selection to only those modules that operate in a column mode and do not have any requirement on the surrounding mesh elements. This prohibits the use of modules such as blowing snow and shadowing.

Step 1. Set options flag

In the option section of the configuration, set point_mode

option:
{
       "point_mode": {
            //empty
         },
}

Point mode works with either netcdf or ascii file input forcing. If used with ASCII forcing data, a station name may be optionally given to force that specific station to be used. If this is done then only 1 output point / triangle is possible to ensure a 1:1 mapping of the two.

option:
{
       "point_mode": {
            "forcing": "my_station"
         },
}

Please see option for more details.

Step 2. Add point_mode to modules

The point_mode module acts as a shim and allows for passing met from the forcing file through to the other modules un touched. This is useful if you have an insitu met station collection data that you wish to use directly in, e.g., the snow module. Please see the point_mode module for more information.

Step 3. Only use data parallel

Only column mode (1D) models are available in point_mode. Currently the only way to confirm this is by checking the source code of a module, although CHM will inform you at runtime if a parallel::domain module is chosend

Step 4. Timeseries output

Only timeseries output at named points can be used. E.g.,

"output":
{
   "UpperClearing":
   {
      "longitude": -115.175362,
      "latitude": 50.956547,
      "file": "uc.txt",
      "type": "timeseries"
   },
   "VistaView":
   {
      "longitude": -115.172169,
      "latitude": 50.970944,
      "file": "vv.txt",
      "type": "timeseries"
   }
},

Command Line

Command line options come in two flavours: short hand (e.g. -f) and long (e.g., –config-file).

Options:

  • --help

  • --version, -v

  • --config-file, -f

  • --config, -c

  • --remove, -r

  • --remove-module, -d

  • --add-module, -m

In addition to specifying the configuration file to run with, it can be used to specific configuration options. Any configuration that is configurable via configuration files can be specified on the command line. This is done so that configuration files do not need to be written during, for example, uncertainty analysis.

Note

Values specified on the commandline over-ride existing values in the configuration file

help

Prints the available options.

version

Prints the version of CHM along with the git commit.

config-file

Specifies a configuration file to use. This is required.

./CHM --config-file CHM_test.json

./CHM -f CHM_test.json

config

This enables changing a configuration value from the command line. The value is specified with a fully qualified configuation path. This can change any aspect of the configuration file, but an example with a module’s configuration is given below.

For example, to change the module moduleA value of b the configuration file would be

{

   "config":
   {
      "moduleA":
      {
         "b": 3.14
      }
   }

}

Therefore, the commandline variant would be:

-c config.moduleA.b:3.14

Multiple configuration values can be specified via multiple -c arguments:

-c config.moduleA.b:3.14 -c option.debug_level:"error"

Note

This cannot be used to modify the list values ([ ]) for the modules section. Please use the add/remove module feature to modify those.

remove

Removes a configuration parameter. Removals are processed after any -–config parameters are parsed, so -r will override -c. A fully qualified path to the configuration is required. For example this configuration

{

   "option":
   {
      "option_a": true,
      "option_b": 1234,
   }

}

could have option_a removed

-r option.option_b

Because the removal happens after any modification with -c, the following to add option_c has no effect:

-c option.option_c:2 -r option.option_c

Note

This cannot be used to modify the list values ([ ]) for the modules section. Please use the add/remove module feature to modify those.

remove-module

Removes a module

-d Marsh_shading_iswr

add-module

Adds a module to the list. Adding configuration options with -c can be done before or after this call.

-m snobal -m Marsh_shading_iswr

Mesh generation

CHM uses a variable resolution, unstructured mesh. This mesh is generated using the Mesher software. It needs to be installed separately from CHM.

An example of a mesh is shown below

_images/usm.png

The output .mesh, .param, and .ic from mesher, as documented here are used as input, without modification, to CHM.

Mesh permutation

Although critical for MPI use, this feature does give ~10-15% speedup for non MPI runs and thus should almost always be done.

Because the unstructured mesh does not guarantee that triangles close in space are close in memory, mesher can permute the mesh to optimize this layout. Details on doing so are detailed here.

In brief:

mesherpermuation.py -i meshfile.mesh -t metis -n 2

Note, this will overwrite the input file. This example will produce a 2 MPI rank metis permuted mesh for use with MPI.

MPI compatibility

In MPI mode, CHM needs to be able to only read part of the mesh on a per-MPI rank basis. Therefore a HDF5 mesh is used. Mesher does not produce this format. However, CHM can convert from the Mesher json format to HDF5.

Conversion

  1. Create mesh as normal with Mesher and apply the permutation. This must use the metis partitioning type.

  2. Convert the mesh to h5 or partitioned h5 via the Partition tool.

Warning

The mesh must be a metis permuted mesh

To load the h5 files:

"meshes":
{
   "mesh":"meshes/granger.mesh_mesh.h5",
   "parameters":
   {
      "file":"meshes/granger.mesh_param.h5,
   }
}

To load the partitioned files:

"meshes":
{
   "mesh": "granger1m_mesh.np2.partition"
}

Note that no extra parameter section is needed when loading partition files.

As the partition files are computed for n ranks, they cannot be used with any more or fewer ranks.

Warning

HDF5 and json meshes/param files cannot be mixed.

Mesh versioning

The mesh formats are versioned to ensure required features are present. Mesh versions follow sematic versioning.

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,

  • MINOR version when you add functionality in a backwards compatible manner, and

  • PATCH version when you make backwards compatible bug fixes.

Mesh Versions

Version

Features

Usage

1.0.0

Base version from Mesher

json + h5

1.2.0

RCM or nd permuted meshes

json + h5

2.0.0

metis permuted mesh

h5 only

3.0.0

Same as 2.0.0, but partition rank owner is computed during partition

h5 + partitioned + mpi

Partition tool

The partition tool performs two functions:

  1. Convert json (.mesh) format meshes to binary HDF5 (.h5)

  2. Partition an HDF5 mesh format for n MPI ranks.

To use CHM in MPI mode requires using an HDF5 mesh file. When using CHM with MPI, the mesh is partitioned at run-time for the appropriate number of MPI ranks. In this configuration CHM will load the entire base mesh (despite only operating on a small portion of it) into memory and load the corresponding subset from the parameter file. As a result, the memory usage for each MPI rank is high.

The partition tool allows for pre-partitioning the mesh and parameter file into n chunks, one for each MPI rank. Therefore only the mesh elements for this rank are loaded, dramatically reducing memory overhead.

Warning

The mesh should be have been permuted prior to hdf5 conversion for maximum MPI performance. Failure to do so will result in significantly degraded runtime performance!

Please see Mesh permutation for more details.

Usage

Options:

  • --help

  • --mesh-file, -m,

  • --param-file, -p,

  • --max-ghost-distance, -g

  • --standalone, -s

  • --mpi-ranks

  • --valid-ranks, -v

  • --write-vtu

--help

Outputs the help message

--mesh-file

The mesh file to operate on. Either json or h5 format. However, formats cannot be mixed between mesh-file and param-file.

--mesh-file <filename>
--mesh-file my_mesh.mesh
--mesh-file my_mesh.h5

--param-file

A list of the parameter files. Either json or h5 format. However, formats cannot be mixed between mesh-file and param-file.

--param-file <filename>
--param-file my_mesh.param
--param-file my_mesh_param.h5

--max-ghost-distance

The maximum distance at which to include ghost triangles. Certain modules need triangles at a distance, for example to compute shadowing or fetch. --max-ghost-distance defaults to 100 m however this should be changed to match the configuration option for various modules.

--max-ghost-distance <distance in meters>
--max-ghost-distance 100

--standalone

Produces a specific ranks’ mesh in a way that allows it to be loaded by itself. This allows debugging on a an individual rank. In order to be able to be loaded, the mesh is written without ghost regions. Zero-indexed.

--standalone <rank to output>
--standalone 5

--mpi-ranks

Number of MPI ranks to split the mesh for. Ranks must be >1.

--mpi-ranks <n ranks>
--mpi-ranks 32

--valid-ranks

Only writes a subset of the partition out. This option will ensure the global IDs and MPI rank owners have been rewritten to support loading this subset into CHM. This is useful if a specific set of ranks is causing problems that should be debugged in isolation.

For example, suppose there is a 448 rank partition that has a problematic interaction on ranks 199 and 208. Using ./partition -m my.partitioned.mesh.h5 -p params.h5 --mpi-ranks 448 -v 199 -v 208 will produce an output of only those two ranks, using the domain partition for the 448 ranks.

--write-vtu

Output each partition set as a separate vtu file for debugging.

Output

Note

If --mpi-ranks is specified and the input mesh is in json format (.mesh), the tool will, in two steps, convert the mesh to h5 and then partition the h5 mesh.

json to hdf5

Output will be two .h5 files called basename_mesh.h5 and basename_param.h5. For example if the input mesh is granger1m.mesh then basename is granger1m resulting in the files

  • granger1m_mesh.h5

  • granger1m_param.h5

partition

A json file is written basename_mesh.np<MPI_RANKS>.partition. For example, the above file with 2 mpi ranks is granger1m_mesh.np2.partition. The contents of this file describe the partition with various metadata and allow CHM the ensure the file, when loaded, matches the runtime MPI configuration.

{
 "ranks": "2",
 "max_ghost_distance": "100",
 "num_global_faces": "37645",
 "meshes": [
     "granger1m_mesh.np2.partition.meshes\/granger1m_mesh.partition.0_mesh.h5",
     "granger1m_mesh.np2.partition.meshes\/granger1m_mesh.partition.1_mesh.h5"
 ],
 "parameters": [
     "granger1m_mesh.np2.partition.meshes\/granger1m_mesh.partition.0_param.h5",
     "granger1m_mesh.np2.partition.meshes\/granger1m_mesh.partition.1_param.h5"
 ]
}

Secondly a new folder is created basename_mesh.np<MPI_RANKS>.partition.meshes that holds the underlying h5 mesh and param files.

Partition is MPI aware and can be run with multiple processors. This will not speed up the json -> h5 creation, but it will allow parallel decomposition. Each MPI rank must be able to hold the entire mesh in memory. The ranks used to run parition need not be the same number of ranks used in the domain decomp. For example,

# use 8 mpi ranks to decompose granger1m_mesh into 20 sub-domains
mpirun -np 8 ./partition --mesh-file granger1m_mesh.h5 --param-file granger1m_param.h5 --mpi-ranks 20

Example Usage

./partition --mesh-file granger1m.mesh --param-file granger1m.param # json to hdf5
./partition --mesh-file granger1m_mesh.h5 --param-file granger1m_param.h5 --mpi-ranks 2  # 2 MPI ranks
./partition --mesh-file granger1m_mesh.h5 --param-file granger1m_param.h5 --mpi-ranks 2 --standalone 1 # Make the 2nd rank standalone

Forcing

ASCII timeseries

Warning

If using ground-based observations for incoming shortwave radiation, please look at the already_cosine_corrected for the module iswr.

Forcing data are defined as a delineated format. Datetime format is ISO standard as

[year][month][day]T[hour][minute][second]

Column order does not matter.

datetime       Qsi      Qli    g    t       rh      u       vw_dir  p
20001001T000000 -0.237  276 -2.436  -10.98  95.7    2.599   308.2   0.0
20001001T003000 -0.233  278 -2.42   -11.19  95.7    3.133   307.1   0.0

where the input variable names correspond to the variable names the selected modules expect. Please refer to those modules’ documentation.

Some restrictions:
  • No more than 2147483647 steps. At 1s intervals, this equates to roughly 68 years.

  • Consistent units. You mustn’t have mm on one line, then meters on the next, for the same observation

  • Constant time stepping. The first interval is taken as the interval for the rest of the file

  • Missing values are not currently allowed - that is, each row must be complete with n entries where n is number of variables.

  • All forcing files have the same start and end dates. Can be filled with missing values.

  • However, a missing value value (i.e., -9999) can be used to represent missing data

  • Whitespace, tab or comma delimited. Allows for mixed usage. ex 1234, 4543 890 is legal

  • Values must be numeric

Integer styles:
  • +1234

  • -1234

  • 1234567890

Floating point:
  • 12.34

  • .34

  • 12.345

  • 1234.45

  • +12.34

  • -12.34

  • +1234.567e-89

  • -1234.567e89

Time:
  • Must be in one column in the following ISO 8601 date time form:

  • YYYYMMDDThhmmss e.g., 20080131T235959

This format is easily parseable with Pandas in Python

obs = pd.read_csv("uc_2005_2014.txt",sep="\t",parse_dates=[0])
obs.set_index('datetime',inplace=True)
obs.index = pd.to_datetime(obs.index)

If you have dates in a different format: .. code:: python

obs = pd.read_csv(‘rosthern_met.csv’,parse_dates=[1]) obs.to_csv(“file.txt”, sep=’t’, index_label=’datetime’, date_format=’%Y%m%dT%H%M%S’, na_rep=’-9999’,index=False)

Various conversion scripts for other models’ input/output are located in the tools directory.

NetCDF

The use NetCDF as input creates virtual stations at the cell-centres. The NetCDF file is lazy loaded as required for each triangle, so only the values required are loaded. The variable names, like for ASCII inputs, needs to correspond to the values expected by the filters.

An example of this is shown below, where each black point is a virtual station, representing the center for a NetCDF grid cell from a NWP product.

_images/netcdf.png

Warning

NetCDF and point_mode are not supported.

Grid

  • the nc file is a regular grid of x,y values

  • WGS84 lat/long

  • consistent grid between model timesteps

  • The underlying grid is specified in coordinates: ygrid_0 and xgrid_0

  • The lat/long is specified in variables gridlat_0 and gridlon_0

  • The elevation of the observation is given in HGT_P0_L1_GST (m)

Timesteps

  • at least two timesteps

  • named datetime

  • time is in UTC+0

  • the difference between these is used to determine model dt

  • timesteps are offsets from an epoch (format YYYY-mm-dd HH:MM:SS or YYYY-mm-ddTHH:MM:SS)

  • units are hours, minutes, seconds

  • This is specified as the units: datetime:units = "hours since 2017-09-01 06:00:00" ;

  • offset are given as int64

Schema

In detail the following is the schema for the required NetCDF files:

dimensions:
   datetime = UNLIMITED ;
   ygrid_0 = int ;
   xgrid_0 = int ;

variables:
   double VAR_NAME(datetime, ygrid_0, xgrid_0) ;
      VAR_NAME:_FillValue = NaN ;
      VAR_NAME:coordinates = "gridlat_0 gridlon_0" ;

   double HGT_P0_L1_GST(datetime, ygrid_0, xgrid_0) ;
      HGT_P0_L1_GST:_FillValue = NaN ;
      HGT_P0_L1_GST:coordinates = "gridlat_0 gridlon_0" ;


   int64 datetime(datetime) ;
      datetime:standard_name = "time" ;
      datetime:long_name = "Validity time" ;
      datetime:axis = "T" ;
      datetime:units = "hours since 2017-09-01 06:00:00" ;
      datetime:calendar = "proleptic_gregorian" ;

   double gridlat_0(ygrid_0, xgrid_0) ;
      gridlat_0:_FillValue = NaN ;
      gridlat_0:long_name = "latitude" ;
      gridlat_0:standard_name = "latitude" ;
      gridlat_0:units = "degrees_north" ;

   double gridlon_0(ygrid_0, xgrid_0) ;
      gridlon_0:_FillValue = NaN ;
      gridlon_0:long_name = "longitude" ;
      gridlon_0:standard_name = "longitude" ;
      gridlon_0:units = "degrees_east" ;


   double xgrid_0(xgrid_0) ;
      xgrid_0:_FillValue = NaN ;
      xgrid_0:long_name = "longitude ;
      xgrid_0:standard_name = "longitude" ;
      xgrid_0:units = "degrees" ;
      xgrid_0:axis = "X" ;

   double ygrid_0(ygrid_0) ;
      ygrid_0:_FillValue = NaN ;
      ygrid_0:long_name = "latitude" ;
      ygrid_0:standard_name = "latitude" ;
      ygrid_0:units = "degrees" ;
      ygrid_0:axis = "Y" ;

Output

There are two main outputs from CHM: timeseries and mesh output.

mesh (.vtu)

The .vtu format is a Paraview (vtk) unstructured mesh. The naming scheme of these files is

base_name + posix datetime + _MPIrank + .vtu

For example: SC1506837600_0.vtu

When running in MPI mode, only the part of the mesh being processed by the sub-MPI process is written out. This process’ rank is thus suffixed to the file. If MPI is not used, a _0 will always be added for consistency.

In addition to the vtu files, a base_name.pvd is written. This is an XML file that holds a reference to all the vtu files:

<?xml version="1.0" encoding="utf-8"?>
<VTKFile type="Collection" version="0.1">
 <Collection>
     <DataSet timestep="1506837600" group="" part="0" file="SC1506837600_0.vtu"/>
      ...

Although the vtu files may be loaded directly into Paraview, it is preferred to load the pvd file. Due to the timestep field, the Datetime plugin can then show an overlay with the date-time for easier analysis.

Note

If MPI is enabled, the pvd file is the only reasonable way of loading all the parts of the mesh into one view.

timeseries

The timeseries output is a text, comma-separated-value (.csv) file. The first column is always datetime, and the subsequent column names are the variables output from all the modules. This order is not guaranteed.

The datetime is in the format YYYYMMDDThhmmss.

These files are output to the output_folder/points/ subdirectory. The files are named station_name.txt.

datetime,ilwr,l,acc_snow
20170901T060000,429.61,1.81749

Checkpointing

CHM can save the current state of all modules to disk and then later resume from this point. The provides a form of checkpointing.

The states are stored as json metadata and netcdf files located in output_dir/checkpoint/. Within this folder are json meta file named in the form checkpoint_YYYYMMddTHHMMSS.npRANKS.json. This file provides the list of the netcdf files that need to be loaded for each MPI rank, along with sanity checks for how many MPI ranks were used in the checkpoint run and what time to restart from. If a checkpoint file was saved with n ranks, then it must be loaded with n ranks. The netcdf files are saved in a sub-directory YYYYMMddTHHMMSS.

{
    "ranks": "8",
    "restart_time_sec": "1577462400",
    "startdate": "20191227T160000",
    "files": [
        "20191227T160000\/chkp20191227T160000_0.nc",
        "20191227T160000\/chkp20191227T160000_1.nc",
        "20191227T160000\/chkp20191227T160000_2.nc",
        "20191227T160000\/chkp20191227T160000_3.nc",
        "20191227T160000\/chkp20191227T160000_4.nc",
        "20191227T160000\/chkp20191227T160000_5.nc",
        "20191227T160000\/chkp20191227T160000_6.nc",
        "20191227T160000\/chkp20191227T160000_7.nc"
    ]
}

There is one netcdf file per rank, and each row in the netcdf file corresponds to a single triangle global_id, indexed with global_id. A simple pointmode checkpoint file example is given below:

netcdf chkp20200125T140000_0 {
dimensions:
   tri_id = 1 ;
variables:
   double Harder_precip_phase\:hours_since_snowfall(tri_id) ;
   double Harder_precip_phase\:acc_rain(tri_id) ;
   double Harder_precip_phase\:acc_snow(tri_id) ;
   double fsm\:snw(tri_id) ;
   double fsm\:snd(tri_id) ;
   double fsm\:sum_snowpack_subl(tri_id) ;
   double fsm\:albs(tri_id) ;
   double fsm\:Tsrf(tri_id) ;
   double fsm\:Dsnw\[0\](tri_id) ;
   double fsm\:Dsnw\[1\](tri_id) ;
   double fsm\:Dsnw\[2\](tri_id) ;
   double fsm\:Nsnow(tri_id) ;
   double fsm\:Qcan\[0\](tri_id) ;
   double fsm\:Qcan\[1\](tri_id) ;
   double fsm\:Sice\[0\](tri_id) ;
   double fsm\:Sice\[1\](tri_id) ;
   double fsm\:Sice\[2\](tri_id) ;
   double fsm\:Sliq\[0\](tri_id) ;
   double fsm\:Sliq\[1\](tri_id) ;
   double fsm\:Sliq\[2\](tri_id) ;
   double fsm\:Sveg\[0\](tri_id) ;
   double fsm\:Sveg\[1\](tri_id) ;
   double fsm\:Tcan\[0\](tri_id) ;
   double fsm\:Tcan\[1\](tri_id) ;
   double fsm\:Tsnow\[0\](tri_id) ;
   double fsm\:Tsnow\[1\](tri_id) ;
   double fsm\:Tsnow\[2\](tri_id) ;
   double fsm\:Tsoil\[0\](tri_id) ;
   double fsm\:Tsoil\[1\](tri_id) ;
   double fsm\:Tsoil\[2\](tri_id) ;
   double fsm\:Tsoil\[3\](tri_id) ;
   double fsm\:Tveg\[0\](tri_id) ;
   double fsm\:Tveg\[1\](tri_id) ;
   double fsm\:Vsmc\[0\](tri_id) ;
   double fsm\:Vsmc\[1\](tri_id) ;
   double global_id(tri_id) ;

// global attributes:
       :restart_time = "2020-Jan-25 14:00:00" ;
       :restart_time_sec = 1579960800ULL ;
}

The user does not need to manually set the restart time, CHM will override any config or user specified start times with that specified in the checkpoint json file.

The savestate occurs at the end of the timestep, so the resume time will be one timestep into the future, i.e., the next timestep.

The make use of checkpointing, a module must implement the checkpoint(mesh& domain,  netcdf& chkpt) and load_checkpoint(mesh& domain, netcdf& chkpt) methods.

Visualization

The primary vizualization of the mesh output is via Paraview. This allows of efficiently viewing the spatio-temporal data.

_images/paraview.png

Note

If MPI is enabled, the pvd file is the only reasonable way of loading all the parts of the mesh into one view.

Paraview

Download Paraview from the main web site. You do not need to build this from souce.

Datetime plugin

A custom paraview plugin is available to show the date and time.

_images/datetime.gif

Note

The xml plugin AnnotateDateTime.xml is all that is needed. The C++ plugin is deprecated.

To load the plugin in Paraivew: Tools -> Manage Plugins -> Load new -> Navigate to directory and choose the .xml file. If the arrow is clicked, an expanded view is shown. Selecting “auto-load” will ensure the plugin is loaded each launch.

However, the xml file needs to remain in a fixed location for this to work.

_images/plugin_load.png

Otherwise, after restarting Paraview, you will have to reload the plugin via Tools -> Manage Plugins -> Load Selected

Optionally, copy the plugin into the plugins directory of paraview and add <Plugin name="AnnotateDateTime" auto_load="1"/> to the .plugins file. This will load the plugin automatically and not require the xml file in a seperate location.

To add the datetime plugin to the view, load the pvd file and ensure this is selected the left pane. Then, Filters->Search and search for date. Alternatively load via Filters->Annotation->Date Time Annotation.

_images/pluginload.png

Warning

This plugin only works when loading the pvd file.

Stations

A stations.vtp file is written to the root of the output folder that contains the location of each forcing station (the virtual stations). The vtp files are a point dataset of the x,y,z value of the forcing stations, as well as the station name as a label. (See below for output point location file). To view the points in Paraivew:

  • Load the vtp file

  • With the vtp file selected in the Pipeline Browser, choose Point Gaussian as the representation. Change the radius so the point is visible, or decrease it if it is too large.

To view the point labels: - Select vtp file in the pipeline browser - Create a new spreadhseet layout - Select the points you wish to have labels displayed for - View->Selection Display Inspector - Choose Point Labels drop down and select ‘Station name’. - Use the cog next to ‘selection colour’ to change the display font (size, colour, etc)

image0

Remote visualization on Graham

A pvserver can be hosted on Compute Canada’s Graham cluster, allowing for remote visualization without the need to copy files locally. CC notes this is still experimental and crashes do occur. However, it seems to generally work well. Instructions can be found here. Contrary to documentation, some users have found better performance not using --mesa-swr-avx2 and some stability improvements were found too. It is worth trying with and without this option.

For larger domains and complex multi-views, using the GPU nodes appears to be more stable.

For datetime support, the plugin also needs to be loaded on Graham

Warning

The local Paraview client version must exactly match the pvserver version on Graham.

Modules

Overview

Modules contain the physical process representation. A principal design goal of a module is that it may depend either upon some set of variables produced by either other modules or on input forcing data. Modules define a set of variables which it provides globally to other modules.

  1. All modules have pre-/post-conditions;

    Pre condition

    • input forcing data or post-conditions from other modules;

    Post condition

    • see pre condition;

    Variables

    • provide global variables to other modules, but these variables do not change in other modules.

  2. There are two types of modules:

    Forcing data interpolant

    • depends upon point-scale input forcing data variables and interpolate these data onto every domain element;

    Standard process module

    • depends only upon the output of interpolation modules or other modules’ output.

  3. A module may not ever write any other variable global variable which it does declare. It should also not overwrite the variables of another module.

Modules are specified to run in the modules section of the configuration file and configured as detailed in the config section. For more details on how modules work, please see Modules.

Note

Unlike filters, modules are executed in an order to resolve the inter-module variable dependencies.

Available modules

Agriculture

crop_rotation
class crop_rotation : public module_base

Basic crop rotation. Changes between two different landcovers on even/odd years. On even years, it sets the “crop” parameter to the parameter “annual_crop_inventory_1”, and on odd years it sets it to “annual_crop_inventory_2”. Mostly a proof-of-concept.

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • Year even crop “annual_crop_inventory_1”

  • Year odd crop “annual_crop_inventory_2”

Air temperature

const_llra_ta
class const_llra_ta : public module_base

Constant linear lapse rate adjustment for air temperature of 0.0065 \({}^\circ C \cdot m^{-1}\).

Requires from met:

  • Air temperature - “t” [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Cullen_monthly_llra_ta
class Cullen_monthly_llra_ta : public module_base

Monthly linear lapse rate adjustment for air temperature using Cullen, et al (2011) for the Rocky Mountains

Requires from met:

  • Air temperature [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Reference:

Cullen, R. M., and S. J. Marshall (2011), Mesoscale temperature patterns in the Rocky Mountains and foothills region of southern Alberta, Atmos. - Ocean, 49(3), 189–205, doi:10.1080/07055900.2011.592130.

Dist_tlapse
class Dist_tlapse : public module_base

Spatially interpolates provided lapse rates from virtual stations

Depends from met:

  • Air temperature - “t” [ \( \circ C ] \)

  • Lapse rate - “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Provides:

  • Air temperature “t” [ \( \circ C ] \)

  • Lapse rate “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Configuration keys:

  • None

Dodson_NSA_ta
class Dodson_NSA_ta : public module_base

Implements the neutral stability algorithm for air temperature from Dodson and Marks (1994). The neutral stability algorithm (NSA), uses the hydrostatic and potential temperature equations to convert measured temperatures and elevations to sea-level potential temperatures. The potential temperatures are spatially interpolated and then mapped to the elevation.

Requires from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \)]

Configuration keys:

  • None *

Reference: Dodson, R. and Marks, D.: Daily air temperature interpolated at high spatial resolution over a large mountainous region, Clim. Res., 8(Myers 1994), 1–20, doi:10.3354/cr008001, 1997.

Liston_monthly_llra_ta
class Liston_monthly_llra_ta : public module_base

Constant monthly linear lapse rate adjustment for air temperature. Uses Liston and Elder (2006).

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \) ]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \) ]

Reference: Liston, Glen E., and Kelly Elder. 2006. A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of hydrometeorology 7: 217-234

t_no_lapse
class t_no_lapse : public module_base

Spatially interpolate air temperature with no lapse rate adjustment

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Lapse rate “t_monthly_lapse” [ \( {}^\circ C \)]

Configuration keys:

  • None

Atmosphere

Walcek_cloud
class Walcek_cloud : public module_base

Calculates a cloud fraction using 700mvb RH. Extrapolates RH@700mb via Kunkel (1989).

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Relative humidity “rh” [%]

Provides:

  • Atmospheric transmittance “cloud_frac” [0,1]

References:

  • Walcek, C. J. (1994). Cloud cover and its relationship to relative humidity during a springtime midlatitude cyclone. Monthly Weather Review, 122(6), 1021–1035.

  • Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Evaporation

PenmanMonteith_evaporation
class PenmanMonteith_evaporation : public module_base

Calculates evapo-transpiration via Penman-Monteith.

Not currently maintained.

Depends:

  • Incoming shortwave radaition “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Provides:

  • Evapotranspiration “ET” [ \( mm \cdot dt^{-1} \) ]

Experimental

deform_mesh
class deform_mesh : public module_base

Example of how to deform the mesh’s z-coords.

Warning

There is currently no way for CHM to be updated that the mesh z has changed to recompute slopes/aspect/etc.

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

PenmanMonteith_evaporation
class PenmanMonteith_evaporation : public module_base

Calculates evapo-transpiration via Penman-Monteith.

Not currently maintained.

Depends:

  • Incoming shortwave radaition “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Provides:

  • Evapotranspiration “ET” [ \( mm \cdot dt^{-1} \) ]

From meteorological forcing

const_llra_ta
class const_llra_ta : public module_base

Constant linear lapse rate adjustment for air temperature of 0.0065 \({}^\circ C \cdot m^{-1}\).

Requires from met:

  • Air temperature - “t” [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Cullen_monthly_llra_ta
class Cullen_monthly_llra_ta : public module_base

Monthly linear lapse rate adjustment for air temperature using Cullen, et al (2011) for the Rocky Mountains

Requires from met:

  • Air temperature [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Reference:

Cullen, R. M., and S. J. Marshall (2011), Mesoscale temperature patterns in the Rocky Mountains and foothills region of southern Alberta, Atmos. - Ocean, 49(3), 189–205, doi:10.1080/07055900.2011.592130.

Dist_tlapse
class Dist_tlapse : public module_base

Spatially interpolates provided lapse rates from virtual stations

Depends from met:

  • Air temperature - “t” [ \( \circ C ] \)

  • Lapse rate - “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Provides:

  • Air temperature “t” [ \( \circ C ] \)

  • Lapse rate “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Configuration keys:

  • None

Dodson_NSA_ta
class Dodson_NSA_ta : public module_base

Implements the neutral stability algorithm for air temperature from Dodson and Marks (1994). The neutral stability algorithm (NSA), uses the hydrostatic and potential temperature equations to convert measured temperatures and elevations to sea-level potential temperatures. The potential temperatures are spatially interpolated and then mapped to the elevation.

Requires from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \)]

Configuration keys:

  • None *

Reference: Dodson, R. and Marks, D.: Daily air temperature interpolated at high spatial resolution over a large mountainous region, Clim. Res., 8(Myers 1994), 1–20, doi:10.3354/cr008001, 1997.

Kunkel_monthlyTd_rh
class Kunkel_monthlyTd_rh : public module_base

Monthly-variable linear lapse rate adjustment for relative humidity based upon Kunkel (1989). RH is lapsed via dew point temperatures.

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Depends from Met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative humidity “rh” [ \( % \)]

Configuration keys:

  • None

Reference: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

kunkel_rh
class kunkel_rh : public module_base

Directly lapses RH values with elevation. Based on equation 15 in Kunkel (1989).

Depends from met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative Humidity “rh” [ \( % \)]

Configuration keys:

  • None

References: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Liston_monthly_llra_ta
class Liston_monthly_llra_ta : public module_base

Constant monthly linear lapse rate adjustment for air temperature. Uses Liston and Elder (2006).

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \) ]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \) ]

Reference: Liston, Glen E., and Kelly Elder. 2006. A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of hydrometeorology 7: 217-234

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

Longwave_from_obs
class Longwave_from_obs : public module_base

Annually constant longwave lapse rate adjustment to longwave from observations. Lapse rate of 2.8 W/m^2 / 100 meters

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Configuration keys:

  • None

Reference: Marty, C., Philipona, R., Fröhlich, C., Ohmura, A. (2002). Altitude dependence of surface radiation fluxes and cloud forcing in the alps: results from the alpine surface radiation budget network Theoretical and Applied Climatology 72(3), 137-155. https://dx.doi.org/10.1007/s007040200019

lw_no_lapse
class lw_no_lapse : public module_base

Spatially interpolates incoming longwave with no adjustment for elevation.

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Depends:

  • None

Configuration keys:

  • None

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

p_from_obs
class p_from_obs : public module_base

Spatially distributes liquid water precipitation by calculating lapse rates based on observed data on a per-timestep basis

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

  • None

p_lapse
class p_lapse : public module_base

Spatially distributes liquid water precipitation using a precipitation lapse rate derived from stations for the Marmot Creek reserach basin or the Upper Bow River Wathershed. Monthly lapse rates are used as in the CRHM model.

Depends from met:

  • Precip from met file “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Lapse precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

Precipitation lapse rate derived from Marmot Creek stations by Logan Fang (used in CRHM for Marmot Creek domain)

Type:

boolean

Default:

false

p_no_lapse
class p_no_lapse : public module_base

Spatially distributes liquid water precipitation with no lapsing

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

Type:

boolean

Default:

false

rh_from_obs
class rh_from_obs : public module_base

Creates an elevation-vapour pressure lapse rate from observed RH values. Depends on the stations to compute the vapour pressure, but it uses an already lapsed temperature from another module to recompute the RH at a triangle.

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Relative humidity “rh” [%]

Configuration keys:

  • None *

rh_no_lapse
class rh_no_lapse : public module_base

Spatially interpolates relative humidity without any lapse adjustments. Bounds RH on [10%, 100%].

Depends from met:

  • Relative Humidity “rh” [%]

Provides:

  • Relative Humidity “rh” [%]

Configuration keys:

  • None

t_no_lapse
class t_no_lapse : public module_base

Spatially interpolate air temperature with no lapse rate adjustment

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Lapse rate “t_monthly_lapse” [ \( {}^\circ C \)]

Configuration keys:

  • None

Thornton_p
class Thornton_p : public module_base

Spatially distributes liquid water precipitation using Thornton, et al. 1997 via monthly lapse rates.

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

  • Thornton, P. E., Running, S. W., & White, M. A. (1997). Generating surfaces of daily meteorological variables over large regions of complex terrain. Journal of Hydrology, 190(3-4), 214–251. http://doi.org/10.1016/S0022-1694(96)03128-9

Type:

boolean

Default:

false

uniform_wind
class uniform_wind : public module_base

Spatially interpolates wind speed and direction without any terrain speed-up modification

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

Longwave

Longwave_from_obs
class Longwave_from_obs : public module_base

Annually constant longwave lapse rate adjustment to longwave from observations. Lapse rate of 2.8 W/m^2 / 100 meters

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Configuration keys:

  • None

Reference: Marty, C., Philipona, R., Fröhlich, C., Ohmura, A. (2002). Altitude dependence of surface radiation fluxes and cloud forcing in the alps: results from the alpine surface radiation budget network Theoretical and Applied Climatology 72(3), 137-155. https://dx.doi.org/10.1007/s007040200019

lw_no_lapse
class lw_no_lapse : public module_base

Spatially interpolates incoming longwave with no adjustment for elevation.

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Depends:

  • None

Configuration keys:

  • None

Sicart_ilwr
class Sicart_ilwr : public module_base

Calculates longwave radiation from the atmosphere (including skyview correction) for clear and cloudy days following Sicart, et al (2006)

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

  • Cloud fraction “cloud_frac” [-]

Provides:

  • Incoming longwave “ilwr” [W/m^2]

Parameters:

  • Optionally Sky View Factor “svf” [-]

References:

  • Sicart, J., Pomeroy, J., Essery, R., Bewley, D. (2006). Incoming longwave radiation to melting snow: observations, sensitivity and estimation in Northern environments Hydrological Processes 20(17), 3697-3708. https://dx.doi.org/10.1002/hyp.6383

Walcek_cloud
class Walcek_cloud : public module_base

Calculates a cloud fraction using 700mvb RH. Extrapolates RH@700mb via Kunkel (1989).

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Relative humidity “rh” [%]

Provides:

  • Atmospheric transmittance “cloud_frac” [0,1]

References:

  • Walcek, C. J. (1994). Cloud cover and its relationship to relative humidity during a springtime midlatitude cyclone. Monthly Weather Review, 122(6), 1021–1035.

  • Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

NWP

iswr_from_nwp
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

Parameters

fetchr
class fetchr : public module_base

Calculates upwind fetch distances. The fetch is broken if a triangle at distance d * I > current triangle’s elevation.

Depends:

  • Wind direction “vw_dir” [degrees]

Provides:

  • Fetch distance “fetch” [m]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

I

Rise/run threshold to multiply against the distance of a test triangle.

References:

  • Lapen, D. R., and L. W. Martz (1993), The measurement of two simple topographic indices of wind sheltering-exposure from raster digital elevation models, Comput. Geosci., 19(6), 769–779, doi:10.1016/0098-3004(93)90049-B.

Type:

int

Default:

10

Type:

double

Default:

1000 m

Type:

double

Default:

0.06

Winstral
class Winstral

Compute the Winstral parameter that can be used to redistribute wind and precipitation in complex terrain to improve simulation of snow cover variability.

Depends:

  • Direction at reference height ‘vw_dir’ [degrees]

  • Snow depth [m] (optional)

Provides:

Configuration:

{
   "dmax": 300,
   "size_of_step": 10.0,
   "height_param": 0.0,
   "angular_window": 30.0,
   "delta_angle" : 5.0,
   "incl_veg": false,
   "incl_snw": false
   "use_subgridz": true
}
dmax

Max distance to search

size_of_step

Size of the step to take when searching

height_param

Height parameter to account for instrument height or the impact of small terrain perturbation on Sx . See Winstral et al. (2013) for more details

angular_window

The angle for which to bin the wind directions in

delta_angle
incl_veg

Should vegetation height be added to terrain height for the calculation

incl_snw

Should snow height be added to terrain height for the calculation

use_subgridz

Use an interpolated height within the triangle instead of just the triangle cell centre. Avoids step function results.

References:

Type:

double

Default:

300 m

Type:

double

Default:

10.0 m

Type:

double

Default:

0.0

Type:

double

Default:

30 deg

Type:

double

Default:

5.0

Type:

boolean

Default:

false

Type:

boolean

Default:

false

Type:

boolean

Default:

true

Point Mode

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

Precipitation

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

p_from_obs
class p_from_obs : public module_base

Spatially distributes liquid water precipitation by calculating lapse rates based on observed data on a per-timestep basis

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

  • None

p_lapse
class p_lapse : public module_base

Spatially distributes liquid water precipitation using a precipitation lapse rate derived from stations for the Marmot Creek reserach basin or the Upper Bow River Wathershed. Monthly lapse rates are used as in the CRHM model.

Depends from met:

  • Precip from met file “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Lapse precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

Precipitation lapse rate derived from Marmot Creek stations by Logan Fang (used in CRHM for Marmot Creek domain)

Type:

boolean

Default:

false

p_no_lapse
class p_no_lapse : public module_base

Spatially distributes liquid water precipitation with no lapsing

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

Type:

boolean

Default:

false

Thornton_p
class Thornton_p : public module_base

Spatially distributes liquid water precipitation using Thornton, et al. 1997 via monthly lapse rates.

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

  • Thornton, P. E., Running, S. W., & White, M. A. (1997). Generating surfaces of daily meteorological variables over large regions of complex terrain. Journal of Hydrology, 190(3-4), 214–251. http://doi.org/10.1016/S0022-1694(96)03128-9

Type:

boolean

Default:

false

Relative humidity

Kunkel_monthlyTd_rh
class Kunkel_monthlyTd_rh : public module_base

Monthly-variable linear lapse rate adjustment for relative humidity based upon Kunkel (1989). RH is lapsed via dew point temperatures.

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Depends from Met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative humidity “rh” [ \( % \)]

Configuration keys:

  • None

Reference: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

kunkel_rh
class kunkel_rh : public module_base

Directly lapses RH values with elevation. Based on equation 15 in Kunkel (1989).

Depends from met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative Humidity “rh” [ \( % \)]

Configuration keys:

  • None

References: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

rh_from_obs
class rh_from_obs : public module_base

Creates an elevation-vapour pressure lapse rate from observed RH values. Depends on the stations to compute the vapour pressure, but it uses an already lapsed temperature from another module to recompute the RH at a triangle.

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Relative humidity “rh” [%]

Configuration keys:

  • None *

rh_no_lapse
class rh_no_lapse : public module_base

Spatially interpolates relative humidity without any lapse adjustments. Bounds RH on [10%, 100%].

Depends from met:

  • Relative Humidity “rh” [%]

Provides:

  • Relative Humidity “rh” [%]

Configuration keys:

  • None

Shortwave radiation

Burridge_iswr
class Burridge_iswr : public module_base

Computes incoming shortwave direct and diffuse beam radiation using a cloud fraction.

Depends:

  • Cloud fraction “cloud_frac” (-)

  • Solar elevation “solar_el” (degrees)

Provides:

  • Shortwave direct beam without slope correction “iswr_direct_no_slope” \([W \cdot m^{-2}\)]

  • Shortwave diffuse beam without slope correction “iswr_diffuse_no_slope” \([W \cdot m^{-2}\)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration:

  • None

References:

  • Burridge, D. M., and A. J. Gadd, 1974: The Meteorological Office operational 10 level numerical weather prediction model (December 1974). U.K. Met. Office Tech. Notes 12 and 48, 57 pp.

  • Described in Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

fast_shadow
class fast_shadow : public module_base

Calculates horizon shadows using an adaptation of Dozier and Frew 1990 to an unstructured mesh. Modifies the direct beam iswr ( = 0 W/m^2). Does not impact the diffuse beam

Requires:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Binary no shadow/shadow “shadow” [0 or 1=shadow]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

References:

  • Dozier, J., & Frew, J. (1990). Rapid calculation of terrain parameters for radiation modeling from digital elevation data. IEEE Transactions on Geoscience and Remote, 28(5), 963–969.

  • Marsh, C., Pomeroy, J., Wheater, H. (2020). The Canadian Hydrological Model (CHM) v1.0: a multi-scale, multi-extent, variable-complexity hydrological model – design and overview Geoscientific Model Development 13(1), 225-247. https://dx.doi.org/10.5194/gmd-13-225-2020

Type:

int

Default:

10

Type:

double

Default:

1000 m

iswr_from_nwp
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

iswr_from_obs
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

Iqbal_iswr
class Iqbal_iswr : public module_base

Estimates incoming shortwave direct and diffuse beams without slope correction.

Depends:

  • Air temperature “t” [ \({}^\circ C \)]

  • Relative humidity “rh” [%]

  • Cloud fraction “cloud_frac” [-]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Incoming solar shortwave radiation, direct beam, no slope adjustment “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Incoming solar shortwave radiation, diffuse beam, no slope adjustment “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

References:

iswr
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

Marsh_shading_iswr
class Marsh_shading_iswr : public module_base

Computes the horizon-shadows using the parallel point plane projection from Marsh, et al (2011). The :ref:fast_shadow routine provides almost as good of a result with less computational overhead.

Depends:

  • Solar azimuth “solar_az” [degrees]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Value that provides a metric for triangle ‘nearness’ to the sun “z_prime” [-]

  • Binary shadow value “shadowed” [1 (true) / 0 (false)]

Configuration:

{
   "x_AABB":10,
   "y_AABB":10
}


The domain is split into an x/y grid in projection space.
Triangles are only compared to triangles in their bin to compute shadows. Thus, the smaller the value the
more chance of missing a triangle intersection. It also decreases the number of comparisons and can dramatically
decrease the computational time.
x_AABB

This is the size number of bins in the x direction.

y_AABB

This is the size number of bins in the y direction.

Reference:
  • Marsh, C.B., J.W. Pomeroy, and R.J. Spiteri. “Implications of Mountain Shading on Calculating Energy for Snowmelt Using Unstructured Triangular Meshes.” Hydrological Processes 26, no. 12 (June 15, 2012): 1767–78. doi:10.1002/hyp.9329.

Type:

int

Default:

10

Type:

int

Default:

10

slope_iswr
class slope_iswr : public module_base

Calculates incoming direct-beam shortwave solar radiation to slope

Depends:

  • Incoming solar shortwave radiation, all beam “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2} \) ]

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Optional:

  • Shadow map “shadow” [0,1]

Provides:

  • Slope corrected shortwave all beam “iswr” [W/m^2]

  • Slope corrected shortwave direct “iswr_direct” [W/m^2]

  • Solar angle “solar_angle” [degrees]

{
   "no_slope": false
}
no_slope

Disables slope correction calcuation when true

Default:

false

solar
class solar : public module_base

Calculates solar position

Depends:

  • None

Provides:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Sky view view “svf” [-]

Configuration:

{
   "svf":
   {
      "steps": 10.
      "max_distance": 1000.0,
      "nsectors": 12,
      "compute": true
   }
}
steps

Number of search steps

max_distance

Maximum search distance

nsectors

Number of azimuthal search bins

compute

Compute the sky view factor

Type:

int

Default:

10

Default:

1000.0

Type:

int

Default:

12

Default:

true

Walcek_cloud
class Walcek_cloud : public module_base

Calculates a cloud fraction using 700mvb RH. Extrapolates RH@700mb via Kunkel (1989).

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Relative humidity “rh” [%]

Provides:

  • Atmospheric transmittance “cloud_frac” [0,1]

References:

  • Walcek, C. J. (1994). Cloud cover and its relationship to relative humidity during a springtime midlatitude cyclone. Monthly Weather Review, 122(6), 1021–1035.

  • Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Snow

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Richard_albedo
class Richard_albedo : public module_base

Slow albedo changes for cold snow are neglected, but an exponential decay to an asymptotic minimum of 0.5 with an adjustable time constant applied to melting snow.

Somewhat mis-named as although this is detailed in Essery and Etchevers (2004), the original source is from CLASS detailed in Verseghy, et al (1991).

Depends:

  • Snow Water Equivalent “swe” [mm]

  • Snow surface temperature “T_s_0” [ \( K \) ]

  • Precipitation, snow phase “p_snow” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Snow albedo “snow_albedo” [0-1]

  • True if a melting snow albedo is being used “melting_albedo” [0 or 1]

Configuration:

{
   "albedo_min": 0.5,
   "albedo_max": 0.84,
   "a1": 1.08e7,
   "a2": 7.2e5,
   "min_swe_refresh": 1.0,
   "init_albedo_snow": 0.85,
   "init_albedo_bare": 0.17
}
albedo_min

Minimum snow albedo

albedo_max

Maximum snow albedo

a1

Cold snow decay constant

a2

Melting snow decay constant

init_albedo_snow

Initial fresh snow albedo

init_albedo_bare

Bare ground albedo

References:

  • Equation 4 and 5

  • Essery, R., and P. Etchevers (2004), Parameter sensitivity in simulations of snowmelt, J. Geophys. Res., 109(D20111), 1–15, doi:10.1029/2004JD005036.

  • Verseghy, D. L.: Class – A Canadian land surface scheme for GCMS, I. Soil model, Int. J. Climatol., 11, 111–133, https://doi.org/10.1002/joc.3370110202, 1991

Type:

double

Default:

0.5

Type:

double

Default:

0.84

Type:

double

Default:

1.08e7 s

Type:

double

Default:

7.2e5 s

Type:

double

Default:

0.85

Type:

double

Default:

0.17

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

threshold_p_phase
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

Soil Infiltration

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

Uncategorized

mpi
class mpi : public module_base

MPI usage example

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • None

module_template
class module_template : public module_base

Template header file for new module implementations.

Depends:

Provides:

Wind

fetchr
class fetchr : public module_base

Calculates upwind fetch distances. The fetch is broken if a triangle at distance d * I > current triangle’s elevation.

Depends:

  • Wind direction “vw_dir” [degrees]

Provides:

  • Fetch distance “fetch” [m]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

I

Rise/run threshold to multiply against the distance of a test triangle.

References:

  • Lapen, D. R., and L. W. Martz (1993), The measurement of two simple topographic indices of wind sheltering-exposure from raster digital elevation models, Comput. Geosci., 19(6), 769–779, doi:10.1016/0098-3004(93)90049-B.

Type:

int

Default:

10

Type:

double

Default:

1000 m

Type:

double

Default:

0.06

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

uniform_wind
class uniform_wind : public module_base

Spatially interpolates wind speed and direction without any terrain speed-up modification

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

scale_wind_vert
class scale_wind_vert : public module_base

Scales wind speed from reference height to defined heights. Scales the wind vertically using a neutral stability log relationship. If snow depth is present, the height is taken into account. A fixed z0 of 0.01m is currently used. If a canopy is present then an exp sub-canopy scaling is used.

Depends:

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Optional:

  • Snow depth to take into account for the scaling “snowdepthavg” [m]

Provides:

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Parameters:

  • If ignore_canopy=False, then Leaf Area Index “LAI” [-]

Configuration:

{
   "ignore_canopy": false
}
ignore_canopy

Ignores the vegetation canopy

Default:

false

By provides variable

Note

These provides are automatically produced from the module code. They do not include provides that are dynamically generated

i.e., provides("t_"+some_var);

2m_zonal_u

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

2m_zonal_v

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

E

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

ET

PenmanMonteith_evaporation
class PenmanMonteith_evaporation : public module_base

Calculates evapo-transpiration via Penman-Monteith.

Not currently maintained.

Depends:

  • Incoming shortwave radaition “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Provides:

  • Evapotranspiration “ET” [ \( mm \cdot dt^{-1} \) ]

G

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

H

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

Km_coeff

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

LWout

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

M

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

MS_SOIL_RUNOFF

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

MS_SWE

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

MS_TOTALMASS

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

MS_WATER

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

Ninja_speed

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

Nsnow

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Qsalt

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Qsubl

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Qsubl_mass

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Qsusp

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Qsusp_pbsm

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

R_n

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

Sliq[0]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Sliq[1]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Sliq[2]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Sx

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

Winstral
class Winstral

Compute the Winstral parameter that can be used to redistribute wind and precipitation in complex terrain to improve simulation of snow cover variability.

Depends:

  • Direction at reference height ‘vw_dir’ [degrees]

  • Snow depth [m] (optional)

Provides:

Configuration:

{
   "dmax": 300,
   "size_of_step": 10.0,
   "height_param": 0.0,
   "angular_window": 30.0,
   "delta_angle" : 5.0,
   "incl_veg": false,
   "incl_snw": false
   "use_subgridz": true
}
dmax

Max distance to search

size_of_step

Size of the step to take when searching

height_param

Height parameter to account for instrument height or the impact of small terrain perturbation on Sx . See Winstral et al. (2013) for more details

angular_window

The angle for which to bin the wind directions in

delta_angle
incl_veg

Should vegetation height be added to terrain height for the calculation

incl_snw

Should snow height be added to terrain height for the calculation

use_subgridz

Use an interpolated height within the triangle instead of just the triangle cell centre. Avoids step function results.

References:

Type:

double

Default:

300 m

Type:

double

Default:

10.0 m

Type:

double

Default:

0.0

Type:

double

Default:

30 deg

Type:

double

Default:

5.0

Type:

boolean

Default:

false

Type:

boolean

Default:

false

Type:

boolean

Default:

true

T_g

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

T_s

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

T_s_0

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

T_s_l

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Td_lapse_rate

Kunkel_monthlyTd_rh
class Kunkel_monthlyTd_rh : public module_base

Monthly-variable linear lapse rate adjustment for relative humidity based upon Kunkel (1989). RH is lapsed via dew point temperatures.

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Depends from Met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative humidity “rh” [ \( % \)]

Configuration keys:

  • None

Reference: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Ti

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Tsnow[0]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsnow[1]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsnow[2]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsoil[0]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsoil[1]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsoil[2]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Tsoil[3]

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

U_10m

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

U_2m_above_srf

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

scale_wind_vert
class scale_wind_vert : public module_base

Scales wind speed from reference height to defined heights. Scales the wind vertically using a neutral stability log relationship. If snow depth is present, the height is taken into account. A fixed z0 of 0.01m is currently used. If a canopy is present then an exp sub-canopy scaling is used.

Depends:

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Optional:

  • Snow depth to take into account for the scaling “snowdepthavg” [m]

Provides:

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Parameters:

  • If ignore_canopy=False, then Leaf Area Index “LAI” [-]

Configuration:

{
   "ignore_canopy": false
}
ignore_canopy

Ignores the vegetation canopy

Default:

false

U_CanMid

scale_wind_vert
class scale_wind_vert : public module_base

Scales wind speed from reference height to defined heights. Scales the wind vertically using a neutral stability log relationship. If snow depth is present, the height is taken into account. A fixed z0 of 0.01m is currently used. If a canopy is present then an exp sub-canopy scaling is used.

Depends:

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Optional:

  • Snow depth to take into account for the scaling “snowdepthavg” [m]

Provides:

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Parameters:

  • If ignore_canopy=False, then Leaf Area Index “LAI” [-]

Configuration:

{
   "ignore_canopy": false
}
ignore_canopy

Ignores the vegetation canopy

Default:

false

U_CanTop

scale_wind_vert
class scale_wind_vert : public module_base

Scales wind speed from reference height to defined heights. Scales the wind vertically using a neutral stability log relationship. If snow depth is present, the height is taken into account. A fixed z0 of 0.01m is currently used. If a canopy is present then an exp sub-canopy scaling is used.

Depends:

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Optional:

  • Snow depth to take into account for the scaling “snowdepthavg” [m]

Provides:

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Parameters:

  • If ignore_canopy=False, then Leaf Area Index “LAI” [-]

Configuration:

{
   "ignore_canopy": false
}
ignore_canopy

Ignores the vegetation canopy

Default:

false

U_R

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

uniform_wind
class uniform_wind : public module_base

Spatially interpolates wind speed and direction without any terrain speed-up modification

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

U_R_orig

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

W_speedup

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

W_transf

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

acc_rain

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

acc_snow

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

atm_trans

Burridge_iswr
class Burridge_iswr : public module_base

Computes incoming shortwave direct and diffuse beam radiation using a cloud fraction.

Depends:

  • Cloud fraction “cloud_frac” (-)

  • Solar elevation “solar_el” (degrees)

Provides:

  • Shortwave direct beam without slope correction “iswr_direct_no_slope” \([W \cdot m^{-2}\)]

  • Shortwave diffuse beam without slope correction “iswr_diffuse_no_slope” \([W \cdot m^{-2}\)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration:

  • None

References:

  • Burridge, D. M., and A. J. Gadd, 1974: The Meteorological Office operational 10 level numerical weather prediction model (December 1974). U.K. Met. Office Tech. Notes 12 and 48, 57 pp.

  • Described in Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

iswr_from_obs
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

Iqbal_iswr
class Iqbal_iswr : public module_base

Estimates incoming shortwave direct and diffuse beams without slope correction.

Depends:

  • Air temperature “t” [ \({}^\circ C \)]

  • Relative humidity “rh” [%]

  • Cloud fraction “cloud_frac” [-]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Incoming solar shortwave radiation, direct beam, no slope adjustment “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Incoming solar shortwave radiation, diffuse beam, no slope adjustment “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

References:

available_storage

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

blowingsnow_probability

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

c_salt_fetch_big

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

cc

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

cloud_frac

Walcek_cloud
class Walcek_cloud : public module_base

Calculates a cloud fraction using 700mvb RH. Extrapolates RH@700mb via Kunkel (1989).

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Relative humidity “rh” [%]

Provides:

  • Atmospheric transmittance “cloud_frac” [0,1]

References:

  • Walcek, C. J. (1994). Cloud cover and its relationship to relative humidity during a springtime midlatitude cyclone. Monthly Weather Review, 122(6), 1021–1035.

  • Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

csalt

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

csalt_orig

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

csalt_reset

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

dQ

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

dead

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

delta_avalanche_mass

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

delta_avalanche_mass_sum

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

delta_avalanche_snowdepth

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

delta_avalanche_snowdepth_sum

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

dm/dt

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

drift_mass

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

evap

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

fetch

fetchr
class fetchr : public module_base

Calculates upwind fetch distances. The fetch is broken if a triangle at distance d * I > current triangle’s elevation.

Depends:

  • Wind direction “vw_dir” [degrees]

Provides:

  • Fetch distance “fetch” [m]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

I

Rise/run threshold to multiply against the distance of a test triangle.

References:

  • Lapen, D. R., and L. W. Martz (1993), The measurement of two simple topographic indices of wind sheltering-exposure from raster digital elevation models, Comput. Geosci., 19(6), 769–779, doi:10.1016/0098-3004(93)90049-B.

Type:

int

Default:

10

Type:

double

Default:

1000 m

Type:

double

Default:

0.06

frac_contrib

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

frac_contrib_nosnw

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

frac_precip_rain

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

threshold_p_phase
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

frac_precip_snow

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

threshold_p_phase
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

ghost_ss_delta_avalanche_snowdepth

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

ghost_ss_delta_avalanche_swe

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

ghost_ss_snowdepthavg_to_xfer

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

ghost_ss_snowdepthavg_vert_copy

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

ghost_ss_swe_to_xfer

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

global_cell_id

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

height_diff

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

hold_topo

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

hs

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

ilwr

Longwave_from_obs
class Longwave_from_obs : public module_base

Annually constant longwave lapse rate adjustment to longwave from observations. Lapse rate of 2.8 W/m^2 / 100 meters

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Configuration keys:

  • None

Reference: Marty, C., Philipona, R., Fröhlich, C., Ohmura, A. (2002). Altitude dependence of surface radiation fluxes and cloud forcing in the alps: results from the alpine surface radiation budget network Theoretical and Applied Climatology 72(3), 137-155. https://dx.doi.org/10.1007/s007040200019

lw_no_lapse
class lw_no_lapse : public module_base

Spatially interpolates incoming longwave with no adjustment for elevation.

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Depends:

  • None

Configuration keys:

  • None

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

Sicart_ilwr
class Sicart_ilwr : public module_base

Calculates longwave radiation from the atmosphere (including skyview correction) for clear and cloudy days following Sicart, et al (2006)

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

  • Cloud fraction “cloud_frac” [-]

Provides:

  • Incoming longwave “ilwr” [W/m^2]

Parameters:

  • Optionally Sky View Factor “svf” [-]

References:

  • Sicart, J., Pomeroy, J., Essery, R., Bewley, D. (2006). Incoming longwave radiation to melting snow: observations, sensitivity and estimation in Northern environments Hydrological Processes 20(17), 3697-3708. https://dx.doi.org/10.1002/hyp.6383

ilwr_out

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

inf

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

interp_zonal_u

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

interp_zonal_v

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

is_drifting

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

isothermal

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

iswr

iswr
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

slope_iswr
class slope_iswr : public module_base

Calculates incoming direct-beam shortwave solar radiation to slope

Depends:

  • Incoming solar shortwave radiation, all beam “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2} \) ]

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Optional:

  • Shadow map “shadow” [0,1]

Provides:

  • Slope corrected shortwave all beam “iswr” [W/m^2]

  • Slope corrected shortwave direct “iswr_direct” [W/m^2]

  • Solar angle “solar_angle” [degrees]

{
   "no_slope": false
}
no_slope

Disables slope correction calcuation when true

Default:

false

iswr_diffuse

iswr
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

iswr_diffuse_no_slope

Burridge_iswr
class Burridge_iswr : public module_base

Computes incoming shortwave direct and diffuse beam radiation using a cloud fraction.

Depends:

  • Cloud fraction “cloud_frac” (-)

  • Solar elevation “solar_el” (degrees)

Provides:

  • Shortwave direct beam without slope correction “iswr_direct_no_slope” \([W \cdot m^{-2}\)]

  • Shortwave diffuse beam without slope correction “iswr_diffuse_no_slope” \([W \cdot m^{-2}\)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration:

  • None

References:

  • Burridge, D. M., and A. J. Gadd, 1974: The Meteorological Office operational 10 level numerical weather prediction model (December 1974). U.K. Met. Office Tech. Notes 12 and 48, 57 pp.

  • Described in Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

iswr_from_nwp
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

iswr_from_obs
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

Iqbal_iswr
class Iqbal_iswr : public module_base

Estimates incoming shortwave direct and diffuse beams without slope correction.

Depends:

  • Air temperature “t” [ \({}^\circ C \)]

  • Relative humidity “rh” [%]

  • Cloud fraction “cloud_frac” [-]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Incoming solar shortwave radiation, direct beam, no slope adjustment “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Incoming solar shortwave radiation, diffuse beam, no slope adjustment “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

References:

iswr_direct

iswr
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

slope_iswr
class slope_iswr : public module_base

Calculates incoming direct-beam shortwave solar radiation to slope

Depends:

  • Incoming solar shortwave radiation, all beam “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2} \) ]

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Optional:

  • Shadow map “shadow” [0,1]

Provides:

  • Slope corrected shortwave all beam “iswr” [W/m^2]

  • Slope corrected shortwave direct “iswr_direct” [W/m^2]

  • Solar angle “solar_angle” [degrees]

{
   "no_slope": false
}
no_slope

Disables slope correction calcuation when true

Default:

false

iswr_direct_no_slope

Burridge_iswr
class Burridge_iswr : public module_base

Computes incoming shortwave direct and diffuse beam radiation using a cloud fraction.

Depends:

  • Cloud fraction “cloud_frac” (-)

  • Solar elevation “solar_el” (degrees)

Provides:

  • Shortwave direct beam without slope correction “iswr_direct_no_slope” \([W \cdot m^{-2}\)]

  • Shortwave diffuse beam without slope correction “iswr_diffuse_no_slope” \([W \cdot m^{-2}\)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration:

  • None

References:

  • Burridge, D. M., and A. J. Gadd, 1974: The Meteorological Office operational 10 level numerical weather prediction model (December 1974). U.K. Met. Office Tech. Notes 12 and 48, 57 pp.

  • Described in Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

iswr_from_nwp
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

iswr_from_obs
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

Iqbal_iswr
class Iqbal_iswr : public module_base

Estimates incoming shortwave direct and diffuse beams without slope correction.

Depends:

  • Air temperature “t” [ \({}^\circ C \)]

  • Relative humidity “rh” [%]

  • Cloud fraction “cloud_frac” [-]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Incoming solar shortwave radiation, direct beam, no slope adjustment “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Incoming solar shortwave radiation, diffuse beam, no slope adjustment “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

References:

iswr_net

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

iswr_observed

iswr_from_nwp
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

iswr_from_obs
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

iswr_out

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

l

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

lambda

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

lookup_d

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

lw_lapse_rate

lw_no_lapse
class lw_no_lapse : public module_base

Spatially interpolates incoming longwave with no adjustment for elevation.

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Depends:

  • None

Configuration keys:

  • None

mass_qsalt

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

mass_snowpack_removed

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

maxDepth

snow_slide
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

_images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

melting_albedo

Richard_albedo
class Richard_albedo : public module_base

Slow albedo changes for cold snow are neglected, but an exponential decay to an asymptotic minimum of 0.5 with an adjustable time constant applied to melting snow.

Somewhat mis-named as although this is detailed in Essery and Etchevers (2004), the original source is from CLASS detailed in Verseghy, et al (1991).

Depends:

  • Snow Water Equivalent “swe” [mm]

  • Snow surface temperature “T_s_0” [ \( K \) ]

  • Precipitation, snow phase “p_snow” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Snow albedo “snow_albedo” [0-1]

  • True if a melting snow albedo is being used “melting_albedo” [0 or 1]

Configuration:

{
   "albedo_min": 0.5,
   "albedo_max": 0.84,
   "a1": 1.08e7,
   "a2": 7.2e5,
   "min_swe_refresh": 1.0,
   "init_albedo_snow": 0.85,
   "init_albedo_bare": 0.17
}
albedo_min

Minimum snow albedo

albedo_max

Maximum snow albedo

a1

Cold snow decay constant

a2

Melting snow decay constant

init_albedo_snow

Initial fresh snow albedo

init_albedo_bare

Bare ground albedo

References:

  • Equation 4 and 5

  • Essery, R., and P. Etchevers (2004), Parameter sensitivity in simulations of snowmelt, J. Geophys. Res., 109(D20111), 1–15, doi:10.1029/2004JD005036.

  • Verseghy, D. L.: Class – A Canadian land surface scheme for GCMS, I. Soil model, Int. J. Climatol., 11, 111–133, https://doi.org/10.1002/joc.3370110202, 1991

Type:

double

Default:

0.5

Type:

double

Default:

0.84

Type:

double

Default:

1.08e7 s

Type:

double

Default:

7.2e5 s

Type:

double

Default:

0.85

Type:

double

Default:

0.17

mm

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

mpi_ghost_test

mpi
class mpi : public module_base

MPI usage example

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • None

mpi_rank

mpi
class mpi : public module_base

MPI usage example

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • None

n_elem

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

n_nodes

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

opportunity_time

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

p

p_from_obs
class p_from_obs : public module_base

Spatially distributes liquid water precipitation by calculating lapse rates based on observed data on a per-timestep basis

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

  • None

p_lapse
class p_lapse : public module_base

Spatially distributes liquid water precipitation using a precipitation lapse rate derived from stations for the Marmot Creek reserach basin or the Upper Bow River Wathershed. Monthly lapse rates are used as in the CRHM model.

Depends from met:

  • Precip from met file “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Lapse precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

Precipitation lapse rate derived from Marmot Creek stations by Logan Fang (used in CRHM for Marmot Creek domain)

Type:

boolean

Default:

false

p_no_lapse
class p_no_lapse : public module_base

Spatially distributes liquid water precipitation with no lapsing

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

Type:

boolean

Default:

false

Thornton_p
class Thornton_p : public module_base

Spatially distributes liquid water precipitation using Thornton, et al. 1997 via monthly lapse rates.

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

  • Thornton, P. E., Running, S. W., & White, M. A. (1997). Generating surfaces of daily meteorological variables over large regions of complex terrain. Journal of Hydrology, 190(3-4), 214–251. http://doi.org/10.1016/S0022-1694(96)03128-9

Type:

boolean

Default:

false

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

p_lapse

p_from_obs
class p_from_obs : public module_base

Spatially distributes liquid water precipitation by calculating lapse rates based on observed data on a per-timestep basis

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

  • None

p_no_slope

p_lapse
class p_lapse : public module_base

Spatially distributes liquid water precipitation using a precipitation lapse rate derived from stations for the Marmot Creek reserach basin or the Upper Bow River Wathershed. Monthly lapse rates are used as in the CRHM model.

Depends from met:

  • Precip from met file “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Lapse precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

Precipitation lapse rate derived from Marmot Creek stations by Logan Fang (used in CRHM for Marmot Creek domain)

Type:

boolean

Default:

false

p_no_lapse
class p_no_lapse : public module_base

Spatially distributes liquid water precipitation with no lapsing

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

Type:

boolean

Default:

false

Thornton_p
class Thornton_p : public module_base

Spatially distributes liquid water precipitation using Thornton, et al. 1997 via monthly lapse rates.

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

  • Thornton, P. E., Running, S. W., & White, M. A. (1997). Generating surfaces of daily meteorological variables over large regions of complex terrain. Journal of Hydrology, 190(3-4), 214–251. http://doi.org/10.1016/S0022-1694(96)03128-9

Type:

boolean

Default:

false

p_rain

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

threshold_p_phase
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

p_snow

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

threshold_p_phase
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

p_snow_hours

Harder_precip_phase
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

pbsm_more_than_avail

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

potential_inf

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

rh

Kunkel_monthlyTd_rh
class Kunkel_monthlyTd_rh : public module_base

Monthly-variable linear lapse rate adjustment for relative humidity based upon Kunkel (1989). RH is lapsed via dew point temperatures.

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Depends from Met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative humidity “rh” [ \( % \)]

Configuration keys:

  • None

Reference: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

kunkel_rh
class kunkel_rh : public module_base

Directly lapses RH values with elevation. Based on equation 15 in Kunkel (1989).

Depends from met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative Humidity “rh” [ \( % \)]

Configuration keys:

  • None

References: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

rh_from_obs
class rh_from_obs : public module_base

Creates an elevation-vapour pressure lapse rate from observed RH values. Depends on the stations to compute the vapour pressure, but it uses an already lapsed temperature from another module to recompute the RH at a triangle.

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Relative humidity “rh” [%]

Configuration keys:

  • None *

rh_no_lapse
class rh_no_lapse : public module_base

Spatially interpolates relative humidity without any lapse adjustments. Bounds RH on [10%, 100%].

Depends from met:

  • Relative Humidity “rh” [%]

Provides:

  • Relative Humidity “rh” [%]

Configuration keys:

  • None

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

runoff

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

saltation_mass

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

shadow

fast_shadow
class fast_shadow : public module_base

Calculates horizon shadows using an adaptation of Dozier and Frew 1990 to an unstructured mesh. Modifies the direct beam iswr ( = 0 W/m^2). Does not impact the diffuse beam

Requires:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Binary no shadow/shadow “shadow” [0 or 1=shadow]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

References:

  • Dozier, J., & Frew, J. (1990). Rapid calculation of terrain parameters for radiation modeling from digital elevation data. IEEE Transactions on Geoscience and Remote, 28(5), 963–969.

  • Marsh, C., Pomeroy, J., Wheater, H. (2020). The Canadian Hydrological Model (CHM) v1.0: a multi-scale, multi-extent, variable-complexity hydrological model – design and overview Geoscientific Model Development 13(1), 225-247. https://dx.doi.org/10.5194/gmd-13-225-2020

Type:

int

Default:

10

Type:

double

Default:

1000 m

Marsh_shading_iswr
class Marsh_shading_iswr : public module_base

Computes the horizon-shadows using the parallel point plane projection from Marsh, et al (2011). The :ref:fast_shadow routine provides almost as good of a result with less computational overhead.

Depends:

  • Solar azimuth “solar_az” [degrees]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Value that provides a metric for triangle ‘nearness’ to the sun “z_prime” [-]

  • Binary shadow value “shadowed” [1 (true) / 0 (false)]

Configuration:

{
   "x_AABB":10,
   "y_AABB":10
}


The domain is split into an x/y grid in projection space.
Triangles are only compared to triangles in their bin to compute shadows. Thus, the smaller the value the
more chance of missing a triangle intersection. It also decreases the number of comparisons and can dramatically
decrease the computational time.
x_AABB

This is the size number of bins in the x direction.

y_AABB

This is the size number of bins in the y direction.

Reference:
  • Marsh, C.B., J.W. Pomeroy, and R.J. Spiteri. “Implications of Mountain Shading on Calculating Energy for Snowmelt Using Unstructured Triangular Meshes.” Hydrological Processes 26, no. 12 (June 15, 2012): 1767–78. doi:10.1002/hyp.9329.

Type:

int

Default:

10

Type:

int

Default:

10

snow_albedo

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Richard_albedo
class Richard_albedo : public module_base

Slow albedo changes for cold snow are neglected, but an exponential decay to an asymptotic minimum of 0.5 with an adjustable time constant applied to melting snow.

Somewhat mis-named as although this is detailed in Essery and Etchevers (2004), the original source is from CLASS detailed in Verseghy, et al (1991).

Depends:

  • Snow Water Equivalent “swe” [mm]

  • Snow surface temperature “T_s_0” [ \( K \) ]

  • Precipitation, snow phase “p_snow” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Snow albedo “snow_albedo” [0-1]

  • True if a melting snow albedo is being used “melting_albedo” [0 or 1]

Configuration:

{
   "albedo_min": 0.5,
   "albedo_max": 0.84,
   "a1": 1.08e7,
   "a2": 7.2e5,
   "min_swe_refresh": 1.0,
   "init_albedo_snow": 0.85,
   "init_albedo_bare": 0.17
}
albedo_min

Minimum snow albedo

albedo_max

Maximum snow albedo

a1

Cold snow decay constant

a2

Melting snow decay constant

init_albedo_snow

Initial fresh snow albedo

init_albedo_bare

Bare ground albedo

References:

  • Equation 4 and 5

  • Essery, R., and P. Etchevers (2004), Parameter sensitivity in simulations of snowmelt, J. Geophys. Res., 109(D20111), 1–15, doi:10.1029/2004JD005036.

  • Verseghy, D. L.: Class – A Canadian land surface scheme for GCMS, I. Soil model, Int. J. Climatol., 11, 111–133, https://doi.org/10.1002/joc.3370110202, 1991

Type:

double

Default:

0.5

Type:

double

Default:

0.84

Type:

double

Default:

1.08e7 s

Type:

double

Default:

7.2e5 s

Type:

double

Default:

0.85

Type:

double

Default:

0.17

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

snowdepthavg

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

snowdepthavg_vert

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

snowmelt_int

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

soil_storage

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

solar_angle

iswr
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

slope_iswr
class slope_iswr : public module_base

Calculates incoming direct-beam shortwave solar radiation to slope

Depends:

  • Incoming solar shortwave radiation, all beam “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2} \) ]

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Optional:

  • Shadow map “shadow” [0,1]

Provides:

  • Slope corrected shortwave all beam “iswr” [W/m^2]

  • Slope corrected shortwave direct “iswr_direct” [W/m^2]

  • Solar angle “solar_angle” [degrees]

{
   "no_slope": false
}
no_slope

Disables slope correction calcuation when true

Default:

false

solar_az

solar
class solar : public module_base

Calculates solar position

Depends:

  • None

Provides:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Sky view view “svf” [-]

Configuration:

{
   "svf":
   {
      "steps": 10.
      "max_distance": 1000.0,
      "nsectors": 12,
      "compute": true
   }
}
steps

Number of search steps

max_distance

Maximum search distance

nsectors

Number of azimuthal search bins

compute

Compute the sky view factor

Type:

int

Default:

10

Default:

1000.0

Type:

int

Default:

12

Default:

true

solar_el

solar
class solar : public module_base

Calculates solar position

Depends:

  • None

Provides:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Sky view view “svf” [-]

Configuration:

{
   "svf":
   {
      "steps": 10.
      "max_distance": 1000.0,
      "nsectors": 12,
      "compute": true
   }
}
steps

Number of search steps

max_distance

Maximum search distance

nsectors

Number of azimuthal search bins

compute

Compute the sky view factor

Type:

int

Default:

10

Default:

1000.0

Type:

int

Default:

12

Default:

true

subl

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

sublimation

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

sum_drift

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

sum_melt

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

sum_runoff

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

sum_snowpack_pcp

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

sum_snowpack_runoff

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

sum_snowpack_subl

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

sum_subl

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

suspension_mass

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

swe

FSM
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

snobal
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Lehning_snowpack
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0  
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

t

const_llra_ta
class const_llra_ta : public module_base

Constant linear lapse rate adjustment for air temperature of 0.0065 \({}^\circ C \cdot m^{-1}\).

Requires from met:

  • Air temperature - “t” [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Cullen_monthly_llra_ta
class Cullen_monthly_llra_ta : public module_base

Monthly linear lapse rate adjustment for air temperature using Cullen, et al (2011) for the Rocky Mountains

Requires from met:

  • Air temperature [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Reference:

Cullen, R. M., and S. J. Marshall (2011), Mesoscale temperature patterns in the Rocky Mountains and foothills region of southern Alberta, Atmos. - Ocean, 49(3), 189–205, doi:10.1080/07055900.2011.592130.

Dist_tlapse
class Dist_tlapse : public module_base

Spatially interpolates provided lapse rates from virtual stations

Depends from met:

  • Air temperature - “t” [ \( \circ C ] \)

  • Lapse rate - “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Provides:

  • Air temperature “t” [ \( \circ C ] \)

  • Lapse rate “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Configuration keys:

  • None

Dodson_NSA_ta
class Dodson_NSA_ta : public module_base

Implements the neutral stability algorithm for air temperature from Dodson and Marks (1994). The neutral stability algorithm (NSA), uses the hydrostatic and potential temperature equations to convert measured temperatures and elevations to sea-level potential temperatures. The potential temperatures are spatially interpolated and then mapped to the elevation.

Requires from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \)]

Configuration keys:

  • None *

Reference: Dodson, R. and Marks, D.: Daily air temperature interpolated at high spatial resolution over a large mountainous region, Clim. Res., 8(Myers 1994), 1–20, doi:10.3354/cr008001, 1997.

Liston_monthly_llra_ta
class Liston_monthly_llra_ta : public module_base

Constant monthly linear lapse rate adjustment for air temperature. Uses Liston and Elder (2006).

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \) ]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \) ]

Reference: Liston, Glen E., and Kelly Elder. 2006. A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of hydrometeorology 7: 217-234

t_no_lapse
class t_no_lapse : public module_base

Spatially interpolate air temperature with no lapse rate adjustment

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Lapse rate “t_monthly_lapse” [ \( {}^\circ C \)]

Configuration keys:

  • None

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

t_lapse_rate

Cullen_monthly_llra_ta
class Cullen_monthly_llra_ta : public module_base

Monthly linear lapse rate adjustment for air temperature using Cullen, et al (2011) for the Rocky Mountains

Requires from met:

  • Air temperature [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Reference:

Cullen, R. M., and S. J. Marshall (2011), Mesoscale temperature patterns in the Rocky Mountains and foothills region of southern Alberta, Atmos. - Ocean, 49(3), 189–205, doi:10.1080/07055900.2011.592130.

Dist_tlapse
class Dist_tlapse : public module_base

Spatially interpolates provided lapse rates from virtual stations

Depends from met:

  • Air temperature - “t” [ \( \circ C ] \)

  • Lapse rate - “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Provides:

  • Air temperature “t” [ \( \circ C ] \)

  • Lapse rate “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Configuration keys:

  • None

Dodson_NSA_ta
class Dodson_NSA_ta : public module_base

Implements the neutral stability algorithm for air temperature from Dodson and Marks (1994). The neutral stability algorithm (NSA), uses the hydrostatic and potential temperature equations to convert measured temperatures and elevations to sea-level potential temperatures. The potential temperatures are spatially interpolated and then mapped to the elevation.

Requires from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \)]

Configuration keys:

  • None *

Reference: Dodson, R. and Marks, D.: Daily air temperature interpolated at high spatial resolution over a large mountainous region, Clim. Res., 8(Myers 1994), 1–20, doi:10.3354/cr008001, 1997.

Liston_monthly_llra_ta
class Liston_monthly_llra_ta : public module_base

Constant monthly linear lapse rate adjustment for air temperature. Uses Liston and Elder (2006).

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \) ]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \) ]

Reference: Liston, Glen E., and Kelly Elder. 2006. A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of hydrometeorology 7: 217-234

t_no_lapse
class t_no_lapse : public module_base

Spatially interpolate air temperature with no lapse rate adjustment

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Lapse rate “t_monthly_lapse” [ \( {}^\circ C \)]

Configuration keys:

  • None

tau_n_ratio

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

test_err

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

test_int

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

total_excess

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

total_inf

Gray_inf
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

tpi_lim

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

u*_n

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

u*_th

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

ustar

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

vw_dir

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

uniform_wind
class uniform_wind : public module_base

Spatially interpolates wind speed and direction without any terrain speed-up modification

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

point_mode
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

vw_dir_divergence

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

vw_dir_orig

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

MS_wind
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

w

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

z0

PBSM3D
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

z_prime

Marsh_shading_iswr
class Marsh_shading_iswr : public module_base

Computes the horizon-shadows using the parallel point plane projection from Marsh, et al (2011). The :ref:fast_shadow routine provides almost as good of a result with less computational overhead.

Depends:

  • Solar azimuth “solar_az” [degrees]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Value that provides a metric for triangle ‘nearness’ to the sun “z_prime” [-]

  • Binary shadow value “shadowed” [1 (true) / 0 (false)]

Configuration:

{
   "x_AABB":10,
   "y_AABB":10
}


The domain is split into an x/y grid in projection space.
Triangles are only compared to triangles in their bin to compute shadows. Thus, the smaller the value the
more chance of missing a triangle intersection. It also decreases the number of comparisons and can dramatically
decrease the computational time.
x_AABB

This is the size number of bins in the x direction.

y_AABB

This is the size number of bins in the y direction.

Reference:
  • Marsh, C.B., J.W. Pomeroy, and R.J. Spiteri. “Implications of Mountain Shading on Calculating Energy for Snowmelt Using Unstructured Triangular Meshes.” Hydrological Processes 26, no. 12 (June 15, 2012): 1767–78. doi:10.1002/hyp.9329.

Type:

int

Default:

10

Type:

int

Default:

10

zonal_u

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

zonal_v

Liston_wind
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

WindNinja
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

Filters

Overview

Filters are a mechanism whereby the input forcing data can be modified in some way prior to the model run. For example, this could be use to apply a gauge undercatch to precip. Filters modify the data of a virtual station in situ.

Warning

Filters run in the order defined in the configuration file.

Please see config:forcing for how to attach a filter to an input forcing file.

Available filters

Longwave

debias_lw
class debias_lw : public filter_base

Debias an incoming longwave radiation using an additive constant factor.

Requires:

  • Incoming longwave radiation \([W \cdot m^{-2}\)]

Modifies:

  • Input longwave

Configuration keys:

{
   "variable": "lw",
   "factor": 3.5
}
variable

Name of the variable to modify that coincides with the input met file.

factor

The amount to add to the input longwave by: lw = lw + factor

Type:

string

Type:

double

Units:

\([W \cdot m^{-2}]\)

Precipitation

goodison_undercatch
class goodison_undercatch : public filter_base

Undercatch correction for a Nipher shielded guage via Goodison 1998 for solid precipitation

Requires:

  • Precipitation [ \( mm\) ]

  • Windspeed at gauge height [ \(m \cdot s^{-1} \) ]

Modifies:

  • Input precipitation

Configuration keys:

{
   "precip_var": "ppt",
   "wind_var": "u"
}
precip_var

Name of the precipitation variable in the met file.

wind_var

Name of the wind speed variable in the met file.

References:

Type:

string

Type:

string

macdonald_undercatch
class macdonald_undercatch : public filter_base

Undercatch correction for a Alter shielded Geonor and tipping bucket via Macdonald, et al. 2007

Requires:

  • Precipitation [ \( mm\) ]

  • Windspeed at gauge height [ \(m \cdot s^{-1} \) ]

Modifies:

  • Input precipitation

Configuration keys:

{
   "precip_var": "ppt",
   "wind_var": "u"
}
precip_var

Name of the precipitation variable in the met file.

wind_var

Name of the wind speed variable in the met file.

References:

  • Macdonald, J., & Pomeroy, J. (2007). Gauge Undercatch of Two Common Snowfall Gauges in a Prairie Environment. Proceedings of the 64th Eastern Snow Conference, St. John‘s, Canada., 119–126.

Type:

string

Type:

string

Wind

scale_wind_speed
class scale_wind_speed : public filter_base

Scales a wind speed from a given height to the standard reference height in CHM, 50 m Uses a snow roughness z0, but assumes no snow depth (can be corrected for later).

Requires:

  • Windspeed [ \(m \cdot s^{-1} \) ]

Modifies:

  • None

Provides:

  • Reference windspeed at reference height - “U_R” [ \(m \cdot s^{-1} \) ]

Configuration keys:

{
    "variable":"u",
    "Z_F":10
}
variable

Name of the wind variable in the met file

Z_F

Wind observation height

Type:

string

Type:

double

Units:

[\(m\)]

Tools

vtu2geo

The conversion of the vtu format to arbitrary GIS formats is provided by vtu2geo located in tools/vtu2geo/main.py. Requires vtk and gdal + python bindings for each.

This tool produces an internal shp file that corresponds to the triangulation and uses GDAL to rasterize this to an output geotiff.

The vtu files contain multiple variables. Therefore, each output geotiff is a 1-band file corresponding to the selected output. The variables of interest as set in the variables list.

For vtu variables that are parameters (and therefore constant with time), only 1 output file is needed. These are defined in the parameters list. Only 1 geotiff will be produced from these.

input_path should be either a single .vtu file or a the .pvd file. If a pvd file is given it will produce a tiff for each vtu.

output_path is the output path. If output into the current folder is wanted, use '.'.

pixel_size is the size of the raster cells in m^2. var_resample_method and param_resample_method determine what resampling method to use when calculating on a clipped raster.

# Configuration file for vtu2geo tool


# Input path to where output vtu files are located
input_path = 'meshes/SC1506124800.vtu'
output_path = 'meshes/'


# Output variables
variables = ['snowdepthavg']  #set to None to dump all variables
var_resample_method    = {'snowdepthavg':'average'} # Methods to use when calculating clipped raster

# Output parameters
parameters = ['Elevation'] # paramters are one offs we want to extract from the vtu files
param_resample_method    = {'Elevation':'average'} # Methods to use when calculating clipped raster


# Output pixel size that the mesh is interpolated to (?)
pixel_size = 30 # (m)

Development

Modules

Modules contain the physical process representation. A principal design goal of a module is that it may depend either upon some set of variables produced by either other modules or on input forcing data. Modules define a set of variables which it provides globally to other modules.

  1. All modules have pre-/post-conditions;

    Pre condition

    • input forcing data or post-conditions from other modules;

    Post condition

    • see pre condition;

    Variables

    • provide global variables to other modules, but these variables do not change in other modules.

  2. There are two types of modules:

    Forcing data interpolant

    • depends upon point-scale input forcing data variables and interpolate these data onto every domain element;

    Standard process module

    • depends only upon the output of interpolation modules or other modules’ output.

  3. Parallelizations are offered in two ways, each module belongs to one of them:

    Data parallel

    • point-scale models that are applied to every triangle;

    Domain parallel

    • requires knowledge of surrounding mesh points.

    Parallelization process group modules with same parallel ty

A module may not ever write any other variable global variable which it does declare. It should also not overwrite the variables of another module.

There are two types of modules:

  • Forcing data interpolant

  • Standard process module

Forcing data interpolants (src/modules/interp_met) depend upon point-scale input forcing data variables and interpolate these data onto every domain element. Standard modules (src/modules/*) depend only upon the output of the interp_met modules as well as other module outputs.

All modules may either be data parallel or domain parallel. Data parallel modules are point-scale models that are applied to every triangle, e.g., snowmodel. Domain parallel modules are modules that require knowledge of surrounding mesh points, e.g., blowing snow transport model.

Modules inherent from module_base.hpp and implement a standard interface. In the most simple case, a module must have a constructor which defines all variable dependencies and a run function.

Data parallel

Data parallel modules implement a run method that takes as input a single mesh element to operate upon. These modules are automatically made parallel by CHM. The main model loop automatically schedules modules to execute in parallel. Domain parallel modules may access the elem variable directly to get access to the triangle element.

The constructor is used to set a module to be the correct parallel type: parallel::data.

class data_parallel_example : public module_base
{
public:
    data_parallel_example(config_file cfg);
    ~data_parallel_example();
    void run(mesh_elem& face);
};

data_parallel_example::data_parallel_example(config_file cfg)
        :module_base("data_parallel_example", parallel::data, cfg)
{
...
}

Domain parallel

Domain parallel modules implement a run method that takes the entire mesh domain. The module must iterate over the faces of the domain to gain access to each element. This may be done in parallel but must be explicitly done by the module. The constructor specifies the paralle type: parallel::domain.

class domain_parallel_example : public module_base
{
public:
    domain_parallel_example(config_file cfg);
    ~domain_parallel_example();
    void run(mesh& domain);
};

domain_parallel_example::domain_parallel_example(config_file cfg)
        :module_base("domain_parallel_example", parallel::domain, cfg)
{
...
}

void run(mesh domain, boost::shared_ptr<global> global_param)
{
 #pragma omp parallel for
    for (size_t i = 0; i < domain->size_faces(); i++)
    {
        auto face = domain->face(i);
       /** do stuff with face **/
    }
}

Iteration over mesh

Because the triangle iterators provided by CGAL have a non-deterministic order, as well as being incompatible with OpenMP, the way to access the i-th triangle is via

#pragma omp parallel for
    for (size_t i = 0; i < domain->size_faces(); i++)
    {
        auto elem = domain->face(i);
     ...
    }

init()

In all cases a module may implement the init method.

void example_module::init(mesh& domain)

Regardless of if the module is data or domain parallel, this function receives the entire mesh. init is called exactly once, after all other model setup has occurred, but prior to the main model execution loop. It is responsible for any initialization required by the model.

In some cases, a module may be able to work in either a domain parallel or a data parallel mode with little modification. To avoid duplicating code, a module may provide two run methods, one for each. Then, in the init function, it can change the type of parallelism that is declared. This is the only place where this change can be safely done. To do so, both run interfaces are exposed:

virtual void run(mesh domain);
virtual void run(mesh_elem &face);

and then in init, the module can query global as if CHM is in point-mode. If not, it can safely switch to domain parallel. E.g.:

if(!global_param->is_point_mode())
    _parallel_type =  parallel::domain;

scale_wind_vert.cpp is an example of this.

Dependencies

In the constructor, a module declares itself to provides a set of variables and optionally depends upon other variables. Lastly, it may optionally depend upon a variable. If the the variable is not present, module dependency checks will still succeed, but the module must check prior to access to avoid a segfault.

# from another modules
depends("ilwr");

#optionally depend on another modules output
optional("snow_albedo");

#provide for another module.
provides("dQ");

Conflicts

Sometimes two modules absolutely should not be used together. The conflicts allows for specifying the name of a module to conflict against. When a conflict is detected, the setup stops. This should be used sparingly.

conflicts("snow_slide");

Variable access

Modules read from a variable stored on the mesh element via

auto albedo = (*elem)["snow_albedo"];

Modules may only write to variables they provide via

(*elem)["dQ"] = 100.0;

If optional has been used, a module can test for existance via

if(has_optional("snow_albedo"))
{
   #do stuff
}

Variable names

Variable access via the above variable access incurs some computational cost to convert the string to a hash for lookup in the underlying data-structure. If possible, suffix a variable name string with _s. For example (*elem)["snow_albedo"_s]. This will replace the string with a compile-time hash value, making the runtime lookup significantly faster. This can be done as long as the variable is known at compile time. For example if diagnostic output is done for n layers at run time

for(int i = 0; i < n; ++i)
{
   provides("my_debug_layer_"+i);
}

then these are ineligible for the _s suffix and speedup.

Registration with module factory

Once the module has been written, it needs to be registered with the module factory.

  1. In the hpp file, within the class definition add REGISTER_MODULE_HPP(module_name); where module_name exactly matches the class name

  2. In the cpp file, outside of all the other definitions add REGISTER_MODULE_CPP(module_name);

  3. All configuration options, use of the module, etc will be refered to as module_name in the config file.

Data storage

Frequently, the module must maintain a set of data that is separate from the variables that are exposed to other modules (i.e., via provides). These data can be stored in two ways: a) as a member variable in the module class; b) in a per-triangle data store. If the data is stored as a member variable, this is global to every call of the module and shared across the entire mesh. Remember, there is only 1 instance of a module class. To achieve per-triangle data storage, a module should create a sub-class that inherants from face_info

class test : public module_base
{
 struct data : public face_info
    {
       double my_data;
    }
};

This sub-class then should be initialized on each element using make_module_data. As the class’ member variable ID is passed to the call to create and access the data, other modules’ data is technically available for access. Don’t do this.

auto d = face->make_module_data<test::data>(ID);  #returns the instance just created
d->my_data = 5;

#access later
auto d = face->get_module_data<test::data>(ID);

The make_module_data should be called in the init setup method.

interp_met modules

Meteorological interpolation functions are slightly different than the above. They should all declare an interpolant in their per-face data store. This must be on a per-element basis to ensure parallelism is possible. If this is not done, large wait-locks must be used to prevent the internal consistency of the linear systems. The other benefit of this design is the interpolant is on a per-module basis, allowing each module to use a different interpolant.

struct data : public face_info
{
    interpolation interp;
};

The interpolation object abstracts the creation of different types of spatial interpolators. Currently Inverse-Distance-Weighting (IDW) and Thin Plate Spline with Tension (TPSwT) are implemented. The interpolation method is chosen via the interp_alg enum. This is passed to the constructor

interpolation::init(interp_alg ia, size_t size)

For performance reasons, it is best to initialize the interpolator in the init method. The size parameter should be used to denote the number of locations to be used in the interpolation.

void test_module::init(mesh& domain)
{

    #pragma omp parallel for
    for (size_t i = 0; i < domain->size_faces(); i++)
    {
        auto face = domain->face(i);
        auto d = face->make_module_data<const_llra_ta::data>(ID);
        d->interp.init(global_param->interp_algorithm,face->stations().size() );
    }
    LOG_DEBUG << "Successfully init module " << this->ID;

}

The interpolation is performed by calling operator () on the interpolation instance

operator()(std::vector< boost::tuple<double,double,double> >& sample_points, boost::tuple<double,double,double>& query_point)

where sample_points is a vector of (x,y,value) location tuples of each input data. query_point is then the (x,y,z) location we wish to interpolate. Frequently values cannot be interpolate directly and requires lowering to a common reference level. An example of what this looks like for constant temperature lapse rate is shown.

double lapse_rate = 0.0065;

//lower all the station values to sea level prior to the interpolation
std::vector< boost::tuple<double, double, double> > lowered_values;
for (auto& s : face->stations())
{
  if( is_nan((*s)["t"_s]))
      continue;
  double v = (*s)["t"_s] - lapse_rate * (0.0 - s->z());
  lowered_values.push_back( boost::make_tuple(s->x(), s->y(), v ) );
}


auto query = boost::make_tuple(face->get_x(), face->get_y(), face->get_z());
double value = face->get_module_data<data>(ID)->interp(lowered_values, query);

//raise value back up to the face's elevation from sea level
value =  value + lapse_rate * (0.0 - face->get_z());

(*face)["t"_s]=value;

If the interpolant requires knowledge of the number of stations (e.g., TPSwT), and less stations are input (e.g., a NaN value is present), the the interpolant will on-the-fly reinitialize itself with the new size.

Execution order

Inter-module dependencies, and thus the order to run modules, is resolved during to run time. The order of module execution is not dependent upon the order listed in the configuration file. The interpolation modules always come prior to the process modules.

Inter-module variable dependencies is determined via the provides and depends declarations in the constructor. A module’s dependencies are every other module that provides that output. This connectivity is represented internally with a directed acyclic graph. Thus, the linear sequential execution of the modules is determined via a topological sort.

If Graphviz is installed, modules.pdf is generated which contains the graph of the inter-module dependencies. image0

Once the executed order is determined, the modules are chunked into execution groups depending on their parallel:: flag. For example, consider the following set of modules, sorted via the topological sort:

mod_A (parallel::data)
mod_B (parallel::data)
mod_C (parallel::data)
mod_D (parallel::domain)
mod_E (parallel::data)

These are then chunked into 3 sub groups:

mod_A (parallel::data)
mod_B (parallel::data)
mod_C (parallel::data)
mod_D (parallel::domain)
mod_E (parallel::data)

In the first data parallel subgroup, mod_A, mod_B, mod_C are executed sequentially on each triangle, but each triangle is done in parallel. Then subgroup 2 is run over the entire domain. Then subgroup 3 runs in parallel.

This purpose of this chunking is to attempt to schedule as many modules as possible, to avoid the increase in overhead of running M modules over N mesh points.

Filters

Filters are a mechanism whereby the input forcing data can be modified in some way prior to the model run. For example, this could be use to apply a gauge undercatch to precip. Filters modify the data of a virtual station in situ.

Warning

Filters run in the order defined in the configuration file.

Implementation

Filters inherent from the base filter_base class.

It must impliment the process function which recives as input a station.

void process(boost::shared_ptr<station> station);

init()

init can be used to determine what variable names should be used and accessed. For example,

var = cfg.get<std::string>("variable");
fac = cfg.get<double>("factor");

process

The filter is given the current timestep to modify

double data = (*station)[var];
 if(!is_nan(data))
 {
      data = data + fac;
 }

 (*station)[var]=data;

Library API

Full API

Classes and Structs

Struct const_llra_ta::data
Nested Relationships

This struct is a nested type of Class const_llra_ta.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Cullen_monthly_llra_ta::data
Nested Relationships

This struct is a nested type of Class Cullen_monthly_llra_ta.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Dist_tlapse::data
Nested Relationships

This struct is a nested type of Class Dist_tlapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Dodson_NSA_ta::data
Nested Relationships

This struct is a nested type of Class Dodson_NSA_ta.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct FSM::data
Nested Relationships

This struct is a nested type of Class FSM.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

float alb0 = 0.2
float vegh = 0
float VAI = 0
struct FSM::data::[anonymous] veg
float albs = 0.8
float Tsrf = 263.0
float Dsnw[3] = {0, 0, 0}
int Nsnow = 0
float Qcan[2] = {0, 0}
float Rgrn[3] = {__parameters_MOD_rgr0, __parameters_MOD_rgr0, __parameters_MOD_rgr0}
float Sice[3] = {0, 0, 0}
float Sliq[3] = {0, 0, 0}
float Sveg[2] = {0, 0}
float Tcan[2] = {285, 285}
float Tsnow[3] = {270, 270, 270}
float Tsoil[4] = {263, 263.1, 263.2, 263.3}
float Tveg[2] = {285, 285}
float Vsat = 0.27
float Vsmc[4] = {(float)0.5 * Vsat, (float)0.5 * Vsat, (float)0.5 * Vsat, (float)0.5 * Vsat}
struct FSM::data::[anonymous] state
float H = -9999
float LE = -9999
float LWout = -9999
float LWsub = -9999
float Melt = -9999
float Roff = -9999
float snd = -9999
float snw = -9999
float subl = -9999
float svg = -9999
float SWout = -9999
float SWsub = -9999
float Usub = -9999
float Wflx[3] = {-9999, -9999, -9999}
float sum_snowpack_subl = -9999
struct FSM::data::[anonymous] diag
Struct iswr_from_nwp::data
Nested Relationships

This struct is a nested type of Class iswr_from_nwp.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct iswr_from_obs::data
Nested Relationships

This struct is a nested type of Class iswr_from_obs.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Kunkel_monthlyTd_rh::data
Nested Relationships

This struct is a nested type of Class Kunkel_monthlyTd_rh.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct kunkel_rh::data
Nested Relationships

This struct is a nested type of Class kunkel_rh.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Lehning_snowpack::data
Nested Relationships

This struct is a nested type of Class Lehning_snowpack.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

boost::shared_ptr<Snowpack> sp
boost::shared_ptr<SnowStation> Xdata
boost::shared_ptr<SnowpackConfig> Spackconfig
boost::shared_ptr<Meteo> meteo
boost::shared_ptr<Stability> stability
mio::Config config
double cum_precip
double sum_subl
Struct Liston_monthly_llra_ta::data
Nested Relationships

This struct is a nested type of Class Liston_monthly_llra_ta.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Longwave_from_obs::data
Nested Relationships

This struct is a nested type of Class Longwave_from_obs.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct lw_no_lapse::data
Nested Relationships

This struct is a nested type of Class lw_no_lapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct module_shadow_face_info
Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct module_shadow_face_info : public face_info

Public Functions

inline module_shadow_face_info()

Public Members

int shadow
double z_prime
Struct my_fill_topo2_params
Struct Documentation
struct my_fill_topo2_params

Public Members

double a1
double b1
double a2
double b2
double m_tpi
double s_tpi
double hs
double ii
Struct my_fill_topo3_params
Struct Documentation
struct my_fill_topo3_params

Public Members

double m_tpi
double s_tpi
double fac_fill
Struct my_fill_topo_params
Struct Documentation
struct my_fill_topo_params

Public Members

double a1
double b1
double a2
double b2
double m_tpi
double s_tpi
Struct p_from_obs::data
Nested Relationships

This struct is a nested type of Class p_from_obs.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct p_lapse::data
Nested Relationships

This struct is a nested type of Class p_lapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct p_no_lapse::data
Nested Relationships

This struct is a nested type of Class p_no_lapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct rh_from_obs::data
Nested Relationships

This struct is a nested type of Class rh_from_obs.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct rh_no_lapse::data
Nested Relationships

This struct is a nested type of Class rh_no_lapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Richard_albedo::data
Nested Relationships

This struct is a nested type of Class Richard_albedo.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

double albedo
Struct scale_wind_vert::d
Nested Relationships

This struct is a nested type of Class scale_wind_vert.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct d : public face_info

Public Members

double temp_u
interpolation interp
Struct Simple_Canopy::data
Nested Relationships

This struct is a nested type of Class Simple_Canopy.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

double LAI
double CanopyHeight
int canopyType
double rain_load
double Snow_load
double cum_net_snow
double cum_net_rain
double cum_Subl_Cpy
double cum_intcp_evap
double cum_SUnload_H2O
Struct snow_slide::data
Nested Relationships

This struct is a nested type of Class snow_slide.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

double maxDepth
double snowdepthavg_copy
double snowdepthavg_vert_copy
double slope
double swe_copy
double delta_avalanche_snowdepth
double delta_avalanche_mass
Struct solar::data
Nested Relationships

This struct is a nested type of Class solar.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

double lat
double lng
Struct t_no_lapse::data
Nested Relationships

This struct is a nested type of Class t_no_lapse.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct Thornton_p::data
Nested Relationships

This struct is a nested type of Class Thornton_p.

Inheritance Relationships
Base Type
  • public face_info

Struct Documentation
struct data : public face_info

Public Members

interpolation interp
Struct variable_info
Struct Documentation
struct variable_info

Comprehensive info for spatial variable dependencies

Public Functions

variable_info() = delete
inline variable_info(std::string name)
inline variable_info(std::string name, SpatialType st)
inline variable_info(std::string name, SpatialType st, double distance)

Public Members

bool is_distance_set
SpatialType spatial_type
double spatial_distance
std::string name
Struct vertex_data
Inheritance Relationships
Base Type
  • public vertex_info

Struct Documentation
struct vertex_data : public vertex_info

Public Members

Point_3 prj_vertex
Point_3 org_vertex
Class Burridge_iswr
Inheritance Relationships
Base Type
Class Documentation
class Burridge_iswr : public module_base

Computes incoming shortwave direct and diffuse beam radiation using a cloud fraction.

Depends:

  • Cloud fraction “cloud_frac” (-)

  • Solar elevation “solar_el” (degrees)

Provides:

  • Shortwave direct beam without slope correction “iswr_direct_no_slope” \([W \cdot m^{-2}\)]

  • Shortwave diffuse beam without slope correction “iswr_diffuse_no_slope” \([W \cdot m^{-2}\)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration:

  • None

References:

  • Burridge, D. M., and A. J. Gadd, 1974: The Meteorological Office operational 10 level numerical weather prediction model (December 1974). U.K. Met. Office Tech. Notes 12 and 48, 57 pp.

  • Described in Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Public Functions

Burridge_iswr(config_file cfg)
~Burridge_iswr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class const_llra_ta
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class const_llra_ta : public module_base

Constant linear lapse rate adjustment for air temperature of 0.0065 \({}^\circ C \cdot m^{-1}\).

Requires from met:

  • Air temperature - “t” [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Public Functions

const_llra_ta(config_file cfg)
~const_llra_ta()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class crop_rotation
Inheritance Relationships
Base Type
Class Documentation
class crop_rotation : public module_base

Basic crop rotation. Changes between two different landcovers on even/odd years. On even years, it sets the “crop” parameter to the parameter “annual_crop_inventory_1”, and on odd years it sets it to “annual_crop_inventory_2”. Mostly a proof-of-concept.

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • Year even crop “annual_crop_inventory_1”

  • Year odd crop “annual_crop_inventory_2”

Public Functions

crop_rotation(config_file cfg)
~crop_rotation()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class Cullen_monthly_llra_ta
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Cullen_monthly_llra_ta : public module_base

Monthly linear lapse rate adjustment for air temperature using Cullen, et al (2011) for the Rocky Mountains

Requires from met:

  • Air temperature [ \( {}^\circ C \)]

Provides:

  • Lapsed air temperature - “t” [ \( {}^\circ C \)]

Configuration keys:

  • None

Reference:

Cullen, R. M., and S. J. Marshall (2011), Mesoscale temperature patterns in the Rocky Mountains and foothills region of southern Alberta, Atmos. - Ocean, 49(3), 189–205, doi:10.1080/07055900.2011.592130.

Public Functions

Cullen_monthly_llra_ta(config_file cfg)
~Cullen_monthly_llra_ta()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class debias_lw
Inheritance Relationships
Base Type
Class Documentation
class debias_lw : public filter_base

Debias an incoming longwave radiation using an additive constant factor.

Requires:

  • Incoming longwave radiation \([W \cdot m^{-2}\)]

Modifies:

  • Input longwave

Configuration keys:

{
   "variable": "lw",
   "factor": 3.5
}
variable

Name of the variable to modify that coincides with the input met file.

factor

The amount to add to the input longwave by: lw = lw + factor

Type:

string

Type:

double

Units:

\([W \cdot m^{-2}]\)

Public Functions

debias_lw(config_file cfg)
~debias_lw()
virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

Class deform_mesh
Inheritance Relationships
Base Type
Class Documentation
class deform_mesh : public module_base

Example of how to deform the mesh’s z-coords.

Warning

There is currently no way for CHM to be updated that the mesh z has changed to recompute slopes/aspect/etc.

Public Functions

deform_mesh(config_file cfg)
~deform_mesh()
virtual void run(mesh &domain)
Class Dist_tlapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Dist_tlapse : public module_base

Spatially interpolates provided lapse rates from virtual stations

Depends from met:

  • Air temperature - “t” [ \( \circ C ] \)

  • Lapse rate - “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Provides:

  • Air temperature “t” [ \( \circ C ] \)

  • Lapse rate “t_lapse_rate” [ \( \circ C \cdot m^{-1}] \)

Configuration keys:

  • None

Public Functions

Dist_tlapse(config_file cfg)
~Dist_tlapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Dodson_NSA_ta
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Dodson_NSA_ta : public module_base

Implements the neutral stability algorithm for air temperature from Dodson and Marks (1994). The neutral stability algorithm (NSA), uses the hydrostatic and potential temperature equations to convert measured temperatures and elevations to sea-level potential temperatures. The potential temperatures are spatially interpolated and then mapped to the elevation.

Requires from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \)]

Configuration keys:

  • None *

Reference: Dodson, R. and Marks, D.: Daily air temperature interpolated at high spatial resolution over a large mountainous region, Clim. Res., 8(Myers 1994), 1–20, doi:10.3354/cr008001, 1997.

Public Functions

Dodson_NSA_ta(config_file cfg)
~Dodson_NSA_ta()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class fast_shadow
Inheritance Relationships
Base Type
Class Documentation
class fast_shadow : public module_base

Calculates horizon shadows using an adaptation of Dozier and Frew 1990 to an unstructured mesh. Modifies the direct beam iswr ( = 0 W/m^2). Does not impact the diffuse beam

Requires:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Binary no shadow/shadow “shadow” [0 or 1=shadow]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

References:

  • Dozier, J., & Frew, J. (1990). Rapid calculation of terrain parameters for radiation modeling from digital elevation data. IEEE Transactions on Geoscience and Remote, 28(5), 963–969.

  • Marsh, C., Pomeroy, J., Wheater, H. (2020). The Canadian Hydrological Model (CHM) v1.0: a multi-scale, multi-extent, variable-complexity hydrological model – design and overview Geoscientific Model Development 13(1), 225-247. https://dx.doi.org/10.5194/gmd-13-225-2020

Type:

int

Default:

10

Type:

double

Default:

1000 m

Public Functions

fast_shadow(config_file cfg)
~fast_shadow()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Public Members

int steps
double max_distance
double size_of_step
Class fetchr
Inheritance Relationships
Base Type
Class Documentation
class fetchr : public module_base

Calculates upwind fetch distances. The fetch is broken if a triangle at distance d * I > current triangle’s elevation.

Depends:

  • Wind direction “vw_dir” [degrees]

Provides:

  • Fetch distance “fetch” [m]

Configuration:

{
   "steps": 10,
   "max_distance": 1000
}
steps

Number of steps along the search vector to check for a higher point

max_distance

Maximum search distance to look for a higher point

I

Rise/run threshold to multiply against the distance of a test triangle.

References:

  • Lapen, D. R., and L. W. Martz (1993), The measurement of two simple topographic indices of wind sheltering-exposure from raster digital elevation models, Comput. Geosci., 19(6), 769–779, doi:10.1016/0098-3004(93)90049-B.

Type:

int

Default:

10

Type:

double

Default:

1000 m

Type:

double

Default:

0.06

Public Functions

fetchr(config_file cfg)
~fetchr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Public Members

int steps
double max_distance
double h_IBL
double size_of_step
bool incl_veg
double I
Class filter_base
Inheritance Relationships
Derived Types
Class Documentation
class filter_base

Subclassed by debias_lw, filter_template, goodison_undercatch, macdonald_undercatch, scale_wind_speed

Public Functions

inline filter_base(std::string name = "", config_file input_cfg = pt::basic_ptree<std::string, std::string>())
inline virtual ~filter_base()
inline virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

inline virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

inline void provides(const std::string &name)

Denotes a new met variable that this filter provides. Must be used in the ctor of a filter prior to use

Parameters:

name – Name of the new meteorological variable

inline std::vector<std::string> provides()

List of new meterological variables this filter provides

Returns:

inline bool is_nan(double variable)

Determine if the variable value is a Nan. Checks for -9999, NaN, and Inf

Parameters:

variable

Returns:

True if is nan

Public Members

pt::ptree cfg

Configuration file. If filter does not need one, then this will contain nothing

std::string ID

ID of the module

std::vector<std::string> _provides

List of new variables that are provided

Class filter_template
Inheritance Relationships
Base Type
Class Documentation
class filter_template : public filter_base

Public Functions

filter_template(config_file cfg)
~filter_template()
virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

Class filter_template_name
Class Documentation
class filter_template_name

Template header file for new filter implementations.

Depends:

Provides:

Class FSM
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class FSM : public module_base

Flexible Snow Model (FSM) 2.0

“The Flexible Snow Model (FSM2) is a multi-physics energy balance model of snow accumulation and melt,

extending the Factorial Snow Model (Essery, 2015) with additional physics, driving and output options.”

This version of FSM has been customized to have the sophisticated process parametrizations selected in every case, except atmospheric stability corrections.

Depends:

  • Solar elevation “solar_el” [degrees]

  • Incoming longwave radiation “ilwr” \([W \cdot m^{-2}\)]

  • Relative Humidy “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Precipitation snow “p_snow” [ \(mm \cdot dt^{-1}\)]

  • Precipitation rain “p_rain” [ \(mm \cdot dt^{-1}\)]

  • Wind speed 2 m above surface “U_2m_above_srf” [ \( m \cdot s^{-1}\) ]

  • Incoming shortwave radiation, direct beam “iswr_direct” \([W \cdot m^{-2}\)]

  • Incoming shortwave radiation, diffuse beam “iswr_diffuse” \([W \cdot m^{-2}\)]

Provides:

  • Snow Water Equivalent “swe” [mm]

  • Snow depth “snowdepthavg” [m]

  • Snow depth slope corrected “snowdepthavg_vert” [m]

Optional:

Sub-canopy forcing:

  • Subcanopy incoming shortwave radiation “iswr_subcanopy” \([W \cdot m^{-2}\)]

  • Subcanopy relative humidity “rh_subcanopy” [%]

  • Subcanopy air temperatue “ta_subcanopy” [ \( {}^\circ C \)]

  • Subcanopy incoming longwave radidation “ilwr_subcanopy” \([W \cdot m^{-2}\)]

References:

Warning

Snow transport and vegetation characteristics remain a TODO

Public Functions

FSM(config_file cfg)
~FSM()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)
Class goodison_undercatch
Inheritance Relationships
Base Type
Class Documentation
class goodison_undercatch : public filter_base

Undercatch correction for a Nipher shielded guage via Goodison 1998 for solid precipitation

Requires:

  • Precipitation [ \( mm\) ]

  • Windspeed at gauge height [ \(m \cdot s^{-1} \) ]

Modifies:

  • Input precipitation

Configuration keys:

{
   "precip_var": "ppt",
   "wind_var": "u"
}
precip_var

Name of the precipitation variable in the met file.

wind_var

Name of the wind speed variable in the met file.

References:

Type:

string

Type:

string

Public Functions

goodison_undercatch(config_file cfg)
~goodison_undercatch()
virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

Class Gray_inf
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Gray_inf : public module_base

Estimates areal snowmelt infiltration into frozen soils for: a) Restricted - Water entry impeded by surface conditions b) Limited - Capiliary flow dominates and water flow influenced by soil physical properties c) Unlimited - Gravity flow dominates

Depends:

  • Snow water equivalent “swe” [mm]

  • Snow melt for interval “snowmelt_int” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Infiltration “inf” [ \(mm \cdot dt^{-1}\)]

  • Total infiltration “total_inf” [mm]

  • Total infiltration excess “total_excess” [mm]

  • Total runoff “runoff” [mm]

  • Total soil storage “soil_storage”

  • Potential infiltration “potential_inf”

  • Opportunity time for infiltration to occur “opportunity_time”

  • Available storage for water of the soil “available_storage”

References:

  • Gray, D., Toth, B., Zhao, L., Pomeroy, J., Granger, R. (2001). Estimating areal snowmelt infiltration into frozen soils Hydrological Processes 15(16), 3095-3111. https://dx.doi.org/10.1002/hyp.320

Note

Has hardcoded soil parameters that need to be read from the mesh parameters.

Public Functions

Gray_inf(config_file cfg)
~Gray_inf()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
class data : public face_info

Public Members

double storage
double max_storage
double porosity
double soil_depth
double opportunity_time
double last_ts_potential_inf
double total_inf
double total_excess
Class Gray_inf::data
Nested Relationships

This class is a nested type of Class Gray_inf.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class data : public face_info

Public Members

double storage
double max_storage
double porosity
double soil_depth
double opportunity_time
double last_ts_potential_inf
double total_inf
double total_excess
Class Harder_precip_phase
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Harder_precip_phase : public module_base

Calculates precipitation phase via falling hydrometeor energy balance following Harder, et al (2013)

Depends:

  • Air temperature “t” [ \( {}^\circ C\) ]

  • Relative Humidity “rh” [%]

  • Precip “p” [ \(mm \cdot dt^{-1}\) ]

Provides:

  • Snow precip p_snow [ \(mm \cdot dt^{-1}\)]

  • Liquid precip p_rain [ \(mm \cdot dt^{-1}\)]

  • Fraction of rain “frac_precip_rain” [-]

  • Fraction of snow “frac_precip_snow” [-]

  • Cumulated snow precip “acc_snow” [mm]

  • Cumulated liquid precip “acc_rain” [mm]

References:

  • Harder, P., Pomeroy, J. (2013). Estimating precipitation phase using a psychrometric energy balance method Hydrological Processes 27(13), 1901-1914. https://dx.doi.org/10.1002/hyp.9799

Public Functions

Harder_precip_phase(config_file cfg)
~Harder_precip_phase()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

double b
double c
class data : public face_info

Public Members

double hours_since_snowfall
double acc_rain
double acc_snow
Class Harder_precip_phase::data
Nested Relationships

This class is a nested type of Class Harder_precip_phase.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class data : public face_info

Public Members

double hours_since_snowfall
double acc_rain
double acc_snow
Class Iqbal_iswr
Inheritance Relationships
Base Type
Class Documentation
class Iqbal_iswr : public module_base

Estimates incoming shortwave direct and diffuse beams without slope correction.

Depends:

  • Air temperature “t” [ \({}^\circ C \)]

  • Relative humidity “rh” [%]

  • Cloud fraction “cloud_frac” [-]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Incoming solar shortwave radiation, direct beam, no slope adjustment “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Incoming solar shortwave radiation, diffuse beam, no slope adjustment “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

References:

Public Functions

Iqbal_iswr(config_file cfg)
~Iqbal_iswr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class iswr
Inheritance Relationships
Base Type
Class Documentation
class iswr : public module_base

This aggregates the _no_slope direct and diffuse flat plane estimates provided by other modules and calculates a unified variant that includes (if required) slope effects and applies shadow masks from shadowing modules.

Depends:

  • Shortwave direct on a flat plane “iswr_direct_no_slope” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse on a flat plane “iswr_diffuse_no_slope” [ \( W \cdot m^{-2}\)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^{-2}\)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^{-2}\)]

Configuration:

{
   "no_slope": false,
   "already_cosine_corrected": false
}
no_slope

Disables slope correction.

already_cosine_corrected
”Most observations implicitly have a cosine-correction built in by virtu of the flat-plane observation.

When using observed, ground based observations, you probably want to set this to true, so that a cosine correction is not applied twice.

If the forcing input is out of a NWP, then this should be false.

Warning

If using ground-based observations, please look at the already_cosine_corrected configuration option!

Type:

boolean

Default:

false

Type:

boolean

Default:

false

Public Functions

iswr(config_file cfg)
~iswr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Public Members

bool assume_no_slope
bool already_cosine_corrected
Class iswr_from_nwp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class iswr_from_nwp : public module_base

Spatially interpolates total and diffuse shortwave radiation. Computes direct beam as a residual. Best used from NWP system.

Requires from met:

  • Total shortwave radiation met file - “Qsi” [ \( W \cdot m^2 \)]

  • Total diffuse shortwave radiation met file - “Qsi_diff” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam - “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct - “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse - “iswr_diffuse” [ \( W \cdot m^2 \)]

Configuration keys:

  • None

Public Functions

iswr_from_nwp(config_file cfg)
~iswr_from_nwp()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class iswr_from_obs
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class iswr_from_obs : public module_base

Spatially interpolates observed shortwave measurements and estimates direct and diffuse beam components using Nijssen and Lettenmaier (1999).

Depends from met:

  • Shortwave radiation - “Qsi” [ \( W \cdot m^2 \)]

Provides:

  • Shortwave all beam “iswr” [ \( W \cdot m^2 \)]

  • Shortwave direct “iswr_direct” [ \( W \cdot m^2 \)]

  • Shortwave diffuse “iswr_diffuse” [ \( W \cdot m^2 \)]

  • Atmospheric transmittance, [0,1] “atm_trans” [-]

Configuration keys:

  • None

References: Nijssen, B., Lettenmaier, D. (1999). A simplified approach for predicting shortwave radiation transfer through boreal forest canopies Journal of Geophysical Research 104(D22), 27859. https://dx.doi.org/10.1029/1999jd900377

Public Functions

iswr_from_obs(config_file cfg)
~iswr_from_obs()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Kunkel_monthlyTd_rh
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Kunkel_monthlyTd_rh : public module_base

Monthly-variable linear lapse rate adjustment for relative humidity based upon Kunkel (1989). RH is lapsed via dew point temperatures.

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Depends from Met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative humidity “rh” [ \( % \)]

Configuration keys:

  • None

Reference: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Public Functions

Kunkel_monthlyTd_rh(config_file cfg)
~Kunkel_monthlyTd_rh()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class kunkel_rh
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class kunkel_rh : public module_base

Directly lapses RH values with elevation. Based on equation 15 in Kunkel (1989).

Depends from met:

  • Relative Humidity “rh” [ \( % \)]

Provides:

  • Relative Humidity “rh” [ \( % \)]

Configuration keys:

  • None

References: Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Public Functions

kunkel_rh(config_file cfg)
~kunkel_rh()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Lehning_snowpack
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Lehning_snowpack : public module_base

SNOWPACK (Bartelt and Lehning, 2002) is a multilayer finite-element energy balance snow model originally developed for avalanche hazard forecasting. It has the greatest computational burden of all snowpack models in CHM. This version of SNOWPACK has been modified to allow unlimited removal of snow layers by the blowing snow and avalanche routines.

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation rain fraction “frac_precip_rain” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Snow water equivalent “swe” [mm]

  • Bulk snow temperature “T_s” [ \( {}^\circ C \)]

  • Surface exchange layer temperature “T_s_0”

  • Number of discretization nodes “n_nodes”

  • Number of discretization layers “n_elem”

  • Snowdepth “snowdepthavg” [m]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Reflected shortwave radiation “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Snowpack runoff “runoff” [mm]

  • Snow mass removed “mass_snowpack_removed” [mm]

  • Total snowpack runoff “sum_runoff”

  • Total surface sublimation loss “sum_subl”

  • Sublimation loss “sublimation”

  • Evaporation loss “evap”

  • ”MS_SWE”

  • ”MS_WATER”

  • ”MS_TOTALMASS”

  • ”MS_SOIL_RUNOFF”

Configuration:

{
   "sno":
   {
      "SoilAlbedo": 0.09,
      "BareSoil_z0": 0.2,
      "WindScalingFactor": 1,
      "TimeCountDeltaHS": 0.0 *
   }

Note

Currently SNOWPACK is setup to be run an external albedo model and should be changed to default back to the SNOWPACK one.

Public Functions

Lehning_snowpack(config_file cfg)
~Lehning_snowpack()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)

Public Members

double sn_dt
double const_T_g
struct data : public face_info

Public Members

boost::shared_ptr<Snowpack> sp
boost::shared_ptr<SnowStation> Xdata
boost::shared_ptr<SnowpackConfig> Spackconfig
boost::shared_ptr<Meteo> meteo
boost::shared_ptr<Stability> stability
mio::Config config
double cum_precip
double sum_subl
Class Liston_monthly_llra_ta
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Liston_monthly_llra_ta : public module_base

Constant monthly linear lapse rate adjustment for air temperature. Uses Liston and Elder (2006).

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \) ]

Provides:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Lapse rate “t_lapse_rate” [ \( {}^\circ C \cdot m^{-1} \) ]

Reference: Liston, Glen E., and Kelly Elder. 2006. A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of hydrometeorology 7: 217-234

Public Functions

Liston_monthly_llra_ta(config_file cfg)
~Liston_monthly_llra_ta()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Liston_wind
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Liston_wind : public module_base

Calculates windspeeds using a terrain curvature following Liston and Elder 2006. Direction convention is (North = 0, clockwise from North)

Depends from met:

  • Wind at reference height “U_R” [ \(m \cdot s^{-1}\)]

  • Direction at reference height ‘vw_dir’ [degrees] (North = 0, clockwise from North)

Provides:

  • Wind at reference height “U_R”

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Wind direction “vw_dir” [degrees]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Configuration:

{
   "distance": 300,
   "Ww_coeff: 1,
   "ys": 0.5,
   "yc": 0.5
}
distance

Distance to “look” to compute the terrain curvature.

Ww_coeff

Leading coefficient in equation 16. Used for compatibility with calibration approach such as done by Pohl.

ys

Slope weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

yc

Curvature weight. Valid range [0,1]. The value of 0.5 gives equal weight to slope and curvature

References:

Liston, G. E., & Elder, K. (2006). A meteorological distribution system for high-resolution terrestrial modeling (MicroMet). Journal of Hydrometeorology, 7(2), 217–234. http://doi.org/10.1175/JHM486.1

Type:

double

Default:

300

Type:

int

Default:

1

Type:

double

Default:

0.5

Type:

double

Default:

0.5

Public Functions

Liston_wind(config_file cfg)
~Liston_wind()
virtual void run(mesh &domain)
virtual void init(mesh &domain)

Public Members

double ys
double yc
double distance
double Ww_coeff
class lwinddata : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
Class Liston_wind::lwinddata
Nested Relationships

This class is a nested type of Class Liston_wind.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class lwinddata : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
Class Longwave_from_obs
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Longwave_from_obs : public module_base

Annually constant longwave lapse rate adjustment to longwave from observations. Lapse rate of 2.8 W/m^2 / 100 meters

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Configuration keys:

  • None

Reference: Marty, C., Philipona, R., Fröhlich, C., Ohmura, A. (2002). Altitude dependence of surface radiation fluxes and cloud forcing in the alps: results from the alpine surface radiation budget network Theoretical and Applied Climatology 72(3), 137-155. https://dx.doi.org/10.1007/s007040200019

Public Functions

Longwave_from_obs(config_file cfg)
~Longwave_from_obs()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class lw_no_lapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class lw_no_lapse : public module_base

Spatially interpolates incoming longwave with no adjustment for elevation.

Depends from met:

  • Incoming longwave radiation “Qli” \([W \cdot m^{-2}\)]

Provides:

  • Incoming longwave “ilwr” \([W \cdot m^{-2}\)]

Depends:

  • None

Configuration keys:

  • None

Public Functions

lw_no_lapse(config_file cfg)
~lw_no_lapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class macdonald_undercatch
Inheritance Relationships
Base Type
Class Documentation
class macdonald_undercatch : public filter_base

Undercatch correction for a Alter shielded Geonor and tipping bucket via Macdonald, et al. 2007

Requires:

  • Precipitation [ \( mm\) ]

  • Windspeed at gauge height [ \(m \cdot s^{-1} \) ]

Modifies:

  • Input precipitation

Configuration keys:

{
   "precip_var": "ppt",
   "wind_var": "u"
}
precip_var

Name of the precipitation variable in the met file.

wind_var

Name of the wind speed variable in the met file.

References:

  • Macdonald, J., & Pomeroy, J. (2007). Gauge Undercatch of Two Common Snowfall Gauges in a Prairie Environment. Proceedings of the 64th Eastern Snow Conference, St. John‘s, Canada., 119–126.

Type:

string

Type:

string

Public Functions

macdonald_undercatch(config_file cfg)
~macdonald_undercatch()
virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

Class Marsh_shading_iswr
Inheritance Relationships
Base Type
Class Documentation
class Marsh_shading_iswr : public module_base

Computes the horizon-shadows using the parallel point plane projection from Marsh, et al (2011). The :ref:fast_shadow routine provides almost as good of a result with less computational overhead.

Depends:

  • Solar azimuth “solar_az” [degrees]

  • Solar elevation “solar_el” [degrees]

Provides:

  • Value that provides a metric for triangle ‘nearness’ to the sun “z_prime” [-]

  • Binary shadow value “shadowed” [1 (true) / 0 (false)]

Configuration:

{
   "x_AABB":10,
   "y_AABB":10
}


The domain is split into an x/y grid in projection space.
Triangles are only compared to triangles in their bin to compute shadows. Thus, the smaller the value the
more chance of missing a triangle intersection. It also decreases the number of comparisons and can dramatically
decrease the computational time.
x_AABB

This is the size number of bins in the x direction.

y_AABB

This is the size number of bins in the y direction.

Reference:
  • Marsh, C.B., J.W. Pomeroy, and R.J. Spiteri. “Implications of Mountain Shading on Calculating Energy for Snowmelt Using Unstructured Triangular Meshes.” Hydrological Processes 26, no. 12 (June 15, 2012): 1767–78. doi:10.1002/hyp.9329.

Type:

int

Default:

10

Type:

int

Default:

10

Public Functions

Marsh_shading_iswr(config_file cfg)
~Marsh_shading_iswr()
virtual void run(mesh &domain)

Public Members

int x_AABB
int y_AABB
Class module_base
Inheritance Relationships
Derived Types
Class Documentation
class module_base

Base class for individual modules.

A module must inherent from this class. This provides the interface for all module.

Subclassed by Burridge_iswr, Cullen_monthly_llra_ta, Dist_tlapse, Dodson_NSA_ta, FSM, Gray_inf, Harder_precip_phase, Iqbal_iswr, Kunkel_monthlyTd_rh, Lehning_snowpack, Liston_monthly_llra_ta, Liston_wind, Longwave_from_obs, MS_wind, Marsh_shading_iswr, PBSM3D, PenmanMonteith_evaporation, Richard_albedo, Sicart_ilwr, Simple_Canopy, Thornton_p, Walcek_cloud, WindNinja, Winstral_parameters, const_llra_ta, crop_rotation, deform_mesh, fast_shadow, fetchr, iswr, iswr_from_nwp, iswr_from_obs, kunkel_rh, lw_no_lapse, module_template, mpi, p_from_obs, p_lapse, p_no_lapse, point_mode, rh_from_obs, rh_no_lapse, scale_wind_vert, slope_iswr, snobal, snow_slide, solar, sub_grid, t_no_lapse, threshold_p_phase, uniform_wind

Public Types

enum class parallel

A module must declare itself as either parallel data, where the module only operates upon a single mesh element, or parallel domain, where the module operates upon the domain in its entirety. The default is data parallel

Values:

enumerator data

Sets that this module is element parallel. That is, this module can compute the solution at this element without needing to communicate with surrounding elements. There is no guarantee on element ordering

enumerator domain

Sets that this module is domain parallel. That is, this module requires surrounding elements to compute its answer and that it is dependent upon the order of traversal of elements.

Public Functions

inline module_base()

Default constructor

inline module_base(std::string name = "", parallel type = parallel::data, config_file input_cfg = pt::basic_ptree<std::string, std::string>())

Consturctor that initializes everything

inline virtual ~module_base()

Default destructor

inline virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

inline virtual void load_checkpoint(mesh &domain, netcdf &chkpt)
inline virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

inline virtual void run(mesh &domain)
inline virtual void init(mesh &domain)
inline parallel parallel_type()
inline boost::shared_ptr<std::vector<variable_info>> provides()

List of the variables that this module provides.

inline boost::shared_ptr<std::vector<std::string>> provides_vector()

List of the vetors that this module provides.

inline boost::shared_ptr<std::vector<std::string>> provides_parameter()

List of the parameters that this module provides.

inline void provides_vector(const std::string &name)

  • default behaviour is to make it of type NEIGHBOR Set a vector variable that this module provides. ** Currently not used to resolve dependencies ** This is a list of variables that are stored as x,y,z vectors, such as wind velocities Vector_3 so magnitude needs to be stored in a normal _provides variable

Parameters:

name

inline void provides(const std::string &name)

Set a variable that this module provides

  • default behaviour is to make it of type NEIGHBOR

inline void provides(const std::string &name, SpatialType st)

Set a variable that this module provides

inline void provides(const std::string &name, SpatialType st, double distance)

Set a variable that this module provides

inline void provides_parameter(const std::string &variable)

Set a parameter that this module provides

inline boost::shared_ptr<std::vector<variable_info>> depends()

List of the variables from other modules that this module depends upon

inline void conflicts(const std::string &variable)

Modules we conflict with and absolutely cannot run alongside. Use sparingly.

inline boost::shared_ptr<std::vector<std::string>> conflicts()
inline boost::shared_ptr<std::vector<std::string>> optionals()

List of the optional depends variables from other modules that this module depends upon

inline void depends(const std::string &name)

Set a variable, from another module, that this module depends upon

inline void depends(const std::string &name, SpatialType st)
inline void depends(const std::string &name, SpatialType st, double distance)
inline boost::shared_ptr<std::vector<std::string>> depends_from_met()

List of the variables from the met files that this module depends upon

inline void depends_from_met(const std::string &variable)

Set a variable, from a met file, that this module depends upon

inline void optional(const std::string &variable)

Set an optional (not required) variable, from another module, that this module depends upon.

inline bool has_optional(const std::string &variable)

Checks if an optional variable was found

inline std::vector<std::string> get_variable_names_from_collection(std::vector<variable_info> collection)
inline void set_all_nan_on_skip(mesh_elem &face)

If you want to skip evaluating this current face, call this to set all provides outputs to nan E.g., called if the is_water, is_glacier, etc is true

inline void set_optional_found(const std::string &variable)

Set that an optional variable was found

inline bool is_nan(const double &variable)
inline bool is_water(mesh_elem &face)
inline bool is_glacier(mesh_elem &face)

Public Members

std::string ID

ID of the module

pt::ptree cfg

Configuration file. If module does not need one, then this will contain nothing

int IDnum

Upon instantiation the module is assigned a value based upon its initialization order. Primarily used to dependency resolution. No real usage otherwise.

boost::shared_ptr<global> global_param

Global parameter store

Protected Attributes

parallel _parallel_type
boost::shared_ptr<std::vector<variable_info>> _provides
boost::shared_ptr<std::vector<std::string>> _provides_parameters
boost::shared_ptr<std::vector<variable_info>> _depends
boost::shared_ptr<std::vector<std::string>> _depends_from_met
boost::shared_ptr<std::vector<std::string>> _optional
boost::shared_ptr<std::vector<std::string>> _conflicts
boost::shared_ptr<std::vector<std::string>> _vectors
std::map<std::string, bool> _optional_found
Class module_template
Inheritance Relationships
Base Type
Class Documentation
class module_template : public module_base

Template header file for new module implementations.

Depends:

Provides:

Public Functions

module_template(config_file cfg)
~module_template()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class mpi
Inheritance Relationships
Base Type
Class Documentation
class mpi : public module_base

MPI usage example

Depends:

  • None

Provides:

  • None

Configuration:

  • None

Parameters:

  • None

Class MS_wind
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class MS_wind : public module_base

Calculates windspeeds using the Mason Sykes wind speed from Essery, et al (1999), using 8 lookup map from DBSM. Optionally uses Ryan, et al. for wind direction correction.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Speedup magnitude “W_speedup” [-]

  • Zonal u speed component at 2m “2m_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal v speed component at 2m “2m_zonal_v” [ \( m \cdot s^{-1}\) ]

  • Original interpolated wind direction “vw_dir_orig” [degrees]

Parameters:

Requires speedup, u, and v parameters named “MS%i_U” and “MS%i_V” and “MS%i” for each of the 8 directions. These need to be generated using DBSM in tools/MSwind.

Configuration:

{
   "speedup_height": 2.0,
   "use_ryan_dir", false
}
speedup_height

The height at which the MS Wind tool was run for. The default is 2 m and shouldn’t be changed.

use_ryan_dir

Instead of using the _u and _v components to compute direction perturbation, use the algorithm of Ryan as per Liston and Elder (2006)

Reference:

Essery, R., Li, L., Pomeroy, J. (1999). A distributed model of blowing snow over complex terrain Hydrological Processes 13(), 2423-2438.

Type:

double

Default:

2.0

Type:

boolean

Default:

false

Public Functions

MS_wind(config_file cfg)
~MS_wind()
virtual void run(mesh &domain)
virtual void init(mesh &domain)

Public Members

double ys
double yc
double distance
bool use_ryan_dir
double speedup_height
class data : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
Class MS_wind::data
Nested Relationships

This class is a nested type of Class MS_wind.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class data : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
Class p_from_obs
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class p_from_obs : public module_base

Spatially distributes liquid water precipitation by calculating lapse rates based on observed data on a per-timestep basis

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

  • None

Public Functions

p_from_obs(config_file cfg)
~p_from_obs()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class p_lapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class p_lapse : public module_base

Spatially distributes liquid water precipitation using a precipitation lapse rate derived from stations for the Marmot Creek reserach basin or the Upper Bow River Wathershed. Monthly lapse rates are used as in the CRHM model.

Depends from met:

  • Precip from met file “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Lapse precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

Precipitation lapse rate derived from Marmot Creek stations by Logan Fang (used in CRHM for Marmot Creek domain)

Type:

boolean

Default:

false

Public Functions

p_lapse(config_file cfg)
~p_lapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)

Public Members

bool apply_cosine_correction
struct data : public face_info

Public Members

interpolation interp
Class p_no_lapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class p_no_lapse : public module_base

Spatially distributes liquid water precipitation with no lapsing

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

Type:

boolean

Default:

false

Public Functions

p_no_lapse(config_file cfg)
~p_no_lapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)

Public Members

bool apply_cosine_correction
struct data : public face_info

Public Members

interpolation interp
Class PBSM3D
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class PBSM3D : public module_base

A 3D scalar-transport blowing snow model that is spatially discretized using the finite volume method. The methods are detailed in Marsh, et al (2020) but are ultimately based upon the work of Pomeroy, et al from the late 1980s and early 1990s. Due to the use of the FVM, neither simplifying assumptions about wind direction nor domain rotations into the wind direction are needed. This allows use where the wind flow is divergent and over large extents. Erosion and deposition are computed as the spatial and temporal divergence of the suspension and saltation fluxes, that is, their rate of change over space and over model time steps.

The nonsteady effects of upwind fetch are represented by a downwind increase with fetch to a fully developed saturation level in the saltation concentrations. This is used to calculate suspended concentrations and the increasing height of the suspended snow layer with fetch. The steady‐state saltation flux parameterizations (Pomeroy & Gray, 1990) are used to calculate the saltation layer mass concentration based on an observed relationship between saltation trajectory height and shear stress.

Precipitation is not currently blown simultaneously

This should be used with a wind parameterziation such as the WindNinja module.

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind direction @2m “vw_dir” [degrees]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Provides:

  • Blowing snow probability. Only active if use_PomLi_probability:true “blowingsnow_probability” [0-1]

  • Sublimation flux “Qsubl” [ \( kg \cdot (m^2 \cdot s)^{-1} \) ]

  • Sublimation mass “Qsubl_mass” [ \( kg \cdot m^{-2} \) ]

  • Total sublimation “sum_subl”

  • Mass eroded or deposited during blowing snow. Positive for mass deposition, negative for mass removal. [ \( kg \cdot m^{-2} \) ]

  • Down wind suspension flux “Qsusp” [ \( kg \cdot (m \cdot s)^{-1} \) ]

  • Saltation flux “Qsalt” [ \( kg \cdot (m \cdot s)^{-1} \)]

  • Cumulative mass erorded or desposited during model run “sum_drift” [ \( kg \cdot m^{-2} \) ]

  • Upwind fetch if exp_fetch or tanh_fetch are used “fetch” [m]

  • Hours since last snowfall if only use_PomLi_probability is used “p_snow_hours” [hr]

Parameters:

  • If enable_veg=True, then the vegetation height “CanopyHeight” [m]

  • If use_R94_lambda=True then leaf area index “LAI” [-]

Configuration:

{
   "use_exp_fetch": false,
   "use_tanh_fetch": true,
   "use_PomLi_probability": false,
   "z0_ustar_coupling": false,
   "use_R94_lambda": true,
   "N":1,
   "dv":0.8,
   "debug_output": false,
   "nLayer": 10,
   "do_fixed_settling": false,
   "settling_velocity":0.5,
   "do_sublimation": true,
   "do_lateral_diff": true,
   "smooth_coeff":820,
   "min_sd_trans": 0.1,
   "cutoff": 0.3,
   "snow_diffusion_const":0.3,
   "rouault_diffusion_coef": false,
   "enable_veg": true,
   "iterative_subl": false,

}
use_exp_fetch

Use the exp fetch proposed by Liston Liston, G., & Sturm, M. (1998). A snow-transport model for complex terrain. Journal of Glaciology

use_tanh_fetch

Use the tanh formulation of Pomeroy & Male (1986). Has more physical basis than use_exp_fetch.

use_PomLi_probability

Considers temporal non-steady effects on blowing snow occurence via the upscaled Pomeroy and Li (2000) parameterization. Requires hours since last snowfall “p_snow_hours” [hr]. This has not been extensively tested for applicability to triangles and should be used with caution.

z0_ustar_coupling

To test if blowing snow occurs, a friction velocity is compared to a threshold. This friction velcoity needs a z0 estimated to be computed. If there is blowing snow, the z0 value is larger than under non-blowing snow conditions. Therefore an execution order problem occurs: should the blowing snow z0 and impact on u* be used to test for blowing snow? Setting this to true uses the blowing snow z0. Testing suggests this can overestiamte blowing snow occurence.

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

Experimental sub-grid topographic impacts v2. Do not use.

use_R94_lambda

Estimate vegetation characteristics from LAI observation. This has been tested less extensively than the N, dv options below. Raupach (1994) (DOI:10.1007/BF00709229)

N

If use_R94_lambda:false then use the vegetation number dnesity (number/m^2)

dv

If use_R94_lambda:false then use the vegetation stalk diameter (m)

debug_output

Write extra run-time diangostics such as per-layer suspension concentration to the output file. Adds significant computtional overhead.

nLayer

Number of vertical discretization layers. 10-15 have been found to generally work well

do_fixed_settling

If true, instead of computing a settling velocity a fixed value given by settling_velocity is used.

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

Add a very small amount of lateral diffusion for numerical robustness. Should be left alone.

smooth_coeff

Multidimensional transport equations may have spurious oscillations in the solution (Kuzmin, 2010). This term is a Laplacian smoothing (Kuzmin, 2010) term, without which oscillations between erosion and deposition may appear. This should be set to be the largest distance over which oscillations are allowed. It should be a few times the average triangle length scale (\(\alpha\)):

\[\frac{\alpha^2}{\pi^2}.\]
min_sd_trans

Minimum snowdepth below which blowing snow saltation is not computed for this triangle. A basic form of sub-grid variability.

cutoff

If (vegetation heigh - snow depth) <= cutoff, blowing snow (saltation) is inhibilited for this triangle. Used to allow some in-shrub blowing snow to occur.

snow_diffusion_const

Scales the eddy diffusivity. There is some physical basis for it, but this parameter has quite a bit of variability in the literature 0.3 to 1. In PBSM3D better results have been found for values ~0.3 such that these results closely match QSusp estimates from Pomeroy, et al. This accounts for lower than reported in the literature values for the settling velocity. Thus, this parameter, for larger triangles (versus point models) accounts for spatial variability in fall velocities and turbulent diffusion. The larger triangles require setting this lower than what is generally reported for a point-scale model.

rouault_diffusion_coef

This over rides the snow_diffusion_const by using the Rouault diffusion coefficient estimation (e.g., used by Déry, et al (1999)). This approach tends to produce a diffusion coefficient that is a bit too high.

Rouault, M., Mestayer, P., Schiestel, R. (1991). A model of evaporating spray droplet dispersion Journal of Geophysical Research: Oceans 96(C4), 7181-7200. https://dx.doi.org/10.1029/90jc02569

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

Use the Pomeroy and Li (2000) iterative solution for Schimdt’s sublimation equation. This code path has not had extensive testing and should not be used at the moment.

References:

  • Marsh, C., Pomeroy, J., Spiteri, R., Wheater, H. (2020). A Finite Volume Blowing Snow Model for Use With Variable Resolution Meshes Water Resources Research 56(2)https://dx.doi.org/10.1029/2019wr025307

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Public Functions

PBSM3D(config_file cfg)
~PBSM3D()
virtual void run(mesh &domain)
virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

double nLayer
double susp_depth
double v_edge_height
double snow_diffusion_const
double l__max
bool rouault_diffusion_coeff
bool do_fixed_settling
double settling_velocity
double n_non_edge_tri
double eps
bool do_sublimation
bool do_lateral_diff
bool enable_veg
bool use_PomLi_probability
bool use_exp_fetch
bool use_tanh_fetch
bool use_subgrid_topo
bool use_subgrid_topo_V2
bool iterative_subl
bool use_R94_lambda
double nnz
double nnz_drift
bool debug_output
double cutoff
double min_sd_trans
bool z0_ustar_coupling
class data : public face_info

Public Members

arma::vec m[5]
double A[5]
bool face_neigh[3]
std::vector<double> u_z_susp
size_t cell_local_id
double CanopyHeight
double LAI
double N
double dv
double hs
bool is_edge
bool saltation
double z0
double sum_drift
double sum_subl
std::vector<double> csubl
gsl_function F_fill
gsl_function F_fill2
gsl_function F_fill3
Class PBSM3D::data
Nested Relationships

This class is a nested type of Class PBSM3D.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class data : public face_info

Public Members

arma::vec m[5]
double A[5]
bool face_neigh[3]
std::vector<double> u_z_susp
size_t cell_local_id
double CanopyHeight
double LAI
double N
double dv
double hs
bool is_edge
bool saltation
double z0
double sum_drift
double sum_subl
std::vector<double> csubl
gsl_function F_fill
gsl_function F_fill2
gsl_function F_fill3
Class PenmanMonteith_evaporation
Inheritance Relationships
Base Type
Class Documentation
class PenmanMonteith_evaporation : public module_base

Calculates evapo-transpiration via Penman-Monteith.

Not currently maintained.

Depends:

  • Incoming shortwave radaition “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Provides:

  • Evapotranspiration “ET” [ \( mm \cdot dt^{-1} \) ]

Public Functions

PenmanMonteith_evaporation(config_file cfg)
~PenmanMonteith_evaporation()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class point_mode
Inheritance Relationships
Base Type
Class Documentation
class point_mode : public module_base

Use this module to enable using CHM in point mode. This module does not to any spatial interpolation. Instead, it passes input met through to the per-triangle variables storages. This is suitable for using CHM like a point scale model, such as at a research site. Specifically this sets depends_from_met(...) inputs such that depends(...) in other modules can work.

Depends from met::

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed “u” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “Qli” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “Qsi” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Provides:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

  • Precipitation “p” [mm]

  • Incoming longwave radiation “ilwr” [ \( W \cdot m^{-2}\)]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2}\)]

  • Incomging shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2}\)]

  • Wind direction @2m “vw_dir” [degrees]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

Configuration:

 "provide":{
    "t": true,
    "rh": true,
    "U_R": true,
    "U_2m_above_srf": true,
    "p": true,
    "ilwr": true,
    "iswr": true,
    "vw_dir": true,
    "iswr_diffuse": false,
    "iswr_direct": false,
    "T_g": false,

    "override":
    {
       "svf":0.8
    }

}
override.svf

Allows for setting the sky view factor at the point to be different than what was calculated from the mesh.

Note

The configuration allows for fine-tuning what is passed through. So although Depends from met below lists all of the possible depends, whatever is set in the configuration will be what is required at runtime.

Public Functions

point_mode(config_file cfg)
~point_mode()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Public Members

bool t
bool rh
bool U_R
bool p
bool ilwr
bool iswr
bool vw_dir
bool iswr_diffuse
bool iswr_direct
bool U_2m_above_srf
bool T_g
Class rh_from_obs
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class rh_from_obs : public module_base

Creates an elevation-vapour pressure lapse rate from observed RH values. Depends on the stations to compute the vapour pressure, but it uses an already lapsed temperature from another module to recompute the RH at a triangle.

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

Depends:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Relative humidity “rh” [%]

Configuration keys:

  • None *

Public Functions

rh_from_obs(config_file cfg)
~rh_from_obs()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class rh_no_lapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class rh_no_lapse : public module_base

Spatially interpolates relative humidity without any lapse adjustments. Bounds RH on [10%, 100%].

Depends from met:

  • Relative Humidity “rh” [%]

Provides:

  • Relative Humidity “rh” [%]

Configuration keys:

  • None

Public Functions

rh_no_lapse(config_file cfg)
~rh_no_lapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Richard_albedo
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Richard_albedo : public module_base

Slow albedo changes for cold snow are neglected, but an exponential decay to an asymptotic minimum of 0.5 with an adjustable time constant applied to melting snow.

Somewhat mis-named as although this is detailed in Essery and Etchevers (2004), the original source is from CLASS detailed in Verseghy, et al (1991).

Depends:

  • Snow Water Equivalent “swe” [mm]

  • Snow surface temperature “T_s_0” [ \( K \) ]

  • Precipitation, snow phase “p_snow” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Snow albedo “snow_albedo” [0-1]

  • True if a melting snow albedo is being used “melting_albedo” [0 or 1]

Configuration:

{
   "albedo_min": 0.5,
   "albedo_max": 0.84,
   "a1": 1.08e7,
   "a2": 7.2e5,
   "min_swe_refresh": 1.0,
   "init_albedo_snow": 0.85,
   "init_albedo_bare": 0.17
}
albedo_min

Minimum snow albedo

albedo_max

Maximum snow albedo

a1

Cold snow decay constant

a2

Melting snow decay constant

init_albedo_snow

Initial fresh snow albedo

init_albedo_bare

Bare ground albedo

References:

  • Equation 4 and 5

  • Essery, R., and P. Etchevers (2004), Parameter sensitivity in simulations of snowmelt, J. Geophys. Res., 109(D20111), 1–15, doi:10.1029/2004JD005036.

  • Verseghy, D. L.: Class – A Canadian land surface scheme for GCMS, I. Soil model, Int. J. Climatol., 11, 111–133, https://doi.org/10.1002/joc.3370110202, 1991

Type:

double

Default:

0.5

Type:

double

Default:

0.84

Type:

double

Default:

1.08e7 s

Type:

double

Default:

7.2e5 s

Type:

double

Default:

0.85

Type:

double

Default:

0.17

Public Functions

Richard_albedo(config_file cfg)
~Richard_albedo()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

double amin
double amax
double a1
double a2
double albedo_snow
double albedo_bare
double min_swe_refresh
struct data : public face_info

Public Members

double albedo
Class scale_wind_speed
Inheritance Relationships
Base Type
Class Documentation
class scale_wind_speed : public filter_base

Scales a wind speed from a given height to the standard reference height in CHM, 50 m Uses a snow roughness z0, but assumes no snow depth (can be corrected for later).

Requires:

  • Windspeed [ \(m \cdot s^{-1} \) ]

Modifies:

  • None

Provides:

  • Reference windspeed at reference height - “U_R” [ \(m \cdot s^{-1} \) ]

Configuration keys:

{
    "variable":"u",
    "Z_F":10
}
variable

Name of the wind variable in the met file

Z_F

Wind observation height

Type:

string

Type:

double

Units:

[\(m\)]

Public Functions

scale_wind_speed(config_file cfg)
~scale_wind_speed()
virtual void init()

Initializes the filter. Useful for obtaining configuration params and storing them locally

virtual void process(std::shared_ptr<station> &station)

Apply the filter for one timestep for the given station

Parameters:

station – Station to operate on

Class scale_wind_vert
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class scale_wind_vert : public module_base

Scales wind speed from reference height to defined heights. Scales the wind vertically using a neutral stability log relationship. If snow depth is present, the height is taken into account. A fixed z0 of 0.01m is currently used. If a canopy is present then an exp sub-canopy scaling is used.

Depends:

  • Wind speed @reference height “U_R” [ \( m \cdot s^{-1} \) ]

Optional:

  • Snow depth to take into account for the scaling “snowdepthavg” [m]

Provides:

  • Wind speed @2m “U_2m_above_srf” [ \( m \cdot s^{-1} \) ]

Parameters:

  • If ignore_canopy=False, then Leaf Area Index “LAI” [-]

Configuration:

{
   "ignore_canopy": false
}
ignore_canopy

Ignores the vegetation canopy

Default:

false

Public Functions

scale_wind_vert(config_file cfg)
~scale_wind_vert()
virtual void init(mesh &domain)
virtual void run(mesh &domain)

domain parallel allows for blending through vegetation to avoid sharp gradietns that can complicate blowing snow, &c.

virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

void point_scale(mesh_elem &face)

Public Members

bool ignore_canopy
struct d : public face_info

Public Members

double temp_u
interpolation interp
Class Sicart_ilwr
Inheritance Relationships
Base Type
Class Documentation
class Sicart_ilwr : public module_base

Calculates longwave radiation from the atmosphere (including skyview correction) for clear and cloudy days following Sicart, et al (2006)

Depends:

  • Air temp “t” [ \( {}^\circ C \)]

  • Relative humidity “rh” [%]

  • Incoming shortwave radiation “iswr” [ \( W \cdot m^{-2}\)]

  • Atmospheric transmittance “atm_trans” [-]

  • Cloud fraction “cloud_frac” [-]

Provides:

  • Incoming longwave “ilwr” [W/m^2]

Parameters:

  • Optionally Sky View Factor “svf” [-]

References:

  • Sicart, J., Pomeroy, J., Essery, R., Bewley, D. (2006). Incoming longwave radiation to melting snow: observations, sensitivity and estimation in Northern environments Hydrological Processes 20(17), 3697-3708. https://dx.doi.org/10.1002/hyp.6383

Public Functions

Sicart_ilwr(config_file cfg)
~Sicart_ilwr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
Class Simple_Canopy
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Simple_Canopy : public module_base

Public Functions

Simple_Canopy(config_file cfg)
~Simple_Canopy()
virtual void run(mesh_elem &elem)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
double delta(double ta)
double lambda(double ta)
double gamma(double air_pressure, double ta)
double Qs(double air_pressure, double ta)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)
struct data : public face_info

Public Members

double LAI
double CanopyHeight
int canopyType
double rain_load
double Snow_load
double cum_net_snow
double cum_net_rain
double cum_Subl_Cpy
double cum_intcp_evap
double cum_SUnload_H2O
Class slope_iswr
Inheritance Relationships
Base Type
Class Documentation
class slope_iswr : public module_base

Calculates incoming direct-beam shortwave solar radiation to slope

Depends:

  • Incoming solar shortwave radiation, all beam “iswr” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, direct beam “iswr_direct” [ \( W \cdot m^{-2} \) ]

  • Incoming solar shortwave radiation, diffuse beam “iswr_diffuse” [ \( W \cdot m^{-2} \) ]

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Optional:

  • Shadow map “shadow” [0,1]

Provides:

  • Slope corrected shortwave all beam “iswr” [W/m^2]

  • Slope corrected shortwave direct “iswr_direct” [W/m^2]

  • Solar angle “solar_angle” [degrees]

{
   "no_slope": false
}
no_slope

Disables slope correction calcuation when true

Default:

false

Public Functions

slope_iswr(config_file cfg)
~slope_iswr()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Public Members

bool assume_no_slope
Class snobal
Inheritance Relationships
Base Type
Class Documentation
class snobal : public module_base

Snobal is a physically-based snowpack model that approximates the snowpack with two layers. The surface-active layer has a fixed thickness of 0.1 m and is used to estimate surface temperature for outgoing longwave radiation and turbulent heat fluxes. The second lower layer represents the remaining snowpack. For each layer, Snobal simulates the evolution of the snow water equivalent, temperature, density, cold content, and liquid water content. This version of Snobal includes an improved algorithm for snow compaction that accounts for bulk compaction and temperature metamorphism (Hedrick et al., 2018).

Depends:

  • Incoming shortwave radiation, all beams “iswr” [ \( W \cdot m^{-2} \) ]

  • Incomging longwave radiation “ilwr” [ \( W \cdot m^{-2} \) ]

  • Relative humidity “rh” [%]

  • Air temperature “t” [ \( {}^\circ C \)]

  • Windspeed at 2m “U_2m_above_srf” [ \( m \cdot s^{-1} \)]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \)]

  • Precipitation snow fraction “frac_precip_snow” [-]

  • Snow albedo “snow_albedo” [-]

Optional:

  • Optionally, depend on the _subcanopy variants of the above

  • Blowing snow erosion/deposition mass “drift_mass” [mm]

  • Ground temperature “T_g” [ \( {}^\circ C \)]

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

Provides:

  • Snow water equivalent “swe” [mm]

  • Interval snowmelt “snowmelt_int” [mm]

  • Net allwave radiation “R_n” [ \( W \cdot m^{-2} \) ]

  • Sensible heat flux “H” [ \( W \cdot m^{-2} \) ]

  • Latent heat flux “E” [ \( W \cdot m^{-2} \) ]

  • Ground heat flux “G” [ \( W \cdot m^{-2} \) ]

  • Advected heat from precipitation “M” [ \( W \cdot m^{-2} \) ]

  • Change in internal energy “dQ” [ \( W \cdot m^{-2} \) ]

  • Cold content of entire snowpack “cc” [ \( J \cdot m^{-2} \) ]

  • Bulk snow temperature “T_s” [K]

  • Surface exchange layer temperature “T_s_0” [K]

  • Lower layer temperature “T_s_l” [K]

  • Was an iteration error hit “dead”. Diagnostic, don’t use. [-]

  • Net shortwave radiation at the surface. Diagnostic. “iswr_out” [ \( W \cdot m^{-2} \) ]

  • Binary is the snow isothermal “isothermal” [0,1]

  • Outgoing longwave radiation “ilwr_out” [ \( W \cdot m^{-2} \) ]

  • Total snowpack runoff “sum_snowpack_runoff”

  • Total snowpack sublimation “sum_snowpack_subl”

  • Total precipitation onto the snowpack. Diagnostic. “sum_snowpack_pcp” [mm]

  • Total snowpack melt “sum_melt” [mm]

  • Snowdepth “snowdepthavg” [m]

  • Snowdepth in the vertical direction (cosine corrected) “snowdepthavg_vert” [m]

Configuration:

{
   "drift_density": 300,
   "const_T_g": -4.0,
   "use_slope_SWE": true,
   "param_snow_compaction": 1,
   "max_h2o_vol":0.0001,
   "kt_wetsand": 0.08,
   "max_active_layer": 0.1,
   "z0":0.001,
   "z_T":2.6,
   "z_u":2.96,
   "z_g":0.1,
}
drift_density

Density of snow that is added from drift events

const_T_g

Constant ground temperature

use_slope_SWE

Use slope corrected snowdepth for compaction. I.e., parallel to gravity force.

param_snow_compaction

Set to 1 to use new Hedrick, et al parameterization for snow compaction. 0 for origianl Snobal.

max_h2o_vol

Maximum volumetric water content in the snow. Tends to be required to be set quite low.

kt_wetsand

Thermal conductivity of wet sand for G flux

max_active_layer

Thickness of active layer

z0

Rouighness length

z_T

Height of air temperature

z_u

Height of wind measurement

z_g

Depth of ground temperature measurement

References:

  • Marks, D., Domingo, J., Susong, D., Link, T., Garen, D. (1999). A spatially distributed energy balance snowmelt model for application in mountain basins Hydrological Processes 13(12-13), 1935-1959.

  • Hedrick, A., Marks, D., Havens, S., Robertson, M., Johnson, M., Sandusky, M., Marshall, H., Kormos, P., Bormann, K., Painter, T. (2018). Direct Insertion of NASA Airborne Snow Observatory‐Derived Snow Depth Time Series Into the iSnobal Energy Balance Snow Model Water Resources Research 54(10), 8045-8063. https://dx.doi.org/10.1029/2018wr023190

Default:

300 \(kg \cdot m^3\)

Default:

-4.0 \({}^\circ C\)

Default:

true

Default:

1

Default:

0.0001

Default:

\(0.08 W \cdot m^{-2}\)

Default:

0.1 m

Default:

0.001 m

Default:

2.6 m

Default:

2 m

Default:

0.1

Public Functions

snobal(config_file cfg)
~snobal()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

double drift_density
double const_T_g
bool use_slope_SWE
Class snodata
Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class snodata : public face_info

Public Members

sno data
double sum_runoff
double sum_subl
double sum_pcp_sno
double sum_melt
int dead
double delta_avalanche_snowdepth
double delta_avalanche_swe
Class snow_slide
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class snow_slide : public module_base

SnowSlide is a simple topographically-driven model that simulates the effects of gravitational snow transport. It uses a snow holding depth that decreases exponentially with increasing slope angle, limiting snow accumulation in steep terrain. The algorithm moves mass from the highest triangle of the mesh to the lowest one. If the snow depth exceeds the snow holding capacity for a given triangle, excess snow is redistributed to the lower adjacent triangles, proportionally to the elevation difference between the neighboring triangles and the original one. SnowSlide uses the total elevation (snow depth plus surface elevation) to operate. In this study, the default formulation of the snow holding depth proposed by Bernhardt and Schulz (2010) is used which leads to a maximal snow thickness (taken perpendicular to the slope) of 3.08 m, 1.11 m, 0.45 m, and 0.15 m for slopes of 30° 45°, 60°, and 75°, respectively.

In the manuscript it is unclear if the holding capacity (max depth) is parameterized for a snow thickness normal to the slope (i.e., how the snowmodels treat snow) or if it is in the vertical direction (i.e., how LiDAR would measure it, a.k.a cosine corrected snow depth). An analysis versus observed LiDAR derived snowdepths over the Kananaskis, Canada domain as well as data observed by Sommer et al. (2015) showed a better evaluation with snowdepths if it is assumed the parameterization is defined for snowdepths in the vertical.

api/images/snowslide_eval1.png

Depends:

  • Snow depth “snowdepthavg” [m]

  • Snow depth “snowdepthavg_vert” [m]

  • Snow Water Equivalent “swe” [mm]

Provides:

  • Change in snow mass due to avalanching “delta_avalanche_mass” [mm]

  • Change in snow depth due to avalanching “delta_avalanche_snowdepth” [mm]

  • Maximum snowdepth holding capacity of a triangle “maxDepth” [m]

Configuration:

 {
    "avalache_mult": 3178.4,
    "avalache_pow": -1.998
}
avalache_mult
avalache_pow

References:

Default:

3178.4

Default:

-1.998

Public Functions

snow_slide(config_file cfg)
~snow_slide()
virtual void run(mesh &domain)
virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

bool use_vertical_snow
struct data : public face_info

Public Members

double maxDepth
double snowdepthavg_copy
double snowdepthavg_vert_copy
double slope
double swe_copy
double delta_avalanche_snowdepth
double delta_avalanche_mass
Class solar
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class solar : public module_base

Calculates solar position

Depends:

  • None

Provides:

  • Solar elevation “solar_el” [degrees]

  • Solar azimuth “solar_az” [degrees]

Provides:

  • Sky view view “svf” [-]

Configuration:

{
   "svf":
   {
      "steps": 10.
      "max_distance": 1000.0,
      "nsectors": 12,
      "compute": true
   }
}
steps

Number of search steps

max_distance

Maximum search distance

nsectors

Number of azimuthal search bins

compute

Compute the sky view factor

Type:

int

Default:

10

Default:

1000.0

Type:

int

Default:

12

Default:

true

Public Functions

solar(config_file cfg)
~solar()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

double lat
double lng
Class sub_grid
Inheritance Relationships
Base Type
Class Documentation
class sub_grid : public module_base

Public Functions

sub_grid(config_file cfg)
~sub_grid()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class t_no_lapse
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class t_no_lapse : public module_base

Spatially interpolate air temperature with no lapse rate adjustment

Depends from met:

  • Air temperature “t” [ \( {}^\circ C \)]

Provides:

  • Air temperature “t” [ \( {}^\circ C \)]

  • Lapse rate “t_monthly_lapse” [ \( {}^\circ C \)]

Configuration keys:

  • None

Public Functions

t_no_lapse(config_file cfg)
~t_no_lapse()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)
struct data : public face_info

Public Members

interpolation interp
Class Thornton_p
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class Thornton_p : public module_base

Spatially distributes liquid water precipitation using Thornton, et al. 1997 via monthly lapse rates.

Depends from met:

  • Precipitation “p” [ \(mm \cdot dt^{-1}\)]

Provides:

  • Lapsed precipitation “p” [ \(mm \cdot dt^{-1}\)]

  • Precipitation corrected for triangle slope. If "apply_cosine_correction": false, then no change. “p_no_slope” [ \(mm \cdot dt^{-1}\)]

Configuration:

{
   "apply_cosine_correction": false
}
apply_cosine_correction

Correct precipitation input using triangle slope when input preciptation are given for the horizontally projected area.

References:

  • Thornton, P. E., Running, S. W., & White, M. A. (1997). Generating surfaces of daily meteorological variables over large regions of complex terrain. Journal of Hydrology, 190(3-4), 214–251. http://doi.org/10.1016/S0022-1694(96)03128-9

Type:

boolean

Default:

false

Public Functions

Thornton_p(config_file cfg)
~Thornton_p()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

virtual void init(mesh &domain)

Public Members

bool apply_cosine_correction
struct data : public face_info

Public Members

interpolation interp
Class threshold_p_phase
Inheritance Relationships
Base Type
Class Documentation
class threshold_p_phase : public module_base

Calculates phase from air temperature. Defaults to 2 \( {}^\circ C \), looks for the config parameter “threshold_temperature”. Binary snow/rain at 2 \( {}^\circ C \) threshold.

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Precipitation “p” [ \( mm \cdot dt^{-1} \) ]

Provides:

  • Fractional precipitation that is rain “frac_precip_rain” [0-1]

  • Fractional precipitation that is snow “frac_precip_snow” [0-1]

  • Precipitation, rain “p_rain” [ \( mm \cdot dt^{-1} \)]

  • Precipitation, snow “p_snow” [ \( mm \cdot dt^{-1} \)]

Configuration:

{
   "threshold_temperature": 2.0
}
threshold_temperature

Threshold air temperature for rain/snow delineation

Default:

2.0 \({}^\circ C\)

Public Functions

threshold_p_phase(config_file cfg)
~threshold_p_phase()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class uniform_wind
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class uniform_wind : public module_base

Spatially interpolates wind speed and direction without any terrain speed-up modification

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

Public Functions

uniform_wind(config_file cfg)
~uniform_wind()
virtual void run(mesh &domain)
virtual void init(mesh &domain)
class lwinddata : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
Class uniform_wind::lwinddata
Nested Relationships

This class is a nested type of Class uniform_wind.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class lwinddata : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
Class Walcek_cloud
Inheritance Relationships
Base Type
Class Documentation
class Walcek_cloud : public module_base

Calculates a cloud fraction using 700mvb RH. Extrapolates RH@700mb via Kunkel (1989).

Depends:

  • Air temperature “t” [ \( {}^\circ C \) ]

  • Relative humidity “rh” [%]

Provides:

  • Atmospheric transmittance “cloud_frac” [0,1]

References:

  • Walcek, C. J. (1994). Cloud cover and its relationship to relative humidity during a springtime midlatitude cyclone. Monthly Weather Review, 122(6), 1021–1035.

  • Kunkel, K. E. (1989). Simple procedures for extrapolation of humidity variables in the mountainous western United States. Journal of Climate, 2(7), 656–669.

Public Functions

Walcek_cloud(config_file cfg)
~Walcek_cloud()
virtual void run(mesh_elem &face)

Needs to be implemented by each data parallel module. This will be called and executed for each timestep

Parameters:
  • face – The terrain element (triangle) to be worked upon for an element parallel domain

  • global_param – A pointer to the shared global paramter space with domain-wide paramters

Class WindNinja
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
Class Documentation
class WindNinja : public module_base

Calculates wind speed and direction following the downscaling stategy of Barcons et al. (2018). This is via a library of high-resolution wind field generated with the WindNinja wind flow model. Unless the reference height windspeed is provided, use the scale_wind_speed filter to log-scale the windspeed up to U_R.

Depends from met:

  • Wind at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Direction at reference height “vw_dir” [degrees]

Provides:

  • Wind speed at reference height “U_R” [ \( m \cdot s^{-1}\) ]

  • Wind direction ‘vw_dir’ at reference height [degrees]

  • Zonal U at reference height “zonal_u” [ \( m \cdot s^{-1}\) ]

  • Zonal V at reference height “zonal_v” [ \( m \cdot s^{-1}\) ]

Diagnostics:

  • Downscaled windspeed “Ninja_speed” [ \( m \cdot s^{-1}\) ]

  • Interpolated wind field at reference height prior to downscaling “U_R_orig” [ \(m \cdot s^{-1}\)]

  • Interpolated zonal U at level H_Forc “interp_zonal_u” [ \( m \cdot s^{-1}\) ]

  • Interpolated zonal V at level H_Forc “interp_zonal_v” [ \( m \cdot s^{-1}\) ]

  • What lookup map was used “lookup_d” [-]

  • Original wind direction “vw_dir_orig” [degrees]

  • Amount the wind vector direction has been changed “vw_dir_divergence” [degrees]

Configuration:

{
   "ninja_average": true,
   "compute_Sx": true,
   "ninja_recirc": false,
   "Sx_crit", 30.
   "L_avg": 1000.
   "H_forc": 40,
   "Max_spdup": 3.0,
   "Min_spdup": 0.1,
}
ninja_average

Linear interpolation between the closest 2 wind fields from the library

compute_Sx

Use the Winstral Sx parameterization to idenitify and modify lee-side windfield. This will cause a runtime error (conflict) if Winstral_parameters is also a module. This uses an angular window of 30 degrees and a step size of 10 m.

ninja_recirc

Enables the leeside slow down via compute_Sx. Requires "compute_Sx":true.

Sx_crit

Reduce wind speed on the lee side of mountain crest identified by Sx>Sx_crit

..confval:: L_avg

The WindMapper tool uses a radius to compute a mean. This is the length over which that average is done. Normally this will be baked into the parameter name (e.g., Ninja_1000). However, there may be reasons to specifiy it directly. Cannot be used if the parameters have the _Lavg suffix. You likely don’t need to set this.

H_forc
Max_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Min_spdup

Limit speed up value to Max_spdup to avoid unrelistic values at crest top

Parameters:

Requires speedup, u, and v parameters named “Ninja%i_U” and “Ninja%i_V” and “Ninja%i” for each of the n directions. Should be generated with WindMapper. The number of directions will be automatically determined as will the Lavg value. These should be computed with the Windmapper tool .

References:

  • Barcons, J., Avila, M., Folch, A. (2018). A wind field downscaling strategy based on domain segmentation and transfer functions Wind Energy 21(6)https://dx.doi.org/10.1002/we.2169

Type:

boolean

Default:

true

Type:

boolean

Default:

true

Type:

boolean

Default:

false

Type:

double

Default:

Type:

int

Default:

None

Type:

double

Default:

40.0

Reference height for input forcing and WindNinja wind field library

Type:

double

Default:

3.0

Type:

double

Default:

3.0

Public Functions

WindNinja(config_file cfg)
~WindNinja()
virtual void run(mesh &domain)
virtual void init(mesh &domain)

Public Members

double ys
double yc
double distance
int N_windfield
bool ninja_average
double H_forc
double Max_spdup
double Min_spdup
int L_avg
bool ninja_recirc
bool compute_Sx
double Sx_crit
boost::shared_ptr<Winstral_parameters> Sx
class data : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
double W_transf
Class WindNinja::data
Nested Relationships

This class is a nested type of Class WindNinja.

Inheritance Relationships
Base Type
  • public face_info

Class Documentation
class data : public face_info

Public Members

double curvature
interpolation interp
double corrected_theta
double W
double temp_u
interpolation interp_smoothing
double W_transf
Class Winstral
Class Documentation
class Winstral

Compute the Winstral parameter that can be used to redistribute wind and precipitation in complex terrain to improve simulation of snow cover variability.

Depends:

  • Direction at reference height ‘vw_dir’ [degrees]

  • Snow depth [m] (optional)

Provides:

Configuration:

{
   "dmax": 300,
   "size_of_step": 10.0,
   "height_param": 0.0,
   "angular_window": 30.0,
   "delta_angle" : 5.0,
   "incl_veg": false,
   "incl_snw": false
   "use_subgridz": true
}
dmax

Max distance to search

size_of_step

Size of the step to take when searching

height_param

Height parameter to account for instrument height or the impact of small terrain perturbation on Sx . See Winstral et al. (2013) for more details

angular_window

The angle for which to bin the wind directions in

delta_angle
incl_veg

Should vegetation height be added to terrain height for the calculation

incl_snw

Should snow height be added to terrain height for the calculation

use_subgridz

Use an interpolated height within the triangle instead of just the triangle cell centre. Avoids step function results.

References:

Type:

double

Default:

300 m

Type:

double

Default:

10.0 m

Type:

double

Default:

0.0

Type:

double

Default:

30 deg

Type:

double

Default:

5.0

Type:

boolean

Default:

false

Type:

boolean

Default:

false

Type:

boolean

Default:

true

Class Winstral_parameters
Inheritance Relationships
Base Type
Class Documentation
class Winstral_parameters : public module_base

Public Functions

Winstral_parameters(config_file cfg)
~Winstral_parameters()
virtual void run(mesh &domain)
double Sx(const mesh &domain, mesh_elem &face) const

Public Members

int steps
double dmax
double size_of_step
bool use_subgridz
double height_param
double angular_window
double delta_angle
double nangle
bool incl_veg
bool incl_snw

Enums

Enum SpatialType
Enum Documentation
enum class SpatialType

Module “depends” variables must specify where the spatial extent the look at for their dependent variables. local = only this face element neighbor = this and nearest-neighbor face elements distance = this and all face elements within a fixed distance

Values:

enumerator local

Sets that dependent variable is local. That is, this module requires the compute the solution at this element without needing to communicate with surrounding elements. There is no guarantee on element ordering

enumerator neighbor

Sets that this module is domain parallel. That is, this module requires surrounding elements to compute its answer and that it is dependent upon the order of traversal of elements.

enumerator distance

Sets that this module is domain parallel. That is, this module requires surrounding elements to compute its answer and that it is dependent upon the order of traversal of elements.

Functions

Function allocate
Function Documentation
void allocate()
Function fsm2_timestep
Function Documentation
void fsm2_timestep(float *dt, float *elev, float *zT, float *zU, float *LW, float *Ps, float *Qa, float *Rf, float *Sdif, float *Sdir, float *Sf, float *Ta, float *trans, float *Ua, float *alb0, float *hveg, float *VAI, float *rhod, float *albs, float *Tsrf, float *Dsnw, int *Nsnow, float *Qcan, float *Rgrn, float *Sice, float *Sliq, float *Sveg, float *Tcan, float *Tsnow, float *Tsoil, float *Tveg, float *Vsmc, float *H, float *LE, float *LWout, float *LWsub, float *Melt, float *Roff, float *snd, float *snw, float *subl, float *svg, float *SWout, float *SWsub, float *Usub, float *Wflx)
Function my_fill_topo
Function Documentation

Warning

doxygenfunction: Cannot find function “my_fill_topo” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function my_fill_topo2
Function Documentation

Warning

doxygenfunction: Cannot find function “my_fill_topo2” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function my_fill_topo3
Function Documentation

Warning

doxygenfunction: Cannot find function “my_fill_topo3” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(const_llra_ta)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Cullen_monthly_llra_ta)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Dist_tlapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Dodson_NSA_ta)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(iswr_from_nwp)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(iswr_from_obs)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Kunkel_monthlyTd_rh)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(kunkel_rh)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Liston_monthly_llra_ta)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Liston_wind)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Longwave_from_obs)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(lw_no_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(MS_wind)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(p_from_obs)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(p_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(p_no_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(rh_from_obs)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(rh_no_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(t_monthly_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(t_no_lapse)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Thornton_p)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(uniform_wind)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(WindNinja)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(Winstral_parameters)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Function REGISTER_MODULE_CPP(mpi)
Function Documentation

Warning

doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Template Function signum
Function Documentation

Warning

doxygenfunction: Cannot find function “signum” in doxygen xml output for project “CHM” from directory: ./doxygen/xml

Variables

Variable __constants_MOD_e0
Variable Documentation
float __constants_MOD_e0

CONSTANTS

Variable __constants_MOD_eps
Variable Documentation
float __constants_MOD_eps
Variable __layers_MOD_Dzsnow
Variable Documentation
float __layers_MOD_Dzsnow

LAYERS

Variable __layers_MOD_fvg1
Variable Documentation
float __layers_MOD_fvg1
Variable __layers_MOD_nsmax
Variable Documentation
int __layers_MOD_nsmax
Variable __layers_MOD_nsoil
Variable Documentation
int __layers_MOD_nsoil
Variable __layers_MOD_zsub
Variable Documentation
float __layers_MOD_zsub
Variable __parameters_MOD_rgr0
Variable Documentation
float __parameters_MOD_rgr0

PARAMETERS

Variable __soilprops_MOD_b
Variable Documentation
float __soilprops_MOD_b

SOILPROPS

Variable __soilprops_MOD_hcap_soil
Variable Documentation
float __soilprops_MOD_hcap_soil
Variable __soilprops_MOD_hcon_soil
Variable Documentation
float __soilprops_MOD_hcon_soil
Variable __soilprops_MOD_sathh
Variable Documentation
float __soilprops_MOD_sathh
Variable __soilprops_MOD_vcrit
Variable Documentation
float __soilprops_MOD_vcrit
Variable __soilprops_MOD_vsat
Variable Documentation
float __soilprops_MOD_vsat

Defines

Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Define Documentation
_USE_MATH_DEFINES
Define REGISTER_FILTER_CPP
Define Documentation
REGISTER_FILTER_CPP(Implementation)
Define REGISTER_FILTER_HPP
Define Documentation
REGISTER_FILTER_HPP(Implementation)
Define REGISTER_MODULE_CPP
Define Documentation
REGISTER_MODULE_CPP(Implementation)
Define REGISTER_MODULE_HPP
Define Documentation
REGISTER_MODULE_HPP(Implementation)
Define STR
Define Documentation
STR(x)
Define STR
Define Documentation
STR(x)
Define STR_EXPAND
Define Documentation
STR_EXPAND(x)
Define STR_EXPAND
Define Documentation
STR_EXPAND(x)

Typedefs

Typedef config_file
Typedef Documentation
typedef pt::ptree config_file
Typedef config_file
Typedef Documentation
typedef pt::ptree config_file
Typedef filter_factory
Typedef Documentation
typedef factory<filter_base, config_file> filter_factory

Factory related convenience typedef and macros

Typedef module
Typedef Documentation
typedef boost::shared_ptr<module_base> module

Convenience typedef for modules.

Typedef module_factory
Typedef Documentation
typedef factory<module_base, config_file> module_factory

Factory related convenience typedef and macros

Indices and tables