https://mooseframework.inl.gov
ReporterInterface.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 #pragma once
10 
11 #include "MooseTypes.h"
12 #include "ReporterData.h"
13 #include "MooseObject.h"
14 
15 // Forward declarations
16 class FEProblemBase;
17 class InputParameters;
18 
23 {
24 public:
26  ReporterInterface(const MooseObject * moose_object);
27 
28 protected:
30 
41  template <typename T>
42  const T & getReporterValue(const std::string & param_name, const std::size_t time_index = 0);
43  template <typename T>
44  const T & getReporterValue(const std::string & param_name,
45  ReporterMode mode,
46  const std::size_t time_index = 0);
47  // doco-normal-methods-end
49 
51 
60  template <typename T>
61  const T & getReporterValueByName(const ReporterName & reporter_name,
62  const std::size_t time_index = 0);
63  template <typename T>
64  const T & getReporterValueByName(const ReporterName & reporter_name,
65  ReporterMode mode,
66  const std::size_t time_index = 0);
68 
70 
75  bool hasReporterValue(const std::string & param_name) const;
76  bool hasReporterValueByName(const ReporterName & reporter_name) const;
77  template <typename T>
78  bool hasReporterValue(const std::string & param_name) const;
79  template <typename T>
80  bool hasReporterValueByName(const ReporterName & reporter_name) const;
81 
83 
89  const ReporterContextBase &
90  getReporterContextBaseByName(const ReporterName & reporter_name) const;
91 
97  const ReporterName & getReporterName(const std::string & param_name) const;
98 
105  virtual void addReporterDependencyHelper(const ReporterName & /*state_name*/) {}
106 
107 private:
112  bool reportersAdded() const;
113 
122  template <typename T>
123  void possiblyCheckHasReporter(const ReporterName & reporter_name,
124  const std::string & param_name = "") const;
125 
128 
131 
134 
137 };
138 
139 template <typename T>
140 const T &
141 ReporterInterface::getReporterValue(const std::string & param_name, const std::size_t time_index)
142 {
143  return getReporterValue<T>(param_name, REPORTER_MODE_UNSET, time_index);
144 }
145 
146 template <typename T>
147 const T &
148 ReporterInterface::getReporterValue(const std::string & param_name,
149  ReporterMode mode,
150  const std::size_t time_index)
151 {
152  const auto & reporter_name = getReporterName(param_name);
153 
154  possiblyCheckHasReporter<T>(reporter_name, param_name);
155 
156  return getReporterValueByName<T>(reporter_name, mode, time_index);
157 }
158 
159 template <typename T>
160 const T &
162  const std::size_t time_index)
163 {
164  return getReporterValueByName<T>(reporter_name, REPORTER_MODE_UNSET, time_index);
165 }
166 
167 template <typename T>
168 const T &
170  ReporterMode mode,
171  const std::size_t time_index)
172 {
173  possiblyCheckHasReporter<T>(reporter_name);
174 
175  addReporterDependencyHelper(reporter_name);
176 
177  return _ri_reporter_data.getReporterValue<T>(reporter_name, _ri_moose_object, mode, time_index);
178 }
179 
180 template <typename T>
181 bool
182 ReporterInterface::hasReporterValue(const std::string & param_name) const
183 {
184  if (!reportersAdded())
186  "Cannot call hasReporterValue() until all Reporters have been constructed.");
187 
188  return hasReporterValueByName<T>(getReporterName(param_name));
189 }
190 
191 template <typename T>
192 bool
194 {
195  if (!reportersAdded())
197  "Cannot call hasReporterValueByName() until all Reporters have been constructed.");
198 
199  return _ri_reporter_data.hasReporterValue<T>(reporter_name);
200 }
201 
202 template <typename T>
203 void
205  const std::string & param_name /* = "" */) const
206 {
207  if (reportersAdded() && !hasReporterValueByName<T>(reporter_name))
208  {
209  std::stringstream oss;
210  oss << "A Reporter value with the name \"" << reporter_name << "\" and type \""
211  << MooseUtils::prettyCppType<T>() << "\" was not found.";
212 
213  if (_ri_params.isParamValid(param_name))
214  _ri_moose_object.paramError(param_name, oss.str());
215  else
216  _ri_moose_object.mooseError(oss.str());
217  }
218 }
virtual void addReporterDependencyHelper(const ReporterName &)
A method that can be overridden to update the UO dependencies.
static InputParameters validParams()
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition: MooseBase.h:435
const T & getReporterValueByName(const ReporterName &reporter_name, const std::size_t time_index=0)
Returns read-only reference to a Reporter value that is provided by name directly.
const ReporterMode REPORTER_MODE_UNSET
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
const ReporterName & getReporterName(const std::string &param_name) const
const ReporterContextBase & getReporterContextBaseByName(const ReporterName &reporter_name) const
Get the reporter context to allow non-typed operations with the data.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
const T & getReporterValue(const std::string &param_name, const std::size_t time_index=0)
doco-normal-methods-begin Returns read-only reference to a Reporter value that is provided by an inpu...
bool reportersAdded() const
This is a helper class to aid with parallel communication of compute Reporter values as well as provi...
bool hasReporterValue(const std::string &param_name) const
Return True if the Reporter value exists.
const T & getReporterValue(const ReporterName &reporter_name, const MooseObject &consumer, const ReporterMode &mode, const std::size_t time_index=0) const
Method for returning read only references to Reporter values.
Definition: ReporterData.h:388
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:27
Interface to allow object to consume Reporter values.
ReporterInterface(const MooseObject *moose_object)
const MooseObject & _ri_moose_object
The MooseObject needing this interface.
const InputParameters & _ri_params
Parameters for the MooseObject inherting from this interface.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition: MooseBase.h:267
const ReporterData & _ri_reporter_data
The ReporterData.
bool hasReporterValue(const ReporterName &reporter_name) const
Return True if a Reporter value with the given type and name have been created.
Definition: ReporterData.h:445
MooseEnumItem that automatically creates the ID and doesn&#39;t allow the ID to be assigned.
Definition: ReporterMode.h:44
void possiblyCheckHasReporter(const ReporterName &reporter_name, const std::string &param_name="") const
Helpers for "possibly" checking if a Reporter value exists.
bool hasReporterValueByName(const ReporterName &reporter_name) const
The Reporter system is comprised of objects that can contain any number of data values.
Definition: ReporterName.h:30
FEProblemBase & _ri_fe_problem_base
Provides access to FEProblemBase::getReporterData.
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another, i.e.
This is a helper class for managing the storage of declared Reporter object values.
Definition: ReporterData.h:48