mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: polyMeshTetDecomposition: restore face centre tet decomposition
This commit is contained in:
@ -380,11 +380,11 @@ bool Foam::polyMeshTetDecomposition::checkFaceTets
|
||||
)
|
||||
{
|
||||
const labelList& own = mesh.faceOwner();
|
||||
// const labelList& nei = mesh.faceNeighbour();
|
||||
const labelList& nei = mesh.faceNeighbour();
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
const vectorField& cc = mesh.cellCentres();
|
||||
// const vectorField& fc = mesh.faceCentres();
|
||||
const vectorField& fc = mesh.faceCentres();
|
||||
|
||||
// Calculate coupled cell centre
|
||||
pointField neiCc(mesh.nFaces() - mesh.nInternalFaces());
|
||||
@ -398,62 +398,62 @@ bool Foam::polyMeshTetDecomposition::checkFaceTets
|
||||
|
||||
const faceList& fcs = mesh.faces();
|
||||
|
||||
// const pointField& p = mesh.points();
|
||||
const pointField& p = mesh.points();
|
||||
|
||||
label nErrorTets = 0;
|
||||
|
||||
forAll(fcs, faceI)
|
||||
{
|
||||
// const face& f = fcs[faceI];
|
||||
const face& f = fcs[faceI];
|
||||
|
||||
// forAll(f, fPtI)
|
||||
// {
|
||||
// scalar tetQual = tetPointRef
|
||||
// (
|
||||
// p[f[fPtI]],
|
||||
// p[f.nextLabel(fPtI)],
|
||||
// fc[faceI],
|
||||
// cc[own[faceI]]
|
||||
// ).quality();
|
||||
forAll(f, fPtI)
|
||||
{
|
||||
scalar tetQual = tetPointRef
|
||||
(
|
||||
p[f[fPtI]],
|
||||
p[f.nextLabel(fPtI)],
|
||||
fc[faceI],
|
||||
cc[own[faceI]]
|
||||
).quality();
|
||||
|
||||
// if (tetQual > -tol)
|
||||
// {
|
||||
// if (setPtr)
|
||||
// {
|
||||
// setPtr->insert(faceI);
|
||||
// }
|
||||
if (tetQual > -tol)
|
||||
{
|
||||
if (setPtr)
|
||||
{
|
||||
setPtr->insert(faceI);
|
||||
}
|
||||
|
||||
// nErrorTets++;
|
||||
// break; // no need to check other tets
|
||||
// }
|
||||
// }
|
||||
nErrorTets++;
|
||||
break; // no need to check other tets
|
||||
}
|
||||
}
|
||||
|
||||
if (mesh.isInternalFace(faceI))
|
||||
{
|
||||
// Create the neighbour tet - it will have positive volume
|
||||
// const face& f = fcs[faceI];
|
||||
const face& f = fcs[faceI];
|
||||
|
||||
// forAll(f, fPtI)
|
||||
// {
|
||||
// scalar tetQual = tetPointRef
|
||||
// (
|
||||
// p[f[fPtI]],
|
||||
// p[f.nextLabel(fPtI)],
|
||||
// fc[faceI],
|
||||
// cc[nei[faceI]]
|
||||
// ).quality();
|
||||
forAll(f, fPtI)
|
||||
{
|
||||
scalar tetQual = tetPointRef
|
||||
(
|
||||
p[f[fPtI]],
|
||||
p[f.nextLabel(fPtI)],
|
||||
fc[faceI],
|
||||
cc[nei[faceI]]
|
||||
).quality();
|
||||
|
||||
// if (tetQual < tol)
|
||||
// {
|
||||
// if (setPtr)
|
||||
// {
|
||||
// setPtr->insert(faceI);
|
||||
// }
|
||||
if (tetQual < tol)
|
||||
{
|
||||
if (setPtr)
|
||||
{
|
||||
setPtr->insert(faceI);
|
||||
}
|
||||
|
||||
// nErrorTets++;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
nErrorTets++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (findSharedBasePoint(mesh, faceI, tol, report) == -1)
|
||||
{
|
||||
|
||||
@ -309,6 +309,7 @@ Foam::scalar Foam::polyMeshGeometry::calcSkewness
|
||||
}
|
||||
|
||||
|
||||
// Create the neighbour pyramid - it will have positive volume
|
||||
bool Foam::polyMeshGeometry::checkFaceTet
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
@ -787,7 +788,7 @@ bool Foam::polyMeshGeometry::checkFaceTets
|
||||
// check whether decomposing each cell into tets results in
|
||||
// positive volume, non-flat tets
|
||||
const labelList& own = mesh.faceOwner();
|
||||
// const labelList& nei = mesh.faceNeighbour();
|
||||
const labelList& nei = mesh.faceNeighbour();
|
||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||
|
||||
// Calculate coupled cell centre
|
||||
@ -802,50 +803,48 @@ bool Foam::polyMeshGeometry::checkFaceTets
|
||||
|
||||
label nErrorTets = 0;
|
||||
|
||||
// bool tetError = false
|
||||
|
||||
forAll(checkFaces, i)
|
||||
{
|
||||
label faceI = checkFaces[i];
|
||||
|
||||
// Create the owner pyramid - note: exchange cell and face centre
|
||||
// to get positive volume.
|
||||
// tetError = checkFaceTet
|
||||
// (
|
||||
// mesh,
|
||||
// report,
|
||||
// minTetQuality,
|
||||
// p,
|
||||
// faceI,
|
||||
// cellCentres[own[faceI]], // face centre
|
||||
// faceCentres[faceI], // cell centre
|
||||
// setPtr
|
||||
// );
|
||||
bool tetError = checkFaceTet
|
||||
(
|
||||
mesh,
|
||||
report,
|
||||
minTetQuality,
|
||||
p,
|
||||
faceI,
|
||||
cellCentres[own[faceI]], // face centre
|
||||
faceCentres[faceI], // cell centre
|
||||
setPtr
|
||||
);
|
||||
|
||||
// if (tetError)
|
||||
// {
|
||||
// nErrorTets++;
|
||||
// }
|
||||
if (tetError)
|
||||
{
|
||||
nErrorTets++;
|
||||
}
|
||||
|
||||
if (mesh.isInternalFace(faceI))
|
||||
{
|
||||
// Create the neighbour tets - they will have positive volume
|
||||
// tetError = checkFaceTet
|
||||
// (
|
||||
// mesh,
|
||||
// report,
|
||||
// minTetQuality,
|
||||
// p,
|
||||
// faceI,
|
||||
// faceCentres[faceI], // face centre
|
||||
// cellCentres[nei[faceI]], // cell centre
|
||||
// setPtr
|
||||
// );
|
||||
bool tetError = checkFaceTet
|
||||
(
|
||||
mesh,
|
||||
report,
|
||||
minTetQuality,
|
||||
p,
|
||||
faceI,
|
||||
faceCentres[faceI], // face centre
|
||||
cellCentres[nei[faceI]], // cell centre
|
||||
setPtr
|
||||
);
|
||||
|
||||
// if (tetError)
|
||||
// {
|
||||
// nErrorTets++;
|
||||
// }
|
||||
if (tetError)
|
||||
{
|
||||
nErrorTets++;
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
@ -921,40 +920,40 @@ bool Foam::polyMeshGeometry::checkFaceTets
|
||||
label face0 = baffles[i].first();
|
||||
label face1 = baffles[i].second();
|
||||
|
||||
// tetError = checkFaceTet
|
||||
// (
|
||||
// mesh,
|
||||
// report,
|
||||
// minTetQuality,
|
||||
// p,
|
||||
// face0,
|
||||
// cellCentres[own[face0]], // face centre
|
||||
// faceCentres[face0], // cell centre
|
||||
// setPtr
|
||||
// );
|
||||
bool tetError = checkFaceTet
|
||||
(
|
||||
mesh,
|
||||
report,
|
||||
minTetQuality,
|
||||
p,
|
||||
face0,
|
||||
cellCentres[own[face0]], // face centre
|
||||
faceCentres[face0], // cell centre
|
||||
setPtr
|
||||
);
|
||||
|
||||
// if (tetError)
|
||||
// {
|
||||
// nErrorTets++;
|
||||
// }
|
||||
if (tetError)
|
||||
{
|
||||
nErrorTets++;
|
||||
}
|
||||
|
||||
// // Create the neighbour tets - they will have positive volume
|
||||
// tetError = checkFaceTet
|
||||
// (
|
||||
// mesh,
|
||||
// report,
|
||||
// minTetQuality,
|
||||
// p,
|
||||
// face0,
|
||||
// faceCentres[face0], // face centre
|
||||
// cellCentres[own[face1]], // cell centre
|
||||
// setPtr
|
||||
// );
|
||||
// Create the neighbour tets - they will have positive volume
|
||||
tetError = checkFaceTet
|
||||
(
|
||||
mesh,
|
||||
report,
|
||||
minTetQuality,
|
||||
p,
|
||||
face0,
|
||||
faceCentres[face0], // face centre
|
||||
cellCentres[own[face1]], // cell centre
|
||||
setPtr
|
||||
);
|
||||
|
||||
// if (tetError)
|
||||
// {
|
||||
// nErrorTets++;
|
||||
// }
|
||||
if (tetError)
|
||||
{
|
||||
nErrorTets++;
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user