Class PBSM3D

Nested Relationships

Nested Types

Inheritance Relationships

Base Type

Class Documentation

class PBSM3D : public module_base

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

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

Precipitation is not currently blown simultaneously

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

Depends:

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

  • Relative humidity “rh” [%]

  • Snow water equivalent “swe” [mm]

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

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

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

Provides:

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

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

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

  • Total sublimation “sum_subl”

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

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

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

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

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

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

Parameters:

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

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

Configuration:

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

}
use_exp_fetch

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

use_tanh_fetch

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

use_PomLi_probability

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

z0_ustar_coupling

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

use_subgrid_topo

Experimental sub-grid topographic impacts. Do not use.

use_subgrid_topo_V2

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

use_R94_lambda

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

N

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

dv

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

debug_output

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

nLayer

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

do_fixed_settling

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

settling_velocity

Fixed settling velocity. Requires setting do_fixed_settling:true

do_sublimation

Compute sublimation losses from the saltation and suspension layers.

do_lateral_diff

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

smooth_coeff

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

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

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

cutoff

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

snow_diffusion_const

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

rouault_diffusion_coef

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

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

enable_veg

Set to false to ignore vegetation impacts

iterative_subl

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

References:

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

Default:

false

Default:

true

Default:

false

Default:

false

Default:

true

Default:

1

Default:

0.8

Default:

false

Default:

10

Default:

false

Default:

0.5 [m/s]

Default:

true

Default:

true

Default:

820

Type:

double

Default:

0.1

Type:

double

Default:

0.3

Type:

double

Default:

0.3

Default:

false

Default:

true

Default:

false

Public Functions

PBSM3D(config_file cfg)
~PBSM3D()
virtual void run(mesh &domain)
virtual void init(mesh &domain)
virtual void checkpoint(mesh &domain, netcdf &chkpt)

Checkpoint (save state) the current module. By default this errors out if the modules does not support checkpointing.

Parameters:
  • domain

  • data

virtual void load_checkpoint(mesh &domain, netcdf &chkpt)

Public Members

double nLayer
double susp_depth
double v_edge_height
double snow_diffusion_const
double l__max
bool rouault_diffusion_coeff
bool do_fixed_settling
double settling_velocity
double n_non_edge_tri
double eps
bool do_sublimation
bool do_lateral_diff
bool enable_veg
bool use_PomLi_probability
bool use_exp_fetch
bool use_tanh_fetch
bool use_subgrid_topo
bool use_subgrid_topo_V2
bool iterative_subl
bool use_R94_lambda
double nnz
double nnz_drift
bool debug_output
double cutoff
double min_sd_trans
bool z0_ustar_coupling
class data : public face_info

Public Members

arma::vec m[5]
double A[5]
bool face_neigh[3]
std::vector<double> u_z_susp
size_t cell_local_id
double CanopyHeight
double LAI
double N
double dv
double hs
bool is_edge
bool saltation
double z0
double sum_drift
double sum_subl
std::vector<double> csubl
gsl_function F_fill
gsl_function F_fill2
gsl_function F_fill3