https://mooseframework.inl.gov
OptimizationFunctionTest.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 
11 
12 #include "OptimizationFunction.h"
13 
14 registerMooseObject("OptimizationTestApp", OptimizationFunctionTest);
15 
18 {
20  params.addClassDescription(
21  "Outputs parameter gradients for the inputted optimization functions.");
22  params.addRequiredParam<std::vector<FunctionName>>("functions",
23  "Optimization functions to test.");
24  params.addParam<std::vector<Point>>(
25  "points",
26  std::vector<Point>(1, Point(0, 0, 0)),
27  "Points in domain to test the functions, default is single point at (0,0,0).");
28  params.addParam<std::vector<Real>>("times",
29  std::vector<Real>(1, 0),
30  "Times to test the functions, default is single time at 0.");
31  return params;
32 }
33 
36  _points(getParam<std::vector<Point>>("points")),
37  _times(getParam<std::vector<Real>>("times"))
38 {
39  for (const auto & fnm : getParam<std::vector<FunctionName>>("functions"))
40  {
41  auto func = dynamic_cast<const OptimizationFunction *>(&getFunctionByName(fnm));
42  if (!func)
43  paramError("functions", fnm, " is not an OptimizationFunction.");
44  auto & vecs = _functions[func];
45  for (const auto & t : index_range(_times))
46  for (const auto & p : index_range(_points))
47  {
48  const std::string vnm = fnm + "_t" + std::to_string(t) + "_p" + std::to_string(p);
49  vecs.push_back(&declareVector(vnm));
50  }
51  }
52 }
53 
54 void
56 {
57  for (auto & it : _functions)
58  {
59  const auto & fun = *it.first;
60  auto & vecs = it.second;
61  std::size_t ind = 0;
62  for (const auto & t : _times)
63  for (const auto & p : _points)
64  (*vecs[ind++]) = fun.parameterGradient(t, p);
65  }
66 }
const std::vector< Point > & _points
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
static InputParameters validParams()
OptimizationFunctionTest(const InputParameters &params)
void addRequiredParam(const std::string &name, const std::string &doc_string)
const std::vector< Real > & _times
static InputParameters validParams()
const T & getParam(const std::string &name) const
void paramError(const std::string &param, Args... args) const
VectorPostprocessorValue & declareVector(const std::string &vector_name)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Base class for functions used in inverse optimization The parameterDerivative function is used in adj...
const Function & getFunctionByName(const FunctionName &name) const
std::map< const OptimizationFunction *, std::vector< VectorPostprocessorValue * > > _functions
void addClassDescription(const std::string &doc_string)
registerMooseObject("OptimizationTestApp", OptimizationFunctionTest)
auto index_range(const T &sizable)