1#ifndef DUNE_FEM_RESTRICTPROLONGINTERFACE_HH
2#define DUNE_FEM_RESTRICTPROLONGINTERFACE_HH
5#include <dune/common/bartonnackmanifcheck.hh>
6#include <dune/grid/common/capabilities.hh>
37 template<
class Traits >
60 CHECK_AND_CALL_INTERFACE_IMPLEMENTATION(
asImp().
finalize() );
75 template<
class Entity >
82 template<
class Entity,
class LocalGeometry >
84 const LocalGeometry &geometryInFather,
91 template <
class Entity>
98 template<
class Entity >
105 template<
class Entity,
class LocalGeometry >
107 const LocalGeometry &geometryInFather,
116 template<
class Communicator >
119 CHECK_AND_CALL_INTERFACE_IMPLEMENTATION(
asImp().
addToList( comm ) );
125 template<
class LoadBalancer >
137 template<
class Entity >
140 const DomainFieldType weight = son.geometry().volume() / father.geometry().volume();
152 template<
class Impl,
class DomainField >
162 template<
class Traits >
174 template<
class IndexSet,
class Entity >
176 const Entity &father,
const Entity &son )
const
178 return (indexSet.
index( father ) == indexSet.
index( son ));
190 template <
class Entity>
200 template<
class DiscreteFunction >
202 :
public RestrictProlongInterfaceDefault< RestrictProlongTraits< RestrictProlongDefault< DiscreteFunction >, typename DiscreteFunction::DomainFieldType > >
254 localRP_.setFatherChildWeight( weight );
258 template<
class Entity >
261 assert( !father.isLeaf() );
264 typedef typename GridPartType::template Codim< Entity::codimension >::EntityType GridPartEntityType;
266 const GridPartEntityType &gpFather = gridPart.convert( father );
267 const GridPartEntityType &gpSon = gridPart.convert( son );
274 template<
class Entity,
class LocalGeometry >
276 const LocalGeometry &geometryInFather,
292 template <
class Entity>
306 template<
class Entity >
309 assert( !father.isLeaf() );
312 typedef typename GridPartType::template Codim< Entity::codimension >::EntityType GridPartEntityType;
314 const GridPartEntityType &gpFather = gridPart.convert( father );
315 const GridPartEntityType &gpSon = gridPart.convert( son );
322 template<
class Entity,
class LocalGeometry >
324 const LocalGeometry &geometryInFather,
342 template<
class Communicator,
class Operation >
343 void addToList ( Communicator &comm,
const Operation& op)
350 template<
class Communicator >
358 template<
class Communicator >
366 template<
class LoadBalancer >
Definition: bindguard.hh:11
typename Impl::ConstLocalFunction< GridFunction >::Type ConstLocalFunction
Definition: const.hh:604
static auto bindGuard(Object &object, Args &&... args) -> std::enable_if_t< isBindable< Object, Args... >::value, BindGuard< Object > >
Definition: bindguard.hh:67
const EntityType & entity() const
obtain the entity, this local function lives on
Definition: localfunction.hh:302
bool valid() const
Returns true if local function if bind or init was previously called.
Definition: localfunction.hh:423
void unbind()
Definition: mutable.hh:103
void bind(const EntityType &entity)
Definition: mutable.hh:98
interface documentation for (grid part) index sets
Definition: common/indexset.hh:104
IndexType index(const Entity &entity) const
return index for given entity
Definition: common/indexset.hh:153
This class manages the adaptation process. If the method adapt is called, then the grid is adapted an...
Definition: loadbalancer.hh:66
void addToLoadBalancer(DiscreteFunctionType &df)
add discrete function to data inliner/xtractor list
Definition: loadbalancer.hh:196
Interface class defining the local behaviour of the restrict/prolong operation (using BN)
Definition: restrictprolonginterface.hh:39
void addToList(Communicator &comm)
add discrete function to communicator
Definition: restrictprolonginterface.hh:117
Traits::DomainFieldType DomainFieldType
field type of domain vector space
Definition: restrictprolonginterface.hh:47
void prolongLocal(const Entity &father, const Entity &son, const LocalGeometry &geometryInFather, bool initialize) const
prolong data to children
Definition: restrictprolonginterface.hh:106
void setFatherChildWeight(const DomainFieldType &weight) const
explicit set volume ratio of son and father
Definition: restrictprolonginterface.hh:69
void restrictLocal(const Entity &father, const Entity &son, bool initialize) const
restrict data to father
Definition: restrictprolonginterface.hh:76
void restrictFinalize(const Entity &father) const
finalize restriction on father
Definition: restrictprolonginterface.hh:92
Traits::RestProlImp RestProlImp
type of restrict-prolong operator implementation
Definition: restrictprolonginterface.hh:44
RestProlImp & asImp()
Definition: restrictprolonginterface.hh:147
DomainFieldType calcWeight(const Entity &father, const Entity &son) const
calculates the weight, i.e. (volume son)/(volume father)
Definition: restrictprolonginterface.hh:138
void addToLoadBalancer(LoadBalancer &lb)
add discrete function to load balancer
Definition: restrictprolonginterface.hh:126
void finalize()
finalize restrict prolong object (if necessary) after adaptation and dof compression was finished
Definition: restrictprolonginterface.hh:58
void initialize()
initialize restrict prolong object (if necessary) before adaptation takes place
Definition: restrictprolonginterface.hh:51
void restrictLocal(const Entity &father, const Entity &son, const LocalGeometry &geometryInFather, bool initialize) const
restrict data to father
Definition: restrictprolonginterface.hh:83
void prolongLocal(const Entity &father, const Entity &son, bool initialize) const
prolong data to children
Definition: restrictprolonginterface.hh:99
const RestProlImp & asImp() const
Definition: restrictprolonginterface.hh:146
Traits class for derivation from RestrictProlongInterface.
Definition: restrictprolonginterface.hh:154
Impl RestProlImp
Definition: restrictprolonginterface.hh:155
DomainField DomainFieldType
Definition: restrictprolonginterface.hh:156
Interface default implementation for derived classes.
Definition: restrictprolonginterface.hh:165
void restrictFinalize(const Entity &father) const
restrictFinalize is for some spaces where a local matrix inversion is carried out after restriction.
Definition: restrictprolonginterface.hh:191
bool entitiesAreCopies(const IndexSet &indexSet, const Entity &father, const Entity &son) const
return true if father and son have the same index
Definition: restrictprolonginterface.hh:175
BaseType::DomainFieldType DomainFieldType
Definition: restrictprolonginterface.hh:170
void finalize()
Definition: restrictprolonginterface.hh:187
void initialize()
Definition: restrictprolonginterface.hh:186
void setFatherChildWeight(const DomainFieldType &weight) const
explicit set volume ratio of son and father
Definition: restrictprolonginterface.hh:184
This is a wrapper for the default implemented restriction/prolongation operator, which only takes a d...
Definition: restrictprolonginterface.hh:203
LocalRestrictProlongType localRP_
Definition: restrictprolonginterface.hh:376
void setFatherChildWeight(const DomainFieldType &weight) const
explicit set volume ratio of son and father
Definition: restrictprolonginterface.hh:252
RestrictProlongDefault(DiscreteFunctionType &discreteFunction)
Definition: restrictprolonginterface.hh:231
DefaultLocalRestrictProlong< DiscreteFunctionSpaceType > LocalRestrictProlongType
Definition: restrictprolonginterface.hh:219
void addToList(Communicator &comm, const Operation &op)
add discrete function to communicator with given unpack operation
Definition: restrictprolonginterface.hh:343
DiscreteFunctionType & discreteFunction_
Definition: restrictprolonginterface.hh:373
void restrictFinalize(const Entity &father) const
finalize restriction on father
Definition: restrictprolonginterface.hh:293
void removeFromList(Communicator &comm)
remove discrete function from communicator
Definition: restrictprolonginterface.hh:359
DiscreteFunction DiscreteFunctionType
Definition: restrictprolonginterface.hh:208
RestrictProlongDefault(const RestrictProlongDefault &other)
Definition: restrictprolonginterface.hh:221
void restrictLocal(const Entity &father, const Entity &son, const LocalGeometry &geometryInFather, bool initialize) const
restrict data to father
Definition: restrictprolonginterface.hh:275
ConstLocalFunctionType constLf_
Definition: restrictprolonginterface.hh:374
void prolongLocal(const Entity &father, const Entity &son, const LocalGeometry &geometryInFather, bool initialize) const
prolong data to children
Definition: restrictprolonginterface.hh:323
BaseType::DomainFieldType DomainFieldType
Definition: restrictprolonginterface.hh:210
bool entitiesAreCopies(const IndexSet &indexSet, const Entity &father, const Entity &son) const
return true if father and son have the same index
Definition: restrictprolonginterface.hh:175
void prolongLocal(const Entity &father, const Entity &son, bool initialize) const
prolong data to children
Definition: restrictprolonginterface.hh:307
MutableLocalFunctionType targetLf_
Definition: restrictprolonginterface.hh:375
void addToList(Communicator &comm)
add discrete function to communicator
Definition: restrictprolonginterface.hh:351
DiscreteFunctionType::GridPartType GridPartType
Definition: restrictprolonginterface.hh:217
MutableLocalFunction< DiscreteFunctionType > MutableLocalFunctionType
Definition: restrictprolonginterface.hh:215
void addToLoadBalancer(LoadBalancer &lb)
add discrete function to load balancer
Definition: restrictprolonginterface.hh:367
ConstLocalFunction< DiscreteFunctionType > ConstLocalFunctionType
Definition: restrictprolonginterface.hh:214
void restrictLocal(const Entity &father, const Entity &son, bool initialize) const
restrict data to father
Definition: restrictprolonginterface.hh:259
DiscreteFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: restrictprolonginterface.hh:212