45 void Foam::faMesh::calcLduAddressing()
const
48 <<
"Calculating addressing" <<
endl;
53 <<
"lduPtr_ already allocated"
57 lduPtr_ =
new faMeshLduAddressing(*
this);
61 void Foam::faMesh::calcPatchStarts()
const
64 <<
"Calculating patch starts" <<
endl;
69 <<
"patchStartsPtr_ already allocated"
74 labelList& patchStarts = *patchStartsPtr_;
76 patchStarts[0] = nInternalEdges();
78 for (label i = 1; i <
boundary().size(); ++i)
81 patchStarts[i - 1] +
boundary()[i - 1].faPatch::size();
86 void Foam::faMesh::calcLe()
const
89 <<
"Calculating local edges" <<
endl;
94 <<
"LePtr_ already allocated"
104 mesh().pointsInstance(),
124 const vectorField& edgeNormalsInternal = edgeNormals.internalField();
125 const vectorField& fCentresInternal = fCentres.internalField();
126 const vectorField& eCentresInternal = eCentres.internalField();
127 const scalarField& magLeInternal = magLe().internalField();
132 pEdges[edgeI].vec(pPoints) ^ edgeNormalsInternal[edgeI];
139 fCentresInternal[owner()[edgeI]]
140 - eCentresInternal[edgeI]
145 magLeInternal[edgeI]/
mag(leInternal[edgeI]);
153 boundary()[patchI].patchSlice(pEdges);
156 edgeNormals.boundaryField()[patchI];
158 vectorField& patchLe = Le.boundaryFieldRef()[patchI];
159 const vectorField& patchECentres = eCentres.boundaryField()[patchI];
164 bndEdges[edgeI].vec(pPoints) ^ bndEdgeNormals[edgeI];
171 fCentresInternal[bndEdgeFaces[edgeI]]
172 - patchECentres[edgeI]
177 magLe().boundaryField()[patchI][edgeI]
178 /
mag(patchLe[edgeI]);
184 void Foam::faMesh::calcMagLe()
const
187 <<
"Calculating local edge magnitudes" <<
endl;
192 <<
"magLePtr_ already allocated"
202 mesh().pointsInstance(),
218 forAll(internalEdges, edgeI)
220 magLe.ref()[edgeI] = internalEdges[edgeI].mag(localPoints);
227 boundary()[patchI].patchSlice(edges());
231 magLe.boundaryFieldRef()[patchI][edgeI] =
232 patchEdges[edgeI].mag(localPoints);
238 void Foam::faMesh::calcAreaCentres()
const
241 <<
"Calculating face centres" <<
endl;
246 <<
"centresPtr_ already allocated"
256 mesh().pointsInstance(),
267 const faceList& localFaces = faces();
271 centres.ref()[faceI] = localFaces[faceI].centre(localPoints);
277 boundary()[patchI].patchSlice(edges());
281 centres.boundaryFieldRef()[patchI][edgeI] =
282 patchEdges[edgeI].centre(localPoints);
286 forAll(centres.boundaryField(), patchI)
291 isA<processorFaPatchVectorField>
293 centres.boundaryField()[patchI]
297 centres.boundaryFieldRef()[patchI].initEvaluate();
298 centres.boundaryFieldRef()[patchI].evaluate();
304 void Foam::faMesh::calcEdgeCentres()
const
307 <<
"Calculating edge centres" <<
endl;
312 <<
"edgeCentresPtr_ already allocated"
322 mesh().pointsInstance(),
338 forAll(internalEdges, edgeI)
340 edgeCentres.ref()[edgeI] = internalEdges[edgeI].centre(localPoints);
347 boundary()[patchI].patchSlice(edges());
351 edgeCentres.boundaryFieldRef()[patchI][edgeI] =
352 patchEdges[edgeI].centre(localPoints);
358 void Foam::faMesh::calcS()
const
361 <<
"Calculating areas" <<
endl;
366 <<
"SPtr_ already allocated"
370 SPtr_ =
new DimensionedField<scalar, areaMesh>
383 DimensionedField<scalar, areaMesh>& S = *SPtr_;
386 const faceList& localFaces = faces();
390 S[faceI] = localFaces[faceI].mag(localPoints);
395 void Foam::faMesh::calcFaceAreaNormals()
const
398 <<
"Calculating face area normals" <<
endl;
400 if (faceAreaNormalsPtr_)
403 <<
"faceAreaNormalsPtr_ already allocated"
407 faceAreaNormalsPtr_ =
413 mesh().pointsInstance(),
424 const faceList& localFaces = faces();
429 nInternal[faceI] = localFaces[faceI].unitNormal(localPoints);
434 faceAreaNormals.boundaryFieldRef()[patchI] =
435 edgeAreaNormals().boundaryField()[patchI];
438 forAll(faceAreaNormals.boundaryField(), patchI)
442 isA<processorFaPatchVectorField>
444 faceAreaNormals.boundaryField()[patchI]
448 faceAreaNormals.boundaryFieldRef()[patchI].initEvaluate();
449 faceAreaNormals.boundaryFieldRef()[patchI].evaluate();
455 void Foam::faMesh::calcEdgeAreaNormals()
const
458 <<
"Calculating edge area normals" <<
endl;
460 if (edgeAreaNormalsPtr_)
463 <<
"edgeAreaNormalsPtr_ already allocated"
467 edgeAreaNormalsPtr_ =
473 mesh().pointsInstance(),
485 const vectorField& pointNormals = pointAreaNormals();
529 forAll(edgeAreaNormals.internalField(), edgeI)
560 edgeAreaNormals.ref()[edgeI] =
561 pointNormals[edges()[edgeI].start()]
562 + pointNormals[edges()[edgeI].end()];
564 edgeAreaNormals.ref()[edgeI] -=
565 e*(
e&edgeAreaNormals.internalField()[edgeI]);
568 edgeAreaNormals.ref() /=
mag(edgeAreaNormals.internalField());
573 boundary()[patchI].patchSlice(edges());
577 edgeAreaNormals.boundaryFieldRef()[patchI][edgeI] =
578 pointNormals[patchEdges[edgeI].start()]
579 + pointNormals[patchEdges[edgeI].end()];
583 edgeAreaNormals.boundaryFieldRef()[patchI][edgeI] -=
584 e*(
e&edgeAreaNormals.boundaryField()[patchI][edgeI]);
587 edgeAreaNormals.boundaryFieldRef()[patchI] /=
588 mag(edgeAreaNormals.boundaryField()[patchI]);
593 void Foam::faMesh::calcFaceCurvatures()
const
596 <<
"Calculating face curvatures" <<
endl;
598 if (faceCurvaturesPtr_)
601 <<
"faceCurvaturesPtr_ already allocated"
611 mesh().pointsInstance(),
628 faceCurvatures =
sign(kN&faceAreaNormals())*
mag(kN);
632 void Foam::faMesh::calcEdgeTransformTensors()
const
635 <<
"Calculating edge transformation tensors" <<
endl;
637 if (edgeTransformTensorsPtr_)
640 <<
"edgeTransformTensorsPtr_ already allocated"
644 edgeTransformTensorsPtr_ =
new FieldField<Field, tensor>(nEdges());
645 FieldField<Field, tensor>& edgeTransformTensors =
646 *edgeTransformTensorsPtr_;
655 for (label edgeI=0; edgeI<nInternalEdges(); ++edgeI)
657 edgeTransformTensors.set(edgeI,
new Field<tensor>(3,
I));
659 vector E = Ce.internalField()[edgeI];
663 E -= skewCorrectionVectors().internalField()[edgeI];
667 vector il = E - Cf.internalField()[owner()[edgeI]];
669 il -= Ne.internalField()[edgeI]
670 *(Ne.internalField()[edgeI]&il);
674 vector kl = Ne.internalField()[edgeI];
677 edgeTransformTensors[edgeI][0] =
680 il.x(), il.y(), il.z(),
681 jl.x(), jl.y(), jl.z(),
682 kl.x(), kl.y(), kl.z()
686 il = E - Cf.internalField()[owner()[edgeI]];
688 il -= Nf.internalField()[owner()[edgeI]]
689 *(Nf.internalField()[owner()[edgeI]]&il);
693 kl = Nf.internalField()[owner()[edgeI]];
696 edgeTransformTensors[edgeI][1] =
699 il.x(), il.y(), il.z(),
700 jl.x(), jl.y(), jl.z(),
701 kl.x(), kl.y(), kl.z()
705 il = Cf.internalField()[neighbour()[edgeI]] - E;
707 il -= Nf.internalField()[neighbour()[edgeI]]
708 *(Nf.internalField()[neighbour()[edgeI]]&il);
712 kl = Nf.internalField()[neighbour()[edgeI]];
715 edgeTransformTensors[edgeI][2] =
718 il.x(), il.y(), il.z(),
719 jl.x(), jl.y(), jl.z(),
720 kl.x(), kl.y(), kl.z()
732 vectorField ngbCf(Cf.boundaryField()[patchI].patchNeighbourField());
734 vectorField ngbNf(Nf.boundaryField()[patchI].patchNeighbourField());
738 edgeTransformTensors.set
741 new Field<tensor>(3,
I)
744 vector E = Ce.boundaryField()[patchI][edgeI];
748 E -= skewCorrectionVectors()
749 .boundaryField()[patchI][edgeI];
753 vector il = E - Cf.internalField()[edgeFaces[edgeI]];
755 il -= Ne.boundaryField()[patchI][edgeI]
756 *(Ne.boundaryField()[patchI][edgeI]&il);
760 vector kl = Ne.boundaryField()[patchI][edgeI];
763 edgeTransformTensors[
boundary()[patchI].start() + edgeI][0] =
767 il = E - Cf.internalField()[edgeFaces[edgeI]];
769 il -= Nf.internalField()[edgeFaces[edgeI]]
770 *(Nf.internalField()[edgeFaces[edgeI]]&il);
774 kl = Nf.internalField()[edgeFaces[edgeI]];
777 edgeTransformTensors[
boundary()[patchI].start() + edgeI][1] =
781 il = ngbCf[edgeI] - E;
783 il -= ngbNf[edgeI]*(ngbNf[edgeI]&il);
791 edgeTransformTensors[
boundary()[patchI].start() + edgeI][2] =
801 edgeTransformTensors.set
804 new Field<tensor>(3,
I)
807 vector E = Ce.boundaryField()[patchI][edgeI];
811 E -= skewCorrectionVectors()
812 .boundaryField()[patchI][edgeI];
816 vector il = E - Cf.internalField()[edgeFaces[edgeI]];
818 il -= Ne.boundaryField()[patchI][edgeI]
819 *(Ne.boundaryField()[patchI][edgeI]&il);
823 vector kl = Ne.boundaryField()[patchI][edgeI];
826 edgeTransformTensors[
boundary()[patchI].start() + edgeI][0] =
830 il = E - Cf.internalField()[edgeFaces[edgeI]];
832 il -= Nf.internalField()[edgeFaces[edgeI]]
833 *(Nf.internalField()[edgeFaces[edgeI]]&il);
837 kl = Nf.internalField()[edgeFaces[edgeI]];
840 edgeTransformTensors[
boundary()[patchI].start() + edgeI][1] =
851 <<
"Calculating internal points" <<
endl;
854 label nIntEdges =
patch().nInternalEdges();
858 for (label curEdge = nIntEdges; curEdge < edges.size(); ++curEdge)
860 internal[edges[curEdge].start()] =
false;
862 internal[edges[curEdge].end()] =
false;
869 if (
internal[pointI])
871 internalPoints.
append(pointI);
884 <<
"Calculating boundary points" <<
endl;
887 label nIntEdges =
patch().nInternalEdges();
891 for (label curEdge = nIntEdges; curEdge < edges.size(); ++curEdge)
893 internal[edges[curEdge].start()] =
false;
895 internal[edges[curEdge].end()] =
false;
902 if (!
internal[pointI])
904 boundaryPoints.
append(pointI);
914 void Foam::faMesh::calcPointAreaNormals()
const
916 if (pointAreaNormalsPtr_)
919 <<
"pointAreaNormalsPtr_ already allocated"
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 (
int 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();
1042 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 reinterpret_cast<const char*
>(patchPointNormals.cdata()),
1093 patchPointNormals.byteSize()
1099 procPatch.neighbPoints().size(),
1107 procPatch.neighbProcNo(),
1108 reinterpret_cast<char*
>(ngbPatchPointNormals.data()),
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() == -1)
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]]);
1191 result /=
mag(result);
1195 void Foam::faMesh::calcPointAreaNormalsByQuadricsFit()
const
1199 const labelList intPoints(internalPoints());
1200 const labelList bndPoints(boundaryPoints());
1206 forAll(intPoints, pointI)
1208 label curPoint = intPoints[pointI];
1211 const labelList curFaces(faceSet.toc());
1215 pointSet.
insert(curPoint);
1216 for (label i=0; i<curFaces.size(); ++i)
1218 const labelList& facePoints = faces[curFaces[i]];
1219 for (label j=0; j<facePoints.size(); ++j)
1221 if (!pointSet.found(facePoints[j]))
1223 pointSet.insert(facePoints[j]);
1227 pointSet.erase(curPoint);
1230 if (curPoints.size() < 5)
1233 <<
"WARNING: Extending point set for fitting." <<
endl;
1240 patch().faceFaces()[curFaces[faceI]];
1244 label curFaceFace = curFaceFaces[fI];
1246 if (!faceSet.found(curFaceFace))
1248 faceSet.insert(curFaceFace);
1252 curFaces = faceSet.toc();
1256 pointSet.
insert(curPoint);
1257 for (label i=0; i<curFaces.size(); ++i)
1259 const labelList& facePoints = faces[curFaces[i]];
1260 for (label j=0; j<facePoints.size(); ++j)
1262 if (!pointSet.found(facePoints[j]))
1264 pointSet.insert(facePoints[j]);
1269 pointSet.erase(curPoint);
1270 curPoints = pointSet.toc();
1275 for (label i=0; i<curPoints.size(); ++i)
1282 coordSystem::cartesian cs
1291 p = cs.localPosition(
p);
1301 for (label i = 0; i <
allPoints.size(); ++i)
1312 for (label i = 0; i < MtM.n(); ++i)
1314 for (label j = 0; j < MtM.m(); ++j)
1316 for (label
k = 0;
k <
M.n(); ++
k)
1318 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
1325 for (label i=0; i<MtR.size(); ++i)
1327 for (label j=0; j<
M.n(); ++j)
1337 curNormal = cs.globalVector(curNormal);
1339 curNormal *=
sign(curNormal&result[curPoint]);
1341 result[curPoint] = curNormal;
1347 const faPatch& fap =
boundary()[patchI];
1351 const processorFaPatch& procPatch =
1352 refCast<const processorFaPatch>(
boundary()[patchI]);
1354 const labelList& patchPointLabels = procPatch.pointLabels();
1356 labelList toNgbProcLsPointStarts(patchPointLabels.size(),
Zero);
1359 10*patchPointLabels.size(),
1364 for (label pointI=0; pointI<patchPointLabels.size(); ++pointI)
1366 label curPoint = patchPointLabels[pointI];
1368 toNgbProcLsPointStarts[pointI] =
nPoints;
1371 const labelList curFaces(faceSet.toc());
1375 pointSet.
insert(curPoint);
1376 for (label i=0; i<curFaces.size(); ++i)
1378 const labelList& facePoints = faces[curFaces[i]];
1379 for (label j=0; j<facePoints.size(); ++j)
1381 if (!pointSet.found(facePoints[j]))
1383 pointSet.insert(facePoints[j]);
1387 pointSet.erase(curPoint);
1390 for (label i=0; i<curPoints.size(); ++i)
1396 toNgbProcLsPoints.setSize(
nPoints);
1399 OPstream toNeighbProc
1402 procPatch.neighbProcNo(),
1403 toNgbProcLsPoints.byteSize()
1404 + toNgbProcLsPointStarts.byteSize()
1409 << toNgbProcLsPoints
1410 << toNgbProcLsPointStarts;
1415 for (
const faPatch& fap :
boundary())
1419 const processorFaPatch& procPatch =
1420 refCast<const processorFaPatch>(fap);
1422 const labelList& patchPointLabels = procPatch.pointLabels();
1424 labelList fromNgbProcLsPointStarts(patchPointLabels.size(),
Zero);
1428 IPstream fromNeighbProc
1431 procPatch.neighbProcNo(),
1432 10*patchPointLabels.size()*
sizeof(
vector)
1433 + fromNgbProcLsPointStarts.byteSize()
1438 >> fromNgbProcLsPoints
1439 >> fromNgbProcLsPointStarts;
1443 procPatch.nonGlobalPatchPoints();
1445 forAll(nonGlobalPatchPoints, pointI)
1448 patchPointLabels[nonGlobalPatchPoints[pointI]];
1450 procPatch.neighbPoints()[nonGlobalPatchPoints[pointI]];
1453 faceSet.
insert(pointFaces[curPoint]);
1459 pointSet.
insert(curPoint);
1460 for (label i=0; i<curFaces.size(); ++i)
1462 const labelList& facePoints = faces[curFaces[i]];
1463 for (label j=0; j<facePoints.size(); ++j)
1465 if (!pointSet.found(facePoints[j]))
1467 pointSet.insert(facePoints[j]);
1471 pointSet.erase(curPoint);
1474 label nAllPoints = curPoints.size();
1476 if (curNgbPoint == fromNgbProcLsPointStarts.size() - 1)
1479 fromNgbProcLsPoints.size()
1480 - fromNgbProcLsPointStarts[curNgbPoint];
1485 fromNgbProcLsPointStarts[curNgbPoint + 1]
1486 - fromNgbProcLsPointStarts[curNgbPoint];
1491 for (label i=0; i<curPoints.size(); ++i)
1493 allPointsExt[counter++] =
points[curPoints[i]];
1496 if (curNgbPoint == fromNgbProcLsPointStarts.size() - 1)
1500 label i=fromNgbProcLsPointStarts[curNgbPoint];
1501 i<fromNgbProcLsPoints.size();
1505 allPointsExt[counter++] = fromNgbProcLsPoints[i];
1512 label i=fromNgbProcLsPointStarts[curNgbPoint];
1513 i<fromNgbProcLsPointStarts[curNgbPoint+1];
1517 allPointsExt[counter++] = fromNgbProcLsPoints[i];
1523 boundBox bb(allPointsExt,
false);
1524 scalar tol = 0.001*
mag(bb.max() - bb.min());
1529 bool duplicate =
false;
1530 for (label i=0; i<nAllPoints; ++i)
1549 allPoints[nAllPoints++] = allPointsExt[pI];
1558 <<
"There are no enough points for quadrics "
1559 <<
"fitting for a point at processor patch"
1567 dir -= axis*(axis&dir);
1570 const coordinateSystem cs(
"cs", origin, axis, dir);
1588 for (label i=0; i<
allPoints.size(); ++i)
1599 for (label i = 0; i < MtM.n(); ++i)
1601 for (label j = 0; j < MtM.m(); ++j)
1603 for (label
k = 0;
k <
M.n(); ++
k)
1605 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
1612 for (label i = 0; i < MtR.size(); ++i)
1614 for (label j = 0; j <
M.n(); ++j)
1624 curNormal = cs.globalVector(curNormal);
1626 curNormal *=
sign(curNormal&result[curPoint]);
1628 result[curPoint] = curNormal;
1634 if (globalData().nGlobalPoints() > 0)
1636 const labelList& spLabels = globalData().sharedPointLabels();
1638 const labelList& addr = globalData().sharedPointAddr();
1640 for (label
k=0;
k<globalData().nGlobalPoints(); ++
k)
1644 const label curSharedPointIndex = addr.find(
k);
1648 if (curSharedPointIndex != -1)
1650 label curPoint = spLabels[curSharedPointIndex];
1653 const labelList curFaces(faceSet.toc());
1656 pointSet.
insert(curPoint);
1657 for (label i=0; i<curFaces.size(); ++i)
1659 const labelList& facePoints = faces[curFaces[i]];
1660 for (label j=0; j<facePoints.size(); ++j)
1662 if (!pointSet.found(facePoints[j]))
1664 pointSet.insert(facePoints[j]);
1668 pointSet.erase(curPoint);
1675 const boundBox bb(locPoints,
false);
1676 tol = 0.001*
mag(bb.max() - bb.min());
1682 if (curSharedPointIndex != -1)
1684 label curPoint = spLabels[curSharedPointIndex];
1686 label nAllPoints = 0;
1687 forAll(procLsPoints, procI)
1689 nAllPoints += procLsPoints[procI].size();
1695 forAll(procLsPoints, procI)
1697 forAll(procLsPoints[procI], pointI)
1699 bool duplicate =
false;
1700 for (label i=0; i<nAllPoints; ++i)
1707 - procLsPoints[procI][pointI]
1720 procLsPoints[procI][pointI];
1730 <<
"There are no enough points for quadratic "
1731 <<
"fitting for a global processor point "
1739 dir -= axis*(axis&dir);
1742 coordinateSystem cs(
"cs", origin, axis, dir);
1761 for (label i=0; i<
allPoints.size(); ++i)
1771 for (label i = 0; i < MtM.n(); ++i)
1773 for (label j = 0; j < MtM.m(); ++j)
1775 for (label
k = 0;
k <
M.n(); ++
k)
1777 MtM[i][j] +=
M[
k][i]*
M[
k][j]*W[
k];
1783 for (label i = 0; i < MtR.size(); ++i)
1785 for (label j = 0; j <
M.n(); ++j)
1795 curNormal = cs.globalVector(curNormal);
1797 curNormal *=
sign(curNormal&result[curPoint]);
1799 result[curPoint] = curNormal;
1804 result /=
mag(result);
1811 <<
"Calculating edge length correction" <<
endl;
1819 "edgeLengthCorrection",
1820 mesh().pointsInstance(),
1830 const vectorField& pointNormals = pointAreaNormals();
1834 scalar sinAlpha =
mag
1836 pointNormals[edges()[edgeI].start()]^
1837 pointNormals[edges()[edgeI].
end()]
1850 boundary()[patchI].patchSlice(edges())
1853 forAll(patchEdges, edgeI)
1858 pointNormals[patchEdges[edgeI].start()]
1859 ^ pointNormals[patchEdges[edgeI].
end()]