44 if (neiCc.size() != nBoundaryFaces)
47 <<
"nBoundaries:" << nBoundaryFaces
48 <<
" neiCc:" << neiCc.size()
52 const polyBoundaryMesh&
patches =
mesh.boundaryMesh();
56 const polyPatch& pp =
patches[patchI];
60 label bFaceI = pp.start() -
mesh.nInternalFaces();
66 neiCc[bFaceI] = cellCentres[faceCells[i]];
88 if (isA<coupledPolyPatch>(
patches[patchI]))
90 const coupledPolyPatch& cpp = refCast<const coupledPolyPatch>
95 if (cpp.separated() || !cpp.parallel())
99 selected[cpp.start()+i] =
true;
109 const polyMesh&
mesh,
117 selectSeparatedCoupledFaces(
mesh, blockedFace);
119 forAll(faceToSurface, faceI)
121 if (faceToSurface[faceI] == -1)
123 blockedFace[faceI] =
false;
127 blockedFace[faceI] =
true;
133 regionSplit cellRegion(
mesh, blockedFace);
140 const PtrList<surfaceZonesInfo>& surfZones =
141 geometryToConformTo().surfZones();
144 forAll(locationSurfaces, i)
146 label surfI = locationSurfaces[i];
148 const Foam::point& insidePoint = surfZones[surfI].zoneInsidePoint();
150 const word& surfName = geometryToConformTo().geometry().names()[surfI];
152 Info<<
" For surface " << surfName
153 <<
" finding inside point " << insidePoint
157 label keepRegionI = -1;
163 keepRegionI = cellRegion[cellI];
165 reduce(keepRegionI, maxOp<label>());
167 Info<<
" For surface " << surfName
168 <<
" found point " << insidePoint <<
" in cell " << cellI
169 <<
" in global region " << keepRegionI
170 <<
" out of " << cellRegion.nRegions() <<
" regions." <<
endl;
172 if (keepRegionI == -1)
175 <<
"Point " << insidePoint
176 <<
" is not inside the mesh." <<
nl
177 <<
"Bounding box of the mesh:" <<
mesh.
bounds()
184 if (cellRegion[cellI] == keepRegionI)
186 if (cellToSurface[cellI] == -2)
188 cellToSurface[cellI] = surfI;
190 else if (cellToSurface[cellI] != surfI)
195 <<
" is inside surface " << surfName
196 <<
" but already marked as being in zone "
197 << cellToSurface[cellI] <<
endl
198 <<
"This can happen if your surfaces are not"
199 <<
" (sufficiently) closed."
215 const PtrList<surfaceZonesInfo>& surfZones =
216 geometryToConformTo().surfZones();
224 geometryToConformTo().geometry(),
225 geometryToConformTo().surfaces()
229 forAll(closedNamedSurfaces, i)
231 label surfI = closedNamedSurfaces[i];
233 const searchableSurface& surface =
234 allGeometry()[geometryToConformTo().surfaces()[surfI]];
237 surfZones[surfI].zoneInside();
247 <<
"Trying to use surface "
249 <<
" which has non-geometric inside selection method "
254 if (surface.hasVolumeType())
257 surface.getVolumeType(cellCentres, volType);
259 bool selectInside =
true;
263 surface.getVolumeType
265 pointField(1, surfZones[surfI].zoneInsidePoint()),
271 selectInside =
false;
276 selectInside =
false;
281 if (cellToSurface[pointI] == -1)
295 cellToSurface[pointI] = surfI;
302 return cellToSurface;
308 const polyMesh&
mesh,
328 const polyPatch& pp =
patches[patchI];
338 neiFaceOwner[bFaceI] = cellToSurface[faceCells[i]];
348 const label ownerSurfaceI = cellToSurface[faceOwner[faceI]];
350 if (faceToSurface[faceI] >= 0)
357 const label neiSurfaceI = cellToSurface[faceNeighbour[faceI]];
361 (ownerSurfaceI >= 0 || neiSurfaceI >= 0)
362 && ownerSurfaceI != neiSurfaceI
367 ownerSurfaceI ==
max(ownerSurfaceI, neiSurfaceI)
372 faceToSurface[faceI] =
max(ownerSurfaceI, neiSurfaceI);
381 const label neiSurfaceI =
386 (ownerSurfaceI >= 0 || neiSurfaceI >= 0)
387 && ownerSurfaceI != neiSurfaceI
392 ownerSurfaceI ==
max(ownerSurfaceI, neiSurfaceI)
397 faceToSurface[faceI] =
max(ownerSurfaceI, neiSurfaceI);
402 if (ownerSurfaceI >= 0)
404 faceToSurface[faceI] = ownerSurfaceI;
411 const PtrList<surfaceZonesInfo>& surfZones =
412 geometryToConformTo().surfZones();
419 geometryToConformTo().geometry(),
420 geometryToConformTo().surfaces()
425 calcNeighbourCellCentres
435 if (faceToSurface[faceI] >= 0)
442 const label own = faceOwner[faceI];
449 const label nei = faceNeighbour[faceI];
451 geometryToConformTo().findSurfaceAllIntersections
461 geometryToConformTo().findSurfaceAllIntersections
472 if (surfHit.
size() == 1 && surfHit[0].hit())
474 if (
findIndex(unclosedSurfaces, hitSurface[0]) != -1)
477 geometryToConformTo().getNormal
485 fN /=
mag(fN) + SMALL;
487 if ((norm[0] & fN) < 0)
489 flipMap[faceI] =
true;
493 flipMap[faceI] =
false;
496 faceToSurface[faceI] = hitSurface[0];
553 Info<<
" Adding zones to mesh" <<
endl;
555 const PtrList<surfaceZonesInfo>& surfZones =
556 geometryToConformTo().surfZones();
558 labelList cellToSurface(calcCellZones(cellCentres));
577 findCellZoneInsideWalk
580 insidePointNamedSurfaces,
589 label surfI = namedSurfaces[i];
592 << geometryToConformTo().geometry().names()[surfI] <<
nl
593 <<
indent <<
" faceZone : "
594 << surfZones[surfI].faceZoneName() <<
nl
595 <<
indent <<
" cellZone : "
596 << surfZones[surfI].cellZoneName()
618 polyTopoChange meshMod(
mesh);
620 forAll(cellToSurface, cellI)
622 label surfaceI = cellToSurface[cellI];
626 label zoneI = surfaceToCellZone[surfaceI];
646 forAll(faceToSurface, faceI)
648 label surfaceI = faceToSurface[faceI];
659 label own = faceOwner[faceI];
660 label nei = faceNeighbour[faceI];
673 surfaceToFaceZone[surfaceI],
680 label own = faceOwner[faceI];
693 surfaceToFaceZone[surfaceI],
701 autoPtr<mapPolyMesh> map = meshMod.changeMesh(
mesh,
false,
true);