1 #ifndef ERF_SHOC_DRIVER_H_
2 #define ERF_SHOC_DRIVER_H_
9 #include <AMReX_BoxArray.H>
10 #include <AMReX_MultiFab.H>
15 const amrex::Box& domain);
26 MoistureType moisture_type,
27 std::string& error_message)
34 "Native SHOC host_diffusion with moisture is not yet supported because SHOC does not own cloud macrophysics in this mode while SHOC-family microphysics condensation is suppressed. Use state_update for moist SHOC runs, or run host_diffusion only for dry cases until a transport-aware microphysics ownership predicate is implemented.";
42 std::string& error_message)
50 "Native SHOC state_update does not yet support number-aware microphysics layouts with cloud/ice number concentrations. A number closure is required before SHOC can update cloud mass in these layouts.";
60 amrex::MultiFab&
xvel,
61 amrex::MultiFab&
yvel,
62 amrex::MultiFab&
zvel,
63 amrex::MultiFab*
tau13,
64 amrex::MultiFab*
tau23,
65 amrex::MultiFab* hfx3,
66 amrex::MultiFab* qfx3,
67 amrex::MultiFab* eddy_diffs,
68 amrex::MultiFab& z_phys_nd,
69 const amrex::Geometry& geom,
74 void add_fast_tend (amrex::Vector<amrex::MultiFab>& S_rhs)
const;
76 const amrex::Box& tbx,
77 const amrex::Array4<amrex::Real>& cell_rhs)
const;
178 const amrex::MultiFab&
xvel,
179 const amrex::MultiFab&
yvel,
180 const amrex::MultiFab& eddy_diffs);
182 const amrex::MFIter& mfi,
183 const amrex::MultiFab&
cons,
184 const amrex::MultiFab& eddy_diffs)
const;
186 const amrex::MFIter& mfi);
188 const amrex::MFIter& mfi)
const;
190 const amrex::MFIter& mfi);
192 amrex::MultiFab&
xvel,
193 amrex::MultiFab&
yvel,
196 const amrex::MFIter& mfi,
197 const amrex::MultiFab& z_phys_nd,
198 const amrex::MultiFab* hfx3,
199 const amrex::MultiFab* qfx3,
200 const amrex::MultiFab*
tau13,
201 const amrex::MultiFab*
tau23,
202 const amrex::Geometry& geom,
@ tau23
Definition: ERF_DataStruct.H:32
@ tau13
Definition: ERF_DataStruct.H:32
bool shoc_boxarray_spans_full_height(const amrex::BoxArray &ba, const amrex::Box &domain)
bool shoc_driver_host_diffusion_moisture_supported(const ShocRuntimeOptions &opts, MoistureType moisture_type, std::string &error_message)
Definition: ERF_ShocDriver.H:25
bool shoc_layout_requires_number_closure(const MoistureComponentIndices &indices, int ncomp) noexcept
Definition: ERF_ShocDriver.H:18
bool shoc_driver_state_update_layout_supported(const ShocRuntimeOptions &opts, const MoistureComponentIndices &indices, int ncomp, std::string &error_message)
Definition: ERF_ShocDriver.H:39
amrex::Real Real
Definition: ERF_ShocInterface.H:19
bool shoc_uses_host_diffusion(ShocTransportMode mode)
Definition: ERF_ShocTypes.H:57
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool shoc_valid_comp(int comp, int ncomp)
Definition: ERF_ShocTypes.H:374
bool shoc_uses_state_update(ShocTransportMode mode)
Definition: ERF_ShocTypes.H:51
Definition: ERF_ShocDriver.H:55
void apply_state_update(amrex::MultiFab &cons, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::Real dt) const
Definition: ERF_ShocDriver.cpp:913
amrex::MultiFab * m_cons_ptr
Definition: ERF_ShocDriver.H:167
amrex::MultiFab m_shoc_ql_cc
Definition: ERF_ShocDriver.H:150
const amrex::MultiFab & shoc_ql2_diagnostics() const
Definition: ERF_ShocDriver.H:109
bool has_consumed_surface_flux_diagnostics() const
Definition: ERF_ShocDriver.H:89
ShocRuntimeOptions m_opts
Definition: ERF_ShocDriver.H:128
bool m_prev_turb_valid
Definition: ERF_ShocDriver.H:175
const amrex::MultiFab & w3_diagnostics() const
Definition: ERF_ShocDriver.H:119
void debug_check_bad_column(const ShocColumnData &col, const amrex::MFIter &mfi, const amrex::MultiFab &z_phys_nd, const amrex::MultiFab *hfx3, const amrex::MultiFab *qfx3, const amrex::MultiFab *tau13, const amrex::MultiFab *tau23, const amrex::Geometry &geom, amrex::Real dt) const
Definition: ERF_ShocDriver.cpp:939
bool uses_momentum_host_diffusion() const
Definition: ERF_ShocDriver.cpp:877
amrex::MultiFab m_qw_sec_cc
Definition: ERF_ShocDriver.H:157
amrex::MultiFab m_diss_tke_cc
Definition: ERF_ShocDriver.H:166
amrex::MultiFab m_qwthl_sec_cc
Definition: ERF_ShocDriver.H:158
bool uses_host_diffusion() const
Definition: ERF_ShocDriver.cpp:859
void set_diff_stresses() const
Definition: ERF_ShocDriver.cpp:801
void advance(amrex::MultiFab &cons, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::MultiFab &zvel, amrex::MultiFab *tau13, amrex::MultiFab *tau23, amrex::MultiFab *hfx3, amrex::MultiFab *qfx3, amrex::MultiFab *eddy_diffs, amrex::MultiFab &z_phys_nd, const amrex::Geometry &geom, amrex::Real dt)
Definition: ERF_ShocDriver.cpp:461
const amrex::MultiFab & consumed_laten_flux_diagnostics() const
Definition: ERF_ShocDriver.H:101
const amrex::MultiFab & shoc_ql_diagnostics() const
Definition: ERF_ShocDriver.H:108
const amrex::MultiFab & shoc_cond_diagnostics() const
Definition: ERF_ShocDriver.H:110
amrex::MultiFab * m_qfx3_ptr
Definition: ERF_ShocDriver.H:169
int m_advance_calls
Definition: ERF_ShocDriver.H:174
const amrex::MultiFab & qw_sec_diagnostics() const
Definition: ERF_ShocDriver.H:115
amrex::MultiFab m_pblh_cc
Definition: ERF_ShocDriver.H:146
amrex::MultiFab m_eddy_coeffs_cc
Definition: ERF_ShocDriver.H:141
const amrex::MultiFab & diss_tke_diagnostics() const
Definition: ERF_ShocDriver.H:124
const amrex::MultiFab & brunt_diagnostics() const
Definition: ERF_ShocDriver.H:120
amrex::MultiFab m_buoy_prod_cc
Definition: ERF_ShocDriver.H:165
amrex::MultiFab m_wthl_sec_cc
Definition: ERF_ShocDriver.H:159
amrex::MultiFab m_prev_wthv_sec_cc
Definition: ERF_ShocDriver.H:143
amrex::MultiFab m_u_tend_fc
Definition: ERF_ShocDriver.H:139
const amrex::MultiFab & shoc_cldfrac_diagnostics() const
Definition: ERF_ShocDriver.H:107
const amrex::MultiFab & shear_prod_diagnostics() const
Definition: ERF_ShocDriver.H:122
bool owns_scalar_surface_fluxes() const
Definition: ERF_ShocDriver.cpp:889
amrex::MultiFab m_wqls_sec_cc
Definition: ERF_ShocDriver.H:154
amrex::MultiFab * m_tau13_ptr
Definition: ERF_ShocDriver.H:170
bool has_native_diagnostics() const
Definition: ERF_ShocDriver.H:88
bool needs_host_surface_momentum_stresses() const
Definition: ERF_ShocDriver.cpp:901
const amrex::MultiFab & wthl_sec_diagnostics() const
Definition: ERF_ShocDriver.H:117
void add_fast_tend(amrex::Vector< amrex::MultiFab > &S_rhs) const
Definition: ERF_ShocDriver.cpp:842
amrex::MultiFab m_v_tend_fc
Definition: ERF_ShocDriver.H:140
void seed_carried_buoyancy_flux(ShocColumnData &col, const amrex::MFIter &mfi) const
Definition: ERF_ShocDriver.cpp:433
amrex::MultiFab m_w3_cc
Definition: ERF_ShocDriver.H:161
const amrex::MultiFab & shoc_olen_diagnostics() const
Definition: ERF_ShocDriver.H:106
bool owns_surface_fluxes() const
Definition: ERF_ShocDriver.cpp:907
void print_debug_summary(amrex::Real dt) const
Definition: ERF_ShocDriver.cpp:1470
const amrex::MultiFab & isotropy_diagnostics() const
Definition: ERF_ShocDriver.H:121
amrex::MultiFab m_shoc_ustar_cc
Definition: ERF_ShocDriver.H:147
void seed_carried_turbulence(ShocColumnData &col, const amrex::MFIter &mfi, const amrex::MultiFab &cons, const amrex::MultiFab &eddy_diffs) const
Definition: ERF_ShocDriver.cpp:401
amrex::MultiFab m_theta_tend_cc
Definition: ERF_ShocDriver.H:132
amrex::MultiFab m_qc_tend_cc
Definition: ERF_ShocDriver.H:134
const amrex::MultiFab & shoc_ustar_diagnostics() const
Definition: ERF_ShocDriver.H:105
ShocDriver(int lev, const SolverChoice &solver_choice)
Definition: ERF_ShocDriver.cpp:304
const amrex::MultiFab & consumed_sens_flux_diagnostics() const
Definition: ERF_ShocDriver.H:97
amrex::MultiFab m_wqw_sec_cc
Definition: ERF_ShocDriver.H:160
const amrex::MultiFab & w_sec_diagnostics() const
Definition: ERF_ShocDriver.H:111
const amrex::MultiFab & wqw_sec_diagnostics() const
Definition: ERF_ShocDriver.H:118
amrex::MultiFab m_shoc_olen_cc
Definition: ERF_ShocDriver.H:148
bool disables_momentum_transport() const
Definition: ERF_ShocDriver.cpp:883
amrex::MultiFab m_prev_turb_cc
Definition: ERF_ShocDriver.H:142
bool debug_summary_enabled() const
Definition: ERF_ShocDriver.H:87
amrex::MultiFab m_consumed_laten_flux_cc
Definition: ERF_ShocDriver.H:145
amrex::MultiFab m_brunt_cc
Definition: ERF_ShocDriver.H:162
amrex::MultiFab m_wthv_sec_cc
Definition: ERF_ShocDriver.H:155
amrex::MultiFab m_shear_prod_cc
Definition: ERF_ShocDriver.H:164
amrex::MultiFab m_w_sec_cc
Definition: ERF_ShocDriver.H:153
void store_carried_buoyancy_flux(const ShocColumnData &col, const amrex::MFIter &mfi)
Definition: ERF_ShocDriver.cpp:449
const amrex::MultiFab & qwthl_sec_diagnostics() const
Definition: ERF_ShocDriver.H:116
void store_carried_turbulence(const ShocColumnData &col, const amrex::MFIter &mfi)
Definition: ERF_ShocDriver.cpp:420
bool uses_state_update() const
Definition: ERF_ShocDriver.cpp:865
void ensure_storage(const amrex::MultiFab &cons, const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &eddy_diffs)
Definition: ERF_ShocDriver.cpp:320
bool uses_momentum_state_update() const
Definition: ERF_ShocDriver.cpp:871
MoistureComponentIndices m_moisture_indices
Definition: ERF_ShocDriver.H:130
amrex::MultiFab m_shoc_cldfrac_cc
Definition: ERF_ShocDriver.H:149
amrex::MultiFab m_tke_tend_cc
Definition: ERF_ShocDriver.H:136
amrex::MultiFab m_qi_tend_cc
Definition: ERF_ShocDriver.H:135
void set_eddy_diffs() const
Definition: ERF_ShocDriver.cpp:780
amrex::MultiFab m_thl_sec_cc
Definition: ERF_ShocDriver.H:156
bool owns_momentum_surface_stresses() const
Definition: ERF_ShocDriver.cpp:895
const amrex::MultiFab & wqls_sec_diagnostics() const
Definition: ERF_ShocDriver.H:112
amrex::MultiFab * m_tau23_ptr
Definition: ERF_ShocDriver.H:171
const amrex::MultiFab & native_diagnostics() const
Definition: ERF_ShocDriver.H:93
const amrex::MultiFab & thl_sec_diagnostics() const
Definition: ERF_ShocDriver.H:114
int m_lev
Definition: ERF_ShocDriver.H:127
amrex::MultiFab * m_eddy_diffs_ptr
Definition: ERF_ShocDriver.H:172
amrex::MultiFab m_consumed_sens_flux_cc
Definition: ERF_ShocDriver.H:144
const amrex::MultiFab & pblh_diagnostics() const
Definition: ERF_ShocDriver.H:95
amrex::MultiFab m_isotropy_cc
Definition: ERF_ShocDriver.H:163
const amrex::MultiFab & wthv_sec_diagnostics() const
Definition: ERF_ShocDriver.H:113
MoistureType m_moisture_type
Definition: ERF_ShocDriver.H:129
amrex::MultiFab m_u_tend_cc
Definition: ERF_ShocDriver.H:137
amrex::MultiFab m_v_tend_cc
Definition: ERF_ShocDriver.H:138
const amrex::MultiFab & buoy_prod_diagnostics() const
Definition: ERF_ShocDriver.H:123
void add_slow_tend(const amrex::MFIter &mfi, const amrex::Box &tbx, const amrex::Array4< amrex::Real > &cell_rhs) const
Definition: ERF_ShocDriver.cpp:850
amrex::MultiFab m_shoc_ql2_cc
Definition: ERF_ShocDriver.H:151
amrex::MultiFab m_shoc_cond_cc
Definition: ERF_ShocDriver.H:152
amrex::MultiFab m_qv_tend_cc
Definition: ERF_ShocDriver.H:133
amrex::MultiFab * m_hfx3_ptr
Definition: ERF_ShocDriver.H:168
amrex::Vector< std::unique_ptr< ShocColumnWorkspace > > m_column_workspaces
Definition: ERF_ShocDriver.H:173
@ xvel
Definition: ERF_IndexDefines.H:175
@ cons
Definition: ERF_IndexDefines.H:174
@ zvel
Definition: ERF_IndexDefines.H:177
@ yvel
Definition: ERF_IndexDefines.H:176
Definition: ERF_DataStruct.H:106
Definition: ERF_ShocTypes.H:204
Definition: ERF_ShocTypes.H:81
ShocTransportMode transport_mode
Definition: ERF_ShocTypes.H:107
bool debug_summary
Definition: ERF_ShocTypes.H:104
Definition: ERF_DataStruct.H:141