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]