1 #ifndef ERF_IMMERSED_WALL_CELL_H_
2 #define ERF_IMMERSED_WALL_CELL_H_
7 #include <AMReX_REAL.H>
8 #include <AMReX_GpuQualifiers.H>
9 #include <AMReX_Algorithm.H>
39 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
46 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
56 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
64 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
80 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
108 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
115 const amrex::Real dz_eff = (spacing == 1) ? dz_phys : ((spacing == 2) ? dz_log :
dz);
116 return dz / amrex::max(dz_eff, std::numeric_limits<amrex::Real>::min());
141 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
144 return amrex::max(std::log(d /
z0) - psi,
amrex::Real(0.6931471805599453));
160 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
180 for (
int it = 0; it < n_iter; ++it) {
181 w.Linv = amrex::max(amrex::min(
w.Linv, Linv_max), -Linv_max);
182 const amrex::Real z1 = amrex::max(amrex::min(d1 *
w.Linv, zmax), -zmax);
183 const amrex::Real z2 = amrex::max(amrex::min(d2 *
w.Linv, zmax), -zmax);
186 w.ustar = std::sqrt((one_r -
beta) * us_own * us_own +
beta * us_ref * us_ref);
189 w.thetastar = -c.q / us_f;
194 w.thetastar =
theta * us_f * us_f * c.Linv / kg;
199 w.Linv = kg *
w.thetastar / (us_f * us_f *
theta);
203 w.ustar = amrex::max(
w.ustar, us_min);
204 w.Linv = amrex::max(amrex::min(
w.Linv, Linv_max), -Linv_max);
214 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
222 const amrex::Real rate = -flux / (dth + std::copysign(eps, dth));
223 const amrex::Real dt_safe = amrex::max(dt, std::numeric_limits<amrex::Real>::min());
226 return (rate >
amrex::Real(0.0) && std::abs(dth) > eps) ? exact : flux;
233 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
239 const amrex::Real dt_safe = amrex::max(dt, std::numeric_limits<amrex::Real>::min());
240 return -std::expm1(-r * dt_safe) / dt_safe;
250 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
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
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:23
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ ustar
Definition: ERF_SLM.H:28
@ theta
Definition: ERF_Kessler.H:26
@ beta
Definition: ERF_SLM.H:152
@ dz
Definition: ERF_AdvanceWDM6.cpp:273
Definition: ERF_ImmersedWallCell.H:36
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool is_wall_cell(amrex::Real b_km1, amrex::Real b_k, amrex::Real b_kp1, amrex::Real small) noexcept
Definition: ERF_ImmersedWallCell.H:57
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real face_above_factor(amrex::Real beta, amrex::Real dz, amrex::Real z0, int spacing) noexcept
Definition: ERF_ImmersedWallCell.H:109
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real wall_tke(const WallState &w, amrex::Real beta, amrex::Real dz, amrex::Real z0, amrex::Real theta, amrex::Real Cmu0) noexcept
Definition: ERF_ImmersedWallCell.H:251
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real wall_beta(amrex::Real b_k, amrex::Real small) noexcept
Definition: ERF_ImmersedWallCell.H:65
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool is_fluid(amrex::Real beta, amrex::Real small) noexcept
Definition: ERF_ImmersedWallCell.H:40
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real phi(amrex::Real d, amrex::Real z0, amrex::Real psi) noexcept
Definition: ERF_ImmersedWallCell.H:142
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real friction_velocity(amrex::Real ut, amrex::Real ut_ref, amrex::Real beta, amrex::Real dz, amrex::Real z0) noexcept
Definition: ERF_ImmersedWallCell.H:81
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE WallState wall_state(amrex::Real ut, amrex::Real ut_ref, amrex::Real theta, amrex::Real theta_ref, amrex::Real beta, amrex::Real dz, amrex::Real z0, const WallCond &c) noexcept
Definition: ERF_ImmersedWallCell.H:161
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real stress_rate(amrex::Real ustar, amrex::Real ut, amrex::Real dz, amrex::Real dt) noexcept
Definition: ERF_ImmersedWallCell.H:234
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool is_solid(amrex::Real beta, amrex::Real small) noexcept
Definition: ERF_ImmersedWallCell.H:47
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real heat_source(const WallState &w, amrex::Real theta, const WallCond &c, amrex::Real dz, amrex::Real dt) noexcept
Definition: ERF_ImmersedWallCell.H:215
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12
Definition: ERF_ImmersedWallCell.H:121
static constexpr int heat_flux
given kinematic surface heat flux q [K m/s]
Definition: ERF_ImmersedWallCell.H:123
amrex::Real Linv
Definition: ERF_ImmersedWallCell.H:129
static constexpr int obukhov
given Obukhov length (inverse Linv) [1/m]
Definition: ERF_ImmersedWallCell.H:125
int type
Definition: ERF_ImmersedWallCell.H:126
static constexpr int surface_temp
given surface potential temperature theta_s [K]
Definition: ERF_ImmersedWallCell.H:124
amrex::Real q
Definition: ERF_ImmersedWallCell.H:127
amrex::Real theta_s
Definition: ERF_ImmersedWallCell.H:128
static constexpr int neutral
no heat exchange, neutral stability functions
Definition: ERF_ImmersedWallCell.H:122
Definition: ERF_ImmersedWallCell.H:134
amrex::Real thetastar
Definition: ERF_ImmersedWallCell.H:136
amrex::Real Linv
Definition: ERF_ImmersedWallCell.H:137
amrex::Real ustar
Definition: ERF_ImmersedWallCell.H:135
Definition: ERF_MOSTUtils.H:67
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_m(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:132
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real calc_psi_h(amrex::Real zeta) const
Definition: ERF_MOSTUtils.H:151
Definition: ERF_MOSTStress.H:1179