140 #include "PatchTools.H"
142 using namespace Foam;
159 template<
class PatchType>
163 const word& patchName,
171 if (isA<PatchType>(*newPatches[patchI]))
179 <<
"Already have patch " << patchName
180 <<
" but of type " << newPatches[patchI]->type()
186 patchI = newPatches.size();
188 label startFaceI = 0;
191 const polyPatch& pp = *newPatches.last();
192 startFaceI = pp.
start()+pp.size();
213 template<
class PatchType>
217 const word& patchName,
226 if (isA<PatchType>(*newPatches[patchI]))
234 <<
"Already have patch " << patchName
235 <<
" but of type " << newPatches[patchI]->type()
241 patchI = newPatches.size();
243 label startFaceI = 0;
246 const polyPatch& pp = *newPatches.last();
247 startFaceI = pp.
start()+pp.size();
251 patchDict.set(
"type", PatchType::typeName);
252 patchDict.set(
"nFaces", 0);
253 patchDict.set(
"startFace", startFaceI);
288 forAll(masterNames, masterI)
290 label patchI =
patches.findPatchID(masterNames[masterI]);
294 if (isA<processorPolyPatch>(
patches[patchI]))
297 if (
patches[patchI].size() == 0)
299 Pout<<
"Deleting processor patch " << patchI
300 <<
" name:" <<
patches[patchI].name()
302 oldToNew[patchI] = --notUsedI;
306 oldToNew[patchI] = usedI++;
314 Pout<<
"Deleting patch " << patchI
315 <<
" name:" <<
patches[patchI].name()
317 oldToNew[patchI] = --notUsedI;
321 oldToNew[patchI] = usedI++;
330 if (oldToNew[patchI] == -1)
334 if (
patches[patchI].size() == 0)
336 Pout<<
"Deleting processor patch " << patchI
337 <<
" name:" <<
patches[patchI].name()
339 oldToNew[patchI] = --notUsedI;
343 oldToNew[patchI] = usedI++;
367 Info<<
"Testing:" << io.objectPath() <<
endl;
374 dummyDict.
add(
"divSchemes", divDict);
376 dummyDict.
add(
"gradSchemes", gradDict);
378 dummyDict.
add(
"laplacianSchemes", laplDict);
419 Info<<
"Zone " << zoneNames[i] <<
" has internal faces" <<
endl;
423 Info<<
"Zone " << zoneNames[i] <<
" has boundary faces" <<
endl;
427 forAll(extrudeMeshFaces, i)
429 label faceI = extrudeMeshFaces[i];
430 label zoneI = zoneID[i];
434 <<
"Zone " << zoneNames[zoneI]
435 <<
" is not consistently all internal or all boundary faces."
437 <<
" is the first occurrence."
491 const labelList& eFaces = edgeFaces[edgeI];
494 labelList& globalEFaces = globalEdgeFaces[edgeI];
498 globalEFaces[i] = globalFaces.
toGlobal(eFaces[i]);
512 return globalEdgeFaces;
517 label findUncoveredPatchFace
521 const label meshEdgeI
526 forAll(extrudeMeshFaces, i)
528 extrudeFaceSet.insert(extrudeMeshFaces[i]);
535 label faceI = eFaces[i];
541 && !pbm[patchI].coupled()
542 && !extrudeFaceSet.found(faceI)
553 label findUncoveredCyclicPatchFace
557 const label meshEdgeI
562 forAll(extrudeMeshFaces, i)
564 extrudeFaceSet.insert(extrudeMeshFaces[i]);
571 label faceI = eFaces[i];
577 && isA<cyclicPolyPatch>(pbm[patchI])
578 && !extrudeFaceSet.found(faceI)
589 void calcEdgeMinMaxZone
610 forAll(extrudeEdgeGlobalFaces, edgeI)
612 const labelList& eFaces = extrudeEdgeGlobalFaces[edgeI];
617 label zoneI = mappedZoneID[eFaces[i]];
618 minZoneID[edgeI] =
min(minZoneID[edgeI], zoneI);
619 maxZoneID[edgeI] =
max(maxZoneID[edgeI], zoneI);
647 void countExtrudePatches
672 if (eFaces.
size() == 2)
675 if (minZoneID[edgeI] != maxZoneID[edgeI])
677 zoneZonePatch[minZoneID[edgeI]*nZones+maxZoneID[edgeI]]++;
683 && extrudeEdgeGlobalFaces[edgeI].size() == 2
687 if (minZoneID[edgeI] != maxZoneID[edgeI])
693 <<
"at " << pts[
e[0]] << pts[
e[1]]
694 <<
" is a coupled edge and inbetween two different zones "
695 << minZoneID[edgeI] <<
" and " << maxZoneID[edgeI] <<
endl
696 <<
" This is currently not supported." <<
endl;
698 zoneZonePatch[minZoneID[edgeI]*nZones+maxZoneID[edgeI]]++;
708 label faceI = findUncoveredPatchFace
712 extrudeMeshEdges[edgeI]
717 zoneSidePatch[minZoneID[edgeI]]++;
730 void addCouplingPatches
734 const word& shellRegionName,
745 Pout<<
"Adding coupling patches:" <<
nl <<
nl
746 <<
"patchID\tpatch\ttype" <<
nl
747 <<
"-------\t-----\t----"
751 interRegionBottomPatch.
setSize(zoneNames.
size(), -1);
753 label nOldPatches = newPatches.size();
765 if (isInternal[zoneI])
767 interRegionTopPatch[zoneI] = addPatch<mappedWallPolyPatch>
773 Pout<< interRegionTopPatch[zoneI]
774 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->name()
775 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->type()
778 interRegionBottomPatch[zoneI] = addPatch<mappedWallPolyPatch>
781 interName +
"_bottom",
784 Pout<< interRegionBottomPatch[zoneI]
785 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->name()
786 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->type()
789 else if (zoneShadowNames.
size() == 0)
791 interRegionTopPatch[zoneI] = addPatch<polyPatch>
794 zoneNames[zoneI] +
"_top",
797 Pout<< interRegionTopPatch[zoneI]
798 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->name()
799 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->type()
802 interRegionBottomPatch[zoneI] = addPatch<mappedWallPolyPatch>
808 Pout<< interRegionBottomPatch[zoneI]
809 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->name()
810 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->type()
815 interRegionTopPatch[zoneI] = addPatch<mappedWallPolyPatch>
818 zoneShadowNames[zoneI] +
"_top",
821 Pout<< interRegionTopPatch[zoneI]
822 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->name()
823 <<
'\t' << newPatches[interRegionTopPatch[zoneI]]->type()
826 interRegionBottomPatch[zoneI] = addPatch<mappedWallPolyPatch>
832 Pout<< interRegionBottomPatch[zoneI]
833 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->name()
834 <<
'\t' << newPatches[interRegionBottomPatch[zoneI]]->type()
838 Pout<<
"Added " << newPatches.size()-nOldPatches
839 <<
" inter-region patches." <<
nl
846 void addCoupledPatches
869 forAll(extrudeEdgeGlobalFaces, edgeI)
871 const labelList& eFaces = extrudeEdgeGlobalFaces[edgeI];
876 label procI = procID[eFaces[i]];
877 minProcID[edgeI] =
min(minProcID[edgeI], procI);
878 maxProcID[edgeI] =
max(maxProcID[edgeI], procI);
899 Pout<<
"Adding processor or cyclic patches:" <<
nl <<
nl
900 <<
"patchID\tpatch" <<
nl
904 label nOldPatches = newPatches.size();
914 && extrudeEdgeGlobalFaces[edgeI].size() == 2
918 label nbrProcI = minProcID[edgeI];
921 nbrProcI = maxProcID[edgeI];
930 label faceI = findUncoveredCyclicPatchFace
934 extrudeMeshEdges[edgeI]
947 sidePatchID[edgeI] = newPatchI;
952 <<
"Unable to determine coupled patch addressing"
968 if (sidePatchID[edgeI] == -1)
972 patchDict.
add(
"neighbProcNo", nbrProcI);
974 sidePatchID[edgeI] = addPatch<processorPolyPatch>
982 Pout<< sidePatchID[edgeI] <<
'\t' <<
name
988 Pout<<
"Added " << newPatches.size()-nOldPatches
989 <<
" coupled patches." <<
nl
994 void addZoneSidePatches
998 const word& oneDPolyPatchType,
1004 Pout<<
"Adding patches for sides on zones:" <<
nl <<
nl
1005 <<
"patchID\tpatch" <<
nl
1009 label nOldPatches = newPatches.size();
1011 forAll(zoneSidePatch, zoneI)
1017 if (oneDPolyPatchType ==
"empty")
1019 patchName =
"oneDEmptyPatch";
1020 zoneSidePatch[zoneI] = addPatch<emptyPolyPatch>
1027 else if (oneDPolyPatchType ==
"wedge")
1029 patchName =
"oneDWedgePatch";
1030 zoneSidePatch[zoneI] = addPatch<wedgePolyPatch>
1040 <<
"Type " << oneDPolyPatchType <<
" does not exist "
1044 Pout<< zoneSidePatch[zoneI] <<
'\t' << patchName <<
nl;
1046 else if (zoneSidePatch[zoneI] > 0)
1048 word patchName = zoneNames[zoneI] +
"_" +
"side";
1050 zoneSidePatch[zoneI] = addPatch<polyPatch>
1057 Pout<< zoneSidePatch[zoneI] <<
'\t' << patchName <<
nl;
1060 Pout<<
"Added " << newPatches.size()-nOldPatches <<
" zone-side patches."
1065 void addInterZonePatches
1076 Pout<<
"Adding inter-zone patches:" <<
nl <<
nl
1077 <<
"patchID\tpatch" <<
nl
1088 label nOldPatches = newPatches.size();
1092 forAll(zoneZonePatch_min, minZone)
1094 for (
label maxZone = minZone; maxZone < zoneNames.
size(); maxZone++)
1096 label index = minZone*zoneNames.
size()+maxZone;
1098 if (zoneZonePatch_min[index] > 0)
1103 + zoneNames[maxZone];
1107 + zoneNames[minZone];
1110 transformDict.
set(
"neighbourPatch", maxToMin);
1111 zoneZonePatch_min[index] =
1112 addPatch<nonuniformTransformCyclicPolyPatch>
1119 Pout<< zoneZonePatch_min[index] <<
'\t' << minToMax
1123 transformDict.
set(
"neighbourPatch", minToMax);
1124 zoneZonePatch_max[index] =
1125 addPatch<nonuniformTransformCyclicPolyPatch>
1132 Pout<< zoneZonePatch_max[index] <<
'\t' << maxToMin
1140 Pout<<
"Added " << newPatches.size()-nOldPatches <<
" inter-zone patches."
1161 point patchFc = extrudePatch[patchFaceI].centre
1165 offsets[i] = patchFc - fc[i];
1171 void setCouplingInfo
1175 const word& sampleRegion,
1184 forAll(zoneToPatch, zoneI)
1186 label patchI = zoneToPatch[zoneI];
1192 if (isA<mappedWallPolyPatch>(pp))
1210 forAll(newPatches, patchI)
1212 if (!newPatches[patchI])
1224 void extrudeGeometricProperties
1338 faceCentres[faceI] = model
1340 patchFaceCentres[patchFaceI],
1358 patchEdgeCentres[patchEdgeI],
1359 patchEdgeNormals[patchEdgeI],
1365 patchEdgeCentres[patchEdgeI],
1366 patchEdgeNormals[patchEdgeI],
1371 faceCentres[faceI] = 0.5*(pt0+pt1);
1400 patchFaceCentres[patchFaceI],
1406 patchFaceCentres[patchFaceI],
1412 cellCentres[cellI] = 0.5*(pt0+pt1);
1422 forAll(faceCentres, faceI)
1424 Pout<<
"Model :" << faceCentres[faceI] <<
endl
1435 forAll(cellCentres, cellI)
1437 Pout<<
"Model :" << cellCentres[cellI] <<
endl
1452 Info<<
"Writing geometric properties for mesh " << regionMesh.
name()
1456 bool ok = faceCentres.
write() && cellCentres.
write();
1461 <<
"Failed writing " << faceCentres.objectPath()
1462 <<
" and " << cellCentres.objectPath()
1470 int main(
int argc,
char *argv[])
1489 <<
"Patches are not synchronised on all processors."
1490 <<
" Per processor patches " << allNames
1517 bool hasZones =
dict.
found(
"faceZones");
1527 <<
"Please supply faces to extrude either through 'faceZones'"
1528 <<
" or 'faceSets' entry. Found both."
1543 Switch oneDNonManifoldEdges(
false);
1544 word oneDPatchType(emptyPolyPatch::typeName);
1548 dict.
lookup(
"oneDPolyPatchType") >> oneDPatchType;
1555 Info<<
"Extruding zones " << zoneNames
1557 <<
" into shell mesh " << shellRegionName
1562 Info<<
"Extruding faceSets " << zoneNames
1564 <<
" into shell mesh " << shellRegionName
1571 <<
"Cannot extrude into same region as mesh." <<
endl
1573 <<
"Shell region : " << shellRegionName
1580 if (oneDNonManifoldEdges)
1582 Info<<
"Extruding as 1D columns with sides in patch type "
1584 <<
" and connected points (except on non-manifold areas)."
1589 Info<<
"Extruding as 1D columns with sides in patch type "
1591 <<
" and duplicated points (overlapping volumes)."
1654 meshInstance = runTime.timeName();
1658 meshInstance = oldInstance;
1660 Info<<
"Writing meshes to " << meshInstance <<
nl <<
endl;
1693 meshZoneID[i] = faceZones.
findZoneID(zoneNames[i]);
1694 if (meshZoneID[i] == -1)
1697 <<
"Cannot find zone " << zoneNames[i] <<
endl
1698 <<
"Valid zones are " << faceZones.
names()
1703 label nExtrudeFaces = 0;
1706 nExtrudeFaces += faceZones[meshZoneID[i]].size();
1708 extrudeMeshFaces.
setSize(nExtrudeFaces);
1709 zoneFaces.
setSize(nExtrudeFaces);
1710 zoneID.
setSize(nExtrudeFaces);
1711 zoneFlipMap.
setSize(nExtrudeFaces);
1715 const faceZone& fz = faceZones[meshZoneID[i]];
1719 extrudeMeshFaces[nExtrudeFaces] = fz[j];
1720 zoneFaces[nExtrudeFaces] = fzp[j];
1721 zoneID[nExtrudeFaces] = i;
1722 zoneFlipMap[nExtrudeFaces] = fz.
flipMap()[j];
1727 isInternal[i] =
true;
1735 if (zoneShadowNames.
size())
1738 forAll(zoneShadowNames, i)
1740 zoneShadowIDs[i] = faceZones.
findZoneID(zoneShadowNames[i]);
1741 if (zoneShadowIDs[i] == -1)
1744 <<
"Cannot find zone " << zoneShadowNames[i] <<
endl
1745 <<
"Valid zones are " << faceZones.
names()
1750 label nShadowFaces = 0;
1753 nShadowFaces += faceZones[zoneShadowIDs[i]].size();
1756 extrudeMeshShadowFaces.
setSize(nShadowFaces);
1757 zoneShadowFlipMap.
setSize(nShadowFaces);
1758 zoneShadowID.
setSize(nShadowFaces);
1763 const faceZone& fz = faceZones[zoneShadowIDs[i]];
1766 extrudeMeshShadowFaces[nShadowFaces] = fz[j];
1767 zoneShadowFlipMap[nShadowFaces] = fz.
flipMap()[j];
1768 zoneShadowID[nShadowFaces] = i;
1781 Info<<
"Loading faceSet " << zoneNames[i] <<
endl;
1787 label nExtrudeFaces = 0;
1790 nExtrudeFaces += zones[i].size();
1792 extrudeMeshFaces.
setSize(nExtrudeFaces);
1793 zoneFaces.
setSize(nExtrudeFaces);
1794 zoneID.
setSize(nExtrudeFaces);
1795 zoneFlipMap.
setSize(nExtrudeFaces);
1803 label faceI = iter.key();
1807 <<
"faceSet " << fz.
name()
1808 <<
"contains internal faces."
1809 <<
" This is not permitted."
1812 extrudeMeshFaces[nExtrudeFaces] = faceI;
1813 zoneFaces[nExtrudeFaces] =
mesh.
faces()[faceI];
1814 zoneID[nExtrudeFaces] = i;
1815 zoneFlipMap[nExtrudeFaces] =
false;
1820 isInternal[i] =
true;
1830 if (zoneShadowNames.
size())
1832 zoneShadowIDs.
setSize(zoneShadowNames.
size(), -1);
1833 forAll(zoneShadowNames, i)
1835 shadowZones.set(i,
new faceSet(
mesh, zoneShadowNames[i]));
1838 label nShadowFaces = 0;
1841 nShadowFaces += shadowZones[i].size();
1844 if (nExtrudeFaces != nShadowFaces)
1847 <<
"Extruded faces " << nExtrudeFaces <<
endl
1848 <<
"is different from shadow faces. " << nShadowFaces
1849 <<
"This is not permitted " <<
endl
1853 extrudeMeshShadowFaces.
setSize(nShadowFaces);
1854 zoneShadowFlipMap.
setSize(nShadowFaces);
1855 zoneShadowID.
setSize(nShadowFaces);
1860 const faceSet& fz = shadowZones[i];
1863 label faceI = iter.key();
1867 <<
"faceSet " << fz.
name()
1868 <<
"contains internal faces."
1869 <<
" This is not permitted."
1872 extrudeMeshShadowFaces[nShadowFaces] = faceI;
1873 zoneShadowFlipMap[nShadowFaces] =
false;
1874 zoneShadowID[nShadowFaces] = i;
1887 checkZoneInside(
mesh, zoneNames, zoneID, extrudeMeshFaces, isInternal);
1896 Info<<
"extrudePatch :"
1897 <<
" faces:" << extrudePatch.size()
1898 <<
" points:" << extrudePatch.
nPoints()
1899 <<
" edges:" << extrudePatch.
nEdges()
1917 const globalIndex globalExtrudeFaces(extrudePatch.size());
1934 extrudeEdgeGlobalFaces,
1948 extrudeEdgeFacesMap,
1949 extrudeEdgeGlobalFaces,
1963 if (!isA<processorPolyPatch>(
patches[patchI]))
1965 label newPatchI = regionPatches.size();
1966 regionPatches.append
1998 interRegionTopPatch,
1999 interRegionBottomPatch
2031 interMeshBottomPatch
2044 labelList extrudeTopPatchID(extrudePatch.size());
2045 labelList extrudeBottomPatchID(extrudePatch.size());
2049 extrudeTopPatchID[faceI] = interRegionTopPatch[zoneID[faceI]];
2050 extrudeBottomPatchID[faceI] = interRegionBottomPatch[zoneID[faceI]];
2073 extrudeEdgeGlobalFaces,
2120 extrudeEdgeFacesMap,
2121 extrudeEdgeGlobalFaces,
2171 const labelList& eFaces = edgeFaces[edgeI];
2173 labelList& ePatches = extrudeEdgePatches[edgeI];
2180 ePatches[i] = zoneSidePatch[zoneID[eFaces[i]]];
2183 if (oneDNonManifoldEdges)
2188 if (eFaces.
size() != 2)
2190 nonManifoldEdge[edgeI] = 1;
2195 nonManifoldEdge[edgeI] = 1;
2198 else if (eFaces.
size() == 2)
2200 label zone0 = zoneID[eFaces[0]];
2201 label zone1 = zoneID[eFaces[1]];
2207 label index = minZone*zoneNames.
size()+maxZone;
2209 ePatches.
setSize(eFaces.size());
2211 if (zone0 == minZone)
2213 ePatches[0] = zoneZonePatch_min[index];
2214 ePatches[1] = zoneZonePatch_max[index];
2218 ePatches[0] = zoneZonePatch_max[index];
2219 ePatches[1] = zoneZonePatch_min[index];
2222 nonManifoldEdge[edgeI] = 1;
2225 else if (sidePatchID[edgeI] != -1)
2228 ePatches.
setSize(eFaces.size());
2231 ePatches[i] = sidePatchID[edgeI];
2236 label faceI = findUncoveredPatchFace
2240 extrudeMeshEdges[edgeI]
2250 ePatches.
setSize(eFaces.size(), newPatchI);
2254 ePatches.
setSize(eFaces.size());
2257 ePatches[i] = zoneSidePatch[zoneID[eFaces[i]]];
2260 nonManifoldEdge[edgeI] = 1;
2288 forAll(pointLocalRegions, faceI)
2291 const face& pRegions = pointLocalRegions[faceI];
2294 localRegionPoints[pRegions[fp]] =
f[fp];
2303 forAll(pointLocalRegions, faceI)
2305 const face& pRegions = pointLocalRegions[faceI];
2308 label localRegionI = pRegions[fp];
2309 localSum[localRegionI] += extrudePatch.
faceNormals()[faceI];
2315 forAll(localSum, localRegionI)
2317 label globalRegionI = localToGlobalRegion[localRegionI];
2318 globalSum.insert(globalRegionI, localSum[localRegionI]);
2325 forAll(localToGlobalRegion, localRegionI)
2327 label globalRegionI = localToGlobalRegion[localRegionI];
2328 localRegionNormals[localRegionI] = globalSum[globalRegionI];
2330 localRegionNormals /=
mag(localRegionNormals);
2337 OFstream str(runTime.path()/
"localRegionNormals.obj");
2342 forAll(pointLocalRegions, faceI)
2344 const face&
f = extrudeFaces[faceI];
2348 label region = pointLocalRegions[faceI][fp];
2349 const point& pt = extrudePoints[
f[fp]];
2356 pt+thickness*localRegionNormals[region]
2359 str <<
"l " << vertI-1 <<
' ' << vertI <<
nl;
2367 forAll(firstDisp, regionI)
2374 localRegionPoints[regionI]
2377 const vector&
n = localRegionNormals[regionI];
2378 firstDisp[regionI] = model()(regionPt,
n, 1) - regionPt;
2413 forAll(regionPatches, patchI)
2415 polyPatch* ppPtr = regionPatches[patchI];
2420 regionMesh.removeFvBoundary();
2421 regionMesh.addFvPatches(regionPatches,
true);
2429 model().expansionRatio(),
2432 extrudeBottomPatchID,
2446 forAll(localRegionPoints, regionI)
2448 label pointI = localRegionPoints[regionI];
2450 const vector&
n = localRegionNormals[regionI];
2452 for (
label layerI = 1; layerI <= model().
nLayers(); layerI++)
2454 newPoints[meshPointI++] = model()(pt,
n, layerI);
2458 shellMap = meshMod.changeMesh
2483 if (isA<mappedWallPolyPatch>(pp))
2485 if (
findIndex(interRegionTopPatch, patchI) != -1)
2488 topOffsets[zoneI] = calcOffset(extrudePatch, extruder, pp);
2490 else if (
findIndex(interRegionBottomPatch, patchI) != -1)
2493 bottomOffsets[zoneI] = calcOffset(extrudePatch, extruder, pp);
2507 interRegionTopPatch,
2517 interRegionBottomPatch,
2524 deleteEmptyPatches(regionMesh);
2546 interMeshBottomPatch,
2562 "cellToPatchFaceAddressing",
2572 cellToPatchFaceAddressing.note() =
"cell to patch face addressing";
2578 "faceToPatchFaceAddressing",
2588 faceToPatchFaceAddressing.note() =
2589 "front/back face + turning index to patch face addressing";
2595 "faceToPatchEdgeAddressing",
2605 faceToPatchEdgeAddressing.note() =
2606 "side face to patch edge addressing";
2612 "pointToPatchPointAddressing",
2622 pointToPatchPointAddressing.note() =
2623 "point to patch point addressing";
2626 Info<<
"Writing mesh " << regionMesh.
name()
2632 && cellToPatchFaceAddressing.write()
2633 && faceToPatchFaceAddressing.write()
2634 && faceToPatchEdgeAddressing.write()
2635 && pointToPatchPointAddressing.write();
2640 <<
"Failed writing mesh " << regionMesh.
name()
2661 Info<<
"Reading patch face,edge centres : "
2662 << io.name() <<
" and patchEdgeCentres" <<
endl;
2664 extrudeGeometricProperties
2688 forAll(extrudeMeshFaces, zoneFaceI)
2690 label meshFaceI = extrudeMeshFaces[zoneFaceI];
2691 label zoneI = zoneID[zoneFaceI];
2692 bool flip = zoneFlipMap[zoneFaceI];
2704 interMeshBottomPatch[zoneI],
2718 interMeshBottomPatch[zoneI],
2725 if (zoneShadowNames.
size() > 0)
2727 forAll(extrudeMeshFaces, zoneFaceI)
2729 label meshFaceI = extrudeMeshShadowFaces[zoneFaceI];
2730 label zoneI = zoneShadowID[zoneFaceI];
2731 bool flip = zoneShadowFlipMap[zoneFaceI];
2743 interMeshTopPatch[zoneI],
2757 interMeshTopPatch[zoneI],
2767 forAll(extrudeMeshFaces, zoneFaceI)
2769 label meshFaceI = extrudeMeshFaces[zoneFaceI];
2770 label zoneI = zoneID[zoneFaceI];
2771 bool flip = zoneFlipMap[zoneFaceI];
2787 interMeshTopPatch[zoneI],
2804 interMeshTopPatch[zoneI],
2813 addBafflesMap = meshMod.changeMesh(
mesh,
false);
2824 if (addBafflesMap().hasMotionPoints())
2832 deleteEmptyPatches(
mesh);
2841 <<
"Failed writing mesh " <<
mesh.
name()