void MultiGridSubsetHandler::add_level() { m_levels.push_back(SubsetVec()); int topLevel = m_levels.size() - 1; for(uint i = 0; i < num_subsets_in_list(); ++i) m_levels[topLevel].push_back(new_subset()); }
uint GridSubsetHandler:: num() const { uint n = 0; for(uint i = 0; i < num_subsets_in_list(); ++i) n += num<TElem>(i); return n; }
void MultiGridSubsetHandler::erase_subset_lists(int index) { for(size_t level = 0; level < m_levels.size(); ++level) { SubsetVec& subsets = m_levels[level]; delete subsets[index]; for(uint i = index + 1; i < num_subsets_in_list(); ++i) subsets[i-1] = subsets[i]; subsets.resize(subsets.size() - 1); } m_numSubsets--; }
uint GridSubsetHandler:: num(int subsetIndex) const { const int sectionInd = geometry_traits<TElem>::CONTAINER_SECTION; if((subsetIndex < 0) || (subsetIndex >= (int)num_subsets_in_list())) return 0; if(sectionInd < 0) return section_container<TElem>(subsetIndex).num_elements(); else return section_container<TElem>(subsetIndex).num_elements(sectionInd); }
GridObjectCollection MultiGridSubsetHandler:: get_grid_objects_in_level(int level) const { level_required(level); uint numSubsets = num_subsets_in_list(); GridObjectCollection goc(numSubsets); for(uint i = 0; i < numSubsets; ++i) { goc.add_level( &m_levels[level][i]->m_vertices, &m_levels[level][i]->m_edges, &m_levels[level][i]->m_faces, &m_levels[level][i]->m_volumes); } return goc; }
typename geometry_traits<TElem>::const_iterator GridSubsetHandler:: end(int subsetIndex) const { const int sectionInd = geometry_traits<TElem>::CONTAINER_SECTION; if(subsetIndex < 0 || subsetIndex >= (int)num_subsets_in_list()) return iterator_cast<typename geometry_traits<TElem>::const_iterator>( typename Grid::traits<TElem>::AttachedElementList::iterator()); if(sectionInd < 0) return iterator_cast<typename geometry_traits<TElem>::const_iterator>( section_container<TElem>(subsetIndex).end()); else return iterator_cast<typename geometry_traits<TElem>::const_iterator>( section_container<TElem>(subsetIndex).section_end(sectionInd)); }
void GridSubsetHandler:: clear_subset_elements(int subsetIndex) { const int sectionInd = geometry_traits<TElem>::CONTAINER_SECTION; if(subsetIndex < 0 || subsetIndex >= (int)num_subsets_in_list()) return; // iterate through the elements of type TElem and erase them from the subsets list. if(m_pGrid != NULL) { typename Grid::traits<TElem>::SectionContainer& secCon = section_container<TElem>(subsetIndex); typename geometry_traits<TElem>::iterator iter = begin<TElem>(subsetIndex); while(iter != end<TElem>(subsetIndex)) { typename geometry_traits<TElem>::iterator iterErase = iter++; alter_subset_index(*iterErase) = -1; secCon.erase(iterErase, sectionInd); } } }
void MultiGridSubsetHandler::add_required_subset_lists(int maxIndex) { while((int)num_subsets_in_list() <= maxIndex) add_subset_to_all_levels(); }