@@ -845,12 +845,16 @@ void PBSM3D::run(mesh& domain)
845
845
if (use_PomLi_probability) // Pomeroy and Li 2000 upscaled
846
846
// probability
847
847
{
848
- // Essery, Li, and Pomeroy 1999
848
+ // 1. Essery, R., Li, L. & Pomeroy, J. A distributed model of blowing snow over complex terrain. Hydrological Processes 13, 2423–2438 ( 1999).
849
849
// Probability of blowing snow
850
850
double A = (*face)[" p_snow_hours" _s]; // hours since last snowfall
851
851
double u_mean = 11.2 + 0.365 * T + 0.00706 * T * T + 0.9 * log (A); // eqn 10 T -> air temp, degC
852
852
double delta = 0.145 * T + 0.00196 * T * T + 4.3 ; // eqn 11
853
- double Pu10 = 1.0 / (1.0 + exp ((sqrt (M_PI) * (u_mean - u10)) / delta)); // eqn 12
853
+
854
+ double z0v = (d.N * d.dv * height_diff) / 2.0 ; // eqn 14
855
+ double us = u10 / sqrt ((1 +340.0 *z0v)); // eqn 13
856
+
857
+ double Pu10 = 1.0 / (1.0 + exp ((sqrt (M_PI) * (u_mean - us)) / delta)); // eqn 12
854
858
(*face)[" blowingsnow_probability" _s] = Pu10;
855
859
856
860
// decrease the saltation by the probability amount
@@ -1715,11 +1719,19 @@ void PBSM3D::run(mesh& domain)
1715
1719
double swe = (*face)[" swe" _s]; // mm --> kg/m^2
1716
1720
swe = is_nan (swe) ? 0 : swe; // handle the first timestep where swe won't have been
1717
1721
// updated if we override the module order
1718
- if ( mass < 0 && std::fabs (mass) > swe )
1719
- {
1720
- (*face)[" pbsm_more_than_avail" _s] = 1 ;
1721
- mass = -swe;
1722
- }
1722
+ if ( mass < 0 && std::fabs (mass) > swe )
1723
+ {
1724
+ (*face)[" pbsm_more_than_avail" _s] = 1 ;
1725
+ mass = -swe;
1726
+ }
1727
+
1728
+ // if this triangle did not saltate, it is not a candidate for removal
1729
+ auto & d = face->get_module_data <data>(ID);
1730
+ if (mass < 0 && !d.saltation )
1731
+ {
1732
+ mass = 0 ;
1733
+ }
1734
+
1723
1735
(*face)[" drift_mass" _s] = mass;
1724
1736
(*face)[" sum_drift" _s] += mass;
1725
1737
}
0 commit comments