6 #include <dune/common/unused.hh> 7 #include <dune/common/version.hh> 8 #include <dune/grid/common/datahandleif.hh> 13 template <
int dim>
class UGGrid;
29 :
public Dune::CommDataHandleIF<UniqueBorderPartition<Grid>, int>
31 using IdSet =
typename Grid::GlobalIdSet;
32 using IdType =
typename IdSet::IdType;
35 using EntitySet = std::set<IdType>;
50 , idSet_(grid.globalIdSet())
54 bool contains(
int ,
int )
const {
return true; }
57 bool fixedSize(
int ,
int )
const {
return true; }
60 template <
class Entity>
61 std::size_t size(Entity
const& e)
const {
return 1; }
63 template <
class MessageBuffer,
class Entity>
64 void gather(MessageBuffer& buff, Entity
const& e)
const 69 template <
class MessageBuffer,
class Entity>
70 void scatter(MessageBuffer& buff, Entity
const& e, std::size_t n)
78 return notOwner_.count(
id) == 0;
89 template <
class MessageBuffer,
class Entity,
int cd>
90 void scatterImpl(MessageBuffer& buff, Entity
const& e, [[maybe_unused]] std::size_t n,
int_t<cd>)
100 notOwner_.insert(idSet_.id(e));
103 template <
class MessageBuffer,
class Entity>
104 void scatterImpl(MessageBuffer& buff, Entity
const& e, [[maybe_unused]] std::size_t n,
int_t<0>)
113 if (rank > myrank_) {
114 for (
int codim = 1; codim <= Grid::dimension; ++codim) {
115 for (
int i = 0; i <
int(e.subEntities(codim)); ++i) {
116 notOwner_.insert(idSet_.subId(e, i, codim));
129 #if DUNE_VERSION_LT(DUNE_UGGRID,2,8) 133 :
public Dune::CommDataHandleIF<UniqueBorderPartition<Dune::UGGrid<dim>>, int>
135 using Grid = Dune::UGGrid<dim>;
136 using IdSet =
typename Grid::LocalIdSet;
137 using IdType =
typename IdSet::IdType;
140 using EntitySet = std::set<IdType>;
155 , idSet_(grid.localIdSet())
159 bool contains(
int ,
int codim)
const {
return true; }
162 bool fixedSize(
int ,
int codim)
const {
return codim != 0; }
165 template <
class Entity>
166 std::size_t size(Entity
const& e)
const 168 if (Entity::codimension != 0)
172 for (
int codim = 1; codim <= Grid::dimension; ++codim)
173 s += e.subEntities(codim);
177 template <
class MessageBuffer,
class Entity>
178 void gather(MessageBuffer& buff, Entity
const& e)
const 183 template <
class MessageBuffer,
class Entity>
184 void scatter(MessageBuffer& buff, Entity
const& e, std::size_t n)
190 bool contains(IdType
const&
id)
const 192 return entityToRank_[id] == myrank_;
196 int numIterations()
const 198 return Grid::dimension;
202 template <
class MessageBuffer,
class Entity,
int cd>
203 void gatherImpl(MessageBuffer& buff, Entity
const& e,
int_t<cd>)
const 205 int& rank = entityToRank_[idSet_.id(e)];
206 rank = std::max(rank, myrank_);
210 template <
class MessageBuffer,
class Entity>
211 void gatherImpl(MessageBuffer& buff, Entity
const& e,
int_t<0>)
const 214 for (
int codim = 1; codim <= Grid::dimension; ++codim) {
215 for (
int i = 0; i <
int(e.subEntities(codim)); ++i) {
216 int& rank = entityToRank_[idSet_.subId(e, i, codim)];
217 rank = std::max(rank, myrank_);
223 template <
class MessageBuffer,
class Entity,
int cd>
224 void scatterImpl(MessageBuffer& buff, Entity
const& e, [[maybe_unused]] std::size_t n,
int_t<cd>)
231 int& storedRank = entityToRank_[idSet_.id(e)];
232 storedRank = std::max(rank, storedRank);
235 template <
class MessageBuffer,
class Entity>
236 void scatterImpl(MessageBuffer& buff, Entity
const& e, std::size_t n,
int_t<0>)
239 for (
int codim = 1; codim <= Grid::dimension; ++codim) {
240 for (
int i = 0; i <
int(e.subEntities(codim)); ++i, ++j) {
245 int& storedRank = entityToRank_[idSet_.subId(e, i, codim)];
246 storedRank = std::max(rank, storedRank);
253 mutable std::map<IdType, int> entityToRank_;
Definition: AdaptiveGrid.hpp:373
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
std::integral_constant< int, I > int_t
A wrapper for int type.
Definition: Index.hpp:15
int numIterations() const
Number of iterations to perform the communication in order to collect all neighboring entities...
Definition: UniqueBorderPartition.hpp:82
UniqueBorderPartition(int rank, Grid const &grid)
Construct a UniqueBorderPartition DataHandle to be used in a GridView communicator.
Definition: UniqueBorderPartition.hpp:48
bool contains(IdType const &id) const
Returns whether id is owned by this rank.
Definition: UniqueBorderPartition.hpp:76
Determine for each border entity which processor owns it.
Definition: UniqueBorderPartition.hpp:28