34 const Foam::label Foam::enrichedPatch::enrichedFaceRatio_ = 3;
46 if (enrichedFacesPtr_)
49 <<
"Enriched faces already calculated."
62 enrichedFacesPtr_ =
new faceList(masterPatch_.size() + slavePatch_.size());
63 faceList& enrichedFaces = *enrichedFacesPtr_;
65 label nEnrichedFaces = 0;
67 const pointField& masterLocalPoints = masterPatch_.localPoints();
68 const faceList& masterLocalFaces = masterPatch_.localFaces();
69 const labelListList& masterFaceEdges = masterPatch_.faceEdges();
71 const faceList& slaveLocalFaces = slavePatch_.localFaces();
72 const labelListList& slaveFaceEdges = slavePatch_.faceEdges();
85 const face& oldFace = slavePatch_[facei];
86 const face& oldLocalFace = slaveLocalFaces[facei];
87 const labelList& curEdges = slaveFaceEdges[facei];
100 const label mappedPointi = pmm.lookup(oldFace[i], oldFace[i]);
102 newFace.append(mappedPointi);
108 projectedSlavePoints[oldLocalFace[i]]
114 pointsIntoSlaveEdges[curEdges[i]];
122 if (pointsOnEdge.size())
127 const point& startPoint =
128 projectedSlavePoints[oldLocalFace[i]];
130 const point& endPoint =
131 projectedSlavePoints[oldLocalFace.nextLabel(i)];
133 vector e = (endPoint - startPoint);
135 const scalar magSqrE =
magSqr(
e);
144 <<
"Zero length edge in slave patch for face " << i
145 <<
". This is not allowed."
149 pointField positionOnEdge(pointsOnEdge.size());
151 forAll(pointsOnEdge, edgePointi)
153 positionOnEdge[edgePointi] =
154 pointMap()[pointsOnEdge[edgePointi]];
156 weightOnEdge[edgePointi] =
161 positionOnEdge[edgePointi]
170 if (
min(weightOnEdge) < 0 ||
max(weightOnEdge) > 1)
173 <<
" not on the edge for edge " << curEdges[i]
174 <<
" of face " << facei <<
" in slave patch." <<
nl
175 <<
"Min weight: " <<
min(weightOnEdge)
176 <<
" Max weight: " <<
max(weightOnEdge)
184 forAll(weightOnEdge, passI)
188 label nextPoint = -1;
193 if (weightOnEdge[wI] < dist)
195 dist = weightOnEdge[wI];
202 newFace.append(pointsOnEdge[nextPoint]);
203 weightOnEdge[nextPoint] = GREAT;
208 pointsOnEdge[nextPoint],
209 positionOnEdge[nextPoint]
220 enrichedFaces[nEnrichedFaces].transfer(newFace);
227 forAll(masterPatch_, facei)
229 const face& oldFace = masterPatch_[facei];
230 const face& oldLocalFace = masterLocalFaces[facei];
231 const labelList& curEdges = masterFaceEdges[facei];
244 const label mappedPointi = pmm.lookup(oldFace[i], oldFace[i]);
246 newFace.append(mappedPointi);
252 masterLocalPoints[oldLocalFace[i]]
258 pointsIntoMasterEdges[curEdges[i]];
262 if (pointsOnEdge.size())
267 const point& startPoint =
268 masterLocalPoints[oldLocalFace[i]];
270 const point& endPoint =
271 masterLocalPoints[oldLocalFace.nextLabel(i)];
273 vector e = (endPoint - startPoint);
275 const scalar magSqrE =
magSqr(
e);
284 <<
"Zero length edge in master patch for face " << i
285 <<
". This is not allowed."
289 pointField positionOnEdge(pointsOnEdge.size());
291 forAll(pointsOnEdge, edgePointi)
293 positionOnEdge[edgePointi] =
294 pointMap()[pointsOnEdge[edgePointi]];
296 weightOnEdge[edgePointi] =
301 positionOnEdge[edgePointi] - startPoint
309 if (
min(weightOnEdge) < 0 ||
max(weightOnEdge) > 1)
312 <<
" not on the edge for edge " << curEdges[i]
313 <<
" of face " << facei <<
" in master patch." <<
nl
314 <<
"Min weight: " <<
min(weightOnEdge)
315 <<
" Max weight: " <<
max(weightOnEdge)
323 forAll(weightOnEdge, passI)
327 label nextPoint = -1;
332 if (weightOnEdge[wI] < dist)
334 dist = weightOnEdge[wI];
341 newFace.append(pointsOnEdge[nextPoint]);
342 weightOnEdge[nextPoint] = GREAT;
347 pointsOnEdge[nextPoint],
348 positionOnEdge[nextPoint]
359 enrichedFaces[nEnrichedFaces].transfer(newFace);
368 Info<<
"Enriched patch support OK. Slave faces: "
369 << slavePatch_.size() <<
" Master faces: "
370 << masterPatch_.size() <<
endl;
375 <<
"Error in enriched patch support"
386 if (!enrichedFacesPtr_)
389 <<
"void enrichedPatch::calcEnrichedFaces\n"
391 <<
" const labelListList& pointsIntoMasterEdges,\n"
392 <<
" const labelListList& pointsIntoSlaveEdges,\n"
393 <<
" const pointField& projectedSlavePoints\n"
395 <<
" before trying to access faces."
399 return *enrichedFacesPtr_;