www.mooseframework.org
FunctionParserUtils.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 #pragma once
11 
12 #include "Moose.h"
13 #include "MooseTypes.h"
14 #include "ADFParser.h"
15 
16 #include "libmesh/fparser_ad.hh"
17 
18 // C++ includes
19 #include <memory>
20 
21 #define usingFunctionParserUtilsMembers(T) \
22  using typename FunctionParserUtils<T>::SymFunction; \
23  using typename FunctionParserUtils<T>::SymFunctionPtr; \
24  using typename FunctionParserUtils<T>::FailureMethod; \
25  using FunctionParserUtils<T>::evaluate; \
26  using FunctionParserUtils<T>::functionsOptimize; \
27  using FunctionParserUtils<T>::setParserFeatureFlags; \
28  using FunctionParserUtils<T>::addFParserConstants; \
29  using FunctionParserUtils<T>::_enable_jit; \
30  using FunctionParserUtils<T>::_enable_ad_cache; \
31  using FunctionParserUtils<T>::_disable_fpoptimizer; \
32  using FunctionParserUtils<T>::_enable_auto_optimize; \
33  using FunctionParserUtils<T>::_eval_error_msg; \
34  using FunctionParserUtils<T>::_func_params
35 
36 // Helper class to pic the correct function parser
37 template <bool is_ad>
39 {
40  typedef FunctionParserADBase<Real> type;
41 };
42 template <>
44 {
45  typedef ADFParser type;
46 };
47 template <bool is_ad>
49 
50 // Forward declartions
51 class InputParameters;
52 
53 template <bool is_ad = false>
55 {
56 public:
58 
59  FunctionParserUtils(const InputParameters & parameters);
60 
63 
65  typedef std::shared_ptr<SymFunction> SymFunctionPtr;
66 
69 
70 protected:
72  GenericReal<is_ad> evaluate(SymFunctionPtr &, const std::string & object_name = "");
73 
75  void addFParserConstants(SymFunctionPtr & parser,
76  const std::vector<std::string> & constant_names,
77  const std::vector<std::string> & constant_expressions);
78 
79  // run FPOptimizer on the parsed function
80  virtual void functionsOptimize(SymFunctionPtr & parsed_function);
81 
88 
91 
94 
96  static const char * _eval_error_msg[];
97 
99  std::vector<GenericReal<is_ad>> _func_params;
100 };
101 
102 template <>
103 void FunctionParserUtils<false>::functionsOptimize(SymFunctionPtr & parsed_function);
104 
105 template <>
106 void FunctionParserUtils<true>::functionsOptimize(SymFunctionPtr & parsed_function);
GenericReal< is_ad > evaluate(SymFunctionPtr &, const std::string &object_name="")
Evaluate FParser object and check EvalError.
typename GenericSymFunctionTempl< is_ad >::type GenericSymFunction
std::shared_ptr< SymFunction > SymFunctionPtr
Shorthand for an smart pointer to an autodiff function parser object.
FunctionParserUtils(const InputParameters &parameters)
FunctionParserADBase< Real > type
virtual void functionsOptimize(SymFunctionPtr &parsed_function)
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
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
GenericSymFunction< is_ad > SymFunction
Shorthand for an autodiff function parser object.
enum FunctionParserUtils::FailureMethod _evalerror_behavior
FailureMethod
Enum for failure method.
const Real _quiet_nan
appropriate not a number value to return
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
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.
static InputParameters validParams()
typename Moose::GenericType< Real, is_ad > GenericReal
Definition: MooseTypes.h:559
void setParserFeatureFlags(SymFunctionPtr &)
apply input paramters to internal feature flags of the parser object