https://mooseframework.inl.gov
OutputWarehouse.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "Output.h"
14 #include "PerfGraphInterface.h"
15 
16 // System includes
17 #include <atomic>
18 
19 // Forward declarations
20 class FEProblemBase;
21 class InputParameters;
22 
27 {
28 public:
33 
34  /*
35  * Class destructor
36  * The OutputWarehouse deletes all output objects passed in via addOutput
37  */
38  virtual ~OutputWarehouse();
39 
46  void addOutput(std::shared_ptr<Output> output);
47 
59  const std::set<OutputName> & getOutputNames();
60 
65  bool hasOutput(const std::string & name) const;
66 
71  bool hasMaterialPropertyOutput(const std::string & name) const;
72 
76  void meshChanged();
77 
91  void buildInterfaceHideVariables(const std::string & output_name, std::set<std::string> & hide);
92 
96  void setFileNumbers(std::map<std::string, unsigned int> input, unsigned int offset = 0);
97 
102  std::map<std::string, unsigned int> getFileNumbers();
103 
110  void setCommonParameters(const InputParameters * params_ptr);
111 
116  const InputParameters * getCommonParameters() const;
117 
121  std::set<Real> & getSyncTimes();
122 
132  void checkOutputs(const std::set<OutputName> & names,
133  const bool supports_material_output = false);
134 
139  std::set<OutputName> getAllMaterialPropertyOutputNames() const;
140 
147  template <typename T>
148  T * getOutput(const OutputName & name);
149 
156  template <typename T>
157  std::vector<T *> getOutputs(const std::vector<OutputName> & names);
158 
164  template <typename T>
165  std::vector<T *> getOutputs() const;
166 
172  template <typename T>
173  std::vector<OutputName> getOutputNames();
174 
179  const std::set<std::string> & getReservedNames() const;
180 
186  bool isReservedName(const std::string & name);
187 
191  void mooseConsole();
192 
196  void mooseConsole(std::ostringstream & buffer);
197 
202  std::ostringstream & consoleBuffer() { return _console_buffer; }
203 
209  {
211  }
212 
214  void reset();
215 
225  void solveSetup();
226 
228  unsigned long long int numPrinted() const { return _num_printed; }
229 
230 private:
237  void outputStep(ExecFlagType type);
238 
240 
245  void allowOutput(bool state);
246  template <typename T>
247  void allowOutput(bool state);
249 
255  void forceOutput();
256 
261  std::vector<std::shared_ptr<Output>> _all_ptrs;
262 
271  void addOutputFilename(const OutputName & obj_name, const OutFileBase & filename);
272 
277  void initialSetup();
278 
283  void timestepSetup();
284 
289  void customSetup(const ExecFlagType & exec_type);
290 
295  void jacobianSetup();
296 
301  void residualSetup();
302 
307  void subdomainSetup();
308 
317  void addInterfaceHideVariables(const std::string & output_name,
318  const std::set<std::string> & variable_names);
319 
326 
332  void flushConsoleBuffer();
333 
337  void resetFileBase();
338 
341 
343  std::vector<Output *> _all_objects;
344 
347 
349  std::map<OutputName, Output *> _object_map;
350 
352  std::set<OutputName> _object_names;
353 
355  std::map<OutputName, std::set<OutFileBase>> _file_base_map;
356 
359 
361  std::set<Real> _sync_times;
362 
364  std::string _input_file_name;
365 
367  std::map<OutputName, std::set<AuxVariableName>> _material_output_map;
368 
370  std::set<AuxVariableName> _all_material_output_variables;
371 
373  std::set<std::string> _reserved;
374 
376  std::ostringstream _console_buffer;
377 
379  std::map<std::string, std::set<std::string>> _interface_map;
380 
383 
386 
389 
391  const std::ostringstream * _last_buffer;
392 
394  std::atomic<unsigned long long int> _num_printed;
395 
396  // Allow complete access:
397  // FEProblemBase for calling initial, timestepSetup, outputStep, etc. methods
398  friend class FEProblemBase;
399 
400  // MaterialOutputAction for calling addInterfaceHideVariables
401  friend class MaterialOutputAction;
402 
403  // OutputInterface for calling addInterfaceHideVariables
404  friend class OutputInterface;
405 
406  // Console for calling flushConsoleBuffer()
407  friend class PetscOutputInterface;
408 
409  // MooseApp for resetFileBase()
410  friend class MooseApp;
411 };
412 
413 template <typename T>
414 T *
415 OutputWarehouse::getOutput(const OutputName & name)
416 {
417  // Check that the object exists
418  if (!hasOutput(name))
419  mooseError("An output object with the name '", name, "' does not exist.");
420 
421  // Attempt to cast the object to the correct type
422  T * output = dynamic_cast<T *>(_object_map[name]);
423 
424  // Error if the cast fails
425  if (output == NULL)
426  mooseError("An output object with the name '", name, "' for the specified type does not exist");
427 
428  // Return the object
429  return output;
430 }
431 
432 template <typename T>
433 std::vector<T *>
434 OutputWarehouse::getOutputs(const std::vector<OutputName> & names)
435 {
436  // The vector to output
437  std::vector<T *> outputs;
438 
439  // Populate the vector
440  for (std::vector<OutputName>::const_iterator it = names.begin(); it != names.end(); ++it)
441  outputs.push_back(getOutput<T>(*it));
442 
443  // Return the objects
444  return outputs;
445 }
446 
447 template <typename T>
448 std::vector<T *>
450 {
451  // The vector to output
452  std::vector<T *> outputs;
453 
454  // Populate the vector
455  for (std::map<OutputName, Output *>::const_iterator it = _object_map.begin();
456  it != _object_map.end();
457  ++it)
458  {
459  T * output = dynamic_cast<T *>(it->second);
460  if (output != NULL)
461  outputs.push_back(output);
462  }
463 
464  // Return the objects
465  return outputs;
466 }
467 
468 template <typename T>
469 std::vector<OutputName>
471 {
472  // The output vector
473  std::vector<OutputName> names;
474 
475  // Loop through the objects and store the name if the type cast succeeds
476  for (std::map<OutputName, Output *>::const_iterator it = _object_map.begin();
477  it != _object_map.end();
478  ++it)
479  {
480  T * output = dynamic_cast<T *>(it->second);
481  if (output != NULL)
482  names.push_back(it->first);
483  }
484 
485  // Return the names
486  return names;
487 }
488 
489 template <typename T>
490 void
492 {
493  std::vector<T *> outputs = getOutputs<T>();
494  for (typename std::vector<T *>::iterator it = outputs.begin(); it != outputs.end(); ++it)
495  (*it)->allowOutput(state);
496 }
std::string name(const ElemQuality q)
T * getOutput(const OutputName &name)
Return an Output object by name.
std::map< OutputName, std::set< OutFileBase > > _file_base_map
List of object names.
void outputStep(ExecFlagType type)
Calls the outputStep method for each output object.
const InputParameters * _common_params_ptr
Pointer to the common InputParameters (.
bool _buffer_action_console_outputs
True to buffer console outputs in actions.
void initialSetup()
Calls the initialSetup function for each of the output objects.
unsigned long long int numPrinted() const
The number of times something has been printed.
std::map< OutputName, Output * > _object_map
A map of the output pointers.
void checkOutputs(const std::set< OutputName > &names, const bool supports_material_output=false)
Test that the output names exist.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:302
std::set< OutputName > _object_names
A set of output names.
bool isReservedName(const std::string &name)
Test if the given name is reserved.
A class to provide an common interface to objects requiring "outputs" option.
bool hasOutput(const std::string &name) const
Returns true if the output object exists.
Base class for MOOSE-based applications.
Definition: MooseApp.h:96
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
void customSetup(const ExecFlagType &exec_type)
Calls the setup function for each of the output objects.
void setOutputExecutionType(ExecFlagType type)
Sets the execution flag type.
std::vector< Output * > _all_objects
All instances of objects (raw pointers)
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:57
bool hasMaterialPropertyOutput(const std::string &name) const
Returns true if the output object exists, and it supports material property output.
void forceOutput()
Indicates that the next call to outputStep should be forced This is private, users should utilize FEP...
std::set< std::string > _reserved
List of reserved names.
std::vector< T * > getOutputs() const
Return a vector of objects of a given type.
Creates AuxVariables and AuxKernels for automatic output of material properties.
void jacobianSetup()
Calls the jacobianSetup function for each of the output objects.
std::map< std::string, std::set< std::string > > _interface_map
Storage for variables to hide as prescribed by the object via the OutputInterface.
std::set< OutputName > getAllMaterialPropertyOutputNames() const
Returns all output names that support material output.
const std::ostringstream * _last_buffer
What the last buffer was that was printed.
ExecFlagType _output_exec_flag
The current output execution flag.
MooseApp & _app
MooseApp.
void resetFileBase()
Resets the file base for all FileOutput objects.
OutputWarehouse(MooseApp &app)
Class constructor.
std::set< AuxVariableName > _all_material_output_variables
List of all variable created by auto material output.
std::map< std::string, unsigned int > getFileNumbers()
Extracts the file numbers from the output objects.
void meshChanged()
Calls the meshChanged method for every output object.
bool _force_output
Flag indicating that next call to outputStep is forced.
virtual ~OutputWarehouse()
std::ostringstream & consoleBuffer()
The buffered messages stream for Console objects.
std::atomic< unsigned long long int > _num_printed
Number of times the stream has been printed to.
Class for storing and utilizing output objects.
Interface for objects interacting with the PerfGraph.
std::ostringstream _console_buffer
The stream for holding messages passed to _console prior to Output object construction.
void addOutputFilename(const OutputName &obj_name, const OutFileBase &filename)
Adds the file name to the map of filenames being output with an associated object The main function o...
std::vector< std::shared_ptr< Output > > _all_ptrs
We are using std::shared_ptr to handle the cleanup of the pointers at the end of execution.
void residualSetup()
Calls the residualSetup function for each of the output objects.
void solveSetup()
Calls the timestepSetup function for each of the output objects.
const std::set< OutputName > & getOutputNames()
Get a complete set of all output object names.
std::string _input_file_name
Input file name for this output object.
const InputParameters * getCommonParameters() const
Get a reference to the common output parameters.
Class for containing MooseEnum item information.
Definition: MooseEnumItem.h:18
void subdomainSetup()
Calls the subdomainSetup function for each of the output objects.
void allowOutput(bool state)
Ability to enable/disable output calls This is private, users should utilize FEProblemBase::allowOutp...
void addOutput(std::shared_ptr< Output > output)
Adds an existing output object to the warehouse.
void mooseConsole()
Send current output buffer to Console output objects.
void reset()
Reset the output system.
void setCommonParameters(const InputParameters *params_ptr)
Stores the common InputParameters object.
void addInterfaceHideVariables(const std::string &output_name, const std::set< std::string > &variable_names)
Insert variable names for hiding via the OutoutInterface.
void bufferConsoleOutputsBeforeConstruction(bool buffer)
Set if the outputs to Console before its construction are to be buffered or to screen directly...
void buildInterfaceHideVariables(const std::string &output_name, std::set< std::string > &hide)
Return the list of hidden variables for the given output name.
const std::set< std::string > & getReservedNames() const
Return a set of reserved output names.
void setFileNumbers(std::map< std::string, unsigned int > input, unsigned int offset=0)
Calls the setFileNumber method for every FileOutput output object.
std::map< OutputName, std::set< AuxVariableName > > _material_output_map
Map of output name and AuxVariable names to be output (used by auto Material output) ...
std::set< Real > & getSyncTimes()
Return the sync times for all objects.
void timestepSetup()
Calls the timestepSetup function for each of the output objects.
bool _last_message_ended_in_newline
Whether or not the last thing output by mooseConsole had a newline as the last character.
void flushConsoleBuffer()
If content exists in the buffer, write it.
std::set< Real > _sync_times
Sync times for all objects.