144 lines
4.5 KiB
C
144 lines
4.5 KiB
C
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | foam-extend: Open Source CFD
|
|
\\ / O peration |
|
|
\\ / A nd | For copyright notice see file Copyright
|
|
\\/ M anipulation |
|
|
-------------------------------------------------------------------------------
|
|
License
|
|
This file is part of foam-extend.
|
|
|
|
foam-extend is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation, either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
foam-extend is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
Description
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#include "blockMesh.H"
|
|
|
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
|
|
// Check the blockMesh topology
|
|
void Foam::blockMesh::checkBlockMesh(const polyMesh& bm)
|
|
{
|
|
Info<< nl << "Check block mesh topology" << endl;
|
|
|
|
bool blockMeshOK = true;
|
|
|
|
const pointField& points = bm.points();
|
|
const faceList& faces = bm.faces();
|
|
const cellList& cells = bm.cells();
|
|
const polyPatchList& patches = bm.boundaryMesh();
|
|
|
|
label nBoundaryFaces=0;
|
|
forAll(cells, celli)
|
|
{
|
|
nBoundaryFaces += cells[celli].nFaces();
|
|
}
|
|
|
|
nBoundaryFaces -= 2*bm.nInternalFaces();
|
|
|
|
label nDefinedBoundaryFaces=0;
|
|
forAll(patches, patchi)
|
|
{
|
|
nDefinedBoundaryFaces += patches[patchi].size();
|
|
}
|
|
|
|
|
|
Info<< nl << tab << "Basic statistics" << endl;
|
|
|
|
Info<< tab << tab << "Number of internal faces : "
|
|
<< bm.nInternalFaces() << endl;
|
|
|
|
Info<< tab << tab << "Number of boundary faces : "
|
|
<< nBoundaryFaces << endl;
|
|
|
|
Info<< tab << tab << "Number of defined boundary faces : "
|
|
<< nDefinedBoundaryFaces << endl;
|
|
|
|
Info<< tab << tab << "Number of undefined boundary faces : "
|
|
<< nBoundaryFaces - nDefinedBoundaryFaces << endl;
|
|
|
|
if ((nBoundaryFaces - nDefinedBoundaryFaces) > 0)
|
|
{
|
|
Info<< tab << tab << tab
|
|
<< "(Warning : only leave undefined the front and back planes "
|
|
<< "of 2D planar geometries!)" << endl;
|
|
}
|
|
|
|
Info<< nl << tab << "Checking patch -> block consistency" << endl;
|
|
|
|
|
|
forAll(patches, patchi)
|
|
{
|
|
const faceList& Patch = patches[patchi];
|
|
|
|
forAll(Patch, patchFacei)
|
|
{
|
|
const face& patchFace = Patch[patchFacei];
|
|
bool patchFaceOK = false;
|
|
|
|
forAll(cells, celli)
|
|
{
|
|
const labelList& cellFaces = cells[celli];
|
|
|
|
forAll(cellFaces, cellFacei)
|
|
{
|
|
if (patchFace == faces[cellFaces[cellFacei]])
|
|
{
|
|
patchFaceOK = true;
|
|
|
|
if
|
|
(
|
|
(
|
|
patchFace.normal(points)
|
|
& faces[cellFaces[cellFacei]].normal(points)
|
|
) < 0.0
|
|
)
|
|
{
|
|
Info<< tab << tab
|
|
<< "Face " << patchFacei
|
|
<< " of patch " << patchi
|
|
<< " (" << patches[patchi].name() << ")"
|
|
<< " points inwards"
|
|
<< endl;
|
|
|
|
blockMeshOK = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!patchFaceOK)
|
|
{
|
|
Info<< tab << tab
|
|
<< "Face " << patchFacei
|
|
<< " of patch " << patchi
|
|
<< " (" << patches[patchi].name() << ")"
|
|
<< " does not match any block faces" << endl;
|
|
|
|
blockMeshOK = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!blockMeshOK)
|
|
{
|
|
FatalErrorIn("blockMesh::checkBlockMesh(const polyMesh& bm)")
|
|
<< "Block mesh topology incorrect, stopping mesh generation!"
|
|
<< exit(FatalError);
|
|
}
|
|
}
|
|
|
|
// ************************************************************************* //
|