1#ifndef DUNE_FEM_SCHEMES_MOLGALERKIN_HH
2#define DUNE_FEM_SCHEMES_MOLGALERKIN_HH
16 template<
class Integrands,
class DomainFunction,
class RangeFunction = DomainFunction >
18 :
public virtual Operator< DomainFunction, RangeFunction >
24 static_assert( std::is_same< typename DomainFunctionType::GridPartType, typename RangeFunctionType::GridPartType >::value,
"DomainFunction and RangeFunction must be defined on the same grid part." );
31 typedef typename GalerkinOperatorImplType::template QuadratureSelector<
36 template<
class... Args >
43 impl_.setCommunicate(
false );
54 template<
class Gr
idFunction >
75 for(
const auto& entity : elements(
gridPart(), Partitions::interiorBorder ) )
86 template<
class Gr
idFunction >
90 impl_.evaluate( u, w );
110 template<
class Integrands,
class JacobianOperator >
112 :
public MOLGalerkinOperator< Integrands, typename JacobianOperator::DomainFunctionType, typename JacobianOperator::RangeFunctionType >,
127 template<
class... Args >
139 impl_.assemble( u, jOp );
144 template<
class Gr
idFunction >
148 impl_.assemble( u, jOp );
174 for(
const auto& inside : elements(
gridPart(), Partitions::interiorBorder ) )
178 auto guard =
bindGuard( jOpLocal, inside, inside );
184 for(
const auto &intersection : intersections(
gridPart(), inside ) )
187 if( intersection.neighbor() )
189 const auto& outside = intersection.outside();
190 auto guard =
bindGuard( jOpLocal, outside, inside );
208 template<
class Integrands,
class DomainFunction,
class RangeFunction >
219 template<
class... Args >
230 template <
class LinearOperator,
class ModelIntegrands >
245 template<
class Gr
idFunction >
251 template<
class Gr
idFunction >
254 (*this).jacobian( u, jOp );
262 template<
class Integrands,
class LinearOperator,
class InverseOperator,
bool addDirichletBC>
Definition: bindguard.hh:11
Impl::GalerkinSchemeImpl< Integrands, LinearOperator, InverseOperator, addDirichletBC, MOLDifferentiableGalerkinOperator > MethodOfLinesScheme
Definition: molgalerkin.hh:264
static auto bindGuard(Object &object, Args &&... args) -> std::enable_if_t< isBindable< Object, Args... >::value, BindGuard< Object > >
Definition: bindguard.hh:67
Definition: common/localcontribution.hh:14
void applyInverse(MassCaller &caller, const EntityType &entity, const BasisFunctionSet &basisFunctionSet, LocalFunction &lf) const
Definition: localmassmatrix.hh:285
void leftMultiplyInverse(LocalMatrix &localMatrix) const
compute M^-1 * localMatrix
Definition: localmassmatrix.hh:339
Local Mass Matrix for arbitrary spaces.
Definition: localmassmatrix.hh:909
operator providing a Jacobian through automatic differentiation
Definition: automaticdifferenceoperator.hh:86
abstract differentiable operator
Definition: differentiableoperator.hh:29
JacobianOperator JacobianOperatorType
type of linear operator modelling the operator's Jacobian
Definition: differentiableoperator.hh:35
BaseType::DomainFunctionType DomainFunctionType
type of discrete function in the operator's domain
Definition: differentiableoperator.hh:38
abstract operator
Definition: operator.hh:34
DomainFunction DomainFunctionType
type of discrete function in the operator's domain
Definition: operator.hh:36
abstract affine-linear operator
Definition: operator.hh:87
Definition: molgalerkin.hh:19
bool communicate_
Definition: molgalerkin.hh:102
LocalMassMatrix< DiscreteFunctionSpaceType, InteriorQuadratureType > LocalMassMatrixType
Definition: molgalerkin.hh:34
ModelType & model() const
Definition: molgalerkin.hh:64
const GridPartType & gridPart() const
Definition: molgalerkin.hh:60
void setCommunicate(const bool communicate)
Definition: molgalerkin.hh:46
RangeFunction RangeFunctionType
Definition: molgalerkin.hh:21
void evaluate(const GridFunction &u, RangeFunctionType &w) const
Definition: molgalerkin.hh:87
virtual void operator()(const DomainFunctionType &u, RangeFunctionType &w) const final override
Definition: molgalerkin.hh:49
GalerkinOperatorImplType impl_
Definition: molgalerkin.hh:101
RangeFunctionType::GridPartType GridPartType
Definition: molgalerkin.hh:24
DomainFunction DomainFunctionType
Definition: molgalerkin.hh:20
Impl::GalerkinOperator< Integrands > GalerkinOperatorImplType
Definition: molgalerkin.hh:28
RangeFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: molgalerkin.hh:29
MOLGalerkinOperator(const GridPartType &gridPart, Args &&... args)
Definition: molgalerkin.hh:37
void setQuadratureOrders(unsigned int interior, unsigned int surface)
Definition: molgalerkin.hh:47
Integrands DirichletModelType
Definition: molgalerkin.hh:63
void applyInverseMass(RangeFunctionType &w) const
Definition: molgalerkin.hh:67
Integrands ModelType
Definition: molgalerkin.hh:62
GalerkinOperatorImplType::template QuadratureSelector< DiscreteFunctionSpaceType >::InteriorQuadratureType InteriorQuadratureType
Definition: molgalerkin.hh:32
Definition: molgalerkin.hh:114
MOLDifferentiableGalerkinOperator(const DomainDiscreteFunctionSpaceType &dSpace, const RangeDiscreteFunctionSpaceType &rSpace, Args &&... args)
Definition: molgalerkin.hh:128
const RangeDiscreteFunctionSpaceType & rSpace_
Definition: molgalerkin.hh:200
virtual void jacobian(const DomainFunctionType &u, JacobianOperatorType &jOp) const final override
obtain linearization
Definition: molgalerkin.hh:136
const DomainDiscreteFunctionSpaceType & dSpace_
Definition: molgalerkin.hh:199
RangeFunctionType::DiscreteFunctionSpaceType RangeDiscreteFunctionSpaceType
Definition: molgalerkin.hh:123
void applyInverseMass(JacobianOperatorType &jOp, const bool hasSkeleton) const
Definition: molgalerkin.hh:165
const DomainDiscreteFunctionSpaceType & domainSpace() const
Definition: molgalerkin.hh:153
DomainFunctionType::DiscreteFunctionSpaceType DomainDiscreteFunctionSpaceType
Definition: molgalerkin.hh:122
BaseType::GridPartType GridPartType
Definition: molgalerkin.hh:125
JacobianOperator JacobianOperatorType
Definition: molgalerkin.hh:118
BaseType::RangeFunctionType RangeFunctionType
Definition: molgalerkin.hh:121
BaseType::DomainFunctionType DomainFunctionType
Definition: molgalerkin.hh:120
void jacobian(const GridFunction &u, JacobianOperatorType &jOp) const
Definition: molgalerkin.hh:145
const RangeDiscreteFunctionSpaceType & rangeSpace() const
Definition: molgalerkin.hh:157
Definition: molgalerkin.hh:212
BaseType::GridPartType GridPartType
Definition: molgalerkin.hh:217
MOLAutomaticDifferenceGalerkinOperator(const GridPartType &gridPart, Args &&... args)
Definition: molgalerkin.hh:220
Definition: molgalerkin.hh:233
MOLModelDifferentiableGalerkinOperator(ModelType &model, const DiscreteFunctionSpaceType &dfSpace)
Definition: molgalerkin.hh:241
LinearOperator::DomainFunctionType RangeFunctionType
Definition: molgalerkin.hh:238
void apply(const GridFunction &u, RangeFunctionType &w) const
Definition: molgalerkin.hh:246
MOLDifferentiableGalerkinOperator< ModelIntegrands, LinearOperator > BaseType
Definition: molgalerkin.hh:234
LinearOperator::RangeSpaceType DiscreteFunctionSpaceType
Definition: molgalerkin.hh:239
void apply(const GridFunction &u, LinearOperator &jOp) const
Definition: molgalerkin.hh:252
ModelIntegrands::ModelType ModelType
Definition: molgalerkin.hh:236