mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
checking for hanging points; better debugging
This commit is contained in:
@ -62,6 +62,7 @@ namespace Foam
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::hexRef8::reorder
|
void Foam::hexRef8::reorder
|
||||||
@ -80,7 +81,7 @@ void Foam::hexRef8::reorder
|
|||||||
|
|
||||||
if (newI >= len)
|
if (newI >= len)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::reorder") << abort(FatalError);
|
FatalErrorIn("hexRef8::reorder(..)") << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newI >= 0)
|
if (newI >= 0)
|
||||||
@ -557,22 +558,11 @@ Foam::label Foam::hexRef8::getAnchorCell
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Problem.
|
// Problem.
|
||||||
|
dumpCell(cellI);
|
||||||
// Pick up points of the cell
|
|
||||||
const labelList cPoints(cellPoints(cellI));
|
|
||||||
|
|
||||||
Perr<< "cell:" << cellI << " points:" << endl;
|
|
||||||
forAll(cPoints, i)
|
|
||||||
{
|
|
||||||
label pointI = cPoints[i];
|
|
||||||
|
|
||||||
Perr<< " " << pointI << " coord:" << mesh_.points()[pointI]
|
|
||||||
<< nl;
|
|
||||||
}
|
|
||||||
Perr<< "cell:" << cellI << " anchorPoints:" << cellAnchorPoints[cellI]
|
Perr<< "cell:" << cellI << " anchorPoints:" << cellAnchorPoints[cellI]
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
FatalErrorIn("hexRef8::getAnchorCell")
|
FatalErrorIn("hexRef8::getAnchorCell(..)")
|
||||||
<< "Could not find point " << pointI
|
<< "Could not find point " << pointI
|
||||||
<< " in the anchorPoints for cell " << cellI << endl
|
<< " in the anchorPoints for cell " << cellI << endl
|
||||||
<< "Does your original mesh obey the 2:1 constraint and"
|
<< "Does your original mesh obey the 2:1 constraint and"
|
||||||
@ -690,9 +680,50 @@ Foam::label Foam::hexRef8::countAnchors
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::hexRef8::dumpCell(const label cellI) const
|
||||||
|
{
|
||||||
|
OFstream str(mesh_.time().path()/"cell_" + Foam::name(cellI) + ".obj");
|
||||||
|
Pout<< "hexRef8 : Dumping cell as obj to " << str.name() << endl;
|
||||||
|
|
||||||
|
const cell& cFaces = mesh_.cells()[cellI];
|
||||||
|
|
||||||
|
Map<label> pointToObjVert;
|
||||||
|
label objVertI = 0;
|
||||||
|
|
||||||
|
forAll(cFaces, i)
|
||||||
|
{
|
||||||
|
const face& f = mesh_.faces()[cFaces[i]];
|
||||||
|
|
||||||
|
forAll(f, fp)
|
||||||
|
{
|
||||||
|
if (pointToObjVert.insert(f[fp], objVertI))
|
||||||
|
{
|
||||||
|
meshTools::writeOBJ(str, mesh_.points()[f[fp]]);
|
||||||
|
objVertI++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(cFaces, i)
|
||||||
|
{
|
||||||
|
const face& f = mesh_.faces()[cFaces[i]];
|
||||||
|
|
||||||
|
forAll(f, fp)
|
||||||
|
{
|
||||||
|
label pointI = f[fp];
|
||||||
|
label nexPointI = f[f.fcIndex(fp)];
|
||||||
|
|
||||||
|
str << "l " << pointToObjVert[pointI]+1
|
||||||
|
<< ' ' << pointToObjVert[nexPointI]+1 << nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Find point with certain pointLevel. Skip any higher levels.
|
// Find point with certain pointLevel. Skip any higher levels.
|
||||||
Foam::label Foam::hexRef8::findLevel
|
Foam::label Foam::hexRef8::findLevel
|
||||||
(
|
(
|
||||||
|
const label faceI,
|
||||||
const face& f,
|
const face& f,
|
||||||
const label startFp,
|
const label startFp,
|
||||||
const bool searchForward,
|
const bool searchForward,
|
||||||
@ -707,7 +738,13 @@ Foam::label Foam::hexRef8::findLevel
|
|||||||
|
|
||||||
if (pointLevel_[pointI] < wantedLevel)
|
if (pointLevel_[pointI] < wantedLevel)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::findLevel")
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
if (mesh_.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
dumpCell(mesh_.faceNeighbour()[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn("hexRef8::findLevel(..)")
|
||||||
<< "face:" << f
|
<< "face:" << f
|
||||||
<< " level:" << IndirectList<label>(pointLevel_, f)()
|
<< " level:" << IndirectList<label>(pointLevel_, f)()
|
||||||
<< " startFp:" << startFp
|
<< " startFp:" << startFp
|
||||||
@ -729,7 +766,13 @@ Foam::label Foam::hexRef8::findLevel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FatalErrorIn("hexRef8::findLevel")
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
if (mesh_.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
dumpCell(mesh_.faceNeighbour()[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn("hexRef8::findLevel(..)")
|
||||||
<< "face:" << f
|
<< "face:" << f
|
||||||
<< " level:" << IndirectList<label>(pointLevel_, f)()
|
<< " level:" << IndirectList<label>(pointLevel_, f)()
|
||||||
<< " startFp:" << startFp
|
<< " startFp:" << startFp
|
||||||
@ -763,15 +806,6 @@ Foam::label Foam::hexRef8::getAnchorLevel(const label faceI) const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//FatalErrorIn("hexRef8::getAnchorLevel(const label) const")
|
|
||||||
// << "face:" << faceI
|
|
||||||
// << " centre:" << mesh_.faceCentres()[faceI]
|
|
||||||
// << " verts:" << f
|
|
||||||
// << " point levels:" << IndirectList<label>(pointLevel_, f)()
|
|
||||||
// << " own:" << mesh_.faceOwner()[faceI]
|
|
||||||
// << " ownLevel:" << cellLevel_[mesh_.faceOwner()[faceI]]
|
|
||||||
// << abort(FatalError);
|
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -797,7 +831,7 @@ void Foam::hexRef8::checkInternalOrientation
|
|||||||
|
|
||||||
if ((dir & n) < 0)
|
if ((dir & n) < 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("checkInternalOrientation")
|
FatalErrorIn("checkInternalOrientation(..)")
|
||||||
<< "cell:" << cellI << " old face:" << faceI
|
<< "cell:" << cellI << " old face:" << faceI
|
||||||
<< " newFace:" << newFace << endl
|
<< " newFace:" << newFace << endl
|
||||||
<< " coords:" << compactPoints
|
<< " coords:" << compactPoints
|
||||||
@ -812,7 +846,7 @@ void Foam::hexRef8::checkInternalOrientation
|
|||||||
|
|
||||||
if (s < 0.1 || s > 0.9)
|
if (s < 0.1 || s > 0.9)
|
||||||
{
|
{
|
||||||
FatalErrorIn("checkInternalOrientation")
|
FatalErrorIn("checkInternalOrientation(..)")
|
||||||
<< "cell:" << cellI << " old face:" << faceI
|
<< "cell:" << cellI << " old face:" << faceI
|
||||||
<< " newFace:" << newFace << endl
|
<< " newFace:" << newFace << endl
|
||||||
<< " coords:" << compactPoints
|
<< " coords:" << compactPoints
|
||||||
@ -843,7 +877,7 @@ void Foam::hexRef8::checkBoundaryOrientation
|
|||||||
|
|
||||||
if ((dir & n) < 0)
|
if ((dir & n) < 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("checkBoundaryOrientation")
|
FatalErrorIn("checkBoundaryOrientation(..)")
|
||||||
<< "cell:" << cellI << " old face:" << faceI
|
<< "cell:" << cellI << " old face:" << faceI
|
||||||
<< " newFace:" << newFace
|
<< " newFace:" << newFace
|
||||||
<< " coords:" << compactPoints
|
<< " coords:" << compactPoints
|
||||||
@ -858,7 +892,7 @@ void Foam::hexRef8::checkBoundaryOrientation
|
|||||||
|
|
||||||
if (s < 0.7 || s > 1.3)
|
if (s < 0.7 || s > 1.3)
|
||||||
{
|
{
|
||||||
WarningIn("checkBoundaryOrientation")
|
WarningIn("checkBoundaryOrientation(..)")
|
||||||
<< "cell:" << cellI << " old face:" << faceI
|
<< "cell:" << cellI << " old face:" << faceI
|
||||||
<< " newFace:" << newFace
|
<< " newFace:" << newFace
|
||||||
<< " coords:" << compactPoints
|
<< " coords:" << compactPoints
|
||||||
@ -1191,8 +1225,22 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now the face mid point is the second cLevel+1 point
|
// Now the face mid point is the second cLevel+1 point
|
||||||
label edgeMid = findLevel(f, f.fcIndex(anchorFp), true, cLevel+1);
|
label edgeMid = findLevel
|
||||||
label faceMid = findLevel(f, f.fcIndex(edgeMid), true, cLevel+1);
|
(
|
||||||
|
faceI,
|
||||||
|
f,
|
||||||
|
f.fcIndex(anchorFp),
|
||||||
|
true,
|
||||||
|
cLevel+1
|
||||||
|
);
|
||||||
|
label faceMid = findLevel
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
f,
|
||||||
|
f.fcIndex(edgeMid),
|
||||||
|
true,
|
||||||
|
cLevel+1
|
||||||
|
);
|
||||||
|
|
||||||
faceMidPointI = f[faceMid];
|
faceMidPointI = f[faceMid];
|
||||||
}
|
}
|
||||||
@ -1205,7 +1253,13 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FatalErrorIn("createInternalFaces")
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
if (mesh_.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
dumpCell(mesh_.faceNeighbour()[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatalErrorIn("createInternalFaces(..)")
|
||||||
<< "nAnchors:" << nAnchors
|
<< "nAnchors:" << nAnchors
|
||||||
<< " faceI:" << faceI
|
<< " faceI:" << faceI
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
@ -1243,9 +1297,11 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
|
|
||||||
if (edgeMidPointI == -1)
|
if (edgeMidPointI == -1)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
|
|
||||||
const labelList cPoints(cellPoints(cellI));
|
const labelList cPoints(cellPoints(cellI));
|
||||||
|
|
||||||
FatalErrorIn("createInternalFaces")
|
FatalErrorIn("createInternalFaces(..)")
|
||||||
<< "cell:" << cellI << " cLevel:" << cLevel
|
<< "cell:" << cellI << " cLevel:" << cLevel
|
||||||
<< " cell points:" << cPoints
|
<< " cell points:" << cPoints
|
||||||
<< " pointLevel:"
|
<< " pointLevel:"
|
||||||
@ -1264,7 +1320,7 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Search forward in face to clevel+1
|
// Search forward in face to clevel+1
|
||||||
label edgeMid = findLevel(f, fp1, true, cLevel+1);
|
label edgeMid = findLevel(faceI, f, fp1, true, cLevel+1);
|
||||||
|
|
||||||
edgeMidPointI = f[edgeMid];
|
edgeMidPointI = f[edgeMid];
|
||||||
}
|
}
|
||||||
@ -1314,9 +1370,11 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
|
|
||||||
if (edgeMidPointI == -1)
|
if (edgeMidPointI == -1)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
|
|
||||||
const labelList cPoints(cellPoints(cellI));
|
const labelList cPoints(cellPoints(cellI));
|
||||||
|
|
||||||
FatalErrorIn("createInternalFaces")
|
FatalErrorIn("createInternalFaces(..)")
|
||||||
<< "cell:" << cellI << " cLevel:" << cLevel
|
<< "cell:" << cellI << " cLevel:" << cLevel
|
||||||
<< " cell points:" << cPoints
|
<< " cell points:" << cPoints
|
||||||
<< " pointLevel:"
|
<< " pointLevel:"
|
||||||
@ -1335,7 +1393,14 @@ void Foam::hexRef8::createInternalFaces
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Search back to clevel+1
|
// Search back to clevel+1
|
||||||
label edgeMid = findLevel(f, fpMin1, false, cLevel+1);
|
label edgeMid = findLevel
|
||||||
|
(
|
||||||
|
faceI,
|
||||||
|
f,
|
||||||
|
fpMin1,
|
||||||
|
false,
|
||||||
|
cLevel+1
|
||||||
|
);
|
||||||
|
|
||||||
edgeMidPointI = f[edgeMid];
|
edgeMidPointI = f[edgeMid];
|
||||||
}
|
}
|
||||||
@ -1591,9 +1656,11 @@ void Foam::hexRef8::checkWantedRefinementLevels
|
|||||||
|
|
||||||
if (mag(ownLevel-neiLevel) > 1)
|
if (mag(ownLevel-neiLevel) > 1)
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
|
dumpCell(nei);
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::checkRefinementLevels(const labelList&)"
|
"hexRef8::checkWantedRefinementLevels(const labelList&)"
|
||||||
) << "cell:" << own
|
) << "cell:" << own
|
||||||
<< " current level:" << cellLevel_[own]
|
<< " current level:" << cellLevel_[own]
|
||||||
<< " level after refinement:" << ownLevel
|
<< " level after refinement:" << ownLevel
|
||||||
@ -1633,9 +1700,10 @@ void Foam::hexRef8::checkWantedRefinementLevels
|
|||||||
{
|
{
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
|
dumpCell(own);
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::checkRefinementLevels(const labelList&)"
|
"hexRef8::checkWantedRefinementLevels(const labelList&)"
|
||||||
) << "Celllevel does not satisfy 2:1 constraint."
|
) << "Celllevel does not satisfy 2:1 constraint."
|
||||||
<< " On coupled face "
|
<< " On coupled face "
|
||||||
<< faceI
|
<< faceI
|
||||||
@ -1730,6 +1798,25 @@ Foam::hexRef8::hexRef8(const polyMesh& mesh)
|
|||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
cellLevel_.size() != mesh_.nCells()
|
||||||
|
|| pointLevel_.size() != mesh_.nPoints()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"hexRef8::hexRef8(const polyMesh&)"
|
||||||
|
) << "Restarted from inconsistent cellLevel or pointLevel files."
|
||||||
|
<< endl
|
||||||
|
<< "Number of cells in mesh:" << mesh_.nCells()
|
||||||
|
<< " does not equal size of cellLevel:" << cellLevel_.size() << endl
|
||||||
|
<< "Number of points in mesh:" << mesh_.nPoints()
|
||||||
|
<< " does not equal size of pointLevel:" << pointLevel_.size()
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Check refinement levels for consistency
|
// Check refinement levels for consistency
|
||||||
checkRefinementLevels(-1, labelList(0));
|
checkRefinementLevels(-1, labelList(0));
|
||||||
|
|
||||||
@ -1806,7 +1893,24 @@ Foam::hexRef8::hexRef8
|
|||||||
) << "History enabled but number of visible cells in it "
|
) << "History enabled but number of visible cells in it "
|
||||||
<< history_.visibleCells().size()
|
<< history_.visibleCells().size()
|
||||||
<< " is not equal to the number of cells in the mesh "
|
<< " is not equal to the number of cells in the mesh "
|
||||||
<< mesh_.nCells()
|
<< mesh_.nCells() << abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
cellLevel_.size() != mesh_.nCells()
|
||||||
|
|| pointLevel_.size() != mesh_.nPoints()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"hexRef8::hexRef8(const polyMesh&, const labelList&"
|
||||||
|
", const labelList&, const refinementHistory&)"
|
||||||
|
) << "Incorrect cellLevel or pointLevel size." << endl
|
||||||
|
<< "Number of cells in mesh:" << mesh_.nCells()
|
||||||
|
<< " does not equal size of cellLevel:" << cellLevel_.size() << endl
|
||||||
|
<< "Number of points in mesh:" << mesh_.nPoints()
|
||||||
|
<< " does not equal size of pointLevel:" << pointLevel_.size()
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1877,6 +1981,24 @@ Foam::hexRef8::hexRef8
|
|||||||
savedPointLevel_(0),
|
savedPointLevel_(0),
|
||||||
savedCellLevel_(0)
|
savedCellLevel_(0)
|
||||||
{
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
cellLevel_.size() != mesh_.nCells()
|
||||||
|
|| pointLevel_.size() != mesh_.nPoints()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"hexRef8::hexRef8(const polyMesh&, const labelList&"
|
||||||
|
", const labelList&)"
|
||||||
|
) << "Incorrect cellLevel or pointLevel size." << endl
|
||||||
|
<< "Number of cells in mesh:" << mesh_.nCells()
|
||||||
|
<< " does not equal size of cellLevel:" << cellLevel_.size() << endl
|
||||||
|
<< "Number of points in mesh:" << mesh_.nPoints()
|
||||||
|
<< " does not equal size of pointLevel:" << pointLevel_.size()
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
// Check refinement levels for consistency
|
// Check refinement levels for consistency
|
||||||
checkRefinementLevels(-1, labelList(0));
|
checkRefinementLevels(-1, labelList(0));
|
||||||
|
|
||||||
@ -2356,9 +2478,13 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement
|
|||||||
|
|
||||||
if (mag(ownLevel-neiLevel) > 1)
|
if (mag(ownLevel-neiLevel) > 1)
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
|
dumpCell(nei);
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::consistentSlowRefinement"
|
"hexRef8::consistentSlowRefinement"
|
||||||
|
"(const label, const labelList&, const labelList&"
|
||||||
|
", const label, const labelList&)"
|
||||||
) << "cell:" << own
|
) << "cell:" << own
|
||||||
<< " current level:" << cellLevel_[own]
|
<< " current level:" << cellLevel_[own]
|
||||||
<< " current refData:" << allCellInfo[own]
|
<< " current refData:" << allCellInfo[own]
|
||||||
@ -2412,11 +2538,14 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement
|
|||||||
|
|
||||||
if (mag(ownLevel - nbrLevel) > 1)
|
if (mag(ownLevel - nbrLevel) > 1)
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::checkRefinementLevels(const labelList&)"
|
"hexRef8::consistentSlowRefinement"
|
||||||
|
"(const label, const labelList&, const labelList&"
|
||||||
|
", const label, const labelList&)"
|
||||||
) << "Celllevel does not satisfy 2:1 constraint."
|
) << "Celllevel does not satisfy 2:1 constraint."
|
||||||
<< " On coupled face "
|
<< " On coupled face "
|
||||||
<< faceI
|
<< faceI
|
||||||
@ -2805,7 +2934,6 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement2
|
|||||||
<< cellsToRefine.size() << " to " << newCellsToRefine.size()
|
<< cellsToRefine.size() << " to " << newCellsToRefine.size()
|
||||||
<< " cells to refine." << endl;
|
<< " cells to refine." << endl;
|
||||||
|
|
||||||
//XXXX
|
|
||||||
// Check that newCellsToRefine obeys at least 2:1.
|
// Check that newCellsToRefine obeys at least 2:1.
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2861,6 +2989,7 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement2
|
|||||||
&& savedRefineCell.get(cellI) == 0
|
&& savedRefineCell.get(cellI) == 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::consistentSlowRefinement2"
|
"hexRef8::consistentSlowRefinement2"
|
||||||
@ -2873,7 +3002,6 @@ Foam::labelList Foam::hexRef8::consistentSlowRefinement2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//XXXX
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return newCellsToRefine;
|
return newCellsToRefine;
|
||||||
@ -3342,6 +3470,7 @@ Foam::labelListList Foam::hexRef8::setRefinement
|
|||||||
{
|
{
|
||||||
if (nAnchorPoints[cellI] == 8)
|
if (nAnchorPoints[cellI] == 8)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::setRefinement(const labelList&"
|
"hexRef8::setRefinement(const labelList&"
|
||||||
@ -3365,6 +3494,8 @@ Foam::labelListList Foam::hexRef8::setRefinement
|
|||||||
{
|
{
|
||||||
if (nAnchorPoints[cellI] != 8)
|
if (nAnchorPoints[cellI] != 8)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
|
|
||||||
const labelList cPoints(cellPoints(cellI));
|
const labelList cPoints(cellPoints(cellI));
|
||||||
|
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
@ -3841,7 +3972,7 @@ Foam::labelListList Foam::hexRef8::setRefinement
|
|||||||
|
|
||||||
if (minPointI != labelMax && minPointI != mesh_.nPoints())
|
if (minPointI != labelMax && minPointI != mesh_.nPoints())
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setRefinement")
|
FatalErrorIn("hexRef8::setRefinement(..)")
|
||||||
<< "Added point labels not consecutive to existing mesh points."
|
<< "Added point labels not consecutive to existing mesh points."
|
||||||
<< nl
|
<< nl
|
||||||
<< "mesh_.nPoints():" << mesh_.nPoints()
|
<< "mesh_.nPoints():" << mesh_.nPoints()
|
||||||
@ -3995,13 +4126,6 @@ void Foam::hexRef8::updateMesh
|
|||||||
|
|
||||||
if (oldCellI == -1)
|
if (oldCellI == -1)
|
||||||
{
|
{
|
||||||
//FatalErrorIn("hexRef8::updateMesh(const mapPolyMesh&)")
|
|
||||||
// << "Problem : cell " << newCellI
|
|
||||||
// << " at " << mesh_.cellCentres()[newCellI]
|
|
||||||
// << " does not originate from another cell"
|
|
||||||
// << " (i.e. is inflated)." << nl
|
|
||||||
// << "Hence we cannot determine the new cellLevel"
|
|
||||||
// << " for it." << abort(FatalError);
|
|
||||||
newCellLevel[newCellI] = -1;
|
newCellLevel[newCellI] = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -4036,8 +4160,8 @@ void Foam::hexRef8::updateMesh
|
|||||||
//{
|
//{
|
||||||
// WarningIn("hexRef8::updateMesh(const mapPolyMesh&)")
|
// WarningIn("hexRef8::updateMesh(const mapPolyMesh&)")
|
||||||
// << "Problem : "
|
// << "Problem : "
|
||||||
// << "cellLevel_ contains illegal value -1 after mapping at cell "
|
// << "cellLevel_ contains illegal value -1 after mapping
|
||||||
// << findIndex(cellLevel_, -1) << endl
|
// << " at cell " << findIndex(cellLevel_, -1) << endl
|
||||||
// << "This means that another program has inflated cells"
|
// << "This means that another program has inflated cells"
|
||||||
// << " (created cells out-of-nothing) and hence we don't know"
|
// << " (created cells out-of-nothing) and hence we don't know"
|
||||||
// << " their cell level. Continuing with illegal value."
|
// << " their cell level. Continuing with illegal value."
|
||||||
@ -4174,7 +4298,7 @@ void Foam::hexRef8::subset
|
|||||||
|
|
||||||
if (findIndex(cellLevel_, -1) != -1)
|
if (findIndex(cellLevel_, -1) != -1)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::subset")
|
FatalErrorIn("hexRef8::subset(..)")
|
||||||
<< "Problem : "
|
<< "Problem : "
|
||||||
<< "cellLevel_ contains illegal value -1 after mapping:"
|
<< "cellLevel_ contains illegal value -1 after mapping:"
|
||||||
<< cellLevel_
|
<< cellLevel_
|
||||||
@ -4195,7 +4319,7 @@ void Foam::hexRef8::subset
|
|||||||
|
|
||||||
if (findIndex(pointLevel_, -1) != -1)
|
if (findIndex(pointLevel_, -1) != -1)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::subset")
|
FatalErrorIn("hexRef8::subset(..)")
|
||||||
<< "Problem : "
|
<< "Problem : "
|
||||||
<< "pointLevel_ contains illegal value -1 after mapping:"
|
<< "pointLevel_ contains illegal value -1 after mapping:"
|
||||||
<< pointLevel_
|
<< pointLevel_
|
||||||
@ -4292,6 +4416,7 @@ void Foam::hexRef8::checkMesh() const
|
|||||||
|
|
||||||
if (!cellToFace.insert(labelPair(own, nei[bFaceI]), faceI))
|
if (!cellToFace.insert(labelPair(own, nei[bFaceI]), faceI))
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
FatalErrorIn("hexRef8::checkMesh()")
|
FatalErrorIn("hexRef8::checkMesh()")
|
||||||
<< "Faces do not seem to be correct across coupled"
|
<< "Faces do not seem to be correct across coupled"
|
||||||
<< " boundaries" << endl
|
<< " boundaries" << endl
|
||||||
@ -4335,6 +4460,8 @@ void Foam::hexRef8::checkMesh() const
|
|||||||
const face& f = mesh_.faces()[faceI];
|
const face& f = mesh_.faces()[faceI];
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
|
||||||
FatalErrorIn("hexRef8::checkMesh()")
|
FatalErrorIn("hexRef8::checkMesh()")
|
||||||
<< "Faces do not seem to be correct across coupled"
|
<< "Faces do not seem to be correct across coupled"
|
||||||
<< " boundaries" << endl
|
<< " boundaries" << endl
|
||||||
@ -4373,6 +4500,8 @@ void Foam::hexRef8::checkMesh() const
|
|||||||
|
|
||||||
if (f.size() != nVerts[i])
|
if (f.size() != nVerts[i])
|
||||||
{
|
{
|
||||||
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
FatalErrorIn("hexRef8::checkMesh()")
|
FatalErrorIn("hexRef8::checkMesh()")
|
||||||
@ -4421,6 +4550,8 @@ void Foam::hexRef8::checkMesh() const
|
|||||||
|
|
||||||
if (mag(anchorVec - anchorPoints[i]) > smallDim)
|
if (mag(anchorVec - anchorPoints[i]) > smallDim)
|
||||||
{
|
{
|
||||||
|
dumpCell(mesh_.faceOwner()[faceI]);
|
||||||
|
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
FatalErrorIn("hexRef8::checkMesh()")
|
FatalErrorIn("hexRef8::checkMesh()")
|
||||||
@ -4487,6 +4618,9 @@ void Foam::hexRef8::checkRefinementLevels
|
|||||||
|
|
||||||
if (mag(cellLevel_[own] - cellLevel_[nei]) > 1)
|
if (mag(cellLevel_[own] - cellLevel_[nei]) > 1)
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
|
dumpCell(nei);
|
||||||
|
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::checkRefinementLevels(const label)"
|
"hexRef8::checkRefinementLevels(const label)"
|
||||||
@ -4520,6 +4654,8 @@ void Foam::hexRef8::checkRefinementLevels
|
|||||||
|
|
||||||
if (mag(cellLevel_[own] - neiLevel[i]) > 1)
|
if (mag(cellLevel_[own] - neiLevel[i]) > 1)
|
||||||
{
|
{
|
||||||
|
dumpCell(own);
|
||||||
|
|
||||||
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
label patchI = mesh_.boundaryMesh().whichPatch(faceI);
|
||||||
|
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
@ -4621,6 +4757,8 @@ void Foam::hexRef8::checkRefinementLevels
|
|||||||
> maxPointDiff
|
> maxPointDiff
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
dumpCell(cellI);
|
||||||
|
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"hexRef8::checkRefinementLevels(const label)"
|
"hexRef8::checkRefinementLevels(const label)"
|
||||||
@ -4637,6 +4775,72 @@ void Foam::hexRef8::checkRefinementLevels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Hanging points
|
||||||
|
{
|
||||||
|
// Any patches with points having only two edges.
|
||||||
|
|
||||||
|
boolList isHangingPoint(mesh_.nPoints(), false);
|
||||||
|
|
||||||
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
|
const labelList& meshPoints = pp.meshPoints();
|
||||||
|
|
||||||
|
forAll(meshPoints, i)
|
||||||
|
{
|
||||||
|
label pointI = meshPoints[i];
|
||||||
|
|
||||||
|
const labelList& pEdges = mesh_.pointEdges()[pointI];
|
||||||
|
|
||||||
|
if (pEdges.size() == 2)
|
||||||
|
{
|
||||||
|
isHangingPoint[pointI] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
syncTools::syncPointList
|
||||||
|
(
|
||||||
|
mesh_,
|
||||||
|
isHangingPoint,
|
||||||
|
andEqOp<bool>(), // only if all decide it is hanging point
|
||||||
|
true, // null
|
||||||
|
false // no separation
|
||||||
|
);
|
||||||
|
|
||||||
|
OFstream str(mesh_.time().path()/"hangingPoints.obj");
|
||||||
|
|
||||||
|
label nHanging = 0;
|
||||||
|
|
||||||
|
forAll(isHangingPoint, pointI)
|
||||||
|
{
|
||||||
|
if (isHangingPoint[pointI])
|
||||||
|
{
|
||||||
|
nHanging++;
|
||||||
|
|
||||||
|
Pout<< "Hanging boundary point " << pointI
|
||||||
|
<< " at " << mesh_.points()[pointI]
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
meshTools::writeOBJ(str, mesh_.points()[pointI]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (returnReduce(nHanging, sumOp<label>()) > 0)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"hexRef8::checkRefinementLevels(const label)"
|
||||||
|
) << "Detected a point used by two edges only (hanging point)"
|
||||||
|
<< nl << "This is not allowed"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4865,8 +5069,10 @@ Foam::labelList Foam::hexRef8::consistentUnrefinement
|
|||||||
|
|
||||||
if (maxSet)
|
if (maxSet)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::consistentUnrefinement")
|
FatalErrorIn
|
||||||
<< "maxSet not implemented yet."
|
(
|
||||||
|
"hexRef8::consistentUnrefinement(const labelList&, const bool"
|
||||||
|
) << "maxSet not implemented yet."
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4935,7 +5141,7 @@ Foam::labelList Foam::hexRef8::consistentUnrefinement
|
|||||||
{
|
{
|
||||||
if (unrefineCell.get(own) == 0)
|
if (unrefineCell.get(own) == 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::consistentUnrefinement")
|
FatalErrorIn("hexRef8::consistentUnrefinement(..)")
|
||||||
<< "problem" << abort(FatalError);
|
<< "problem" << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4953,7 +5159,7 @@ Foam::labelList Foam::hexRef8::consistentUnrefinement
|
|||||||
{
|
{
|
||||||
if (unrefineCell.get(nei) == 0)
|
if (unrefineCell.get(nei) == 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::consistentUnrefinement")
|
FatalErrorIn("hexRef8::consistentUnrefinement(..)")
|
||||||
<< "problem" << abort(FatalError);
|
<< "problem" << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4989,7 +5195,7 @@ Foam::labelList Foam::hexRef8::consistentUnrefinement
|
|||||||
{
|
{
|
||||||
if (unrefineCell.get(own) == 0)
|
if (unrefineCell.get(own) == 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::consistentUnrefinement")
|
FatalErrorIn("hexRef8::consistentUnrefinement(..)")
|
||||||
<< "problem" << abort(FatalError);
|
<< "problem" << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5003,7 +5209,7 @@ Foam::labelList Foam::hexRef8::consistentUnrefinement
|
|||||||
{
|
{
|
||||||
if (unrefineCell.get(own) == 1)
|
if (unrefineCell.get(own) == 1)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::consistentUnrefinement")
|
FatalErrorIn("hexRef8::consistentUnrefinement(..)")
|
||||||
<< "problem" << abort(FatalError);
|
<< "problem" << abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5086,8 +5292,10 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
{
|
{
|
||||||
if (!history_.active())
|
if (!history_.active())
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement()")
|
FatalErrorIn
|
||||||
<< "Only call if constructed with history capability"
|
(
|
||||||
|
"hexRef8::setUnrefinement(const labelList&, polyTopoChange&)"
|
||||||
|
) << "Only call if constructed with history capability"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5102,8 +5310,10 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
{
|
{
|
||||||
if (cellLevel_[cellI] < 0)
|
if (cellLevel_[cellI] < 0)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement()")
|
FatalErrorIn
|
||||||
<< "Illegal cell level " << cellLevel_[cellI]
|
(
|
||||||
|
"hexRef8::setUnrefinement(const labelList&, polyTopoChange&)"
|
||||||
|
) << "Illegal cell level " << cellLevel_[cellI]
|
||||||
<< " for cell " << cellI
|
<< " for cell " << cellI
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
@ -5165,8 +5375,10 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
|
|
||||||
if (facesToRemove.size() != splitFaces.size())
|
if (facesToRemove.size() != splitFaces.size())
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement")
|
FatalErrorIn
|
||||||
<< "Ininitial set of split points to unrefine does not"
|
(
|
||||||
|
"hexRef8::setUnrefinement(const labelList&, polyTopoChange&)"
|
||||||
|
) << "Ininitial set of split points to unrefine does not"
|
||||||
<< " seem to be consistent or not mid points of refined cells"
|
<< " seem to be consistent or not mid points of refined cells"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
@ -5187,8 +5399,10 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
// Check
|
// Check
|
||||||
if (pCells.size() != 8)
|
if (pCells.size() != 8)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement")
|
FatalErrorIn
|
||||||
<< "splitPoint " << pointI
|
(
|
||||||
|
"hexRef8::setUnrefinement(const labelList&, polyTopoChange&)"
|
||||||
|
) << "splitPoint " << pointI
|
||||||
<< " should have 8 cells using it. It has " << pCells
|
<< " should have 8 cells using it. It has " << pCells
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
@ -5208,7 +5422,7 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
|
|
||||||
if (region == -1)
|
if (region == -1)
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement")
|
FatalErrorIn("hexRef8::setUnrefinement(..)")
|
||||||
<< "Ininitial set of split points to unrefine does not"
|
<< "Ininitial set of split points to unrefine does not"
|
||||||
<< " seem to be consistent or not mid points"
|
<< " seem to be consistent or not mid points"
|
||||||
<< " of refined cells" << nl
|
<< " of refined cells" << nl
|
||||||
@ -5219,7 +5433,7 @@ void Foam::hexRef8::setUnrefinement
|
|||||||
|
|
||||||
if (masterCellI != cellRegionMaster[region])
|
if (masterCellI != cellRegionMaster[region])
|
||||||
{
|
{
|
||||||
FatalErrorIn("hexRef8::setUnrefinement")
|
FatalErrorIn("hexRef8::setUnrefinement(..)")
|
||||||
<< "cell:" << cellI << " on splitPoint:" << pointI
|
<< "cell:" << cellI << " on splitPoint:" << pointI
|
||||||
<< " in region " << region
|
<< " in region " << region
|
||||||
<< " has master:" << cellRegionMaster[region]
|
<< " has master:" << cellRegionMaster[region]
|
||||||
|
|||||||
Reference in New Issue
Block a user