1 #ifndef DUNE_PDELAB_GRIDOPERATOR_HH 2 #define DUNE_PDELAB_GRIDOPERATOR_HH 4 #include <dune/common/tupleutility.hh> 22 "the nonoverlapping_mode parameter on the
GridOperator has been deprecated and will be removed after PDELab 2.4."
23 "The correct mode is now automatically deduced from the EntitySet of the function space.")
47 template<
typename GFSU,
typename GFSV,
typename LOP,
48 typename MB,
typename DF,
typename RF,
typename JF,
51 int nonoverlapping_mode = -1>
57 static_assert(nonoverlapping_mode == -1 ||
58 nonoverlapping_mode == 0 ||
59 nonoverlapping_mode == 1,
60 "invalid value for nonoverlapping_mode! This parameter is also deprecated in PDELab 2.4, so please remove it from your typedefs!");
79 GFSU::Traits::EntitySet::Partitions::partitionIterator() == InteriorBorder_Partition
83 typedef typename conditional<
84 GFSU::Traits::EntitySet::Partitions::partitionIterator() == InteriorBorder_Partition,
93 template <
typename MFT>
99 GridOperator(
const GFSU & gfsu_,
const CU & cu_,
const GFSV & gfsv_,
const CV & cv_, LOP & lop_,
const MB& mb_ = MB())
100 : global_assembler(gfsu_,gfsv_,cu_,cv_)
101 , dof_exchanger(
std::make_shared<BorderDOFExchanger>(*this))
102 , local_assembler(lop_, cu_, cv_,dof_exchanger)
107 GridOperator(
const GFSU & gfsu_,
const GFSV & gfsv_, LOP & lop_,
const MB& mb_ = MB())
108 : global_assembler(gfsu_,gfsv_)
109 , dof_exchanger(
std::make_shared<BorderDOFExchanger>(*this))
110 , local_assembler(lop_,dof_exchanger)
117 return global_assembler.trialGridFunctionSpace();
123 return global_assembler.testGridFunctionSpace();
129 return trialGridFunctionSpace().globalSize();
135 return testGridFunctionSpace().globalSize();
140 const Assembler &
assembler()
const {
return global_assembler; }
147 template <
typename Gr
idOperatorTuple>
150 : index(0), size(
Dune::tuple_size<GridOperatorTuple>::
value) {}
152 template <
typename T>
154 elem.localAssembler().doPreProcessing = index == 0;
155 elem.localAssembler().doPostProcessing = index == size-1;
166 template<
typename Gr
idOperatorTuple>
169 Dune::ForEachValue<GridOperatorTuple> forEach(tuple);
170 SetupGridOperator<GridOperatorTuple> setup_visitor;
171 forEach.apply(setup_visitor);
175 template<
typename F,
typename X>
188 PatternEngine & pattern_engine = local_assembler.localPatternAssemblerEngine(p);
189 global_assembler.assemble(pattern_engine);
195 ResidualEngine & residual_engine = local_assembler.localResidualAssemblerEngine(r,x);
196 global_assembler.assemble(residual_engine);
202 JacobianEngine & jacobian_engine = local_assembler.localJacobianAssemblerEngine(a,x);
203 global_assembler.assemble(jacobian_engine);
209 JacobianApplyEngine & jacobian_apply_engine = local_assembler.localJacobianApplyAssemblerEngine(r,z);
210 global_assembler.assemble(jacobian_apply_engine);
215 global_assembler.assemble(local_assembler.localNonlinearJacobianApplyAssemblerEngine(r,x,z));
220 dof_exchanger->accumulateBorderEntries(*
this,a);
226 dof_exchanger->update(*
this);
236 Assembler global_assembler;
237 shared_ptr<BorderDOFExchanger> dof_exchanger;
Traits class for the grid operator.
Definition: gridoperatorutilities.hh:33
Dune::PDELab::GridOperatorTraits< GFSU, GFSV, MB, DF, RF, JF, CU, CV, Assembler, LocalAssembler > Traits
The grid operator traits.
Definition: gridoperator.hh:91
typename impl::BackendMatrixSelector< Backend, VU, VV, E >::Type Matrix
alias of the return type of BackendMatrixSelector
Definition: backend/interface.hh:134
The local assembler for DUNE grids.
Definition: default/localassembler.hh:32
Dune::PDELab::Backend::Matrix< MB, Domain, Range, JF > Jacobian
The type of the jacobian.
Definition: gridoperatorutilities.hh:72
LocalAssembler & localAssembler() const
Definition: gridoperator.hh:142
const GFSV & testGridFunctionSpace() const
Get the test grid function space.
Definition: gridoperator.hh:121
Definition: borderdofexchanger.hh:576
static const unsigned int value
Definition: gridfunctionspace/tags.hh:177
void make_consistent(Jacobian &a) const
Definition: gridoperator.hh:219
Dune::PDELab::Backend::Vector< GFS, field_type > Range
The type of the range (residual).
Definition: gridoperator.hh:68
Dune::PDELab::Backend::Matrix< MBE, Domain, Range, field_type > Jacobian
The type of the jacobian.
Definition: gridoperator.hh:70
GFSV::Traits::SizeType globalSizeV() const
Get dimension of space v.
Definition: gridoperator.hh:133
GridOperator(const GFSU &gfsu_, const CU &cu_, const GFSV &gfsv_, const CV &cv_, LOP &lop_, const MB &mb_=MB())
Constructor for non trivial constraints.
Definition: gridoperator.hh:99
const GFSU & trialGridFunctionSpace() const
Get the trial grid function space.
Definition: gridoperator.hh:115
const int size
Definition: gridoperator.hh:160
MB MatrixBackend
The matrix backend of the grid operator.
Definition: gridoperatorutilities.hh:51
const Assembler & assembler() const
Definition: gridoperator.hh:140
void interpolate(const F &f, const GFS &gfs, XG &xg)
interpolation from a given grid function
Definition: interpolate.hh:191
void interpolate(const X &xold, F &f, X &x) const
Interpolate the constrained dofs from given function.
Definition: gridoperator.hh:176
Definition: gridoperator.hh:148
Definition: adaptivity.hh:27
GFSU::Traits::SizeType globalSizeU() const
Get dimension of space u.
Definition: gridoperator.hh:127
void fill_pattern(Pattern &p) const
Fill pattern of jacobian matrix.
Definition: gridoperator.hh:186
int index
Definition: gridoperator.hh:159
The assembler for standard DUNE grid.
Definition: default/assembler.hh:23
void copy_nonconstrained_dofs(const CG &cg, const XG &xgin, XG &xgout)
Definition: constraints.hh:989
Traits::Jacobian Type
Definition: gridoperator.hh:95
static void setupGridOperators(GridOperatorTuple tuple)
Definition: gridoperator.hh:167
Definition: gridoperator.hh:18
void update()
Definition: gridoperator.hh:223
void jacobian_apply(const Domain &z, Range &r) const
Apply jacobian matrix without explicitly assembling it.
Definition: gridoperator.hh:207
Definition: gridoperator.hh:94
void residual(const Domain &x, Range &r) const
Assemble residual.
Definition: gridoperator.hh:193
Standard grid operator implementation.
Definition: gridoperator.hh:52
Dune::PDELab::Backend::Vector< CGGFS, field_type > Domain
The type of the domain (solution).
Definition: gridoperator.hh:66
Helper class for adding up matrix entries on border.
Definition: borderdofexchanger.hh:66
SetupGridOperator()
Definition: gridoperator.hh:149
GridOperator(const GFSU &gfsu_, const GFSV &gfsv_, LOP &lop_, const MB &mb_=MB())
Constructor for empty constraints.
Definition: gridoperator.hh:107
void visit(T &elem)
Definition: gridoperator.hh:153
Definition: constraintstransformation.hh:111
const P & p
Definition: constraints.hh:147
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:113
const Traits::MatrixBackend & matrixBackend() const
Get the matrix backend for this grid operator.
Definition: gridoperator.hh:230
warn_on_deprecated_nonoverlapping_mode_parameter()
Definition: gridoperator.hh:21
conditional< GFSU::Traits::EntitySet::Partitions::partitionIterator()==InteriorBorder_Partition, NonOverlappingBorderDOFExchanger< GridOperator >, OverlappingBorderDOFExchanger< GridOperator > >::type BorderDOFExchanger
Definition: gridoperator.hh:87
Assembler & assembler()
Definition: gridoperator.hh:138
void jacobian(const Domain &x, Jacobian &a) const
Assembler jacobian.
Definition: gridoperator.hh:200
MBE::template Pattern< Jacobian, GFS, CGGFS > Pattern
The sparsity pattern container for the jacobian matrix.
Definition: gridoperator.hh:73
DefaultLocalAssembler< GridOperator, LOP, GFSU::Traits::EntitySet::Partitions::partitionIterator()==InteriorBorder_Partition > LocalAssembler
The local assembler type.
Definition: gridoperator.hh:80
void nonlinear_jacobian_apply(const Domain &x, const Domain &z, Range &r) const
Apply jacobian matrix without explicitly assembling it.
Definition: gridoperator.hh:214