restructured zones - now have common base (zone)

This commit is contained in:
andy
2009-08-17 17:36:37 +01:00
parent 6302bef159
commit 52a3897863
10 changed files with 516 additions and 526 deletions

View File

@ -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

View File

@ -114,6 +114,7 @@ public:
return index_ > -1; return index_ > -1;
} }
// Edit // Edit
//- Update //- Update

View File

@ -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;
} }

View File

@ -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&);
}; };

View File

@ -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;
} }

View File

@ -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&);
}; };

View File

@ -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;
} }

View File

@ -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&);
}; };

View 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;
}
// ************************************************************************* //

View 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
// ************************************************************************* //