1 #ifndef DUNE_FEM_COMMOPERATIONS_HH 2 #define DUNE_FEM_COMMOPERATIONS_HH 8 #include <dune/common/tupleutility.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;
56 template <
class BufferImp,
class EntityImp>
60 DataGather(BufferImp & buff,
const EntityImp & en )
66 template <
class DataHandlerImp>
67 void visit(DataHandlerImp & dh) {
73 const EntityImp & en_;
77 template <
class BufferImp,
class EntityImp>
82 DataScatter(BufferImp & buff,
const EntityImp & en,
size_t n)
89 template <
class DataHandlerImp>
90 void visit(DataHandlerImp & dh) {
92 dh.scatter(buff_,en_,size_);
97 const EntityImp & en_;
102 template <
class EntityImp>
108 DataSize(
const EntityImp & en)
114 template <
class DataHandlerImp>
115 void visit(DataHandlerImp & dh)
117 size_ += dh.size(en_);
121 size_t size()
const {
return size_; }
124 const EntityImp & en_;
135 FixedSize(
const int dim,
const int codim)
142 template <
class DataHandlerImp>
143 void visit(DataHandlerImp & dh)
145 bool fs = dh.fixedsize(dim_,codim_);
146 fixedSize_ = (fs ==
false) ? fs : fixedSize_;
150 bool fixedSize()
const {
return fixedSize_; }
165 Contains(
const int dim,
const int codim)
172 template <
class DataHandlerImp>
173 void visit(DataHandlerImp & dh)
175 bool c = dh.contains(dim_,codim_);
176 contains_ = (c ==
true) ? c : contains_;
180 bool contains()
const {
return contains_; }
201 ForEachValue<DataHandlerTupleType> forEach(data_);
202 Contains dataContains(dim,codim);
203 forEach.apply(dataContains);
204 return dataContains.contains();
209 ForEachValue<DataHandlerTupleType> forEach(data_);
210 FixedSize dataFixedSize(dim,codim);
211 forEach.apply(dataFixedSize);
212 return dataFixedSize.fixedSize();
217 template<
class MessageBufferImp,
class EntityType>
218 void gather (MessageBufferImp& buff,
const EntityType& en)
const 220 ForEachValue<DataHandlerTupleType> forEach(data_);
221 DataGather<MessageBufferImp,EntityType> gatherData(buff,en);
222 forEach.apply(gatherData);
227 template<
class MessageBufferImp,
class EntityType>
228 void scatter (MessageBufferImp& buff,
const EntityType& en,
size_t n)
230 ForEachValue<DataHandlerTupleType> forEach(data_);
231 DataScatter<MessageBufferImp,EntityType> scatterData(buff,en,n);
232 forEach.apply(scatterData);
237 template<
class EntityType>
238 size_t size (
const EntityType& en)
const 240 ForEachValue<DataHandlerTupleType> forEach(data_);
241 DataSize<EntityType> dataSize(en);
242 forEach.apply(dataSize);
243 return dataSize.size();
247 DataHandlerTupleType data_;
271 template <
class DataType>
272 static inline void apply(
const DataType & arg, DataType & dest)
287 template <
class DataType>
288 static inline void apply(
const DataType & arg, DataType & dest)
303 template <
class DataType>
304 static inline void apply(
const DataType & arg, DataType & dest)
319 template <
class DataType>
320 static inline void apply(
const DataType & arg, DataType & dest)
335 template <
class DataType>
336 static inline void apply(
const DataType & arg, DataType & dest)
350 template <
class DiscreteFunction>
355 typedef typename DiscreteFunctionType :: DiscreteFunctionSpaceType :: IteratorType :: Entity
Entity;
361 return entity.isLeaf();
371 #endif // #ifndef DUNE_FEM_COMMOPERATIONS_HH
combine multiple data handles into one
Definition: commoperations.hh:50
static constexpr T min(T a)
Definition: utility.hh:81
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:238
void scatter(MessageBufferImp &buff, const EntityType &en, size_t n)
loop over all internal data handlers and call scatter for given entity
Definition: commoperations.hh:228
static void apply(const DataType &arg, DataType &dest)
Definition: commoperations.hh:288
static void apply(const DataType &arg, DataType &dest)
Definition: commoperations.hh:320
DiscreteFunctionType::DiscreteFunctionSpaceType::IteratorType::Entity Entity
Definition: commoperations.hh:355
CombinedDataHandle(const std::tuple< DataHandle... > &data)
Definition: commoperations.hh:195
check for sets of entities for the load balance procedure
Definition: commoperations.hh:351
static void apply(const DataType &arg, DataType &dest)
Definition: commoperations.hh:304
static constexpr T max(T a)
Definition: utility.hh:65
Mathematical operation apply during communication to data that is communicated enum of all avialable ...
Definition: commoperations.hh:259
static const char * name()
Definition: commoperations.hh:282
bool contains(const Entity &entity) const
return true if the data of this entity should be transfered during load balance
Definition: commoperations.hh:359
static constexpr T sub(T a)
Definition: utility.hh:49
DataHandle::DataType Type
Definition: commoperations.hh:37
substract data
Definition: commoperations.hh:295
static double max(const Double &v, const double p)
Definition: double.hh:387
Definition: commoperations.hh:261
Definition: coordinate.hh:4
CombinedDataType< DataHandle... >::Type DataType
Definition: commoperations.hh:189
static const char * name()
Definition: commoperations.hh:314
static const char * name()
Definition: commoperations.hh:266
just copy data
Definition: commoperations.hh:263
bool contains(int dim, int codim) const
Definition: commoperations.hh:199
static const char * name()
Definition: commoperations.hh:298
sum up data
Definition: commoperations.hh:279
dfCommunicationOperation
Definition: commoperations.hh:261
static void apply(const DataType &arg, DataType &dest)
Definition: commoperations.hh:336
CombinedDataHandle(const DataHandle &...handle)
Definition: commoperations.hh:191
bool fixedsize(int dim, int codim) const
Definition: commoperations.hh:207
static const char * name()
Definition: commoperations.hh:330
void gather(MessageBufferImp &buff, const EntityType &en) const
loop over all internal data handlers and call gather for given entity
Definition: commoperations.hh:218
Definition: commoperations.hh:26
static void apply(const DataType &arg, DataType &dest)
Definition: commoperations.hh:272
DataHandle::DataType Type
Definition: commoperations.hh:31
keep minimum
Definition: commoperations.hh:311
keep maximum
Definition: commoperations.hh:327
static double min(const Double &v, const double p)
Definition: double.hh:375
LoadBalanceLeafData(const DiscreteFunctionType &df)
Definition: commoperations.hh:357
DiscreteFunction DiscreteFunctionType
Definition: commoperations.hh:354