![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
#include <ExtractShell.h>
Public Member Functions | |
ExtractShell (const smoab::CellSets volCells, const smoab::Interface &interface) | |
bool | findSkins (smoab::CellSets &surfaceCellSets) |
Private Attributes | |
const smoab::Interface & | Interface |
smoab::CellSets | VCells |
Definition at line 12 of file ExtractShell.h.
smoab::ExtractShell::ExtractShell | ( | const smoab::CellSets | volCells, |
const smoab::Interface & | interface | ||
) | [inline] |
Definition at line 18 of file ExtractShell.h.
: Interface( interface ), VCells( volCells )
{
}
bool smoab::ExtractShell::findSkins | ( | smoab::CellSets & | surfaceCellSets | ) |
Definition at line 27 of file ExtractShell.h.
References moab::Range::begin(), smoab::Interface::createAdjacencies(), moab::Range::end(), smoab::detail::UsageTable::incrementUsage(), moab::Range::insert(), smoab::detail::UsageTable::multipleUsage(), smoab::Interface::remove(), smoab::Interface::sideElements(), smoab::detail::UsageTable::singleUsage(), and VCells.
{
typedef smoab::Range::const_iterator Iterator;
typedef smoab::CellSets::const_iterator SetIterator;
smoab::Range cellsToRemove;
for( SetIterator set = this->VCells.begin(); set != this->VCells.end(); ++set )
{
const smoab::Range& cells = set->cells();
this->Interface.createAdjacencies( set->cells(), 2 );
//we create the usage table for each iteration so that we only
//get the shell of each cell set. If we used the table between
//sets we would get the shell of the combined sets
smoab::detail::UsageTable table;
for( Iterator i = cells.begin(); i != cells.end(); ++i )
{
std::vector< smoab::EntityHandle > faceCells = this->Interface.sideElements( *i, 2 );
//the usage id allows you to label cells when going into the table
//so that you can extract multiple shells where each is based on
//a single region id.
std::vector< int > regionId( 1, faceCells.size() );
table.incrementUsage( faceCells, regionId );
}
smoab::Range surfaceCells = table.singleUsage();
//create a new cell set that
smoab::CellSet surfaceSet( set->entity(), surfaceCells );
surfaceCellSets.push_back( surfaceSet );
smoab::Range subsetToRemove = table.multipleUsage();
cellsToRemove.insert( subsetToRemove.begin(), subsetToRemove.end() );
}
//we will remove all cells that have multiple usages from the moab database
//I really don't care if they already existed or not.
this->Interface.remove( cellsToRemove );
return true;
}
const smoab::Interface& smoab::ExtractShell::Interface [private] |
Definition at line 14 of file ExtractShell.h.
smoab::CellSets smoab::ExtractShell::VCells [private] |
Definition at line 15 of file ExtractShell.h.
Referenced by findSkins().