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.

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
andopenmpi-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
andstation_N_nearest
cannot be simultaneously specified. If neither is specific, thenstation_N_nearest:5
is used as default. If theinterpolant
mode isnearest
, 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 sectionUsage of this key also requires adding
point_mode
to the module list. Lastly, no modules which are definedparallel: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 inoption.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 beforeB
. 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 outputall 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.

- 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
oron_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 withon_last
to produce checkpoints everyfrequency
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 requirefrequency
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
point_mode
is defined in theoption
configuration sectionThe module
point_mode
is usedOnly
parallel::data
modules are usedHave 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

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
Create mesh as normal with Mesher and apply the permutation. This must use the
metis
partitioning type.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.
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:
Convert json (
.mesh
) format meshes to binary HDF5 (.h5
)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.

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
andxgrid_0
The lat/long is specified in variables
gridlat_0
andgridlon_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
orYYYY-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.

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.

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.

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
.

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)
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.
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.
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.
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 thatdepends(...)
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:
Winstral parameter “Sx” [degrees]
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:
Winstral, A., Marks, D., Gurney, R. (2013). Simulating wind-affected snow accumulations at catchment to basin scales Advances in Water Resources 55(), 64-79. https://dx.doi.org/10.1016/j.advwatres.2012.08.011
- 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 thatdepends(...)
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:
Code ported from SUMMA
Iqbal, M. (1983). An Introduction to Solar Radiation https://dx.doi.org/10.1016/b978-0-12-373750-2.50015-x
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.
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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
ortanh_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 aboveBlowing 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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 aboveBlowing 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
module_template
-
class module_template : public module_base
Template header file for new module implementations.
Depends:
Provides:
mpi
-
class mpi : public module_base
MPI usage example
Depends:
None
Provides:
None
Configuration:
None
Parameters:
None
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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
ortanh_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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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
ortanh_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
ortanh_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
ortanh_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
ortanh_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
ortanh_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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Winstral parameter “Sx” [degrees]
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:
Winstral, A., Marks, D., Gurney, R. (2013). Simulating wind-affected snow accumulations at catchment to basin scales Advances in Water Resources 55(), 64-79. https://dx.doi.org/10.1016/j.advwatres.2012.08.011
- 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 thatdepends(...)
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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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
ortanh_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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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
ortanh_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 thatdepends(...)
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 thatdepends(...)
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:
Code ported from SUMMA
Iqbal, M. (1983). An Introduction to Solar Radiation https://dx.doi.org/10.1016/b978-0-12-373750-2.50015-x
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
ortanh_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
ortanh_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 aboveBlowing 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
ortanh_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
ortanh_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
ortanh_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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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
ortanh_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
ortanh_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 aboveBlowing 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
ortanh_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
ortanh_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
ortanh_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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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
ortanh_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
ortanh_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
ortanh_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
ortanh_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
ortanh_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 thatdepends(...)
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 aboveBlowing 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 aboveBlowing 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
ortanh_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 aboveBlowing 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 thatdepends(...)
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 thatdepends(...)
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:
Code ported from SUMMA
Iqbal, M. (1983). An Introduction to Solar Radiation https://dx.doi.org/10.1016/b978-0-12-373750-2.50015-x
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 thatdepends(...)
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:
Code ported from SUMMA
Iqbal, M. (1983). An Introduction to Solar Radiation https://dx.doi.org/10.1016/b978-0-12-373750-2.50015-x
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 aboveBlowing 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 aboveBlowing 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
ortanh_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
ortanh_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
ortanh_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 aboveBlowing 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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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
ortanh_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 aboveBlowing 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 aboveBlowing 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 thatdepends(...)
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
ortanh_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 thatdepends(...)
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 aboveBlowing 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
ortanh_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.
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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
ortanh_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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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 aboveBlowing 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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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
ortanh_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 aboveBlowing 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
ortanh_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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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 aboveBlowing 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 aboveBlowing 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 thatdepends(...)
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
ortanh_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
ortanh_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
ortanh_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
ortanh_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
ortanh_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
ortanh_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
ortanh_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 thatdepends(...)
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
ortanh_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
ortanh_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.
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:
Goodison, B. E. (1998), WMO Solid Solid Precipitiation Measurement Intercomparison. https://globalcryospherewatch.org/bestpractices/docs/WMOtd872.pdf
- 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.
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.
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.
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.
In the
hpp
file, within the class definition addREGISTER_MODULE_HPP(module_name);
wheremodule_name
exactly matches the class nameIn the
cpp
file, outside of all the other definitions addREGISTER_MODULE_CPP(module_name);
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.
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
Defined in File const_llra_ta.hpp
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
-
interpolation interp
Struct Cullen_monthly_llra_ta::data
Defined in File Cullen_monthly_llra_ta.hpp
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
-
interpolation interp
Struct Dist_tlapse::data
Defined in File Dist_tlapse.hpp
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
-
interpolation interp
Struct Dodson_NSA_ta::data
Defined in File Dodson_NSA_ta.hpp
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
-
interpolation interp
Struct FSM::data
Defined in File fsm.hpp
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
-
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 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
-
float alb0 = 0.2
Struct iswr_from_nwp::data
Defined in File iswr_from_nwp.hpp
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
-
interpolation interp
Struct iswr_from_obs::data
Defined in File iswr_from_obs.hpp
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
-
interpolation interp
Struct Kunkel_monthlyTd_rh::data
Defined in File Kunkel_monthlyTd_rh.hpp
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
-
interpolation interp
Struct kunkel_rh::data
Defined in File kunkel_rh.hpp
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
-
interpolation interp
Struct Lehning_snowpack::data
Defined in File snowpack.hpp
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
-
boost::shared_ptr<Snowpack> sp
Struct Liston_monthly_llra_ta::data
Defined in File Liston_monthly_llra_ta.hpp
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
-
interpolation interp
Struct Longwave_from_obs::data
Defined in File Longwave_from_obs.hpp
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
-
interpolation interp
Struct lw_no_lapse::data
Defined in File lw_no_lapse.hpp
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
-
interpolation interp
Struct module_shadow_face_info
Defined in File Marsh_shading_iswr.hpp
Inheritance Relationships
Base Type
public face_info
Struct Documentation
Struct my_fill_topo2_params
Defined in File PBSM3D.cpp
Struct Documentation
-
struct my_fill_topo2_params
Struct my_fill_topo3_params
Defined in File PBSM3D.cpp
Struct Documentation
-
struct my_fill_topo3_params
Struct my_fill_topo_params
Defined in File PBSM3D.cpp
Struct Documentation
-
struct my_fill_topo_params
Struct p_from_obs::data
Defined in File p_from_obs.hpp
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
-
interpolation interp
Struct p_lapse::data
Defined in File p_lapse.hpp
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
-
interpolation interp
Struct p_no_lapse::data
Defined in File p_no_lapse.hpp
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
-
interpolation interp
Struct rh_from_obs::data
Defined in File rh_from_obs.hpp
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
-
interpolation interp
Struct rh_no_lapse::data
Defined in File rh_no_lapse.hpp
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
-
interpolation interp
Struct Richard_albedo::data
Defined in File Richard_albedo.hpp
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
-
double albedo
Struct scale_wind_vert::d
Defined in File scale_wind_vert.hpp
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
-
double temp_u
Struct Simple_Canopy::data
Defined in File Simple_Canopy.hpp
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
-
double LAI
Struct snow_slide::data
Defined in File snow_slide.hpp
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
-
double maxDepth
Struct solar::data
Defined in File solar.hpp
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
-
double lat
Struct t_no_lapse::data
Defined in File t_no_lapse.hpp
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
-
interpolation interp
Struct Thornton_p::data
Defined in File Thornton_p.hpp
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
-
interpolation interp
Struct variable_info
Defined in File module_base.hpp
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
-
variable_info() = delete
Struct vertex_data
Defined in File Marsh_shading_iswr.hpp
Inheritance Relationships
Base Type
public vertex_info
Struct Documentation
-
struct vertex_data : public vertex_info
Class Burridge_iswr
Defined in File Burridge_iswr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File const_llra_ta.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class crop_rotation
Defined in File crop_rotation.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File Cullen_monthly_llra_ta.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class debias_lw
Defined in File debias_lw.hpp
Inheritance Relationships
Base Type
public filter_base
(Class filter_base)
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
Apply the filter for one timestep for the given station
- Parameters:
station – Station to operate on
Class deform_mesh
Defined in File deform_mesh.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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.
Class Dist_tlapse
Defined in File Dist_tlapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Dodson_NSA_ta
Defined in File Dodson_NSA_ta.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class fast_shadow
Defined in File fast_shadow.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class fetchr
Defined in File fetchr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class filter_base
Defined in File filter_base.hpp
Inheritance Relationships
Derived Types
public debias_lw
(Class debias_lw)public filter_template
(Class filter_template)public goodison_undercatch
(Class goodison_undercatch)public macdonald_undercatch
(Class macdonald_undercatch)public scale_wind_speed
(Class scale_wind_speed)
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
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
-
inline filter_base(std::string name = "", config_file input_cfg = pt::basic_ptree<std::string, std::string>())
Class filter_template
Defined in File filter_template.hpp
Inheritance Relationships
Base Type
public filter_base
(Class filter_base)
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
Apply the filter for one timestep for the given station
- Parameters:
station – Station to operate on
-
filter_template(config_file cfg)
Class filter_template_name
Defined in File filter_template.hpp
Class Documentation
-
class filter_template_name
Template header file for new filter implementations.
Depends:
Provides:
Class FSM
Defined in File fsm.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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:
Essery, R. (2015). A factorial snowpack model (FSM 1.0) Geoscientific Model Development 8(12), 3867 3876. https://dx.doi.org/10.5194/gmd-8-3867-2015
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
Defined in File goodison_undercatch.hpp
Inheritance Relationships
Base Type
public filter_base
(Class filter_base)
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:
Goodison, B. E. (1998), WMO Solid Solid Precipitiation Measurement Intercomparison. https://globalcryospherewatch.org/bestpractices/docs/WMOtd872.pdf
- 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
Apply the filter for one timestep for the given station
- Parameters:
station – Station to operate on
Class Gray_inf
Defined in File Gray_inf.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class Gray_inf::data
Defined in File Gray_inf.hpp
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
-
double storage
Class Harder_precip_phase
Defined in File Harder_precip_phase.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
-
class data : public face_info
Class Harder_precip_phase::data
Defined in File Harder_precip_phase.hpp
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
-
double hours_since_snowfall
Class Iqbal_iswr
Defined in File Iqbal_iswr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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:
Code ported from SUMMA
Iqbal, M. (1983). An Introduction to Solar Radiation https://dx.doi.org/10.1016/b978-0-12-373750-2.50015-x
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
Defined in File iswr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class iswr_from_nwp
Defined in File iswr_from_nwp.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class iswr_from_obs
Defined in File iswr_from_obs.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Kunkel_monthlyTd_rh
Defined in File Kunkel_monthlyTd_rh.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class kunkel_rh
Defined in File kunkel_rh.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Lehning_snowpack
Defined in File snowpack.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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 aboveBlowing 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)
-
struct data : public face_info
Class Liston_monthly_llra_ta
Defined in File Liston_monthly_llra_ta.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Liston_wind
Defined in File Liston_wind.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
-
class lwinddata : public face_info
Class Liston_wind::lwinddata
Defined in File Liston_wind.hpp
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
-
double curvature
Class Longwave_from_obs
Defined in File Longwave_from_obs.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class lw_no_lapse
Defined in File lw_no_lapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class macdonald_undercatch
Defined in File macdonald_undercatch.hpp
Inheritance Relationships
Base Type
public filter_base
(Class filter_base)
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
Apply the filter for one timestep for the given station
- Parameters:
station – Station to operate on
Class Marsh_shading_iswr
Defined in File Marsh_shading_iswr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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.
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)
Class module_base
Defined in File module_base.hpp
Inheritance Relationships
Derived Types
public Burridge_iswr
(Class Burridge_iswr)public Cullen_monthly_llra_ta
(Class Cullen_monthly_llra_ta)public Dist_tlapse
(Class Dist_tlapse)public Dodson_NSA_ta
(Class Dodson_NSA_ta)public FSM
(Class FSM)public Gray_inf
(Class Gray_inf)public Harder_precip_phase
(Class Harder_precip_phase)public Iqbal_iswr
(Class Iqbal_iswr)public Kunkel_monthlyTd_rh
(Class Kunkel_monthlyTd_rh)public Lehning_snowpack
(Class Lehning_snowpack)public Liston_monthly_llra_ta
(Class Liston_monthly_llra_ta)public Liston_wind
(Class Liston_wind)public Longwave_from_obs
(Class Longwave_from_obs)public MS_wind
(Class MS_wind)public Marsh_shading_iswr
(Class Marsh_shading_iswr)public PBSM3D
(Class PBSM3D)public PenmanMonteith_evaporation
(Class PenmanMonteith_evaporation)public Richard_albedo
(Class Richard_albedo)public Sicart_ilwr
(Class Sicart_ilwr)public Simple_Canopy
(Class Simple_Canopy)public Thornton_p
(Class Thornton_p)public Walcek_cloud
(Class Walcek_cloud)public WindNinja
(Class WindNinja)public Winstral_parameters
(Class Winstral_parameters)public const_llra_ta
(Class const_llra_ta)public crop_rotation
(Class crop_rotation)public deform_mesh
(Class deform_mesh)public fast_shadow
(Class fast_shadow)public fetchr
(Class fetchr)public iswr
(Class iswr)public iswr_from_nwp
(Class iswr_from_nwp)public iswr_from_obs
(Class iswr_from_obs)public kunkel_rh
(Class kunkel_rh)public lw_no_lapse
(Class lw_no_lapse)public module_template
(Class module_template)public mpi
(Class mpi)public p_from_obs
(Class p_from_obs)public p_lapse
(Class p_lapse)public p_no_lapse
(Class p_no_lapse)public point_mode
(Class point_mode)public rh_from_obs
(Class rh_from_obs)public rh_no_lapse
(Class rh_no_lapse)public scale_wind_vert
(Class scale_wind_vert)public slope_iswr
(Class slope_iswr)public snobal
(Class snobal)public snow_slide
(Class snow_slide)public solar
(Class solar)public sub_grid
(Class sub_grid)public t_no_lapse
(Class t_no_lapse)public threshold_p_phase
(Class threshold_p_phase)public uniform_wind
(Class uniform_wind)
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.
-
enumerator data
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 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
-
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
-
enum class parallel
Class module_template
Defined in File module_template.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
-
module_template(config_file cfg)
Class mpi
Defined in File mpi_example.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
Class Documentation
-
class mpi : public module_base
MPI usage example
Depends:
None
Provides:
None
Configuration:
None
Parameters:
None
Class MS_wind
Defined in File MS_wind.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
-
class data : public face_info
Class MS_wind::data
Defined in File MS_wind.hpp
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
-
double curvature
Class p_from_obs
Defined in File p_from_obs.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class p_lapse
Defined in File p_lapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class p_no_lapse
Defined in File p_no_lapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class PBSM3D
Defined in File PBSM3D.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
ortanh_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
-
arma::vec m[5]
Class PBSM3D::data
Defined in File PBSM3D.hpp
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
-
arma::vec m[5]
Class PenmanMonteith_evaporation
Defined in File PenmanMonteith_evaporation.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File point_mode.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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 thatdepends(...)
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
Class rh_from_obs
Defined in File rh_from_obs.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class rh_no_lapse
Defined in File rh_no_lapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Richard_albedo
Defined in File Richard_albedo.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class scale_wind_speed
Defined in File scale_wind_speed.hpp
Inheritance Relationships
Base Type
public filter_base
(Class filter_base)
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
Apply the filter for one timestep for the given station
- Parameters:
station – Station to operate on
Class scale_wind_vert
Defined in File scale_wind_vert.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class Sicart_ilwr
Defined in File Sicart_ilwr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File Simple_Canopy.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
-
Simple_Canopy(config_file cfg)
Class slope_iswr
Defined in File slope_iswr.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File snobal.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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 aboveBlowing 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)
Class snodata
Defined in File snobal.hpp
Inheritance Relationships
Base Type
public face_info
Class Documentation
-
class snodata : public face_info
Class snow_slide
Defined in File snow_slide.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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.
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:
Bernhardt, M., Schulz, K. (2010). SnowSlide: A simple routine for calculating gravitational snow transport Geophysical Research Letters 37(11), 1-6. https://dx.doi.org/10.1029/2010gl043086
- 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
Class solar
Defined in File solar.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class sub_grid
Defined in File sub_grid.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
-
sub_grid(config_file cfg)
Class t_no_lapse
Defined in File t_no_lapse.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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)
Class Thornton_p
Defined in File Thornton_p.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class threshold_p_phase
Defined in File threshold_p_phase.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File uniform_wind.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class uniform_wind::lwinddata
Defined in File uniform_wind.hpp
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
-
double curvature
Class Walcek_cloud
Defined in File Walcek_cloud.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Defined in File WindNinja.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
Class WindNinja::data
Defined in File WindNinja.hpp
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
-
double curvature
Class Winstral
Defined in File Winstral_parameters.hpp
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:
Winstral parameter “Sx” [degrees]
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:
Winstral, A., Marks, D., Gurney, R. (2013). Simulating wind-affected snow accumulations at catchment to basin scales Advances in Water Resources 55(), 64-79. https://dx.doi.org/10.1016/j.advwatres.2012.08.011
- 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
Defined in File Winstral_parameters.hpp
Inheritance Relationships
Base Type
public module_base
(Class module_base)
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
-
Winstral_parameters(config_file cfg)
Enums
Enum SpatialType
Defined in File module_base.hpp
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.
-
enumerator local
Functions
Function allocate
Defined in File fsm.hpp
Function Documentation
-
void allocate()
Function fsm2_timestep
Defined in File fsm.hpp
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
Defined in File PBSM3D.cpp
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
Defined in File PBSM3D.cpp
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
Defined in File PBSM3D.cpp
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)
Defined in File const_llra_ta.cpp
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)
Defined in File Cullen_monthly_llra_ta.cpp
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)
Defined in File Dist_tlapse.cpp
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)
Defined in File Dodson_NSA_ta.cpp
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)
Defined in File iswr_from_nwp.cpp
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)
Defined in File iswr_from_obs.cpp
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)
Defined in File Kunkel_monthlyTd_rh.cpp
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)
Defined in File kunkel_rh.cpp
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)
Defined in File Liston_monthly_llra_ta.cpp
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)
Defined in File Liston_wind.cpp
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)
Defined in File Longwave_from_obs.cpp
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)
Defined in File lw_no_lapse.cpp
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)
Defined in File MS_wind.cpp
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)
Defined in File p_from_obs.cpp
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)
Defined in File p_lapse.cpp
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)
Defined in File p_no_lapse.cpp
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)
Defined in File rh_from_obs.cpp
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)
Defined in File rh_no_lapse.cpp
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)
Defined in File t_monthly_lapse.cpp
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)
Defined in File t_no_lapse.cpp
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)
Defined in File Thornton_p.cpp
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)
Defined in File uniform_wind.cpp
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)
Defined in File WindNinja.cpp
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)
Defined in File Winstral_parameters.cpp
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)
Defined in File mpi_example.cpp
Function Documentation
Warning
doxygenfunction: Cannot find function “REGISTER_MODULE_CPP” in doxygen xml output for project “CHM” from directory: ./doxygen/xml
Template Function signum
Defined in File p_from_obs.cpp
Function Documentation
Warning
doxygenfunction: Cannot find function “signum” in doxygen xml output for project “CHM” from directory: ./doxygen/xml
Variables
Variable __constants_MOD_e0
Defined in File fsm.hpp
Variable Documentation
-
float __constants_MOD_e0
CONSTANTS
Variable __constants_MOD_eps
Defined in File fsm.hpp
Variable Documentation
-
float __constants_MOD_eps
Variable __layers_MOD_Dzsnow
Defined in File fsm.hpp
Variable Documentation
-
float __layers_MOD_Dzsnow
LAYERS
Variable __layers_MOD_fvg1
Defined in File fsm.hpp
Variable Documentation
-
float __layers_MOD_fvg1
Variable __layers_MOD_nsmax
Defined in File fsm.hpp
Variable Documentation
-
int __layers_MOD_nsmax
Variable __layers_MOD_nsoil
Defined in File fsm.hpp
Variable Documentation
-
int __layers_MOD_nsoil
Variable __layers_MOD_zsub
Defined in File fsm.hpp
Variable Documentation
-
float __layers_MOD_zsub
Variable __parameters_MOD_rgr0
Defined in File fsm.hpp
Variable Documentation
-
float __parameters_MOD_rgr0
PARAMETERS
Variable __soilprops_MOD_b
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_b
SOILPROPS
Variable __soilprops_MOD_hcap_soil
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_hcap_soil
Variable __soilprops_MOD_hcon_soil
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_hcon_soil
Variable __soilprops_MOD_sathh
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_sathh
Variable __soilprops_MOD_vcrit
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_vcrit
Variable __soilprops_MOD_vsat
Defined in File fsm.hpp
Variable Documentation
-
float __soilprops_MOD_vsat
Defines
Define _USE_MATH_DEFINES
Defined in File Harder_precip_phase.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File Liston_wind.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File MS_wind.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File p_lapse.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File p_no_lapse.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File Thornton_p.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File uniform_wind.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File WindNinja.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File Winstral_parameters.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File iswr.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File Marsh_shading_iswr.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File module_template.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File PenmanMonteith_evaporation.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File Sicart_ilwr.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define _USE_MATH_DEFINES
Defined in File slope_iswr.hpp
Define Documentation
-
_USE_MATH_DEFINES
Define REGISTER_FILTER_CPP
Defined in File filter_base.hpp
Define Documentation
-
REGISTER_FILTER_CPP(Implementation)
Define REGISTER_FILTER_HPP
Defined in File filter_base.hpp
Define Documentation
-
REGISTER_FILTER_HPP(Implementation)
Define REGISTER_MODULE_CPP
Defined in File module_base.hpp
Define Documentation
-
REGISTER_MODULE_CPP(Implementation)
Define REGISTER_MODULE_HPP
Defined in File module_base.hpp
Define Documentation
-
REGISTER_MODULE_HPP(Implementation)
Define STR
Defined in File filter_base.hpp
Define Documentation
-
STR(x)
Define STR
Defined in File module_base.hpp
Define Documentation
-
STR(x)
Define STR_EXPAND
Defined in File filter_base.hpp
Define Documentation
-
STR_EXPAND(x)
Define STR_EXPAND
Defined in File module_base.hpp
Define Documentation
-
STR_EXPAND(x)
Typedefs
Typedef config_file
Defined in File filter_base.hpp
Typedef Documentation
-
typedef pt::ptree config_file
Typedef config_file
Defined in File module_base.hpp
Typedef Documentation
-
typedef pt::ptree config_file
Typedef filter_factory
Defined in File filter_base.hpp
Typedef Documentation
-
typedef factory<filter_base, config_file> filter_factory
Factory related convenience typedef and macros
Typedef module
Defined in File module_base.hpp
Typedef Documentation
-
typedef boost::shared_ptr<module_base> module
Convenience typedef for modules.
Typedef module_factory
Defined in File module_base.hpp
Typedef Documentation
-
typedef factory<module_base, config_file> module_factory
Factory related convenience typedef and macros