74 return s < VSMALL ?
Zero : (a ^
b) /
s;
84 const point& basePoint,
85 const point& rightPoint,
86 const point& leftPoint,
87 const point& centrePoint
90 const vector mid(centrePoint - basePoint);
96 0.5*(rightPoint - basePoint),
102 0.5*(leftPoint - basePoint)
117 bitSet markPoints(
p.nPoints());
118 for (
const edge&
e :
p.boundaryEdges())
121 markPoints.
set(
e.first());
122 markPoints.set(
e.second());
134 void Foam::faMesh::calcLduAddressing()
const
137 <<
"Calculating addressing" <<
endl;
142 <<
"lduPtr_ already allocated"
146 lduPtr_ =
new faMeshLduAddressing(*
this);
150 void Foam::faMesh::calcPatchStarts()
const
153 <<
"Calculating patch starts" <<
endl;
158 <<
"patchStartsPtr_ already allocated"
166 void Foam::faMesh::calcLe()
const
169 <<
"Calculating local edges" <<
endl;
174 <<
"LePtr_ already allocated"
184 mesh().pointsInstance(),
204 const vectorField& edgeNormalsInternal = edgeNormals.internalField();
205 const vectorField& fCentresInternal = fCentres.internalField();
206 const vectorField& eCentresInternal = eCentres.internalField();
207 const scalarField& magLeInternal = magLe().internalField();
212 pEdges[edgeI].vec(pPoints) ^ edgeNormalsInternal[edgeI];
219 fCentresInternal[owner()[edgeI]]
220 - eCentresInternal[edgeI]
225 magLeInternal[edgeI]/
mag(leInternal[edgeI]);
233 boundary()[patchI].patchSlice(pEdges);
236 edgeNormals.boundaryField()[patchI];
238 vectorField& patchLe = Le.boundaryFieldRef()[patchI];
239 const vectorField& patchECentres = eCentres.boundaryField()[patchI];
244 bndEdges[edgeI].vec(pPoints) ^ bndEdgeNormals[edgeI];
251 fCentresInternal[bndEdgeFaces[edgeI]]
252 - patchECentres[edgeI]
257 magLe().boundaryField()[patchI][edgeI]
258 /
mag(patchLe[edgeI]);
264 void Foam::faMesh::calcMagLe()
const
267 <<
"Calculating local edge magnitudes" <<
endl;
272 <<
"magLePtr_ already allocated"
282 mesh().pointsInstance(),
295 for (
const edge&
e :
patch().internalEdges())
297 magLe.ref()[edgei] =
e.mag(localPoints);
305 boundary()[patchI].patchSlice(edges());
309 magLe.boundaryFieldRef()[patchI][edgeI] =
310 patchEdges[edgeI].mag(localPoints);
316 void Foam::faMesh::calcAreaCentres()
const
319 <<
"Calculating face centres" <<
endl;
324 <<
"centresPtr_ already allocated"
334 mesh().pointsInstance(),
345 const faceList& localFaces = faces();
349 centres.ref()[faceI] = localFaces[faceI].centre(localPoints);
355 boundary()[patchI].patchSlice(edges());
359 centres.boundaryFieldRef()[patchI][edgeI] =
360 patchEdges[edgeI].centre(localPoints);
364 forAll(centres.boundaryField(), patchI)
369 isA<processorFaPatchVectorField>
371 centres.boundaryField()[patchI]
375 centres.boundaryFieldRef()[patchI].initEvaluate();
376 centres.boundaryFieldRef()[patchI].evaluate();
382 void Foam::faMesh::calcEdgeCentres()
const
385 <<
"Calculating edge centres" <<
endl;
390 <<
"edgeCentresPtr_ already allocated"
400 mesh().pointsInstance(),
414 for (
const edge&
e :
patch().internalEdges())
416 edgeCentres.ref()[edgei] =
e.centre(localPoints);
424 boundary()[patchI].patchSlice(edges());
428 edgeCentres.boundaryFieldRef()[patchI][edgeI] =
429 patchEdges[edgeI].centre(localPoints);
435 void Foam::faMesh::calcS()
const
438 <<
"Calculating areas" <<
endl;
443 <<
"SPtr_ already allocated"
447 SPtr_ =
new DimensionedField<scalar, areaMesh>
460 DimensionedField<scalar, areaMesh>& S = *SPtr_;
463 const faceList& localFaces = faces();
467 S[faceI] = localFaces[faceI].mag(localPoints);
472 void Foam::faMesh::calcFaceAreaNormals()
const
475 <<
"Calculating face area normals" <<
endl;
477 if (faceAreaNormalsPtr_)
480 <<
"faceAreaNormalsPtr_ already allocated"
484 faceAreaNormalsPtr_ =
490 mesh().pointsInstance(),
501 const faceList& localFaces = faces();
506 nInternal[faceI] = localFaces[faceI].unitNormal(localPoints);
511 faceAreaNormals.boundaryFieldRef()[patchI] =
512 edgeAreaNormals().boundaryField()[patchI];
515 forAll(faceAreaNormals.boundaryField(), patchI)
519 isA<processorFaPatchVectorField>
521 faceAreaNormals.boundaryField()[patchI]
525 faceAreaNormals.boundaryFieldRef()[patchI].initEvaluate();
526 faceAreaNormals.boundaryFieldRef()[patchI].evaluate();
532 void Foam::faMesh::calcEdgeAreaNormals()
const
535 <<
"Calculating edge area normals" <<
endl;
537 if (edgeAreaNormalsPtr_)
540 <<
"edgeAreaNormalsPtr_ already allocated"
544 edgeAreaNormalsPtr_ =
550 mesh().pointsInstance(),
562 const vectorField& pointNormals = pointAreaNormals();
564 forAll(edgeAreaNormals.internalField(), edgei)
566 const edge&
e = edges()[edgei];
569 vector&
n = edgeAreaNormals.ref()[edgei];
571 n = (pointNormals[
e.first()] + pointNormals[
e.second()]);
573 n -= edgeVec*(edgeVec &
n);
581 boundary()[patchi].patchSlice(edges());
583 vectorField& edgeNorms = edgeAreaNormals.boundaryFieldRef()[patchi];
587 const edge&
e = patchEdges[edgei];
592 n = (pointNormals[
e.first()] + pointNormals[
e.second()]);
594 n -= edgeVec*(edgeVec &
n);
602 void Foam::faMesh::calcFaceCurvatures()
const
605 <<
"Calculating face curvatures" <<
endl;
607 if (faceCurvaturesPtr_)
610 <<
"faceCurvaturesPtr_ already allocated"
620 mesh().pointsInstance(),
637 faceCurvatures =
sign(kN&faceAreaNormals())*
mag(kN);
641 void Foam::faMesh::calcEdgeTransformTensors()
const
644 <<
"Calculating edge transformation tensors" <<
endl;
646 if (edgeTransformTensorsPtr_)
649 <<
"edgeTransformTensorsPtr_ already allocated"
653 edgeTransformTensorsPtr_ =
new FieldField<Field, tensor>(nEdges());
654 FieldField<Field, tensor>& edgeTransformTensors =
655 *edgeTransformTensorsPtr_;
664 for (label edgeI=0; edgeI<nInternalEdges(); ++edgeI)
666 edgeTransformTensors.set(edgeI,
new Field<tensor>(3,
I));
668 vector E = Ce.internalField()[edgeI];
672 E -= skewCorrectionVectors().internalField()[edgeI];
676 vector il = E - Cf.internalField()[owner()[edgeI]];
678 il -= Ne.internalField()[edgeI]
679 *(Ne.internalField()[edgeI]&il);
683 vector kl = Ne.internalField()[edgeI];
686 edgeTransformTensors[edgeI][0] =
689 il.x(), il.y(), il.z(),
690 jl.x(), jl.y(), jl.z(),
691 kl.x(), kl.y(), kl.z()
695 il = E - Cf.internalField()[owner()[edgeI]];
697 il -= Nf.internalField()[owner()[edgeI]]
698 *(Nf.internalField()[owner()[edgeI]]&il);
702 kl = Nf.internalField()[owner()[edgeI]];
705 edgeTransformTensors[edgeI][1] =
708 il.x(), il.y(), il.z(),
709 jl.x(), jl.y(), jl.z(),
710 kl.x(), kl.y(), kl.z()
714 il = Cf.internalField()[neighbour()[edgeI]] - E;
716 il -= Nf.internalField()[neighbour()[edgeI]]
717 *(Nf.internalField()[neighbour()[edgeI]]&il);
721 kl = Nf.internalField()[neighbour()[edgeI]];
724 edgeTransformTensors[edgeI][2] =
727 il.x(), il.y(), il.z(),
728 jl.x(), jl.y(), jl.z(),
729 kl.x(), kl.y(), kl.z()
741 vectorField ngbCf(Cf.boundaryField()[patchI].patchNeighbourField());
743 vectorField ngbNf(Nf.boundaryField()[patchI].patchNeighbourField());
747 edgeTransformTensors.set
750 new Field<tensor>(3,
I)
753 vector E = Ce.boundaryField()[patchI][edgeI];
757 E -= skewCorrectionVectors()
758 .boundaryField()[patchI][edgeI];
762 vector il = E - Cf.internalField()[edgeFaces[edgeI]];
764 il -= Ne.boundaryField()[patchI][edgeI]
765 *(Ne.boundaryField()[patchI][edgeI]&il);
769 vector kl = Ne.boundaryField()[patchI][edgeI];
772 edgeTransformTensors[
boundary()[patchI].start() + edgeI][0] =
776 il = E - Cf.internalField()[edgeFaces[edgeI]];
778 il -= Nf.internalField()[edgeFaces[edgeI]]
779 *(Nf.internalField()[edgeFaces[edgeI]]&il);
783 kl = Nf.internalField()[edgeFaces[edgeI]];
786 edgeTransformTensors[
boundary()[patchI].start() + edgeI][1] =
790 il = ngbCf[edgeI] - E;
792 il -= ngbNf[edgeI]*(ngbNf[edgeI]&il);
800 edgeTransformTensors[
boundary()[patchI].start() + edgeI][2] =
810 edgeTransformTensors.set
813 new Field<tensor>(3,
I)
816 vector E = Ce.boundaryField()[patchI][edgeI];
820 E -= skewCorrectionVectors()
821 .boundaryField()[patchI][edgeI];
825 vector il = E - Cf.internalField()[edgeFaces[edgeI]];
827 il -= Ne.boundaryField()[patchI][edgeI]
828 *(Ne.boundaryField()[patchI][edgeI]&il);
832 vector kl = Ne.boundaryField()[patchI][edgeI];
835 edgeTransformTensors[
boundary()[patchI].start() + edgeI][0] =
839 il = E - Cf.internalField()[edgeFaces[edgeI]];
841 il -= Nf.internalField()[edgeFaces[edgeI]]
842 *(Nf.internalField()[edgeFaces[edgeI]]&il);
846 kl = Nf.internalField()[edgeFaces[edgeI]];
849 edgeTransformTensors[
boundary()[patchI].start() + edgeI][1] =
860 <<
"Calculating internal points" <<
endl;
872 <<
"Calculating boundary points" <<
endl;
920 void Foam::faMesh::calcPointAreaNormals_orig(
vectorField& result)
const
923 <<
"Calculating pointAreaNormals : original method" <<
endl;
935 for (
const label curPoint : intPoints)
937 faceList curFaceList(pointFaces[curPoint].size());
939 forAll(curFaceList, faceI)
941 curFaceList[faceI] = faces[pointFaces[curPoint][faceI]];
946 labelList curPointPoints = curPatch.edgeLoops()[0];
948 for (label i = 0; i < curPointPoints.size(); ++i)
951 points[curPatch.meshPoints()[curPointPoints[i]]]
956 if (i == (curPointPoints.size() - 1))
962 points[curPatch.meshPoints()[curPointPoints[
p]]]
967 scalar sinAlpha =
mag(d1^d2)/(
mag(d1)*
mag(d2));
969 scalar w = sinAlpha/(
mag(d1)*
mag(d2));
971 result[curPoint] += w*
n;
975 for (
const label curPoint : bndPoints)
977 faceList curFaceList(pointFaces[curPoint].size());
979 forAll(curFaceList, faceI)
981 curFaceList[faceI] = faces[pointFaces[curPoint][faceI]];
986 labelList agglomFacePoints = curPatch.edgeLoops()[0];
988 SLList<label> slList;
990 label curPointLabel = -1;
992 for (label i=0; i<agglomFacePoints.size(); ++i)
994 if (curPatch.meshPoints()[agglomFacePoints[i]] == curPoint)
998 else if ( curPointLabel != -1 )
1000 slList.
append(curPatch.meshPoints()[agglomFacePoints[i]]);
1004 for (label i=0; i<curPointLabel; ++i)
1006 slList.append(curPatch.meshPoints()[agglomFacePoints[i]]);
1011 for (label i=0; i < (curPointPoints.size() - 1); ++i)
1019 scalar sinAlpha =
mag(d1 ^ d2)/(
mag(d1)*
mag(d2));
1021 scalar w = sinAlpha/(
mag(d1)*
mag(d2));
1023 result[curPoint] += w*
n;
1030 const faPatch& fap =
boundary()[patchI];
1032 if (isA<wedgeFaPatch>(fap))
1034 const wedgeFaPatch& wedgePatch = refCast<const wedgeFaPatch>(fap);
1036 const labelList& patchPoints = wedgePatch.pointLabels();
1043 wedgePatch.centreNormal()
1047 for (
const label pti : patchPoints)
1049 result[pti] -=
N*(
N&result[pti]);
1053 if (wedgePatch.axisPoint() > -1)
1055 result[wedgePatch.axisPoint()] =
1059 &result[wedgePatch.axisPoint()]
1067 for (
const faPatch& fap :
boundary())
1071 const processorFaPatch& procPatch =
1072 refCast<const processorFaPatch>(fap);
1074 const labelList& patchPointLabels = procPatch.pointLabels();
1078 patchPointLabels.size(),
1082 forAll(patchPointNormals, pointI)
1084 patchPointNormals[pointI] = result[patchPointLabels[pointI]];
1091 procPatch.neighbProcNo(),
1092 patchPointNormals.cdata_bytes(),
1093 patchPointNormals.byteSize()
1099 procPatch.neighbPoints().size(),
1107 procPatch.neighbProcNo(),
1108 ngbPatchPointNormals.data_bytes(),
1109 ngbPatchPointNormals.byteSize()
1114 procPatch.nonGlobalPatchPoints();
1116 for (
const label pti : nonGlobalPatchPoints)
1118 result[patchPointLabels[pti]] +=
1119 ngbPatchPointNormals[procPatch.neighbPoints()[pti]];
1126 if (globalData().nGlobalPoints() > 0)
1128 const labelList& spLabels(globalData().sharedPointLabels());
1131 forAll(spNormals, pointI)
1133 spNormals[pointI] = result[spLabels[pointI]];
1136 const labelList& addr = globalData().sharedPointAddr();
1140 globalData().nGlobalPoints(),
1146 gpNormals[addr[i]] += spNormals[i];
1154 spNormals[i] = gpNormals[addr[i]];
1157 forAll(spNormals, pointI)
1159 result[spLabels[pointI]] = spNormals[pointI];
1167 const faPatch& fap =
boundary()[patchI];
1169 if (correctPatchPointNormals(patchI) && !fap.coupled())
1171 if (fap.ngbPolyPatchIndex() < 0)
1174 <<
"Neighbour polyPatch index is not defined "
1175 <<
"for faPatch " << fap.name()
1179 const labelList& patchPoints = fap.pointLabels();
1183 forAll(patchPoints, pointI)
1185 result[patchPoints[pointI]]
1186 -=
N[pointI]*(
N[pointI]&result[patchPoints[pointI]]);
1224 void Foam::faMesh::calcPointAreaNormals(
vectorField& result)
const
1227 <<
"Calculating pointAreaNormals : face dual method" <<
endl;
1238 for (
const face&
f : faces)
1240 const label nVerts(
f.size());
1243 for (label i = 0; i < nVerts; ++i)
1247 centrePoint /= nVerts;
1249 for (label i = 0; i < nVerts; ++i)
1251 const label pt0 =
f.thisLabel(i);
1267 bitSet nbrBoundaryAdjust(
boundary().size(),
true);
1271 const faPatch& fap =
boundary()[patchi];
1273 if (isA<wedgeFaPatch>(fap))
1277 const auto& wedgePatch = refCast<const wedgeFaPatch>(fap);
1279 const labelList& patchPoints = wedgePatch.pointLabels();
1286 wedgePatch.centreNormal()
1290 for (
const label pti : patchPoints)
1292 result[pti] -=
N*(
N&result[pti]);
1296 if (wedgePatch.axisPoint() > -1)
1298 result[wedgePatch.axisPoint()] =
1302 &result[wedgePatch.axisPoint()]
1307 nbrBoundaryAdjust.unset(patchi);
1313 const auto& procPatch = refCast<const processorFaPatch>(fap);
1315 const labelList& patchPoints = procPatch.pointLabels();
1316 const labelList& nbrPatchPoints = procPatch.neighbPoints();
1319 procPatch.nonGlobalPatchPoints();
1325 UIndirectList<vector>(result, patchPoints)
1332 procPatch.neighbProcNo(),
1333 reinterpret_cast<const char*
>(patchPointNormals.cdata()),
1334 patchPointNormals.size_bytes()
1339 patchPointNormals.resize(nbrPatchPoints.size());
1345 procPatch.neighbProcNo(),
1346 reinterpret_cast<char*
>(patchPointNormals.data()),
1347 patchPointNormals.size_bytes()
1351 for (
const label pti : nonGlobalPatchPoints)
1353 result[patchPoints[pti]] +=
1354 patchPointNormals[nbrPatchPoints[pti]];
1358 nbrBoundaryAdjust.unset(patchi);
1360 else if (fap.coupled())
1363 nbrBoundaryAdjust.unset(patchi);
1371 else if (!correctPatchPointNormals(patchi))
1374 nbrBoundaryAdjust.unset(patchi);
1380 if (globalData().nGlobalPoints())
1382 const labelList& spLabels = globalData().sharedPointLabels();
1383 const labelList& addr = globalData().sharedPointAddr();
1387 UIndirectList<vector>(result, spLabels)
1392 globalData().nGlobalPoints(),
1398 gpNormals[addr[i]] += spNormals[i];
1406 spNormals[i] = gpNormals[addr[i]];
1409 forAll(spNormals, pointI)
1411 result[spLabels[pointI]] = spNormals[pointI];
1416 if (
returnReduce(nbrBoundaryAdjust.any(), orOp<bool>()))
1421 <<
"Apply " << nbrBoundaryAdjust.count()
1422 <<
" boundary neighbour corrections" <<
nl;
1429 const auto& haloNormals = this->haloFaceNormals();
1431 Map<vector> fpNormals(4*nBoundaryEdges());
1433 for (
const label patchi : nbrBoundaryAdjust)
1435 const faPatch& fap =
boundary()[patchi];
1436 const labelList& edgeLabels = fap.edgeLabels();
1438 if (fap.ngbPolyPatchIndex() < 0)
1441 <<
"Neighbour polyPatch index is not defined "
1442 <<
"for faPatch " << fap.name()
1446 for (
const label edgei : edgeLabels)
1448 const edge&
e =
patch().edges()[edgei];
1451 const vector& fnorm = haloNormals[edgei - nInternalEdges_];
1453 fpNormals(
e.first()) += fnorm;
1454 fpNormals(
e.second()) += fnorm;
1470 const label pointi = iter.key();
1471 vector fpnorm = iter.val();
1474 result[pointi] -= fpnorm*(fpnorm & result[pointi]);
1485 void Foam::faMesh::calcPointAreaNormalsByQuadricsFit(
vectorField& result)
const
1487 const labelList intPoints(internalPoints());
1488 const labelList bndPoints(boundaryPoints());
1494 forAll(intPoints, pointI)
1496 label curPoint = intPoints[pointI];
1499 const labelList curFaces(faceSet.toc());
1503 for (
const label facei : curFaces)
1505 const labelList& facePoints = faces[facei];
1506 pointSet.insert(facePoints);
1508 pointSet.erase(curPoint);
1511 if (pointSet.size() < 5)
1514 <<
"WARNING: Extending point set for fitting." <<
endl;
1518 for (
const label facei : curFaces)
1521 faceSet.insert(curFaceFaces);
1523 curFaces = faceSet.toc();
1527 for (
const label facei : curFaces)
1529 const labelList& facePoints = faces[facei];
1530 pointSet.insert(facePoints);
1532 pointSet.erase(curPoint);
1533 curPoints = pointSet.toc();
1538 for (label i=0; i<curPoints.size(); ++i)
1545 coordSystem::cartesian cs
1554 p = cs.localPosition(
p);
1564 for (label i = 0; i <
allPoints.size(); ++i)
1575 for (label i = 0; i < MtM.n(); ++i)
1577 for (label j = 0; j < MtM.m(); ++j)
1579 for (label
k = 0;
k <
M.n(); ++
k)
1581 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
1588 for (label i=0; i<MtR.size(); ++i)
1590 for (label j=0; j<
M.n(); ++j)
1600 curNormal = cs.globalVector(curNormal);
1602 curNormal *=
sign(curNormal&result[curPoint]);
1604 result[curPoint] = curNormal;
1610 const faPatch& fap =
boundary()[patchI];
1614 const processorFaPatch& procPatch =
1615 refCast<const processorFaPatch>(
boundary()[patchI]);
1617 const labelList& patchPointLabels = procPatch.pointLabels();
1619 labelList toNgbProcLsPointStarts(patchPointLabels.size(),
Zero);
1622 10*patchPointLabels.size(),
1627 for (label pointI=0; pointI<patchPointLabels.size(); ++pointI)
1629 label curPoint = patchPointLabels[pointI];
1631 toNgbProcLsPointStarts[pointI] =
nPoints;
1634 const labelList curFaces(faceSet.toc());
1638 for (
const label facei : curFaces)
1640 const labelList& facePoints = faces[facei];
1641 pointSet.insert(facePoints);
1643 pointSet.erase(curPoint);
1646 for (label i=0; i<curPoints.size(); ++i)
1652 toNgbProcLsPoints.setSize(
nPoints);
1655 OPstream toNeighbProc
1658 procPatch.neighbProcNo(),
1659 toNgbProcLsPoints.byteSize()
1660 + toNgbProcLsPointStarts.byteSize()
1665 << toNgbProcLsPoints
1666 << toNgbProcLsPointStarts;
1671 for (
const faPatch& fap :
boundary())
1675 const processorFaPatch& procPatch =
1676 refCast<const processorFaPatch>(fap);
1678 const labelList& patchPointLabels = procPatch.pointLabels();
1680 labelList fromNgbProcLsPointStarts(patchPointLabels.size(),
Zero);
1684 IPstream fromNeighbProc
1687 procPatch.neighbProcNo(),
1688 10*patchPointLabels.size()*
sizeof(
vector)
1689 + fromNgbProcLsPointStarts.byteSize()
1694 >> fromNgbProcLsPoints
1695 >> fromNgbProcLsPointStarts;
1699 procPatch.nonGlobalPatchPoints();
1701 forAll(nonGlobalPatchPoints, pointI)
1704 patchPointLabels[nonGlobalPatchPoints[pointI]];
1706 procPatch.neighbPoints()[nonGlobalPatchPoints[pointI]];
1709 faceSet.
insert(pointFaces[curPoint]);
1715 for (
const label facei : curFaces)
1717 const labelList& facePoints = faces[facei];
1718 pointSet.insert(facePoints);
1720 pointSet.erase(curPoint);
1723 label nAllPoints = curPoints.size();
1725 if (curNgbPoint == fromNgbProcLsPointStarts.size() - 1)
1728 fromNgbProcLsPoints.size()
1729 - fromNgbProcLsPointStarts[curNgbPoint];
1734 fromNgbProcLsPointStarts[curNgbPoint + 1]
1735 - fromNgbProcLsPointStarts[curNgbPoint];
1740 for (label i=0; i<curPoints.size(); ++i)
1742 allPointsExt[counter++] =
points[curPoints[i]];
1745 if (curNgbPoint == fromNgbProcLsPointStarts.size() - 1)
1749 label i=fromNgbProcLsPointStarts[curNgbPoint];
1750 i<fromNgbProcLsPoints.size();
1754 allPointsExt[counter++] = fromNgbProcLsPoints[i];
1761 label i=fromNgbProcLsPointStarts[curNgbPoint];
1762 i<fromNgbProcLsPointStarts[curNgbPoint+1];
1766 allPointsExt[counter++] = fromNgbProcLsPoints[i];
1772 boundBox bb(allPointsExt,
false);
1773 scalar tol = 0.001*
mag(bb.max() - bb.min());
1778 bool duplicate =
false;
1779 for (label i=0; i<nAllPoints; ++i)
1798 allPoints[nAllPoints++] = allPointsExt[pI];
1807 <<
"There are no enough points for quadrics "
1808 <<
"fitting for a point at processor patch"
1816 dir -= axis*(axis&dir);
1819 const coordinateSystem cs(
"cs", origin, axis, dir);
1837 for (label i=0; i<
allPoints.size(); ++i)
1848 for (label i = 0; i < MtM.n(); ++i)
1850 for (label j = 0; j < MtM.m(); ++j)
1852 for (label
k = 0;
k <
M.n(); ++
k)
1854 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
1861 for (label i = 0; i < MtR.size(); ++i)
1863 for (label j = 0; j <
M.n(); ++j)
1873 curNormal = cs.globalVector(curNormal);
1875 curNormal *=
sign(curNormal&result[curPoint]);
1877 result[curPoint] = curNormal;
1883 if (globalData().nGlobalPoints() > 0)
1885 const labelList& spLabels = globalData().sharedPointLabels();
1887 const labelList& addr = globalData().sharedPointAddr();
1889 for (label
k=0;
k<globalData().nGlobalPoints(); ++
k)
1893 const label curSharedPointIndex = addr.find(
k);
1897 if (curSharedPointIndex != -1)
1899 label curPoint = spLabels[curSharedPointIndex];
1902 const labelList curFaces(faceSet.toc());
1905 for (
const label facei : curFaces)
1907 const labelList& facePoints = faces[facei];
1908 pointSet.insert(facePoints);
1910 pointSet.erase(curPoint);
1917 const boundBox bb(locPoints,
false);
1918 tol = 0.001*
mag(bb.max() - bb.min());
1924 if (curSharedPointIndex != -1)
1926 label curPoint = spLabels[curSharedPointIndex];
1928 label nAllPoints = 0;
1929 forAll(procLsPoints, procI)
1931 nAllPoints += procLsPoints[procI].size();
1937 forAll(procLsPoints, procI)
1939 forAll(procLsPoints[procI], pointI)
1941 bool duplicate =
false;
1942 for (label i=0; i<nAllPoints; ++i)
1949 - procLsPoints[procI][pointI]
1962 procLsPoints[procI][pointI];
1972 <<
"There are no enough points for quadratic "
1973 <<
"fitting for a global processor point "
1981 dir -= axis*(axis&dir);
1984 coordinateSystem cs(
"cs", origin, axis, dir);
2003 for (label i=0; i<
allPoints.size(); ++i)
2013 for (label i = 0; i < MtM.n(); ++i)
2015 for (label j = 0; j < MtM.m(); ++j)
2017 for (label
k = 0;
k <
M.n(); ++
k)
2019 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
2025 for (label i = 0; i < MtR.size(); ++i)
2027 for (label j = 0; j <
M.n(); ++j)
2037 curNormal = cs.globalVector(curNormal);
2039 curNormal *=
sign(curNormal&result[curPoint]);
2041 result[curPoint] = curNormal;
2056 <<
"Calculating edge length correction" <<
endl;
2064 "edgeLengthCorrection",
2065 mesh().pointsInstance(),
2075 const vectorField& pointNormals = pointAreaNormals();
2079 scalar sinAlpha =
mag
2081 pointNormals[edges()[edgeI].start()]^
2082 pointNormals[edges()[edgeI].
end()]
2095 boundary()[patchI].patchSlice(edges())
2098 forAll(patchEdges, edgeI)
2103 pointNormals[patchEdges[edgeI].start()]
2104 ^ pointNormals[patchEdges[edgeI].
end()]