bool GridSubsetHandler::perform_self_tests()
{
	typedef typename geometry_traits<TElem>::iterator iterator;
	
	bool bSuccess = true;
	
	LOG("performing self tests on GridSubsetHandler\n");
	LOG("  num subets: " << num_subsets_in_list() << std::endl);
	
//	iterate through the subsets and check whether the assigned
//	elements have the correct subset index
	LOG("  checking subset indices\n");
	for(size_t i = 0; i < num_subsets_in_list(); ++i){
		LOG("  checking subset " << i);
		for(iterator iter = begin<TElem>(i); iter != end<TElem>(i); ++iter)
		{
			if(get_subset_index(*iter) != i){
				LOG(" bad element subset index: "
					<< get_subset_index(*iter));
				bSuccess = false;
				break;
			}
		}
		LOG("\n");
	}
	
	return bSuccess;
}
void
MultiGridSubsetHandler::
assign_subset_impl(TElem* elem, int subsetIndex)
{
	assert((m_pGrid != NULL) && "ERROR in SubsetHandler::assign_subset(): No grid assigned to SubsetHandler.");

	int level = m_pMG->get_level(elem);

//	check if we have to remove elem from a subset.
	int oldIndex = get_subset_index(elem);
	
	if(oldIndex != -1)
		section_container<TElem>(oldIndex, level).erase(get_list_iterator(elem), elem->container_section());

//	add the element to the subset.
	if(subsetIndex != -1)
	{
		subset_required(subsetIndex);
		level_required(level);
		section_container<TElem>(subsetIndex, level).insert(elem, elem->container_section());
		subset_assigned(elem, subsetIndex);
	}
	else {
//TODO:	iterator is useless!
		subset_assigned(elem, -1);
	}
}