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"]; const word csName = args["from"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl << "Cannot find -from " << csName << nl
@ -215,15 +215,15 @@ int main(int argc, char *argv[])
<< exit(FatalError); << exit(FatalError);
} }
fromCsys.reset(new coordinateSystem(csLst[csId])); fromCsys.reset(new coordinateSystem(csLst[csIndex]));
} }
if (args.optionFound("to")) if (args.optionFound("to"))
{ {
const word csName = args["to"]; const word csName = args["to"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl << "Cannot find -to " << csName << nl
@ -231,7 +231,7 @@ int main(int argc, char *argv[])
<< exit(FatalError); << 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"]; const word csName = args["from"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl << "Cannot find -from " << csName << nl
@ -204,15 +204,15 @@ int main(int argc, char *argv[])
<< exit(FatalError); << exit(FatalError);
} }
fromCsys.reset(new coordinateSystem(csLst[csId])); fromCsys.reset(new coordinateSystem(csLst[csIndex]));
} }
if (args.optionFound("to")) if (args.optionFound("to"))
{ {
const word csName = args["to"]; const word csName = args["to"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl << "Cannot find -to " << csName << nl
@ -220,7 +220,7 @@ int main(int argc, char *argv[])
<< exit(FatalError); << 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"]; const word csName = args["from"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -from " << csName << nl << "Cannot find -from " << csName << nl
@ -217,15 +217,15 @@ int main(int argc, char *argv[])
<< exit(FatalError); << exit(FatalError);
} }
fromCsys.reset(new coordinateSystem(csLst[csId])); fromCsys.reset(new coordinateSystem(csLst[csIndex]));
} }
if (args.optionFound("to")) if (args.optionFound("to"))
{ {
const word csName = args["to"]; const word csName = args["to"];
label csId = csLst.find(csName); const label csIndex = csLst.findIndex(csName);
if (csId < 0) if (csIndex < 0)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot find -to " << csName << nl << "Cannot find -to " << csName << nl
@ -233,7 +233,7 @@ int main(int argc, char *argv[])
<< exit(FatalError); << 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 "ZoneMesh.H"
#include "entry.H" #include "entry.H"
#include "demandDrivenData.H" #include "demandDrivenData.H"
#include "stringListOps.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * 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> template<class ZoneType, class MeshType>
Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findZoneID 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; << "List of available zone names: " << names() << endl;
} }
// A dummy return to keep the compiler happy // not found
return -1; return -1;
} }

View File

@ -121,8 +121,8 @@ public:
// Return -1 if the object is not in the zone // Return -1 if the object is not in the zone
const Map<label>& zoneMap() const; const Map<label>& zoneMap() const;
//- Given a global object index, return the zone it is in. If //- Given a global object index, return the zone it is in.
//object does not belong to any zones, return -1 // If object does not belong to any zones, return -1
label whichZone(const label objectIndex) const; label whichZone(const label objectIndex) const;
//- Return a list of zone types //- Return a list of zone types
@ -134,6 +134,12 @@ public:
//- Find zone index given a name //- Find zone index given a name
label findZoneID(const word& zoneName) const; 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 //- Clear addressing
void clearAddressing(); void clearAddressing();

View File

@ -71,7 +71,7 @@ Foam::porousZone::porousZone
key_(key), key_(key),
mesh_(mesh), mesh_(mesh),
dict_(dict), dict_(dict),
cellZoneIds_(0), cellZoneIds_(mesh_.cellZones().findIndices(key_)),
coordSys_(dict, mesh), coordSys_(dict, mesh),
porosity_(1), porosity_(1),
intensity_(0), intensity_(0),
@ -83,24 +83,6 @@ Foam::porousZone::porousZone
{ {
Info<< "Creating porous zone: " << key_ << endl; 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(); bool foundZone = !cellZoneIds_.empty();
reduce(foundZone, orOp<bool>()); reduce(foundZone, orOp<bool>());

View File

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

View File

@ -100,13 +100,44 @@ const Foam::coordinateSystems& Foam::coordinateSystems::New
Foam::label Foam::coordinateSystems::find(const keyType& key) const 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()) if (key.isPattern())
{ {
labelList allFound = findAll(key); indices = findStrings(key, toc());
// return first element }
if (!allFound.empty()) else
{ {
return allFound[0]; indices.setSize(size());
label nFound = 0;
forAll(*this, i)
{
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 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 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 // 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 //- 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 //- Search for given key
bool found(const keyType& key) const; bool found(const keyType& key) const;