1 #ifndef DUNE_FEM_COMMOPERATIONS_HH
2 #define DUNE_FEM_COMMOPERATIONS_HH
8 #include <dune/common/hybridutilities.hh>
9 #include <dune/common/std/utility.hh>
10 #include <dune/grid/common/datahandleif.hh>
25 template<
class... DataHandle >
28 template<
class DataHandle >
31 typedef typename DataHandle::DataType
Type;
34 template<
class DataHandle,
class... Tail >
37 typedef typename DataHandle::DataType
Type;
49 template<
class... DataHandle >
51 :
public CommDataHandleIF< CombinedDataHandle< DataHandle... >, typename CombinedDataType< DataHandle... >::Type >
53 typedef std::tuple< DataHandle... > DataHandlerTupleType;
54 static constexpr std::size_t tupleSize = std::tuple_size< DataHandlerTupleType >::value;
71 [ & ](
auto i ){ value = ( value || std::get< i >( data_ ).contains( dim, codim ) ); } );
79 [ & ](
auto i ){ value = ( value && std::get< i >( data_ ).fixedsize( dim, codim ) ); } );
85 template<
class MessageBufferImp,
class EntityType>
86 void gather (MessageBufferImp& buff,
const EntityType& en)
const
88 Hybrid::forEach( Std::make_index_sequence< tupleSize >{}, [ & ](
auto i ){ std::get< i >( data_ ).gather( buff, en ); } );
93 template<
class MessageBufferImp,
class EntityType>
94 void scatter (MessageBufferImp& buff,
const EntityType& en, std::size_t n)
96 Hybrid::forEach( Std::make_index_sequence< tupleSize >{}, [ & ](
auto i ){ std::get< i >( data_ ).scatter( buff, en, n ); } );
101 template<
class EntityType>
102 std::size_t
size (
const EntityType& en)
const
104 std::size_t value( 0 );
105 Hybrid::forEach( Std::make_index_sequence< tupleSize >{}, [ & ](
auto i ){ value += std::get< i >( data_ ).size( en ); } );
110 DataHandlerTupleType data_;
135 template <
class DataType>
136 inline void operator () (
const DataType & arg, DataType & dest)
const
152 template <
class DataType>
153 inline void operator () (
const DataType & arg, DataType & dest)
const
168 template <
class DataType>
169 inline void operator () (
const DataType & arg, DataType & dest)
const
184 template <
class DataType>
185 inline void operator () (
const DataType & arg, DataType & dest)
const
200 template <
class DataType>
201 inline void operator () (
const DataType & arg, DataType & dest)
const
215 template <
class DiscreteFunction>
220 typedef typename DiscreteFunctionType :: DiscreteFunctionSpaceType :: IteratorType :: Entity
Entity;
226 return entity.isLeaf();
LoadBalanceLeafData(const DiscreteFunctionType &df)
Definition: commoperations.hh:222
DiscreteFunctionType ::DiscreteFunctionSpaceType ::IteratorType ::Entity Entity
Definition: commoperations.hh:220
static const char * name()
Definition: commoperations.hh:179
CombinedDataHandle(const std::tuple< DataHandle... > &data)
Definition: commoperations.hh:63
DiscreteFunction DiscreteFunctionType
Definition: commoperations.hh:219
static const dfCommunicationOperation value
Definition: commoperations.hh:178
void operator()(const DataType &arg, DataType &dest) const
Definition: commoperations.hh:201
void operator()(const DataType &arg, DataType &dest) const
Definition: commoperations.hh:153
dfCommunicationOperation
Definition: commoperations.hh:124
std::size_t size(const EntityType &en) const
loop over all internal data handlers and return sum of data size of given entity
Definition: commoperations.hh:102
void gather(MessageBufferImp &buff, const EntityType &en) const
loop over all internal data handlers and call gather for given entity
Definition: commoperations.hh:86
void scatter(MessageBufferImp &buff, const EntityType &en, std::size_t n)
loop over all internal data handlers and call scatter for given entity
Definition: commoperations.hh:94
void operator()(const DataType &arg, DataType &dest) const
Definition: commoperations.hh:169
CombinedDataType< DataHandle... >::Type DataType
Definition: commoperations.hh:57
static const dfCommunicationOperation value
Definition: commoperations.hh:194
static const char * name()
Definition: commoperations.hh:147
DataHandle::DataType Type
Definition: commoperations.hh:37
static const char * name()
Definition: commoperations.hh:130
static const char * name()
Definition: commoperations.hh:163
void operator()(const DataType &arg, DataType &dest) const
Definition: commoperations.hh:136
static const char * name()
Definition: commoperations.hh:195
bool fixedsize(int dim, int codim) const
Definition: commoperations.hh:75
static const dfCommunicationOperation value
Definition: commoperations.hh:146
static const dfCommunicationOperation value
Definition: commoperations.hh:162
bool contains(int dim, int codim) const
Definition: commoperations.hh:67
void operator()(const DataType &arg, DataType &dest) const
Definition: commoperations.hh:185
CombinedDataHandle(const DataHandle &... handle)
Definition: commoperations.hh:59
DataHandle::DataType Type
Definition: commoperations.hh:31
static const dfCommunicationOperation value
Definition: commoperations.hh:129
bool contains(const Entity &entity) const
return true if the data of this entity should be transfered during load balance
Definition: commoperations.hh:224
@ sub
Definition: commoperations.hh:124
@ copy
Definition: commoperations.hh:124
@ max
Definition: commoperations.hh:124
@ min
Definition: commoperations.hh:124
@ add
Definition: commoperations.hh:124
Definition: bindguard.hh:11
static void forEach(IndexRange< T, sz > range, F &&f)
Definition: hybrid.hh:129
static constexpr T max(T a)
Definition: utility.hh:77
static constexpr T min(T a)
Definition: utility.hh:93
Definition: commoperations.hh:26
combine multiple data handles into one
Definition: commoperations.hh:52
Mathematical operation apply during communication to data that is communicated enum of all avialable ...
Definition: commoperations.hh:123
just copy data
Definition: commoperations.hh:128
sum up data
Definition: commoperations.hh:145
substract data
Definition: commoperations.hh:161
keep minimum
Definition: commoperations.hh:177
keep maximum
Definition: commoperations.hh:193
check for sets of entities for the load balance procedure
Definition: commoperations.hh:217