1#ifndef DUNE_FEM_SPACE_COMBINEDSPACE_POWERLOCALRESTRICPROLONG_HH
2#define DUNE_FEM_SPACE_COMBINEDSPACE_POWERLOCALRESTRICPROLONG_HH
6#include <dune/common/exceptions.hh>
22 template<
class DiscreteFunctionSpace,
int N >
35 : localRestrictProlong_( space )
40 localRestrictProlong_.setFatherChildWeight( weight );
44 template<
class LFFather,
class LFSon,
class LocalGeometry >
46 const LocalGeometry &geometryInFather,
bool initialize )
const
51 typedef typename LFSon::BasisFunctionSetType::ScalarBasisFunctionSetType SubSonBasisFunctionSetType;
52 typedef typename LFFather::BasisFunctionSetType::ScalarBasisFunctionSetType SubFatherBasisFunctionSetType;
54 SubFatherBasisFunctionSetType subFatherBasisFunctionSet = lfFather.basisFunctionSet().scalarBasisFunctionSet();
55 SubSonBasisFunctionSetType subSonBasisFunctionSet = lfSon.basisFunctionSet().scalarBasisFunctionSet();
57 for( std::size_t i = 0; i < N; ++i )
59 std::size_t sonBasisSetSize = subSonBasisFunctionSet.
size();
60 std::size_t fatherBasisSetsize = subFatherBasisFunctionSet.size();
62 SubDofVectorTypeSon sonSubDofVector( lfSon.localDofVector(),
OffsetSubMapper( sonBasisSetSize, sonBasisSetSize * i ) );
63 SubDofVectorTypeFather fatherSubDofVector( lfFather.localDofVector(),
70 localRestrictProlong_.restrictLocal( subLFFather, subLFSon, geometryInFather, initialize );
75 template<
class LFFather,
class LFSon,
class LocalGeometry >
77 const LocalGeometry &geometryInFather,
bool initialize )
const
82 typedef typename LFSon::BasisFunctionSetType::ScalarBasisFunctionSetType SubSonBasisFunctionSetType;
83 typedef typename LFFather::BasisFunctionSetType::ScalarBasisFunctionSetType SubFatherBasisFunctionSetType;
85 SubSonBasisFunctionSetType subSonBasisFunctionSet = lfSon.basisFunctionSet().scalarBasisFunctionSet();
86 SubFatherBasisFunctionSetType subFatherBasisFunctionSet = lfFather.basisFunctionSet().scalarBasisFunctionSet();
88 for( std::size_t i = 0; i < N; ++i )
90 std::size_t sonBasisSetSize = subSonBasisFunctionSet.
size();
91 std::size_t fatherBasisSetsize = subFatherBasisFunctionSet.size();
93 SubDofVectorTypeSon sonSubDofVector( lfSon.localDofVector(),
OffsetSubMapper( sonBasisSetSize, sonBasisSetSize * i ) );
94 SubDofVectorTypeFather fatherSubDofVector( lfFather.localDofVector(),
101 localRestrictProlong_.prolongLocal( subLFFather, subLFSon, geometryInFather, initialize );
105 template <
class LFFather>
108 DUNE_THROW(Dune::NotImplemented,
"PowerLocalRestrictProlong::restrictFinalize is missing!");
113 return localRestrictProlong_.needCommunication();
117 LocalRestrictProlongType localRestrictProlong_;
Definition: bindguard.hh:11
interface for local functions
Definition: localfunction.hh:77
Definition: powerlocalrestrictprolong.hh:24
void restrictLocal(LFFather &lfFather, const LFSon &lfSon, const LocalGeometry &geometryInFather, bool initialize) const
restrict data to father
Definition: powerlocalrestrictprolong.hh:45
bool needCommunication() const
Definition: powerlocalrestrictprolong.hh:111
void restrictFinalize(LFFather &lfFather) const
Definition: powerlocalrestrictprolong.hh:106
LocalRestrictProlongType::DomainFieldType DomainFieldType
Definition: powerlocalrestrictprolong.hh:32
void setFatherChildWeight(const DomainFieldType &weight)
Definition: powerlocalrestrictprolong.hh:38
PowerLocalRestrictProlong(const DiscreteFunctionSpace &space)
Definition: powerlocalrestrictprolong.hh:34
void prolongLocal(const LFFather &lfFather, LFSon &lfSon, const LocalGeometry &geometryInFather, bool initialize) const
Definition: powerlocalrestrictprolong.hh:76
Definition: common/localrestrictprolong.hh:16
An implementation of DenseVector to extract a portion, not necessarly contiguos, of a vector.
Definition: subvector.hh:161
size_type size() const
Definition: subvector.hh:214
Index mapper which simply adds an offset to the index.
Definition: subvector.hh:83