SpECTRE  v2024.04.12
funcl Namespace Reference

Higher order function objects similar to std::plus, etc. More...

Classes

struct  Abs
 Functional for computing abs on an object. More...
 
struct  Acos
 Functional for computing acos on an object. More...
 
struct  Acosh
 Functional for computing acosh on an object. More...
 
struct  And
 Functional for computing and of two objects. More...
 
struct  Asin
 Functional for computing asin on an object. More...
 
struct  Asinh
 Functional for computing asinh on an object. More...
 
struct  AssertEqual
 Functional that asserts that the function object C applied to the first and second arguments are equal and returns the function object C applied to the first argument. More...
 
struct  Atan
 Functional for computing atan on an object. More...
 
struct  Atan2
 Functional for computing atan2 from two objects. More...
 
struct  Atanh
 Functional for computing atanh on an object. More...
 
struct  Cbrt
 Functional for computing cbrt on an object. More...
 
struct  Conj
 Functional for computing conj on an object. More...
 
struct  Cos
 Functional for computing cos on an object. More...
 
struct  Cosh
 Functional for computing cosh on an object. More...
 
struct  DivAssign
 Functional for computing /= of two objects. More...
 
struct  Divides
 Functional for computing / of two objects. More...
 
struct  ElementWise
 Function that applies C to every element of the operands. This function is currently only tested for std::vector operands. Operands other than the first may be a single value, which is applied element-wise to the vector. If needed, this function can be generalized further. More...
 
struct  Erf
 Functional for computing erf on an object. More...
 
struct  Exp
 Functional for computing exp on an object. More...
 
struct  Exp2
 Functional for computing exp2 on an object. More...
 
struct  Fabs
 Functional for computing fabs on an object. More...
 
struct  GetArgument
 Functional to retrieve the ArgumentIndexth argument. More...
 
struct  Hypot
 Functional for computing hypot from two objects. More...
 
struct  Identity
 The identity higher order function object. More...
 
struct  Imag
 Functional for computing imag on an object. More...
 
struct  InvCbrt
 Functional for computing invcbrt on an object. More...
 
struct  InvSqrt
 Functional for computing invsqrt on an object. More...
 
struct  Literal
 
struct  Log
 Functional for computing log on an object. More...
 
struct  Log10
 Functional for computing log10 on an object. More...
 
struct  Log2
 Functional for computing log2 on an object. More...
 
struct  Max
 Functional for computing max from two objects. More...
 
struct  Merge
 Function that merges two containers using the merge method of the first container. Can be used to collect data in a std::map in a reduction. More...
 
struct  Min
 Functional for computing min from two objects. More...
 
struct  Minus
 Functional for computing - of two objects. More...
 
struct  MinusAssign
 Functional for computing -= of two objects. More...
 
struct  MultAssign
 Functional for computing *= of two objects. More...
 
struct  Multiplies
 Functional for computing * of two objects. More...
 
struct  Negate
 Functional for computing - on an object. More...
 
struct  Or
 Functional for computing or of two objects. More...
 
struct  Plus
 Functional for computing + of two objects. More...
 
struct  PlusAssign
 Functional for computing += of two objects. More...
 
struct  Pow
 Functional for computing pow from two objects. More...
 
struct  Real
 Functional for computing real on an object. More...
 
struct  Sin
 Functional for computing sin on an object. More...
 
struct  Sinh
 Functional for computing sinh on an object. More...
 
struct  Sqrt
 Functional for computing sqrt on an object. More...
 
struct  Square
 Function for squaring a quantity. More...
 
struct  StepFunction
 Functional for computing step_function on an object. More...
 
struct  Tan
 Functional for computing tan on an object. More...
 
struct  Tanh
 Functional for computing tanh on an object. More...
 
struct  UnaryPow
 Function for computing an integer power, forwards to template pow<N>() More...
 

Functions

 MAKE_LITERAL_VAL (Pi, M_PI)
 
 MAKE_LITERAL_VAL (E, M_E)
 

Detailed Description

Higher order function objects similar to std::plus, etc.

Details

These chaining function objects can be used to represent highly general mathematical operations

  1. as types, which can be passed around in template arguments, and
  2. such that any time they can be evaluated at compile time, they will be.

As an illustrative example, consider the definition of a general sinusoid function object type :

using Sinusoid = funcl::Multiplies<
The identity higher order function object.
Definition: Functional.hpp:216
Functional for computing * of two objects.
Definition: Functional.hpp:235
Functional for computing sin on an object.
Definition: Functional.hpp:271

which then gives a type which when instantiated and evaluated will give the answer \( a\times\sin(b + c \times d)\) from calling Sinusoid{}(a,b,c,d)

As a more creative example, we can take advantage of literals to make, for instance, distributions. Let's make a Gaussian with mean at 5.0 and unity variance

using GaussianExp =
using Gaussian = funcl::Exp<GaussianExp>;
Functional for computing exp on an object.
Definition: Functional.hpp:261
Functional for computing - on an object.
Definition: Functional.hpp:277

This gives us a function object whose call operator takes one argument that gives the value of the desired Gaussian distribution \( e^{-(x - 5.0)^2} \)