ENH: add ZoneMesh::findIndices() method
STYLE: use findIndices instead of findAll for coordinateSystems
This commit is contained in:
parent
0b9ff0aa53
commit
12837a67d5
@ -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]));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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]));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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]));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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>());
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user