1 #ifndef DUNE_FEM_SPACE_COMBINEDSPACE_POWERLOCALRESTRICPROLONG_HH 2 #define DUNE_FEM_SPACE_COMBINEDSPACE_POWERLOCALRESTRICPROLONG_HH 6 #include <dune/common/exceptions.hh> 24 template<
class DiscreteFunctionSpace,
int N >
37 : localRestrictProlong_( space )
42 localRestrictProlong_.setFatherChildWeight( weight );
46 template<
class LFFather,
class LFSon,
class LocalGeometry >
48 const LocalGeometry &geometryInFather,
bool initialize )
const 53 typedef typename LFSon::BasisFunctionSetType::ScalarBasisFunctionSetType SubSonBasisFunctionSetType;
54 typedef typename LFFather::BasisFunctionSetType::ScalarBasisFunctionSetType SubFatherBasisFunctionSetType;
56 SubFatherBasisFunctionSetType subFatherBasisFunctionSet = lfFather.basisFunctionSet().scalarBasisFunctionSet();
57 SubSonBasisFunctionSetType subSonBasisFunctionSet = lfSon.basisFunctionSet().scalarBasisFunctionSet();
59 for( std::size_t i = 0; i < N; ++i )
61 std::size_t sonBasisSetSize = subSonBasisFunctionSet.size();
62 std::size_t fatherBasisSetsize = subFatherBasisFunctionSet.size();
64 SubDofVectorTypeSon sonSubDofVector( lfSon.localDofVector(), sonBasisSetSize, sonBasisSetSize * i );
65 SubDofVectorTypeFather fatherSubDofVector( lfFather.localDofVector(), fatherBasisSetsize, fatherBasisSetsize * i );
68 subLFSon( subSonBasisFunctionSet, sonSubDofVector );
70 subLFFather( subFatherBasisFunctionSet, fatherSubDofVector );
72 localRestrictProlong_.restrictLocal( subLFFather, subLFSon, geometryInFather, initialize );
77 template<
class LFFather,
class LFSon,
class LocalGeometry >
79 const LocalGeometry &geometryInFather,
bool initialize )
const 84 typedef typename LFSon::BasisFunctionSetType::ScalarBasisFunctionSetType SubSonBasisFunctionSetType;
85 typedef typename LFFather::BasisFunctionSetType::ScalarBasisFunctionSetType SubFatherBasisFunctionSetType;
87 SubSonBasisFunctionSetType subSonBasisFunctionSet = lfSon.basisFunctionSet().scalarBasisFunctionSet();
88 SubFatherBasisFunctionSetType subFatherBasisFunctionSet = lfFather.basisFunctionSet().scalarBasisFunctionSet();
90 for( std::size_t i = 0; i < N; ++i )
92 std::size_t sonBasisSetSize = subSonBasisFunctionSet.size();
93 std::size_t fatherBasisSetsize = subFatherBasisFunctionSet.size();
95 SubDofVectorTypeSon sonSubDofVector( lfSon.localDofVector(), sonBasisSetSize, sonBasisSetSize * i );
96 SubDofVectorTypeFather fatherSubDofVector( lfFather.localDofVector(), fatherBasisSetsize, fatherBasisSetsize * i );
99 subLFSon( subSonBasisFunctionSet, sonSubDofVector );
101 subLFFather( subFatherBasisFunctionSet, fatherSubDofVector );
103 localRestrictProlong_.prolongLocal( subLFFather, subLFSon, geometryInFather, initialize );
109 return localRestrictProlong_.needCommunication();
113 LocalRestrictProlongType localRestrictProlong_;
120 #endif // #ifndef DUNE_FEM_SPACE_COMBINEDSPACE_POWERLOCALRESTRICPROLONG_HH Definition: powerlocalrestrictprolong.hh:25
void prolongLocal(const LFFather &lfFather, LFSon &lfSon, const LocalGeometry &geometryInFather, bool initialize) const
Definition: powerlocalrestrictprolong.hh:78
PowerLocalRestrictProlong(const DiscreteFunctionSpace &space)
Definition: powerlocalrestrictprolong.hh:36
void setFatherChildWeight(const DomainFieldType &weight)
Definition: powerlocalrestrictprolong.hh:40
interface for local functions
Definition: localfunction.hh:41
Definition: coordinate.hh:4
Definition: subvector.hh:22
void restrictLocal(LFFather &lfFather, const LFSon &lfSon, const LocalGeometry &geometryInFather, bool initialize) const
restrict data to father
Definition: powerlocalrestrictprolong.hh:47
LocalRestrictProlongType::DomainFieldType DomainFieldType
Definition: powerlocalrestrictprolong.hh:34
bool needCommunication() const
Definition: powerlocalrestrictprolong.hh:107
Definition: common/localrestrictprolong.hh:16