diff --git a/dune/gfe/parallel/globalindex.hh b/dune/gfe/parallel/globalindex.hh index 09b26625cd1593684d645a1d1aee677dc9265e0b..aebb05ec2983023679c5028219ac516add7d7b74 100644 --- a/dune/gfe/parallel/globalindex.hh +++ b/dune/gfe/parallel/globalindex.hh @@ -346,116 +346,4 @@ protected: IndexMap globalLocalMap_; }; - -namespace Dune { - - template <class GridView> - class GlobalP2Mapper - { - public: - - typedef std::map<int,int> IndexMap; - - GlobalP2Mapper(const GridView& gridView) - : gridView_(gridView) - { - static_assert(GridView::dimension==2, "Only implemented for two-dimensional grids"); - - P2BasisMapper<GridView> p2Mapper(gridView); - - GlobalUniqueIndex<GridView,2> globalVertexIndex(gridView); - GlobalUniqueIndex<GridView,1> globalEdgeIndex(gridView); - GlobalUniqueIndex<GridView,0> globalElementIndex(gridView); - - // total number of degrees of freedom - nGlobalEntity_ = globalVertexIndex.nGlobalEntity() + globalEdgeIndex.nGlobalEntity() + globalElementIndex.nGlobalEntity(); - nOwnedLocalEntity_ = globalVertexIndex.nOwnedLocalEntity() + globalEdgeIndex.nOwnedLocalEntity() + globalElementIndex.nOwnedLocalEntity(); - - // Determine - for (auto it = gridView.template begin<0>(); it != gridView.template end<0>(); ++it) - { - // Loop over all vertices -#if DUNE_VERSION_NEWER(DUNE_GRID,2,4) - for (size_t i=0; i<it->subEntities(2); i++) -#else - for (size_t i=0; i<it->template count<2>(); i++) -#endif - { - //int localIndex = globalVertexIndex.localIndex (*it->template subEntity<2>(i)); - int localIndex = p2Mapper.map(*it, i, 2); - int globalIndex = globalVertexIndex.globalIndex(*it->template subEntity<2>(i)); - - localGlobalMap_[localIndex] = globalIndex; - globalLocalMap_[globalIndex] = localIndex; - } - - // Loop over all edges -#if DUNE_VERSION_NEWER(DUNE_GRID,2,4) - for (size_t i=0; i<it->subEntities(1); i++) -#else - for (size_t i=0; i<it->template count<1>(); i++) -#endif - { - //int localIndex = globalEdgeIndex.localIndex (*it->template subEntity<1>(i)) + gridView.size(2); - int localIndex = p2Mapper.map(*it, i, 1); - int globalIndex = globalEdgeIndex.globalIndex(*it->template subEntity<1>(i)) + globalVertexIndex.nGlobalEntity(); - - localGlobalMap_[localIndex] = globalIndex; - globalLocalMap_[globalIndex] = localIndex; - } - - // One element degree of freedom for quadrilaterals - if (not it->type().isQuadrilateral()) - DUNE_THROW(Dune::NotImplemented, "for non-quadrilaterals"); - - if (it->type().isQuadrilateral()) - { - //int localIndex = globalEdgeIndex.localIndex (*it->template subEntity<1>(i)) + gridView.size(2); - int localIndex = p2Mapper.map(*it, 0, 0); - int globalIndex = globalElementIndex.globalIndex(*it->template subEntity<0>(0)) - + globalEdgeIndex.nGlobalEntity() - + globalVertexIndex.nGlobalEntity(); - - localGlobalMap_[localIndex] = globalIndex; - globalLocalMap_[globalIndex] = localIndex; - } - - } - - } - - /** \brief Given a local index, retrieve its index globally unique over all processes. */ - int globalIndex(const int& localIndex) const { - return localGlobalMap_.find(localIndex)->second; - } - - int localIndex(const int& globalIndex) const { - return globalLocalMap_.find(globalIndex)->second; - } - - unsigned int nGlobalEntity() const - { - return nGlobalEntity_; - } - - unsigned int nOwnedLocalEntity() const - { - return nOwnedLocalEntity_; - } - - const GridView& getGridView() const { - return gridView_; - } - - const GridView gridView_; - - IndexMap localGlobalMap_; - IndexMap globalLocalMap_; - - size_t nOwnedLocalEntity_; - size_t nGlobalEntity_; - - }; - -} #endif /* GLOBALUNIQUEINDEX_HH_ */