1 #ifndef ERF_MOSTUtils_H
2 #define ERF_MOSTUtils_H
4 #include <AMReX_Algorithm.H>
5 #include <AMReX_BLassert.H>
6 #include <AMReX_Math.H>
92 return ( (psi_k_m + zeta*zeta*psi_c_m) / (
one + zeta*zeta) );
101 AMREX_GPU_HOST_DEVICE
116 return ( (psi_k_h + zeta*zeta*psi_c_h) / (
one + zeta*zeta) );
129 AMREX_GPU_HOST_DEVICE
148 AMREX_GPU_HOST_DEVICE
179 AMREX_GPU_HOST_DEVICE
199 AMREX_GPU_HOST_DEVICE
224 AMREX_GPU_HOST_DEVICE
252 AMREX_GPU_HOST_DEVICE
274 AMREX_GPU_HOST_DEVICE
281 return zeta - Rib * CmPsim * CmPsim / CmPsih;
297 AMREX_GPU_HOST_DEVICE
327 AMREX_GPU_HOST_DEVICE
337 if (ra ==
zero) {
return a; }
342 if (!amrex::Math::isfinite(ra)) {
return ra; }
348 return (dir >
zero) ? amrex::min(
z +
dz, zlim) : amrex::max(
z -
dz, zlim);
350 amrex::Real h = amrex::max(amrex::min(std::abs(ra),
358 while ((rb >
zero) == (ra >
zero) && b != zlim && nstep < 200) {
367 if ((rb >
zero) == (ra >
zero)) {
return zlim; }
371 while (std::abs(b - a) > tol && n < 60) {
393 AMREX_GPU_HOST_DEVICE
398 at_fold = (zeta >= zeta_fold);
399 return amrex::max(amrex::min(zeta, zeta_fold), -
most_zeta_lim);
436 AMREX_GPU_HOST_DEVICE
446 if (!at_fold || tflux >=
zero) {
return scale; }
448 if (tflux_fold <= tflux) {
return scale; }
449 const bool down_s = (tflux_s <
zero);
450 const bool down_q = (spec_qflux && tflux_q <
zero);
452 if (down >=
zero) {
return scale; }
454 if (down_s) { scale.
temp = r; }
455 if (down_q) { scale.
moist = r; }
489 AMREX_GPU_HOST_DEVICE
502 qflux *
epsv * tm, spec_qflux,
504 if (at_fold) {
olen = zref / zeta_fold; }
507 t_surf = hflux * CmPsih / (
ustar * mdata.
kappa) + tm;
508 t_star = -hflux /
ustar;
511 q_surf = mflux * CmPsih / (
ustar * mdata.
kappa) + qvm;
512 q_star = -mflux /
ustar;
514 q_star = mdata.
kappa * (qvm - q_surf) / CmPsih;
537 AMREX_GPU_HOST_DEVICE
543 if (iter <
start) {
return u_new; }
547 if (++
n < 3) {
return u_new; }
552 if (d ==
zero || !(ua >
lo && ua <
hi)) {
736 AMREX_GPU_HOST_DEVICE
743 return amrex::min(amrex::max(
z0, z0_lo), z0_hi);
constexpr amrex::Real epsv
Definition: ERF_Constants.H:56
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:71
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:72
Real z0
Definition: ERF_InitCustomPertVels_ScalarAdvDiff.H:12
constexpr amrex::Real most_min_ustar
Definition: ERF_MOSTUtils.H:462
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WaveCoupled_roughness(amrex::Real Hwave, amrex::Real Lwave, amrex::Real eps, amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:708
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_rib_zeta_bracketed(const similarity_funs &sfuns, amrex::Real C, amrex::Real Rib, amrex::Real zeta0, amrex::Real tol)
Definition: ERF_MOSTUtils.H:330
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_bracket_floor(amrex::Real C)
Definition: ERF_MOSTUtils.H:57
constexpr amrex::Real inverted_roughness_lo
Definition: ERF_MOSTUtils.H:726
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE most_flux_scale most_fold_flux_scale(bool at_fold, amrex::Real zeta_fold, amrex::Real ustar, amrex::Real thv, amrex::Real tflux_s, amrex::Real tflux_q, bool spec_qflux, amrex::Real kappa, amrex::Real gravity, amrex::Real zref)
Definition: ERF_MOSTUtils.H:439
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_bracket(amrex::Real C, amrex::Real psi)
Definition: ERF_MOSTUtils.H:255
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real bound_inverted_roughness(amrex::Real z0, amrex::Real zref) noexcept
Definition: ERF_MOSTUtils.H:739
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness(amrex::Real zref, amrex::Real umm, amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:645
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_roughness(amrex::Real zref, amrex::Real Olen, amrex::Real umm, amrex::Real ustar)
Definition: ERF_MOSTUtils.H:757
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Mod_Charnock_roughness(amrex::Real ustar, amrex::Real Cnk_b)
Definition: ERF_MOSTUtils.H:624
constexpr amrex::Real most_zeta_lim
Definition: ERF_MOSTUtils.H:263
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_rib_resid(const similarity_funs &sfuns, amrex::Real C, amrex::Real Rib, amrex::Real zeta)
Definition: ERF_MOSTUtils.H:277
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void most_flux_outputs(const most_data &mdata, bool spec_qflux, bool at_fold, amrex::Real zeta_fold, amrex::Real C, amrex::Real psi_h, amrex::Real ustar, amrex::Real zref, amrex::Real tm, amrex::Real tvm, amrex::Real qvm, amrex::Real qflux, amrex::Real &olen, amrex::Real &t_surf, amrex::Real &t_star, amrex::Real &q_surf, amrex::Real &q_star)
Definition: ERF_MOSTUtils.H:492
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real air_viscosity(amrex::Real T_degK)
Definition: ERF_MOSTUtils.H:581
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool most_rib_zeta_is_root(const similarity_funs &sfuns, amrex::Real C, amrex::Real Rib, amrex::Real zeta, amrex::Real delta)
Definition: ERF_MOSTUtils.H:300
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_clamp_zeta(amrex::Real zeta, amrex::Real zeta_fold, bool &at_fold)
Definition: ERF_MOSTUtils.H:396
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness(amrex::Real ustar, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:676
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Charnock_roughness(amrex::Real ustar, amrex::Real Cnk_a, amrex::Real nu, bool visc)
Definition: ERF_MOSTUtils.H:600
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:39
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:38
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:42
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
constexpr amrex::Real PI
Definition: ERF_NumericalConstants.H:46
constexpr amrex::Real PIoTwo
Definition: ERF_NumericalConstants.H:47
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ olen
Definition: ERF_SLM.H:104
@ ustar
Definition: ERF_SLM.H:28
@ dz
Definition: ERF_AdvanceWDM6.cpp:273
@ rhi
Definition: ERF_WSM6.H:360
Definition: ERF_MOSTUtils.H:530
amrex::Real u2
Definition: ERF_MOSTUtils.H:568
int start
Definition: ERF_MOSTUtils.H:563
bool extrapolated
whether the last update returned an extrapolated value
Definition: ERF_MOSTUtils.H:564
int n
Definition: ERF_MOSTUtils.H:565
amrex::Real u0
Definition: ERF_MOSTUtils.H:566
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real update(amrex::Real u_new, int iter)
Definition: ERF_MOSTUtils.H:540
amrex::Real u1
Definition: ERF_MOSTUtils.H:567
Definition: ERF_MOSTUtils.H:13
amrex::Real surf_moist_flux
Moisture flux.
Definition: ERF_MOSTUtils.H:19
amrex::Real Cnk_b2
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:23
amrex::Real Cnk_b
Modified Charnock derived quantity.
Definition: ERF_MOSTUtils.H:25
amrex::Real Ch
Definition: ERF_MOSTUtils.H:29
amrex::Real Cnk_d
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:24
amrex::Real kappa
von Karman constant
Definition: ERF_MOSTUtils.H:16
amrex::Real gravity
Acceleration due to gravity (m/s^2)
Definition: ERF_MOSTUtils.H:17
amrex::Real Cnk_a
Standard Charnock constant https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:21
amrex::Real Cd
Definition: ERF_MOSTUtils.H:28
amrex::Real Cq
Definition: ERF_MOSTUtils.H:30
const amrex::Real Bjr_beta
Definition: ERF_MOSTUtils.H:32
amrex::Real Cnk_b1
Modified Charnock Eq (4) https://doi.org/amrex::Real(10.1175)/JAMC-D-17-amrex::Real(0137....
Definition: ERF_MOSTUtils.H:22
amrex::Real z0_const
Roughness height – default constant value(m)
Definition: ERF_MOSTUtils.H:15
bool visc
Use viscous Charnock formulation.
Definition: ERF_MOSTUtils.H:26
amrex::Real surf_temp_flux
Heat flux TODO: decide whether this is <θ'w'> or <θv'w'> under moist conditions.
Definition: ERF_MOSTUtils.H:18
Definition: ERF_MOSTUtils.H:406
amrex::Real temp
factor on surf_temp_flux
Definition: ERF_MOSTUtils.H:407
amrex::Real moist
factor on surf_moist_flux
Definition: ERF_MOSTUtils.H:408
Definition: ERF_MOSTUtils.H:67
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_phi_h(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:202
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:132
amrex::Real beta_m
Constants from Dyer, BLM, 1974.
Definition: ERF_MOSTUtils.H:233
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h2(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:104
amrex::Real beta_h
https://doi.org/amrex::Real(10.1007)/BF00240838
Definition: ERF_MOSTUtils.H:234
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_zeta_fold(amrex::Real C) const
Definition: ERF_MOSTUtils.H:227
amrex::Real gamma_h
Definition: ERF_MOSTUtils.H:236
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:151
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_phi_m(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:182
amrex::Real gamma_m
Definition: ERF_MOSTUtils.H:235
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m2(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:79