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

Namespaces

 detail
 

Classes

struct  LevelMetadata
 
struct  Metadata
 

Functions

bool parse_metadata (std::istream &input, Metadata &result, std::string &error)
 
std::string validate_metadata (const Metadata &metadata, int expected_levels, int expected_components, const amrex::Vector< amrex::BoxArray > &expected_boxes)
 
int global_reset_done (const Metadata &metadata)
 
int legacy_reset_done (bool time_reset_mode, double checkpoint_time, double reset_time)
 
bool initialization_accumulates_state (bool restarting) noexcept
 
bool initialization_plot_consumes_interval (bool restarting, bool interval_diagnostic_selected) noexcept
 

Function Documentation

◆ global_reset_done()

int erf_interval_means::global_reset_done ( const Metadata metadata)
inline
166 {
167  for (const auto& record : metadata.level) {
168  if (record.reset_done != 0) return 1;
169  }
170  return 0;
171 }

Referenced by ERF::ReadCheckpointFile().

Here is the caller graph for this function:

◆ initialization_accumulates_state()

bool erf_interval_means::initialization_accumulates_state ( bool  restarting)
inlinenoexcept
181 {
182  return !restarting;
183 }

Referenced by ERF::InitData_post().

Here is the caller graph for this function:

◆ initialization_plot_consumes_interval()

bool erf_interval_means::initialization_plot_consumes_interval ( bool  restarting,
bool  interval_diagnostic_selected 
)
inlinenoexcept
188 {
189  return !restarting && interval_diagnostic_selected;
190 }

Referenced by ERF::InitData_post().

Here is the caller graph for this function:

◆ legacy_reset_done()

int erf_interval_means::legacy_reset_done ( bool  time_reset_mode,
double  checkpoint_time,
double  reset_time 
)
inline
175 {
176  return time_reset_mode && checkpoint_time >= reset_time ? 1 : 0;
177 }

Referenced by ERF::ReadCheckpointFile().

Here is the caller graph for this function:

◆ parse_metadata()

bool erf_interval_means::parse_metadata ( std::istream &  input,
Metadata result,
std::string &  error 
)
inline
86 {
87  std::string title;
88  if (!std::getline(input, title) || title != "ERF interval means checkpoint v1") {
89  error = "expected ERF interval means checkpoint v1 title";
90  return false;
91  }
92  if (!(input >> result.levels >> result.components) || result.levels < 0 ||
93  result.components < 0) {
94  error = "missing or invalid interval-mean level/component counts";
95  return false;
96  }
97 
98  result.level.clear();
99  result.level.resize(result.levels);
100  for (int lev = 0; lev < result.levels; ++lev) {
101  auto& record = result.level[lev];
102  if (!(input >> record.level >> record.accumulation_count >> record.reset_done) ||
103  record.level != lev || !std::isfinite(record.accumulation_count) ||
104  record.accumulation_count < 0.0 ||
105  (record.reset_done != 0 && record.reset_done != 1)) {
106  error = "invalid interval-mean level record " + std::to_string(lev);
107  return false;
108  }
109 
110  if (!detail::read_box_array(input, record.boxes)) {
111  error = "truncated interval-mean BoxArray record for level " +
112  std::to_string(lev);
113  return false;
114  }
115  std::string box_remainder;
116  if (!std::getline(input, box_remainder)) {
117  error = "truncated interval-mean BoxArray line for level " +
118  std::to_string(lev);
119  return false;
120  }
121 
122  long long map_size = -1;
123  if (!(input >> map_size) || map_size < 0 ||
124  map_size != static_cast<long long>(record.boxes.size())) {
125  error = "invalid interval-mean processor-map size for level " +
126  std::to_string(lev);
127  return false;
128  }
129  record.processor_map.resize(static_cast<std::size_t>(map_size));
130  for (long long ibox = 0; ibox < map_size; ++ibox) {
131  if (!(input >> record.processor_map[static_cast<std::size_t>(ibox)])) {
132  error = "truncated interval-mean processor map for level " +
133  std::to_string(lev);
134  return false;
135  }
136  }
137  }
138  return true;
139 }
bool read_box_array(std::istream &input, amrex::BoxArray &result)
Definition: ERF_IntervalMeansCheckpoint.H:35

Referenced by ERF::ReadCheckpointFile().

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

◆ validate_metadata()

std::string erf_interval_means::validate_metadata ( const Metadata metadata,
int  expected_levels,
int  expected_components,
const amrex::Vector< amrex::BoxArray > &  expected_boxes 
)
inline
146 {
147  if (metadata.levels != expected_levels || metadata.components != expected_components) {
148  return "expected " + std::to_string(expected_levels) + " levels and " +
149  std::to_string(expected_components) + " components";
150  }
151  if (static_cast<int>(expected_boxes.size()) < expected_levels ||
152  static_cast<int>(metadata.level.size()) != expected_levels) {
153  return "interval-mean metadata level count does not match the restart";
154  }
155  for (int lev = 0; lev < expected_levels; ++lev) {
156  if (!(metadata.level[lev].boxes == expected_boxes[lev])) {
157  return "interval-mean checkpoint BoxArray does not match level " +
158  std::to_string(lev);
159  }
160  }
161  return {};
162 }

Referenced by ERF::ReadCheckpointFile().

Here is the caller graph for this function: