ENH: shm: support for automatic faceZones

This commit is contained in:
Mattijs Janssens
2020-01-16 12:22:02 +00:00
committed by Andrew Heather
parent 0c7140c967
commit b8c2c0acf6
26 changed files with 15695 additions and 322 deletions

View File

@ -585,35 +585,52 @@ void Foam::conformalVoronoiMesh::addZones
labelList namedSurfaces(surfaceZonesInfo::getNamedSurfaces(surfZones));
// Tbd. No support yet for multi-faceZones on outside of cellZone
forAll(namedSurfaces, i)
{
label surfI = namedSurfaces[i];
const wordList& fzNames = surfZones[surfI].faceZoneNames();
Info<< incrIndent << indent << "Surface : "
<< geometryToConformTo().geometry().names()[surfI] << nl
<< indent << " faceZone : "
<< surfZones[surfI].faceZoneName() << nl
<< (fzNames.size() ? fzNames[0] : "") << nl
<< indent << " cellZone : "
<< surfZones[surfI].cellZoneName()
<< decrIndent << endl;
}
// Add zones to mesh
labelList surfaceToFaceZone =
surfaceZonesInfo::addFaceZonesToMesh
labelList surfaceToFaceZone(surfZones.size(), -1);
{
const labelListList surfaceToFaceZones
(
surfZones,
namedSurfaces,
mesh
surfaceZonesInfo::addFaceZonesToMesh
(
surfZones,
namedSurfaces,
mesh
)
);
forAll(surfaceToFaceZones, surfi)
{
if (surfaceToFaceZones[surfi].size())
{
surfaceToFaceZone[surfi] = surfaceToFaceZones[surfi][0];
}
}
}
labelList surfaceToCellZone =
const labelList surfaceToCellZone
(
surfaceZonesInfo::addCellZonesToMesh
(
surfZones,
namedSurfaces,
mesh
);
)
);
// Topochange container
polyTopoChange meshMod(mesh);

View File

@ -355,7 +355,16 @@ Foam::conformationSurfaces::conformationSurfaces
// Surface zones
if (dict.found("faceZone"))
{
surfZones_.set(surfI, new surfaceZonesInfo(surface, dict));
surfZones_.set
(
surfI,
new surfaceZonesInfo
(
surface,
dict,
allGeometry_.regionNames()[surfaces_[surfI]]
)
);
}
allGeometryToSurfaces_[surfaces_[surfI]] = surfI;

View File

@ -163,7 +163,16 @@ autoPtr<refinementSurfaces> createRefinementSurfaces
globalLevelIncr[surfi] = gapLevelIncrement;
// Surface zones
surfZones.set(surfi, new surfaceZonesInfo(surface, shapeDict));
surfZones.set
(
surfi,
new surfaceZonesInfo
(
surface,
shapeDict,
allGeometry.regionNames()[surfaces[surfi]]
)
);
// Global perpendicular angle
@ -1395,9 +1404,10 @@ int main(int argc, char *argv[])
Info<< surfaces.names()[surfi] << ':' << nl << nl;
}
const word& fzName = surfaces.surfZones()[surfi].faceZoneName();
const wordList& fzNames =
surfaces.surfZones()[surfi].faceZoneNames();
if (fzName.empty())
if (fzNames.empty())
{
// 'Normal' surface
forAll(regNames, i)
@ -1520,15 +1530,19 @@ int main(int argc, char *argv[])
// region in surface for patch for zoning
if (regNames.size())
{
label globalRegioni = surfaces.globalRegion(surfi, 0);
forAll(fzNames, fzi)
{
const word& fzName = fzNames[fzi];
label globalRegioni = surfaces.globalRegion(surfi, fzi);
meshRefiner.addFaceZone
(
fzName,
pbm[globalToMasterPatch[globalRegioni]].name(),
pbm[globalToSlavePatch[globalRegioni]].name(),
surfaces.surfZones()[surfi].faceType()
);
meshRefiner.addFaceZone
(
fzName,
pbm[globalToMasterPatch[globalRegioni]].name(),
pbm[globalToSlavePatch[globalRegioni]].name(),
surfaces.surfZones()[surfi].faceType()
);
}
}
}