www.mooseframework.org
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
FunctionParserUtils< is_ad > Class Template Reference

#include <FunctionParserUtils.h>

Inheritance diagram for FunctionParserUtils< is_ad >:
[legend]

Public Types

typedef GenericSymFunction< is_ad > SymFunction
 Shorthand for an autodiff function parser object. More...
 
typedef std::shared_ptr< SymFunctionSymFunctionPtr
 Shorthand for an smart pointer to an autodiff function parser object. More...
 

Public Member Functions

 FunctionParserUtils (const InputParameters &parameters)
 
void setParserFeatureFlags (SymFunctionPtr &)
 apply input paramters to internal feature flags of the parser object More...
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Types

enum  FailureMethod { FailureMethod::nan, FailureMethod::nan_warning, FailureMethod::error, FailureMethod::exception }
 Enum for failure method. More...
 

Protected Member Functions

GenericReal< is_ad > evaluate (SymFunctionPtr &, const std::string &object_name="")
 Evaluate FParser object and check EvalError. More...
 
void addFParserConstants (SymFunctionPtr &parser, const std::vector< std::string > &constant_names, const std::vector< std::string > &constant_expressions)
 add constants (which can be complex expressions) to the parser object More...
 
virtual void functionsOptimize (SymFunctionPtr &parsed_function)
 
template<>
void functionsOptimize (SymFunctionPtr &parsed_function)
 
template<>
void functionsOptimize (SymFunctionPtr &parsed_function)
 

Protected Attributes

enum FunctionParserUtils::FailureMethod _evalerror_behavior
 
const Real _quiet_nan
 appropriate not a number value to return More...
 
std::vector< GenericReal< is_ad > > _func_params
 Array to stage the parameters passed to the functions when calling Eval. More...
 
bool _enable_jit
 
bool _enable_ad_cache
 
bool _disable_fpoptimizer
 
bool _enable_auto_optimize
 

Static Protected Attributes

static const char * _eval_error_msg []
 table of FParser eval error codes More...
 

Detailed Description

template<bool is_ad = false>
class FunctionParserUtils< is_ad >

Definition at line 54 of file FunctionParserUtils.h.

Member Typedef Documentation

◆ SymFunction

template<bool is_ad = false>
typedef GenericSymFunction<is_ad> FunctionParserUtils< is_ad >::SymFunction

Shorthand for an autodiff function parser object.

Definition at line 62 of file FunctionParserUtils.h.

◆ SymFunctionPtr

template<bool is_ad = false>
typedef std::shared_ptr<SymFunction> FunctionParserUtils< is_ad >::SymFunctionPtr

Shorthand for an smart pointer to an autodiff function parser object.

Definition at line 65 of file FunctionParserUtils.h.

Member Enumeration Documentation

◆ FailureMethod

template<bool is_ad = false>
enum FunctionParserUtils::FailureMethod
strongprotected

Enum for failure method.

Enumerator
nan 
nan_warning 
error 
exception 

Definition at line 90 of file FunctionParserUtils.h.

90 { nan, nan_warning, error, exception } _evalerror_behavior;
enum FunctionParserUtils::FailureMethod _evalerror_behavior

Constructor & Destructor Documentation

◆ FunctionParserUtils()

template<bool is_ad>
FunctionParserUtils< is_ad >::FunctionParserUtils ( const InputParameters parameters)

Definition at line 59 of file FunctionParserUtils.C.

60  : _enable_jit(parameters.isParamValid("enable_jit") && parameters.get<bool>("enable_jit")),
61  _enable_ad_cache(parameters.get<bool>("enable_ad_cache")),
62  _disable_fpoptimizer(parameters.get<bool>("disable_fpoptimizer")),
63  _enable_auto_optimize(parameters.get<bool>("enable_auto_optimize") && !_disable_fpoptimizer),
64  _evalerror_behavior(parameters.get<MooseEnum>("evalerror_behavior").getEnum<FailureMethod>()),
65  _quiet_nan(std::numeric_limits<Real>::quiet_NaN())
66 {
67 #ifndef LIBMESH_HAVE_FPARSER_JIT
68  if (_enable_jit)
69  {
70  mooseWarning("Tried to enable FParser JIT but libmesh does not have it compiled in.");
71  _enable_jit = false;
72  }
73 #endif
74 }
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
Combine two vector parameters into a single vector of pairs.
void mooseWarning(Args &&... args)
Emit a warning message with the given stringified, concatenated args.
Definition: MooseError.h:333
T getEnum() const
get the current value cast to the enum type T
Definition: MooseEnum.h:149
enum FunctionParserUtils::FailureMethod _evalerror_behavior
FailureMethod
Enum for failure method.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:31
const Real _quiet_nan
appropriate not a number value to return
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another, i.e.

Member Function Documentation

◆ addFParserConstants()

template<bool is_ad>
void FunctionParserUtils< is_ad >::addFParserConstants ( SymFunctionPtr parser,
const std::vector< std::string > &  constant_names,
const std::vector< std::string > &  constant_expressions 
)
protected

add constants (which can be complex expressions) to the parser object

Definition at line 134 of file FunctionParserUtils.C.

138 {
139  // check constant vectors
140  unsigned int nconst = constant_expressions.size();
141  if (nconst != constant_names.size())
142  mooseError("The parameter vectors constant_names and constant_values must have equal length.");
143 
144  // previously evaluated constant_expressions may be used in following constant_expressions
145  std::vector<Real> constant_values(nconst);
146 
147  for (unsigned int i = 0; i < nconst; ++i)
148  {
149  // no need to use dual numbers for the constant expressions
150  auto expression = std::make_shared<FunctionParserADBase<Real>>();
151 
152  // add previously evaluated constants
153  for (unsigned int j = 0; j < i; ++j)
154  if (!expression->AddConstant(constant_names[j], constant_values[j]))
155  mooseError("Invalid constant name in ParsedMaterialHelper");
156 
157  // build the temporary constant expression function
158  if (expression->Parse(constant_expressions[i], "") >= 0)
159  mooseError("Invalid constant expression\n",
160  constant_expressions[i],
161  "\n in parsed function object.\n",
162  expression->ErrorMsg());
163 
164  constant_values[i] = expression->Eval(NULL);
165 
166  if (!parser->AddConstant(constant_names[i], constant_values[i]))
167  mooseError("Invalid constant name in parsed function object");
168  }
169 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:299

◆ evaluate()

template<bool is_ad>
GenericReal< is_ad > FunctionParserUtils< is_ad >::evaluate ( SymFunctionPtr parser,
const std::string &  object_name = "" 
)
protected

Evaluate FParser object and check EvalError.

Definition at line 86 of file FunctionParserUtils.C.

Referenced by ParsedFunctorMaterialTempl< is_ad >::ParsedFunctorMaterialTempl().

87 {
88  // null pointer is a shortcut for vanishing derivatives, see functionsOptimize()
89  if (parser == NULL)
90  return 0.0;
91 
92  // evaluate expression
93  auto result = parser->Eval(_func_params.data());
94 
95  // fetch fparser evaluation error (set to unknown if the JIT result is nan)
96  int error_code = _enable_jit ? (std::isnan(result) ? -1 : 0) : parser->EvalError();
97 
98  // no error
99  if (error_code == 0)
100  return result;
101 
102  // hard fail or return not a number
103  switch (_evalerror_behavior)
104  {
105  case FailureMethod::nan:
106  return _quiet_nan;
107 
109  mooseWarning("In ",
110  name,
111  ": Parsed function evaluation encountered an error: ",
112  _eval_error_msg[(error_code < 0 || error_code > 5) ? 0 : error_code]);
113  return _quiet_nan;
114 
116  mooseError("In ",
117  name,
118  ": Parsed function evaluation encountered an error: ",
119  _eval_error_msg[(error_code < 0 || error_code > 5) ? 0 : error_code]);
120 
122  mooseException("In ",
123  name,
124  ": Parsed function evaluation encountered an error: ",
125  _eval_error_msg[(error_code < 0 || error_code > 5) ? 0 : error_code],
126  "\n Cutting timestep");
127  }
128 
129  return _quiet_nan;
130 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:299
void mooseWarning(Args &&... args)
Emit a warning message with the given stringified, concatenated args.
Definition: MooseError.h:333
enum FunctionParserUtils::FailureMethod _evalerror_behavior
const Real _quiet_nan
appropriate not a number value to return
static const char * _eval_error_msg[]
table of FParser eval error codes
std::vector< GenericReal< is_ad > > _func_params
Array to stage the parameters passed to the functions when calling Eval.

◆ functionsOptimize() [1/3]

template<bool is_ad = false>
virtual void FunctionParserUtils< is_ad >::functionsOptimize ( SymFunctionPtr parsed_function)
protectedvirtual

◆ functionsOptimize() [2/3]

template<>
void FunctionParserUtils< true >::functionsOptimize ( SymFunctionPtr parsed_function)
protected

◆ functionsOptimize() [3/3]

template<>
void FunctionParserUtils< true >::functionsOptimize ( SymFunctionPtr parsed_function)
protected

Definition at line 184 of file FunctionParserUtils.C.

185 {
186  // base function
188  parsed_function->Optimize();
189  if (!_enable_jit || !parsed_function->JITCompile())
190  mooseError("AD parsed objects require JIT compilation to be enabled and working.");
191 }
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:299

◆ setParserFeatureFlags()

template<bool is_ad>
void FunctionParserUtils< is_ad >::setParserFeatureFlags ( SymFunctionPtr parser)

apply input paramters to internal feature flags of the parser object

Definition at line 78 of file FunctionParserUtils.C.

79 {
80  parser->SetADFlags(SymFunction::ADCacheDerivatives, _enable_ad_cache);
81  parser->SetADFlags(SymFunction::ADAutoOptimize, _enable_auto_optimize);
82 }

◆ validParams()

template<bool is_ad>
InputParameters FunctionParserUtils< is_ad >::validParams ( )
static

Definition at line 18 of file FunctionParserUtils.C.

Referenced by ArrayParsedAux::validParams(), ParsedODEKernel::validParams(), ParsedAux::validParams(), ParsedSubdomainMeshGenerator::validParams(), ParsedVectorAux::validParams(), ParsedPostprocessor::validParams(), ParsedFunctorMaterialTempl< is_ad >::validParams(), ParsedCurveGenerator::validParams(), ParsedNodeTransformGenerator::validParams(), ParsedGenerateSideset::validParams(), TransfiniteMeshGenerator::validParams(), ParsedElementDeletionGenerator::validParams(), and ParsedMaterialHelper< is_ad >::validParams().

19 {
21 
22  params.addParam<bool>(
23  "enable_jit",
24 #ifdef LIBMESH_HAVE_FPARSER_JIT
25  true,
26 #else
27  false,
28 #endif
29  "Enable just-in-time compilation of function expressions for faster evaluation");
30  params.addParam<bool>(
31  "enable_ad_cache", true, "Enable caching of function derivatives for faster startup time");
32  params.addParam<bool>(
33  "enable_auto_optimize", true, "Enable automatic immediate optimization of derivatives");
34  params.addParam<bool>(
35  "disable_fpoptimizer", false, "Disable the function parser algebraic optimizer");
36  MooseEnum evalerror("nan nan_warning error exception", "nan");
37  params.addParam<MooseEnum>("evalerror_behavior",
38  evalerror,
39  "What to do if evaluation error occurs. Options are to pass a nan, "
40  "pass a nan with a warning, throw a error, or throw an exception");
41 
42  params.addParamNamesToGroup(
43  "enable_jit enable_ad_cache enable_auto_optimize disable_fpoptimizer evalerror_behavior",
44  "Advanced");
45 
46  return params;
47 }
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
InputParameters emptyInputParameters()
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:31
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an option parameter and a documentation string to the InputParameters object...
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...

Member Data Documentation

◆ _disable_fpoptimizer

template<bool is_ad = false>
bool FunctionParserUtils< is_ad >::_disable_fpoptimizer
protected

Definition at line 85 of file FunctionParserUtils.h.

◆ _enable_ad_cache

template<bool is_ad = false>
bool FunctionParserUtils< is_ad >::_enable_ad_cache
protected

Definition at line 84 of file FunctionParserUtils.h.

◆ _enable_auto_optimize

template<bool is_ad = false>
bool FunctionParserUtils< is_ad >::_enable_auto_optimize
protected

Definition at line 86 of file FunctionParserUtils.h.

◆ _enable_jit

template<bool is_ad = false>
bool FunctionParserUtils< is_ad >::_enable_jit
protected

◆ _eval_error_msg

template<bool is_ad = false>
const char * FunctionParserUtils< is_ad >::_eval_error_msg
staticprotected
Initial value:
= {
"Unknown",
"Division by zero",
"Square root of a negative value",
"Logarithm of negative value",
"Trigonometric error (asin or acos of illegal value)",
"Maximum recursion level reached"}

table of FParser eval error codes

Definition at line 96 of file FunctionParserUtils.h.

◆ _evalerror_behavior

template<bool is_ad = false>
enum FunctionParserUtils::FailureMethod FunctionParserUtils< is_ad >::_evalerror_behavior
protected

◆ _func_params

template<bool is_ad = false>
std::vector<GenericReal<is_ad> > FunctionParserUtils< is_ad >::_func_params
protected

Array to stage the parameters passed to the functions when calling Eval.

Definition at line 99 of file FunctionParserUtils.h.

Referenced by ParsedFunctorMaterialTempl< is_ad >::ParsedFunctorMaterialTempl().

◆ _quiet_nan

template<bool is_ad = false>
const Real FunctionParserUtils< is_ad >::_quiet_nan
protected

appropriate not a number value to return

Definition at line 93 of file FunctionParserUtils.h.


The documentation for this class was generated from the following files: