157 lines
4.8 KiB
C
157 lines
4.8 KiB
C
|
/*---------------------------------------------------------------------------*\
|
||
|
========= |
|
||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||
|
\\ / O peration |
|
||
|
\\ / A nd | Copyright held by original author
|
||
|
\\/ M anipulation |
|
||
|
-------------------------------------------------------------------------------
|
||
|
License
|
||
|
This file is part of OpenFOAM.
|
||
|
|
||
|
OpenFOAM 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 2 of the License, or (at your
|
||
|
option) any later version.
|
||
|
|
||
|
OpenFOAM 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 OpenFOAM; if not, write to the Free Software Foundation,
|
||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
|
||
|
Description
|
||
|
|
||
|
\*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#include "blockMesh.H"
|
||
|
|
||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||
|
|
||
|
namespace Foam
|
||
|
{
|
||
|
|
||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||
|
|
||
|
// Check the blockMesh topology
|
||
|
|
||
|
void 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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||
|
|
||
|
} // End namespace Foam
|
||
|
|
||
|
// ************************************************************************* //
|