4 #ifndef ERF_PLOTFILE_SELECTION_H_
5 #define ERF_PLOTFILE_SELECTION_H_
10 #include <AMReX_Vector.H>
76 const int qstate_moist_size,
77 const int qstate_size)
86 bool interval_diagnostic_consumed,
87 bool compute_mean_vars,
88 const std::string& reset_mode)
90 return plotfiles_written > 0 && interval_diagnostic_consumed &&
91 compute_mean_vars && reset_mode ==
"plotfile";
101 if (q < 1 || q > 11)
return -1;
117 if (
name.size() > 4 &&
name.compare(0, 4,
"rhoQ") == 0) {
118 const std::string suffix =
name.substr(4);
119 if (!suffix.empty() && std::all_of(suffix.cbegin(), suffix.cend(),
120 [] (
const char c) { return c >=
'0' && c <=
'9'; })) {
121 const int q = std::stoi(suffix);
135 static constexpr
const char* names[] = {
136 "temp",
"theta",
"KE",
"scalar",
"soundspeed",
"reflectivity",
137 "max_reflectivity",
"mucape",
"vorticity_x",
"vorticity_y",
"vorticity_z",
138 "helicity",
"local_helicity",
"magvel",
"divU",
"pres_hse",
"dens_hse",
139 "theta_hse",
"pi_hse",
"qv_hse",
"pressure",
"pert_pres",
"pert_dens",
"buoyancy",
140 "eq_pot_temp",
"VPD",
"dpdx",
"dpdy",
"dpdz",
"pres_hse_x",
"pres_hse_y",
141 "pres_hse_z",
"z_phys",
"detJ",
"h_xi",
"h_eta",
"h_zeta",
142 "mapfac",
"lat_m",
"lon_m",
"pblh",
143 "shoc_cldfrac",
"shoc_ql",
"shoc_ql2",
"shoc_cond",
"wqls_sec",
"wthv_sec",
144 "w_sec",
"thl_sec",
"qw_sec",
"qwthl_sec",
"wthl_sec",
"wqw_sec",
"w3",
145 "brunt",
"isotropy",
"shear_prod",
"buoy_prod",
"diss_tke",
146 "terrain_IB_mask",
"volfrac"
149 for (
const char* candidate : names) {
150 if (
name == candidate)
return true;
153 #ifdef ERF_COMPUTE_ERROR
154 if (
name ==
"xvel_err" ||
name ==
"yvel_err" ||
name ==
"zvel_err" ||
155 name ==
"pp_err")
return true;
172 static constexpr
const char* names[] = {
173 "u_mean",
"v_mean",
"w_mean",
"theta_mean",
174 "uu_mean",
"vv_mean",
"ww_mean",
"uw_mean",
"vw_mean",
"wtheta_mean",
175 "uu_fluct",
"vv_fluct",
"ww_fluct",
"uw_fluct",
"vw_fluct",
"wtheta_fluct",
"tke_resolved"
178 for (
const char* candidate : names) {
179 if (
name == candidate)
return true;
186 const amrex::Vector<std::string>& names)
188 return std::any_of(names.begin(), names.end(),
189 [] (
const std::string&
name) {
190 return plot3d_interval_mean_diagnostic(name);
207 if (cons_comp >= 0) {
218 if (moist_status.governed)
return moist_status.
available;
220 if (
name ==
"u_t_avg" ||
name ==
"v_t_avg" ||
name ==
"w_t_avg" ||
221 name ==
"umag_t_avg") {
227 if (
name ==
"qsrc_sw" ||
name ==
"qsrc_lw") {
246 for (
const auto&
name : names) {
247 if (
name ==
"pressure" ||
name ==
"pert_pres" ||
249 name ==
"eq_pot_temp" ||
name ==
"VPD" ||
name ==
"qsat" ||
250 name ==
"rel_humidity") {
253 #ifdef ERF_COMPUTE_ERROR
254 if (
name ==
"pp_err")
return true;
260 inline amrex::Vector<std::string>
262 const amrex::Vector<std::string>& configured)
264 amrex::Vector<std::string> selected;
265 for (
const auto& count_name : requested) {
266 constexpr std::size_t suffix_size = 6;
267 if (count_name.size() > suffix_size &&
268 count_name.compare(count_name.size() - suffix_size, suffix_size,
"_count") == 0) {
269 const std::string container = count_name.substr(0, count_name.size() - suffix_size);
270 if (std::find(configured.cbegin(), configured.cend(), container) == configured.cend() ||
271 std::find(selected.cbegin(), selected.cend(), container) != selected.cend()) {
274 selected.push_back(container);
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:43
#define Rho_comp
Definition: ERF_IndexDefines.H:39
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:40
#define NDRY
Definition: ERF_IndexDefines.H:13
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
#define NMOIST_max
Definition: ERF_IndexDefines.H:19
#define RhoKE_comp
Definition: ERF_IndexDefines.H:41
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:101
@ q
Definition: ERF_WSM6.H:184
Definition: ERF_PlotfileSelection.H:15
int plot3d_q_conserved_component_index(const int q)
Conserved-state component holding the q-th moist variable, or -1 if q is outside the fixed RhoQ1....
Definition: ERF_PlotfileSelection.H:99
int plot3d_conserved_component_index(const std::string &name)
Conserved-state component behind a raw state variable name ("density", "rhotheta",...
Definition: ERF_PlotfileSelection.H:110
void plot3d_set_state_capabilities(Plot3DSelectionCapabilities &caps, const MoistureComponentIndices &mi, const int qstate_moist_size, const int qstate_size)
Record the conserved-state layout of a run on its capabilities.
Definition: ERF_PlotfileSelection.H:74
bool plot3d_batch_resets_interval_means(int plotfiles_written, bool interval_diagnostic_consumed, bool compute_mean_vars, const std::string &reset_mode)
Definition: ERF_PlotfileSelection.H:85
bool plot3d_interval_mean_diagnostic(const std::string &name)
Whether a named 3D plot variable can be written by this run.
Definition: ERF_PlotfileSelection.H:170
bool plot3d_selection_has_interval_mean_diagnostic(const amrex::Vector< std::string > &names)
Definition: ERF_PlotfileSelection.H:185
bool plot3d_needs_pressure(const amrex::Vector< std::string > &names)
Whether any requested variable needs the pressure field computed.
Definition: ERF_PlotfileSelection.H:244
bool plot3d_fixed_variable_available(const std::string &name, const Plot3DSelectionCapabilities &caps)
Definition: ERF_PlotfileSelection.H:195
amrex::Vector< std::string > plot3d_selected_particle_count_names(const amrex::Vector< std::string > &requested, const amrex::Vector< std::string > &configured)
Definition: ERF_PlotfileSelection.H:261
bool plot3d_fixed_unconditional_diagnostic(const std::string &name)
Diagnostics that every run can write, moist or dry.
Definition: ERF_PlotfileSelection.H:133
bool available
the active scheme carries the data behind it
Definition: ERF_DataStruct.H:565
The moisture data carried by the active microphysics scheme.
Definition: ERF_DataStruct.H:195
bool has_comp(int comp) const
Test whether a conserved-state component holds one of the moisture variables this scheme carries.
Definition: ERF_DataStruct.H:487
VarAvailability query_var(const std::string &name) const
Classify an output variable name against this index map.
Definition: ERF_DataStruct.H:579
What the active run can supply to a 3D plotfile.
Definition: ERF_PlotfileSelection.H:29
bool eddy_diffusivity_storage
Definition: ERF_PlotfileSelection.H:54
MoistureComponentIndices moisture_indices
The active moisture scheme's component/diagnostic map.
Definition: ERF_PlotfileSelection.H:49
int moist_state_size
Definition: ERF_PlotfileSelection.H:46
bool dissipation_storage
Definition: ERF_PlotfileSelection.H:55
bool radiation_heating_storage
Definition: ERF_PlotfileSelection.H:53
bool wall_distance_storage
Definition: ERF_PlotfileSelection.H:56
bool time_average_storage
Definition: ERF_PlotfileSelection.H:51
int conserved_state_size
Definition: ERF_PlotfileSelection.H:34
bool interval_mean_storage
Definition: ERF_PlotfileSelection.H:52