40#ifndef DUNE_FEM_SCHEMES_FEMSCHEME_HH
41#define DUNE_FEM_SCHEMES_FEMSCHEME_HH
47#include <dune/common/typeutilities.hh>
61template <
class Op,
class DF,
typename =
void >
64 static const bool value =
false;
67template <
class Op,
class DF>
68struct AddDirichletBC<Op,DF,
std::enable_if_t<std::is_void< decltype( std::declval<const Op>().
69 setConstraints( std::declval<DF&>() ) )>::value > >
76template<
class Operator,
class LinearInverseOperator >
91 static_assert( std::is_same< typename DiscreteFunctionSpaceType::GridPartType, GridPartType >::value,
92 "GridPart of Space has to be identical to GridPart of Model class" );
95 typedef typename GridPartType::GridType
GridType;
105 typedef typename FunctionSpaceType::RangeType
RangeType;
106 static const int dimRange = FunctionSpaceType::dimRange;
122 template <
typename O = DifferentiableOperatorType>
124 -> Dune::void_t< decltype( std::declval< O >().setQuadratureOrders(0,0) ) >
129 template <
typename O = Operator>
130 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
135 template <
typename O = Operator>
136 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
141 template <
typename O = Operator>
142 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
147 template <
typename O = Operator>
148 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
166 template <
class Gr
idFunction>
168 -> Dune::void_t<decltype(std::declval<const Operator&>()(arg,dest))>
175 SolverInfo(
bool pconverged,
int plinearIterations,
int pnonlinearIterations)
207 template<
class GridFunction, std::enable_if_t<
208 std::is_same<
decltype(
209 std::declval< const DifferentiableOperatorType >().jacobian(
210 std::declval< const GridFunction& >(), std::declval< JacobianOperatorType& >()
212 ),
void >::value,
int> i = 0
231 template <
typename O = Operator>
232 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
234 template<
class...Args>
236 template <
typename O = Operator>
237 std::enable_if_t<AddDirichletBC<O,DomainFunctionType>::value,
void>
239 template<
class...Args>
static ParameterContainer & container()
Definition: io/parameter.hh:193
Definition: femscheme.hh:63
void DirichletBlockVector
Definition: femscheme.hh:65
static const bool value
Definition: femscheme.hh:64
typename Op::DirichletBlockVector DirichletBlockVector
Definition: femscheme.hh:72
Definition: femscheme.hh:78
Operator::ModelType ModelType
type of the mathematical model
Definition: femscheme.hh:81
Operator::JacobianOperatorType LinearOperatorType
Definition: femscheme.hh:101
const DifferentiableOperatorType & fullOperator() const
Definition: femscheme.hh:119
SolverInfo solve(const DiscreteFunctionType &rhs, DiscreteFunctionType &solution) const
Definition: femscheme.hh:186
DifferentiableOperatorType & fullOperator()
Definition: femscheme.hh:120
DiscreteFunctionSpaceType::FunctionSpaceType FunctionSpaceType
type of function space (scalar functions,
Definition: femscheme.hh:98
Operator::JacobianOperatorType JacobianOperatorType
Definition: femscheme.hh:100
Dune::Fem::NewtonInverseOperator< LinearOperatorType, LinearInverseOperatorType > InverseOperatorType
Definition: femscheme.hh:102
GridPartType::GridType GridType
type of underyling hierarchical grid needed for data output
Definition: femscheme.hh:95
FemScheme(const DiscreteFunctionSpaceType &space, ModelType &model, const Dune::Fem::ParameterReader ¶meter=Dune::Fem::Parameter::container())
Definition: femscheme.hh:111
void setModelConstraints(Args &&...) const
Definition: femscheme.hh:240
const GridPartType & gridPart() const
Definition: femscheme.hh:219
Operator::RangeFunctionType RangeFunctionType
Definition: femscheme.hh:83
const auto & dirichletBlocks() const
Definition: femscheme.hh:156
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > setConstraints(const DiscreteFunctionType &u, DiscreteFunctionType &v) const
Definition: femscheme.hh:137
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > setModelConstraints(DiscreteFunctionType &u) const
Definition: femscheme.hh:238
static const int dimRange
Definition: femscheme.hh:106
ModelType & model()
Definition: femscheme.hh:226
Operator::RangeFunctionType DiscreteFunctionType
Definition: femscheme.hh:84
const DiscreteFunctionSpaceType & space() const
Definition: femscheme.hh:220
SolverInfo solve(DiscreteFunctionType &solution) const
Definition: femscheme.hh:196
typename AddDirichletBC< Operator, DomainFunctionType >::DirichletBlockVector DirichletBlockVector
Definition: femscheme.hh:108
Operator::DomainFunctionType DomainFunctionType
Definition: femscheme.hh:82
const ModelType & model() const
Definition: femscheme.hh:222
void setErrorMeasure(ErrorMeasureType &errorMeasure) const
Definition: femscheme.hh:182
auto setQuadratureOrders(unsigned int interior, unsigned int surface) -> Dune::void_t< decltype(std::declval< O >().setQuadratureOrders(0, 0)) >
Definition: femscheme.hh:123
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > setConstraints(DomainFunctionType &u) const
Definition: femscheme.hh:131
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > subConstraints(const DiscreteFunctionType &u, DiscreteFunctionType &v) const
Definition: femscheme.hh:143
void jacobian(const GridFunction &ubar, JacobianOperatorType &linOp) const
Definition: femscheme.hh:214
static constexpr bool addDirichletBC
Definition: femscheme.hh:107
DifferentiableOperatorType implicitOperator_
Definition: femscheme.hh:242
LinearInverseOperator LinearInverseOperatorType
Definition: femscheme.hh:87
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > setConstraints(const RangeType &value, DiscreteFunctionType &u) const
Definition: femscheme.hh:149
void setZeroConstraints(Args &&...) const
Definition: femscheme.hh:235
InverseOperatorType::ErrorMeasureType ErrorMeasureType
Definition: femscheme.hh:103
ModelType::GridPartType GridPartType
grid view (e.g. leaf grid view) provided in the template argument list
Definition: femscheme.hh:90
std::enable_if_t< AddDirichletBC< O, DomainFunctionType >::value, void > setZeroConstraints(DiscreteFunctionType &u) const
Definition: femscheme.hh:233
DiscreteFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: femscheme.hh:86
const DiscreteFunctionSpaceType & space_
Definition: femscheme.hh:241
Operator DifferentiableOperatorType
Definition: femscheme.hh:85
InverseOperatorType invOp_
Definition: femscheme.hh:243
void operator()(const DiscreteFunctionType &arg, DiscreteFunctionType &dest) const
Definition: femscheme.hh:162
FunctionSpaceType::RangeType RangeType
Definition: femscheme.hh:105
Definition: femscheme.hh:174
int nonlinearIterations
Definition: femscheme.hh:180
int linearIterations
Definition: femscheme.hh:179
SolverInfo(bool pconverged, int plinearIterations, int pnonlinearIterations)
Definition: femscheme.hh:175
bool converged
Definition: femscheme.hh:178
std::function< bool(const RangeFunctionType &w, const RangeFunctionType &dw, double residualNorm) > ErrorMeasureType
Definition: newtoninverseoperator.hh:230
void unbind()
Definition: newtoninverseoperator.hh:305
int linearIterations() const
Definition: newtoninverseoperator.hh:311
bool converged() const
Definition: newtoninverseoperator.hh:333
int iterations() const
Definition: newtoninverseoperator.hh:309
void bind(const OperatorType &op)
Definition: newtoninverseoperator.hh:303
void setErrorMeasure(ErrorMeasureType finished)
Definition: newtoninverseoperator.hh:301