ENH: improved zone constructors

- constructor for empty cell/face/point Zones, with contents to be
  transferred in later.

- ZoneMesh::operator(const word&) to return existing zone or a new empty one.
This commit is contained in:
Mark Olesen
2017-11-10 02:09:37 +01:00
parent ccc07d3234
commit a59c87d5ac
29 changed files with 591 additions and 441 deletions

View File

@ -642,7 +642,7 @@ int main(int argc, char *argv[])
(
patchNames[patchi],
bFaceLabels,
boolList(bFaceLabels.size(), false),
false, // none are flipped
fz.size(),
pShapeMesh.faceZones()
)

View File

@ -1156,7 +1156,6 @@ int main(int argc, char *argv[])
new cellZone
(
name,
labelList(0),
cellZonei,
mesh.cellZones()
)
@ -1186,8 +1185,6 @@ int main(int argc, char *argv[])
new faceZone
(
name,
labelList(0),
boolList(0),
faceZonei,
mesh.faceZones()
)

View File

@ -1077,7 +1077,6 @@ int main(int argc, char *argv[])
// Create new faces
forAll(faces, facei)
{
if (faces[facei].size() != 2)
{
FatalErrorInFunction
@ -1660,7 +1659,7 @@ int main(int argc, char *argv[])
(
name,
zoneFaces,
boolList(zoneFaces.size(), false),
false, // none are flipped
cnt,
pShapeMesh.faceZones()
);

View File

@ -1102,7 +1102,7 @@ int main(int argc, char *argv[])
(
zoneName,
zoneFaces[zoneI],
boolList(zoneFaces[zoneI].size(), true),
true, // all are flipped
nValidFaceZones,
mesh.faceZones()
);

View File

@ -1282,7 +1282,7 @@ int main(int argc, char *argv[])
(
faceZones.toc()[cnt],
indizes,
boolList(indizes.size(),false),
false, // none are flipped
cnt,
mesh.faceZones()
);

View File

@ -16,10 +16,10 @@
+ name(pairI)
);
// An empty zone for cut points
pz[pairI] = new pointZone
(
mergeName + "CutPointZone",
labelList(0),
0,
mesh.pointZones()
);
@ -40,7 +40,7 @@
(
mergeName + "MasterZone",
isf,
boolList(masterPatch.size(), false),
false, // none are flipped
0,
mesh.faceZones()
);
@ -61,17 +61,15 @@
(
mergeName + "SlaveZone",
osf,
boolList(slavePatch.size(), false),
false, // none are flipped
1,
mesh.faceZones()
);
// Add empty zone for cut faces
// An empty zone for cut faces
fz[3*pairI + 2] = new faceZone
(
mergeName + "CutFaceZone",
labelList(0),
boolList(0, false),
2,
mesh.faceZones()
);

View File

@ -1026,7 +1026,7 @@ int main(int argc, char *argv[])
(
cutZoneName,
frontPatchFaces,
boolList(frontPatchFaces.size(), false),
false, // none are flipped
0,
mesh.faceZones()
)

View File

@ -502,70 +502,58 @@ void Foam::mergePolyMesh::merge()
// Add the zones if necessary
if (pointZoneNames_.size() > pointZones().size())
{
Info<< "Adding new pointZones. " << endl;
label nZones = pointZones().size();
Info<< "Adding new pointZones." << endl;
pointZones().setSize(pointZoneNames_.size());
label zonei = pointZones().size(); // continue from here
for (label zoneI = nZones; zoneI < pointZoneNames_.size(); zoneI++)
const label nZones = pointZoneNames_.size();
pointZones().setSize(nZones);
for (/*nil*/; zonei < nZones; ++zonei)
{
pointZones().set
(
zoneI,
new pointZone
(
pointZoneNames_[zoneI],
labelList(),
zoneI,
pointZones()
)
zonei,
new pointZone(pointZoneNames_[zonei], zonei, pointZones())
);
}
}
if (cellZoneNames_.size() > cellZones().size())
{
Info<< "Adding new cellZones. " << endl;
Info<< "Adding new cellZones." << endl;
label nZones = cellZones().size();
label zonei = cellZones().size(); // continue from here
const label nZones = cellZoneNames_.size();
cellZones().setSize(cellZoneNames_.size());
for (label zoneI = nZones; zoneI < cellZoneNames_.size(); zoneI++)
for (/*nil*/; zonei < nZones; ++zonei)
{
cellZones().set
(
zoneI,
new cellZone
(
cellZoneNames_[zoneI],
labelList(),
zoneI,
cellZones()
)
zonei,
new cellZone(cellZoneNames_[zonei], zonei, cellZones())
);
}
}
if (faceZoneNames_.size() > faceZones().size())
{
Info<< "Adding new faceZones. " << endl;
Info<< "Adding new faceZones." << endl;
label nZones = faceZones().size();
label zonei = faceZones().size(); // continue from here
faceZones().setSize(faceZoneNames_.size());
const label nZones = faceZoneNames_.size();
for (label zoneI = nZones; zoneI < faceZoneNames_.size(); zoneI++)
faceZones().setSize(nZones);
for (/*nil*/; zonei < nZones; ++zonei)
{
faceZones().set
(
zoneI,
new faceZone
(
faceZoneNames_[zoneI],
labelList(),
boolList(),
zoneI,
faceZones()
)
zonei,
new faceZone(faceZoneNames_[zonei], zonei, faceZones())
);
}
}

View File

@ -113,36 +113,28 @@ int main(int argc, char *argv[])
pointSet set(*iter());
SortableList<label> pointLabels(set.toc());
label zoneID = mesh.pointZones().findZoneID(set.name());
if (zoneID == -1)
// The original number of zones
const label nOrigZones = mesh.pointZones().size();
// Get existing or create new empty zone
pointZone& zn = mesh.pointZones()(set.name());
if (nOrigZones == mesh.pointZones().size())
{
Info<< "Adding set " << set.name() << " as a pointZone." << endl;
label sz = mesh.pointZones().size();
mesh.pointZones().setSize(sz+1);
mesh.pointZones().set
(
sz,
new pointZone
(
set.name(), //name
pointLabels, //addressing
sz, //index
mesh.pointZones() //pointZoneMesh
)
);
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.pointZones().instance() = mesh.facesInstance();
Info<< "Overwriting contents of existing pointZone "
<< zn.index()
<< " with that of set " << set.name() << "." << endl;
}
else
{
Info<< "Overwriting contents of existing pointZone " << zoneID
<< " with that of set " << set.name() << "." << endl;
mesh.pointZones()[zoneID] = pointLabels;
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.pointZones().instance() = mesh.facesInstance();
Info<< "Adding set " << set.name() << " as a pointZone." << endl;
}
}
zn = pointLabels;
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.pointZones().instance() = mesh.facesInstance();
}
IOobjectList faceObjects(objects.lookupClass(faceSet::typeName));
@ -244,39 +236,31 @@ int main(int argc, char *argv[])
}
}
label zoneID = mesh.faceZones().findZoneID(set.name());
if (zoneID == -1)
// The original number of zones
const label nOrigZones = mesh.faceZones().size();
// Get existing or create new empty zone
faceZone& zn = mesh.faceZones()(set.name());
if (nOrigZones == mesh.faceZones().size())
{
Info<< "Adding set " << set.name() << " as a faceZone." << endl;
label sz = mesh.faceZones().size();
mesh.faceZones().setSize(sz+1);
mesh.faceZones().set
(
sz,
new faceZone
(
set.name(), //name
addressing.shrink(), //addressing
flipMap.shrink(), //flipmap
sz, //index
mesh.faceZones() //pointZoneMesh
)
);
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.faceZones().instance() = mesh.facesInstance();
Info<< "Overwriting contents of existing faceZone "
<< zn.index()
<< " with that of set " << set.name() << "." << endl;
}
else
{
Info<< "Overwriting contents of existing faceZone " << zoneID
<< " with that of set " << set.name() << "." << endl;
mesh.faceZones()[zoneID].resetAddressing
(
addressing.shrink(),
flipMap.shrink()
);
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.faceZones().instance() = mesh.facesInstance();
Info<< "Adding set " << set.name() << " as a faceZone." << endl;
}
zn.resetAddressing
(
addressing.shrink(),
flipMap.shrink()
);
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.faceZones().instance() = mesh.facesInstance();
}
@ -293,39 +277,30 @@ int main(int argc, char *argv[])
cellSet set(*iter());
SortableList<label> cellLabels(set.toc());
label zoneID = mesh.cellZones().findZoneID(set.name());
if (zoneID == -1)
// The original number of zones
const label nOrigZones = mesh.cellZones().size();
cellZone& zn = mesh.cellZones()(set.name());
if (nOrigZones == mesh.cellZones().size())
{
Info<< "Adding set " << set.name() << " as a cellZone." << endl;
label sz = mesh.cellZones().size();
mesh.cellZones().setSize(sz+1);
mesh.cellZones().set
(
sz,
new cellZone
(
set.name(), //name
cellLabels, //addressing
sz, //index
mesh.cellZones() //pointZoneMesh
)
);
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.cellZones().instance() = mesh.facesInstance();
Info<< "Overwriting contents of existing cellZone "
<< zn.index()
<< " with that of set " << set.name() << "." << endl;
}
else
{
Info<< "Overwriting contents of existing cellZone " << zoneID
<< " with that of set " << set.name() << "." << endl;
mesh.cellZones()[zoneID] = cellLabels;
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.cellZones().instance() = mesh.facesInstance();
Info<< "Adding set " << set.name() << " as a cellZone." << endl;
}
zn = cellLabels;
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
mesh.cellZones().instance() = mesh.facesInstance();
}
}
Info<< "Writing mesh." << endl;
if (!mesh.write())

View File

@ -72,109 +72,8 @@ Description
#include "IOobjectList.H"
#include "ReadFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
label addPointZone(polyMesh& mesh, const word& name)
{
pointZoneMesh& zones = mesh.pointZones();
label zoneID = zones.findZoneID(name);
if (zoneID != -1)
{
Info<< "Reusing existing pointZone " << zones[zoneID].name()
<< " at index " << zoneID << endl;
return zoneID;
}
zoneID = zones.size();
Info<< "Adding pointZone " << name << " at index " << zoneID << endl;
zones.setSize(zoneID+1);
zones.set
(
zoneID,
new pointZone
(
name,
labelList(0),
zoneID,
zones
)
);
return zoneID;
}
label addFaceZone(polyMesh& mesh, const word& name)
{
faceZoneMesh& zones = mesh.faceZones();
label zoneID = zones.findZoneID(name);
if (zoneID != -1)
{
Info<< "Reusing existing faceZone " << zones[zoneID].name()
<< " at index " << zoneID << endl;
return zoneID;
}
zoneID = zones.size();
Info<< "Adding faceZone " << name << " at index " << zoneID << endl;
zones.setSize(zoneID+1);
zones.set
(
zoneID,
new faceZone
(
name,
labelList(0),
boolList(),
zoneID,
zones
)
);
return zoneID;
}
label addCellZone(polyMesh& mesh, const word& name)
{
cellZoneMesh& zones = mesh.cellZones();
label zoneID = zones.findZoneID(name);
if (zoneID != -1)
{
Info<< "Reusing existing cellZone " << zones[zoneID].name()
<< " at index " << zoneID << endl;
return zoneID;
}
zoneID = zones.size();
Info<< "Adding cellZone " << name << " at index " << zoneID << endl;
zones.setSize(zoneID+1);
zones.set
(
zoneID,
new cellZone
(
name,
labelList(0),
zoneID,
zones
)
);
return zoneID;
}
// Checks whether patch present
void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
{
@ -198,7 +97,6 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
}
int main(int argc, char *argv[])
{
argList::addNote
@ -341,10 +239,12 @@ int main(int argc, char *argv[])
if (perfectCover)
{
// Add empty zone for resulting internal faces
const label cutZoneID = addFaceZone(mesh, cutZoneName);
mesh.faceZones()[cutZoneID].resetAddressing(isf.xfer(), false);
// Starts as master zone, but receives the resulting internal faces
mesh.faceZones()
(
cutZoneName,
true // verbose
).resetAddressing(isf.xfer(), false);
// Add the perfect interface mesh modifier
stitcher.set
@ -363,12 +263,19 @@ int main(int argc, char *argv[])
}
else
{
label pointZoneID = addPointZone(mesh, mergePatchName + "CutPointZone");
mesh.pointZones()[pointZoneID] = labelList(0);
// An empty point zone
mesh.pointZones()
(
mergePatchName + "CutPointZone",
true // verbose
) = labelList();
label masterZoneID = addFaceZone(mesh, mergePatchName + "MasterZone");
mesh.faceZones()[masterZoneID].resetAddressing(isf.xfer(), false);
// The master zone
mesh.faceZones()
(
mergePatchName + "MasterZone",
true // verbose
).resetAddressing(isf.xfer(), false);
// Slave patch
const polyPatch& slavePatch = mesh.boundaryMesh()[slavePatchName];
@ -380,12 +287,18 @@ int main(int argc, char *argv[])
osf[i] = slavePatch.start() + i;
}
label slaveZoneID = addFaceZone(mesh, mergePatchName + "SlaveZone");
mesh.faceZones()[slaveZoneID].resetAddressing(osf.xfer(), false);
mesh.faceZones()
(
mergePatchName + "SlaveZone",
true // verbose
).resetAddressing(osf.xfer(), false);
// Add empty zone for cut faces
const label cutZoneID = addFaceZone(mesh, cutZoneName);
mesh.faceZones()[cutZoneID].resetAddressing(labelList(0), false);
// An empty zone for cut faces
mesh.faceZones()
(
cutZoneName,
true // verbose
).resetAddressing(labelList(), false);
// Add the sliding interface mesh modifier