Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
integration-cfmesh
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Community
integration-cfmesh
Commits
771a8434
Commit
771a8434
authored
May 13, 2016
by
Franjo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated mesh checks
parent
264432b6
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
189 additions
and
108 deletions
+189
-108
meshLibrary/utilities/meshes/polyMeshGenChecks/polyMeshGenChecksGeometry.C
...ties/meshes/polyMeshGenChecks/polyMeshGenChecksGeometry.C
+189
-108
No files found.
meshLibrary/utilities/meshes/polyMeshGenChecks/polyMeshGenChecksGeometry.C
View file @
771a8434
...
...
@@ -479,7 +479,6 @@ bool checkTetQuality
const
labelList
&
owner
=
mesh
.
owner
();
const
labelList
&
neighbour
=
mesh
.
neighbour
();
const
vectorField
&
fCentres
=
mesh
.
addressingData
().
faceCentres
();
const
vectorField
&
cCentres
=
mesh
.
addressingData
().
cellCentres
();
label
nBadFaces
(
0
);
...
...
@@ -494,89 +493,168 @@ bool checkTetQuality
const
face
&
f
=
faces
[
faceI
];
forAll
(
f
,
eI
)
{
//- check the tet on the neighbour side
tetrahedron
<
point
,
point
>
tetOwn
(
fCentres
[
faceI
],
points
[
f
[
eI
]],
points
[
f
.
nextLabel
(
eI
)],
cCentres
[
owner
[
faceI
]]
);
const
label
nDecomposed
=
f
.
size
()
-
1
;
const
scalar
tetQualityOwn
=
help
::
tetQuality
(
tetOwn
);
forAll
(
f
,
pI
)
{
bool
badQualityFace
(
false
);
if
(
tetQualityOwn
<
minTetQuality
)
for
(
label
j
=
1
;
j
<
nDecomposed
;
++
j
)
{
++
nBadFaces
;
const
label
fpJ
=
f
[(
pI
+
j
)
%
f
.
size
()];
const
label
nfpJ
=
f
[(
pI
+
j
+
1
)
%
f
.
size
()];
if
(
report
)
//- check the tet on the neighbour side
tetrahedron
<
point
,
point
>
tetOwn
(
cCentres
[
owner
[
faceI
]],
points
[
f
[
pI
]],
points
[
fpJ
],
points
[
nfpJ
]
);
const
scalar
tetQualityOwn
=
help
::
tetQuality
(
tetOwn
);
if
(
tetQualityOwn
<
minTetQuality
)
{
# ifdef USE_OMP
# pragma omp critical
# endif
Pout
<<
"Face "
<<
faceI
<<
" has a triangle that points the wrong way."
<<
endl
<<
"Tet quality: "
<<
tetQualityOwn
<<
" Face "
<<
faceI
<<
endl
;
++
nBadFaces
;
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical(output)
# endif
Pout
<<
"Face "
<<
faceI
<<
" has a triangle that points the wrong way."
<<
endl
<<
"Tet quality: "
<<
tetQualityOwn
<<
" Face "
<<
faceI
<<
endl
;
}
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical(insertingBadFaces)
# endif
setPtr
->
insert
(
faceI
);
}
//- found a problematic face. Do not search further
badQualityFace
=
true
;
continue
;
}
if
(
setPtr
)
if
(
neighbour
[
faceI
]
<
0
)
continue
;
//- check the tet on the neighbour side
tetrahedron
<
point
,
point
>
tetNei
(
cCentres
[
neighbour
[
faceI
]],
points
[
f
[
pI
]],
points
[
nfpJ
],
points
[
fpJ
]
);
const
scalar
tetQualityNei
=
help
::
tetQuality
(
tetNei
);
if
(
tetQualityNei
<
minTetQuality
)
{
# ifdef USE_OMP
# pragma omp critical(insertingBadFaces)
# endif
setPtr
->
insert
(
faceI
);
++
nBadFaces
;
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical(output)
# endif
Pout
<<
"Face "
<<
faceI
<<
" has a triangle that points the wrong way."
<<
endl
<<
"Tet quality: "
<<
tetQualityNei
<<
" Face "
<<
faceI
<<
endl
;
}
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical(insertingBadFaces)
# endif
setPtr
->
insert
(
faceI
);
}
//- found a problematic face. Do not search further
badQualityFace
=
true
;
continue
;
}
}
if
(
neighbour
[
faceI
]
<
0
)
if
(
badQualityFace
)
continue
;
}
}
//- check the tet on the neighbour side
tetrahedron
<
point
,
point
>
tetNei
(
fCentres
[
faceI
],
points
[
f
.
nextLabel
(
eI
)],
points
[
f
[
eI
]],
cCentres
[
neighbour
[
faceI
]]
);
reduce
(
nBadFaces
,
sumOp
<
label
>
());
if
(
Pstream
::
parRun
()
&&
nBadFaces
&&
setPtr
)
{
//- make sure that processor faces are marked on both sides
const
PtrList
<
processorBoundaryPatch
>&
procBoundaries
=
mesh
.
procBoundaries
();
const
scalar
tetQualityNei
=
help
::
tetQuality
(
tetNei
);
//- send and receive data where needed
forAll
(
procBoundaries
,
patchI
)
{
const
label
start
=
procBoundaries
[
patchI
].
patchStart
();
const
label
size
=
procBoundaries
[
patchI
].
patchSize
();
if
(
tetQualityNei
<
minTetQuality
)
labelLongList
markedFaces
;
for
(
label
faceI
=
0
;
faceI
<
size
;
++
faceI
)
{
++
nBadFaces
;
if
(
setPtr
->
found
(
start
+
faceI
)
)
markedFaces
.
append
(
faceI
);
}
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# endif
Pout
<<
"Face "
<<
faceI
<<
" has a triangle that points the wrong way."
<<
endl
<<
"Tet quality: "
<<
tetQualityNei
<<
" Face "
<<
faceI
<<
endl
;
}
OPstream
toOtherProc
(
Pstream
::
blocking
,
procBoundaries
[
patchI
].
neiProcNo
(),
markedFaces
.
byteSize
()
);
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical(insertingBadFaces)
# endif
setPtr
->
insert
(
faceI
);
}
}
toOtherProc
<<
markedFaces
;
}
forAll
(
procBoundaries
,
patchI
)
{
labelList
receivedData
;
IPstream
fromOtheProc
(
Pstream
::
blocking
,
procBoundaries
[
patchI
].
neiProcNo
()
);
fromOtheProc
>>
receivedData
;
const
label
start
=
procBoundaries
[
patchI
].
patchStart
();
forAll
(
receivedData
,
i
)
setPtr
->
insert
(
start
+
receivedData
[
i
]);
}
}
if
(
nBadFaces
!=
0
)
{
WarningIn
(
"bool checkTetQuality("
"const polyMeshGen&, const bool, const scalar,"
" labelHashSet*, const boolList*)"
)
<<
"Found "
<<
nBadFaces
<<
" faces with negative tet decomposition (minTetQuality < "
<<
minTetQuality
<<
")."
<<
endl
;
return
true
;
}
return
false
;
}
...
...
@@ -622,7 +700,7 @@ bool checkMinTwist
# endif
{
# ifdef USE_OMP
# pragma omp for schedule(
static, 1
)
# pragma omp for schedule(
guided, 100
)
# endif
for
(
label
faceI
=
0
;
faceI
<
nInternalFaces
;
++
faceI
)
{
...
...
@@ -658,7 +736,7 @@ bool checkMinTwist
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -715,7 +793,7 @@ bool checkMinTwist
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -906,17 +984,17 @@ bool checkCellDeterminant
{
if
(
affectedCells
[
cI
]
)
{
const
cell
&
c
Faces
=
cells
[
cI
];
const
cell
&
c
=
cells
[
cI
];
const
vectorField
&
areas
=
mesh
.
addressingData
().
faceAreas
();
tensor
areaSum
(
tensor
::
zero
);
scalar
magAreaSum
=
0
.
0
;
forAll
(
c
Faces
,
cFace
I
)
forAll
(
c
,
f
I
)
{
label
faceI
=
cFaces
[
cFace
I
];
const
label
faceI
=
c
[
f
I
];
scalar
magArea
=
mag
(
areas
[
faceI
])
+
VSMALL
;
const
scalar
magArea
=
mag
(
areas
[
faceI
])
+
VSMALL
;
magAreaSum
+=
magArea
;
areaSum
+=
areas
[
faceI
]
*
(
areas
[
faceI
]
/
magArea
);
...
...
@@ -934,12 +1012,12 @@ bool checkCellDeterminant
if
(
setPtr
)
{
//Insert all faces of the cell
forAll
(
c
Faces
,
cFace
I
)
forAll
(
c
,
f
I
)
{
label
faceI
=
cFaces
[
cFace
I
];
const
label
faceI
=
c
[
f
I
];
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -950,7 +1028,7 @@ bool checkCellDeterminant
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(minDet)
# endif
minDet
=
min
(
minDet
,
localMinDet
);
}
...
...
@@ -1017,13 +1095,14 @@ void checkMinVolRatio
const
scalarField
&
vols
=
mesh
.
addressingData
().
cellVolumes
();
volRatio
.
setSize
(
own
.
size
());
volRatio
=
1
.
0
;
# ifdef USE_OMP
# pragma omp parallel for schedule (dynamic, 100)
# endif
for
(
label
faceI
=
0
;
faceI
<
nInternalFaces
;
++
faceI
)
{
volRatio
[
faceI
]
=
1
.
0
;
if
(
changedFacePtr
&&
!
changedFacePtr
->
operator
[](
faceI
)
)
continue
;
...
...
@@ -1142,7 +1221,7 @@ bool checkMinVolRatio
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -1156,7 +1235,7 @@ bool checkMinVolRatio
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(minVolRatio)
# endif
{
maxVolRatio
=
Foam
::
max
(
maxVolRatio
,
localMaxVolRatio
);
...
...
@@ -1321,7 +1400,7 @@ bool checkTriangleTwist
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -1420,7 +1499,7 @@ bool checkCellPartTetrahedra
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
"Zero or negative cell volume detected for cell "
<<
owner
[
faceI
]
<<
"."
<<
endl
;
...
...
@@ -1445,7 +1524,7 @@ bool checkCellPartTetrahedra
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
"Zero or negative cell volume detected for cell "
<<
neighbour
[
faceI
]
<<
"."
<<
endl
;
...
...
@@ -1460,7 +1539,7 @@ bool checkCellPartTetrahedra
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -1687,7 +1766,7 @@ bool checkFaceDotProduct
{
// Severe non-orthogonality but mesh still OK
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
"Severe non-orthogonality for face "
<<
faceI
<<
" between cells "
<<
own
[
faceI
]
...
...
@@ -1700,7 +1779,7 @@ bool checkFaceDotProduct
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -1714,7 +1793,7 @@ bool checkFaceDotProduct
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -1726,7 +1805,7 @@ bool checkFaceDotProduct
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(minDDotS)
# endif
minDDotS
=
Foam
::
min
(
minDDotS
,
localMinDDotS
);
}
...
...
@@ -1765,7 +1844,7 @@ bool checkFaceDotProduct
{
// Severe non-orthogonality but mesh still OK
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
{
const
scalar
angle
...
...
@@ -1784,7 +1863,7 @@ bool checkFaceDotProduct
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
start
+
faceI
);
}
...
...
@@ -1798,7 +1877,7 @@ bool checkFaceDotProduct
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
start
+
faceI
);
}
...
...
@@ -1812,7 +1891,7 @@ bool checkFaceDotProduct
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(minDDotS)
# endif
minDDotS
=
Foam
::
min
(
minDDotS
,
localMinDDotS
);
}
...
...
@@ -1910,7 +1989,7 @@ bool checkFacePyramids
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
"bool checkFacePyramids("
<<
"const bool, const scalar, labelHashSet*) : "
...
...
@@ -1942,7 +2021,7 @@ bool checkFacePyramids
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
"bool checkFacePyramids("
<<
"const bool, const scalar, labelHashSet*) : "
...
...
@@ -1965,7 +2044,7 @@ bool checkFacePyramids
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -2229,7 +2308,7 @@ bool checkFaceSkewness
if
(
report
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(report)
# endif
Pout
<<
" Severe skewness for face "
<<
faceI
<<
" skewness = "
<<
skewness
<<
endl
;
...
...
@@ -2238,7 +2317,7 @@ bool checkFaceSkewness
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -2251,7 +2330,7 @@ bool checkFaceSkewness
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(maxSkew)
# endif
maxSkew
=
Foam
::
max
(
maxSkew
,
localMaxSkew
);
}
...
...
@@ -2420,7 +2499,7 @@ bool checkFaceUniformity
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(badFace)
# endif
setPtr
->
insert
(
faceI
);
}
...
...
@@ -2434,7 +2513,7 @@ bool checkFaceUniformity
}
# ifdef USE_OMP
# pragma omp critical
# pragma omp critical
(maxUniformity)
# endif
{
maxUniformity
=
Foam
::
max
(
maxUniformity
,
localMaxUniformity
);
...
...
@@ -2604,23 +2683,25 @@ bool checkFaceAngles
if
(
(
edgeNormal
&
faceNormals
[
faceI
])
<
SMALL
)
{
# ifdef USE_OMP
# pragma omp critical
# endif
if
(
faceI
!=
errorFaceI
)
{
if
(
faceI
!=
errorFaceI
)
{
// Count only one error per face.
errorFaceI
=
faceI
;
++
nConcave
;
}
// Count only one error per face.
errorFaceI
=
faceI
;
++
nConcave
;
}
if
(
setPtr
)
if
(
setPtr
)
{
# ifdef USE_OMP
# pragma omp critical
# endif
{
setPtr
->
insert
(
faceI
);
localMaxEdgeSin
=
Foam
::
max
(
localMaxEdgeSin
,
magEdgeNormal
);
}
}
localMaxEdgeSin
=
Foam
::
max
(
localMaxEdgeSin
,
magEdgeNormal
);
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment