Added ALL option for cellSource pointToCell of meshTools

This commit is contained in:
Pascal Beckstein 2016-02-10 18:15:52 +01:00
parent ac941215d5
commit ee7a5233e7
2 changed files with 59 additions and 9 deletions

View file

@ -46,18 +46,21 @@ addToRunTimeSelectionTable(topoSetSource, pointToCell, istream);
Foam::topoSetSource::addToUsageTable Foam::pointToCell::usage_
(
pointToCell::typeName,
"\n Usage: pointToCell <pointSet> any\n\n"
" Select all cells with any point in the pointSet\n\n"
"\n Usage: pointToCell <pointSet> any|all\n\n"
" Select cells with\n"
" -any point in the pointSet\n"
" -all points in the pointSet\n\n"
);
template<>
const char* Foam::NamedEnum<Foam::pointToCell::pointAction, 1>::names[] =
const char* Foam::NamedEnum<Foam::pointToCell::pointAction, 2>::names[] =
{
"any"
"any",
"all"
};
const Foam::NamedEnum<Foam::pointToCell::pointAction, 1>
const Foam::NamedEnum<Foam::pointToCell::pointAction, 2>
Foam::pointToCell::pointActionNames_;
@ -69,9 +72,9 @@ void Foam::pointToCell::combine(topoSet& set, const bool add) const
pointSet loadedSet(mesh_, setName_);
// Handle any selection
if (option_ == ANY)
{
// Add cells with any point in loadedSet
for
(
pointSet::const_iterator iter = loadedSet.begin();
@ -89,6 +92,53 @@ void Foam::pointToCell::combine(topoSet& set, const bool add) const
}
}
}
else if (option_ == ALL)
{
// Add all cells whose points are all in set.
Map<label> numPoints(loadedSet.size());
forAllConstIter(pointSet, loadedSet, iter)
{
label pointI = iter.key();
const labelList& pCells = mesh_.pointCells()[pointI];
forAll(pCells, pCellI)
{
label cellI = pCells[pCellI];
Map<label>::iterator fndCell = numPoints.find(cellI);
if (fndCell == numPoints.end())
{
numPoints.insert(cellI, 1);
}
else
{
fndCell()++;
}
}
}
// Include cells that are referenced as many times as there are points
// in cell -> all points of cell
for
(
Map<label>::const_iterator iter = numPoints.begin();
iter != numPoints.end();
++iter
)
{
label cellI = iter.key();
if (iter() == mesh_.cellPoints()[cellI].size())
{
addOrDelete(set, cellI, add);
}
}
}
}

View file

@ -55,8 +55,8 @@ public:
//- Enumeration defining the valid options
enum pointAction
{
ANY // Cells using any point in set
//ALL // Possible extension: cells whose all points are in set
ANY, // Cells using any point in set
ALL // Cells whose all points are in set
};
private:
@ -64,7 +64,7 @@ private:
//- Add usage string
static addToUsageTable usage_;
static const NamedEnum<pointAction, 1> pointActionNames_;
static const NamedEnum<pointAction, 2> pointActionNames_;
//- Name of set to use
word setName_;