mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add ZoneMesh::findIndices() method
STYLE: use findIndices instead of findAll for coordinateSystems
This commit is contained in:
@ -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]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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>());
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
{
|
||||||
|
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
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user