106 packedLst[packedI++] = i;
109 packedLst.setSize(packedI);
124 packedElems[packedI++] = elems[i];
138 const scalar cosAngle,
139 const scalar sinAngle,
151 bool sameFaceOrder = !((own[f0] == cellI) ^ (own[f1] == cellI));
155 scalar normalCosAngle = n0 & n1;
159 normalCosAngle = -normalCosAngle;
167 c1c0 /=
mag(c1c0) + VSMALL;
169 scalar fcCosAngle = n0 & c1c0;
171 if (own[f0] != cellI)
173 fcCosAngle = -fcCosAngle;
186 if (normalCosAngle < cosAngle)
207 if (normalCosAngle > cosAngle)
238 const edge&
e = edges[edgeI];
248 const cell& cFaces = mesh.
cells()[cellI];
252 label faceI = cFaces[i];
254 const face&
f = faces[faceI];
293 if (leftI == -1 || rightI == -1)
301 const face& leftF = faces[leftI];
303 label leftV = leftF[(leftFp + 2) % leftF.
size()];
305 const face& rightF = faces[rightI];
307 label rightV = rightF[(rightFp + 2) % rightF.
size()];
310 loop[0] = ev.vertToEVert(e[0]);
311 loop[1] = ev.vertToEVert(leftV);
312 loop[2] = ev.vertToEVert(rightV);
313 loop[3] = ev.vertToEVert(e[1]);
316 loopWeights[0] = -GREAT;
317 loopWeights[1] = -GREAT;
318 loopWeights[2] = -GREAT;
319 loopWeights[3] = -GREAT;
323 cellEdgeWeights.
append(loopWeights);
353 vector planeN = eVec ^ halfNorm;
358 planeN += 0.01*halfNorm;
360 planeN /=
mag(planeN);
385 cellEdgeWeights.
append(loopWeights);
432 iter != cellsToCut.
end();
436 label cellI = iter.key();
438 const labelList& cEdges = cellEdges[cellI];
442 label edgeI = cEdges[i];
447 vector n0 = faceAreas[f0];
450 vector n1 = faceAreas[f1];
469 bool splitOk =
false;
471 if (!geometry && cellShapes[cellI].model() == hex)
489 if ((own[f0] == cellI) ^ (own[f1] == cellI))
492 halfNorm = 0.5*(n0 - n1);
498 halfNorm = 0.5*(n0 + n1);
524 label index = cellLoops.
size() - 1;
525 const labelList& loop = cellLoops[index];
526 const scalarField& loopWeights = cellEdgeWeights[index];
534 edgeIsCut[ev.getEdge(cut)] =
true;
535 edgeWeight[ev.getEdge(cut)] = loopWeights[i];
539 vertIsCut[ev.getVertex(cut)] =
true;
558 int main(
int argc,
char *argv[])
569 runTime.functionObjects().off();
583 scalar edgeTol = 0.2;
586 Info<<
"Trying to split cells with internal angles > feature angle\n" <<
nl
587 <<
"featureAngle : " << featureAngle <<
nl
588 <<
"edge snapping tol : " << edgeTol <<
nl;
595 Info<<
"candidate cells : all cells" <<
nl;
599 Info<<
"hex cuts : geometric; using edge tolerance" <<
nl;
603 Info<<
"hex cuts : topological; cut to opposite edge" <<
nl;
629 for (label cellI = 0; cellI < mesh.
nCells(); cellI++)
658 cutSet.insert(cutCells[i]);
662 Info<<
"Writing " << cutSet.size() <<
" cells to cut to cellSet "
663 << cutSet.instance()/cutSet.local()/cutSet.name()
676 Info<<
"Actually cut cells:" << cuts.nLoops() << nl <<
endl;
678 if (cuts.nLoops() == 0)
684 forAll(cuts.cellLoops(), cellI)
686 if (cuts.cellLoops()[cellI].size())
690 cellsToCut.
erase(cellI);
701 cutter.setRefinement(cuts, meshMod);
713 if (morphMap().hasMotionPoints())
715 mesh.
movePoints(morphMap().preMotionPoints());
719 cutter.updateMesh(morphMap());
732 Info<<
"Writing refined morphMesh to time " << runTime.timeName()