22 "Function used for optimization that uses a parsed expression with parameter dependence.");
25 "expression",
"FunctionExpression",
"The user defined function.");
27 "param_symbol_names",
"Names of parameters in 'expression' being optimized.");
29 "param_vector_name",
"Reporter or VectorPostprocessor vector containing parameter values.");
30 params.
addParam<std::vector<std::string>>(
31 "constant_symbol_names",
32 std::vector<std::string>(),
33 "Variables (excluding t,x,y,z) that are bound to the values provided by the corresponding " 34 "items in the symbol_values vector.");
36 "constant_symbol_values", std::vector<Real>(),
"Constant numeric values for vars.");
43 _expression(getParam<
std::string>(
"expression")),
44 _param_names(getParam<
std::vector<
std::string>>(
"param_symbol_names")),
45 _params(getReporterValue<
std::vector<
Real>>(
"param_vector_name")),
46 _symbol_names(getParam<
std::vector<
std::string>>(
"constant_symbol_names")),
47 _symbol_values(getParam<
std::vector<
Real>>(
"constant_symbol_values"))
50 paramError(
"symbol_names",
"Number of vars must match the number of vals for a ",
type(),
"!");
53 std::string msg =
"The variables \"x, y, z, and t\" in the ParsedFunction are pre-declared for " 54 "use and must not be declared.";
56 if (var.find_first_of(
"xyzt") != std::string::npos && var.size() == 1)
59 if (var.find_first_of(
"xyzt") != std::string::npos && var.size() == 1)
63 _parser = std::make_unique<FunctionParserADBase<Real>>();
66 _parser->AddConstant(
"NaN", std::numeric_limits<Real>::quiet_NaN());
68 _parser->AddConstant(
"e", std::exp(1.0));
73 std::vector<std::string> all_vars = {
"x",
"y",
"z",
"t"};
79 _parser->SetADFlags(FunctionParserADBase<Real>::ADAutoOptimize);
89 "Unable to take derivative with respect to ",
132 std::string
name)
const 138 ") does not match number of specified 'param_names' (",
142 std::vector<Real> parser_var_values(4 +
_param_names.size());
143 parser_var_values[0] = p(0);
144 parser_var_values[1] = p(1);
145 parser_var_values[2] = p(2);
146 parser_var_values[3] = t;
148 parser_var_values[4 + i] =
_params[i];
150 Real result = parser.Eval(parser_var_values.data());
152 auto err = parser.EvalError();
155 std::string msg =
"Error evaluating function " +
name +
"\n";
159 msg +=
"Division by zero";
162 msg +=
"Square Root error (negative value)";
165 msg +=
"Log error (negative value)";
168 msg +=
"Trigonometric error (asin or acos of illegal value)";
171 msg +=
"Maximum recursion level reached";
std::string join(Iterator begin, Iterator end, const std::string &delimiter)
registerMooseObject("OptimizationApp", ParsedOptimizationFunction)
std::vector< std::unique_ptr< FunctionParserADBase< Real > > > _derivative_parsers
Pointers to parsed function objects representing derivative (first four are xyzt) ...
const std::vector< std::string > & _param_names
Parameters passed to FParser.
virtual Real value(Real t, const Point &p) const override
const std::vector< Real > & _symbol_values
Values passed by the user, they may be Reals for Postprocessors.
Real evaluateExpression(FunctionParserADBase< Real > &parser, Real t, const Point &p, std::string name="") const
Function to evaluate an inputted parser.
virtual const std::string & name() const
const std::vector< std::string > & _symbol_names
Variables passed to FParser.
const std::string & _expression
Function expression passed to FParser.
ParsedOptimizationFunction(const InputParameters ¶meters)
virtual RealGradient gradient(Real t, const Point &p) const override
const std::string & type() const
std::unique_ptr< FunctionParserADBase< Real > > _parser
Pointer to parsed function object.
void paramError(const std::string ¶m, Args... args) const
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...
virtual std::vector< Real > parameterGradient(Real t, const Point &p) const override
static InputParameters validParams()
const std::vector< Real > & _params
Vector containing parameter values.
virtual Real timeDerivative(Real t, const Point &p) const override
static InputParameters validParams()
auto index_range(const T &sizable)