mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
restructured zones - now have common base (zone)
This commit is contained in:
@ -345,6 +345,9 @@ $(globalMeshData)/globalIndex.C
|
|||||||
|
|
||||||
$(polyMesh)/syncTools/syncTools.C
|
$(polyMesh)/syncTools/syncTools.C
|
||||||
|
|
||||||
|
zone = $(polyMesh)/zones/zone
|
||||||
|
$(zone)/zone.C
|
||||||
|
|
||||||
cellZone = $(polyMesh)/zones/cellZone
|
cellZone = $(polyMesh)/zones/cellZone
|
||||||
$(cellZone)/cellZone.C
|
$(cellZone)/cellZone.C
|
||||||
$(cellZone)/newCellZone.C
|
$(cellZone)/newCellZone.C
|
||||||
|
|||||||
@ -114,6 +114,7 @@ public:
|
|||||||
return index_ > -1;
|
return index_ > -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Edit
|
// Edit
|
||||||
|
|
||||||
//- Update
|
//- Update
|
||||||
|
|||||||
@ -45,59 +45,9 @@ namespace Foam
|
|||||||
addToRunTimeSelectionTable(cellZone, cellZone, dictionary);
|
addToRunTimeSelectionTable(cellZone, cellZone, dictionary);
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
const Foam::Map<Foam::label>& Foam::cellZone::cellLookupMap() const
|
|
||||||
{
|
|
||||||
if (!cellLookupMapPtr_)
|
|
||||||
{
|
|
||||||
calcCellLookupMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
return *cellLookupMapPtr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::cellZone::calcCellLookupMap() const
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void cellZone::calcCellLookupMap() const : "
|
|
||||||
<< "Calculating cell lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cellLookupMapPtr_)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"void cellZone::calcCellLookupMap() const"
|
|
||||||
) << "cell lookup map already calculated"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
const labelList& addr = *this;
|
|
||||||
|
|
||||||
cellLookupMapPtr_ = new Map<label>(2*addr.size());
|
|
||||||
Map<label>& clm = *cellLookupMapPtr_;
|
|
||||||
|
|
||||||
forAll (addr, cellI)
|
|
||||||
{
|
|
||||||
clm.insert(addr[cellI], cellI);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void cellZone::calcCellLookupMap() const : "
|
|
||||||
<< "Finished calculating cell lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Construct from components
|
|
||||||
Foam::cellZone::cellZone
|
Foam::cellZone::cellZone
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
@ -106,11 +56,8 @@ Foam::cellZone::cellZone
|
|||||||
const cellZoneMesh& zm
|
const cellZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
cellLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -122,15 +69,11 @@ Foam::cellZone::cellZone
|
|||||||
const cellZoneMesh& zm
|
const cellZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
cellLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Construct from dictionary
|
|
||||||
Foam::cellZone::cellZone
|
Foam::cellZone::cellZone
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
@ -139,16 +82,11 @@ Foam::cellZone::cellZone
|
|||||||
const cellZoneMesh& zm
|
const cellZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(dict.lookup("cellLabels")),
|
zone("cell", name, dict, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
cellLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Construct given the original zone and resetting the
|
|
||||||
// cell list and zone mesh information
|
|
||||||
Foam::cellZone::cellZone
|
Foam::cellZone::cellZone
|
||||||
(
|
(
|
||||||
const cellZone& cz,
|
const cellZone& cz,
|
||||||
@ -157,11 +95,8 @@ Foam::cellZone::cellZone
|
|||||||
const cellZoneMesh& zm
|
const cellZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(cz, addr, index),
|
||||||
name_(cz.name()),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
cellLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Foam::cellZone::cellZone
|
Foam::cellZone::cellZone
|
||||||
@ -172,38 +107,22 @@ Foam::cellZone::cellZone
|
|||||||
const cellZoneMesh& zm
|
const cellZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(cz, addr, index),
|
||||||
name_(cz.name()),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
cellLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::cellZone::~cellZone()
|
Foam::cellZone::~cellZone()
|
||||||
{
|
{}
|
||||||
clearAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::label Foam::cellZone::whichCell(const label globalCellID) const
|
Foam::label Foam::cellZone::whichCell(const label globalCellID) const
|
||||||
{
|
{
|
||||||
const Map<label>& clm = cellLookupMap();
|
return zone::localID(globalCellID);
|
||||||
|
|
||||||
Map<label>::const_iterator clmIter = clm.find(globalCellID);
|
|
||||||
|
|
||||||
if (clmIter == clm.end())
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return clmIter();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,45 +132,9 @@ const Foam::cellZoneMesh& Foam::cellZone::zoneMesh() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::cellZone::clearAddressing()
|
|
||||||
{
|
|
||||||
deleteDemandDrivenData(cellLookupMapPtr_);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::cellZone::checkDefinition(const bool report) const
|
bool Foam::cellZone::checkDefinition(const bool report) const
|
||||||
{
|
{
|
||||||
const labelList& addr = *this;
|
return zone::checkDefinition(zoneMesh_.mesh().nCells(), report);
|
||||||
|
|
||||||
bool boundaryError = false;
|
|
||||||
|
|
||||||
forAll(addr, i)
|
|
||||||
{
|
|
||||||
if (addr[i] < 0 || addr[i] >= zoneMesh_.mesh().nCells())
|
|
||||||
{
|
|
||||||
boundaryError = true;
|
|
||||||
|
|
||||||
if (report)
|
|
||||||
{
|
|
||||||
SeriousErrorIn
|
|
||||||
(
|
|
||||||
"bool cellZone::checkDefinition("
|
|
||||||
"const bool report) const"
|
|
||||||
) << "Zone " << name()
|
|
||||||
<< " contains invalid cell label " << addr[i] << nl
|
|
||||||
<< "Valid cell labels are 0.."
|
|
||||||
<< zoneMesh_.mesh().nCells()-1 << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return boundaryError;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::cellZone::write(Ostream& os) const
|
|
||||||
{
|
|
||||||
os << nl << name()
|
|
||||||
<< nl << static_cast<const labelList&>(*this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -284,10 +167,10 @@ void Foam::cellZone::operator=(const labelList& addr)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const cellZone& p)
|
Foam::Ostream& Foam::operator<<(Ostream& os, const cellZone& cz)
|
||||||
{
|
{
|
||||||
p.write(os);
|
cz.write(os);
|
||||||
os.check("Ostream& operator<<(Ostream& f, const cellZone& p");
|
os.check("Ostream& operator<<(Ostream& os, const cellZone& cz");
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -42,12 +42,8 @@ SourceFiles
|
|||||||
#ifndef cellZone_H
|
#ifndef cellZone_H
|
||||||
#define cellZone_H
|
#define cellZone_H
|
||||||
|
|
||||||
#include "labelList.H"
|
#include "zone.H"
|
||||||
#include "typeInfo.H"
|
|
||||||
#include "dictionary.H"
|
|
||||||
#include "cellZoneMeshFwd.H"
|
#include "cellZoneMeshFwd.H"
|
||||||
#include "pointFieldFwd.H"
|
|
||||||
#include "Map.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -66,36 +62,22 @@ Ostream& operator<<(Ostream&, const cellZone&);
|
|||||||
|
|
||||||
class cellZone
|
class cellZone
|
||||||
:
|
:
|
||||||
public labelList
|
public zone
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Name of zone
|
protected:
|
||||||
word name_;
|
|
||||||
|
|
||||||
//- Index of zone
|
// Protected data
|
||||||
label index_;
|
|
||||||
|
|
||||||
//- Reference to zone list
|
//- Reference to zone list
|
||||||
const cellZoneMesh& zoneMesh_;
|
const cellZoneMesh& zoneMesh_;
|
||||||
|
|
||||||
// Demand-driven private data
|
|
||||||
|
|
||||||
//- Map of cell labels in zone for fast location lookup
|
|
||||||
mutable Map<label>* cellLookupMapPtr_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
//- Disallow default bitwise copy construct
|
||||||
cellZone(const cellZone&);
|
cellZone(const cellZone&);
|
||||||
|
|
||||||
//- Return map of local cell indices
|
|
||||||
const Map<label>& cellLookupMap() const;
|
|
||||||
|
|
||||||
//- Build map of local cell indices
|
|
||||||
void calcCellLookupMap() const;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -208,42 +190,22 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
virtual ~cellZone();
|
||||||
virtual ~cellZone();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return name
|
//- Helper function to re-direct to zone::localID(...)
|
||||||
const word& name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Map storing the local cell index for every global cell
|
|
||||||
// index. Used to find out the index of cell in the zone from
|
|
||||||
// the known global cell index. If the cell is not in the
|
|
||||||
// zone, returns -1
|
|
||||||
label whichCell(const label globalCellID) const;
|
label whichCell(const label globalCellID) const;
|
||||||
|
|
||||||
//- Return the index of this zone in zone list
|
|
||||||
label index() const
|
|
||||||
{
|
|
||||||
return index_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return zoneMesh reference
|
//- Return zoneMesh reference
|
||||||
const cellZoneMesh& zoneMesh() const;
|
const cellZoneMesh& zoneMesh() const;
|
||||||
|
|
||||||
//- Clear addressing
|
//- Clear addressing
|
||||||
void clearAddressing();
|
virtual void clearAddressing();
|
||||||
|
|
||||||
//- Check zone definition. Return true if in error.
|
//- Check zone definition. Return true if in error.
|
||||||
bool checkDefinition(const bool report = false) const;
|
virtual bool checkDefinition(const bool report = false) const;
|
||||||
|
|
||||||
//- Correct patch after moving points
|
|
||||||
virtual void movePoints(const pointField&)
|
|
||||||
{}
|
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
virtual void write(Ostream&) const;
|
virtual void write(Ostream&) const;
|
||||||
@ -261,8 +223,9 @@ public:
|
|||||||
void operator=(const labelList&);
|
void operator=(const labelList&);
|
||||||
|
|
||||||
|
|
||||||
// Ostream Operator
|
// I-O
|
||||||
|
|
||||||
|
//- Ostream Operator
|
||||||
friend Ostream& operator<<(Ostream&, const cellZone&);
|
friend Ostream& operator<<(Ostream&, const cellZone&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -100,54 +100,6 @@ void Foam::faceZone::calcFaceZonePatch() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::Map<Foam::label>& Foam::faceZone::faceLookupMap() const
|
|
||||||
{
|
|
||||||
if (!faceLookupMapPtr_)
|
|
||||||
{
|
|
||||||
calcFaceLookupMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
return *faceLookupMapPtr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::faceZone::calcFaceLookupMap() const
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void faceZone::calcFaceLookupMap() const : "
|
|
||||||
<< "Calculating face lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (faceLookupMapPtr_)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"void faceZone::calcFaceLookupMap() const"
|
|
||||||
) << "face lookup map already calculated"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
const labelList& addr = *this;
|
|
||||||
|
|
||||||
faceLookupMapPtr_ = new Map<label>(2*addr.size());
|
|
||||||
Map<label>& flm = *faceLookupMapPtr_;
|
|
||||||
|
|
||||||
forAll (addr, faceI)
|
|
||||||
{
|
|
||||||
flm.insert(addr[faceI], faceI);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void faceZone::calcFaceLookupMap() const : "
|
|
||||||
<< "Finished calculating face lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::faceZone::calcCellLayers() const
|
void Foam::faceZone::calcCellLayers() const
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
@ -228,16 +180,13 @@ Foam::faceZone::faceZone
|
|||||||
const faceZoneMesh& zm
|
const faceZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
|
||||||
flipMap_(fm),
|
flipMap_(fm),
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
zoneMesh_(zm),
|
||||||
patchPtr_(NULL),
|
patchPtr_(NULL),
|
||||||
masterCellsPtr_(NULL),
|
masterCellsPtr_(NULL),
|
||||||
slaveCellsPtr_(NULL),
|
slaveCellsPtr_(NULL),
|
||||||
mePtr_(NULL),
|
mePtr_(NULL)
|
||||||
faceLookupMapPtr_(NULL)
|
|
||||||
{
|
{
|
||||||
checkAddressing();
|
checkAddressing();
|
||||||
}
|
}
|
||||||
@ -252,22 +201,18 @@ Foam::faceZone::faceZone
|
|||||||
const faceZoneMesh& zm
|
const faceZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
|
||||||
flipMap_(fm),
|
flipMap_(fm),
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
zoneMesh_(zm),
|
||||||
patchPtr_(NULL),
|
patchPtr_(NULL),
|
||||||
masterCellsPtr_(NULL),
|
masterCellsPtr_(NULL),
|
||||||
slaveCellsPtr_(NULL),
|
slaveCellsPtr_(NULL),
|
||||||
mePtr_(NULL),
|
mePtr_(NULL)
|
||||||
faceLookupMapPtr_(NULL)
|
|
||||||
{
|
{
|
||||||
checkAddressing();
|
checkAddressing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Construct from dictionary
|
|
||||||
Foam::faceZone::faceZone
|
Foam::faceZone::faceZone
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
@ -276,23 +221,18 @@ Foam::faceZone::faceZone
|
|||||||
const faceZoneMesh& zm
|
const faceZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(dict.lookup("faceLabels")),
|
zone("face", name, dict, index),
|
||||||
name_(name),
|
|
||||||
flipMap_(dict.lookup("flipMap")),
|
flipMap_(dict.lookup("flipMap")),
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
zoneMesh_(zm),
|
||||||
patchPtr_(NULL),
|
patchPtr_(NULL),
|
||||||
masterCellsPtr_(NULL),
|
masterCellsPtr_(NULL),
|
||||||
slaveCellsPtr_(NULL),
|
slaveCellsPtr_(NULL),
|
||||||
mePtr_(NULL),
|
mePtr_(NULL)
|
||||||
faceLookupMapPtr_(NULL)
|
|
||||||
{
|
{
|
||||||
checkAddressing();
|
checkAddressing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Construct given the original zone and resetting the
|
|
||||||
// face list and zone mesh information
|
|
||||||
Foam::faceZone::faceZone
|
Foam::faceZone::faceZone
|
||||||
(
|
(
|
||||||
const faceZone& fz,
|
const faceZone& fz,
|
||||||
@ -302,16 +242,13 @@ Foam::faceZone::faceZone
|
|||||||
const faceZoneMesh& zm
|
const faceZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(fz, addr, index),
|
||||||
name_(fz.name()),
|
|
||||||
flipMap_(fm),
|
flipMap_(fm),
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
zoneMesh_(zm),
|
||||||
patchPtr_(NULL),
|
patchPtr_(NULL),
|
||||||
masterCellsPtr_(NULL),
|
masterCellsPtr_(NULL),
|
||||||
slaveCellsPtr_(NULL),
|
slaveCellsPtr_(NULL),
|
||||||
mePtr_(NULL),
|
mePtr_(NULL)
|
||||||
faceLookupMapPtr_(NULL)
|
|
||||||
{
|
{
|
||||||
checkAddressing();
|
checkAddressing();
|
||||||
}
|
}
|
||||||
@ -326,16 +263,13 @@ Foam::faceZone::faceZone
|
|||||||
const faceZoneMesh& zm
|
const faceZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(fz, addr, index),
|
||||||
name_(fz.name()),
|
|
||||||
flipMap_(fm),
|
flipMap_(fm),
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
zoneMesh_(zm),
|
||||||
patchPtr_(NULL),
|
patchPtr_(NULL),
|
||||||
masterCellsPtr_(NULL),
|
masterCellsPtr_(NULL),
|
||||||
slaveCellsPtr_(NULL),
|
slaveCellsPtr_(NULL),
|
||||||
mePtr_(NULL),
|
mePtr_(NULL)
|
||||||
faceLookupMapPtr_(NULL)
|
|
||||||
{
|
{
|
||||||
checkAddressing();
|
checkAddressing();
|
||||||
}
|
}
|
||||||
@ -351,29 +285,18 @@ Foam::faceZone::~faceZone()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::label Foam::faceZone::whichFace(const label globalFaceID) const
|
|
||||||
{
|
|
||||||
const Map<label>& flm = faceLookupMap();
|
|
||||||
|
|
||||||
Map<label>::const_iterator flmIter = flm.find(globalFaceID);
|
|
||||||
|
|
||||||
if (flmIter == flm.end())
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return flmIter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::faceZoneMesh& Foam::faceZone::zoneMesh() const
|
const Foam::faceZoneMesh& Foam::faceZone::zoneMesh() const
|
||||||
{
|
{
|
||||||
return zoneMesh_;
|
return zoneMesh_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::faceZone::whichFace(const label globalFaceID) const
|
||||||
|
{
|
||||||
|
return zone::localID(globalFaceID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::primitiveFacePatch& Foam::faceZone::operator()() const
|
const Foam::primitiveFacePatch& Foam::faceZone::operator()() const
|
||||||
{
|
{
|
||||||
if (!patchPtr_)
|
if (!patchPtr_)
|
||||||
@ -450,13 +373,14 @@ const Foam::labelList& Foam::faceZone::meshEdges() const
|
|||||||
|
|
||||||
void Foam::faceZone::clearAddressing()
|
void Foam::faceZone::clearAddressing()
|
||||||
{
|
{
|
||||||
|
zone::clearAddressing();
|
||||||
|
|
||||||
deleteDemandDrivenData(patchPtr_);
|
deleteDemandDrivenData(patchPtr_);
|
||||||
|
|
||||||
deleteDemandDrivenData(masterCellsPtr_);
|
deleteDemandDrivenData(masterCellsPtr_);
|
||||||
deleteDemandDrivenData(slaveCellsPtr_);
|
deleteDemandDrivenData(slaveCellsPtr_);
|
||||||
|
|
||||||
deleteDemandDrivenData(mePtr_);
|
deleteDemandDrivenData(mePtr_);
|
||||||
deleteDemandDrivenData(faceLookupMapPtr_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -504,30 +428,7 @@ void Foam::faceZone::updateMesh(const mapPolyMesh& mpm)
|
|||||||
|
|
||||||
bool Foam::faceZone::checkDefinition(const bool report) const
|
bool Foam::faceZone::checkDefinition(const bool report) const
|
||||||
{
|
{
|
||||||
const labelList& addr = *this;
|
return zone::checkDefinition(zoneMesh().mesh().faces().size(), report);
|
||||||
|
|
||||||
bool boundaryError = false;
|
|
||||||
|
|
||||||
forAll(addr, i)
|
|
||||||
{
|
|
||||||
if (addr[i] < 0 || addr[i] >= zoneMesh().mesh().faces().size())
|
|
||||||
{
|
|
||||||
boundaryError = true;
|
|
||||||
|
|
||||||
if (report)
|
|
||||||
{
|
|
||||||
SeriousErrorIn
|
|
||||||
(
|
|
||||||
"bool faceZone::checkDefinition("
|
|
||||||
"const bool report) const"
|
|
||||||
) << "Zone " << name()
|
|
||||||
<< " contains invalid face label " << addr[i] << nl
|
|
||||||
<< "Valid face labels are 0.."
|
|
||||||
<< zoneMesh().mesh().faces().size()-1 << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return boundaryError;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -642,10 +543,10 @@ void Foam::faceZone::writeDict(Ostream& os) const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const faceZone& p)
|
Foam::Ostream& Foam::operator<<(Ostream& os, const faceZone& fz)
|
||||||
{
|
{
|
||||||
p.write(os);
|
fz.write(os);
|
||||||
os.check("Ostream& operator<<(Ostream& f, const faceZone& p");
|
os.check("Ostream& operator<<(Ostream& os, const faceZone& fz");
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,13 +41,10 @@ SourceFiles
|
|||||||
#ifndef faceZone_H
|
#ifndef faceZone_H
|
||||||
#define faceZone_H
|
#define faceZone_H
|
||||||
|
|
||||||
#include "typeInfo.H"
|
#include "zone.H"
|
||||||
#include "dictionary.H"
|
|
||||||
#include "labelList.H"
|
|
||||||
#include "faceZoneMeshFwd.H"
|
#include "faceZoneMeshFwd.H"
|
||||||
#include "boolList.H"
|
#include "boolList.H"
|
||||||
#include "primitiveFacePatch.H"
|
#include "primitiveFacePatch.H"
|
||||||
#include "Map.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -68,20 +65,17 @@ Ostream& operator<<(Ostream&, const faceZone&);
|
|||||||
|
|
||||||
class faceZone
|
class faceZone
|
||||||
:
|
:
|
||||||
public labelList
|
public zone
|
||||||
{
|
{
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Name of zone
|
protected:
|
||||||
word name_;
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
//- Flip map for all faces in the zone. Set to true if the
|
//- Flip map for all faces in the zone. Set to true if the
|
||||||
// face needs to be flipped to achieve the correct orientation.
|
// face needs to be flipped to achieve the correct orientation.
|
||||||
boolList flipMap_;
|
boolList flipMap_;
|
||||||
|
|
||||||
//- Index of zone
|
|
||||||
label index_;
|
|
||||||
|
|
||||||
//- Reference to zone list
|
//- Reference to zone list
|
||||||
const faceZoneMesh& zoneMesh_;
|
const faceZoneMesh& zoneMesh_;
|
||||||
|
|
||||||
@ -100,9 +94,6 @@ class faceZone
|
|||||||
//- Global edge addressing
|
//- Global edge addressing
|
||||||
mutable labelList* mePtr_;
|
mutable labelList* mePtr_;
|
||||||
|
|
||||||
//- Map of face labels in zone for fast location lookup
|
|
||||||
mutable Map<label>* faceLookupMapPtr_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
@ -118,9 +109,6 @@ class faceZone
|
|||||||
//- Return map of local face indices
|
//- Return map of local face indices
|
||||||
const Map<label>& faceLookupMap() const;
|
const Map<label>& faceLookupMap() const;
|
||||||
|
|
||||||
//- Build map of local face indices
|
|
||||||
void calcFaceLookupMap() const;
|
|
||||||
|
|
||||||
//- Calculate master and slave face layer
|
//- Calculate master and slave face layer
|
||||||
void calcCellLayers() const;
|
void calcCellLayers() const;
|
||||||
|
|
||||||
@ -244,38 +232,23 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
virtual ~faceZone();
|
||||||
virtual ~faceZone();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return name
|
|
||||||
const word& name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return face flip map
|
//- Return face flip map
|
||||||
const boolList& flipMap() const
|
const boolList& flipMap() const
|
||||||
{
|
{
|
||||||
return flipMap_;
|
return flipMap_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Map storing the local face index for every global face index.
|
//- Helper function to re-direct to zone::localID(...)
|
||||||
// Used to find out the index of face in the zone from the known global
|
label whichFace(const label globalCellID) const;
|
||||||
// face index. If the face is not in the zone, returns -1
|
|
||||||
label whichFace(const label globalFaceID) const;
|
|
||||||
|
|
||||||
//- Return reference to primitive patch
|
//- Return reference to primitive patch
|
||||||
const primitiveFacePatch& operator()() const;
|
const primitiveFacePatch& operator()() const;
|
||||||
|
|
||||||
//- Return the index of this zone in zone list
|
|
||||||
label index() const
|
|
||||||
{
|
|
||||||
return index_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return zoneMesh reference
|
//- Return zoneMesh reference
|
||||||
const faceZoneMesh& zoneMesh() const;
|
const faceZoneMesh& zoneMesh() const;
|
||||||
|
|
||||||
@ -294,23 +267,23 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Clear addressing
|
//- Clear addressing
|
||||||
void clearAddressing();
|
virtual void clearAddressing();
|
||||||
|
|
||||||
//- Reset addressing and flip map (clearing demand-driven data)
|
//- Reset addressing and flip map (clearing demand-driven data)
|
||||||
void resetAddressing(const labelList&, const boolList&);
|
virtual void resetAddressing(const labelList&, const boolList&);
|
||||||
|
|
||||||
//- Check zone definition. Return true if in error.
|
//- Check zone definition. Return true if in error.
|
||||||
bool checkDefinition(const bool report = false) const;
|
virtual bool checkDefinition(const bool report = false) const;
|
||||||
|
|
||||||
//- Check whether all procs have faces synchronised. Return
|
//- Check whether all procs have faces synchronised. Return
|
||||||
// true if in error.
|
// true if in error.
|
||||||
bool checkParallelSync(const bool report = false) const;
|
virtual bool checkParallelSync(const bool report = false) const;
|
||||||
|
|
||||||
//- Correct patch after moving points
|
//- Correct patch after moving points
|
||||||
virtual void movePoints(const pointField&);
|
virtual void movePoints(const pointField&);
|
||||||
|
|
||||||
//- Update for changes in topology
|
//- Update for changes in topology
|
||||||
void updateMesh(const mapPolyMesh& mpm);
|
virtual void updateMesh(const mapPolyMesh& mpm);
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
virtual void write(Ostream&) const;
|
virtual void write(Ostream&) const;
|
||||||
@ -319,8 +292,9 @@ public:
|
|||||||
virtual void writeDict(Ostream&) const;
|
virtual void writeDict(Ostream&) const;
|
||||||
|
|
||||||
|
|
||||||
// Ostream Operator
|
// I-O
|
||||||
|
|
||||||
|
//- Ostream Operator
|
||||||
friend Ostream& operator<<(Ostream&, const faceZone&);
|
friend Ostream& operator<<(Ostream&, const faceZone&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -43,59 +43,9 @@ namespace Foam
|
|||||||
addToRunTimeSelectionTable(pointZone, pointZone, dictionary);
|
addToRunTimeSelectionTable(pointZone, pointZone, dictionary);
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
const Foam::Map<Foam::label>& Foam::pointZone::pointLookupMap() const
|
|
||||||
{
|
|
||||||
if (!pointLookupMapPtr_)
|
|
||||||
{
|
|
||||||
calcPointLookupMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
return *pointLookupMapPtr_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::pointZone::calcPointLookupMap() const
|
|
||||||
{
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void pointZone::calcPointLookupMap() const : "
|
|
||||||
<< "Calculating point lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pointLookupMapPtr_)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"void pointZone::calcPointLookupMap() const"
|
|
||||||
) << "point lookup map already calculated"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
const labelList& addr = *this;
|
|
||||||
|
|
||||||
pointLookupMapPtr_ = new Map<label>(2*addr.size());
|
|
||||||
Map<label>& plm = *pointLookupMapPtr_;
|
|
||||||
|
|
||||||
forAll (addr, pointI)
|
|
||||||
{
|
|
||||||
plm.insert(addr[pointI], pointI);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
Info<< "void pointZone::calcPointLookupMap() const : "
|
|
||||||
<< "Finished calculating point lookup map"
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Construct from components
|
|
||||||
Foam::pointZone::pointZone
|
Foam::pointZone::pointZone
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
@ -104,11 +54,8 @@ Foam::pointZone::pointZone
|
|||||||
const pointZoneMesh& zm
|
const pointZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
pointLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -120,15 +67,11 @@ Foam::pointZone::pointZone
|
|||||||
const pointZoneMesh& zm
|
const pointZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(name, addr, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
pointLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Construct from dictionary
|
|
||||||
Foam::pointZone::pointZone
|
Foam::pointZone::pointZone
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
@ -137,16 +80,11 @@ Foam::pointZone::pointZone
|
|||||||
const pointZoneMesh& zm
|
const pointZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(dict.lookup("pointLabels")),
|
zone("point", name, dict, index),
|
||||||
name_(name),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
pointLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Construct given the original zone and resetting the
|
|
||||||
// point list and zone mesh information
|
|
||||||
Foam::pointZone::pointZone
|
Foam::pointZone::pointZone
|
||||||
(
|
(
|
||||||
const pointZone& pz,
|
const pointZone& pz,
|
||||||
@ -155,11 +93,8 @@ Foam::pointZone::pointZone
|
|||||||
const pointZoneMesh& zm
|
const pointZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(pz, addr, index),
|
||||||
name_(pz.name()),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
pointLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -171,92 +106,40 @@ Foam::pointZone::pointZone
|
|||||||
const pointZoneMesh& zm
|
const pointZoneMesh& zm
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
labelList(addr),
|
zone(pz, addr, index),
|
||||||
name_(pz.name()),
|
zoneMesh_(zm)
|
||||||
index_(index),
|
|
||||||
zoneMesh_(zm),
|
|
||||||
pointLookupMapPtr_(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::pointZone::~pointZone()
|
Foam::pointZone::~pointZone()
|
||||||
{
|
{}
|
||||||
clearAddressing();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::label Foam::pointZone::whichPoint(const label globalPointID) const
|
|
||||||
{
|
|
||||||
const Map<label>& plm = pointLookupMap();
|
|
||||||
|
|
||||||
Map<label>::const_iterator plmIter = plm.find(globalPointID);
|
|
||||||
|
|
||||||
if (plmIter == plm.end())
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return plmIter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const Foam::pointZoneMesh& Foam::pointZone::zoneMesh() const
|
const Foam::pointZoneMesh& Foam::pointZone::zoneMesh() const
|
||||||
{
|
{
|
||||||
return zoneMesh_;
|
return zoneMesh_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::pointZone::clearAddressing()
|
Foam::label Foam::pointZone::whichPoint(const label globalPointID) const
|
||||||
{
|
{
|
||||||
deleteDemandDrivenData(pointLookupMapPtr_);
|
return zone::localID(globalPointID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::pointZone::checkDefinition(const bool report) const
|
bool Foam::pointZone::checkDefinition(const bool report) const
|
||||||
{
|
{
|
||||||
const labelList& addr = *this;
|
return zone::checkDefinition(zoneMesh_.mesh().points().size(), report);
|
||||||
|
|
||||||
bool boundaryError = false;
|
|
||||||
|
|
||||||
forAll(addr, i)
|
|
||||||
{
|
|
||||||
if (addr[i] < 0 || addr[i] >= zoneMesh_.mesh().points().size())
|
|
||||||
{
|
|
||||||
boundaryError = true;
|
|
||||||
|
|
||||||
if (report)
|
|
||||||
{
|
|
||||||
SeriousErrorIn
|
|
||||||
(
|
|
||||||
"bool pointZone::checkDefinition("
|
|
||||||
"const bool report) const"
|
|
||||||
) << "Zone " << name()
|
|
||||||
<< " contains invalid point label " << addr[i] << nl
|
|
||||||
<< "Valid point labels are 0.."
|
|
||||||
<< zoneMesh_.mesh().points().size()-1 << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return boundaryError;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::pointZone::write(Ostream& os) const
|
|
||||||
{
|
|
||||||
os << nl << name()
|
|
||||||
<< nl << static_cast<const labelList&>(*this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::pointZone::writeDict(Ostream& os) const
|
void Foam::pointZone::writeDict(Ostream& os) const
|
||||||
{
|
{
|
||||||
os << nl << name() << nl << token::BEGIN_BLOCK << nl
|
os << nl << name_ << nl << token::BEGIN_BLOCK << nl
|
||||||
<< " type " << type() << token::END_STATEMENT << nl;
|
<< " type " << type() << token::END_STATEMENT << nl;
|
||||||
|
|
||||||
writeEntry("pointLabels", os);
|
writeEntry("pointLabels", os);
|
||||||
@ -267,10 +150,10 @@ void Foam::pointZone::writeDict(Ostream& os) const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::pointZone::operator=(const pointZone& cz)
|
void Foam::pointZone::operator=(const pointZone& pz)
|
||||||
{
|
{
|
||||||
clearAddressing();
|
clearAddressing();
|
||||||
labelList::operator=(cz);
|
labelList::operator=(pz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -283,10 +166,10 @@ void Foam::pointZone::operator=(const labelList& addr)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const pointZone& p)
|
Foam::Ostream& Foam::operator<<(Ostream& os, const pointZone& pz)
|
||||||
{
|
{
|
||||||
p.write(os);
|
pz.write(os);
|
||||||
os.check("Ostream& operator<<(Ostream& f, const pointZone& p");
|
os.check("Ostream& operator<<(Ostream& os, const pointZone& pz");
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,12 +43,8 @@ SourceFiles
|
|||||||
#ifndef pointZone_H
|
#ifndef pointZone_H
|
||||||
#define pointZone_H
|
#define pointZone_H
|
||||||
|
|
||||||
#include "labelList.H"
|
#include "zone.H"
|
||||||
#include "typeInfo.H"
|
|
||||||
#include "dictionary.H"
|
|
||||||
#include "pointZoneMeshFwd.H"
|
#include "pointZoneMeshFwd.H"
|
||||||
#include "Map.H"
|
|
||||||
#include "pointField.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -67,37 +63,22 @@ Ostream& operator<<(Ostream&, const pointZone&);
|
|||||||
|
|
||||||
class pointZone
|
class pointZone
|
||||||
:
|
:
|
||||||
public labelList
|
public zone
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- Name of zone
|
|
||||||
word name_;
|
|
||||||
|
|
||||||
//- Index of zone
|
|
||||||
label index_;
|
|
||||||
|
|
||||||
//- Reference to zone list
|
//- Reference to zone list
|
||||||
const pointZoneMesh& zoneMesh_;
|
const pointZoneMesh& zoneMesh_;
|
||||||
|
|
||||||
|
|
||||||
// Demand-driven private data
|
|
||||||
|
|
||||||
//- Map of point labels in zone for fast location lookup
|
|
||||||
mutable Map<label>* pointLookupMapPtr_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
//- Disallow default bitwise copy construct
|
||||||
pointZone(const pointZone&);
|
pointZone(const pointZone&);
|
||||||
|
|
||||||
//- Return map of local point indices
|
|
||||||
const Map<label>& pointLookupMap() const;
|
|
||||||
|
|
||||||
//- Build map of local point indices
|
|
||||||
void calcPointLookupMap() const;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -210,38 +191,22 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
|
virtual ~pointZone();
|
||||||
virtual ~pointZone();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return name
|
|
||||||
const word& name() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Map storing the local point index for every global point
|
|
||||||
// index. Used to find out the index of point in the zone from
|
|
||||||
// the known global point index. If the point is not in the
|
|
||||||
// zone, returns -1
|
|
||||||
label whichPoint(const label globalPointID) const;
|
|
||||||
|
|
||||||
//- Return the index of this zone in zone list
|
|
||||||
label index() const
|
|
||||||
{
|
|
||||||
return index_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return zoneMesh reference
|
//- Return zoneMesh reference
|
||||||
const pointZoneMesh& zoneMesh() const;
|
const pointZoneMesh& zoneMesh() const;
|
||||||
|
|
||||||
|
//- Helper function to re-direct to zone::localID(...)
|
||||||
|
label whichPoint(const label globalPointID) const;
|
||||||
|
|
||||||
//- Clear addressing
|
//- Clear addressing
|
||||||
void clearAddressing();
|
virtual void clearAddressing();
|
||||||
|
|
||||||
//- Check zone definition. Return true if in error.
|
//- Check zone definition. Return true if in error.
|
||||||
bool checkDefinition(const bool report = false) const;
|
virtual bool checkDefinition(const bool report = false) const;
|
||||||
|
|
||||||
//- Correct patch after moving points
|
//- Correct patch after moving points
|
||||||
virtual void movePoints(const pointField&)
|
virtual void movePoints(const pointField&)
|
||||||
@ -263,8 +228,9 @@ public:
|
|||||||
void operator=(const labelList&);
|
void operator=(const labelList&);
|
||||||
|
|
||||||
|
|
||||||
// Ostream Operator
|
// I-O
|
||||||
|
|
||||||
|
//- Ostream Operator
|
||||||
friend Ostream& operator<<(Ostream&, const pointZone&);
|
friend Ostream& operator<<(Ostream&, const pointZone&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
209
src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C
Normal file
209
src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-2009 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "zone.H"
|
||||||
|
#include "IOstream.H"
|
||||||
|
#include "demandDrivenData.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(zone, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::Map<Foam::label>& Foam::zone::lookupMap() const
|
||||||
|
{
|
||||||
|
if (!lookupMapPtr_)
|
||||||
|
{
|
||||||
|
calcLookupMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
return *lookupMapPtr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::zone::calcLookupMap() const
|
||||||
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "void zone::calcLookupMap() const: "
|
||||||
|
<< "Calculating lookup map"
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lookupMapPtr_)
|
||||||
|
{
|
||||||
|
FatalErrorIn("void zone::calcLookupMap() const")
|
||||||
|
<< "Lookup map already calculated" << nl
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
const labelList& addr = *this;
|
||||||
|
|
||||||
|
lookupMapPtr_ = new Map<label>(2*addr.size());
|
||||||
|
Map<label>& lm = *lookupMapPtr_;
|
||||||
|
|
||||||
|
forAll(addr, i)
|
||||||
|
{
|
||||||
|
lm.insert(addr[i], i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "void zone::calcLookupMap() const: "
|
||||||
|
<< "Finished calculating lookup map"
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::zone::zone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const labelList& addr,
|
||||||
|
const label index
|
||||||
|
)
|
||||||
|
:
|
||||||
|
labelList(addr),
|
||||||
|
name_(name),
|
||||||
|
index_(index),
|
||||||
|
lookupMapPtr_(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::zone::zone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const Xfer<labelList>& addr,
|
||||||
|
const label index
|
||||||
|
)
|
||||||
|
:
|
||||||
|
labelList(addr),
|
||||||
|
name_(name),
|
||||||
|
index_(index),
|
||||||
|
lookupMapPtr_(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::zone::zone
|
||||||
|
(
|
||||||
|
const word& zoneType,
|
||||||
|
const word& name,
|
||||||
|
const dictionary& dict,
|
||||||
|
const label index
|
||||||
|
)
|
||||||
|
:
|
||||||
|
labelList(dict.lookup(zoneType + "Labels")),
|
||||||
|
name_(name),
|
||||||
|
index_(index),
|
||||||
|
lookupMapPtr_(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::zone::zone
|
||||||
|
(
|
||||||
|
const zone& z,
|
||||||
|
const labelList& addr,
|
||||||
|
const label index
|
||||||
|
)
|
||||||
|
:
|
||||||
|
labelList(addr),
|
||||||
|
name_(z.name()),
|
||||||
|
index_(index),
|
||||||
|
lookupMapPtr_(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::zone::zone
|
||||||
|
(
|
||||||
|
const zone& z,
|
||||||
|
const Xfer<labelList>& addr,
|
||||||
|
const label index
|
||||||
|
)
|
||||||
|
:
|
||||||
|
labelList(addr),
|
||||||
|
name_(z.name()),
|
||||||
|
index_(index),
|
||||||
|
lookupMapPtr_(NULL)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::zone::~zone()
|
||||||
|
{
|
||||||
|
clearAddressing();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::label Foam::zone::localID(const label globalCellID) const
|
||||||
|
{
|
||||||
|
const Map<label>& lm = lookupMap();
|
||||||
|
|
||||||
|
Map<label>::const_iterator lmIter = lm.find(globalCellID);
|
||||||
|
|
||||||
|
if (lmIter == lm.end())
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return lmIter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::zone::clearAddressing()
|
||||||
|
{
|
||||||
|
deleteDemandDrivenData(lookupMapPtr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::zone::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
os << nl << name_
|
||||||
|
<< nl << static_cast<const labelList&>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::Ostream& Foam::operator<<(Ostream& os, const zone& z)
|
||||||
|
{
|
||||||
|
z.write(os);
|
||||||
|
os.check("Ostream& operator<<(Ostream& f, const zone& z");
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
207
src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H
Normal file
207
src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::cellZone
|
||||||
|
|
||||||
|
Description
|
||||||
|
Base class for zones
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
zone.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef zone_H
|
||||||
|
#define zone_H
|
||||||
|
|
||||||
|
#include "labelList.H"
|
||||||
|
#include "typeInfo.H"
|
||||||
|
#include "dictionary.H"
|
||||||
|
#include "Map.H"
|
||||||
|
#include "pointFieldFwd.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
|
class zone;
|
||||||
|
Ostream& operator<<(Ostream&, const zone&);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class zone Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class zone
|
||||||
|
:
|
||||||
|
public labelList
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Name of zone
|
||||||
|
word name_;
|
||||||
|
|
||||||
|
//- Index of zone
|
||||||
|
label index_;
|
||||||
|
|
||||||
|
|
||||||
|
// Demand-driven private data
|
||||||
|
|
||||||
|
//- Map of labels in zone for fast location lookup
|
||||||
|
mutable Map<label>* lookupMapPtr_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected Member Functions
|
||||||
|
|
||||||
|
//- Return a reference to the look-up map
|
||||||
|
const Map<label>& lookupMap() const;
|
||||||
|
|
||||||
|
//- Construct the look-up map
|
||||||
|
void calcLookupMap() const;
|
||||||
|
|
||||||
|
//- Disallow default bitwise copy construct
|
||||||
|
zone(const zone&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("zone");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
zone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const labelList& addr,
|
||||||
|
const label index
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from components, transferring contents
|
||||||
|
zone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const Xfer<labelList>& addr,
|
||||||
|
const label index
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from dictionary
|
||||||
|
zone
|
||||||
|
(
|
||||||
|
const word& zoneType,
|
||||||
|
const word& name,
|
||||||
|
const dictionary&,
|
||||||
|
const label index
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct given the original zone and resetting the
|
||||||
|
// cell list and zone mesh information
|
||||||
|
zone
|
||||||
|
(
|
||||||
|
const zone&,
|
||||||
|
const labelList& addr,
|
||||||
|
const label index
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct given the original zone, resetting the
|
||||||
|
// cell list and zone mesh information
|
||||||
|
zone
|
||||||
|
(
|
||||||
|
const zone&,
|
||||||
|
const Xfer<labelList>& addr,
|
||||||
|
const label index
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~zone();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return name
|
||||||
|
const word& name() const
|
||||||
|
{
|
||||||
|
return name_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Map storing the local index for every global index. Used to find
|
||||||
|
// the index of the item in the zone from the known global index. If
|
||||||
|
// the item is not in the zone, returns -1
|
||||||
|
label localID(const label globalID) const;
|
||||||
|
|
||||||
|
//- Return the index of this zone in zone list
|
||||||
|
label index() const
|
||||||
|
{
|
||||||
|
return index_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Clear addressing
|
||||||
|
virtual void clearAddressing();
|
||||||
|
|
||||||
|
//- Check zone definition. Return true if in error.
|
||||||
|
virtual bool checkDefinition(const bool report = false) const = 0;
|
||||||
|
|
||||||
|
//- Check zone definition with max size given. Return true if in error.
|
||||||
|
virtual bool checkDefinition
|
||||||
|
(
|
||||||
|
const label maxSize,
|
||||||
|
const bool report = false
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Correct patch after moving points
|
||||||
|
virtual void movePoints(const pointField&)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
|
||||||
|
//- Write dictionary
|
||||||
|
virtual void writeDict(Ostream&) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Ostream Operator
|
||||||
|
friend Ostream& operator<<(Ostream&, const zone&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user