36 Info<<
"Creating block offsets" <<
endl;
48 nPoints_ += blocks[blockI].nPoints();
49 nCells_ += blocks[blockI].nCells();
74 forAll(blockFaces, blockFaceLabel)
76 label blockPlabel = faceOwnerBlocks[blockFaceLabel];
77 const pointField& blockPpoints = blocks[blockPlabel].points();
78 const labelList& blockPfaces = blockCells[blockPlabel];
80 bool foundFace =
false;
81 label blockPfaceLabel;
85 blockPfaceLabel < blockPfaces.
size();
89 if (blockPfaces[blockPfaceLabel] == blockFaceLabel)
99 <<
"Cannot find merge face for block " << blockPlabel
104 blocks[blockPlabel].boundaryPatches()[blockPfaceLabel];
116 boundBox bb(blockCells[blockPlabel].
points(blockFaces, blockPoints));
117 const scalar mergeSqrDist =
magSqr(10*SMALL*bb.
span());
121 scalar sqrMergeTol = GREAT;
123 forAll(blockPfaceFaces, blockPfaceFaceLabel)
126 = blockPfaceFaces[blockPfaceFaceLabel];
128 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel)
130 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel2)
132 if (blockPfaceFacePointLabel != blockPfaceFacePointLabel2)
134 scalar magSqrDist =
magSqr
136 blockPpoints[blockPfaceFacePoints
137 [blockPfaceFacePointLabel]]
138 - blockPpoints[blockPfaceFacePoints
139 [blockPfaceFacePointLabel2]]
142 if (magSqrDist < mergeSqrDist)
145 blockPfaceFacePoints[blockPfaceFacePointLabel]
149 blockPfaceFacePoints[blockPfaceFacePointLabel2]
152 label minPP2 =
min(PpointLabel, PpointLabel2);
169 sqrMergeTol =
min(sqrMergeTol, magSqrDist);
179 if (
topology().isInternalFace(blockFaceLabel))
181 label blockNlabel = faceNeighbourBlocks[blockFaceLabel];
182 const pointField& blockNpoints = blocks[blockNlabel].points();
183 const labelList& blockNfaces = blockCells[blockNlabel];
186 label blockNfaceLabel;
190 blockNfaceLabel < blockNfaces.
size();
196 blockFaces[blockNfaces[blockNfaceLabel]]
197 == blockFaces[blockFaceLabel]
208 <<
"Cannot find merge face for block " << blockNlabel
213 blocks[blockNlabel].boundaryPatches()[blockNfaceLabel];
215 if (blockPfaceFaces.
size() != blockNfaceFaces.
size())
218 <<
"Inconsistent number of faces between block pair "
219 << blockPlabel <<
" and " << blockNlabel
226 forAll(blockPfaceFaces, blockPfaceFaceLabel)
229 = blockPfaceFaces[blockPfaceFaceLabel];
232 cp.setSize(blockPfaceFacePoints.
size());
235 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel)
237 forAll(blockNfaceFaces, blockNfaceFaceLabel)
240 = blockNfaceFaces[blockNfaceFaceLabel];
242 forAll(blockNfaceFacePoints, blockNfaceFacePointLabel)
249 [blockPfaceFacePoints[blockPfaceFacePointLabel]]
251 [blockNfaceFacePoints[blockNfaceFacePointLabel]]
257 cp[blockPfaceFacePointLabel] =
258 blockNfaceFacePoints[blockNfaceFacePointLabel];
261 blockPfaceFacePoints[blockPfaceFacePointLabel]
265 blockNfaceFacePoints[blockNfaceFacePointLabel]
268 label minPN =
min(PpointLabel, NpointLabel);
286 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel)
288 if (
cp[blockPfaceFacePointLabel] == -1)
291 <<
"Inconsistent point locations between block pair "
292 << blockPlabel <<
" and " << blockNlabel <<
nl
293 <<
" probably due to inconsistent grading."
308 bool changedPointMerge =
false;
313 changedPointMerge =
false;
316 forAll(blockInternalFaces, blockFaceLabel)
318 label blockPlabel = faceOwnerBlocks[blockFaceLabel];
319 label blockNlabel = faceNeighbourBlocks[blockFaceLabel];
321 const labelList& blockPfaces = blockCells[blockPlabel];
322 const labelList& blockNfaces = blockCells[blockNlabel];
324 const labelListList& curPairs = glueMergePairs[blockFaceLabel];
326 label blockPfaceLabel;
330 blockPfaceLabel < blockPfaces.
size();
336 blockFaces[blockPfaces[blockPfaceLabel]]
337 == blockInternalFaces[blockFaceLabel]
345 label blockNfaceLabel;
349 blockNfaceLabel < blockNfaces.
size();
355 blockFaces[blockNfaces[blockNfaceLabel]]
356 == blockInternalFaces[blockFaceLabel]
365 blocks[blockPlabel].boundaryPatches()[blockPfaceLabel];
367 forAll(blockPfaceFaces, blockPfaceFaceLabel)
370 = blockPfaceFaces[blockPfaceFaceLabel];
372 const labelList&
cp = curPairs[blockPfaceFaceLabel];
374 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel)
377 blockPfaceFacePoints[blockPfaceFacePointLabel]
381 cp[blockPfaceFacePointLabel]
390 changedPointMerge =
true;
411 <<
"Point merging failed after max number of passes."
415 while (changedPointMerge);
422 forAll(blockInternalFaces, blockFaceLabel)
424 label blockPlabel = faceOwnerBlocks[blockFaceLabel];
425 label blockNlabel = faceNeighbourBlocks[blockFaceLabel];
427 const labelList& blockPfaces = blockCells[blockPlabel];
428 const labelList& blockNfaces = blockCells[blockNlabel];
430 const pointField& blockPpoints = blocks[blockPlabel].points();
431 const pointField& blockNpoints = blocks[blockNlabel].points();
433 bool foundFace =
false;
434 label blockPfaceLabel;
438 blockPfaceLabel < blockPfaces.
size();
444 blockFaces[blockPfaces[blockPfaceLabel]]
445 == blockInternalFaces[blockFaceLabel]
456 <<
"Cannot find merge face for block " << blockPlabel
461 label blockNfaceLabel;
465 blockNfaceLabel < blockNfaces.
size();
471 blockFaces[blockNfaces[blockNfaceLabel]]
472 == blockInternalFaces[blockFaceLabel]
483 <<
"Cannot find merge face for block " << blockNlabel
488 blocks[blockPlabel].boundaryPatches()[blockPfaceLabel];
491 blocks[blockNlabel].boundaryPatches()[blockNfaceLabel];
493 forAll(blockPfaceFaces, blockPfaceFaceLabel)
496 = blockPfaceFaces[blockPfaceFaceLabel];
498 forAll(blockPfaceFacePoints, blockPfaceFacePointLabel)
501 blockPfaceFacePoints[blockPfaceFacePointLabel]
507 <<
"Unable to merge point "
508 << blockPfaceFacePointLabel
509 <<
' ' << blockPpoints[blockPfaceFacePointLabel]
519 forAll(blockNfaceFaces, blockNfaceFaceLabel)
522 = blockNfaceFaces[blockNfaceFaceLabel];
524 forAll(blockNfaceFacePoints, blockNfaceFacePointLabel)
527 blockNfaceFacePoints[blockNfaceFacePointLabel]
533 <<
"unable to merge point "
534 << blockNfaceFacePointLabel
535 <<
' ' << blockNpoints[blockNfaceFacePointLabel]
549 label newPointLabel = 0;
556 <<
"Merge list contains point index out of range"