97 for (
int k = 0; k <= shoc_top; ++k) {
98 const amrex::Real mass = v.rho(ic,k,0) * v.dz(ic,k,0);
109 v.qi_base(ic,k,0), v.shoc_ql(ic,k,0),
110 tabs_new, qv_new, qc_new, qi_new);
112 energy_before += mass *
moist_energy(tabs_old, v.zt(ic,k,0),
113 v.qv_base(ic,k,0), v.qc_base(ic,k,0), v.qi_base(ic,k,0),
114 v.u_base(ic,k,0), v.v_base(ic,k,0), v.tke_base(ic,k,0));
115 energy_after += mass *
moist_energy(tabs_new, v.zt(ic,k,0),
116 qv_new, qc_new, qi_new,
117 v.u(ic,k,0), v.v(ic,k,0), v.tke(ic,k,0));
128 * (
Cp_d * v.exner(ic,0,0) * v.surf_sens_flux(ic,0,0)
129 + latent_flux_coeff * v.surf_lat_flux(ic,0,0));
130 const amrex::Real delta_tabs = (energy_target - energy_after) / (
Cp_d * air_mass);
132 for (
int k = 0; k <= shoc_top; ++k) {
133 v.thetal(ic,k,0) += delta_tabs / amrex::max(v.exner(ic,k,0),
amrex::Real(1.0e-12));
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:44
constexpr amrex::Real L_v
Definition: ERF_Constants.H:48
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real latent_ice() noexcept
Definition: ERF_ShocConstants.H:13
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int diagnose_active_top(const amrex::Array4< const amrex::Real > &tke, int ic, int nlev) noexcept
Definition: ERF_ShocEnergyFixer.H:68
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void reconstruct_pdf_state(amrex::Real thetal, amrex::Real qw, amrex::Real exner, amrex::Real qi_seed, amrex::Real pdf_ql, amrex::Real &tabs, amrex::Real &qv, amrex::Real &qc, amrex::Real &qi) noexcept
Definition: ERF_ShocThermoUtils.H:86
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real moist_energy(amrex::Real tabs, amrex::Real z, amrex::Real qv, amrex::Real qc, amrex::Real qi, amrex::Real u, amrex::Real v, amrex::Real tke) noexcept
Definition: ERF_ShocThermoUtils.H:64
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real temperature_from_thetal(amrex::Real thetal, amrex::Real qc, amrex::Real qi, amrex::Real exner) noexcept
Definition: ERF_ShocThermoUtils.H:40