39 void Foam::starMesh::createCoupleMatches()
49 cellShapes_.
size()/10,
54 Map<SLList<face>> cellAddedFaces(cellMapSize);
56 Map<SLList<label>> cellRemovedFaces(cellMapSize);
63 const label infoJump =
max(1000, couples_.size()/20);
67 if (coupleI % infoJump == 0)
69 Info<<
"Doing couple " << coupleI <<
". STAR couple ID: " 70 << couples_[coupleI].coupleID() <<
endl;
74 const coupledFacePair& fp = couples_[coupleI];
75 const face& masterFace = cellFaces_[fp.masterCell()][fp.masterFace()];
76 const face& slaveFace = cellFaces_[fp.slaveCell()][fp.slaveFace()];
79 Info<<
"coupleI: " << coupleI << endl
80 <<
"masterFace: " << masterFace << endl
81 <<
"master points: " << masterFace.points(points_) << endl
82 <<
"slaveFace: " << slaveFace << endl
83 <<
"slave points: " << slaveFace.points(points_)
88 scalar faceAreaAngle =
91 -(masterFace.area(points_) & slaveFace.area(points_))/
92 (masterFace.mag(points_)*slaveFace.mag(points_) + vSmall)
95 if (faceAreaAngle < 0.94)
97 Info<<
"Couple direction mismatch in the couple match " 98 << coupleI <<
". STAR couple ID: " 99 << couples_[coupleI].coupleID() << endl
100 <<
"The angle between face normals is " 103 <<
"master cell: " << fp.masterCell()
104 <<
" STAR number: " << starCellID_[fp.masterCell()]
105 <<
" type: " << cellShapes_[fp.masterCell()].model().name()
106 <<
" face: " << fp.masterFace() << endl
107 <<
"slave cell : " << fp.slaveCell()
108 <<
" STAR number: " << starCellID_[fp.slaveCell()]
109 <<
" type: " << cellShapes_[fp.slaveCell()].model().name()
110 <<
" face: " << fp.slaveFace() <<
endl;
114 if (fp.integralMatch())
118 Map<SLList<label>>::iterator crfIter =
119 cellRemovedFaces.find(fp.masterCell());
121 if (crfIter == cellRemovedFaces.end())
123 cellRemovedFaces.insert
126 SLList<label>(fp.masterFace())
131 crfIter().append(fp.masterFace());
134 Map<SLList<face>>::iterator cafIter =
135 cellAddedFaces.find(fp.masterCell());
136 if (cafIter == cellAddedFaces.end())
138 cellAddedFaces.insert
141 SLList<face>(slaveFace.reverseFace())
146 cafIter().append(slaveFace.reverseFace());
154 SLList<point> coupleFacePoints;
157 edgeList masterEdges = masterFace.edges();
158 List<SLList<label>> masterEdgePoints(masterEdges.size());
161 edgeList slaveEdges = slaveFace.edges();
162 List<SLList<label>> slaveEdgePoints(slaveEdges.size());
165 vector n = masterFace.area(points_);
166 n /=
mag(n) + vSmall;
170 forAll(masterEdges, masterEdgeI)
172 const edge& curMasterEdge = masterEdges[masterEdgeI];
174 point P = points_[curMasterEdge.start()];
177 vector d = curMasterEdge.vec(points_);
180 #ifdef DEBUG_COUPLE_INTERSECTION 181 Info<<
"curMasterEdge: " << curMasterEdge << endl
182 <<
"P: " << P << endl <<
"d: " << d <<
endl;
188 forAll(slaveEdges, slaveEdgeI)
190 const edge& curSlaveEdge = slaveEdges[slaveEdgeI];
192 point S = points_[curSlaveEdge.start()];
195 vector e = curSlaveEdge.vec(points_);
197 scalar det = -(e & (n ^ d));
199 #ifdef DEBUG_COUPLE_INTERSECTION 200 Info<<
"curSlaveEdge: " << curSlaveEdge << endl
201 <<
"S: " << S << endl
202 <<
"e: " << e <<
endl;
205 if (
mag(det) > small)
208 scalar beta = ((S - P) & (n ^ d))/det;
210 #ifdef DEBUG_COUPLE_INTERSECTION 214 if (beta > -smallMergeTol_ && beta < 1 + smallMergeTol_)
218 (((S - P) & d) + beta*(d &
e))/
magSqr(d);
220 #ifdef DEBUG_COUPLE_INTERSECTION 226 alpha > -smallMergeTol_
227 && alpha < 1 + smallMergeTol_
231 #ifdef DEBUG_COUPLE_INTERSECTION 232 Info<<
"intersection of non-parallel edges" 240 if (alpha < smallMergeTol_)
245 beta > smallMergeTol_
246 && beta < 1 - smallMergeTol_
249 slaveEdgePoints[slaveEdgeI].append
251 curMasterEdge.start()
255 else if (alpha > 1 - smallMergeTol_)
260 beta > smallMergeTol_
261 && beta < 1 - smallMergeTol_
264 slaveEdgePoints[slaveEdgeI].append
270 else if (beta < smallMergeTol_)
275 alpha > smallMergeTol_
276 && alpha < 1 - smallMergeTol_
279 masterEdgePoints[masterEdgeI].append
285 else if (beta > 1 - smallMergeTol_)
290 alpha > smallMergeTol_
291 && alpha < 1 - smallMergeTol_
294 masterEdgePoints[masterEdgeI].append
302 masterEdgePoints[masterEdgeI].append
304 nLivePoints + coupleFacePoints.size()
307 slaveEdgePoints[slaveEdgeI].append
309 nLivePoints + coupleFacePoints.size()
312 #ifdef DEBUG_COUPLE_INTERSECTION 313 Info<<
"regular intersection. " 315 << coupleFacePoints.size()
317 << P + alpha*curMasterEdge.vec(points_)
324 coupleFacePoints.append
325 (P + alpha*curMasterEdge.vec(points_));
346 bool colinear =
false;
355 (ps & d)/(
mag(ps)*
mag(d)) > 1.0 - smallMergeTol_
364 scalar alpha1 = (ps & d)/
magSqr(d);
368 alpha1 > -smallMergeTol_
369 && alpha1 < 1 + smallMergeTol_
372 #ifdef DEBUG_COUPLE_INTERSECTION 373 Info<<
"adding irregular master " 375 << points_[slaveEdges[slaveEdgeI].start()]
379 masterEdgePoints[masterEdgeI].append
381 slaveEdges[slaveEdgeI].start()
385 scalar alpha2 = ((ps +
e) & d)/
magSqr(d);
389 alpha2 > -smallMergeTol_
390 && alpha2 < 1 + smallMergeTol_
393 #ifdef DEBUG_COUPLE_INTERSECTION 394 Info<<
"adding irregular master " 396 << points_[slaveEdges[slaveEdgeI].end()]
400 masterEdgePoints[masterEdgeI].append
402 slaveEdges[slaveEdgeI].end()
412 scalar beta1 = (sp &
e)/
magSqr(e);
414 #ifdef DEBUG_COUPLE_INTERSECTION 415 Info<<
"P: " << P <<
" S: " << S <<
" d: " << d
416 <<
" e: " << e <<
" sp: " << sp
417 <<
" beta1: " << beta1 <<
endl;
422 beta1 > -smallMergeTol_
423 && beta1 < 1 + smallMergeTol_
426 #ifdef DEBUG_COUPLE_INTERSECTION 427 Info<<
"adding irregular slave " 429 << points_[masterEdges[masterEdgeI].start()]
433 slaveEdgePoints[slaveEdgeI].append
435 masterEdges[masterEdgeI].start()
439 scalar beta2 = ((sp + d) & e)/
magSqr(e);
443 beta2 > -smallMergeTol_
444 && beta2 < 1 + smallMergeTol_
447 #ifdef DEBUG_COUPLE_INTERSECTION 448 Info<<
"adding irregular slave " 450 << points_[masterEdges[masterEdgeI].end()]
454 slaveEdgePoints[slaveEdgeI].append
456 masterEdges[masterEdgeI].end()
464 #ifdef DEBUG_COUPLE_INTERSECTION 465 Info<<
"additional slave edge points: " <<
endl;
466 forAll(slaveEdgePoints, edgeI)
468 Info<<
"edge: " << edgeI <<
": " << slaveEdgePoints[edgeI]
474 if (nLivePoints + coupleFacePoints.size() >= points_.
size())
477 Info<<
"Resizing points list" <<
endl;
484 coupleFacePoints.begin();
485 coupleFacePointsIter != coupleFacePoints.end();
486 ++coupleFacePointsIter
489 points_[nLivePoints] = coupleFacePointsIter();
498 label nAdditionalMasterPoints = 0;
500 forAll(masterEdgePoints, edgeI)
502 nAdditionalMasterPoints += masterEdgePoints[edgeI].size();
508 + nAdditionalMasterPoints
510 label nTmpMasterLabels = 0;
512 #ifdef DEBUG_COUPLE_INTERSECTION 513 Info<<
"masterFace: " << masterFace << endl
514 <<
"nAdditionalMasterPoints: " << nAdditionalMasterPoints
518 forAll(masterEdges, masterEdgeI)
521 tmpMasterFace[nTmpMasterLabels] =
522 masterEdges[masterEdgeI].start();
526 const SLList<label>& curMEdgePoints =
527 masterEdgePoints[masterEdgeI];
530 boolList usedMasterPoint(curMEdgePoints.size(),
false);
532 vector edgeVector = masterEdges[masterEdgeI].vec(points_);
534 #ifdef DEBUG_FACE_ORDERING 535 Info<<
"edgeVector: " << edgeVector << endl
536 <<
"curMEdgePoints.size(): " << curMEdgePoints.size()
541 edgeVector /=
magSqr(edgeVector);
543 point edgeStartPoint =
544 points_[masterEdges[masterEdgeI].start()];
549 label nextPointLabel = -1;
551 scalar minAlpha = great;
558 curMEdgePoints.begin();
559 curMEdgePointsIter != curMEdgePoints.end();
563 if (!usedMasterPoint[i])
568 points_[curMEdgePointsIter()]
572 #ifdef DEBUG_FACE_ORDERING 573 Info<<
" edgeStartPoint: " << edgeStartPoint
575 << points_[masterEdges[masterEdgeI].end()]
577 << points_[curMEdgePointsIter()]
578 <<
" alpha: " << alpha <<
endl;
581 if (alpha < minAlpha)
585 nextPointLabel = curMEdgePointsIter();
589 #ifdef DEBUG_FACE_ORDERING 590 Info<<
"nextPointLabel: " << nextPointLabel <<
endl;
596 if (nextPointLabel > -1)
598 #ifdef DEBUG_FACE_ORDERING 599 Info<<
"added nextPointLabel: " << nextPointLabel
600 <<
" nTmpMasterLabels: " << nTmpMasterLabels
601 <<
" to place " << nTmpMasterLabels <<
endl;
604 usedMasterPoint[usedI] =
true;
606 tmpMasterFace[nTmpMasterLabels] =
618 tmpMasterFace.setSize(nTmpMasterLabels);
620 #ifdef DEBUG_FACE_ORDERING 621 Info<<
"tmpMasterFace: " << tmpMasterFace <<
endl;
631 newMasterFace[0] = tmpMasterFace[0];
634 edgeList mstEdgesToCollapse = tmpMasterFace.edges();
637 cpMergePointTol_*boundBox(tmpMasterFace.points(points_)).
mag();
639 forAll(mstEdgesToCollapse, edgeI)
641 #ifdef DEBUG_FACE_ORDERING 642 Info<<
"edgeI: " << edgeI <<
" curEdge: " 643 << mstEdgesToCollapse[edgeI] << endl
644 <<
"master edge " << edgeI <<
", " 645 << mstEdgesToCollapse[edgeI].mag(points_) <<
endl;
649 if (mstEdgesToCollapse[edgeI].
mag(points_) < masterTol)
651 newMasterFace[nMaster] =
654 newMasterFace[nMaster],
655 mstEdgesToCollapse[edgeI].end()
658 #ifdef DEBUG_FACE_ORDERING 659 Info<<
"Collapsed: nMaster: " << nMaster
660 <<
" label: " << newMasterFace[nMaster] <<
endl;
668 if (edgeI < mstEdgesToCollapse.size() - 1)
671 #ifdef DEBUG_FACE_ORDERING 672 Info<<
"Added: nMaster: " << nMaster
673 <<
" label: " << mstEdgesToCollapse[edgeI].end()
677 newMasterFace[nMaster] =
678 mstEdgesToCollapse[edgeI].end();
683 newMasterFace.setSize(nMaster);
686 Info<<
"newMasterFace: " << newMasterFace << endl
687 <<
"points: " << newMasterFace.points(points_) <<
endl;
693 label nAdditionalSlavePoints = 0;
695 forAll(slaveEdgePoints, edgeI)
697 nAdditionalSlavePoints += slaveEdgePoints[edgeI].size();
703 + nAdditionalSlavePoints
705 label nTmpSlaveLabels = 0;
707 #ifdef DEBUG_COUPLE_INTERSECTION 708 Info<<
"slaveFace: " << slaveFace << endl
709 <<
"nAdditionalSlavePoints: " << nAdditionalSlavePoints <<
endl;
712 forAll(slaveEdges, slaveEdgeI)
715 tmpSlaveFace[nTmpSlaveLabels] =
716 slaveEdges[slaveEdgeI].start();
720 const SLList<label>& curSEdgePoints =
721 slaveEdgePoints[slaveEdgeI];
724 boolList usedSlavePoint(curSEdgePoints.size(),
false);
726 vector edgeVector = slaveEdges[slaveEdgeI].vec(points_);
728 #ifdef DEBUG_FACE_ORDERING 729 Info<<
"curSEdgePoints.size(): " 730 << curSEdgePoints.size() << endl
731 <<
"edgeVector: " << edgeVector <<
endl;
735 edgeVector /=
magSqr(edgeVector);
737 point edgeStartPoint =
738 points_[slaveEdges[slaveEdgeI].start()];
743 label nextPointLabel = -1;
745 scalar minAlpha = great;
752 curSEdgePoints.begin();
753 curSEdgePointsIter != curSEdgePoints.end();
757 if (!usedSlavePoint[i])
762 points_[curSEdgePointsIter()]
766 #ifdef DEBUG_FACE_ORDERING 767 Info<<
" edgeStartPoint: " << edgeStartPoint
769 << points_[slaveEdges[slaveEdgeI].end()]
771 << points_[curSEdgePointsIter()]
772 <<
" alpha: " << alpha <<
endl;
775 if (alpha < minAlpha)
779 nextPointLabel = curSEdgePointsIter();
783 #ifdef DEBUG_FACE_ORDERING 784 Info<<
"nextPointLabel: " << nextPointLabel <<
endl;
790 if (nextPointLabel > -1)
792 #ifdef DEBUG_FACE_ORDERING 793 Info<<
"added nextPointLabel: " << nextPointLabel
794 <<
" nTmpSlaveLabels: " << nTmpSlaveLabels
795 <<
" to place " << nTmpSlaveLabels <<
endl;
798 usedSlavePoint[usedI] =
true;
800 tmpSlaveFace[nTmpSlaveLabels] =
812 tmpSlaveFace.setSize(nTmpSlaveLabels);
814 #ifdef DEBUG_FACE_ORDERING 815 Info<<
"tmpSlaveFace: " << tmpSlaveFace <<
endl;
825 newSlaveFace[0] = tmpSlaveFace[0];
828 edgeList slvEdgesToCollapse = tmpSlaveFace.edges();
831 cpMergePointTol_*boundBox(tmpSlaveFace.points(points_)).
mag();
833 forAll(slvEdgesToCollapse, edgeI)
835 #ifdef DEBUG_FACE_ORDERING 836 Info<<
"slave edge length: " << edgeI <<
", " 837 << slvEdgesToCollapse[edgeI].mag(points_)<<
endl;
841 if (slvEdgesToCollapse[edgeI].
mag(points_) < slaveTol)
843 newSlaveFace[nSlave] =
846 newSlaveFace[nSlave],
847 slvEdgesToCollapse[edgeI].end()
853 if (edgeI < slvEdgesToCollapse.size() - 1)
856 newSlaveFace[nSlave] = slvEdgesToCollapse[edgeI].end();
861 newSlaveFace.setSize(nSlave);
864 Info<<
"newSlaveFace: " << newSlaveFace << endl
865 <<
"points: " << newSlaveFace.points(points_) << endl <<
endl;
878 edgeList newMasterEdges = newMasterFace.edges();
879 edgeList newSlaveEdges = newSlaveFace.edges();
881 #ifdef DEBUG_RIGHT_HAND_WALK 882 Info<<
"newMasterEdges: " << newMasterEdges << endl
883 <<
"newSlaveEdges: " << newSlaveEdges <<
endl;
886 edge startEdge(-1, -1);
892 label startEdgeFound = 0;
894 vector masterProjDir = -newMasterFace.area(points_);
896 forAll(newSlaveEdges, edgeI)
902 point pointStart = points_[newSlaveEdges[edgeI].start()];
904 point pointEnd = points_[newSlaveEdges[edgeI].end()];
924 startEdge = newSlaveEdges[edgeI];
927 #ifdef DEBUG_RIGHT_HAND_WALK 935 if (startEdgeFound == 0)
937 vector slaveProjDir = -newSlaveFace.area(points_);
939 forAll(newMasterEdges, edgeI)
945 point pointStart = points_[newMasterEdges[edgeI].start()];
947 point pointEnd = points_[newMasterEdges[edgeI].end()];
967 startEdge = newMasterEdges[edgeI];
970 #ifdef DEBUG_RIGHT_HAND_WALK 982 labelList(newMasterFace.size() + newSlaveFace.size(), -1)
985 if (startEdgeFound > 0)
987 #ifdef DEBUG_RIGHT_HAND_WALK 988 Info<<
"start edge: " << startEdge <<
endl;
1002 vector planeNormal = newMasterFace.area(points_);
1003 planeNormal /=
mag(planeNormal) + vSmall;
1005 #ifdef DEBUG_RIGHT_HAND_WALK 1006 Info<<
"planeNormal: " << planeNormal <<
endl;
1018 if (startEdgeFound == 1)
1020 faceCentre = newMasterFace.
centre(points_);
1024 faceCentre = newSlaveFace.
centre(points_);
1027 scalar tripleProduct =
1029 (faceCentre - points_[startEdge.start()])
1030 ^ startEdge.vec(points_)
1033 if (tripleProduct < 0)
1035 #ifdef DEBUG_RIGHT_HAND_WALK 1036 Info<<
"Turning edge for right-hand turn rule" <<
endl;
1042 intersectedFace[0] = startEdge.start();
1043 intersectedFace[1] = startEdge.end();
1044 label nIntFacePoints = 2;
1046 edge curEdge = startEdge;
1048 bool completedFace =
false;
1052 SLList<edge> edgesToConsider;
1055 forAll(newMasterEdges, edgeI)
1057 const edge& cme = newMasterEdges[edgeI];
1061 if (cme.start() == curEdge.end())
1063 edgesToConsider.append(cme);
1065 else if (cme.end() == curEdge.end())
1067 edgesToConsider.append(cme.reverseEdge());
1074 forAll(newSlaveEdges, edgeI)
1076 const edge& cse = newSlaveEdges[edgeI];
1080 if (cse.start() == curEdge.end())
1082 edgesToConsider.append(cse);
1084 else if (cse.end() == curEdge.end())
1086 edgesToConsider.append(cse.reverseEdge());
1092 #ifdef DEBUG_RIGHT_HAND_WALK 1093 Info<<
"number of edges to consider: " 1094 << edgesToConsider.size() << endl
1095 <<
"edges to consider: " << edgesToConsider <<
endl;
1098 if (edgesToConsider.empty())
1102 <<
"void starMesh::createCoupleMatches() : " 1103 << endl <<
"error in face intersection: " 1104 <<
"no edges to consider for closing the loop" 1105 << coupleI <<
". STAR couple ID: " 1106 << couples_[coupleI].coupleID() << endl
1107 <<
"Cut Master Face: " << newMasterFace << endl
1108 <<
"points: " << newMasterFace.points(points_)
1110 <<
"Cut Slave Face: " << newSlaveFace << endl
1111 <<
"points: " << newSlaveFace.points(points_)
1112 << endl <<
"intersected face: " 1118 vector ahead = curEdge.vec(points_);
1119 ahead -= planeNormal*(planeNormal & ahead);
1120 ahead /=
mag(ahead) + vSmall;
1123 vector right = ahead ^ planeNormal;
1124 right /=
mag(right) + vSmall;
1127 edge nextEdge = edgesToConsider.first();
1128 vector nextEdgeVec = nextEdge.vec(points_);
1129 nextEdgeVec -= planeNormal*(planeNormal & nextEdgeVec);
1130 nextEdgeVec /=
mag(nextEdgeVec) + vSmall;
1132 scalar rightTurn = nextEdgeVec & right;
1133 scalar goStraight = nextEdgeVec & ahead;
1135 #ifdef DEBUG_RIGHT_HAND_WALK 1136 Info<<
"rightTurn: " << rightTurn
1137 <<
" goStraight: " << goStraight <<
endl;
1143 edgesToConsider.begin();
1144 etcIter != edgesToConsider.end();
1149 vector newDir = etcIter().vec(points_);
1150 newDir -= planeNormal*(planeNormal & newDir);
1151 newDir /=
mag(newDir) + vSmall;
1153 scalar curRightTurn = newDir & right;
1154 scalar curGoStraight = newDir & ahead;
1156 #ifdef DEBUG_RIGHT_HAND_WALK 1157 Info<<
"curRightTurn: " << curRightTurn
1158 <<
" curGoStraight: " << curGoStraight <<
endl;
1163 if (curRightTurn < 0)
1166 if (curGoStraight > goStraight)
1168 #ifdef DEBUG_RIGHT_HAND_WALK 1173 nextEdge = etcIter();
1174 rightTurn = curRightTurn;
1175 goStraight = curGoStraight;
1180 #ifdef DEBUG_RIGHT_HAND_WALK 1185 nextEdge = etcIter();
1186 rightTurn = curRightTurn;
1187 goStraight = curGoStraight;
1193 if (curRightTurn >= 0)
1196 if (curGoStraight < goStraight)
1198 #ifdef DEBUG_RIGHT_HAND_WALK 1203 nextEdge = etcIter();
1204 rightTurn = curRightTurn;
1205 goStraight = curGoStraight;
1212 if (nextEdge.end() == intersectedFace[0])
1215 completedFace =
true;
1220 if (nIntFacePoints >= intersectedFace.size())
1224 <<
"void starMesh::createCoupleMatches() : " 1225 << endl <<
"error in intersected face: " 1226 <<
"lost thread for intersection of couple " 1227 << coupleI <<
". STAR couple ID: " 1228 << couples_[coupleI].coupleID() << endl
1229 <<
"Cut Master Face: " << newMasterFace << endl
1230 <<
"points: " << newMasterFace.points(points_)
1232 <<
"Cut Slave Face: " << newSlaveFace << endl
1233 <<
"points: " << newSlaveFace.points(points_)
1234 << endl <<
"intersected face: " 1240 intersectedFace[nIntFacePoints] = nextEdge.end();
1246 #ifdef DEBUG_RIGHT_HAND_WALK 1247 Info<<
"inserted point " << nextEdge.end() << endl
1248 <<
"curEdge: " << curEdge <<
endl;
1252 while (!completedFace);
1255 intersectedFace.setSize(nIntFacePoints);
1258 Info<<
"intersectedFace: " << intersectedFace <<
endl;
1262 forAll(intersectedFace, checkI)
1266 label checkJ = checkI + 1;
1267 checkJ < intersectedFace.size();
1271 if (intersectedFace[checkI] == intersectedFace[checkJ])
1275 <<
"void starMesh::createCoupleMatches() : " 1276 << endl <<
"error in intersected face: " 1277 <<
"duplicate point in intersected face " 1278 <<
"for couple no " << coupleI
1279 <<
". STAR couple ID: " 1280 << couples_[coupleI].coupleID() << endl
1281 <<
"Duplicate point label: " 1282 << intersectedFace[checkI] << endl
1283 <<
"Cut Master Face: " << newMasterFace << endl
1284 <<
"points: " << newMasterFace.points(points_)
1286 <<
"Cut Slave Face: " << newSlaveFace << endl
1287 <<
"points: " << newSlaveFace.points(points_)
1288 << endl <<
"intersected face: " 1299 <<
"void starMesh::createCoupleMatches() : " << endl
1300 <<
"could not find start edge for intersection of couple " 1301 << coupleI <<
". STAR couple ID: " 1302 << couples_[coupleI].coupleID() << endl
1303 <<
"Cut Master Face: " << newMasterFace << endl
1304 <<
"points: " << newMasterFace.points(points_) << endl
1305 <<
"Cut Slave Face: " << newSlaveFace << endl
1306 <<
"points: " << newSlaveFace.points(points_)
1312 vector pointProjectionNormal = -masterFace.area(points_);
1314 forAll(intersectedFace, intPointi)
1316 #ifdef DEBUG_COUPLE_PROJECTION 1317 Info<<
"Proj: old point: " 1318 << points_[intersectedFace[intPointi]] <<
endl;
1324 points_[intersectedFace[intPointi]],
1325 pointProjectionNormal,
1332 points_[intersectedFace[intPointi]] =
1335 #ifdef DEBUG_COUPLE_PROJECTION 1336 Info<<
" new point: " 1337 << points_[intersectedFace[intPointi]] <<
endl;
1346 masterFace.area(points_)
1347 & intersectedFace.area(points_)
1351 intersectedFace.flip();
1357 Map<SLList<label>>::iterator crfMasterIter =
1358 cellRemovedFaces.find(fp.masterCell());
1360 if (crfMasterIter == cellRemovedFaces.end())
1362 cellRemovedFaces.insert
1365 SLList<label>(fp.masterFace())
1370 crfMasterIter().append(fp.masterFace());
1373 Map<SLList<label>>::iterator crfSlaveIter =
1374 cellRemovedFaces.find(fp.slaveCell());
1376 if (crfSlaveIter == cellRemovedFaces.end())
1378 cellRemovedFaces.insert
1381 SLList<label>(fp.slaveFace())
1386 crfSlaveIter().append(fp.slaveFace());
1389 Map<SLList<face>>::iterator cafMasterIter =
1390 cellAddedFaces.find(fp.masterCell());
1391 if (cafMasterIter == cellAddedFaces.end())
1393 cellAddedFaces.insert
1396 SLList<face>(intersectedFace)
1401 cafMasterIter().append(intersectedFace);
1404 Map<SLList<face>>::iterator cafSlaveIter =
1405 cellAddedFaces.find(fp.slaveCell());
1406 if (cafSlaveIter == cellAddedFaces.end())
1408 cellAddedFaces.insert
1411 SLList<face>(intersectedFace.reverseFace())
1416 cafSlaveIter().append(intersectedFace.reverseFace());
1421 if (couples_.size())
1424 const labelList crfToc = cellRemovedFaces.toc();
1428 const label curCell = crfToc[celli];
1430 const SLList<label>& curRemovedFaces = cellRemovedFaces[curCell];
1435 curRemovedFaces.begin();
1436 curRemovedFacesIter != curRemovedFaces.end();
1437 ++curRemovedFacesIter
1440 cellFaces_[curCell][curRemovedFacesIter()].
setSize(0);
1443 if (curRemovedFaces.size())
1446 cellShapes_[curCell] = cellShape(*unknownPtr_,
labelList(0));
1450 const labelList cafToc = cellAddedFaces.toc();
1455 const label curCell = cafToc[celli];
1457 const SLList<face>& curAddedFaces = cellAddedFaces[curCell];
1459 faceList oldFaces = cellFaces_[curCell];
1461 faceList& newFaces = cellFaces_[curCell];
1463 newFaces.
setSize(oldFaces.size() + curAddedFaces.size());
1464 label nNewFaces = 0;
1469 if (oldFaces[facei].size())
1471 newFaces[nNewFaces] = oldFaces[facei];
1480 curAddedFaces.begin();
1481 curAddedFacesIter != curAddedFaces.end();
1485 newFaces[nNewFaces] = curAddedFacesIter();
1490 newFaces.setSize(nNewFaces);
1492 if (curAddedFaces.size())
1495 cellShapes_[curCell] = cellShape(*unknownPtr_,
labelList(0));
1503 Info<<
"Finished doing couples" <<
endl;
dimensionedScalar acos(const dimensionedScalar &ds)
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
scalar radToDeg(const scalar rad)
Conversion from radians to degrees.
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Unit conversion functions.
void size(const label)
Override size to be inconsistent with allocated storage.
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
Ostream & endl(Ostream &os)
Add newline and flush stream.
Vector< scalar > vector
A scalar version of the templated Vector.
List< bool > boolList
Bool container classes.
const Vector< Cmpt > & centre(const Foam::List< Vector< Cmpt >> &) const
Return *this (used for point which is a typedef to Vector<scalar>.
Omanip< int > setprecision(const int i)
tmp< fvMatrix< Type > > S(const Pair< tmp< volScalarField::Internal >> &, const GeometricField< Type, fvPatchField, volMesh > &)
static const label labelMax
List< label > labelList
A List of labels.
errorManip< error > abort(error &err)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
Istream and Ostream manipulators taking arguments.
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
friend class const_iterator
void setSize(const label)
Reset size of List.
vector point
Point is a vector.
dimensioned< scalar > mag(const dimensioned< Type > &)
const doubleScalar e
Elementary charge.
PointHit< point > pointHit