ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
erf_plotfile Namespace Reference

Classes

struct  Plot3DSelectionCapabilities
 What the active run can supply to a 3D plotfile. More...
 

Functions

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. More...
 
bool plot3d_batch_resets_interval_means (int plotfiles_written, bool interval_diagnostic_consumed, bool compute_mean_vars, const std::string &reset_mode)
 
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..RhoQ11 layout. More...
 
int plot3d_conserved_component_index (const std::string &name)
 Conserved-state component behind a raw state variable name ("density", "rhotheta", "rhoQ3", ...), or -1 if the name is not one. More...
 
bool plot3d_fixed_unconditional_diagnostic (const std::string &name)
 Diagnostics that every run can write, moist or dry. More...
 
bool plot3d_interval_mean_diagnostic (const std::string &name)
 Whether a named 3D plot variable can be written by this run. More...
 
bool plot3d_selection_has_interval_mean_diagnostic (const amrex::Vector< std::string > &names)
 
bool plot3d_fixed_variable_available (const std::string &name, const Plot3DSelectionCapabilities &caps)
 
bool plot3d_needs_pressure (const amrex::Vector< std::string > &names)
 Whether any requested variable needs the pressure field computed. More...
 
amrex::Vector< std::string > plot3d_selected_particle_count_names (const amrex::Vector< std::string > &requested, const amrex::Vector< std::string > &configured)
 

Function Documentation

◆ plot3d_batch_resets_interval_means()

bool erf_plotfile::plot3d_batch_resets_interval_means ( int  plotfiles_written,
bool  interval_diagnostic_consumed,
bool  compute_mean_vars,
const std::string &  reset_mode 
)
inline
89 {
90  return plotfiles_written > 0 && interval_diagnostic_consumed &&
91  compute_mean_vars && reset_mode == "plotfile";
92 }

Referenced by ERF::ResetIntervalMeansAfter3DPlotfileBatch().

Here is the caller graph for this function:

◆ plot3d_conserved_component_index()

int erf_plotfile::plot3d_conserved_component_index ( const std::string &  name)
inline

Conserved-state component behind a raw state variable name ("density", "rhotheta", "rhoQ3", ...), or -1 if the name is not one.

111 {
112  if (name == "density") return Rho_comp;
113  if (name == "rhotheta") return RhoTheta_comp;
114  if (name == "rhoKE") return RhoKE_comp;
115  if (name == "rhoadv_0") return RhoScalar_comp;
116 
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);
123  }
124  }
125 
126  return -1;
127 }
#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 RhoKE_comp
Definition: ERF_IndexDefines.H:41
std::string name
Definition: ERF_Plotfile2DCatalog.cpp:101
@ q
Definition: ERF_WSM6.H:184
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

Referenced by plot3d_fixed_variable_available(), and ERF::Write3DPlotFile().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ plot3d_fixed_unconditional_diagnostic()

bool erf_plotfile::plot3d_fixed_unconditional_diagnostic ( const std::string &  name)
inline

Diagnostics that every run can write, moist or dry.

134 {
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"
147  };
148 
149  for (const char* candidate : names) {
150  if (name == candidate) return true;
151  }
152 
153 #ifdef ERF_COMPUTE_ERROR
154  if (name == "xvel_err" || name == "yvel_err" || name == "zvel_err" ||
155  name == "pp_err") return true;
156 #endif
157 
158  return false;
159 }

Referenced by plot3d_fixed_variable_available().

Here is the caller graph for this function:

◆ plot3d_fixed_variable_available()

bool erf_plotfile::plot3d_fixed_variable_available ( const std::string &  name,
const Plot3DSelectionCapabilities caps 
)
inline
197 {
198  const MoistureComponentIndices& mi = caps.moisture_indices;
199 
200  // Raw conserved-state components. Inside the moist window the moisture map
201  // decides, since allocated-but-never-integrated slots must not be published
202  // as data. Below the window the state is always allocated dry-or-moist, and
203  // above it are the non-water species a scheme may add -- both of those are
204  // real data whenever they were allocated, so a bounds check is the right
205  // test for them.
206  const int cons_comp = plot3d_conserved_component_index(name);
207  if (cons_comp >= 0) {
208  if ( (cons_comp >= RhoQ1_comp) &&
209  (cons_comp < RhoQ1_comp + caps.moist_state_size) ) {
210  return mi.has_comp(cons_comp);
211  }
212  return (cons_comp < caps.conserved_state_size);
213  }
214 
215  // Every moisture variable -- species, aggregates and moist diagnostics --
216  // is decided by the scheme's index map.
217  const auto moist_status = mi.query_var(name);
218  if (moist_status.governed) return moist_status.available;
219 
220  if (name == "u_t_avg" || name == "v_t_avg" || name == "w_t_avg" ||
221  name == "umag_t_avg") {
222  return caps.time_average_storage;
223  }
225  return caps.interval_mean_storage;
226  }
227  if (name == "qsrc_sw" || name == "qsrc_lw") {
228  return caps.radiation_heating_storage;
229  }
230  if (name == "nut" || name == "Kmv" || name == "Kmh" ||
231  name == "Khv" || name == "Khh" || name == "Lturb") {
232  return caps.eddy_diffusivity_storage;
233  }
234  if (name == "diss") return caps.dissipation_storage;
235  if (name == "walldist") return caps.wall_distance_storage;
236 
238 }
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:45
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
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_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

Referenced by ERF::setPlotVariables(), and ERF::setSubVolVariables().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ plot3d_interval_mean_diagnostic()

bool erf_plotfile::plot3d_interval_mean_diagnostic ( const std::string &  name)
inline

Whether a named 3D plot variable can be written by this run.

The order of the tests below is the order of authority: raw state components answer from the state layout, moisture variables answer from the active scheme's index map, optional diagnostics answer from their storage flag, and anything left is an always-available diagnostic.

171 {
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"
176  };
177 
178  for (const char* candidate : names) {
179  if (name == candidate) return true;
180  }
181  return false;
182 }

Referenced by plot3d_fixed_variable_available().

Here is the caller graph for this function:

◆ plot3d_needs_pressure()

bool erf_plotfile::plot3d_needs_pressure ( const amrex::Vector< std::string > &  names)
inline

Whether any requested variable needs the pressure field computed.

245 {
246  for (const auto& name : names) {
247  if (name == "pressure" || name == "pert_pres" ||
248  name == "dpdx" || name == "dpdy" || name == "dpdz" ||
249  name == "eq_pot_temp" || name == "VPD" || name == "qsat" ||
250  name == "rel_humidity") {
251  return true;
252  }
253 #ifdef ERF_COMPUTE_ERROR
254  if (name == "pp_err") return true;
255 #endif
256  }
257  return false;
258 }

Referenced by ERF::Write3DPlotFile().

Here is the caller graph for this function:

◆ plot3d_q_conserved_component_index()

int erf_plotfile::plot3d_q_conserved_component_index ( const int  q)
inline

Conserved-state component holding the q-th moist variable, or -1 if q is outside the fixed RhoQ1..RhoQ11 layout.

100 {
101  if (q < 1 || q > 11) return -1;
102  return RhoQ1_comp + q - 1;
103 }

Referenced by plot3d_conserved_component_index().

Here is the caller graph for this function:

◆ plot3d_selected_particle_count_names()

amrex::Vector<std::string> erf_plotfile::plot3d_selected_particle_count_names ( const amrex::Vector< std::string > &  requested,
const amrex::Vector< std::string > &  configured 
)
inline
263 {
264  amrex::Vector<std::string> selected;
265  for (const auto& count_name : requested) {
266  constexpr std::size_t suffix_size = 6; // "_count"
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()) {
272  continue;
273  }
274  selected.push_back(container);
275  }
276  }
277  return selected;
278 }

Referenced by ERF::setPlotVariables(), and ERF::Write3DPlotFile().

Here is the caller graph for this function:

◆ plot3d_selection_has_interval_mean_diagnostic()

bool erf_plotfile::plot3d_selection_has_interval_mean_diagnostic ( const amrex::Vector< std::string > &  names)
inline
187 {
188  return std::any_of(names.begin(), names.end(),
189  [] (const std::string& name) {
190  return plot3d_interval_mean_diagnostic(name);
191  });
192 }

Referenced by ERF::InitData_post(), ERF::WriteAtFinalTime(), and ERF::WriteAtIntermediateTime().

Here is the caller graph for this function:

◆ plot3d_set_state_capabilities()

void erf_plotfile::plot3d_set_state_capabilities ( Plot3DSelectionCapabilities caps,
const MoistureComponentIndices mi,
const int  qstate_moist_size,
const int  qstate_size 
)
inline

Record the conserved-state layout of a run on its capabilities.

Every output path that selects raw state names must describe the state the same way, so the three fields are filled here rather than at each call site.

Parameters
capsCapabilities to fill in.
miThe active scheme's component/diagnostic map.
qstate_moist_sizeConserved components in the moist window (Microphysics::Get_Qstate_Moist_Size()).
qstate_sizeAll conserved components the microphysics adds, moist window plus non-water species (Microphysics::Get_Qstate_Size()).
78 {
79  caps.moisture_indices = mi;
80  caps.moist_state_size = qstate_moist_size;
81  caps.conserved_state_size = NDRY + NSCALARS + qstate_size;
82 }
#define NDRY
Definition: ERF_IndexDefines.H:13
#define NSCALARS
Definition: ERF_IndexDefines.H:16

Referenced by ERF::setPlotVariables(), and ERF::setSubVolVariables().

Here is the caller graph for this function: