Skip to content
Snippets Groups Projects
Commit 4a94ac1a authored by Oliver Sander's avatar Oliver Sander
Browse files

bugfix for the levelIndexSet

[[Imported from SVN: r2453]]
parent bfad9e46
Branches
Tags
No related merge requests found
......@@ -947,8 +947,10 @@ void Dune::UGGrid < dim, dimworld >::createend()
template < int dim, int dimworld >
void Dune::UGGrid < dim, dimworld >::setIndices()
{
levelIndexSets_.resize(maxlevel()+1);
for (int i=0; i<=maxlevel(); i++)
levelIndexSets_[i].update();
levelIndexSets_[i].update(*this, i);
leafIndexSet_.update();
......
......@@ -15,28 +15,31 @@ namespace Dune {
class UGGridLevelIndexSet
{
public:
//! constructor stores reference to a grid and level
UGGridLevelIndexSet (const GridImp& g, int l) : grid_(g), level_(l)
{}
/** \brief Default constructor
Unfortunately we can't force the user to init grid_ and level_, because
UGGridLevelIndexSets are meant to be stored in an array.
*/
UGGridLevelIndexSet () {}
//! get index of an entity
template<int cd>
int index (const typename GridImp::Traits::template Codim<cd>::Entity& e) const
{
return grid_.template getRealEntity<cd>(e).levelIndex();
return grid_->template getRealEntity<cd>(e).levelIndex();
}
//! get index of subentity of a codim 0 entity
template<int cc>
int subindex (const typename GridImp::Traits::template Codim<0>::Entity& e, int i) const
{
return grid_.template getRealEntity<0>(e).template subIndex<cc>(i);
return grid_->template getRealEntity<0>(e).template subIndex<cc>(i);
}
//! get number of entities of given codim, type and on this level
int size (int codim, GeometryType type) const
{
return grid_.size(level_,codim, type);
return grid_->size(level_,codim, type);
}
/** \brief Deliver all geometry types used in this grid */
......@@ -46,27 +49,30 @@ namespace Dune {
}
/** \todo Should be private */
void update() {
void update(const GridImp& grid, int level) {
grid_ = &grid;
level_ = level;
const int dim = GridImp::dimension;
typename GridImp::Traits::template Codim<0>::LevelIterator eIt = grid_.template lbegin<0>(level_);
typename GridImp::Traits::template Codim<0>::LevelIterator eEndIt = grid_.template lend<0>(level_);
typename GridImp::Traits::template Codim<0>::LevelIterator eIt = grid_->template lbegin<0>(level_);
typename GridImp::Traits::template Codim<0>::LevelIterator eEndIt = grid_->template lend<0>(level_);
int id = 0;
for (; eIt!=eEndIt; ++eIt)
UG_NS<dim>::levelIndex(grid_.template getRealEntity<0>(*eIt).target_) = id++;
UG_NS<dim>::levelIndex(grid_->template getRealEntity<0>(*eIt).target_) = id++;
typename GridImp::Traits::template Codim<dim>::LevelIterator vIt = grid_.template lbegin<dim>(level_);
typename GridImp::Traits::template Codim<dim>::LevelIterator vEndIt = grid_.template lend<dim>(level_);
typename GridImp::Traits::template Codim<dim>::LevelIterator vIt = grid_->template lbegin<dim>(level_);
typename GridImp::Traits::template Codim<dim>::LevelIterator vEndIt = grid_->template lend<dim>(level_);
id = 0;
for (; vIt!=vEndIt; ++vIt)
UG_NS<dim>::levelIndex(grid_.template getRealEntity<dim>(*vIt).target_) = id++;
UG_NS<dim>::levelIndex(grid_->template getRealEntity<dim>(*vIt).target_) = id++;
}
private:
const GridImp& grid_;
const GridImp* grid_;
int level_;
std::vector<GeometryType> myTypes_;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment