https://mooseframework.inl.gov
ParsedVectorReporter.C
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 #include "ParsedVectorReporter.h"
11 
12 registerMooseObject("OptimizationApp", ParsedVectorReporter);
13 
16 {
18  params.addClassDescription("Apply parsed functions to vector entries held in reporters.");
19  params.addRequiredParam<std::vector<ReporterName>>("reporter_names", "Reporter names ");
20  return params;
21 }
22 
24  : ParsedReporterBase(parameters),
25  _output_reporter(
26  declareValueByName<std::vector<Real>>(getParam<std::string>("name"), REPORTER_MODE_ROOT))
27 {
28  // get reporters to operate on
29  const std::vector<ReporterName> reporter_names(
30  getParam<std::vector<ReporterName>>("reporter_names"));
31  if (reporter_names.size() != _reporter_symbols.size())
32  paramError(
33  "reporter_names",
34  "reporter_names and reporter_symbols must be the same size: Number of reporter_names=",
35  reporter_names.size(),
36  "; Number of reporter_symbols=",
37  _reporter_symbols.size());
38 
39  _reporter_data.resize(reporter_names.size());
40  for (const auto rep_index : index_range(_reporter_data))
41  _reporter_data[rep_index] =
42  &getReporterValueByName<std::vector<Real>>(reporter_names[rep_index], REPORTER_MODE_ROOT);
43 }
44 
45 void
47 {
48  // check vector sizes of reporters
49  const std::size_t entries(_reporter_data[0]->size());
50  for (const auto rep_index : index_range(_reporter_data))
51  if (entries != _reporter_data[rep_index]->size())
52  {
53  const std::vector<ReporterName> reporter_names(
54  getParam<std::vector<ReporterName>>("reporter_names"));
55  mooseError("All vectors being operated on must be the same size.",
56  "\nsize of ",
57  reporter_names[0].getCombinedName(),
58  " = ",
59  entries,
60  "\nsize of ",
61  reporter_names[rep_index].getCombinedName(),
62  " = ",
63  _reporter_data[rep_index]->size());
64  }
65 
66  _output_reporter.resize(entries, 0.0);
67  for (const auto i : make_range(entries))
68  {
69  for (const auto rep_index : index_range(_reporter_data))
70  _func_params[rep_index] = _reporter_data[rep_index]->at(i);
71 
72  if (_use_t)
73  _func_params[_reporter_data.size()] = _t;
74 
76  }
77 }
GenericReal< is_ad > evaluate(SymFunctionPtr &, const std::string &object_name="")
Reporter containing operation between vectors from another Reporter.
const T & getReporterValueByName(const ReporterName &reporter_name, const std::size_t time_index=0)
const ReporterMode REPORTER_MODE_ROOT
std::vector< const std::vector< Real > * > _reporter_data
input reporter vectors
std::vector< double > & _output_reporter
output vector
SymFunctionPtr _func_F
function parser object
void addRequiredParam(const std::string &name, const std::string &doc_string)
ParsedVectorReporter(const InputParameters &parameters)
const T & getParam(const std::string &name) const
static InputParameters validParams()
const std::vector< std::string > _reporter_symbols
Get symbols to corresponding reporter names need symbols because reporter names have a "/" and that w...
void paramError(const std::string &param, Args... args) const
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::vector< GenericReal< is_ad > > _func_params
const bool _use_t
whether time is part of the parsed expression
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
registerMooseObject("OptimizationApp", ParsedVectorReporter)
void addClassDescription(const std::string &doc_string)
Reporter containing operation between vectors from another Reporter.
virtual void finalize() override
auto index_range(const T &sizable)