14 #ifndef _EXPR_FUNCTIONS_H
15 #define _EXPR_FUNCTIONS_H
37 template<
class Scalar>
50 std::vector< std::unique_ptr<Expression> >
expr;
52 std::vector< std::unique_ptr<FunctionList> >
f;
54 std::vector< std::unique_ptr<ValueList> >
v;
56 std::vector<Scalar*>
arg;
74 void addDerivative(
const std::string&
function,
const char* x =
"x");
92 template<
class Scalar>
105 std::vector< std::unique_ptr<Expression> >
expr;
107 std::vector< std::unique_ptr<FunctionList> >
f;
109 std::vector< std::unique_ptr<ValueList> >
v;
121 const Scalar&
get(
int dir)
const
155 void addDerivative(
const std::string&
function,
const std::string& variables,
167 void setParam(
const std::string& name,
Real value)
override;
191 template<
class Scalar>
198 EvalFunctions(
const std::string& functions,
const std::string& variables,
208 const std::string& variables,
int d1,
int d2 = 0);
214 std::vector<std::unique_ptr<FuncType>>
p;
224 template <
class ParentFunc,
class Ret,
class Scalar>
233 const std::string& variables =
"",
234 const Real epsX = 1e-8,
235 const Real epsT = 1e-12)
247 return std::all_of(this->
p.begin(), this->p.end(),
248 [](
const std::unique_ptr<FuncType>& func)
249 { return func->isConstant(); });
253 unsigned char getType()
const override {
return 2; }
256 Ret
deriv(
const Vec3& X,
int dir)
const override;
258 Ret
dderiv(
const Vec3& X,
int dir1,
int dir2)
const override;
263 for (std::unique_ptr<FuncType>& func : this->
p)
264 func->setParam(name,value);
General functions with arbitrary argument and value type.
#define Real
The floating point type to use.
Definition: ImmersedBoundaries.h:18
Spatial tensor-valued functions.
A scalar-valued function, general expression.
Definition: ExprFunctions.h:39
Real dx
Domain increment for calculation of numerical derivative.
Definition: ExprFunctions.h:60
std::unique_ptr< FuncType > gradient
First derivative expression.
Definition: ExprFunctions.h:58
std::vector< Scalar * > arg
Function argument values.
Definition: ExprFunctions.h:56
void addDerivative(const std::string &function, const char *x="x")
Adds an expression function for a first derivative.
Definition: ExprFunctions.C:245
std::vector< std::unique_ptr< Expression > > expr
Roots of the expression tree.
Definition: ExprFunctions.h:50
static int numError
Error counter - set by the exception handler.
Definition: ExprFunctions.h:63
std::vector< std::unique_ptr< ValueList > > v
Lists of variables and constants.
Definition: ExprFunctions.h:54
bool isConstant() const override
Returns whether the function is time-independent or not.
Definition: ExprFunctions.h:77
virtual ~EvalFuncScalar()
Defaulted destructor.
Real evaluate(const Real &x) const override
Evaluates the function expression.
Definition: ExprFunctions.C:254
EvalFuncScalar(const char *function, const char *x="x", Real eps=Real(1.0e-8))
The constructor parses the expression string.
Definition: ExprFunctions.C:206
Real deriv(Real x) const override
Returns the first-derivative of the function.
Definition: ExprFunctions.C:281
std::vector< std::unique_ptr< FunctionList > > f
Lists of functions.
Definition: ExprFunctions.h:52
A scalar-valued spatial function, general function expression.
Definition: ExprFunctions.h:94
bool IAmConstant
Indicates whether the time coordinate is given or not.
Definition: ExprFunctions.h:140
bool isConstant() const override
Returns whether the function is time-independent or not.
Definition: ExprFunctions.h:159
std::vector< std::unique_ptr< FunctionList > > f
Lists of functions.
Definition: ExprFunctions.h:107
Real dx
Domain increment for calculation of numerical derivative.
Definition: ExprFunctions.h:142
Real evaluate(const Vec3 &X) const override
Evaluates the function expression.
Definition: ExprFunctions.C:395
void addDerivative(const std::string &function, const std::string &variables, int d1, int d2=0)
Adds an expression function for a first or second derivative.
Definition: ExprFunctions.C:375
EvalFuncSpatial(const char *function, Real epsX=Real(1.0e-8), Real epsT=Real(1.0e-12))
The constructor parses the expression string.
Definition: ExprFunctions.C:319
Vec3 gradient(const Vec3 &X) const override
Evaluates first derivatives of the function.
Definition: ExprFunctions.h:170
std::vector< std::unique_ptr< Expression > > expr
Roots of the expression tree.
Definition: ExprFunctions.h:105
Real dt
Domain increment for calculation of numerical time-derivative.
Definition: ExprFunctions.h:143
Real deriv(const Vec3 &X, int dir) const override
Returns first-derivative of the function.
std::vector< Arg > arg
Function argument values.
Definition: ExprFunctions.h:133
Real dderiv(const Vec3 &X, int dir1, int dir2) const override
Returns second-derivative of the function.
std::array< std::unique_ptr< FuncType >, 6 > derivative2
Second order derivative expressions.
Definition: ExprFunctions.h:138
SymmTensor hessian(const Vec3 &X) const override
Evaluates first derivatives of the function.
Definition: ExprFunctions.h:176
virtual ~EvalFuncSpatial()
Defaulted destructor.
std::array< std::unique_ptr< FuncType >, 4 > derivative1
First order derivative expressions.
Definition: ExprFunctions.h:136
std::vector< std::unique_ptr< ValueList > > v
Lists of variables and constants.
Definition: ExprFunctions.h:109
void setParam(const std::string &name, Real value) override
Sets an additional parameter in the function.
Definition: ExprFunctions.C:579
A base class for multi-component expression functions.
Definition: ExprFunctions.h:193
std::vector< std::unique_ptr< FuncType > > p
Array of component expressions.
Definition: ExprFunctions.h:214
size_t nsd
Number of spatial dimensions.
Definition: ExprFunctions.h:215
void addDerivative(const std::string &functions, const std::string &variables, int d1, int d2=0)
Adds an expression function for a first or second derivative.
Definition: ExprFunctions.C:616
size_t getNoSpaceDim() const
Returns number of spatial dimension.
Definition: ExprFunctions.h:211
EvalFunctions(const std::string &functions, const std::string &variables, const Real epsX, const Real epsT)
The constructor parses the expression string for each component.
Definition: ExprFunctions.C:601
virtual ~EvalFunctions()
Defaulted destructor.
A general spatial expression function of any return type.
Definition: ExprFunctions.h:226
void setParam(const std::string &name, Real value) override
Sets an additional parameter in the function.
Definition: ExprFunctions.h:261
std::vector< Real > evalHessian(const Vec3 &X) const override
Returns the second derivatives of the function as a 1D array.
Definition: ExprFunctions.C:691
Ret evaluate(const Vec3 &X) const override
Evaluates the function expressions.
Definition: ExprFunctions.C:627
bool isConstant() const override
Returns whether the function is time-independent or not.
Definition: ExprFunctions.h:245
unsigned char getType() const override
Returns the function type flag.
Definition: ExprFunctions.h:253
Ret dderiv(const Vec3 &X, int dir1, int dir2) const override
Returns second-derivative of the function.
Definition: ExprFunctions.C:658
EvalMultiFunction(const std::string &functions, const std::string &variables="", const Real epsX=1e-8, const Real epsT=1e-12)
The constructor parses the expression string for each component.
Definition: ExprFunctions.h:232
virtual ~EvalMultiFunction()
Empty destructor.
Definition: ExprFunctions.h:242
std::vector< Real > evalTimeDerivative(const Vec3 &X) const override
Returns the time derivatives of the function as a 1D array.
Definition: ExprFunctions.C:711
void setNoDims()
Sets the number of spatial dimensions (default implementation).
Definition: ExprFunctions.C:638
std::vector< Real > evalGradient(const Vec3 &X) const override
Returns the gradient of the function as a 1D array.
Definition: ExprFunctions.C:671
Ret deriv(const Vec3 &X, int dir) const override
Returns first-derivative of the function.
Definition: ExprFunctions.C:646
Definition: ExprFunctions.h:27
Definition: ExprFunctions.h:28
Definition: ExprFunctions.h:29
Scalar-valued unary function of a spatial point.
Definition: Function.h:193
virtual Vec3 gradient(const Vec3 &X) const
Evaluates first derivatives of the function.
Definition: Function.h:209
virtual SymmTensor hessian(const Vec3 &X) const
Evaluates second derivatives of the function.
Definition: Function.h:219
Scalar-valued unary function of a scalar value.
Definition: Function.h:127
Simple class for representing a symmetric second-order tensor.
Definition: Tensor.h:183
Simple class for representing a point in 3D space.
Definition: Vec3.h:27
A struct representing a spatial function argument.
Definition: ExprFunctions.h:113
Scalar * y
Y-coordinate.
Definition: ExprFunctions.h:115
Scalar * x
X-coordinate.
Definition: ExprFunctions.h:114
const Scalar & get(int dir) const
Returns a const ref to a member.
Definition: ExprFunctions.h:121
Scalar * z
Z-coordinate.
Definition: ExprFunctions.h:116
Scalar * t
Time.
Definition: ExprFunctions.h:117