12#ifndef DUMUX_VECTOR_COMM_DATA_HANDLE_HH
13#define DUMUX_VECTOR_COMM_DATA_HANDLE_HH
18#include <dune/grid/common/datahandleif.hh>
28 template<
class A,
class B>
29 static void apply(A& a,
const B& b)
35 template<
class A,
class B>
36 static void apply(A& a,
const B& b)
42 template<
class A,
class B>
43 static void apply(A& a,
const B& b)
52 template<
class A,
class B>
53 static void apply(A& a,
const B& b)
65template<
class Mapper,
class Vector,
int entityCodim,
66 class ScatterOperator,
class DataT =
typename Vector::value_type>
68 :
public Dune::CommDataHandleIF<VectorCommDataHandle<Mapper, Vector, entityCodim, ScatterOperator, DataT>, DataT>
80 {
return (codim == entityCodim); }
87 if (codim != entityCodim)
return true;
88 const auto& gtypes =
mapper_.types(codim);
89 if (gtypes.empty())
return true;
90 const auto nDofs =
mapper_.size(gtypes[0]);
91 for (
const auto& gt : gtypes)
92 if (
mapper_.size(gt) != nDofs)
return false;
100 template<
class Entity>
101 std::size_t
size(Entity& entity)
const
105 template<
class MessageBuffer,
class Entity>
106 void gather(MessageBuffer& buff,
const Entity& entity)
const
116 template<
class MessageBuffer,
class Entity>
117 void scatter(MessageBuffer& buff,
const Entity& entity, std::size_t n)
122 ScatterOperator::apply(
vector_[i], x);
135template<
class Mapper,
class Vector,
int dim,
136 class ScatterOperator,
class DataT =
typename Vector::value_type>
138 :
public Dune::CommDataHandleIF<MultiCodimVectorCommDataHandle<Mapper, Vector, dim, ScatterOperator, DataT>, DataT>
143 static_assert(dim >= 0,
"Grid dimension must be non-negative");
147 std::bitset<dim+1> activeCodims)
155 && codim <= static_cast<int>(dim)
166 const auto& gtypes =
mapper_.types(codim);
167 if (gtypes.empty())
return true;
168 const auto nDofs =
mapper_.size(gtypes[0]);
169 for (
const auto& gt : gtypes)
170 if (
mapper_.size(gt) != nDofs)
return false;
178 template<
class Entity>
179 std::size_t
size(Entity& entity)
const
183 template<
class MessageBuffer,
class Entity>
184 void gather(MessageBuffer& buff,
const Entity& entity)
const
194 template<
class MessageBuffer,
class Entity>
195 void scatter(MessageBuffer& buff,
const Entity& entity, std::size_t n)
200 ScatterOperator::apply(
vector_[i], x);
210template<
class Mapper,
class Vector,
int codim,
class DataType =
typename Vector::value_type>
213template<
class Mapper,
class Vector,
int codim,
class DataType =
typename Vector::value_type>
216template<
class Mapper,
class Vector,
int codim,
class DataType =
typename Vector::value_type>
219template<
class Mapper,
class Vector,
int codim,
class DataType =
typename Vector::value_type>
222template<
class Mapper,
class Vector,
int dim,
class DataType =
typename Vector::value_type>
225template<
class Mapper,
class Vector,
int dim,
class DataType =
typename Vector::value_type>
228template<
class Mapper,
class Vector,
int dim,
class DataType =
typename Vector::value_type>
231template<
class Mapper,
class Vector,
int dim,
class DataType =
typename Vector::value_type>
A data handle class to exchange entries of a vector for multiple codims in one communication call.
Definition vectorcommdatahandle.hh:139
bool fixedSize(int, int codim) const
Definition vectorcommdatahandle.hh:162
DataT DataType
export type of data for message buffer
Definition vectorcommdatahandle.hh:142
std::size_t size(Entity &entity) const
how many objects of type DataType have to be sent for a given entity
Definition vectorcommdatahandle.hh:179
const Mapper & mapper_
Definition vectorcommdatahandle.hh:205
Vector & vector_
Definition vectorcommdatahandle.hh:206
MultiCodimVectorCommDataHandle(const Mapper &mapper, Vector &vector, std::bitset< dim+1 > activeCodims)
Definition vectorcommdatahandle.hh:145
std::bitset< dim+1 > activeCodims_
Definition vectorcommdatahandle.hh:207
bool contains(int, int codim) const
returns true if data for this codim should be communicated
Definition vectorcommdatahandle.hh:152
void scatter(MessageBuffer &buff, const Entity &entity, std::size_t n)
unpack data from message buffer to user (all DOFs of entity)
Definition vectorcommdatahandle.hh:195
void gather(MessageBuffer &buff, const Entity &entity) const
pack data from user to message buffer (all DOFs of entity)
Definition vectorcommdatahandle.hh:184
A data handle class to exchange entries of a vector.
Definition vectorcommdatahandle.hh:69
bool contains(int, int codim) const
returns true if data for this codim should be communicated
Definition vectorcommdatahandle.hh:79
Vector & vector_
Definition vectorcommdatahandle.hh:128
bool fixedSize(int, int codim) const
Definition vectorcommdatahandle.hh:85
std::size_t size(Entity &entity) const
how many objects of type DataType have to be sent for a given entity. Returns the number of DOFs asso...
Definition vectorcommdatahandle.hh:101
void gather(MessageBuffer &buff, const Entity &entity) const
pack data from user to message buffer (all DOFs of entity)
Definition vectorcommdatahandle.hh:106
const Mapper & mapper_
Definition vectorcommdatahandle.hh:127
DataT DataType
export type of data for message buffer
Definition vectorcommdatahandle.hh:72
void scatter(MessageBuffer &buff, const Entity &entity, std::size_t n)
unpack data from message buffer to user (all DOFs of entity)
Definition vectorcommdatahandle.hh:117
VectorCommDataHandle(const Mapper &mapper, Vector &vector)
Definition vectorcommdatahandle.hh:74
Adapter to expose a multi-DOF mapper interface for single- and multi-DOF mappers.
Definition cvfelocalresidual.hh:25
VectorCommDataHandle< Mapper, Vector, codim, Detail::Sum, DataType > VectorCommDataHandleSum
Definition vectorcommdatahandle.hh:214
VectorCommDataHandle< Mapper, Vector, codim, Detail::Min, DataType > VectorCommDataHandleMin
Definition vectorcommdatahandle.hh:217
MultiCodimVectorCommDataHandle< Mapper, Vector, dim, Detail::SetEqual, DataType > MultiCodimVectorCommDataHandleEqual
Definition vectorcommdatahandle.hh:223
VectorCommDataHandle< Mapper, Vector, codim, Detail::SetEqual, DataType > VectorCommDataHandleEqual
Definition vectorcommdatahandle.hh:211
constexpr auto asMultiMapper(const Mapper &mapper)
Definition multimapperview.hh:48
MultiCodimVectorCommDataHandle< Mapper, Vector, dim, Detail::Min, DataType > MultiCodimVectorCommDataHandleMin
Definition vectorcommdatahandle.hh:229
MultiCodimVectorCommDataHandle< Mapper, Vector, dim, Detail::Max, DataType > MultiCodimVectorCommDataHandleMax
Definition vectorcommdatahandle.hh:232
VectorCommDataHandle< Mapper, Vector, codim, Detail::Max, DataType > VectorCommDataHandleMax
Definition vectorcommdatahandle.hh:220
MultiCodimVectorCommDataHandle< Mapper, Vector, dim, Detail::Sum, DataType > MultiCodimVectorCommDataHandleSum
Definition vectorcommdatahandle.hh:226
Definition vectorcommdatahandle.hh:41
static void apply(A &a, const B &b)
Definition vectorcommdatahandle.hh:43
Definition vectorcommdatahandle.hh:51
static void apply(A &a, const B &b)
Definition vectorcommdatahandle.hh:53
Definition vectorcommdatahandle.hh:27
static void apply(A &a, const B &b)
Definition vectorcommdatahandle.hh:29
Definition vectorcommdatahandle.hh:34
static void apply(A &a, const B &b)
Definition vectorcommdatahandle.hh:36