ENH: add ZoneMesh::findIndices() method

STYLE: use findIndices instead of findAll for coordinateSystems
This commit is contained in:
Mark Olesen 2010-07-26 13:18:59 +02:00
parent 0b9ff0aa53
commit 12837a67d5
9 changed files with 137 additions and 78 deletions

View File

@ -206,8 +206,8 @@ int main(int argc, char *argv[])
{
const word csName = args["from"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl
@ -215,15 +215,15 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
fromCsys.reset(new coordinateSystem(csLst[csId]));
fromCsys.reset(new coordinateSystem(csLst[csIndex]));
}
if (args.optionFound("to"))
{
const word csName = args["to"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl
@ -231,7 +231,7 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
toCsys.reset(new coordinateSystem(csLst[csId]));
toCsys.reset(new coordinateSystem(csLst[csIndex]));
}

View File

@ -195,8 +195,8 @@ int main(int argc, char *argv[])
{
const word csName = args["from"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl
@ -204,15 +204,15 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
fromCsys.reset(new coordinateSystem(csLst[csId]));
fromCsys.reset(new coordinateSystem(csLst[csIndex]));
}
if (args.optionFound("to"))
{
const word csName = args["to"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl
@ -220,7 +220,7 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
toCsys.reset(new coordinateSystem(csLst[csId]));
toCsys.reset(new coordinateSystem(csLst[csIndex]));
}

View File

@ -208,8 +208,8 @@ int main(int argc, char *argv[])
{
const word csName = args["from"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl
@ -217,15 +217,15 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
fromCsys.reset(new coordinateSystem(csLst[csId]));
fromCsys.reset(new coordinateSystem(csLst[csIndex]));
}
if (args.optionFound("to"))
{
const word csName = args["to"];
label csId = csLst.find(csName);
if (csId < 0)
const label csIndex = csLst.findIndex(csName);
if (csIndex < 0)
{
FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl
@ -233,7 +233,7 @@ int main(int argc, char *argv[])
<< exit(FatalError);
}
toCsys.reset(new coordinateSystem(csLst[csId]));
toCsys.reset(new coordinateSystem(csLst[csIndex]));
}

View File

@ -26,6 +26,7 @@ License
#include "ZoneMesh.H"
#include "entry.H"
#include "demandDrivenData.H"
#include "stringListOps.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
@ -241,6 +242,66 @@ Foam::wordList Foam::ZoneMesh<ZoneType, MeshType>::names() const
}
template<class ZoneType, class MeshType>
Foam::labelList Foam::ZoneMesh<ZoneType, MeshType>::findIndices
(
const keyType& key
) const
{
labelList indices;
if (key.isPattern())
{
indices = findStrings(key, this->names());
}
else
{
indices.setSize(this->size());
label nFound = 0;
forAll(*this, i)
{
if (key == operator[](i).name())
{
indices[nFound++] = i;
}
}
indices.setSize(nFound);
}
return indices;
}
template<class ZoneType, class MeshType>
Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findIndex
(
const keyType& key
) const
{
if (key.isPattern())
{
labelList indices = this->findIndices(key);
// return first element
if (!indices.empty())
{
return indices[0];
}
}
else
{
forAll(*this, i)
{
if (key == operator[](i).name())
{
return i;
}
}
}
// not found
return -1;
}
template<class ZoneType, class MeshType>
Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findZoneID
(
@ -265,7 +326,7 @@ Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findZoneID
<< "List of available zone names: " << names() << endl;
}
// A dummy return to keep the compiler happy
// not found
return -1;
}

View File

@ -121,8 +121,8 @@ public:
// Return -1 if the object is not in the zone
const Map<label>& zoneMap() const;
//- Given a global object index, return the zone it is in. If
//object does not belong to any zones, return -1
//- Given a global object index, return the zone it is in.
// If object does not belong to any zones, return -1
label whichZone(const label objectIndex) const;
//- Return a list of zone types
@ -134,6 +134,12 @@ public:
//- Find zone index given a name
label findZoneID(const word& zoneName) const;
//- Return zone indices for all matches
labelList findIndices(const keyType&) const;
//- Return zone index for the first match, return -1 if not found
label findIndex(const keyType&) const;
//- Clear addressing
void clearAddressing();

View File

@ -71,7 +71,7 @@ Foam::porousZone::porousZone
key_(key),
mesh_(mesh),
dict_(dict),
cellZoneIds_(0),
cellZoneIds_(mesh_.cellZones().findIndices(key_)),
coordSys_(dict, mesh),
porosity_(1),
intensity_(0),
@ -83,24 +83,6 @@ Foam::porousZone::porousZone
{
Info<< "Creating porous zone: " << key_ << endl;
if (key_.isPattern())
{
cellZoneIds_ = findStrings
(
key_,
mesh_.cellZones().names()
);
}
else
{
const label zoneId = mesh_.cellZones().findZoneID(key_);
if (zoneId != -1)
{
cellZoneIds_.setSize(1);
cellZoneIds_[0] = zoneId;
}
}
bool foundZone = !cellZoneIds_.empty();
reduce(foundZone, orOp<bool>());

View File

@ -142,17 +142,17 @@ Foam::coordinateSystem::coordinateSystem
keyType key(entryPtr->stream());
const coordinateSystems& lst = coordinateSystems::New(obr);
const label id = lst.find(key);
const label index = lst.findIndex(key);
if (debug)
{
Info<< "coordinateSystem::coordinateSystem"
"(const dictionary&, const objectRegistry&):"
<< nl << "using global coordinate system: "
<< key << "=" << id << endl;
<< key << "=" << index << endl;
}
if (id < 0)
if (index < 0)
{
FatalErrorIn
(
@ -165,7 +165,7 @@ Foam::coordinateSystem::coordinateSystem
// copy coordinateSystem, but assign the name as the typeName
// to avoid strange things in writeDict()
operator=(lst[id]);
operator=(lst[index]);
name_ = typeName_();
}
else

View File

@ -100,13 +100,44 @@ const Foam::coordinateSystems& Foam::coordinateSystems::New
Foam::label Foam::coordinateSystems::find(const keyType& key) const
{
return findIndex(key);
}
Foam::labelList Foam::coordinateSystems::findIndices(const keyType& key) const
{
labelList indices;
if (key.isPattern())
{
labelList allFound = findAll(key);
// return first element
if (!allFound.empty())
indices = findStrings(key, toc());
}
else
{
indices.setSize(size());
label nFound = 0;
forAll(*this, i)
{
return allFound[0];
if (key == operator[](i).name())
{
indices[nFound++] = i;
}
}
indices.setSize(nFound);
}
return indices;
}
Foam::label Foam::coordinateSystems::findIndex(const keyType& key) const
{
if (key.isPattern())
{
labelList indices = findIndices(key);
// return first element
if (!indices.empty())
{
return indices[0];
}
}
else
@ -124,34 +155,9 @@ Foam::label Foam::coordinateSystems::find(const keyType& key) const
}
Foam::labelList Foam::coordinateSystems::findAll(const keyType& key) const
{
labelList allFound;
if (key.isPattern())
{
allFound = findStrings(key, toc());
}
else
{
allFound.setSize(size());
label nFound = 0;
forAll(*this, i)
{
if (key == operator[](i).name())
{
allFound[nFound++] = i;
}
}
allFound.setSize(nFound);
}
return allFound;
}
bool Foam::coordinateSystems::found(const keyType& key) const
{
return find(key) >= 0;
return findIndex(key) != -1;
}

View File

@ -97,11 +97,15 @@ public:
// Member Functions
//- Find and return index for the first match, returns -1 if not found
label find(const keyType& key) const;
//- Find and return indices for all matches
labelList findAll(const keyType& key) const;
labelList findIndices(const keyType& key) const;
//- Find and return index for the first match, return -1 if not found
label findIndex(const keyType& key) const;
//- Find and return index for the first match, returns -1 if not found
// @deprecated use findIndex() instead (deprecated Jul 2010)
label find(const keyType& key) const;
//- Search for given key
bool found(const keyType& key) const;