Commit bc0c8753 authored by Hanchuan Wu's avatar Hanchuan Wu Committed by Timo Koch
Browse files

[gridmapper] Deprecate dumux mapper.update() add argument gridView

parent 3d75f3fc
Pipeline #6031 passed with stages
......@@ -77,6 +77,8 @@ by the assembler in future Dumux versions.
- `Dumux::IsIndexable<T, I>` is deprecated, use `Dune::IsIndexable<T, I>`directly.
- The property `NumEqVector` has been deprecated. The class `NumEqVector` is now defined in namespace `Dumux` in header file `dumux/common/numeqvector.hh`.
- The member function `update()` of mappers is deprecated, use `update(gridView)` when updating the mapper after a grid or grid view change.
- All custom mapper implementation should implement `update(gridView)` replacing `update()`. Mappers with `update()` will no longer be supported after support for dune 2.7 is dropped.
### New experimental features (possibly subject to backwards-incompatible changes in the future)
......
......@@ -48,8 +48,23 @@ class ConformingGridIntersectionMapper
public:
ConformingGridIntersectionMapper(const GridView& gridView)
: gridView_(gridView) { }
: gridView_(gridView)
, indexSet_(&gridView.indexSet())
{}
void update (const GridView& gridView)
{
gridView_ = gridView;
indexSet_ = &gridView_.indexSet();
}
void update (GridView&& gridView)
{
gridView_ = std::move(gridView);
indexSet_ = &gridView_.indexSet();
}
[[deprecated("Use update(gridView) instead! Will be removed after release 3.4.")]]
void update()
{}
......@@ -71,11 +86,12 @@ public:
GridIndexType globalIntersectionIndex(const Element& element, const std::size_t localFaceIdx) const
{
return gridView_.indexSet().subIndex(element, localFaceIdx, codimIntersection);
return indexSet_->subIndex(element, localFaceIdx, codimIntersection);
}
private:
const GridView gridView_;
GridView gridView_;
const typename GridView::IndexSet* indexSet_;
};
/*!
......@@ -93,6 +109,7 @@ class NonConformingGridIntersectionMapper
public:
NonConformingGridIntersectionMapper(const GridView& gridview)
: gridView_(gridview),
indexSet_(&gridView_.indexSet()),
numIntersections_(gridView_.size(1)),
intersectionMapGlobal_(gridView_.size(0))
{
......@@ -115,7 +132,33 @@ public:
return intersectionMapGlobal_[index(element)].size();
}
void update (const GridView& gridView)
{
gridView_ = gridView;
indexSet_ = &gridView_.indexSet();
update_();
}
void update (GridView&& gridView)
{
gridView_ = std::move(gridView);
indexSet_ = &gridView_.indexSet();
update_();
}
[[deprecated("Use update(gridView) instead! Will be removed after release 3.4.")]]
void update()
{
update_();
}
private:
GridIndexType index(const Element& element) const
{
return indexSet_->index(element);
}
void update_()
{
intersectionMapGlobal_.clear();
intersectionMapGlobal_.resize(gridView_.size(0));
......@@ -165,13 +208,8 @@ public:
numIntersections_ = globalIntersectionIdx;
}
private:
GridIndexType index(const Element& element) const
{
return gridView_.indexSet().index(element);
}
const GridView gridView_;
GridView gridView_;
const typename GridView::IndexSet* indexSet_;
unsigned int numIntersections_;
std::vector<std::unordered_map<int, int> > intersectionMapGlobal_;
};
......@@ -305,7 +343,26 @@ public:
return intersectionMapLocal_[index(element)].size();
}
void update (const GridView &gridView)
{
gridView_ = gridView;
update_();
}
void update (GridView&& gridView)
{
gridView_ = std::move(gridView);
update_();
}
[[deprecated("Use update(gridView) instead! Will be removed after release 3.4.")]]
void update()
{
update_();
}
protected:
void update_()
{
if constexpr (Deprecated::hasUpdateGridView<ElementMapper, GridView>())
elementMapper_.update(gridView_);
......@@ -331,7 +388,6 @@ public:
fIdx++;
}
}
int globalIntersectionIdx = 0;
for (const auto& element : elements(gridView_))
{
......@@ -384,9 +440,7 @@ public:
}
size_ = globalIntersectionIdx;
}
protected:
const GridView gridView_;
GridView gridView_;
ElementMapper elementMapper_;
unsigned int size_;
std::vector<std::unordered_map<int, int> > intersectionMapGlobal_;
......
......@@ -57,8 +57,8 @@ public:
template<class Layout>
ReorderingDofMapper (const GridView& gridView, Layout&& layout)
: gridView_(gridView)
, indexSet_(gridView.indexSet())
, codimension_(layout(indexSet_.types(0)[0], GridView::dimension) ? 0 : GridView::dimension)
, indexSet_(&gridView.indexSet())
, codimension_(layout(indexSet_->types(0)[0], GridView::dimension) ? 0 : GridView::dimension)
{
update();
}
......@@ -74,7 +74,7 @@ public:
Index index (const EntityType& e) const
{
// map the index using the permutation obtained from the reordering algorithm
return static_cast<Index>(permutation_[indexSet_.index(e)]);
return static_cast<Index>(permutation_[indexSet_->index(e)]);
}
/** @brief Map subentity of codim 0 entity to array index.
......@@ -86,7 +86,7 @@ public:
*/
Index subIndex (const Element& e, int i, unsigned int codim) const
{
return indexSet_.subIndex(e, i, codim);
return indexSet_->subIndex(e, i, codim);
}
/** @brief Return total number of entities in the entity set managed by the mapper.
......@@ -99,7 +99,7 @@ public:
*/
std::size_t size () const
{
return indexSet_.size(codimension_);
return indexSet_->size(codimension_);
}
/** @brief Returns true if the entity is contained in the index set
......@@ -125,14 +125,38 @@ public:
*/
bool contains (const Element& e, int i, int cc, Index& result) const
{
result = indexSet_.subIndex(e, i, cc);
result = indexSet_->subIndex(e, i, cc);
return true;
}
/*!
* \brief Recalculates map after mesh adaptation
*/
void update (const GridView& gridView)
{
gridView_ = gridView;
indexSet_ = &gridView_.indexSet();
update_();
}
void update (GridView&& gridView)
{
gridView_ = std::move(gridView);
indexSet_ = &gridView_.indexSet();
update_();
}
/*!
* \brief Recalculates map after mesh adaptation
*/
[[deprecated("Use update(gridView) instead! Will be removed after release 3.4.")]]
void update ()
{
update_();
}
private:
void update_()
{
// Compute scotch reordering
Dune::Timer watch;
......@@ -144,11 +168,11 @@ public:
{
for (const auto& element : elements(gridView_))
{
auto eIdx = indexSet_.index(element);
auto eIdx = indexSet_->index(element);
for (const auto& intersection : intersections(gridView_, element))
{
if (intersection.neighbor())
graph[eIdx].push_back(indexSet_.index(intersection.outside()));
graph[eIdx].push_back(indexSet_->index(intersection.outside()));
}
}
}
......@@ -157,10 +181,10 @@ public:
{
for (const auto& element : elements(gridView_))
{
auto eIdx = indexSet_.index(element);
auto eIdx = indexSet_->index(element);
for (int vIdxLocal = 0; vIdxLocal < element.subEntities(codimension_); ++vIdxLocal)
{
auto vIdxGlobal = indexSet_.subIndex(element, vIdxLocal, codimension_);
auto vIdxGlobal = indexSet_->subIndex(element, vIdxLocal, codimension_);
graph[vIdxGlobal].push_back(eIdx);
}
}
......@@ -170,11 +194,9 @@ public:
std::cout << "Scotch backend reordered index set of size " << size()
<< " in " << watch.elapsed() << " seconds." << std::endl;
}
private:
// GridView is needed to keep the IndexSet valid
const GridView gridView_;
const typename GridView::IndexSet& indexSet_;
GridView gridView_;
const typename GridView::IndexSet* indexSet_;
const int codimension_;
// the map resulting from the reordering
std::vector<int> permutation_;
......
......@@ -216,6 +216,19 @@ public:
//! the update here simply updates the non-enriched map
//! enrichment has to be done afterwards!
void update(const GV& gridView)
{
gridView_ = gridView;
initialize_();
}
void update(GV&& gridView)
{
gridView_ = std::move(gridView);
initialize_();
}
[[deprecated("Use update(gridView) instead! Will be removed after release 2.8.")]]
void update()
{
initialize_();
......@@ -285,7 +298,7 @@ private:
// data members
std::size_t size_; //! number of dofs mapped to by this mapper
const GV gridView_; //! the grid view
GV gridView_; //! the grid view
MCMGMapper elementMapper_; //! unmodified element mapper
MCMGMapper vertexMapper_; //! unmodified vertex mapper
bool hasEnrichedVertices_; //! keeps track of if vertices are enriched
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment