DUNE-ACFEM (2.5.1)

ModelExpressionOptimizations

Collapse the usual "zero" expressions into more simpler ones. More...

Functions

template<class Expression >
Expression Dune::ACFem::operator* (const ModelExpression< Expression > &m_)
 Avoid double identity wrapping.
 
template<class Model >
static auto Dune::ACFem::operator* (const typename Model::RangeFieldType &s_, const BinaryModelExpression< SMultiplyOperation, typename Model::RangeFieldType, Model > &m_) -> decltype((s_ *m_.scalar()) *m_.model())
 Fold s * (s * m) into (s*s) * m.
 
template<class Parameter , class Model >
static auto Dune::ACFem::operator* (const ParameterInterface< Parameter > &p_, const ModelInterface< BinaryModelExpression< SMultiplyOperation, typename Model::RangeFieldType, Model > > &m_) -> decltype(asImp(m_).scalar() *(asImp(p_) *asImp(m_).model()))
 Move sclars left-most.
 
template<class Field , class Parameter , class Model >
static auto Dune::ACFem::operator* (const BinaryParameterExpression< SMultiplyOperation, Field, Parameter > &p_, const ModelInterface< Model > &m_) -> decltype(p_.left() *(p_.right() *asImp(m_)))
 Move scalars out of BinaryParameterExpression.
 
template<class Function , class Field , class Model >
static auto Dune::ACFem::operator* (const Fem::Function< typename Function::FunctionSpaceType, Function > &f_, const BinaryModelExpression< SMultiplyOperation, Field, Model > &m_) -> decltype(m_.scalar() *(asImp(f_) *m_.model()))
 Move sclars left-most.
 
template<class Field , class Function , class Model >
static auto Dune::ACFem::operator* (const BinaryGridFunctionExpression< SMultiplyOperation, Field, Function > &f_, const ModelInterface< Model > &m_) -> decltype(f_.scalar() *(f_.function() *asImp(m_)))
 Move scalars out of BinaryGridFunctionExpression.
 
template<class Model >
auto Dune::ACFem::operator- (const UnaryModelExpression< MinusOperation, Model > &m_) -> decltype(*m_.containedExpression())
 -(-Model) = Model More...
 
template<class Model , class DiscreteFunctionSpace , class GridFunction , template< class > class QuadratureTraits>
auto Dune::ACFem::operator- (const ModelInterface< Model > &m_, const L2InnerProductFunctional< DiscreteFunctionSpace, GridFunction, QuadratureTraits > &phi_) -> decltype(m_ - phi_.function())
 Avoid adding ordinary L2-functionals as functional.
 
template<class Model >
auto Dune::ACFem::operator+ (const ModelInterface< Model > &m, const ZeroModel< typename Model::FunctionSpaceType, typename Model::GridPartType > &z) -> decltype(*asImp(m))
 Model + Zero = Model.
 
template<class Model >
auto Dune::ACFem::operator+ (const ZeroModel< typename Model::FunctionSpaceType, typename Model::GridPartType > &z, const ModelInterface< Model > &m) -> decltype(*asImp(m))
 Zero + Model = Model.
 
template<class FunctionSpace , class GridPart >
auto Dune::ACFem::operator+ (const ZeroModel< FunctionSpace, GridPart > &z1, const ZeroModel< FunctionSpace, GridPart > &z2) -> decltype(*z1)
 Zero + Zero = Zero.
 
template<class Model >
auto Dune::ACFem::operator- (const ModelInterface< Model > &m, const ZeroModel< typename Model::FunctionSpaceType, typename Model::GridPartType > &z) -> decltype(*asImp(m))
 Model - Zero = Model.
 
template<class Model >
auto Dune::ACFem::operator- (const ZeroModel< typename Model::FunctionSpaceType, typename Model::GridPartType > &z, const ModelInterface< Model > &m) -> decltype(-m)
 Zero - Model = -Model.
 
template<class FunctionSpace , class GridPart >
auto Dune::ACFem::operator- (const ZeroModel< FunctionSpace, GridPart > &z1, const ZeroModel< FunctionSpace, GridPart > &z2) -> decltype(*z1)
 Zero - Zero = Zero.
 
template<class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const typename FunctionSpace::RangeFieldType &s_, const ZeroModel< FunctionSpace, GridPart > &z) -> decltype(*z)
 s * Zero = Zero
 
template<class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const ZeroModel< FunctionSpace, GridPart > &z, const typename FunctionSpace::RangeFieldType &s) -> decltype(*z)
 Zero * s = Zero.
 
template<class Parameter , class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const ParameterInterface< Parameter > &s, const ZeroModel< FunctionSpace, GridPart > &z) -> decltype(*z)
 Parameter * Zero = Zero.
 
template<class Parameter , class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const ZeroModel< FunctionSpace, GridPart > &z, const ParameterInterface< Parameter > &s) -> decltype(*z)
 Zero * Parameter = Zero.
 
template<class Function , class ScalarSpace , class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const Fem::Function< ScalarSpace, Function > &f, const ZeroModel< FunctionSpace, GridPart > &z) -> decltype(*z)
 Function * Zero = Zero.
 
template<class Function , class ScalarSpace , class FunctionSpace , class GridPart >
auto Dune::ACFem::operator* (const ZeroModel< FunctionSpace, GridPart > &z, const Fem::Function< ScalarSpace, Function > &f) -> decltype(*z)
 Zero * Function = Zero.
 

Detailed Description

Collapse the usual "zero" expressions into more simpler ones.

Function Documentation

◆ operator-()

template<class Model >
auto Dune::ACFem::operator- ( const UnaryModelExpression< MinusOperation, Model > &  m_) -> decltype(*m_.containedExpression())

-(-Model) = Model

Replace any double unary minus expression by either the contained expression, or if the contained expression is not itself an expression template, wrap it into one identity expression.

Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 21, 22:30, 2024)