1 #ifndef ERF_NEAR_SURFACE_DIAGNOSTICS_H_
2 #define ERF_NEAR_SURFACE_DIAGNOSTICS_H_
4 #include <AMReX_GpuQualifiers.H>
5 #include <AMReX_Math.H>
6 #include <AMReX_MultiFab.H>
7 #include <AMReX_iMultiFab.H>
48 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
51 return amrex::Math::isfinite(value);
54 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
61 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
64 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
67 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
70 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
82 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
88 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
94 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
105 return vegetated_ok && bare_ok;
108 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
115 bundle.mixing_ratio_vegetated >=
amrex::Real(0.0));
119 return vegetated_ok && bare_ok;
122 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
130 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
137 return {bundle.temperature_bare, bundle.mixing_ratio_bare};
140 return {bundle.temperature_vegetated, bundle.mixing_ratio_vegetated};
143 f * bundle.temperature_vegetated + (
amrex::Real(1.0)-f) * bundle.temperature_bare,
144 f * bundle.mixing_ratio_vegetated + (
amrex::Real(1.0)-f) * bundle.mixing_ratio_bare
151 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
154 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
162 height <= state.roughness_height ||
169 factor = std::log(
height / state.roughness_height) - sfuns.calc_psi_h(zeta);
175 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
183 height <= roughness_height ||
190 factor = std::log(
height / roughness_height) - sfuns.calc_psi_m(zeta);
196 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
211 profile.potential_temperature = state.theta_surface +
212 state.theta_star /
KAPPA * profile_factor;
213 profile.mixing_ratio = state.mixing_ratio_surface +
214 state.mixing_ratio_star /
KAPPA * profile_factor;
215 return valid_real(profile.potential_temperature) &&
217 profile.potential_temperature >
amrex::Real(0.0) &&
237 const amrex::MultiFab*
cons =
nullptr;
251 void fill (amrex::MultiFab& dst,
252 int temperature_comp,
253 int mixing_ratio_comp,
266 const amrex::MultiFab*
xvel =
nullptr;
267 const amrex::MultiFab*
yvel =
nullptr;
constexpr amrex::Real KAPPA
Definition: ERF_Constants.H:71
constexpr amrex::Real lsm_undefined
Definition: ERF_Constants.H:28
Real height
Definition: ERF_InitCustomPert_SquallLine.H:37
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_NearSurfaceDiagnostics.cpp:15
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_vegetated_tile_is_used(amrex::Real vegetation_fraction) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:83
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_bundle_vegetation_fraction_is_valid(const NativeBundle &bundle) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:123
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_bundle_temperature_is_valid(const NativeBundle &bundle) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:95
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE NativeAggregate aggregate_native_bundle(const NativeBundle &bundle) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:131
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_bundle_is_valid(const NativeBundle &bundle) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:71
constexpr amrex::Real wind_height
Definition: ERF_NearSurfaceDiagnostics.H:274
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_bare_tile_is_used(amrex::Real vegetation_fraction) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:89
void fill(MultiFab &dst, int temperature_comp, int mixing_ratio_comp, int source_comp, const Sources &sources, Real missing_value)
Definition: ERF_NearSurfaceDiagnostics.cpp:42
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool evaluate_most_momentum_factor(amrex::Real roughness_height, amrex::Real obukhov_length, amrex::Real height, amrex::Real &factor) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:176
void fill_wind_10m(MultiFab &dst, int u_comp, int v_comp, int u_east_comp, int v_north_comp, const WindSources &sources, Real missing_value)
Definition: ERF_NearSurfaceDiagnostics.cpp:222
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool native_bundle_mixing_ratio_is_valid(const NativeBundle &bundle) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:109
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real most_profile_zeta_max() noexcept
Definition: ERF_NearSurfaceDiagnostics.H:152
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool valid_noahmp_component(amrex::Real value) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:55
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool evaluate_most_profile(const MostState &state, amrex::Real height, MostProfile &profile) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:197
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool valid_real(amrex::Real value) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool evaluate_most_factor(const MostState &state, amrex::Real height, amrex::Real &factor) noexcept
Definition: ERF_NearSurfaceDiagnostics.H:155
Definition: ERF_NearSurfaceDiagnostics.H:43
amrex::Real potential_temperature
Definition: ERF_NearSurfaceDiagnostics.H:44
amrex::Real mixing_ratio
Definition: ERF_NearSurfaceDiagnostics.H:45
Definition: ERF_NearSurfaceDiagnostics.H:33
amrex::Real mixing_ratio_star
Definition: ERF_NearSurfaceDiagnostics.H:37
amrex::Real theta_star
Definition: ERF_NearSurfaceDiagnostics.H:35
amrex::Real theta_surface
Definition: ERF_NearSurfaceDiagnostics.H:34
amrex::Real obukhov_length
Definition: ERF_NearSurfaceDiagnostics.H:39
amrex::Real mixing_ratio_surface
Definition: ERF_NearSurfaceDiagnostics.H:36
amrex::Real roughness_height
Definition: ERF_NearSurfaceDiagnostics.H:38
Definition: ERF_NearSurfaceDiagnostics.H:27
amrex::Real temperature
Definition: ERF_NearSurfaceDiagnostics.H:28
amrex::Real mixing_ratio
Definition: ERF_NearSurfaceDiagnostics.H:29
Definition: ERF_NearSurfaceDiagnostics.H:18
amrex::Real mixing_ratio_vegetated
Definition: ERF_NearSurfaceDiagnostics.H:21
amrex::Real temperature_vegetated
Definition: ERF_NearSurfaceDiagnostics.H:19
amrex::Real vegetation_fraction
Definition: ERF_NearSurfaceDiagnostics.H:23
amrex::Real mixing_ratio_bare
Definition: ERF_NearSurfaceDiagnostics.H:22
amrex::Real temperature_bare
Definition: ERF_NearSurfaceDiagnostics.H:20
Definition: ERF_NearSurfaceDiagnostics.H:222
const amrex::MultiFab * theta_surface
Definition: ERF_NearSurfaceDiagnostics.H:229
const amrex::MultiFab * z_phys_nd
Definition: ERF_NearSurfaceDiagnostics.H:238
bool moist
Definition: ERF_NearSurfaceDiagnostics.H:242
bool has_lsm
Definition: ERF_NearSurfaceDiagnostics.H:243
int klo
Definition: ERF_NearSurfaceDiagnostics.H:241
const amrex::iMultiFab * land_mask
Definition: ERF_NearSurfaceDiagnostics.H:236
const amrex::MultiFab * obukhov_length
Definition: ERF_NearSurfaceDiagnostics.H:234
const amrex::MultiFab * roughness_height
Definition: ERF_NearSurfaceDiagnostics.H:233
const amrex::MultiFab * native_temperature_bare
Definition: ERF_NearSurfaceDiagnostics.H:224
const amrex::MultiFab * cons
Definition: ERF_NearSurfaceDiagnostics.H:237
const amrex::MultiFab * theta_star
Definition: ERF_NearSurfaceDiagnostics.H:230
const amrex::MultiFab * native_temperature_vegetated
Definition: ERF_NearSurfaceDiagnostics.H:223
const amrex::MultiFab * mixing_ratio_surface
Definition: ERF_NearSurfaceDiagnostics.H:231
const amrex::MultiFab * native_mixing_ratio_bare
Definition: ERF_NearSurfaceDiagnostics.H:226
amrex::Real dz
Definition: ERF_NearSurfaceDiagnostics.H:240
const amrex::MultiFab * source_mask
Definition: ERF_NearSurfaceDiagnostics.H:235
const amrex::MultiFab * mixing_ratio_star
Definition: ERF_NearSurfaceDiagnostics.H:232
const amrex::MultiFab * native_mixing_ratio_vegetated
Definition: ERF_NearSurfaceDiagnostics.H:225
const amrex::MultiFab * native_vegetation_fraction
Definition: ERF_NearSurfaceDiagnostics.H:227
Definition: ERF_NearSurfaceDiagnostics.H:262
const amrex::MultiFab * u_star
Definition: ERF_NearSurfaceDiagnostics.H:263
const amrex::MultiFab * yvel
Definition: ERF_NearSurfaceDiagnostics.H:267
const amrex::MultiFab * cos_alpha
Definition: ERF_NearSurfaceDiagnostics.H:268
const amrex::MultiFab * roughness_height
Definition: ERF_NearSurfaceDiagnostics.H:264
const amrex::MultiFab * xvel
Definition: ERF_NearSurfaceDiagnostics.H:266
const amrex::MultiFab * sin_alpha
Definition: ERF_NearSurfaceDiagnostics.H:269
const amrex::MultiFab * obukhov_length
Definition: ERF_NearSurfaceDiagnostics.H:265
int klo
Definition: ERF_NearSurfaceDiagnostics.H:270
Definition: ERF_MOSTUtils.H:67