https://mooseframework.inl.gov
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
RestartableEquationSystems Class Reference

Wrapper class that owns a libMesh EquationSystem and adds advanced restart capability to it. More...

#include <RestartableEquationSystems.h>

Classes

struct  EquationSystemsHeader
 Represents a stored EquationSystems in restart. More...
 
struct  SystemHeader
 Represents a stored system in restart. More...
 
struct  VariableHeader
 Represents a stored variable in restart. More...
 
struct  VectorHeader
 Represents a stored variable in restart. More...
 

Public Member Functions

 RestartableEquationSystems (libMesh::MeshBase &mesh)
 
void store (std::ostream &stream) const
 Stores the EquationSystems to the given stream. More...
 
void load (std::istream &stream)
 Loads the EquationSystems from the given stream. More...
 
void setLoadAllVectors (const bool load_all_vectors)
 Sets whether or not all vectors are to be loaded. More...
 
bool isVariableRestored (const std::string &system_name, const std::string &vector_name, const std::string &variable_name) const
 Checks whether variable was successfully restored from a restart file. More...
 
const std::set< std::tuple< std::string, std::string, std::string > > & getLoadedVariables () const
 Returns the set of variables that were loaded during the load() function. Each set of variables contain; [system name, vector name, variable name]. More...
 
libMesh::EquationSystemses ()
 
const libMesh::EquationSystemses () const
 

Private Member Functions

EquationSystemsHeader buildHeader (const std::vector< const libMesh::DofObject *> &ordered_objects) const
 Internal method for building the header struct. More...
 
std::vector< const libMesh::DofObject * > orderDofObjects () const
 Internal method for ordering the DofObjects by ID (elems and the nodes) More...
 
void restore (const SystemHeader &from_sys_header, const VectorHeader &from_vec_header, const VariableHeader &from_var_header, const libMesh::System &to_sys, libMesh::NumericVector< libMesh::Number > &to_vec, const libMesh::Variable &to_var, std::istream &stream)
 

Private Attributes

libMesh::EquationSystems _es
 The underlying EquationSystems. More...
 
bool _load_all_vectors
 Whether or not to load all of the vectors, including ones that haven't been added yet. More...
 
std::size_t _loaded_stream_data_begin
 The starting position for the vector data in the input stream. More...
 
std::vector< const libMesh::DofObject * > _loaded_ordered_objects
 The object ordering for this data. More...
 
EquationSystemsHeader _loaded_header
 The loaded header. More...
 
std::set< std::tuple< std::string, std::string, std::string > > _loaded_variables
 The variables that were loaded in load(); [system name, vector name, variable name]. More...
 

Detailed Description

Wrapper class that owns a libMesh EquationSystem and adds advanced restart capability to it.

Definition at line 32 of file RestartableEquationSystems.h.

Constructor & Destructor Documentation

◆ RestartableEquationSystems()

RestartableEquationSystems::RestartableEquationSystems ( libMesh::MeshBase mesh)

Definition at line 22 of file RestartableEquationSystems.C.

23  : _es(mesh), _load_all_vectors(true)
24 {
25 }
libMesh::EquationSystems _es
The underlying EquationSystems.
bool _load_all_vectors
Whether or not to load all of the vectors, including ones that haven&#39;t been added yet...

Member Function Documentation

◆ buildHeader()

RestartableEquationSystems::EquationSystemsHeader RestartableEquationSystems::buildHeader ( const std::vector< const libMesh::DofObject *> &  ordered_objects) const
private

Internal method for building the header struct.

Definition at line 28 of file RestartableEquationSystems.C.

Referenced by store().

30 {
31  EquationSystemsHeader es_header;
32 
33  // Systems
34  for (const auto sys_num : make_range(_es.n_systems()))
35  {
36  const auto & sys = _es.get_system(sys_num);
37 
38  SystemHeader sys_header;
39  sys_header.name = sys.name();
40  sys_header.type = sys.system_type();
41 
42  // Variables in the system
43  for (const auto var_num : make_range(sys.n_vars()))
44  {
45  const auto & var = sys.variable(var_num);
46 
47  VariableHeader var_header;
48  var_header.name = var.name();
49  var_header.type = var.type();
50  var_header.size = 0;
51  var_header.variable = &var;
52 
53  mooseAssert(_es.comm().verify("sys_" + sys.name() + "_var_" + var.name()),
54  "Out of order in parallel");
55  mooseAssert(!sys_header.variables.count(var.name()), "Already inserted");
56 
57  // Non-SCALAR variable
58  if (var.type().family != SCALAR)
59  {
60  for (const auto & obj : ordered_objects)
61  var_header.size += sizeof(Real) * obj->n_comp(sys.number(), var.number());
62  }
63  // SCALAR variable on the last rank
64  else if (_es.processor_id() == _es.n_processors() - 1)
65  {
66  std::vector<dof_id_type> scalar_dofs;
67  sys.get_dof_map().SCALAR_dof_indices(scalar_dofs, var.number());
68  var_header.size += sizeof(Real) * scalar_dofs.size();
69  }
70 
71  sys_header.variables.emplace(var.name(), var_header);
72  }
73 
74  // System vector
75  auto & sys_vec_header = sys_header.vectors[SystemHeader::system_solution_name];
76  sys_vec_header.name = SystemHeader::system_solution_name;
77  sys_vec_header.vector = sys.solution.get();
78  sys_vec_header.type = sys_vec_header.vector->type();
79  for (const auto vec_num : make_range(sys.n_vectors()))
80  {
81  mooseAssert(_es.comm().verify("sys_" + sys.name() + "_vec_" + sys.vector_name(vec_num)),
82  "Out of order in parallel");
83  const auto & name = sys.vector_name(vec_num);
84  mooseAssert(!sys_header.vectors.count(name), "Already inserted");
85  auto & vec_header = sys_header.vectors[name];
86  vec_header.name = sys.vector_name(vec_num);
87  vec_header.projections = sys.vector_preservation(vec_header.name);
88  vec_header.vector = &sys.get_vector(vec_header.name);
89  vec_header.type = vec_header.vector->type();
90  }
91 
92  // System in this EquationSystems
93  mooseAssert(!es_header.systems.count(sys.name()), "Already inserted");
94  es_header.systems.emplace(sys.name(), sys_header);
95  }
96 
97  // Setup the positions in each vector for easy access later
98  std::size_t offset = 0;
99  for (auto & sys_name_header_pair : es_header.systems)
100  {
101  auto & sys_header = sys_name_header_pair.second;
102  for (auto & vec_name_header_pair : sys_header.vectors)
103  {
104  auto & vec_header = vec_name_header_pair.second;
105  for (const auto & var_name_header_pair : sys_header.variables)
106  {
107  const auto & var_header = var_name_header_pair.second;
108  mooseAssert(!vec_header.variable_offset.count(var_header.name), "Already inserted");
109  vec_header.variable_offset[var_header.name] = offset;
110  offset += var_header.size;
111  }
112  }
113  }
114 
115  es_header.data_size = offset;
116 
117  return es_header;
118 }
std::string name(const ElemQuality q)
unsigned int n_systems() const
SCALAR
const Parallel::Communicator & comm() const
const T_sys & get_system(std::string_view name) const
libMesh::EquationSystems _es
The underlying EquationSystems.
processor_id_type n_processors() const
static const std::string system_solution_name
Special name for a vector that is the system solution vector.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
timpi_pure bool verify(const T &r) const
IntRange< T > make_range(T beg, T end)
processor_id_type processor_id() const

◆ es() [1/2]

libMesh::EquationSystems& RestartableEquationSystems::es ( )
inline
Returns
The underyling EquationSystems

Definition at line 130 of file RestartableEquationSystems.h.

Referenced by FEProblemBase::es().

130 { return _es; }
libMesh::EquationSystems _es
The underlying EquationSystems.

◆ es() [2/2]

const libMesh::EquationSystems& RestartableEquationSystems::es ( ) const
inline

Definition at line 131 of file RestartableEquationSystems.h.

131 { return _es; }
libMesh::EquationSystems _es
The underlying EquationSystems.

◆ getLoadedVariables()

const std::set<std::tuple<std::string, std::string, std::string> >& RestartableEquationSystems::getLoadedVariables ( ) const
inline

Returns the set of variables that were loaded during the load() function. Each set of variables contain; [system name, vector name, variable name].

Definition at line 152 of file RestartableEquationSystems.h.

Referenced by to_json().

153  {
154  return _loaded_variables;
155  }
std::set< std::tuple< std::string, std::string, std::string > > _loaded_variables
The variables that were loaded in load(); [system name, vector name, variable name].

◆ isVariableRestored()

bool RestartableEquationSystems::isVariableRestored ( const std::string &  system_name,
const std::string &  vector_name,
const std::string &  variable_name 
) const

Checks whether variable was successfully restored from a restart file.

Definition at line 316 of file RestartableEquationSystems.C.

Referenced by restore().

319 {
320  std::tuple<std::string, std::string, std::string> key(system_name, vector_name, variable_name);
321  return _loaded_variables.count(key);
322 }
std::set< std::tuple< std::string, std::string, std::string > > _loaded_variables
The variables that were loaded in load(); [system name, vector name, variable name].

◆ load()

void RestartableEquationSystems::load ( std::istream &  stream)

Loads the EquationSystems from the given stream.

Definition at line 223 of file RestartableEquationSystems.C.

Referenced by dataLoad().

224 {
225  // Load the header (systems, variables, vectors)
226  // We do this first so that the loader can make informed decisions
227  // on what to put where based on everything that is available
228  _loaded_header.systems.clear();
229  dataLoad(stream, _loaded_header, nullptr);
230 
231  // Order objects (elements and then node) by ID for storing
233 
234  // Clear previously loaded variables to ensure a clean state
235  _loaded_variables.clear();
236 
237  // Sanity check on if we're loading the same thing
238  {
239  std::vector<dof_id_type> from_ordered_objects_ids;
240  dataLoad(stream, from_ordered_objects_ids, nullptr);
241  if (_loaded_ordered_objects.size() != from_ordered_objects_ids.size())
242  mooseError("RestartableEquationSystems::load(): Number of previously stored elements/nodes (",
244  ") does not "
245  "match the current number of elements/nodes (",
246  from_ordered_objects_ids.size(),
247  ")");
248  for (const auto i : index_range(_loaded_ordered_objects))
249  if (_loaded_ordered_objects[i]->id() != from_ordered_objects_ids[i])
250  mooseError("RestartableEquationSystems::load(): Id of previously stored element/node (",
251  _loaded_ordered_objects[i]->id(),
252  ") does not "
253  "match the current element/node id (",
254  from_ordered_objects_ids[i],
255  ")");
256  }
257 
258  _loaded_stream_data_begin = static_cast<std::size_t>(stream.tellg());
259 
260  // Load everything that we have available at the moment
261  for (const auto & sys_name_header_pair : _loaded_header.systems)
262  {
263  const auto & sys_header = sys_name_header_pair.second;
264  if (!_es.has_system(sys_header.name))
265  continue;
266  auto & sys = _es.get_system(sys_header.name);
267 
268  bool modified_sys = false;
269 
270  for (const auto & vec_name_header_pair : sys_header.vectors)
271  {
272  bool modified_vec = false;
273 
274  const auto & vec_header = vec_name_header_pair.second;
275  const bool is_solution = vec_header.name == SystemHeader::system_solution_name;
276 
277  if (!is_solution && !sys.have_vector(vec_header.name))
278  {
279  if (_load_all_vectors)
280  sys.add_vector(vec_header.name, vec_header.projections, vec_header.type);
281  else
282  continue;
283  }
284 
285  auto & vec = is_solution ? *sys.solution : sys.get_vector(vec_header.name);
286 
287  for (const auto & var_name_header_pair : sys_header.variables)
288  {
289  const auto & var_header = var_name_header_pair.second;
290  if (!sys.has_variable(var_header.name))
291  continue;
292  const auto & var = sys.variable(sys.variable_number(var_header.name));
293  if (var.type() != var_header.type)
294  continue;
295 
296  restore(sys_header, vec_header, var_header, sys, vec, var, stream);
297  modified_vec = true;
298  }
299 
300  if (modified_vec)
301  {
302  vec.close();
303  modified_sys = true;
304  }
305  }
306 
307  if (modified_sys)
308  sys.update();
309  }
310 
311  // Move the stream to the end of our data so that we make RestartableDataReader happy
313 }
void restore(const SystemHeader &from_sys_header, const VectorHeader &from_vec_header, const VariableHeader &from_var_header, const libMesh::System &to_sys, libMesh::NumericVector< libMesh::Number > &to_vec, const libMesh::Variable &to_var, std::istream &stream)
std::size_t data_size
The total size of data for this EquationSystems.
std::size_t _loaded_stream_data_begin
The starting position for the vector data in the input stream.
bool has_system(std::string_view name) const
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:323
const T_sys & get_system(std::string_view name) const
libMesh::EquationSystems _es
The underlying EquationSystems.
std::map< std::string, RestartableEquationSystems::SystemHeader > systems
The stored systems in the equation systems.
static const std::string system_solution_name
Special name for a vector that is the system solution vector.
EquationSystemsHeader _loaded_header
The loaded header.
bool _load_all_vectors
Whether or not to load all of the vectors, including ones that haven&#39;t been added yet...
void dataLoad(std::istream &stream, RestartableEquationSystems &res, void *)
std::vector< const libMesh::DofObject * > _loaded_ordered_objects
The object ordering for this data.
std::vector< const libMesh::DofObject * > orderDofObjects() const
Internal method for ordering the DofObjects by ID (elems and the nodes)
std::set< std::tuple< std::string, std::string, std::string > > _loaded_variables
The variables that were loaded in load(); [system name, vector name, variable name].
auto index_range(const T &sizable)

◆ orderDofObjects()

std::vector< const libMesh::DofObject * > RestartableEquationSystems::orderDofObjects ( ) const
private

Internal method for ordering the DofObjects by ID (elems and the nodes)

Definition at line 121 of file RestartableEquationSystems.C.

Referenced by load(), and store().

122 {
123  std::vector<const libMesh::DofObject *> objects;
124  auto add = [&objects](const auto begin, const auto end)
125  {
126  std::set<const libMesh::DofObject *, libMesh::CompareDofObjectsByID> ordered(begin, end);
127  objects.insert(objects.end(), ordered.begin(), ordered.end());
128  };
129 
130  const auto & mesh = _es.get_mesh();
131  add(mesh.local_elements_begin(), mesh.local_elements_end());
132  add(mesh.local_nodes_begin(), mesh.local_nodes_end());
133 
134  return objects;
135 }
MeshBase & mesh
libMesh::EquationSystems _es
The underlying EquationSystems.
const MeshBase & get_mesh() const

◆ restore()

void RestartableEquationSystems::restore ( const SystemHeader from_sys_header,
const VectorHeader from_vec_header,
const VariableHeader from_var_header,
const libMesh::System to_sys,
libMesh::NumericVector< libMesh::Number > &  to_vec,
const libMesh::Variable to_var,
std::istream &  stream 
)
private

Definition at line 325 of file RestartableEquationSystems.C.

Referenced by load().

332 {
333 #ifndef NDEBUG
334  const auto sys_it = _loaded_header.systems.find(from_sys_header.name);
335  mooseAssert(sys_it != _loaded_header.systems.end(), "System does not exist");
336  const auto & sys_header = sys_it->second;
337  mooseAssert(sys_header == from_sys_header, "Not my system");
338  const auto vec_it = sys_header.vectors.find(from_vec_header.name);
339  mooseAssert(vec_it != sys_header.vectors.end(), "Vector does not exist");
340  const auto & vec_header = vec_it->second;
341  mooseAssert(vec_header == from_vec_header, "Not my vector");
342  const auto var_it = sys_header.variables.find(from_var_header.name);
343  mooseAssert(var_it != sys_header.variables.end(), "Variable does not exist");
344  const auto & var_header = var_it->second;
345  mooseAssert(var_header == from_var_header, "Not my variable");
346  mooseAssert(!isVariableRestored(from_sys_header.name, from_vec_header.name, from_var_header.name),
347  "Variable already restored");
348 #endif
349 
350  const auto error =
351  [&from_sys_header, &from_vec_header, &from_var_header, &to_sys, &to_var](auto... args)
352  {
353  mooseError("An error occured while restoring a system:\n",
354  args...,
355  "\n\nFrom system: ",
356  from_sys_header.name,
357  "\nFrom vector: ",
358  from_vec_header.name,
359  "\nFrom variable: ",
360  from_var_header.name,
361  "\nTo system: ",
362  to_sys.name(),
363  "\nTo variable: ",
364  to_var.name());
365  };
366 
367  if (from_var_header.type != to_var.type())
368  error("Cannot restore to a variable of a different type");
369 
370  const auto offset = from_vec_header.variable_offset.at(from_var_header.name);
371  stream.seekg(_loaded_stream_data_begin + offset);
372 
373  // Non-SCALAR variable
374  if (to_var.type().family != SCALAR)
375  {
376  for (const auto & obj : _loaded_ordered_objects)
377  for (const auto comp : make_range(obj->n_comp(to_sys.number(), to_var.number())))
378  {
379  Real val;
380  dataLoad(stream, val, nullptr);
381  to_vec.set(obj->dof_number(to_sys.number(), to_var.number(), comp), val);
382  }
383  }
384  // SCALAR variable on the last rank
385  else if (_es.processor_id() == _es.n_processors() - 1)
386  {
387  const auto & dof_map = to_sys.get_dof_map();
388  std::vector<dof_id_type> scalar_dofs;
389  dof_map.SCALAR_dof_indices(scalar_dofs, to_var.number());
390  for (const auto dof : scalar_dofs)
391  {
392  Real val;
393  dataLoad(stream, val, nullptr);
394  to_vec.set(dof, val);
395  }
396  }
397 
398  // insert into the member variable
399  std::tuple<std::string, std::string, std::string> _loaded_variable = {
400  from_sys_header.name, from_vec_header.name, from_var_header.name};
401 
402  _loaded_variables.insert(_loaded_variable);
403 
404  mooseAssert(isVariableRestored(from_sys_header.name, from_vec_header.name, from_var_header.name),
405  "Variable not marked as restored");
406 }
SCALAR
std::size_t _loaded_stream_data_begin
The starting position for the vector data in the input stream.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:323
libMesh::EquationSystems _es
The underlying EquationSystems.
processor_id_type n_processors() const
std::map< std::string, RestartableEquationSystems::SystemHeader > systems
The stored systems in the equation systems.
bool isVariableRestored(const std::string &system_name, const std::string &vector_name, const std::string &variable_name) const
Checks whether variable was successfully restored from a restart file.
EquationSystemsHeader _loaded_header
The loaded header.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void dataLoad(std::istream &stream, RestartableEquationSystems &res, void *)
std::vector< const libMesh::DofObject * > _loaded_ordered_objects
The object ordering for this data.
IntRange< T > make_range(T beg, T end)
virtual void set(const numeric_index_type i, const T value)=0
const std::string & name() const
std::set< std::tuple< std::string, std::string, std::string > > _loaded_variables
The variables that were loaded in load(); [system name, vector name, variable name].
unsigned int number() const
processor_id_type processor_id() const
const FEType & type() const

◆ setLoadAllVectors()

void RestartableEquationSystems::setLoadAllVectors ( const bool  load_all_vectors)
inline

Sets whether or not all vectors are to be loaded.

By default, this is true. This means that all vectors that do not currently exist in the system will be added and loaded.

Typically, we would want this to be false in the case of restart.

Definition at line 144 of file RestartableEquationSystems.h.

Referenced by FEProblemBase::initialSetup().

144 { _load_all_vectors = load_all_vectors; }
bool _load_all_vectors
Whether or not to load all of the vectors, including ones that haven&#39;t been added yet...

◆ store()

void RestartableEquationSystems::store ( std::ostream &  stream) const

Stores the EquationSystems to the given stream.

Definition at line 138 of file RestartableEquationSystems.C.

Referenced by dataStore().

139 {
140  // Order objects (elements and then nodes) by ID for storing
141  const auto ordered_objects = orderDofObjects();
142 
143  // Store the header (systems, variables, vectors)
144  EquationSystemsHeader es_header = buildHeader(ordered_objects);
145  dataStore(stream, es_header, nullptr);
146 
147  // Store the ordered objects so we can do a sanity check on if we're
148  // loading the same thing
149  {
150  std::vector<dof_id_type> ordered_objects_ids(ordered_objects.size());
151  for (const auto i : index_range(ordered_objects))
152  ordered_objects_ids[i] = ordered_objects[i]->id();
153  dataStore(stream, ordered_objects_ids, nullptr);
154  }
155 
156 #ifndef NDEBUG
157  const std::size_t data_initial_position = static_cast<std::size_t>(stream.tellp());
158 #endif
159 
160  // Store each system
161  for (const auto & sys_name_header_pair : es_header.systems)
162  {
163  const auto & sys_header = sys_name_header_pair.second;
164  const auto & sys = _es.get_system(sys_header.name);
165 
166  // Store each vector and variable
167  for (const auto & vec_name_header_pair : sys_header.vectors)
168  {
169  const auto & vec_header = vec_name_header_pair.second;
170  const auto & vec = *vec_header.vector;
171  for (const auto & var_name_header_pair : sys_header.variables)
172  {
173  const auto & var_header = var_name_header_pair.second;
174  const auto & var = *var_header.variable;
175 
176 #ifndef NDEBUG
177  const std::size_t var_initial_position = stream.tellp();
178 #endif
179 
180  // Non-SCALAR variable
181  if (var.type().family != SCALAR)
182  {
183  // Store for each component of each element and node
184  for (const auto & obj : ordered_objects)
185  for (const auto comp : make_range(obj->n_comp(sys.number(), var.number())))
186  {
187  auto val = vec(obj->dof_number(sys.number(), var.number(), comp));
188  dataStore(stream, val, nullptr);
189  }
190  }
191  // SCALAR variable on the last rank
192  else if (_es.processor_id() == _es.n_processors() - 1)
193  {
194  const auto & dof_map = sys.get_dof_map();
195  std::vector<dof_id_type> scalar_dofs;
196  dof_map.SCALAR_dof_indices(scalar_dofs, var.number());
197  for (const auto dof : scalar_dofs)
198  {
199  auto val = vec(dof);
200  dataStore(stream, val, nullptr);
201  }
202  }
203 
204 #ifndef NDEBUG
205  const std::size_t data_offset = var_initial_position - data_initial_position;
206  mooseAssert(vec_header.variable_offset.at(var_header.name) == data_offset,
207  "Invalid offset");
208 
209  const std::size_t current_position = static_cast<std::size_t>(stream.tellp());
210  const std::size_t var_size = current_position - var_initial_position;
211  mooseAssert(var_size == sys_header.variables.at(var.name()).size, "Incorrect assumed size");
212 #endif
213  }
214  }
215  }
216 
217  mooseAssert((data_initial_position + es_header.data_size) ==
218  static_cast<std::size_t>(stream.tellp()),
219  "Incorrect assumed size");
220 }
SCALAR
const T_sys & get_system(std::string_view name) const
libMesh::EquationSystems _es
The underlying EquationSystems.
processor_id_type n_processors() const
IntRange< T > make_range(T beg, T end)
void dataStore(std::ostream &stream, RestartableEquationSystems &res, void *)
std::vector< const libMesh::DofObject * > orderDofObjects() const
Internal method for ordering the DofObjects by ID (elems and the nodes)
processor_id_type processor_id() const
EquationSystemsHeader buildHeader(const std::vector< const libMesh::DofObject *> &ordered_objects) const
Internal method for building the header struct.
auto index_range(const T &sizable)

Member Data Documentation

◆ _es

libMesh::EquationSystems RestartableEquationSystems::_es
private

The underlying EquationSystems.

Definition at line 174 of file RestartableEquationSystems.h.

Referenced by buildHeader(), es(), load(), orderDofObjects(), restore(), and store().

◆ _load_all_vectors

bool RestartableEquationSystems::_load_all_vectors
private

Whether or not to load all of the vectors, including ones that haven't been added yet.

Definition at line 177 of file RestartableEquationSystems.h.

Referenced by load(), and setLoadAllVectors().

◆ _loaded_header

EquationSystemsHeader RestartableEquationSystems::_loaded_header
private

The loaded header.

Definition at line 183 of file RestartableEquationSystems.h.

Referenced by load(), and restore().

◆ _loaded_ordered_objects

std::vector<const libMesh::DofObject *> RestartableEquationSystems::_loaded_ordered_objects
private

The object ordering for this data.

Definition at line 181 of file RestartableEquationSystems.h.

Referenced by load(), and restore().

◆ _loaded_stream_data_begin

std::size_t RestartableEquationSystems::_loaded_stream_data_begin
private

The starting position for the vector data in the input stream.

Definition at line 179 of file RestartableEquationSystems.h.

Referenced by load(), and restore().

◆ _loaded_variables

std::set<std::tuple<std::string, std::string, std::string> > RestartableEquationSystems::_loaded_variables
private

The variables that were loaded in load(); [system name, vector name, variable name].

Definition at line 186 of file RestartableEquationSystems.h.

Referenced by getLoadedVariables(), isVariableRestored(), load(), and restore().


The documentation for this class was generated from the following files: