Ejemplo n.º 1
0
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());
}
Ejemplo n.º 2
0
uint
GridSubsetHandler::
num() const
{
	uint n = 0;
	for(uint i = 0; i < num_subsets_in_list(); ++i)
		n += num<TElem>(i);
		
	return n;
}
Ejemplo n.º 3
0
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--;
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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));
}
Ejemplo n.º 7
0
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);
		}
	}
}
Ejemplo n.º 8
0
void MultiGridSubsetHandler::add_required_subset_lists(int maxIndex)
{
	while((int)num_subsets_in_list() <= maxIndex)
		add_subset_to_all_levels();
}