Class template Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>

Inherits from Dune::XT::Common::ParametricInterface.

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
class Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField> : public Common::ParametricInterface

Interface for functions (in the C^ infty sense) which can thus be evaluated in global coordinates.

These functions do not depend on a grid, but only on the dimensions and fields of their domain and range. See in particular RangeReturnTypeSelector and DerivativeRangeReturnTypeSelector for the interpretation of a function and its derivatives, and GridFunctionInterface for functions which may have discontinuities between entities (as in: which are double-valued on intersections).

To turn a function into a function which is localizable w.r.t. a GridView of matching dimension (e.g., to visualize it or to use it in a discretization scheme), use make_grid_function to obtain a wrapped version of this function:

auto function = ...;
auto grid_view = ...;
using E = XT::Grid::extract_entity_t<decltype(grid_view)>;
auto grid_function = make_grid_function<E>(function);

See also: RangeReturnTypeSelector, DerivativeRangeReturnTypeSelector, GridFunctionInterface, GridInterface, make_grid_function

Method Dune::XT::Functions::FunctionInterface::operator=

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
ThisType &Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator=(const ThisType&) = delete

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::operator=

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
ThisType &Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator=(ThisType&&) = delete

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::copy_as_function

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
std::unique_ptr<ThisType> Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::copy_as_function() const

Returns a (shallow) copy of the function. actual implementation work is delegated to the private copy_as_function_impl combined with hiding copy_as_function in derived classes, this allows us the a unique_ptr with correct type at all levels of the polymorphic hierarchy

Note

This is intended to be cheap, so make sure to share resources (but in a thread-safe way)!

Method Dune::XT::Functions::FunctionInterface::copy_as_function_impl

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual ThisType *Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::copy_as_function_impl() const = 0

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::order

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual int Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::order(const XT::Common::Parameter& = {}) const = 0

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::evaluate

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual RangeReturnType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::evaluate(const DomainType&, const Common::Parameter& = {}) const

\ }

´´These methods should be implemented to define the functionality of the function.‘’

\ {

Method Dune::XT::Functions::FunctionInterface::jacobian

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual DerivativeRangeReturnType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::jacobian(const DomainType&, const Common::Parameter& = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::derivative

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual DerivativeRangeReturnType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::derivative(const std::array<size_t, d>&, const DomainType&, const Common::Parameter& = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::static_id

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
static std::string Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::static_id()

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::name

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual std::string Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::name() const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::operator-

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
Functions::DifferenceFunction<ThisType, ThisType> Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator-(const ThisType &other) const

\ }

Operators emulating numeric types.

\ {

Method Dune::XT::Functions::FunctionInterface::operator+

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
Functions::SumFunction<ThisType, ThisType> Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator+(const ThisType &other) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::evaluate

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual R Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::evaluate(const DomainType &point_in_global_coordinates, const size_t row, const size_t col = 0, const Common::Parameter &param = {}) const

\ }

´´These methods are default implemented and should be overridden to improve their performance.‘’

\ {

Method Dune::XT::Functions::FunctionInterface::jacobian

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual SingleDerivativeRangeReturnType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::jacobian(const DomainType &point_in_global_coordinates, const size_t row, const size_t col = 0, const Common::Parameter &param = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::derivative

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual SingleDerivativeRangeReturnType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::derivative(const std::array<size_t, d> &alpha, const DomainType &point_in_global_coordinates, const size_t row, const size_t col = 0, const Common::Parameter &param = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::evaluate

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual void Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::evaluate(const DomainType &point_in_reference_element, DynamicRangeType &result, const Common::Parameter &param = {}) const

\ }

´´These methods are provided for large dimensions (when RangeReturnType or DerivativeRangeReturnType do not

fit on the stack) and should be overridden to improve their performance.‘’ \ {

Method Dune::XT::Functions::FunctionInterface::jacobian

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual void Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::jacobian(const DomainType &point_in_reference_element, DynamicDerivativeRangeType &result, const Common::Parameter &param = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::derivative

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
virtual void Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::derivative(const std::array<size_t, d> &alpha, const DomainType &point_in_reference_element, DynamicDerivativeRangeType &result, const Common::Parameter &param = {}) const

No documentation provided.

Method Dune::XT::Functions::FunctionInterface::assert_correct_dims

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
static void Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::assert_correct_dims(const size_t row, const size_t col, const std::string &caller)

No documentation provided.

Constructor Dune::XT::Functions::FunctionInterface::FunctionInterface

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
explicit Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::FunctionInterface(const Common::ParameterType &param_type = {})

\ }

Constructor Dune::XT::Functions::FunctionInterface::FunctionInterface

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::FunctionInterface(const ThisType &other)

No documentation provided.

Constructor Dune::XT::Functions::FunctionInterface::FunctionInterface

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::FunctionInterface(ThisType&) = default

No documentation provided.

Destructor Dune::XT::Functions::FunctionInterface::~FunctionInterface

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::~FunctionInterface() override = default

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::domain_dim

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::domain_dim

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::range_dim

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::range_dim

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::range_dim_cols

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::range_dim_cols

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::d

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::d

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::r

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::r

No documentation provided.

Variable Dune::XT::Functions::FunctionInterface::rC

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
const size_t Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::rC

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::ThisType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::ThisType = FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DomainFieldType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DomainFieldType = double

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::RangeFieldType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::RangeFieldType = RangeField

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::D

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::D = DomainFieldType

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::R

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::R = RangeFieldType

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DomainType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DomainType = Dune::FieldVector<D, d>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::RangeSelector

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::RangeSelector = RangeTypeSelector<R, r, rC>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DerivativeRangeSelector

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DerivativeRangeSelector = DerivativeRangeTypeSelector<d, R, r, rC>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DifferenceType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DifferenceType = Functions::DifferenceFunction<ThisType, ThisType>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::SumType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::SumType = Functions::SumFunction<ThisType, ThisType>

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::RangeReturnType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::RangeReturnType = typename RangeSelector::return_type

\ {

``These types are the standard types to be used.‘’

Type alias Dune::XT::Functions::FunctionInterface::DerivativeRangeReturnType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DerivativeRangeReturnType = typename DerivativeRangeSelector::return_type

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::RowDerivativeRangeReturnType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::RowDerivativeRangeReturnType = typename DerivativeRangeSelector::row_derivative_return_type

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::SingleDerivativeRangeReturnType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::SingleDerivativeRangeReturnType = typename DerivativeRangeSelector::return_single_type

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DynamicRangeType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DynamicRangeType = typename RangeSelector::dynamic_type

\ }

``These types are used for large dimensions.‘’

\ {

Type alias Dune::XT::Functions::FunctionInterface::DynamicRowDerivativeRangeType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DynamicRowDerivativeRangeType = typename DerivativeRangeSelector::dynamic_row_derivative_type

No documentation provided.

Type alias Dune::XT::Functions::FunctionInterface::DynamicDerivativeRangeType

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
using Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::DynamicDerivativeRangeType = typename DerivativeRangeSelector::dynamic_type

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::operator*

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class OtherType>
std::enable_if_t<is_function<OtherType>::value && internal::CombinedHelper<ThisType, OtherType, CombinationType::product>::available, Functions::ProductFunction<ThisType, as_function_interface_t<OtherType>>> Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator*(const OtherType &other) const

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::operator/

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class OtherType>
std::enable_if_t<is_function<OtherType>::value && internal::CombinedHelper<ThisType, OtherType, CombinationType::fraction>::available, Functions::FractionFunction<ThisType, as_function_interface_t<OtherType>>> Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::operator/(const OtherType &other) const

No documentation provided.

Class template Dune::XT::Functions::FunctionInterface::single_evaluate_helper<SingleType, _r, _rC, anything>

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r = r, size_t _rC = rC, bool anything = true>
class Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_evaluate_helper<SingleType, _r, _rC, anything>

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::single_evaluate_helper::call

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r = r, size_t _rC = rC, bool anything = true>
template<class FullType>
static SingleType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_evaluate_helper<SingleType, _r, _rC, anything>::call(const FullType &val, const size_t row, const size_t col)

No documentation provided.

Class template Dune::XT::Functions::FunctionInterface::single_evaluate_helper<SingleType, _r, 1, anything>

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r, bool anything>
class Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_evaluate_helper<SingleType, _r, 1, anything>

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::single_evaluate_helper::call

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r, bool anything>
template<class FullType>
static SingleType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_evaluate_helper<SingleType, _r, 1, anything>::call(const FullType &val, const size_t row, const size_t)

No documentation provided.

Class template Dune::XT::Functions::FunctionInterface::single_derivative_helper<SingleType, _r, _rC, anything>

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r = r, size_t _rC = rC, bool anything = true>
class Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_derivative_helper<SingleType, _r, _rC, anything>

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::single_derivative_helper::call

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r = r, size_t _rC = rC, bool anything = true>
template<class FullType>
static SingleType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_derivative_helper<SingleType, _r, _rC, anything>::call(const FullType &val, const size_t row, const size_t col)

No documentation provided.

Class template Dune::XT::Functions::FunctionInterface::single_derivative_helper<SingleType, _r, 1, anything>

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r, bool anything>
class Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_derivative_helper<SingleType, _r, 1, anything>

No documentation provided.

Function template Dune::XT::Functions::FunctionInterface::single_derivative_helper::call

template<size_t domainDim, size_t rangeDim = 1, size_t rangeDimCols = 1, class RangeField = double>
template<class SingleType, size_t _r, bool anything>
template<class FullType>
static SingleType Dune::XT::Functions::FunctionInterface<domainDim, rangeDim, rangeDimCols, RangeField>::single_derivative_helper<SingleType, _r, 1, anything>::call(const FullType &val, const size_t row, const size_t)

No documentation provided.