dynamicMeshCheck merged into meshCheck
This commit is contained in:
@ -53,8 +53,7 @@ Description
|
|||||||
#include "polyAddFace.H"
|
#include "polyAddFace.H"
|
||||||
#include "combineFaces.H"
|
#include "combineFaces.H"
|
||||||
#include "removePoints.H"
|
#include "removePoints.H"
|
||||||
#include "polyMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "dynamicMeshCheck.H"
|
|
||||||
#include "polyTopoChangeMap.H"
|
#include "polyTopoChangeMap.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "motionSmoother.H"
|
#include "motionSmoother.H"
|
||||||
|
|||||||
@ -47,7 +47,7 @@ Description
|
|||||||
#include "snapParameters.H"
|
#include "snapParameters.H"
|
||||||
#include "layerParameters.H"
|
#include "layerParameters.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
#include "cellModeller.H"
|
#include "cellModeller.H"
|
||||||
#include "uindirectPrimitivePatch.H"
|
#include "uindirectPrimitivePatch.H"
|
||||||
|
|||||||
@ -61,9 +61,7 @@ Usage
|
|||||||
#include "vtkSetWriter.H"
|
#include "vtkSetWriter.H"
|
||||||
#include "IOdictionary.H"
|
#include "IOdictionary.H"
|
||||||
|
|
||||||
#include "checkTools.H"
|
#include "meshCheck.H"
|
||||||
#include "checkTopology.H"
|
|
||||||
#include "checkGeometry.H"
|
|
||||||
#include "checkMeshQuality.H"
|
#include "checkMeshQuality.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -196,7 +194,7 @@ int main(int argc, char *argv[])
|
|||||||
// Reconstruct globalMeshData
|
// Reconstruct globalMeshData
|
||||||
mesh.globalData();
|
mesh.globalData();
|
||||||
|
|
||||||
meshTools::printMeshStats(mesh, allTopology);
|
meshCheck::printMeshStats(mesh, allTopology);
|
||||||
|
|
||||||
label nFailedChecks = 0;
|
label nFailedChecks = 0;
|
||||||
|
|
||||||
|
|||||||
@ -27,9 +27,8 @@ License
|
|||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "cellSet.H"
|
#include "cellSet.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "surfaceWriter.H"
|
#include "surfaceWriter.H"
|
||||||
#include "checkTools.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -58,7 +57,7 @@ Foam::label Foam::checkMeshQuality
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (writer.valid())
|
if (writer.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(writer(), faces);
|
meshCheck::mergeAndWrite(writer(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@ License
|
|||||||
|
|
||||||
#include "badQualityToCell.H"
|
#include "badQualityToCell.H"
|
||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ License
|
|||||||
|
|
||||||
#include "badQualityToFace.H"
|
#include "badQualityToFace.H"
|
||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@ License
|
|||||||
#include "pointConstraints.H"
|
#include "pointConstraints.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
#include "meshTools.H"
|
#include "meshTools.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -24,7 +24,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "attachPolyTopoChanger.H"
|
#include "attachPolyTopoChanger.H"
|
||||||
#include "polyMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -31,7 +31,7 @@ License
|
|||||||
#include "PointEdgeWave.H"
|
#include "PointEdgeWave.H"
|
||||||
#include "globalIndex.H"
|
#include "globalIndex.H"
|
||||||
#include "removePoints.H"
|
#include "removePoints.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -25,7 +25,7 @@ License
|
|||||||
|
|
||||||
#include "checkMesh.H"
|
#include "checkMesh.H"
|
||||||
#include "fvMesh.H"
|
#include "fvMesh.H"
|
||||||
#include "polyMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -29,7 +29,7 @@ License
|
|||||||
#include "removePoints.H"
|
#include "removePoints.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -33,7 +33,7 @@ License
|
|||||||
#include "indirectPrimitivePatch.H"
|
#include "indirectPrimitivePatch.H"
|
||||||
#include "cellSet.H"
|
#include "cellSet.H"
|
||||||
#include "searchableSurfaces.H"
|
#include "searchableSurfaces.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "IOmanip.H"
|
#include "IOmanip.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "snappySnapDriver.H"
|
#include "snappySnapDriver.H"
|
||||||
|
|||||||
@ -33,7 +33,7 @@ Description
|
|||||||
#include "meshRefinement.H"
|
#include "meshRefinement.H"
|
||||||
#include "removePoints.H"
|
#include "removePoints.H"
|
||||||
#include "pointFields.H"
|
#include "pointFields.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "pointSet.H"
|
#include "pointSet.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
|
|||||||
@ -28,7 +28,7 @@ Description
|
|||||||
|
|
||||||
#include "snappySnapDriver.H"
|
#include "snappySnapDriver.H"
|
||||||
#include "motionSmoother.H"
|
#include "motionSmoother.H"
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
#include "fvMesh.H"
|
#include "fvMesh.H"
|
||||||
|
|||||||
@ -1,16 +1,13 @@
|
|||||||
primitiveMeshCheck/primitiveMeshCheck.C
|
primitiveMeshCheck/primitiveMeshCheck.C
|
||||||
primitiveMeshCheck/primitiveMeshCheckPointNearness.C
|
primitiveMeshCheck/primitiveMeshCheckPointNearness.C
|
||||||
primitiveMeshCheck/primitiveMeshCheckEdgeLength.C
|
primitiveMeshCheck/primitiveMeshCheckEdgeLength.C
|
||||||
primitiveMeshCheck/primitiveMeshTools.C
|
|
||||||
|
|
||||||
polyMeshCheck/polyMeshCheck.C
|
polyMeshCheck/polyMeshCheck.C
|
||||||
polyMeshCheck/polyMeshTools.C
|
polyMeshCheck/polyMeshCheckQuality.C
|
||||||
|
|
||||||
dynamicMeshCheck/dynamicMeshCheck.C
|
mergeAndWrite/mergeAndWrite.C
|
||||||
dynamicMeshCheck/motionSmootherAlgoCheck.C
|
checkTopology.C
|
||||||
|
checkGeometry.C
|
||||||
checkTools/checkTools.C
|
checkMesh.C
|
||||||
checkTools/checkTopology.C
|
|
||||||
checkTools/checkGeometry.C
|
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libmeshCheck
|
LIB = $(FOAM_LIBBIN)/libmeshCheck
|
||||||
|
|||||||
@ -23,8 +23,8 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "meshCheck.H"
|
||||||
#include "PatchTools.H"
|
#include "PatchTools.H"
|
||||||
#include "checkGeometry.H"
|
|
||||||
#include "polyMeshCheck.H"
|
#include "polyMeshCheck.H"
|
||||||
#include "cellSet.H"
|
#include "cellSet.H"
|
||||||
#include "faceSet.H"
|
#include "faceSet.H"
|
||||||
@ -39,7 +39,7 @@ License
|
|||||||
#include "writeFile.H"
|
#include "writeFile.H"
|
||||||
#include "nonConformalCyclicPolyPatch.H"
|
#include "nonConformalCyclicPolyPatch.H"
|
||||||
|
|
||||||
#include "checkTools.H"
|
#include "mergeAndWrite.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -608,7 +608,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
nonAlignedPoints.write();
|
nonAlignedPoints.write();
|
||||||
if (setWriter.valid())
|
if (setWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(setWriter, nonAlignedPoints);
|
meshCheck::mergeAndWrite(setWriter, nonAlignedPoints);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -643,7 +643,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -659,7 +659,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
aspectCells.write();
|
aspectCells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), aspectCells);
|
meshCheck::mergeAndWrite(surfWriter(), aspectCells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -680,7 +680,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -702,7 +702,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -725,7 +725,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -747,7 +747,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -769,7 +769,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -793,7 +793,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -826,7 +826,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -851,7 +851,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
points.write();
|
points.write();
|
||||||
if (setWriter.valid())
|
if (setWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(setWriter, points);
|
meshCheck::mergeAndWrite(setWriter, points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -874,7 +874,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
nearPoints.write();
|
nearPoints.write();
|
||||||
if (setWriter.valid())
|
if (setWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(setWriter, nearPoints);
|
meshCheck::mergeAndWrite(setWriter, nearPoints);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -898,7 +898,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -921,7 +921,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -942,7 +942,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -962,7 +962,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -983,7 +983,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1004,7 +1004,7 @@ Foam::label Foam::meshCheck::checkGeometry
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -23,7 +23,8 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "dynamicMeshCheck.H"
|
#include "meshCheck.H"
|
||||||
|
#include "polyMeshCheck.H"
|
||||||
#include "IOmanip.H"
|
#include "IOmanip.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
@ -49,6 +50,7 @@ bool Foam::meshCheck::checkMesh
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::meshCheck::checkMesh
|
bool Foam::meshCheck::checkMesh
|
||||||
(
|
(
|
||||||
const bool report,
|
const bool report,
|
||||||
@ -1,62 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Description
|
|
||||||
Tools for checking the mesh
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
checkTopology.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef checkTopology_H
|
|
||||||
#define checkTopology_H
|
|
||||||
|
|
||||||
#include "label.H"
|
|
||||||
#include "autoPtr.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
class polyMesh;
|
|
||||||
class surfaceWriter;
|
|
||||||
class setWriter;
|
|
||||||
|
|
||||||
namespace meshCheck
|
|
||||||
{
|
|
||||||
label checkTopology
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const bool allTopology,
|
|
||||||
const autoPtr<surfaceWriter>& surfWriter,
|
|
||||||
const autoPtr<Foam::setWriter>& setWriter
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -23,7 +23,7 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "checkTopology.H"
|
#include "meshCheck.H"
|
||||||
#include "polyMeshCheck.H"
|
#include "polyMeshCheck.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
#include "regionSplit.H"
|
#include "regionSplit.H"
|
||||||
@ -34,7 +34,7 @@ License
|
|||||||
#include "emptyPolyPatch.H"
|
#include "emptyPolyPatch.H"
|
||||||
#include "processorPolyPatch.H"
|
#include "processorPolyPatch.H"
|
||||||
#include "surfaceWriter.H"
|
#include "surfaceWriter.H"
|
||||||
#include "checkTools.H"
|
#include "mergeAndWrite.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -156,7 +156,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
points.write();
|
points.write();
|
||||||
if (setWriter.valid())
|
if (setWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(setWriter, points);
|
meshCheck::mergeAndWrite(setWriter, points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -178,7 +178,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,7 +198,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,7 +219,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
cells.write();
|
cells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), cells);
|
meshCheck::mergeAndWrite(surfWriter(), cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -243,7 +243,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
faces.write();
|
faces.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), faces);
|
meshCheck::mergeAndWrite(surfWriter(), faces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,7 +298,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
oneCells.write();
|
oneCells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), oneCells);
|
meshCheck::mergeAndWrite(surfWriter(), oneCells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +314,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
twoCells.write();
|
twoCells.write();
|
||||||
if (surfWriter.valid())
|
if (surfWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(surfWriter(), twoCells);
|
meshCheck::mergeAndWrite(surfWriter(), twoCells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -459,7 +459,7 @@ Foam::label Foam::meshCheck::checkTopology
|
|||||||
points.write();
|
points.write();
|
||||||
if (setWriter.valid())
|
if (setWriter.valid())
|
||||||
{
|
{
|
||||||
meshTools::mergeAndWrite(setWriter, points);
|
meshCheck::mergeAndWrite(setWriter, points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,251 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Description
|
|
||||||
PolyMesh checking routines. Checks various criteria for a mesh and supplied
|
|
||||||
geometry, with the mesh only used for topology. Coupled patch aware (i.e.,
|
|
||||||
coupled faces are treated as internal).
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
dynamicMeshCheck.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef dynamicMeshCheck_H
|
|
||||||
#define dynamicMeshCheck_H
|
|
||||||
|
|
||||||
#include "pointFields.H"
|
|
||||||
#include "HashSet.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace meshCheck
|
|
||||||
{
|
|
||||||
|
|
||||||
//- Check face non-orthogonality
|
|
||||||
bool checkFaceDotProduct
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar orthWarn,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check face pyramid volumes
|
|
||||||
bool checkFacePyramids
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minPyrVol,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet*
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check face tetrahedra volumes
|
|
||||||
bool checkFaceTets
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minPyrVol,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet*
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check face skewness
|
|
||||||
bool checkFaceSkewness
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar internalSkew,
|
|
||||||
const scalar boundarySkew,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const pointField& points,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check interpolation weights (0.5 for regular mesh)
|
|
||||||
bool checkFaceWeights
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar warnWeight,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Cell volume ratio of neighbouring cells (1 for regular mesh)
|
|
||||||
bool checkVolRatio
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar warnRatio,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const scalarField& cellVolumes,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check convexity of angles in a face. See primitiveMesh for explanation.
|
|
||||||
bool checkFaceAngles
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar maxDeg,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
// Check the difference between normals of individual face-triangles (from
|
|
||||||
// face-centre decomposition) and the cell-cell centre vector
|
|
||||||
bool checkFaceTwist
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minTwist,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& cellCentres,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check consecutive face-triangle (from face-centre decomposition) normals
|
|
||||||
bool checkTriangleTwist
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minTwist,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check for face areas v.s. sum of face-triangle (from face-centre
|
|
||||||
// decomposition) areas
|
|
||||||
bool checkFaceFlatness
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minFlatness,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const vectorField& faceCentres,
|
|
||||||
const pointField& p,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check for small faces
|
|
||||||
bool checkFaceArea
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minArea,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check the area of internal faces v.s. boundary faces
|
|
||||||
bool checkCellDeterminant
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const scalar minDet,
|
|
||||||
const polyMesh&,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet* setPtr
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check mesh with mesh settings in dict. Collects incorrect faces
|
|
||||||
// in set. Returns true if one or more faces in error.
|
|
||||||
// Parallel ok.
|
|
||||||
bool checkMesh
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const dictionary& dict,
|
|
||||||
labelHashSet& wrongFaces
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check (subset of mesh) with mesh settings in dict.
|
|
||||||
// Collects incorrect faces in set. Returns true if one
|
|
||||||
// or more faces in error. Parallel ok.
|
|
||||||
bool checkMesh
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const dictionary& dict,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
labelHashSet& wrongFaces
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check (subset of mesh including baffles) with mesh settings
|
|
||||||
// in dict. Collects incorrect faces in set. Returns true if one
|
|
||||||
// or more faces in error. Parallel ok.
|
|
||||||
bool checkMesh
|
|
||||||
(
|
|
||||||
const bool report,
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const dictionary& dict,
|
|
||||||
const labelList& checkFaces,
|
|
||||||
const List<labelPair>& baffles,
|
|
||||||
labelHashSet& wrongFaces
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace meshCheck
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -23,7 +23,7 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "checkTools.H"
|
#include "mergeAndWrite.H"
|
||||||
#include "polyMesh.H"
|
#include "polyMesh.H"
|
||||||
#include "globalMeshData.H"
|
#include "globalMeshData.H"
|
||||||
#include "hexMatcher.H"
|
#include "hexMatcher.H"
|
||||||
@ -46,7 +46,7 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::meshTools::printMeshStats
|
void Foam::meshCheck::printMeshStats
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const bool allTopology
|
const bool allTopology
|
||||||
@ -209,7 +209,7 @@ void Foam::meshTools::printMeshStats
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::mergeAndWrite
|
void Foam::meshCheck::mergeAndWrite
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const surfaceWriter& writer,
|
const surfaceWriter& writer,
|
||||||
@ -261,7 +261,7 @@ void Foam::meshTools::mergeAndWrite
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::fileName Foam::meshTools::checkMeshOutputDir(const polyMesh& mesh)
|
Foam::fileName Foam::meshCheck::checkMeshOutputDir(const polyMesh& mesh)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
mesh.time().globalPath()
|
mesh.time().globalPath()
|
||||||
@ -276,7 +276,7 @@ Foam::fileName Foam::meshTools::checkMeshOutputDir(const polyMesh& mesh)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::mergeAndWrite
|
void Foam::meshCheck::mergeAndWrite
|
||||||
(
|
(
|
||||||
const surfaceWriter& writer,
|
const surfaceWriter& writer,
|
||||||
const faceSet& set
|
const faceSet& set
|
||||||
@ -294,7 +294,7 @@ void Foam::meshTools::mergeAndWrite
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::mergeAndWrite
|
void Foam::meshCheck::mergeAndWrite
|
||||||
(
|
(
|
||||||
const surfaceWriter& writer,
|
const surfaceWriter& writer,
|
||||||
const cellSet& set
|
const cellSet& set
|
||||||
@ -381,7 +381,7 @@ void Foam::meshTools::mergeAndWrite
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::mergeAndWrite
|
void Foam::meshCheck::mergeAndWrite
|
||||||
(
|
(
|
||||||
const setWriter& writer,
|
const setWriter& writer,
|
||||||
const pointSet& set
|
const pointSet& set
|
||||||
@ -25,12 +25,12 @@ Description
|
|||||||
Tools for checking the mesh
|
Tools for checking the mesh
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
checkTools.C
|
mergeAndWrite.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef checkTools_H
|
#ifndef mergeAndWrite_H
|
||||||
#define checkTools_H
|
#define mergeAndWrite_H
|
||||||
|
|
||||||
#include "indirectPrimitivePatch.H"
|
#include "indirectPrimitivePatch.H"
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ namespace Foam
|
|||||||
class faceSet;
|
class faceSet;
|
||||||
class cellSet;
|
class cellSet;
|
||||||
|
|
||||||
namespace meshTools
|
namespace meshCheck
|
||||||
{
|
{
|
||||||
//- Output directory for sets and surfaces
|
//- Output directory for sets and surfaces
|
||||||
fileName checkMeshOutputDir(const polyMesh& mesh);
|
fileName checkMeshOutputDir(const polyMesh& mesh);
|
||||||
@ -22,20 +22,24 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Routines for checking mesh geometry
|
Functions for checking mesh topology and geometry
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
|
checkTopology.C
|
||||||
checkGeometry.C
|
checkGeometry.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef checkGeometry_H
|
#ifndef meshCheck_H
|
||||||
#define checkGeometry_H
|
#define meshCheck_H
|
||||||
|
|
||||||
#include "label.H"
|
#include "label.H"
|
||||||
#include "HashSet.H"
|
#include "HashSet.H"
|
||||||
#include "labelVector.H"
|
#include "labelVector.H"
|
||||||
#include "setWriter.H"
|
#include "labelPair.H"
|
||||||
|
#include "primitiveMeshCheck.H"
|
||||||
|
#include "polyMeshCheck.H"
|
||||||
|
#include "mergeAndWrite.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -63,6 +67,15 @@ namespace meshCheck
|
|||||||
//- Check 0th vertex on coupled faces
|
//- Check 0th vertex on coupled faces
|
||||||
bool checkCoupledPoints(const polyMesh&, const bool report, labelHashSet*);
|
bool checkCoupledPoints(const polyMesh&, const bool report, labelHashSet*);
|
||||||
|
|
||||||
|
//- Check the topology
|
||||||
|
label checkTopology
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const bool allTopology,
|
||||||
|
const autoPtr<surfaceWriter>& surfWriter,
|
||||||
|
const autoPtr<Foam::setWriter>& setWriter
|
||||||
|
);
|
||||||
|
|
||||||
//- Check the geometry
|
//- Check the geometry
|
||||||
label checkGeometry
|
label checkGeometry
|
||||||
(
|
(
|
||||||
@ -71,6 +84,42 @@ namespace meshCheck
|
|||||||
const autoPtr<surfaceWriter>&,
|
const autoPtr<surfaceWriter>&,
|
||||||
const autoPtr<setWriter>&
|
const autoPtr<setWriter>&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Check mesh with mesh settings in dict. Collects incorrect faces
|
||||||
|
// in set. Returns true if one or more faces in error.
|
||||||
|
// Parallel ok.
|
||||||
|
bool checkMesh
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const dictionary& dict,
|
||||||
|
labelHashSet& wrongFaces
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check (subset of mesh) with mesh settings in dict.
|
||||||
|
// Collects incorrect faces in set. Returns true if one
|
||||||
|
// or more faces in error. Parallel ok.
|
||||||
|
bool checkMesh
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const dictionary& dict,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet& wrongFaces
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check (subset of mesh including baffles) with mesh settings
|
||||||
|
// in dict. Collects incorrect faces in set. Returns true if one
|
||||||
|
// or more faces in error. Parallel ok.
|
||||||
|
bool checkMesh
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const dictionary& dict,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet& wrongFaces
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,13 +23,261 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "primitiveMeshCheck.H"
|
||||||
#include "polyMeshCheck.H"
|
#include "polyMeshCheck.H"
|
||||||
#include "polyMeshTools.H"
|
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceOrthogonality
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& areas,
|
||||||
|
const vectorField& cc
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
tmp<scalarField> tortho(new scalarField(mesh.nFaces(), 1.0));
|
||||||
|
scalarField& ortho = tortho.ref();
|
||||||
|
|
||||||
|
// Internal faces
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
ortho[facei] = meshCheck::faceOrthogonality
|
||||||
|
(
|
||||||
|
cc[own[facei]],
|
||||||
|
cc[nei[facei]],
|
||||||
|
areas[facei]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Coupled faces
|
||||||
|
|
||||||
|
pointField neighbourCc;
|
||||||
|
syncTools::swapBoundaryCellPositions(mesh, cc, neighbourCc);
|
||||||
|
|
||||||
|
forAll(pbm, patchi)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = pbm[patchi];
|
||||||
|
if (pp.coupled())
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label facei = pp.start() + i;
|
||||||
|
label bFacei = facei - mesh.nInternalFaces();
|
||||||
|
|
||||||
|
ortho[facei] = meshCheck::faceOrthogonality
|
||||||
|
(
|
||||||
|
cc[own[facei]],
|
||||||
|
neighbourCc[bFacei],
|
||||||
|
areas[facei]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tortho;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceSkewness
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
tmp<scalarField> tskew(new scalarField(mesh.nFaces()));
|
||||||
|
scalarField& skew = tskew.ref();
|
||||||
|
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
skew[facei] = meshCheck::faceSkewness
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
p,
|
||||||
|
fCtrs,
|
||||||
|
fAreas,
|
||||||
|
|
||||||
|
facei,
|
||||||
|
cellCtrs[own[facei]],
|
||||||
|
cellCtrs[nei[facei]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Boundary faces: consider them to have only skewness error.
|
||||||
|
// (i.e. treat as if mirror cell on other side)
|
||||||
|
|
||||||
|
pointField neighbourCc;
|
||||||
|
syncTools::swapBoundaryCellPositions(mesh, cellCtrs, neighbourCc);
|
||||||
|
|
||||||
|
forAll(pbm, patchi)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = pbm[patchi];
|
||||||
|
if (pp.coupled())
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label facei = pp.start() + i;
|
||||||
|
label bFacei = facei - mesh.nInternalFaces();
|
||||||
|
|
||||||
|
skew[facei] = meshCheck::faceSkewness
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
p,
|
||||||
|
fCtrs,
|
||||||
|
fAreas,
|
||||||
|
|
||||||
|
facei,
|
||||||
|
cellCtrs[own[facei]],
|
||||||
|
neighbourCc[bFacei]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label facei = pp.start() + i;
|
||||||
|
|
||||||
|
skew[facei] = meshCheck::boundaryFaceSkewness
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
p,
|
||||||
|
fCtrs,
|
||||||
|
fAreas,
|
||||||
|
|
||||||
|
facei,
|
||||||
|
cellCtrs[own[facei]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tskew;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceWeights
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
tmp<scalarField> tweight(new scalarField(mesh.nFaces(), 1.0));
|
||||||
|
scalarField& weight = tweight.ref();
|
||||||
|
|
||||||
|
// Internal faces
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
const point& fc = fCtrs[facei];
|
||||||
|
const vector& fa = fAreas[facei];
|
||||||
|
|
||||||
|
scalar dOwn = mag(fa & (fc-cellCtrs[own[facei]]));
|
||||||
|
scalar dNei = mag(fa & (cellCtrs[nei[facei]]-fc));
|
||||||
|
|
||||||
|
weight[facei] = min(dNei,dOwn)/(dNei+dOwn+vSmall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Coupled faces
|
||||||
|
|
||||||
|
pointField neiCc;
|
||||||
|
syncTools::swapBoundaryCellPositions(mesh, cellCtrs, neiCc);
|
||||||
|
|
||||||
|
forAll(pbm, patchi)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = pbm[patchi];
|
||||||
|
if (pp.coupled())
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label facei = pp.start() + i;
|
||||||
|
label bFacei = facei - mesh.nInternalFaces();
|
||||||
|
|
||||||
|
const point& fc = fCtrs[facei];
|
||||||
|
const vector& fa = fAreas[facei];
|
||||||
|
|
||||||
|
scalar dOwn = mag(fa & (fc-cellCtrs[own[facei]]));
|
||||||
|
scalar dNei = mag(fa & (neiCc[bFacei]-fc));
|
||||||
|
|
||||||
|
weight[facei] = min(dNei,dOwn)/(dNei+dOwn+vSmall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tweight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::volRatio
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const scalarField& vol
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
tmp<scalarField> tratio(new scalarField(mesh.nFaces(), 1.0));
|
||||||
|
scalarField& ratio = tratio.ref();
|
||||||
|
|
||||||
|
// Internal faces
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
scalar volOwn = vol[own[facei]];
|
||||||
|
scalar volNei = vol[nei[facei]];
|
||||||
|
|
||||||
|
ratio[facei] = min(volOwn,volNei)/(max(volOwn, volNei)+vSmall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Coupled faces
|
||||||
|
|
||||||
|
scalarField neiVol;
|
||||||
|
syncTools::swapBoundaryCellList(mesh, vol, neiVol);
|
||||||
|
|
||||||
|
forAll(pbm, patchi)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = pbm[patchi];
|
||||||
|
if (pp.coupled())
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label facei = pp.start() + i;
|
||||||
|
label bFacei = facei - mesh.nInternalFaces();
|
||||||
|
|
||||||
|
scalar volOwn = vol[own[facei]];
|
||||||
|
scalar volNei = neiVol[bFacei];
|
||||||
|
|
||||||
|
ratio[facei] = min(volOwn,volNei)/(max(volOwn, volNei)+vSmall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::meshCheck::checkFaceOrthogonality
|
bool Foam::meshCheck::checkFaceOrthogonality
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
@ -47,7 +295,7 @@ bool Foam::meshCheck::checkFaceOrthogonality
|
|||||||
|
|
||||||
// Calculate orthogonality for all internal and coupled boundary faces
|
// Calculate orthogonality for all internal and coupled boundary faces
|
||||||
// (1 for uncoupled boundary faces)
|
// (1 for uncoupled boundary faces)
|
||||||
tmp<scalarField> tortho = meshTools::faceOrthogonality
|
tmp<scalarField> tortho = meshCheck::faceOrthogonality
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
fAreas,
|
fAreas,
|
||||||
@ -173,7 +421,7 @@ bool Foam::meshCheck::checkFaceSkewness
|
|||||||
// Warn if the skew correction vector is more than skewWarning times
|
// Warn if the skew correction vector is more than skewWarning times
|
||||||
// larger than the face area vector
|
// larger than the face area vector
|
||||||
|
|
||||||
tmp<scalarField> tskew = meshTools::faceSkewness
|
tmp<scalarField> tskew = meshCheck::faceSkewness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -389,7 +637,7 @@ bool Foam::meshCheck::checkCellDeterminant
|
|||||||
InfoInFunction << "Checking for under-determined cells" << endl;
|
InfoInFunction << "Checking for under-determined cells" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp<scalarField> tcellDeterminant = meshTools::cellDeterminant
|
tmp<scalarField> tcellDeterminant = meshCheck::cellDeterminant
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
meshD,
|
meshD,
|
||||||
@ -473,7 +721,7 @@ bool Foam::meshCheck::checkFaceWeight
|
|||||||
const vectorField& fAreas = mesh.faceAreas();
|
const vectorField& fAreas = mesh.faceAreas();
|
||||||
const vectorField& cellCtrs = mesh.cellCentres();
|
const vectorField& cellCtrs = mesh.cellCentres();
|
||||||
|
|
||||||
tmp<scalarField> tfaceWght = meshTools::faceWeights
|
tmp<scalarField> tfaceWght = meshCheck::faceWeights
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
fCtrs,
|
fCtrs,
|
||||||
@ -568,7 +816,7 @@ bool Foam::meshCheck::checkVolRatio
|
|||||||
|
|
||||||
const scalarField& cellVols = mesh.cellVolumes();
|
const scalarField& cellVols = mesh.cellVolumes();
|
||||||
|
|
||||||
tmp<scalarField> tvolRatio = meshTools::volRatio(mesh, cellVols);
|
tmp<scalarField> tvolRatio = meshCheck::volRatio(mesh, cellVols);
|
||||||
scalarField& volRatio = tvolRatio.ref();
|
scalarField& volRatio = tvolRatio.ref();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -48,6 +48,41 @@ namespace Foam
|
|||||||
|
|
||||||
namespace meshCheck
|
namespace meshCheck
|
||||||
{
|
{
|
||||||
|
//- Generate orthogonality field. (1 for fully orthogonal, < 1 for
|
||||||
|
// non-orthogonal)
|
||||||
|
tmp<scalarField> faceOrthogonality
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate skewness field
|
||||||
|
tmp<scalarField> faceSkewness
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const pointField& points,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate interpolation factors field
|
||||||
|
tmp<scalarField> faceWeights
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate volume ratio field
|
||||||
|
tmp<scalarField> volRatio
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const scalarField& vol
|
||||||
|
);
|
||||||
|
|
||||||
//- Check non-orthogonality
|
//- Check non-orthogonality
|
||||||
bool checkFaceOrthogonality
|
bool checkFaceOrthogonality
|
||||||
(
|
(
|
||||||
@ -98,6 +133,163 @@ namespace meshCheck
|
|||||||
labelHashSet* setPtr = nullptr
|
labelHashSet* setPtr = nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Check face non-orthogonality
|
||||||
|
bool checkFaceDotProduct
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar orthWarn,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check face pyramid volumes
|
||||||
|
bool checkFacePyramids
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minPyrVol,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet*
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check face tetrahedra volumes
|
||||||
|
bool checkFaceTets
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minPyrVol,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet*
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check face skewness
|
||||||
|
bool checkFaceSkewness
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar internalSkew,
|
||||||
|
const scalar boundarySkew,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const pointField& points,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check interpolation weights (0.5 for regular mesh)
|
||||||
|
bool checkFaceWeights
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar warnWeight,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Cell volume ratio of neighbouring cells (1 for regular mesh)
|
||||||
|
bool checkVolRatio
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar warnRatio,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const scalarField& cellVolumes,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
const List<labelPair>& baffles,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check convexity of angles in a face. See primitiveMesh for explanation.
|
||||||
|
bool checkFaceAngles
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar maxDeg,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check the difference between normals of individual face-triangles (from
|
||||||
|
// face-centre decomposition) and the cell-cell centre vector
|
||||||
|
bool checkFaceTwist
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minTwist,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& cellCentres,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check consecutive face-triangle (from face-centre decomposition) normals
|
||||||
|
bool checkTriangleTwist
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minTwist,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check for face areas v.s. sum of face-triangle (from face-centre
|
||||||
|
// decomposition) areas
|
||||||
|
bool checkFaceFlatness
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minFlatness,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const vectorField& faceCentres,
|
||||||
|
const pointField& p,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check for small faces
|
||||||
|
bool checkFaceArea
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minArea,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Check the area of internal faces v.s. boundary faces
|
||||||
|
bool checkCellDeterminant
|
||||||
|
(
|
||||||
|
const bool report,
|
||||||
|
const scalar minDet,
|
||||||
|
const polyMesh&,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const labelList& checkFaces,
|
||||||
|
labelHashSet* setPtr
|
||||||
|
);
|
||||||
|
|
||||||
//- Check mesh topology for correctness.
|
//- Check mesh topology for correctness.
|
||||||
// Returns false for no error.
|
// Returns false for no error.
|
||||||
|
|||||||
@ -23,13 +23,13 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "dynamicMeshCheck.H"
|
#include "primitiveMeshCheck.H"
|
||||||
|
#include "polyMeshCheck.H"
|
||||||
#include "polyMeshTetDecomposition.H"
|
#include "polyMeshTetDecomposition.H"
|
||||||
#include "pyramidPointFaceRef.H"
|
#include "pyramidPointFaceRef.H"
|
||||||
#include "tetPointRef.H"
|
#include "tetPointRef.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "primitiveMeshTools.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -819,7 +819,7 @@ bool Foam::meshCheck::checkFaceSkewness
|
|||||||
|
|
||||||
if (mesh.isInternalFace(facei))
|
if (mesh.isInternalFace(facei))
|
||||||
{
|
{
|
||||||
scalar skewness = meshTools::faceSkewness
|
scalar skewness = meshCheck::faceSkewness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -854,7 +854,7 @@ bool Foam::meshCheck::checkFaceSkewness
|
|||||||
}
|
}
|
||||||
else if (patches[patches.whichPatch(facei)].coupled())
|
else if (patches[patches.whichPatch(facei)].coupled())
|
||||||
{
|
{
|
||||||
scalar skewness = meshTools::faceSkewness
|
scalar skewness = meshCheck::faceSkewness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -889,7 +889,7 @@ bool Foam::meshCheck::checkFaceSkewness
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
scalar skewness = meshTools::boundaryFaceSkewness
|
scalar skewness = meshCheck::boundaryFaceSkewness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -932,7 +932,7 @@ bool Foam::meshCheck::checkFaceSkewness
|
|||||||
const point& ownCc = cellCentres[own[face0]];
|
const point& ownCc = cellCentres[own[face0]];
|
||||||
const point& neiCc = cellCentres[own[face1]];
|
const point& neiCc = cellCentres[own[face1]];
|
||||||
|
|
||||||
scalar skewness = meshTools::faceSkewness
|
scalar skewness = meshCheck::faceSkewness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -1,282 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2012-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "polyMeshTools.H"
|
|
||||||
#include "syncTools.H"
|
|
||||||
#include "pyramidPointFaceRef.H"
|
|
||||||
#include "primitiveMeshTools.H"
|
|
||||||
#include "polyMeshTools.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceOrthogonality
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& areas,
|
|
||||||
const vectorField& cc
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
|
||||||
|
|
||||||
tmp<scalarField> tortho(new scalarField(mesh.nFaces(), 1.0));
|
|
||||||
scalarField& ortho = tortho.ref();
|
|
||||||
|
|
||||||
// Internal faces
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
ortho[facei] = meshTools::faceOrthogonality
|
|
||||||
(
|
|
||||||
cc[own[facei]],
|
|
||||||
cc[nei[facei]],
|
|
||||||
areas[facei]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Coupled faces
|
|
||||||
|
|
||||||
pointField neighbourCc;
|
|
||||||
syncTools::swapBoundaryCellPositions(mesh, cc, neighbourCc);
|
|
||||||
|
|
||||||
forAll(pbm, patchi)
|
|
||||||
{
|
|
||||||
const polyPatch& pp = pbm[patchi];
|
|
||||||
if (pp.coupled())
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
label facei = pp.start() + i;
|
|
||||||
label bFacei = facei - mesh.nInternalFaces();
|
|
||||||
|
|
||||||
ortho[facei] = meshTools::faceOrthogonality
|
|
||||||
(
|
|
||||||
cc[own[facei]],
|
|
||||||
neighbourCc[bFacei],
|
|
||||||
areas[facei]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tortho;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceSkewness
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
|
||||||
|
|
||||||
tmp<scalarField> tskew(new scalarField(mesh.nFaces()));
|
|
||||||
scalarField& skew = tskew.ref();
|
|
||||||
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
skew[facei] = meshTools::faceSkewness
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
p,
|
|
||||||
fCtrs,
|
|
||||||
fAreas,
|
|
||||||
|
|
||||||
facei,
|
|
||||||
cellCtrs[own[facei]],
|
|
||||||
cellCtrs[nei[facei]]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Boundary faces: consider them to have only skewness error.
|
|
||||||
// (i.e. treat as if mirror cell on other side)
|
|
||||||
|
|
||||||
pointField neighbourCc;
|
|
||||||
syncTools::swapBoundaryCellPositions(mesh, cellCtrs, neighbourCc);
|
|
||||||
|
|
||||||
forAll(pbm, patchi)
|
|
||||||
{
|
|
||||||
const polyPatch& pp = pbm[patchi];
|
|
||||||
if (pp.coupled())
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
label facei = pp.start() + i;
|
|
||||||
label bFacei = facei - mesh.nInternalFaces();
|
|
||||||
|
|
||||||
skew[facei] = meshTools::faceSkewness
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
p,
|
|
||||||
fCtrs,
|
|
||||||
fAreas,
|
|
||||||
|
|
||||||
facei,
|
|
||||||
cellCtrs[own[facei]],
|
|
||||||
neighbourCc[bFacei]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
label facei = pp.start() + i;
|
|
||||||
|
|
||||||
skew[facei] = meshTools::boundaryFaceSkewness
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
p,
|
|
||||||
fCtrs,
|
|
||||||
fAreas,
|
|
||||||
|
|
||||||
facei,
|
|
||||||
cellCtrs[own[facei]]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tskew;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceWeights
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
|
||||||
|
|
||||||
tmp<scalarField> tweight(new scalarField(mesh.nFaces(), 1.0));
|
|
||||||
scalarField& weight = tweight.ref();
|
|
||||||
|
|
||||||
// Internal faces
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
const point& fc = fCtrs[facei];
|
|
||||||
const vector& fa = fAreas[facei];
|
|
||||||
|
|
||||||
scalar dOwn = mag(fa & (fc-cellCtrs[own[facei]]));
|
|
||||||
scalar dNei = mag(fa & (cellCtrs[nei[facei]]-fc));
|
|
||||||
|
|
||||||
weight[facei] = min(dNei,dOwn)/(dNei+dOwn+vSmall);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Coupled faces
|
|
||||||
|
|
||||||
pointField neiCc;
|
|
||||||
syncTools::swapBoundaryCellPositions(mesh, cellCtrs, neiCc);
|
|
||||||
|
|
||||||
forAll(pbm, patchi)
|
|
||||||
{
|
|
||||||
const polyPatch& pp = pbm[patchi];
|
|
||||||
if (pp.coupled())
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
label facei = pp.start() + i;
|
|
||||||
label bFacei = facei - mesh.nInternalFaces();
|
|
||||||
|
|
||||||
const point& fc = fCtrs[facei];
|
|
||||||
const vector& fa = fAreas[facei];
|
|
||||||
|
|
||||||
scalar dOwn = mag(fa & (fc-cellCtrs[own[facei]]));
|
|
||||||
scalar dNei = mag(fa & (neiCc[bFacei]-fc));
|
|
||||||
|
|
||||||
weight[facei] = min(dNei,dOwn)/(dNei+dOwn+vSmall);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tweight;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::volRatio
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const scalarField& vol
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
const polyBoundaryMesh& pbm = mesh.boundaryMesh();
|
|
||||||
|
|
||||||
tmp<scalarField> tratio(new scalarField(mesh.nFaces(), 1.0));
|
|
||||||
scalarField& ratio = tratio.ref();
|
|
||||||
|
|
||||||
// Internal faces
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
scalar volOwn = vol[own[facei]];
|
|
||||||
scalar volNei = vol[nei[facei]];
|
|
||||||
|
|
||||||
ratio[facei] = min(volOwn,volNei)/(max(volOwn, volNei)+vSmall);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Coupled faces
|
|
||||||
|
|
||||||
scalarField neiVol;
|
|
||||||
syncTools::swapBoundaryCellList(mesh, vol, neiVol);
|
|
||||||
|
|
||||||
forAll(pbm, patchi)
|
|
||||||
{
|
|
||||||
const polyPatch& pp = pbm[patchi];
|
|
||||||
if (pp.coupled())
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
label facei = pp.start() + i;
|
|
||||||
label bFacei = facei - mesh.nInternalFaces();
|
|
||||||
|
|
||||||
scalar volOwn = vol[own[facei]];
|
|
||||||
scalar volNei = neiVol[bFacei];
|
|
||||||
|
|
||||||
ratio[facei] = min(volOwn,volNei)/(max(volOwn, volNei)+vSmall);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tratio;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,97 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2012-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Namespace
|
|
||||||
Foam::meshTools
|
|
||||||
|
|
||||||
Description
|
|
||||||
Collection of functions operating on polyMesh (mainly checks) so
|
|
||||||
that need access to patch information.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
polyMeshTools.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
#ifndef polyMeshTools_H
|
|
||||||
#define polyMeshTools_H
|
|
||||||
|
|
||||||
#include "polyMesh.H"
|
|
||||||
#include "primitiveMeshTools.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Namespace meshTools Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
namespace meshTools
|
|
||||||
{
|
|
||||||
//- Generate orthogonality field. (1 for fully orthogonal, < 1 for
|
|
||||||
// non-orthogonal)
|
|
||||||
tmp<scalarField> faceOrthogonality
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate skewness field
|
|
||||||
tmp<scalarField> faceSkewness
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const pointField& points,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate interpolation factors field
|
|
||||||
tmp<scalarField> faceWeights
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate volume ratio field
|
|
||||||
tmp<scalarField> volRatio
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const scalarField& vol
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -25,11 +25,11 @@ License
|
|||||||
|
|
||||||
#include "primitiveMeshCheck.H"
|
#include "primitiveMeshCheck.H"
|
||||||
#include "pyramidPointFaceRef.H"
|
#include "pyramidPointFaceRef.H"
|
||||||
|
#include "PackedBoolList.H"
|
||||||
#include "ListOps.H"
|
#include "ListOps.H"
|
||||||
#include "unitConversion.H"
|
#include "unitConversion.H"
|
||||||
#include "SortableList.H"
|
#include "SortableList.H"
|
||||||
#include "EdgeMap.H"
|
#include "EdgeMap.H"
|
||||||
#include "primitiveMeshTools.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -42,6 +42,525 @@ Foam::scalar Foam::meshCheck::planarCosAngle = 1.0e-6;
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::scalar Foam::meshCheck::faceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
|
||||||
|
const label facei,
|
||||||
|
const point& ownCc,
|
||||||
|
const point& neiCc
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vector Cpf = fCtrs[facei] - ownCc;
|
||||||
|
vector d = neiCc - ownCc;
|
||||||
|
|
||||||
|
// Skewness vector
|
||||||
|
vector sv =
|
||||||
|
Cpf
|
||||||
|
- ((fAreas[facei] & Cpf)/((fAreas[facei] & d) + rootVSmall))*d;
|
||||||
|
vector svHat = sv/(mag(sv) + rootVSmall);
|
||||||
|
|
||||||
|
// Normalisation distance calculated as the approximate distance
|
||||||
|
// from the face centre to the edge of the face in the direction
|
||||||
|
// of the skewness
|
||||||
|
scalar fd = 0.2*mag(d) + rootVSmall;
|
||||||
|
const face& f = mesh.faces()[facei];
|
||||||
|
forAll(f, pi)
|
||||||
|
{
|
||||||
|
fd = max(fd, mag(svHat & (p[f[pi]] - fCtrs[facei])));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalised skewness
|
||||||
|
return mag(sv)/fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::meshCheck::boundaryFaceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
|
||||||
|
const label facei,
|
||||||
|
const point& ownCc
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vector Cpf = fCtrs[facei] - ownCc;
|
||||||
|
|
||||||
|
vector normal = fAreas[facei];
|
||||||
|
normal /= mag(normal) + rootVSmall;
|
||||||
|
vector d = normal*(normal & Cpf);
|
||||||
|
|
||||||
|
|
||||||
|
// Skewness vector
|
||||||
|
vector sv =
|
||||||
|
Cpf
|
||||||
|
- ((fAreas[facei] & Cpf)/((fAreas[facei] & d) + rootVSmall))*d;
|
||||||
|
vector svHat = sv/(mag(sv) + rootVSmall);
|
||||||
|
|
||||||
|
// Normalisation distance calculated as the approximate distance
|
||||||
|
// from the face centre to the edge of the face in the direction
|
||||||
|
// of the skewness
|
||||||
|
scalar fd = 0.4*mag(d) + rootVSmall;
|
||||||
|
const face& f = mesh.faces()[facei];
|
||||||
|
forAll(f, pi)
|
||||||
|
{
|
||||||
|
fd = max(fd, mag(svHat & (p[f[pi]] - fCtrs[facei])));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalised skewness
|
||||||
|
return mag(sv)/fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::meshCheck::faceOrthogonality
|
||||||
|
(
|
||||||
|
const point& ownCc,
|
||||||
|
const point& neiCc,
|
||||||
|
const vector& s
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vector d = neiCc - ownCc;
|
||||||
|
|
||||||
|
return (d & s)/(mag(d)*mag(s) + rootVSmall);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceOrthogonality
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const vectorField& areas,
|
||||||
|
const vectorField& cc
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
|
||||||
|
tmp<scalarField> tortho(new scalarField(mesh.nInternalFaces()));
|
||||||
|
scalarField& ortho = tortho.ref();
|
||||||
|
|
||||||
|
// Internal faces
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
ortho[facei] = faceOrthogonality
|
||||||
|
(
|
||||||
|
cc[own[facei]],
|
||||||
|
cc[nei[facei]],
|
||||||
|
areas[facei]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tortho;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
|
||||||
|
tmp<scalarField> tskew(new scalarField(mesh.nFaces()));
|
||||||
|
scalarField& skew = tskew.ref();
|
||||||
|
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
skew[facei] = faceSkewness
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
p,
|
||||||
|
fCtrs,
|
||||||
|
fAreas,
|
||||||
|
|
||||||
|
facei,
|
||||||
|
cellCtrs[own[facei]],
|
||||||
|
cellCtrs[nei[facei]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Boundary faces: consider them to have only skewness error.
|
||||||
|
// (i.e. treat as if mirror cell on other side)
|
||||||
|
|
||||||
|
for (label facei = mesh.nInternalFaces(); facei < mesh.nFaces(); facei++)
|
||||||
|
{
|
||||||
|
skew[facei] = boundaryFaceSkewness
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
p,
|
||||||
|
fCtrs,
|
||||||
|
fAreas,
|
||||||
|
facei,
|
||||||
|
cellCtrs[own[facei]]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tskew;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::meshCheck::facePyramidVolume
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& points,
|
||||||
|
const vectorField& ctrs,
|
||||||
|
|
||||||
|
scalarField& ownPyrVol,
|
||||||
|
scalarField& neiPyrVol
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
const faceList& f = mesh.faces();
|
||||||
|
|
||||||
|
ownPyrVol.setSize(mesh.nFaces());
|
||||||
|
neiPyrVol.setSize(mesh.nInternalFaces());
|
||||||
|
|
||||||
|
forAll(f, facei)
|
||||||
|
{
|
||||||
|
// Create the owner pyramid
|
||||||
|
ownPyrVol[facei] = -pyramidPointFaceRef
|
||||||
|
(
|
||||||
|
f[facei],
|
||||||
|
ctrs[own[facei]]
|
||||||
|
).mag(points);
|
||||||
|
|
||||||
|
if (mesh.isInternalFace(facei))
|
||||||
|
{
|
||||||
|
// Create the neighbour pyramid - it will have positive volume
|
||||||
|
neiPyrVol[facei] = pyramidPointFaceRef
|
||||||
|
(
|
||||||
|
f[facei],
|
||||||
|
ctrs[nei[facei]]
|
||||||
|
).mag(points);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::meshCheck::cellClosedness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const Vector<label>& meshD,
|
||||||
|
const vectorField& areas,
|
||||||
|
const scalarField& vols,
|
||||||
|
|
||||||
|
scalarField& openness,
|
||||||
|
scalarField& aratio
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const labelList& own = mesh.faceOwner();
|
||||||
|
const labelList& nei = mesh.faceNeighbour();
|
||||||
|
|
||||||
|
// Loop through cell faces and sum up the face area vectors for each cell.
|
||||||
|
// This should be zero in all vector components
|
||||||
|
|
||||||
|
vectorField sumClosed(mesh.nCells(), Zero);
|
||||||
|
vectorField sumMagClosed(mesh.nCells(), Zero);
|
||||||
|
|
||||||
|
forAll(own, facei)
|
||||||
|
{
|
||||||
|
// Add to owner
|
||||||
|
sumClosed[own[facei]] += areas[facei];
|
||||||
|
sumMagClosed[own[facei]] += cmptMag(areas[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(nei, facei)
|
||||||
|
{
|
||||||
|
// Subtract from neighbour
|
||||||
|
sumClosed[nei[facei]] -= areas[facei];
|
||||||
|
sumMagClosed[nei[facei]] += cmptMag(areas[facei]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
label nDims = 0;
|
||||||
|
for (direction dir = 0; dir < vector::nComponents; dir++)
|
||||||
|
{
|
||||||
|
if (meshD[dir] == 1)
|
||||||
|
{
|
||||||
|
nDims++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Check the sums
|
||||||
|
openness.setSize(mesh.nCells());
|
||||||
|
aratio.setSize(mesh.nCells());
|
||||||
|
|
||||||
|
forAll(sumClosed, celli)
|
||||||
|
{
|
||||||
|
scalar maxOpenness = 0;
|
||||||
|
|
||||||
|
for (direction cmpt=0; cmpt<vector::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
maxOpenness = max
|
||||||
|
(
|
||||||
|
maxOpenness,
|
||||||
|
mag(sumClosed[celli][cmpt])
|
||||||
|
/(sumMagClosed[celli][cmpt] + rootVSmall)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
openness[celli] = maxOpenness;
|
||||||
|
|
||||||
|
// Calculate the aspect ration as the maximum of Cartesian component
|
||||||
|
// aspect ratio to the total area hydraulic area aspect ratio
|
||||||
|
scalar minCmpt = vGreat;
|
||||||
|
scalar maxCmpt = -vGreat;
|
||||||
|
for (direction dir = 0; dir < vector::nComponents; dir++)
|
||||||
|
{
|
||||||
|
if (meshD[dir] == 1)
|
||||||
|
{
|
||||||
|
minCmpt = min(minCmpt, sumMagClosed[celli][dir]);
|
||||||
|
maxCmpt = max(maxCmpt, sumMagClosed[celli][dir]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scalar aspectRatio = maxCmpt/(minCmpt + rootVSmall);
|
||||||
|
if (nDims == 3)
|
||||||
|
{
|
||||||
|
scalar v = max(rootVSmall, vols[celli]);
|
||||||
|
|
||||||
|
aspectRatio = max
|
||||||
|
(
|
||||||
|
aspectRatio,
|
||||||
|
1.0/6.0*cmptSum(sumMagClosed[celli])/pow(v, 2.0/3.0)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
aratio[celli] = aspectRatio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceConcavity
|
||||||
|
(
|
||||||
|
const scalar maxSin,
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& faceAreas
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const faceList& fcs = mesh.faces();
|
||||||
|
|
||||||
|
vectorField faceNormals(faceAreas);
|
||||||
|
faceNormals /= mag(faceNormals) + rootVSmall;
|
||||||
|
|
||||||
|
tmp<scalarField> tfaceAngles(new scalarField(mesh.nFaces()));
|
||||||
|
scalarField& faceAngles = tfaceAngles.ref();
|
||||||
|
|
||||||
|
|
||||||
|
forAll(fcs, facei)
|
||||||
|
{
|
||||||
|
const face& f = fcs[facei];
|
||||||
|
|
||||||
|
// Get edge from f[0] to f[size-1];
|
||||||
|
vector ePrev(p[f.first()] - p[f.last()]);
|
||||||
|
scalar magEPrev = mag(ePrev);
|
||||||
|
ePrev /= magEPrev + rootVSmall;
|
||||||
|
|
||||||
|
scalar maxEdgeSin = 0.0;
|
||||||
|
|
||||||
|
forAll(f, fp0)
|
||||||
|
{
|
||||||
|
// Get vertex after fp
|
||||||
|
label fp1 = f.fcIndex(fp0);
|
||||||
|
|
||||||
|
// Normalised vector between two consecutive points
|
||||||
|
vector e10(p[f[fp1]] - p[f[fp0]]);
|
||||||
|
scalar magE10 = mag(e10);
|
||||||
|
e10 /= magE10 + rootVSmall;
|
||||||
|
|
||||||
|
if (magEPrev > small && magE10 > small)
|
||||||
|
{
|
||||||
|
vector edgeNormal = ePrev ^ e10;
|
||||||
|
scalar magEdgeNormal = mag(edgeNormal);
|
||||||
|
|
||||||
|
if (magEdgeNormal < maxSin)
|
||||||
|
{
|
||||||
|
// Edges (almost) aligned -> face is ok.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Check normal
|
||||||
|
edgeNormal /= magEdgeNormal;
|
||||||
|
|
||||||
|
if ((edgeNormal & faceNormals[facei]) < small)
|
||||||
|
{
|
||||||
|
maxEdgeSin = max(maxEdgeSin, magEdgeNormal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ePrev = e10;
|
||||||
|
magEPrev = magE10;
|
||||||
|
}
|
||||||
|
|
||||||
|
faceAngles[facei] = maxEdgeSin;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tfaceAngles;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::faceFlatness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& faceAreas
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const faceList& fcs = mesh.faces();
|
||||||
|
|
||||||
|
// Areas are calculated as the sum of areas. (see
|
||||||
|
// primitiveMeshFaceCentresAndAreas.C)
|
||||||
|
scalarField magAreas(mag(faceAreas));
|
||||||
|
|
||||||
|
tmp<scalarField> tfaceFlatness(new scalarField(mesh.nFaces(), 1.0));
|
||||||
|
scalarField& faceFlatness = tfaceFlatness.ref();
|
||||||
|
|
||||||
|
|
||||||
|
forAll(fcs, facei)
|
||||||
|
{
|
||||||
|
const face& f = fcs[facei];
|
||||||
|
|
||||||
|
if (f.size() > 3 && magAreas[facei] > rootVSmall)
|
||||||
|
{
|
||||||
|
const point& fc = fCtrs[facei];
|
||||||
|
|
||||||
|
// Calculate the sum of magnitude of areas and compare to magnitude
|
||||||
|
// of sum of areas.
|
||||||
|
|
||||||
|
scalar sumA = 0.0;
|
||||||
|
|
||||||
|
forAll(f, fp)
|
||||||
|
{
|
||||||
|
const point& thisPoint = p[f[fp]];
|
||||||
|
const point& nextPoint = p[f.nextLabel(fp)];
|
||||||
|
|
||||||
|
// Triangle around fc.
|
||||||
|
vector n = 0.5*((nextPoint - thisPoint)^(fc - thisPoint));
|
||||||
|
sumA += mag(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
faceFlatness[facei] = magAreas[facei]/(sumA + rootVSmall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tfaceFlatness;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::tmp<Foam::scalarField> Foam::meshCheck::cellDeterminant
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const Vector<label>& meshD,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const PackedBoolList& internalOrCoupledFace
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Determine number of dimensions and (for 2D) missing dimension
|
||||||
|
label nDims = 0;
|
||||||
|
label twoD = -1;
|
||||||
|
for (direction dir = 0; dir < vector::nComponents; dir++)
|
||||||
|
{
|
||||||
|
if (meshD[dir] == 1)
|
||||||
|
{
|
||||||
|
nDims++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
twoD = dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp<scalarField> tcellDeterminant(new scalarField(mesh.nCells()));
|
||||||
|
scalarField& cellDeterminant = tcellDeterminant.ref();
|
||||||
|
|
||||||
|
const cellList& c = mesh.cells();
|
||||||
|
|
||||||
|
if (nDims == 1)
|
||||||
|
{
|
||||||
|
cellDeterminant = 1.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
forAll(c, celli)
|
||||||
|
{
|
||||||
|
const labelList& curFaces = c[celli];
|
||||||
|
|
||||||
|
// Calculate local normalisation factor
|
||||||
|
scalar avgArea = 0;
|
||||||
|
|
||||||
|
label nInternalFaces = 0;
|
||||||
|
|
||||||
|
forAll(curFaces, i)
|
||||||
|
{
|
||||||
|
if (internalOrCoupledFace[curFaces[i]])
|
||||||
|
{
|
||||||
|
avgArea += mag(faceAreas[curFaces[i]]);
|
||||||
|
|
||||||
|
nInternalFaces++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nInternalFaces == 0)
|
||||||
|
{
|
||||||
|
cellDeterminant[celli] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
avgArea /= nInternalFaces;
|
||||||
|
|
||||||
|
symmTensor areaTensor(Zero);
|
||||||
|
|
||||||
|
forAll(curFaces, i)
|
||||||
|
{
|
||||||
|
if (internalOrCoupledFace[curFaces[i]])
|
||||||
|
{
|
||||||
|
areaTensor += sqr(faceAreas[curFaces[i]]/avgArea);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nDims == 2)
|
||||||
|
{
|
||||||
|
// Add the missing eigenvector (such that it does not
|
||||||
|
// affect the determinant)
|
||||||
|
if (twoD == 0)
|
||||||
|
{
|
||||||
|
areaTensor.xx() = 1;
|
||||||
|
}
|
||||||
|
else if (twoD == 1)
|
||||||
|
{
|
||||||
|
areaTensor.yy() = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
areaTensor.zz() = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cellDeterminant[celli] = mag(det(areaTensor));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tcellDeterminant;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::meshCheck::checkClosedBoundary
|
bool Foam::meshCheck::checkClosedBoundary
|
||||||
(
|
(
|
||||||
const primitiveMesh& mesh,
|
const primitiveMesh& mesh,
|
||||||
@ -149,7 +668,7 @@ bool Foam::meshCheck::checkClosedCells
|
|||||||
|
|
||||||
scalarField openness;
|
scalarField openness;
|
||||||
scalarField aspectRatio;
|
scalarField aspectRatio;
|
||||||
meshTools::cellClosedness
|
meshCheck::cellClosedness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
meshD,
|
meshD,
|
||||||
@ -374,7 +893,7 @@ bool Foam::meshCheck::checkFacePyramids
|
|||||||
|
|
||||||
scalarField ownPyrVol;
|
scalarField ownPyrVol;
|
||||||
scalarField neiPyrVol;
|
scalarField neiPyrVol;
|
||||||
meshTools::facePyramidVolume
|
meshCheck::facePyramidVolume
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
@ -461,7 +980,7 @@ bool Foam::meshCheck::checkFaceAngles
|
|||||||
const pointField& points = mesh.points();
|
const pointField& points = mesh.points();
|
||||||
const vectorField& faceAreas = mesh.faceAreas();
|
const vectorField& faceAreas = mesh.faceAreas();
|
||||||
|
|
||||||
tmp<scalarField> tfaceAngles = meshTools::faceConcavity
|
tmp<scalarField> tfaceAngles = meshCheck::faceConcavity
|
||||||
(
|
(
|
||||||
maxSin,
|
maxSin,
|
||||||
mesh,
|
mesh,
|
||||||
@ -542,7 +1061,7 @@ bool Foam::meshCheck::checkFaceFlatness
|
|||||||
const vectorField& faceAreas = mesh.faceAreas();
|
const vectorField& faceAreas = mesh.faceAreas();
|
||||||
const faceList& fcs = mesh.faces();
|
const faceList& fcs = mesh.faces();
|
||||||
|
|
||||||
tmp<scalarField> tfaceFlatness = meshTools::faceFlatness
|
tmp<scalarField> tfaceFlatness = meshCheck::faceFlatness
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
points,
|
points,
|
||||||
|
|||||||
@ -130,6 +130,120 @@ namespace meshCheck
|
|||||||
|
|
||||||
// Geometric checks
|
// Geometric checks
|
||||||
|
|
||||||
|
//- Generate non-orthogonality field (internal faces only)
|
||||||
|
tmp<scalarField> faceOrthogonality
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate face pyramid volume fields
|
||||||
|
void facePyramidVolume
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& points,
|
||||||
|
const vectorField& cellCtrs,
|
||||||
|
scalarField& ownPyrVol,
|
||||||
|
scalarField& neiPyrVol
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate skewness field
|
||||||
|
tmp<scalarField> faceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& points,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
const vectorField& cellCtrs
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate cell openness and cell aspect ratio field
|
||||||
|
void cellClosedness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const Vector<label>& meshD,
|
||||||
|
const vectorField& areas,
|
||||||
|
const scalarField& vols,
|
||||||
|
scalarField& openness,
|
||||||
|
scalarField& aratio
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate face concavity field. Returns per face the (sin of the)
|
||||||
|
// most concave angle between two consecutive edges
|
||||||
|
tmp<scalarField> faceConcavity
|
||||||
|
(
|
||||||
|
const scalar maxSin,
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& faceAreas
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate face flatness field. Compares the individual triangles'
|
||||||
|
// normals against the face average normal. Between 0 (fully warped)
|
||||||
|
// and 1 (fully flat)
|
||||||
|
tmp<scalarField> faceFlatness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& faceAreas
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate edge alignment field. Is per face the minimum aligned edge
|
||||||
|
// (does not use edge addressing)
|
||||||
|
tmp<scalarField> edgeAlignment
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const Vector<label>& directions,
|
||||||
|
const pointField& p
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Generate cell determinant field
|
||||||
|
tmp<scalarField> cellDeterminant
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const Vector<label>& directions,
|
||||||
|
const vectorField& faceAreas,
|
||||||
|
const PackedBoolList& internalOrCoupledFace
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Helpers: single face check
|
||||||
|
|
||||||
|
//- Skewness of single face
|
||||||
|
scalar faceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
|
||||||
|
const label facei,
|
||||||
|
const point& ownCc,
|
||||||
|
const point& neiCc
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Skewness of single boundary face
|
||||||
|
scalar boundaryFaceSkewness
|
||||||
|
(
|
||||||
|
const primitiveMesh& mesh,
|
||||||
|
const pointField& p,
|
||||||
|
const vectorField& fCtrs,
|
||||||
|
const vectorField& fAreas,
|
||||||
|
|
||||||
|
const label facei,
|
||||||
|
const point& ownCc
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Orthogonality of single face
|
||||||
|
scalar faceOrthogonality
|
||||||
|
(
|
||||||
|
const point& ownCc,
|
||||||
|
const point& neiCc,
|
||||||
|
const vector& s
|
||||||
|
);
|
||||||
|
|
||||||
//- Check boundary for closedness
|
//- Check boundary for closedness
|
||||||
bool checkClosedBoundary
|
bool checkClosedBoundary
|
||||||
(
|
(
|
||||||
|
|||||||
@ -1,551 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2012-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "primitiveMeshTools.H"
|
|
||||||
#include "syncTools.H"
|
|
||||||
#include "pyramidPointFaceRef.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::scalar Foam::meshTools::faceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
|
|
||||||
const label facei,
|
|
||||||
const point& ownCc,
|
|
||||||
const point& neiCc
|
|
||||||
)
|
|
||||||
{
|
|
||||||
vector Cpf = fCtrs[facei] - ownCc;
|
|
||||||
vector d = neiCc - ownCc;
|
|
||||||
|
|
||||||
// Skewness vector
|
|
||||||
vector sv =
|
|
||||||
Cpf
|
|
||||||
- ((fAreas[facei] & Cpf)/((fAreas[facei] & d) + rootVSmall))*d;
|
|
||||||
vector svHat = sv/(mag(sv) + rootVSmall);
|
|
||||||
|
|
||||||
// Normalisation distance calculated as the approximate distance
|
|
||||||
// from the face centre to the edge of the face in the direction
|
|
||||||
// of the skewness
|
|
||||||
scalar fd = 0.2*mag(d) + rootVSmall;
|
|
||||||
const face& f = mesh.faces()[facei];
|
|
||||||
forAll(f, pi)
|
|
||||||
{
|
|
||||||
fd = max(fd, mag(svHat & (p[f[pi]] - fCtrs[facei])));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Normalised skewness
|
|
||||||
return mag(sv)/fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::meshTools::boundaryFaceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
|
|
||||||
const label facei,
|
|
||||||
const point& ownCc
|
|
||||||
)
|
|
||||||
{
|
|
||||||
vector Cpf = fCtrs[facei] - ownCc;
|
|
||||||
|
|
||||||
vector normal = fAreas[facei];
|
|
||||||
normal /= mag(normal) + rootVSmall;
|
|
||||||
vector d = normal*(normal & Cpf);
|
|
||||||
|
|
||||||
|
|
||||||
// Skewness vector
|
|
||||||
vector sv =
|
|
||||||
Cpf
|
|
||||||
- ((fAreas[facei] & Cpf)/((fAreas[facei] & d) + rootVSmall))*d;
|
|
||||||
vector svHat = sv/(mag(sv) + rootVSmall);
|
|
||||||
|
|
||||||
// Normalisation distance calculated as the approximate distance
|
|
||||||
// from the face centre to the edge of the face in the direction
|
|
||||||
// of the skewness
|
|
||||||
scalar fd = 0.4*mag(d) + rootVSmall;
|
|
||||||
const face& f = mesh.faces()[facei];
|
|
||||||
forAll(f, pi)
|
|
||||||
{
|
|
||||||
fd = max(fd, mag(svHat & (p[f[pi]] - fCtrs[facei])));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Normalised skewness
|
|
||||||
return mag(sv)/fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::meshTools::faceOrthogonality
|
|
||||||
(
|
|
||||||
const point& ownCc,
|
|
||||||
const point& neiCc,
|
|
||||||
const vector& s
|
|
||||||
)
|
|
||||||
{
|
|
||||||
vector d = neiCc - ownCc;
|
|
||||||
|
|
||||||
return (d & s)/(mag(d)*mag(s) + rootVSmall);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceOrthogonality
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const vectorField& areas,
|
|
||||||
const vectorField& cc
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
|
|
||||||
tmp<scalarField> tortho(new scalarField(mesh.nInternalFaces()));
|
|
||||||
scalarField& ortho = tortho.ref();
|
|
||||||
|
|
||||||
// Internal faces
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
ortho[facei] = faceOrthogonality
|
|
||||||
(
|
|
||||||
cc[own[facei]],
|
|
||||||
cc[nei[facei]],
|
|
||||||
areas[facei]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tortho;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
|
|
||||||
tmp<scalarField> tskew(new scalarField(mesh.nFaces()));
|
|
||||||
scalarField& skew = tskew.ref();
|
|
||||||
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
skew[facei] = faceSkewness
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
p,
|
|
||||||
fCtrs,
|
|
||||||
fAreas,
|
|
||||||
|
|
||||||
facei,
|
|
||||||
cellCtrs[own[facei]],
|
|
||||||
cellCtrs[nei[facei]]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Boundary faces: consider them to have only skewness error.
|
|
||||||
// (i.e. treat as if mirror cell on other side)
|
|
||||||
|
|
||||||
for (label facei = mesh.nInternalFaces(); facei < mesh.nFaces(); facei++)
|
|
||||||
{
|
|
||||||
skew[facei] = boundaryFaceSkewness
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
p,
|
|
||||||
fCtrs,
|
|
||||||
fAreas,
|
|
||||||
facei,
|
|
||||||
cellCtrs[own[facei]]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tskew;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::facePyramidVolume
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& points,
|
|
||||||
const vectorField& ctrs,
|
|
||||||
|
|
||||||
scalarField& ownPyrVol,
|
|
||||||
scalarField& neiPyrVol
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
const faceList& f = mesh.faces();
|
|
||||||
|
|
||||||
ownPyrVol.setSize(mesh.nFaces());
|
|
||||||
neiPyrVol.setSize(mesh.nInternalFaces());
|
|
||||||
|
|
||||||
forAll(f, facei)
|
|
||||||
{
|
|
||||||
// Create the owner pyramid
|
|
||||||
ownPyrVol[facei] = -pyramidPointFaceRef
|
|
||||||
(
|
|
||||||
f[facei],
|
|
||||||
ctrs[own[facei]]
|
|
||||||
).mag(points);
|
|
||||||
|
|
||||||
if (mesh.isInternalFace(facei))
|
|
||||||
{
|
|
||||||
// Create the neighbour pyramid - it will have positive volume
|
|
||||||
neiPyrVol[facei] = pyramidPointFaceRef
|
|
||||||
(
|
|
||||||
f[facei],
|
|
||||||
ctrs[nei[facei]]
|
|
||||||
).mag(points);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Foam::meshTools::cellClosedness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const Vector<label>& meshD,
|
|
||||||
const vectorField& areas,
|
|
||||||
const scalarField& vols,
|
|
||||||
|
|
||||||
scalarField& openness,
|
|
||||||
scalarField& aratio
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const labelList& own = mesh.faceOwner();
|
|
||||||
const labelList& nei = mesh.faceNeighbour();
|
|
||||||
|
|
||||||
// Loop through cell faces and sum up the face area vectors for each cell.
|
|
||||||
// This should be zero in all vector components
|
|
||||||
|
|
||||||
vectorField sumClosed(mesh.nCells(), Zero);
|
|
||||||
vectorField sumMagClosed(mesh.nCells(), Zero);
|
|
||||||
|
|
||||||
forAll(own, facei)
|
|
||||||
{
|
|
||||||
// Add to owner
|
|
||||||
sumClosed[own[facei]] += areas[facei];
|
|
||||||
sumMagClosed[own[facei]] += cmptMag(areas[facei]);
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll(nei, facei)
|
|
||||||
{
|
|
||||||
// Subtract from neighbour
|
|
||||||
sumClosed[nei[facei]] -= areas[facei];
|
|
||||||
sumMagClosed[nei[facei]] += cmptMag(areas[facei]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
label nDims = 0;
|
|
||||||
for (direction dir = 0; dir < vector::nComponents; dir++)
|
|
||||||
{
|
|
||||||
if (meshD[dir] == 1)
|
|
||||||
{
|
|
||||||
nDims++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Check the sums
|
|
||||||
openness.setSize(mesh.nCells());
|
|
||||||
aratio.setSize(mesh.nCells());
|
|
||||||
|
|
||||||
forAll(sumClosed, celli)
|
|
||||||
{
|
|
||||||
scalar maxOpenness = 0;
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<vector::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
maxOpenness = max
|
|
||||||
(
|
|
||||||
maxOpenness,
|
|
||||||
mag(sumClosed[celli][cmpt])
|
|
||||||
/(sumMagClosed[celli][cmpt] + rootVSmall)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
openness[celli] = maxOpenness;
|
|
||||||
|
|
||||||
// Calculate the aspect ration as the maximum of Cartesian component
|
|
||||||
// aspect ratio to the total area hydraulic area aspect ratio
|
|
||||||
scalar minCmpt = vGreat;
|
|
||||||
scalar maxCmpt = -vGreat;
|
|
||||||
for (direction dir = 0; dir < vector::nComponents; dir++)
|
|
||||||
{
|
|
||||||
if (meshD[dir] == 1)
|
|
||||||
{
|
|
||||||
minCmpt = min(minCmpt, sumMagClosed[celli][dir]);
|
|
||||||
maxCmpt = max(maxCmpt, sumMagClosed[celli][dir]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scalar aspectRatio = maxCmpt/(minCmpt + rootVSmall);
|
|
||||||
if (nDims == 3)
|
|
||||||
{
|
|
||||||
scalar v = max(rootVSmall, vols[celli]);
|
|
||||||
|
|
||||||
aspectRatio = max
|
|
||||||
(
|
|
||||||
aspectRatio,
|
|
||||||
1.0/6.0*cmptSum(sumMagClosed[celli])/pow(v, 2.0/3.0)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
aratio[celli] = aspectRatio;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceConcavity
|
|
||||||
(
|
|
||||||
const scalar maxSin,
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& faceAreas
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const faceList& fcs = mesh.faces();
|
|
||||||
|
|
||||||
vectorField faceNormals(faceAreas);
|
|
||||||
faceNormals /= mag(faceNormals) + rootVSmall;
|
|
||||||
|
|
||||||
tmp<scalarField> tfaceAngles(new scalarField(mesh.nFaces()));
|
|
||||||
scalarField& faceAngles = tfaceAngles.ref();
|
|
||||||
|
|
||||||
|
|
||||||
forAll(fcs, facei)
|
|
||||||
{
|
|
||||||
const face& f = fcs[facei];
|
|
||||||
|
|
||||||
// Get edge from f[0] to f[size-1];
|
|
||||||
vector ePrev(p[f.first()] - p[f.last()]);
|
|
||||||
scalar magEPrev = mag(ePrev);
|
|
||||||
ePrev /= magEPrev + rootVSmall;
|
|
||||||
|
|
||||||
scalar maxEdgeSin = 0.0;
|
|
||||||
|
|
||||||
forAll(f, fp0)
|
|
||||||
{
|
|
||||||
// Get vertex after fp
|
|
||||||
label fp1 = f.fcIndex(fp0);
|
|
||||||
|
|
||||||
// Normalised vector between two consecutive points
|
|
||||||
vector e10(p[f[fp1]] - p[f[fp0]]);
|
|
||||||
scalar magE10 = mag(e10);
|
|
||||||
e10 /= magE10 + rootVSmall;
|
|
||||||
|
|
||||||
if (magEPrev > small && magE10 > small)
|
|
||||||
{
|
|
||||||
vector edgeNormal = ePrev ^ e10;
|
|
||||||
scalar magEdgeNormal = mag(edgeNormal);
|
|
||||||
|
|
||||||
if (magEdgeNormal < maxSin)
|
|
||||||
{
|
|
||||||
// Edges (almost) aligned -> face is ok.
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Check normal
|
|
||||||
edgeNormal /= magEdgeNormal;
|
|
||||||
|
|
||||||
if ((edgeNormal & faceNormals[facei]) < small)
|
|
||||||
{
|
|
||||||
maxEdgeSin = max(maxEdgeSin, magEdgeNormal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ePrev = e10;
|
|
||||||
magEPrev = magE10;
|
|
||||||
}
|
|
||||||
|
|
||||||
faceAngles[facei] = maxEdgeSin;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tfaceAngles;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::faceFlatness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& faceAreas
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const faceList& fcs = mesh.faces();
|
|
||||||
|
|
||||||
// Areas are calculated as the sum of areas. (see
|
|
||||||
// primitiveMeshFaceCentresAndAreas.C)
|
|
||||||
scalarField magAreas(mag(faceAreas));
|
|
||||||
|
|
||||||
tmp<scalarField> tfaceFlatness(new scalarField(mesh.nFaces(), 1.0));
|
|
||||||
scalarField& faceFlatness = tfaceFlatness.ref();
|
|
||||||
|
|
||||||
|
|
||||||
forAll(fcs, facei)
|
|
||||||
{
|
|
||||||
const face& f = fcs[facei];
|
|
||||||
|
|
||||||
if (f.size() > 3 && magAreas[facei] > rootVSmall)
|
|
||||||
{
|
|
||||||
const point& fc = fCtrs[facei];
|
|
||||||
|
|
||||||
// Calculate the sum of magnitude of areas and compare to magnitude
|
|
||||||
// of sum of areas.
|
|
||||||
|
|
||||||
scalar sumA = 0.0;
|
|
||||||
|
|
||||||
forAll(f, fp)
|
|
||||||
{
|
|
||||||
const point& thisPoint = p[f[fp]];
|
|
||||||
const point& nextPoint = p[f.nextLabel(fp)];
|
|
||||||
|
|
||||||
// Triangle around fc.
|
|
||||||
vector n = 0.5*((nextPoint - thisPoint)^(fc - thisPoint));
|
|
||||||
sumA += mag(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
faceFlatness[facei] = magAreas[facei]/(sumA + rootVSmall);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tfaceFlatness;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::scalarField> Foam::meshTools::cellDeterminant
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const Vector<label>& meshD,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const PackedBoolList& internalOrCoupledFace
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// Determine number of dimensions and (for 2D) missing dimension
|
|
||||||
label nDims = 0;
|
|
||||||
label twoD = -1;
|
|
||||||
for (direction dir = 0; dir < vector::nComponents; dir++)
|
|
||||||
{
|
|
||||||
if (meshD[dir] == 1)
|
|
||||||
{
|
|
||||||
nDims++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
twoD = dir;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp<scalarField> tcellDeterminant(new scalarField(mesh.nCells()));
|
|
||||||
scalarField& cellDeterminant = tcellDeterminant.ref();
|
|
||||||
|
|
||||||
const cellList& c = mesh.cells();
|
|
||||||
|
|
||||||
if (nDims == 1)
|
|
||||||
{
|
|
||||||
cellDeterminant = 1.0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
forAll(c, celli)
|
|
||||||
{
|
|
||||||
const labelList& curFaces = c[celli];
|
|
||||||
|
|
||||||
// Calculate local normalisation factor
|
|
||||||
scalar avgArea = 0;
|
|
||||||
|
|
||||||
label nInternalFaces = 0;
|
|
||||||
|
|
||||||
forAll(curFaces, i)
|
|
||||||
{
|
|
||||||
if (internalOrCoupledFace[curFaces[i]])
|
|
||||||
{
|
|
||||||
avgArea += mag(faceAreas[curFaces[i]]);
|
|
||||||
|
|
||||||
nInternalFaces++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nInternalFaces == 0)
|
|
||||||
{
|
|
||||||
cellDeterminant[celli] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
avgArea /= nInternalFaces;
|
|
||||||
|
|
||||||
symmTensor areaTensor(Zero);
|
|
||||||
|
|
||||||
forAll(curFaces, i)
|
|
||||||
{
|
|
||||||
if (internalOrCoupledFace[curFaces[i]])
|
|
||||||
{
|
|
||||||
areaTensor += sqr(faceAreas[curFaces[i]]/avgArea);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nDims == 2)
|
|
||||||
{
|
|
||||||
// Add the missing eigenvector (such that it does not
|
|
||||||
// affect the determinant)
|
|
||||||
if (twoD == 0)
|
|
||||||
{
|
|
||||||
areaTensor.xx() = 1;
|
|
||||||
}
|
|
||||||
else if (twoD == 1)
|
|
||||||
{
|
|
||||||
areaTensor.yy() = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
areaTensor.zz() = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cellDeterminant[celli] = mag(det(areaTensor));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return tcellDeterminant;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,175 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration | Website: https://openfoam.org
|
|
||||||
\\ / A nd | Copyright (C) 2012-2023 OpenFOAM Foundation
|
|
||||||
\\/ 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Namespace
|
|
||||||
Foam::meshTools
|
|
||||||
|
|
||||||
Description
|
|
||||||
Collection of functions operating on primitiveMesh (mainly checks).
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
primitiveMeshTools.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
#ifndef primitiveMeshTools_H
|
|
||||||
#define primitiveMeshTools_H
|
|
||||||
|
|
||||||
#include "primitiveMesh.H"
|
|
||||||
#include "PackedBoolList.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Namespace meshTools Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
namespace meshTools
|
|
||||||
{
|
|
||||||
//- Generate non-orthogonality field (internal faces only)
|
|
||||||
tmp<scalarField> faceOrthogonality
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate face pyramid volume fields
|
|
||||||
void facePyramidVolume
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& points,
|
|
||||||
const vectorField& cellCtrs,
|
|
||||||
scalarField& ownPyrVol,
|
|
||||||
scalarField& neiPyrVol
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate skewness field
|
|
||||||
tmp<scalarField> faceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& points,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
const vectorField& cellCtrs
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate cell openness and cell aspect ratio field
|
|
||||||
void cellClosedness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const Vector<label>& meshD,
|
|
||||||
const vectorField& areas,
|
|
||||||
const scalarField& vols,
|
|
||||||
scalarField& openness,
|
|
||||||
scalarField& aratio
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate face concavity field. Returns per face the (sin of the)
|
|
||||||
// most concave angle between two consecutive edges
|
|
||||||
tmp<scalarField> faceConcavity
|
|
||||||
(
|
|
||||||
const scalar maxSin,
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& faceAreas
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate face flatness field. Compares the individual triangles'
|
|
||||||
// normals against the face average normal. Between 0 (fully warped)
|
|
||||||
// and 1 (fully flat)
|
|
||||||
tmp<scalarField> faceFlatness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& faceAreas
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate edge alignment field. Is per face the minimum aligned edge
|
|
||||||
// (does not use edge addressing)
|
|
||||||
tmp<scalarField> edgeAlignment
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const Vector<label>& directions,
|
|
||||||
const pointField& p
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Generate cell determinant field
|
|
||||||
tmp<scalarField> cellDeterminant
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const Vector<label>& directions,
|
|
||||||
const vectorField& faceAreas,
|
|
||||||
const PackedBoolList& internalOrCoupledFace
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Helpers: single face check
|
|
||||||
|
|
||||||
//- Skewness of single face
|
|
||||||
scalar faceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
|
|
||||||
const label facei,
|
|
||||||
const point& ownCc,
|
|
||||||
const point& neiCc
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Skewness of single boundary face
|
|
||||||
scalar boundaryFaceSkewness
|
|
||||||
(
|
|
||||||
const primitiveMesh& mesh,
|
|
||||||
const pointField& p,
|
|
||||||
const vectorField& fCtrs,
|
|
||||||
const vectorField& fAreas,
|
|
||||||
|
|
||||||
const label facei,
|
|
||||||
const point& ownCc
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Orthogonality of single face
|
|
||||||
scalar faceOrthogonality
|
|
||||||
(
|
|
||||||
const point& ownCc,
|
|
||||||
const point& neiCc,
|
|
||||||
const vector& s
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Version: dev
|
||||||
|
\\/ M anipulation |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
format ascii;
|
||||||
|
class polyBoundaryMesh;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object boundary;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
3
|
||||||
|
(
|
||||||
|
movingWall
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
inGroups List<word> 1(wall);
|
||||||
|
nFaces 20;
|
||||||
|
startFace 760;
|
||||||
|
}
|
||||||
|
fixedWalls
|
||||||
|
{
|
||||||
|
type wall;
|
||||||
|
inGroups List<word> 1(wall);
|
||||||
|
nFaces 60;
|
||||||
|
startFace 780;
|
||||||
|
}
|
||||||
|
frontAndBack
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
inGroups List<word> 1(empty);
|
||||||
|
nFaces 800;
|
||||||
|
startFace 840;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
1663
tutorials/incompressibleFluid/cavity/constant/polyMesh/faces
Normal file
1663
tutorials/incompressibleFluid/cavity/constant/polyMesh/faces
Normal file
File diff suppressed because it is too large
Load Diff
784
tutorials/incompressibleFluid/cavity/constant/polyMesh/neighbour
Normal file
784
tutorials/incompressibleFluid/cavity/constant/polyMesh/neighbour
Normal file
@ -0,0 +1,784 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Version: dev
|
||||||
|
\\/ M anipulation |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
format ascii;
|
||||||
|
class labelList;
|
||||||
|
note "nPoints: 882 nCells: 400 nFaces: 1640 nInternalFaces: 760";
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object neighbour;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
760
|
||||||
|
(
|
||||||
|
1
|
||||||
|
20
|
||||||
|
2
|
||||||
|
21
|
||||||
|
3
|
||||||
|
22
|
||||||
|
4
|
||||||
|
23
|
||||||
|
5
|
||||||
|
24
|
||||||
|
6
|
||||||
|
25
|
||||||
|
7
|
||||||
|
26
|
||||||
|
8
|
||||||
|
27
|
||||||
|
9
|
||||||
|
28
|
||||||
|
10
|
||||||
|
29
|
||||||
|
11
|
||||||
|
30
|
||||||
|
12
|
||||||
|
31
|
||||||
|
13
|
||||||
|
32
|
||||||
|
14
|
||||||
|
33
|
||||||
|
15
|
||||||
|
34
|
||||||
|
16
|
||||||
|
35
|
||||||
|
17
|
||||||
|
36
|
||||||
|
18
|
||||||
|
37
|
||||||
|
19
|
||||||
|
38
|
||||||
|
39
|
||||||
|
21
|
||||||
|
40
|
||||||
|
22
|
||||||
|
41
|
||||||
|
23
|
||||||
|
42
|
||||||
|
24
|
||||||
|
43
|
||||||
|
25
|
||||||
|
44
|
||||||
|
26
|
||||||
|
45
|
||||||
|
27
|
||||||
|
46
|
||||||
|
28
|
||||||
|
47
|
||||||
|
29
|
||||||
|
48
|
||||||
|
30
|
||||||
|
49
|
||||||
|
31
|
||||||
|
50
|
||||||
|
32
|
||||||
|
51
|
||||||
|
33
|
||||||
|
52
|
||||||
|
34
|
||||||
|
53
|
||||||
|
35
|
||||||
|
54
|
||||||
|
36
|
||||||
|
55
|
||||||
|
37
|
||||||
|
56
|
||||||
|
38
|
||||||
|
57
|
||||||
|
39
|
||||||
|
58
|
||||||
|
59
|
||||||
|
41
|
||||||
|
60
|
||||||
|
42
|
||||||
|
61
|
||||||
|
43
|
||||||
|
62
|
||||||
|
44
|
||||||
|
63
|
||||||
|
45
|
||||||
|
64
|
||||||
|
46
|
||||||
|
65
|
||||||
|
47
|
||||||
|
66
|
||||||
|
48
|
||||||
|
67
|
||||||
|
49
|
||||||
|
68
|
||||||
|
50
|
||||||
|
69
|
||||||
|
51
|
||||||
|
70
|
||||||
|
52
|
||||||
|
71
|
||||||
|
53
|
||||||
|
72
|
||||||
|
54
|
||||||
|
73
|
||||||
|
55
|
||||||
|
74
|
||||||
|
56
|
||||||
|
75
|
||||||
|
57
|
||||||
|
76
|
||||||
|
58
|
||||||
|
77
|
||||||
|
59
|
||||||
|
78
|
||||||
|
79
|
||||||
|
61
|
||||||
|
80
|
||||||
|
62
|
||||||
|
81
|
||||||
|
63
|
||||||
|
82
|
||||||
|
64
|
||||||
|
83
|
||||||
|
65
|
||||||
|
84
|
||||||
|
66
|
||||||
|
85
|
||||||
|
67
|
||||||
|
86
|
||||||
|
68
|
||||||
|
87
|
||||||
|
69
|
||||||
|
88
|
||||||
|
70
|
||||||
|
89
|
||||||
|
71
|
||||||
|
90
|
||||||
|
72
|
||||||
|
91
|
||||||
|
73
|
||||||
|
92
|
||||||
|
74
|
||||||
|
93
|
||||||
|
75
|
||||||
|
94
|
||||||
|
76
|
||||||
|
95
|
||||||
|
77
|
||||||
|
96
|
||||||
|
78
|
||||||
|
97
|
||||||
|
79
|
||||||
|
98
|
||||||
|
99
|
||||||
|
81
|
||||||
|
100
|
||||||
|
82
|
||||||
|
101
|
||||||
|
83
|
||||||
|
102
|
||||||
|
84
|
||||||
|
103
|
||||||
|
85
|
||||||
|
104
|
||||||
|
86
|
||||||
|
105
|
||||||
|
87
|
||||||
|
106
|
||||||
|
88
|
||||||
|
107
|
||||||
|
89
|
||||||
|
108
|
||||||
|
90
|
||||||
|
109
|
||||||
|
91
|
||||||
|
110
|
||||||
|
92
|
||||||
|
111
|
||||||
|
93
|
||||||
|
112
|
||||||
|
94
|
||||||
|
113
|
||||||
|
95
|
||||||
|
114
|
||||||
|
96
|
||||||
|
115
|
||||||
|
97
|
||||||
|
116
|
||||||
|
98
|
||||||
|
117
|
||||||
|
99
|
||||||
|
118
|
||||||
|
119
|
||||||
|
101
|
||||||
|
120
|
||||||
|
102
|
||||||
|
121
|
||||||
|
103
|
||||||
|
122
|
||||||
|
104
|
||||||
|
123
|
||||||
|
105
|
||||||
|
124
|
||||||
|
106
|
||||||
|
125
|
||||||
|
107
|
||||||
|
126
|
||||||
|
108
|
||||||
|
127
|
||||||
|
109
|
||||||
|
128
|
||||||
|
110
|
||||||
|
129
|
||||||
|
111
|
||||||
|
130
|
||||||
|
112
|
||||||
|
131
|
||||||
|
113
|
||||||
|
132
|
||||||
|
114
|
||||||
|
133
|
||||||
|
115
|
||||||
|
134
|
||||||
|
116
|
||||||
|
135
|
||||||
|
117
|
||||||
|
136
|
||||||
|
118
|
||||||
|
137
|
||||||
|
119
|
||||||
|
138
|
||||||
|
139
|
||||||
|
121
|
||||||
|
140
|
||||||
|
122
|
||||||
|
141
|
||||||
|
123
|
||||||
|
142
|
||||||
|
124
|
||||||
|
143
|
||||||
|
125
|
||||||
|
144
|
||||||
|
126
|
||||||
|
145
|
||||||
|
127
|
||||||
|
146
|
||||||
|
128
|
||||||
|
147
|
||||||
|
129
|
||||||
|
148
|
||||||
|
130
|
||||||
|
149
|
||||||
|
131
|
||||||
|
150
|
||||||
|
132
|
||||||
|
151
|
||||||
|
133
|
||||||
|
152
|
||||||
|
134
|
||||||
|
153
|
||||||
|
135
|
||||||
|
154
|
||||||
|
136
|
||||||
|
155
|
||||||
|
137
|
||||||
|
156
|
||||||
|
138
|
||||||
|
157
|
||||||
|
139
|
||||||
|
158
|
||||||
|
159
|
||||||
|
141
|
||||||
|
160
|
||||||
|
142
|
||||||
|
161
|
||||||
|
143
|
||||||
|
162
|
||||||
|
144
|
||||||
|
163
|
||||||
|
145
|
||||||
|
164
|
||||||
|
146
|
||||||
|
165
|
||||||
|
147
|
||||||
|
166
|
||||||
|
148
|
||||||
|
167
|
||||||
|
149
|
||||||
|
168
|
||||||
|
150
|
||||||
|
169
|
||||||
|
151
|
||||||
|
170
|
||||||
|
152
|
||||||
|
171
|
||||||
|
153
|
||||||
|
172
|
||||||
|
154
|
||||||
|
173
|
||||||
|
155
|
||||||
|
174
|
||||||
|
156
|
||||||
|
175
|
||||||
|
157
|
||||||
|
176
|
||||||
|
158
|
||||||
|
177
|
||||||
|
159
|
||||||
|
178
|
||||||
|
179
|
||||||
|
161
|
||||||
|
180
|
||||||
|
162
|
||||||
|
181
|
||||||
|
163
|
||||||
|
182
|
||||||
|
164
|
||||||
|
183
|
||||||
|
165
|
||||||
|
184
|
||||||
|
166
|
||||||
|
185
|
||||||
|
167
|
||||||
|
186
|
||||||
|
168
|
||||||
|
187
|
||||||
|
169
|
||||||
|
188
|
||||||
|
170
|
||||||
|
189
|
||||||
|
171
|
||||||
|
190
|
||||||
|
172
|
||||||
|
191
|
||||||
|
173
|
||||||
|
192
|
||||||
|
174
|
||||||
|
193
|
||||||
|
175
|
||||||
|
194
|
||||||
|
176
|
||||||
|
195
|
||||||
|
177
|
||||||
|
196
|
||||||
|
178
|
||||||
|
197
|
||||||
|
179
|
||||||
|
198
|
||||||
|
199
|
||||||
|
181
|
||||||
|
200
|
||||||
|
182
|
||||||
|
201
|
||||||
|
183
|
||||||
|
202
|
||||||
|
184
|
||||||
|
203
|
||||||
|
185
|
||||||
|
204
|
||||||
|
186
|
||||||
|
205
|
||||||
|
187
|
||||||
|
206
|
||||||
|
188
|
||||||
|
207
|
||||||
|
189
|
||||||
|
208
|
||||||
|
190
|
||||||
|
209
|
||||||
|
191
|
||||||
|
210
|
||||||
|
192
|
||||||
|
211
|
||||||
|
193
|
||||||
|
212
|
||||||
|
194
|
||||||
|
213
|
||||||
|
195
|
||||||
|
214
|
||||||
|
196
|
||||||
|
215
|
||||||
|
197
|
||||||
|
216
|
||||||
|
198
|
||||||
|
217
|
||||||
|
199
|
||||||
|
218
|
||||||
|
219
|
||||||
|
201
|
||||||
|
220
|
||||||
|
202
|
||||||
|
221
|
||||||
|
203
|
||||||
|
222
|
||||||
|
204
|
||||||
|
223
|
||||||
|
205
|
||||||
|
224
|
||||||
|
206
|
||||||
|
225
|
||||||
|
207
|
||||||
|
226
|
||||||
|
208
|
||||||
|
227
|
||||||
|
209
|
||||||
|
228
|
||||||
|
210
|
||||||
|
229
|
||||||
|
211
|
||||||
|
230
|
||||||
|
212
|
||||||
|
231
|
||||||
|
213
|
||||||
|
232
|
||||||
|
214
|
||||||
|
233
|
||||||
|
215
|
||||||
|
234
|
||||||
|
216
|
||||||
|
235
|
||||||
|
217
|
||||||
|
236
|
||||||
|
218
|
||||||
|
237
|
||||||
|
219
|
||||||
|
238
|
||||||
|
239
|
||||||
|
221
|
||||||
|
240
|
||||||
|
222
|
||||||
|
241
|
||||||
|
223
|
||||||
|
242
|
||||||
|
224
|
||||||
|
243
|
||||||
|
225
|
||||||
|
244
|
||||||
|
226
|
||||||
|
245
|
||||||
|
227
|
||||||
|
246
|
||||||
|
228
|
||||||
|
247
|
||||||
|
229
|
||||||
|
248
|
||||||
|
230
|
||||||
|
249
|
||||||
|
231
|
||||||
|
250
|
||||||
|
232
|
||||||
|
251
|
||||||
|
233
|
||||||
|
252
|
||||||
|
234
|
||||||
|
253
|
||||||
|
235
|
||||||
|
254
|
||||||
|
236
|
||||||
|
255
|
||||||
|
237
|
||||||
|
256
|
||||||
|
238
|
||||||
|
257
|
||||||
|
239
|
||||||
|
258
|
||||||
|
259
|
||||||
|
241
|
||||||
|
260
|
||||||
|
242
|
||||||
|
261
|
||||||
|
243
|
||||||
|
262
|
||||||
|
244
|
||||||
|
263
|
||||||
|
245
|
||||||
|
264
|
||||||
|
246
|
||||||
|
265
|
||||||
|
247
|
||||||
|
266
|
||||||
|
248
|
||||||
|
267
|
||||||
|
249
|
||||||
|
268
|
||||||
|
250
|
||||||
|
269
|
||||||
|
251
|
||||||
|
270
|
||||||
|
252
|
||||||
|
271
|
||||||
|
253
|
||||||
|
272
|
||||||
|
254
|
||||||
|
273
|
||||||
|
255
|
||||||
|
274
|
||||||
|
256
|
||||||
|
275
|
||||||
|
257
|
||||||
|
276
|
||||||
|
258
|
||||||
|
277
|
||||||
|
259
|
||||||
|
278
|
||||||
|
279
|
||||||
|
261
|
||||||
|
280
|
||||||
|
262
|
||||||
|
281
|
||||||
|
263
|
||||||
|
282
|
||||||
|
264
|
||||||
|
283
|
||||||
|
265
|
||||||
|
284
|
||||||
|
266
|
||||||
|
285
|
||||||
|
267
|
||||||
|
286
|
||||||
|
268
|
||||||
|
287
|
||||||
|
269
|
||||||
|
288
|
||||||
|
270
|
||||||
|
289
|
||||||
|
271
|
||||||
|
290
|
||||||
|
272
|
||||||
|
291
|
||||||
|
273
|
||||||
|
292
|
||||||
|
274
|
||||||
|
293
|
||||||
|
275
|
||||||
|
294
|
||||||
|
276
|
||||||
|
295
|
||||||
|
277
|
||||||
|
296
|
||||||
|
278
|
||||||
|
297
|
||||||
|
279
|
||||||
|
298
|
||||||
|
299
|
||||||
|
281
|
||||||
|
300
|
||||||
|
282
|
||||||
|
301
|
||||||
|
283
|
||||||
|
302
|
||||||
|
284
|
||||||
|
303
|
||||||
|
285
|
||||||
|
304
|
||||||
|
286
|
||||||
|
305
|
||||||
|
287
|
||||||
|
306
|
||||||
|
288
|
||||||
|
307
|
||||||
|
289
|
||||||
|
308
|
||||||
|
290
|
||||||
|
309
|
||||||
|
291
|
||||||
|
310
|
||||||
|
292
|
||||||
|
311
|
||||||
|
293
|
||||||
|
312
|
||||||
|
294
|
||||||
|
313
|
||||||
|
295
|
||||||
|
314
|
||||||
|
296
|
||||||
|
315
|
||||||
|
297
|
||||||
|
316
|
||||||
|
298
|
||||||
|
317
|
||||||
|
299
|
||||||
|
318
|
||||||
|
319
|
||||||
|
301
|
||||||
|
320
|
||||||
|
302
|
||||||
|
321
|
||||||
|
303
|
||||||
|
322
|
||||||
|
304
|
||||||
|
323
|
||||||
|
305
|
||||||
|
324
|
||||||
|
306
|
||||||
|
325
|
||||||
|
307
|
||||||
|
326
|
||||||
|
308
|
||||||
|
327
|
||||||
|
309
|
||||||
|
328
|
||||||
|
310
|
||||||
|
329
|
||||||
|
311
|
||||||
|
330
|
||||||
|
312
|
||||||
|
331
|
||||||
|
313
|
||||||
|
332
|
||||||
|
314
|
||||||
|
333
|
||||||
|
315
|
||||||
|
334
|
||||||
|
316
|
||||||
|
335
|
||||||
|
317
|
||||||
|
336
|
||||||
|
318
|
||||||
|
337
|
||||||
|
319
|
||||||
|
338
|
||||||
|
339
|
||||||
|
321
|
||||||
|
340
|
||||||
|
322
|
||||||
|
341
|
||||||
|
323
|
||||||
|
342
|
||||||
|
324
|
||||||
|
343
|
||||||
|
325
|
||||||
|
344
|
||||||
|
326
|
||||||
|
345
|
||||||
|
327
|
||||||
|
346
|
||||||
|
328
|
||||||
|
347
|
||||||
|
329
|
||||||
|
348
|
||||||
|
330
|
||||||
|
349
|
||||||
|
331
|
||||||
|
350
|
||||||
|
332
|
||||||
|
351
|
||||||
|
333
|
||||||
|
352
|
||||||
|
334
|
||||||
|
353
|
||||||
|
335
|
||||||
|
354
|
||||||
|
336
|
||||||
|
355
|
||||||
|
337
|
||||||
|
356
|
||||||
|
338
|
||||||
|
357
|
||||||
|
339
|
||||||
|
358
|
||||||
|
359
|
||||||
|
341
|
||||||
|
360
|
||||||
|
342
|
||||||
|
361
|
||||||
|
343
|
||||||
|
362
|
||||||
|
344
|
||||||
|
363
|
||||||
|
345
|
||||||
|
364
|
||||||
|
346
|
||||||
|
365
|
||||||
|
347
|
||||||
|
366
|
||||||
|
348
|
||||||
|
367
|
||||||
|
349
|
||||||
|
368
|
||||||
|
350
|
||||||
|
369
|
||||||
|
351
|
||||||
|
370
|
||||||
|
352
|
||||||
|
371
|
||||||
|
353
|
||||||
|
372
|
||||||
|
354
|
||||||
|
373
|
||||||
|
355
|
||||||
|
374
|
||||||
|
356
|
||||||
|
375
|
||||||
|
357
|
||||||
|
376
|
||||||
|
358
|
||||||
|
377
|
||||||
|
359
|
||||||
|
378
|
||||||
|
379
|
||||||
|
361
|
||||||
|
380
|
||||||
|
362
|
||||||
|
381
|
||||||
|
363
|
||||||
|
382
|
||||||
|
364
|
||||||
|
383
|
||||||
|
365
|
||||||
|
384
|
||||||
|
366
|
||||||
|
385
|
||||||
|
367
|
||||||
|
386
|
||||||
|
368
|
||||||
|
387
|
||||||
|
369
|
||||||
|
388
|
||||||
|
370
|
||||||
|
389
|
||||||
|
371
|
||||||
|
390
|
||||||
|
372
|
||||||
|
391
|
||||||
|
373
|
||||||
|
392
|
||||||
|
374
|
||||||
|
393
|
||||||
|
375
|
||||||
|
394
|
||||||
|
376
|
||||||
|
395
|
||||||
|
377
|
||||||
|
396
|
||||||
|
378
|
||||||
|
397
|
||||||
|
379
|
||||||
|
398
|
||||||
|
399
|
||||||
|
381
|
||||||
|
382
|
||||||
|
383
|
||||||
|
384
|
||||||
|
385
|
||||||
|
386
|
||||||
|
387
|
||||||
|
388
|
||||||
|
389
|
||||||
|
390
|
||||||
|
391
|
||||||
|
392
|
||||||
|
393
|
||||||
|
394
|
||||||
|
395
|
||||||
|
396
|
||||||
|
397
|
||||||
|
398
|
||||||
|
399
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
1664
tutorials/incompressibleFluid/cavity/constant/polyMesh/owner
Normal file
1664
tutorials/incompressibleFluid/cavity/constant/polyMesh/owner
Normal file
File diff suppressed because it is too large
Load Diff
905
tutorials/incompressibleFluid/cavity/constant/polyMesh/points
Normal file
905
tutorials/incompressibleFluid/cavity/constant/polyMesh/points
Normal file
@ -0,0 +1,905 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration | Website: https://openfoam.org
|
||||||
|
\\ / A nd | Version: dev
|
||||||
|
\\/ M anipulation |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
format ascii;
|
||||||
|
class vectorField;
|
||||||
|
location "constant/polyMesh";
|
||||||
|
object points;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
882
|
||||||
|
(
|
||||||
|
(0 0 0)
|
||||||
|
(0.005 0 0)
|
||||||
|
(0.01 0 0)
|
||||||
|
(0.015 0 0)
|
||||||
|
(0.02 0 0)
|
||||||
|
(0.025 0 0)
|
||||||
|
(0.03 0 0)
|
||||||
|
(0.035 0 0)
|
||||||
|
(0.04 0 0)
|
||||||
|
(0.045 0 0)
|
||||||
|
(0.05 0 0)
|
||||||
|
(0.055 0 0)
|
||||||
|
(0.06 0 0)
|
||||||
|
(0.065 0 0)
|
||||||
|
(0.07 0 0)
|
||||||
|
(0.075 0 0)
|
||||||
|
(0.08 0 0)
|
||||||
|
(0.085 0 0)
|
||||||
|
(0.09 0 0)
|
||||||
|
(0.095 0 0)
|
||||||
|
(0.1 0 0)
|
||||||
|
(0 0.005 0)
|
||||||
|
(0.005 0.005 0)
|
||||||
|
(0.01 0.005 0)
|
||||||
|
(0.015 0.005 0)
|
||||||
|
(0.02 0.005 0)
|
||||||
|
(0.025 0.005 0)
|
||||||
|
(0.03 0.005 0)
|
||||||
|
(0.035 0.005 0)
|
||||||
|
(0.04 0.005 0)
|
||||||
|
(0.045 0.005 0)
|
||||||
|
(0.05 0.005 0)
|
||||||
|
(0.055 0.005 0)
|
||||||
|
(0.06 0.005 0)
|
||||||
|
(0.065 0.005 0)
|
||||||
|
(0.07 0.005 0)
|
||||||
|
(0.075 0.005 0)
|
||||||
|
(0.08 0.005 0)
|
||||||
|
(0.085 0.005 0)
|
||||||
|
(0.09 0.005 0)
|
||||||
|
(0.095 0.005 0)
|
||||||
|
(0.1 0.005 0)
|
||||||
|
(0 0.01 0)
|
||||||
|
(0.005 0.01 0)
|
||||||
|
(0.01 0.01 0)
|
||||||
|
(0.015 0.01 0)
|
||||||
|
(0.02 0.01 0)
|
||||||
|
(0.025 0.01 0)
|
||||||
|
(0.03 0.01 0)
|
||||||
|
(0.035 0.01 0)
|
||||||
|
(0.04 0.01 0)
|
||||||
|
(0.045 0.01 0)
|
||||||
|
(0.05 0.01 0)
|
||||||
|
(0.055 0.01 0)
|
||||||
|
(0.06 0.01 0)
|
||||||
|
(0.065 0.01 0)
|
||||||
|
(0.07 0.01 0)
|
||||||
|
(0.075 0.01 0)
|
||||||
|
(0.08 0.01 0)
|
||||||
|
(0.085 0.01 0)
|
||||||
|
(0.09 0.01 0)
|
||||||
|
(0.095 0.01 0)
|
||||||
|
(0.1 0.01 0)
|
||||||
|
(0 0.015 0)
|
||||||
|
(0.005 0.015 0)
|
||||||
|
(0.01 0.015 0)
|
||||||
|
(0.015 0.015 0)
|
||||||
|
(0.02 0.015 0)
|
||||||
|
(0.025 0.015 0)
|
||||||
|
(0.03 0.015 0)
|
||||||
|
(0.035 0.015 0)
|
||||||
|
(0.04 0.015 0)
|
||||||
|
(0.045 0.015 0)
|
||||||
|
(0.05 0.015 0)
|
||||||
|
(0.055 0.015 0)
|
||||||
|
(0.06 0.015 0)
|
||||||
|
(0.065 0.015 0)
|
||||||
|
(0.07 0.015 0)
|
||||||
|
(0.075 0.015 0)
|
||||||
|
(0.08 0.015 0)
|
||||||
|
(0.085 0.015 0)
|
||||||
|
(0.09 0.015 0)
|
||||||
|
(0.095 0.015 0)
|
||||||
|
(0.1 0.015 0)
|
||||||
|
(0 0.02 0)
|
||||||
|
(0.005 0.02 0)
|
||||||
|
(0.01 0.02 0)
|
||||||
|
(0.015 0.02 0)
|
||||||
|
(0.02 0.02 0)
|
||||||
|
(0.025 0.02 0)
|
||||||
|
(0.03 0.02 0)
|
||||||
|
(0.035 0.02 0)
|
||||||
|
(0.04 0.02 0)
|
||||||
|
(0.045 0.02 0)
|
||||||
|
(0.05 0.02 0)
|
||||||
|
(0.055 0.02 0)
|
||||||
|
(0.06 0.02 0)
|
||||||
|
(0.065 0.02 0)
|
||||||
|
(0.07 0.02 0)
|
||||||
|
(0.075 0.02 0)
|
||||||
|
(0.08 0.02 0)
|
||||||
|
(0.085 0.02 0)
|
||||||
|
(0.09 0.02 0)
|
||||||
|
(0.095 0.02 0)
|
||||||
|
(0.1 0.02 0)
|
||||||
|
(0 0.025 0)
|
||||||
|
(0.005 0.025 0)
|
||||||
|
(0.01 0.025 0)
|
||||||
|
(0.015 0.025 0)
|
||||||
|
(0.02 0.025 0)
|
||||||
|
(0.025 0.025 0)
|
||||||
|
(0.03 0.025 0)
|
||||||
|
(0.035 0.025 0)
|
||||||
|
(0.04 0.025 0)
|
||||||
|
(0.045 0.025 0)
|
||||||
|
(0.05 0.025 0)
|
||||||
|
(0.055 0.025 0)
|
||||||
|
(0.06 0.025 0)
|
||||||
|
(0.065 0.025 0)
|
||||||
|
(0.07 0.025 0)
|
||||||
|
(0.075 0.025 0)
|
||||||
|
(0.08 0.025 0)
|
||||||
|
(0.085 0.025 0)
|
||||||
|
(0.09 0.025 0)
|
||||||
|
(0.095 0.025 0)
|
||||||
|
(0.1 0.025 0)
|
||||||
|
(0 0.03 0)
|
||||||
|
(0.005 0.03 0)
|
||||||
|
(0.01 0.03 0)
|
||||||
|
(0.015 0.03 0)
|
||||||
|
(0.02 0.03 0)
|
||||||
|
(0.025 0.03 0)
|
||||||
|
(0.03 0.03 0)
|
||||||
|
(0.035 0.03 0)
|
||||||
|
(0.04 0.03 0)
|
||||||
|
(0.045 0.03 0)
|
||||||
|
(0.05 0.03 0)
|
||||||
|
(0.055 0.03 0)
|
||||||
|
(0.06 0.03 0)
|
||||||
|
(0.065 0.03 0)
|
||||||
|
(0.07 0.03 0)
|
||||||
|
(0.075 0.03 0)
|
||||||
|
(0.08 0.03 0)
|
||||||
|
(0.085 0.03 0)
|
||||||
|
(0.09 0.03 0)
|
||||||
|
(0.095 0.03 0)
|
||||||
|
(0.1 0.03 0)
|
||||||
|
(0 0.035 0)
|
||||||
|
(0.005 0.035 0)
|
||||||
|
(0.01 0.035 0)
|
||||||
|
(0.015 0.035 0)
|
||||||
|
(0.02 0.035 0)
|
||||||
|
(0.025 0.035 0)
|
||||||
|
(0.03 0.035 0)
|
||||||
|
(0.035 0.035 0)
|
||||||
|
(0.04 0.035 0)
|
||||||
|
(0.045 0.035 0)
|
||||||
|
(0.05 0.035 0)
|
||||||
|
(0.055 0.035 0)
|
||||||
|
(0.06 0.035 0)
|
||||||
|
(0.065 0.035 0)
|
||||||
|
(0.07 0.035 0)
|
||||||
|
(0.075 0.035 0)
|
||||||
|
(0.08 0.035 0)
|
||||||
|
(0.085 0.035 0)
|
||||||
|
(0.09 0.035 0)
|
||||||
|
(0.095 0.035 0)
|
||||||
|
(0.1 0.035 0)
|
||||||
|
(0 0.04 0)
|
||||||
|
(0.005 0.04 0)
|
||||||
|
(0.01 0.04 0)
|
||||||
|
(0.015 0.04 0)
|
||||||
|
(0.02 0.04 0)
|
||||||
|
(0.025 0.04 0)
|
||||||
|
(0.03 0.04 0)
|
||||||
|
(0.035 0.04 0)
|
||||||
|
(0.04 0.04 0)
|
||||||
|
(0.045 0.04 0)
|
||||||
|
(0.05 0.04 0)
|
||||||
|
(0.055 0.04 0)
|
||||||
|
(0.06 0.04 0)
|
||||||
|
(0.065 0.04 0)
|
||||||
|
(0.07 0.04 0)
|
||||||
|
(0.075 0.04 0)
|
||||||
|
(0.08 0.04 0)
|
||||||
|
(0.085 0.04 0)
|
||||||
|
(0.09 0.04 0)
|
||||||
|
(0.095 0.04 0)
|
||||||
|
(0.1 0.04 0)
|
||||||
|
(0 0.045 0)
|
||||||
|
(0.005 0.045 0)
|
||||||
|
(0.01 0.045 0)
|
||||||
|
(0.015 0.045 0)
|
||||||
|
(0.02 0.045 0)
|
||||||
|
(0.025 0.045 0)
|
||||||
|
(0.03 0.045 0)
|
||||||
|
(0.035 0.045 0)
|
||||||
|
(0.04 0.045 0)
|
||||||
|
(0.045 0.045 0)
|
||||||
|
(0.05 0.045 0)
|
||||||
|
(0.055 0.045 0)
|
||||||
|
(0.06 0.045 0)
|
||||||
|
(0.065 0.045 0)
|
||||||
|
(0.07 0.045 0)
|
||||||
|
(0.075 0.045 0)
|
||||||
|
(0.08 0.045 0)
|
||||||
|
(0.085 0.045 0)
|
||||||
|
(0.09 0.045 0)
|
||||||
|
(0.095 0.045 0)
|
||||||
|
(0.1 0.045 0)
|
||||||
|
(0 0.05 0)
|
||||||
|
(0.005 0.05 0)
|
||||||
|
(0.01 0.05 0)
|
||||||
|
(0.015 0.05 0)
|
||||||
|
(0.02 0.05 0)
|
||||||
|
(0.025 0.05 0)
|
||||||
|
(0.03 0.05 0)
|
||||||
|
(0.035 0.05 0)
|
||||||
|
(0.04 0.05 0)
|
||||||
|
(0.045 0.05 0)
|
||||||
|
(0.05 0.05 0)
|
||||||
|
(0.055 0.05 0)
|
||||||
|
(0.06 0.05 0)
|
||||||
|
(0.065 0.05 0)
|
||||||
|
(0.07 0.05 0)
|
||||||
|
(0.075 0.05 0)
|
||||||
|
(0.08 0.05 0)
|
||||||
|
(0.085 0.05 0)
|
||||||
|
(0.09 0.05 0)
|
||||||
|
(0.095 0.05 0)
|
||||||
|
(0.1 0.05 0)
|
||||||
|
(0 0.055 0)
|
||||||
|
(0.005 0.055 0)
|
||||||
|
(0.01 0.055 0)
|
||||||
|
(0.015 0.055 0)
|
||||||
|
(0.02 0.055 0)
|
||||||
|
(0.025 0.055 0)
|
||||||
|
(0.03 0.055 0)
|
||||||
|
(0.035 0.055 0)
|
||||||
|
(0.04 0.055 0)
|
||||||
|
(0.045 0.055 0)
|
||||||
|
(0.05 0.055 0)
|
||||||
|
(0.055 0.055 0)
|
||||||
|
(0.06 0.055 0)
|
||||||
|
(0.065 0.055 0)
|
||||||
|
(0.07 0.055 0)
|
||||||
|
(0.075 0.055 0)
|
||||||
|
(0.08 0.055 0)
|
||||||
|
(0.085 0.055 0)
|
||||||
|
(0.09 0.055 0)
|
||||||
|
(0.095 0.055 0)
|
||||||
|
(0.1 0.055 0)
|
||||||
|
(0 0.06 0)
|
||||||
|
(0.005 0.06 0)
|
||||||
|
(0.01 0.06 0)
|
||||||
|
(0.015 0.06 0)
|
||||||
|
(0.02 0.06 0)
|
||||||
|
(0.025 0.06 0)
|
||||||
|
(0.03 0.06 0)
|
||||||
|
(0.035 0.06 0)
|
||||||
|
(0.04 0.06 0)
|
||||||
|
(0.045 0.06 0)
|
||||||
|
(0.05 0.06 0)
|
||||||
|
(0.055 0.06 0)
|
||||||
|
(0.06 0.06 0)
|
||||||
|
(0.065 0.06 0)
|
||||||
|
(0.07 0.06 0)
|
||||||
|
(0.075 0.06 0)
|
||||||
|
(0.08 0.06 0)
|
||||||
|
(0.085 0.06 0)
|
||||||
|
(0.09 0.06 0)
|
||||||
|
(0.095 0.06 0)
|
||||||
|
(0.1 0.06 0)
|
||||||
|
(0 0.065 0)
|
||||||
|
(0.005 0.065 0)
|
||||||
|
(0.01 0.065 0)
|
||||||
|
(0.015 0.065 0)
|
||||||
|
(0.02 0.065 0)
|
||||||
|
(0.025 0.065 0)
|
||||||
|
(0.03 0.065 0)
|
||||||
|
(0.035 0.065 0)
|
||||||
|
(0.04 0.065 0)
|
||||||
|
(0.045 0.065 0)
|
||||||
|
(0.05 0.065 0)
|
||||||
|
(0.055 0.065 0)
|
||||||
|
(0.06 0.065 0)
|
||||||
|
(0.065 0.065 0)
|
||||||
|
(0.07 0.065 0)
|
||||||
|
(0.075 0.065 0)
|
||||||
|
(0.08 0.065 0)
|
||||||
|
(0.085 0.065 0)
|
||||||
|
(0.09 0.065 0)
|
||||||
|
(0.095 0.065 0)
|
||||||
|
(0.1 0.065 0)
|
||||||
|
(0 0.07 0)
|
||||||
|
(0.005 0.07 0)
|
||||||
|
(0.01 0.07 0)
|
||||||
|
(0.015 0.07 0)
|
||||||
|
(0.02 0.07 0)
|
||||||
|
(0.025 0.07 0)
|
||||||
|
(0.03 0.07 0)
|
||||||
|
(0.035 0.07 0)
|
||||||
|
(0.04 0.07 0)
|
||||||
|
(0.045 0.07 0)
|
||||||
|
(0.05 0.07 0)
|
||||||
|
(0.055 0.07 0)
|
||||||
|
(0.06 0.07 0)
|
||||||
|
(0.065 0.07 0)
|
||||||
|
(0.07 0.07 0)
|
||||||
|
(0.075 0.07 0)
|
||||||
|
(0.08 0.07 0)
|
||||||
|
(0.085 0.07 0)
|
||||||
|
(0.09 0.07 0)
|
||||||
|
(0.095 0.07 0)
|
||||||
|
(0.1 0.07 0)
|
||||||
|
(0 0.075 0)
|
||||||
|
(0.005 0.075 0)
|
||||||
|
(0.01 0.075 0)
|
||||||
|
(0.015 0.075 0)
|
||||||
|
(0.02 0.075 0)
|
||||||
|
(0.025 0.075 0)
|
||||||
|
(0.03 0.075 0)
|
||||||
|
(0.035 0.075 0)
|
||||||
|
(0.04 0.075 0)
|
||||||
|
(0.045 0.075 0)
|
||||||
|
(0.05 0.075 0)
|
||||||
|
(0.055 0.075 0)
|
||||||
|
(0.06 0.075 0)
|
||||||
|
(0.065 0.075 0)
|
||||||
|
(0.07 0.075 0)
|
||||||
|
(0.075 0.075 0)
|
||||||
|
(0.08 0.075 0)
|
||||||
|
(0.085 0.075 0)
|
||||||
|
(0.09 0.075 0)
|
||||||
|
(0.095 0.075 0)
|
||||||
|
(0.1 0.075 0)
|
||||||
|
(0 0.08 0)
|
||||||
|
(0.005 0.08 0)
|
||||||
|
(0.01 0.08 0)
|
||||||
|
(0.015 0.08 0)
|
||||||
|
(0.02 0.08 0)
|
||||||
|
(0.025 0.08 0)
|
||||||
|
(0.03 0.08 0)
|
||||||
|
(0.035 0.08 0)
|
||||||
|
(0.04 0.08 0)
|
||||||
|
(0.045 0.08 0)
|
||||||
|
(0.05 0.08 0)
|
||||||
|
(0.055 0.08 0)
|
||||||
|
(0.06 0.08 0)
|
||||||
|
(0.065 0.08 0)
|
||||||
|
(0.07 0.08 0)
|
||||||
|
(0.075 0.08 0)
|
||||||
|
(0.08 0.08 0)
|
||||||
|
(0.085 0.08 0)
|
||||||
|
(0.09 0.08 0)
|
||||||
|
(0.095 0.08 0)
|
||||||
|
(0.1 0.08 0)
|
||||||
|
(0 0.085 0)
|
||||||
|
(0.005 0.085 0)
|
||||||
|
(0.01 0.085 0)
|
||||||
|
(0.015 0.085 0)
|
||||||
|
(0.02 0.085 0)
|
||||||
|
(0.025 0.085 0)
|
||||||
|
(0.03 0.085 0)
|
||||||
|
(0.035 0.085 0)
|
||||||
|
(0.04 0.085 0)
|
||||||
|
(0.045 0.085 0)
|
||||||
|
(0.05 0.085 0)
|
||||||
|
(0.055 0.085 0)
|
||||||
|
(0.06 0.085 0)
|
||||||
|
(0.065 0.085 0)
|
||||||
|
(0.07 0.085 0)
|
||||||
|
(0.075 0.085 0)
|
||||||
|
(0.08 0.085 0)
|
||||||
|
(0.085 0.085 0)
|
||||||
|
(0.09 0.085 0)
|
||||||
|
(0.095 0.085 0)
|
||||||
|
(0.1 0.085 0)
|
||||||
|
(0 0.09 0)
|
||||||
|
(0.005 0.09 0)
|
||||||
|
(0.01 0.09 0)
|
||||||
|
(0.015 0.09 0)
|
||||||
|
(0.02 0.09 0)
|
||||||
|
(0.025 0.09 0)
|
||||||
|
(0.03 0.09 0)
|
||||||
|
(0.035 0.09 0)
|
||||||
|
(0.04 0.09 0)
|
||||||
|
(0.045 0.09 0)
|
||||||
|
(0.05 0.09 0)
|
||||||
|
(0.055 0.09 0)
|
||||||
|
(0.06 0.09 0)
|
||||||
|
(0.065 0.09 0)
|
||||||
|
(0.07 0.09 0)
|
||||||
|
(0.075 0.09 0)
|
||||||
|
(0.08 0.09 0)
|
||||||
|
(0.085 0.09 0)
|
||||||
|
(0.09 0.09 0)
|
||||||
|
(0.095 0.09 0)
|
||||||
|
(0.1 0.09 0)
|
||||||
|
(0 0.095 0)
|
||||||
|
(0.005 0.095 0)
|
||||||
|
(0.01 0.095 0)
|
||||||
|
(0.015 0.095 0)
|
||||||
|
(0.02 0.095 0)
|
||||||
|
(0.025 0.095 0)
|
||||||
|
(0.03 0.095 0)
|
||||||
|
(0.035 0.095 0)
|
||||||
|
(0.04 0.095 0)
|
||||||
|
(0.045 0.095 0)
|
||||||
|
(0.05 0.095 0)
|
||||||
|
(0.055 0.095 0)
|
||||||
|
(0.06 0.095 0)
|
||||||
|
(0.065 0.095 0)
|
||||||
|
(0.07 0.095 0)
|
||||||
|
(0.075 0.095 0)
|
||||||
|
(0.08 0.095 0)
|
||||||
|
(0.085 0.095 0)
|
||||||
|
(0.09 0.095 0)
|
||||||
|
(0.095 0.095 0)
|
||||||
|
(0.1 0.095 0)
|
||||||
|
(0 0.1 0)
|
||||||
|
(0.005 0.1 0)
|
||||||
|
(0.01 0.1 0)
|
||||||
|
(0.015 0.1 0)
|
||||||
|
(0.02 0.1 0)
|
||||||
|
(0.025 0.1 0)
|
||||||
|
(0.03 0.1 0)
|
||||||
|
(0.035 0.1 0)
|
||||||
|
(0.04 0.1 0)
|
||||||
|
(0.045 0.1 0)
|
||||||
|
(0.05 0.1 0)
|
||||||
|
(0.055 0.1 0)
|
||||||
|
(0.06 0.1 0)
|
||||||
|
(0.065 0.1 0)
|
||||||
|
(0.07 0.1 0)
|
||||||
|
(0.075 0.1 0)
|
||||||
|
(0.08 0.1 0)
|
||||||
|
(0.085 0.1 0)
|
||||||
|
(0.09 0.1 0)
|
||||||
|
(0.095 0.1 0)
|
||||||
|
(0.1 0.1 0)
|
||||||
|
(0 0 0.01)
|
||||||
|
(0.005 0 0.01)
|
||||||
|
(0.01 0 0.01)
|
||||||
|
(0.015 0 0.01)
|
||||||
|
(0.02 0 0.01)
|
||||||
|
(0.025 0 0.01)
|
||||||
|
(0.03 0 0.01)
|
||||||
|
(0.035 0 0.01)
|
||||||
|
(0.04 0 0.01)
|
||||||
|
(0.045 0 0.01)
|
||||||
|
(0.05 0 0.01)
|
||||||
|
(0.055 0 0.01)
|
||||||
|
(0.06 0 0.01)
|
||||||
|
(0.065 0 0.01)
|
||||||
|
(0.07 0 0.01)
|
||||||
|
(0.075 0 0.01)
|
||||||
|
(0.08 0 0.01)
|
||||||
|
(0.085 0 0.01)
|
||||||
|
(0.09 0 0.01)
|
||||||
|
(0.095 0 0.01)
|
||||||
|
(0.1 0 0.01)
|
||||||
|
(0 0.005 0.01)
|
||||||
|
(0.005 0.005 0.01)
|
||||||
|
(0.01 0.005 0.01)
|
||||||
|
(0.015 0.005 0.01)
|
||||||
|
(0.02 0.005 0.01)
|
||||||
|
(0.025 0.005 0.01)
|
||||||
|
(0.03 0.005 0.01)
|
||||||
|
(0.035 0.005 0.01)
|
||||||
|
(0.04 0.005 0.01)
|
||||||
|
(0.045 0.005 0.01)
|
||||||
|
(0.05 0.005 0.01)
|
||||||
|
(0.055 0.005 0.01)
|
||||||
|
(0.06 0.005 0.01)
|
||||||
|
(0.065 0.005 0.01)
|
||||||
|
(0.07 0.005 0.01)
|
||||||
|
(0.075 0.005 0.01)
|
||||||
|
(0.08 0.005 0.01)
|
||||||
|
(0.085 0.005 0.01)
|
||||||
|
(0.09 0.005 0.01)
|
||||||
|
(0.095 0.005 0.01)
|
||||||
|
(0.1 0.005 0.01)
|
||||||
|
(0 0.01 0.01)
|
||||||
|
(0.005 0.01 0.01)
|
||||||
|
(0.01 0.01 0.01)
|
||||||
|
(0.015 0.01 0.01)
|
||||||
|
(0.02 0.01 0.01)
|
||||||
|
(0.025 0.01 0.01)
|
||||||
|
(0.03 0.01 0.01)
|
||||||
|
(0.035 0.01 0.01)
|
||||||
|
(0.04 0.01 0.01)
|
||||||
|
(0.045 0.01 0.01)
|
||||||
|
(0.05 0.01 0.01)
|
||||||
|
(0.055 0.01 0.01)
|
||||||
|
(0.06 0.01 0.01)
|
||||||
|
(0.065 0.01 0.01)
|
||||||
|
(0.07 0.01 0.01)
|
||||||
|
(0.075 0.01 0.01)
|
||||||
|
(0.08 0.01 0.01)
|
||||||
|
(0.085 0.01 0.01)
|
||||||
|
(0.09 0.01 0.01)
|
||||||
|
(0.095 0.01 0.01)
|
||||||
|
(0.1 0.01 0.01)
|
||||||
|
(0 0.015 0.01)
|
||||||
|
(0.005 0.015 0.01)
|
||||||
|
(0.01 0.015 0.01)
|
||||||
|
(0.015 0.015 0.01)
|
||||||
|
(0.02 0.015 0.01)
|
||||||
|
(0.025 0.015 0.01)
|
||||||
|
(0.03 0.015 0.01)
|
||||||
|
(0.035 0.015 0.01)
|
||||||
|
(0.04 0.015 0.01)
|
||||||
|
(0.045 0.015 0.01)
|
||||||
|
(0.05 0.015 0.01)
|
||||||
|
(0.055 0.015 0.01)
|
||||||
|
(0.06 0.015 0.01)
|
||||||
|
(0.065 0.015 0.01)
|
||||||
|
(0.07 0.015 0.01)
|
||||||
|
(0.075 0.015 0.01)
|
||||||
|
(0.08 0.015 0.01)
|
||||||
|
(0.085 0.015 0.01)
|
||||||
|
(0.09 0.015 0.01)
|
||||||
|
(0.095 0.015 0.01)
|
||||||
|
(0.1 0.015 0.01)
|
||||||
|
(0 0.02 0.01)
|
||||||
|
(0.005 0.02 0.01)
|
||||||
|
(0.01 0.02 0.01)
|
||||||
|
(0.015 0.02 0.01)
|
||||||
|
(0.02 0.02 0.01)
|
||||||
|
(0.025 0.02 0.01)
|
||||||
|
(0.03 0.02 0.01)
|
||||||
|
(0.035 0.02 0.01)
|
||||||
|
(0.04 0.02 0.01)
|
||||||
|
(0.045 0.02 0.01)
|
||||||
|
(0.05 0.02 0.01)
|
||||||
|
(0.055 0.02 0.01)
|
||||||
|
(0.06 0.02 0.01)
|
||||||
|
(0.065 0.02 0.01)
|
||||||
|
(0.07 0.02 0.01)
|
||||||
|
(0.075 0.02 0.01)
|
||||||
|
(0.08 0.02 0.01)
|
||||||
|
(0.085 0.02 0.01)
|
||||||
|
(0.09 0.02 0.01)
|
||||||
|
(0.095 0.02 0.01)
|
||||||
|
(0.1 0.02 0.01)
|
||||||
|
(0 0.025 0.01)
|
||||||
|
(0.005 0.025 0.01)
|
||||||
|
(0.01 0.025 0.01)
|
||||||
|
(0.015 0.025 0.01)
|
||||||
|
(0.02 0.025 0.01)
|
||||||
|
(0.025 0.025 0.01)
|
||||||
|
(0.03 0.025 0.01)
|
||||||
|
(0.035 0.025 0.01)
|
||||||
|
(0.04 0.025 0.01)
|
||||||
|
(0.045 0.025 0.01)
|
||||||
|
(0.05 0.025 0.01)
|
||||||
|
(0.055 0.025 0.01)
|
||||||
|
(0.06 0.025 0.01)
|
||||||
|
(0.065 0.025 0.01)
|
||||||
|
(0.07 0.025 0.01)
|
||||||
|
(0.075 0.025 0.01)
|
||||||
|
(0.08 0.025 0.01)
|
||||||
|
(0.085 0.025 0.01)
|
||||||
|
(0.09 0.025 0.01)
|
||||||
|
(0.095 0.025 0.01)
|
||||||
|
(0.1 0.025 0.01)
|
||||||
|
(0 0.03 0.01)
|
||||||
|
(0.005 0.03 0.01)
|
||||||
|
(0.01 0.03 0.01)
|
||||||
|
(0.015 0.03 0.01)
|
||||||
|
(0.02 0.03 0.01)
|
||||||
|
(0.025 0.03 0.01)
|
||||||
|
(0.03 0.03 0.01)
|
||||||
|
(0.035 0.03 0.01)
|
||||||
|
(0.04 0.03 0.01)
|
||||||
|
(0.045 0.03 0.01)
|
||||||
|
(0.05 0.03 0.01)
|
||||||
|
(0.055 0.03 0.01)
|
||||||
|
(0.06 0.03 0.01)
|
||||||
|
(0.065 0.03 0.01)
|
||||||
|
(0.07 0.03 0.01)
|
||||||
|
(0.075 0.03 0.01)
|
||||||
|
(0.08 0.03 0.01)
|
||||||
|
(0.085 0.03 0.01)
|
||||||
|
(0.09 0.03 0.01)
|
||||||
|
(0.095 0.03 0.01)
|
||||||
|
(0.1 0.03 0.01)
|
||||||
|
(0 0.035 0.01)
|
||||||
|
(0.005 0.035 0.01)
|
||||||
|
(0.01 0.035 0.01)
|
||||||
|
(0.015 0.035 0.01)
|
||||||
|
(0.02 0.035 0.01)
|
||||||
|
(0.025 0.035 0.01)
|
||||||
|
(0.03 0.035 0.01)
|
||||||
|
(0.035 0.035 0.01)
|
||||||
|
(0.04 0.035 0.01)
|
||||||
|
(0.045 0.035 0.01)
|
||||||
|
(0.05 0.035 0.01)
|
||||||
|
(0.055 0.035 0.01)
|
||||||
|
(0.06 0.035 0.01)
|
||||||
|
(0.065 0.035 0.01)
|
||||||
|
(0.07 0.035 0.01)
|
||||||
|
(0.075 0.035 0.01)
|
||||||
|
(0.08 0.035 0.01)
|
||||||
|
(0.085 0.035 0.01)
|
||||||
|
(0.09 0.035 0.01)
|
||||||
|
(0.095 0.035 0.01)
|
||||||
|
(0.1 0.035 0.01)
|
||||||
|
(0 0.04 0.01)
|
||||||
|
(0.005 0.04 0.01)
|
||||||
|
(0.01 0.04 0.01)
|
||||||
|
(0.015 0.04 0.01)
|
||||||
|
(0.02 0.04 0.01)
|
||||||
|
(0.025 0.04 0.01)
|
||||||
|
(0.03 0.04 0.01)
|
||||||
|
(0.035 0.04 0.01)
|
||||||
|
(0.04 0.04 0.01)
|
||||||
|
(0.045 0.04 0.01)
|
||||||
|
(0.05 0.04 0.01)
|
||||||
|
(0.055 0.04 0.01)
|
||||||
|
(0.06 0.04 0.01)
|
||||||
|
(0.065 0.04 0.01)
|
||||||
|
(0.07 0.04 0.01)
|
||||||
|
(0.075 0.04 0.01)
|
||||||
|
(0.08 0.04 0.01)
|
||||||
|
(0.085 0.04 0.01)
|
||||||
|
(0.09 0.04 0.01)
|
||||||
|
(0.095 0.04 0.01)
|
||||||
|
(0.1 0.04 0.01)
|
||||||
|
(0 0.045 0.01)
|
||||||
|
(0.005 0.045 0.01)
|
||||||
|
(0.01 0.045 0.01)
|
||||||
|
(0.015 0.045 0.01)
|
||||||
|
(0.02 0.045 0.01)
|
||||||
|
(0.025 0.045 0.01)
|
||||||
|
(0.03 0.045 0.01)
|
||||||
|
(0.035 0.045 0.01)
|
||||||
|
(0.04 0.045 0.01)
|
||||||
|
(0.045 0.045 0.01)
|
||||||
|
(0.05 0.045 0.01)
|
||||||
|
(0.055 0.045 0.01)
|
||||||
|
(0.06 0.045 0.01)
|
||||||
|
(0.065 0.045 0.01)
|
||||||
|
(0.07 0.045 0.01)
|
||||||
|
(0.075 0.045 0.01)
|
||||||
|
(0.08 0.045 0.01)
|
||||||
|
(0.085 0.045 0.01)
|
||||||
|
(0.09 0.045 0.01)
|
||||||
|
(0.095 0.045 0.01)
|
||||||
|
(0.1 0.045 0.01)
|
||||||
|
(0 0.05 0.01)
|
||||||
|
(0.005 0.05 0.01)
|
||||||
|
(0.01 0.05 0.01)
|
||||||
|
(0.015 0.05 0.01)
|
||||||
|
(0.02 0.05 0.01)
|
||||||
|
(0.025 0.05 0.01)
|
||||||
|
(0.03 0.05 0.01)
|
||||||
|
(0.035 0.05 0.01)
|
||||||
|
(0.04 0.05 0.01)
|
||||||
|
(0.045 0.05 0.01)
|
||||||
|
(0.05 0.05 0.01)
|
||||||
|
(0.055 0.05 0.01)
|
||||||
|
(0.06 0.05 0.01)
|
||||||
|
(0.065 0.05 0.01)
|
||||||
|
(0.07 0.05 0.01)
|
||||||
|
(0.075 0.05 0.01)
|
||||||
|
(0.08 0.05 0.01)
|
||||||
|
(0.085 0.05 0.01)
|
||||||
|
(0.09 0.05 0.01)
|
||||||
|
(0.095 0.05 0.01)
|
||||||
|
(0.1 0.05 0.01)
|
||||||
|
(0 0.055 0.01)
|
||||||
|
(0.005 0.055 0.01)
|
||||||
|
(0.01 0.055 0.01)
|
||||||
|
(0.015 0.055 0.01)
|
||||||
|
(0.02 0.055 0.01)
|
||||||
|
(0.025 0.055 0.01)
|
||||||
|
(0.03 0.055 0.01)
|
||||||
|
(0.035 0.055 0.01)
|
||||||
|
(0.04 0.055 0.01)
|
||||||
|
(0.045 0.055 0.01)
|
||||||
|
(0.05 0.055 0.01)
|
||||||
|
(0.055 0.055 0.01)
|
||||||
|
(0.06 0.055 0.01)
|
||||||
|
(0.065 0.055 0.01)
|
||||||
|
(0.07 0.055 0.01)
|
||||||
|
(0.075 0.055 0.01)
|
||||||
|
(0.08 0.055 0.01)
|
||||||
|
(0.085 0.055 0.01)
|
||||||
|
(0.09 0.055 0.01)
|
||||||
|
(0.095 0.055 0.01)
|
||||||
|
(0.1 0.055 0.01)
|
||||||
|
(0 0.06 0.01)
|
||||||
|
(0.005 0.06 0.01)
|
||||||
|
(0.01 0.06 0.01)
|
||||||
|
(0.015 0.06 0.01)
|
||||||
|
(0.02 0.06 0.01)
|
||||||
|
(0.025 0.06 0.01)
|
||||||
|
(0.03 0.06 0.01)
|
||||||
|
(0.035 0.06 0.01)
|
||||||
|
(0.04 0.06 0.01)
|
||||||
|
(0.045 0.06 0.01)
|
||||||
|
(0.05 0.06 0.01)
|
||||||
|
(0.055 0.06 0.01)
|
||||||
|
(0.06 0.06 0.01)
|
||||||
|
(0.065 0.06 0.01)
|
||||||
|
(0.07 0.06 0.01)
|
||||||
|
(0.075 0.06 0.01)
|
||||||
|
(0.08 0.06 0.01)
|
||||||
|
(0.085 0.06 0.01)
|
||||||
|
(0.09 0.06 0.01)
|
||||||
|
(0.095 0.06 0.01)
|
||||||
|
(0.1 0.06 0.01)
|
||||||
|
(0 0.065 0.01)
|
||||||
|
(0.005 0.065 0.01)
|
||||||
|
(0.01 0.065 0.01)
|
||||||
|
(0.015 0.065 0.01)
|
||||||
|
(0.02 0.065 0.01)
|
||||||
|
(0.025 0.065 0.01)
|
||||||
|
(0.03 0.065 0.01)
|
||||||
|
(0.035 0.065 0.01)
|
||||||
|
(0.04 0.065 0.01)
|
||||||
|
(0.045 0.065 0.01)
|
||||||
|
(0.05 0.065 0.01)
|
||||||
|
(0.055 0.065 0.01)
|
||||||
|
(0.06 0.065 0.01)
|
||||||
|
(0.065 0.065 0.01)
|
||||||
|
(0.07 0.065 0.01)
|
||||||
|
(0.075 0.065 0.01)
|
||||||
|
(0.08 0.065 0.01)
|
||||||
|
(0.085 0.065 0.01)
|
||||||
|
(0.09 0.065 0.01)
|
||||||
|
(0.095 0.065 0.01)
|
||||||
|
(0.1 0.065 0.01)
|
||||||
|
(0 0.07 0.01)
|
||||||
|
(0.005 0.07 0.01)
|
||||||
|
(0.01 0.07 0.01)
|
||||||
|
(0.015 0.07 0.01)
|
||||||
|
(0.02 0.07 0.01)
|
||||||
|
(0.025 0.07 0.01)
|
||||||
|
(0.03 0.07 0.01)
|
||||||
|
(0.035 0.07 0.01)
|
||||||
|
(0.04 0.07 0.01)
|
||||||
|
(0.045 0.07 0.01)
|
||||||
|
(0.05 0.07 0.01)
|
||||||
|
(0.055 0.07 0.01)
|
||||||
|
(0.06 0.07 0.01)
|
||||||
|
(0.065 0.07 0.01)
|
||||||
|
(0.07 0.07 0.01)
|
||||||
|
(0.075 0.07 0.01)
|
||||||
|
(0.08 0.07 0.01)
|
||||||
|
(0.085 0.07 0.01)
|
||||||
|
(0.09 0.07 0.01)
|
||||||
|
(0.095 0.07 0.01)
|
||||||
|
(0.1 0.07 0.01)
|
||||||
|
(0 0.075 0.01)
|
||||||
|
(0.005 0.075 0.01)
|
||||||
|
(0.01 0.075 0.01)
|
||||||
|
(0.015 0.075 0.01)
|
||||||
|
(0.02 0.075 0.01)
|
||||||
|
(0.025 0.075 0.01)
|
||||||
|
(0.03 0.075 0.01)
|
||||||
|
(0.035 0.075 0.01)
|
||||||
|
(0.04 0.075 0.01)
|
||||||
|
(0.045 0.075 0.01)
|
||||||
|
(0.05 0.075 0.01)
|
||||||
|
(0.055 0.075 0.01)
|
||||||
|
(0.06 0.075 0.01)
|
||||||
|
(0.065 0.075 0.01)
|
||||||
|
(0.07 0.075 0.01)
|
||||||
|
(0.075 0.075 0.01)
|
||||||
|
(0.08 0.075 0.01)
|
||||||
|
(0.085 0.075 0.01)
|
||||||
|
(0.09 0.075 0.01)
|
||||||
|
(0.095 0.075 0.01)
|
||||||
|
(0.1 0.075 0.01)
|
||||||
|
(0 0.08 0.01)
|
||||||
|
(0.005 0.08 0.01)
|
||||||
|
(0.01 0.08 0.01)
|
||||||
|
(0.015 0.08 0.01)
|
||||||
|
(0.02 0.08 0.01)
|
||||||
|
(0.025 0.08 0.01)
|
||||||
|
(0.03 0.08 0.01)
|
||||||
|
(0.035 0.08 0.01)
|
||||||
|
(0.04 0.08 0.01)
|
||||||
|
(0.045 0.08 0.01)
|
||||||
|
(0.05 0.08 0.01)
|
||||||
|
(0.055 0.08 0.01)
|
||||||
|
(0.06 0.08 0.01)
|
||||||
|
(0.065 0.08 0.01)
|
||||||
|
(0.07 0.08 0.01)
|
||||||
|
(0.075 0.08 0.01)
|
||||||
|
(0.08 0.08 0.01)
|
||||||
|
(0.085 0.08 0.01)
|
||||||
|
(0.09 0.08 0.01)
|
||||||
|
(0.095 0.08 0.01)
|
||||||
|
(0.1 0.08 0.01)
|
||||||
|
(0 0.085 0.01)
|
||||||
|
(0.005 0.085 0.01)
|
||||||
|
(0.01 0.085 0.01)
|
||||||
|
(0.015 0.085 0.01)
|
||||||
|
(0.02 0.085 0.01)
|
||||||
|
(0.025 0.085 0.01)
|
||||||
|
(0.03 0.085 0.01)
|
||||||
|
(0.035 0.085 0.01)
|
||||||
|
(0.04 0.085 0.01)
|
||||||
|
(0.045 0.085 0.01)
|
||||||
|
(0.05 0.085 0.01)
|
||||||
|
(0.055 0.085 0.01)
|
||||||
|
(0.06 0.085 0.01)
|
||||||
|
(0.065 0.085 0.01)
|
||||||
|
(0.07 0.085 0.01)
|
||||||
|
(0.075 0.085 0.01)
|
||||||
|
(0.08 0.085 0.01)
|
||||||
|
(0.085 0.085 0.01)
|
||||||
|
(0.09 0.085 0.01)
|
||||||
|
(0.095 0.085 0.01)
|
||||||
|
(0.1 0.085 0.01)
|
||||||
|
(0 0.09 0.01)
|
||||||
|
(0.005 0.09 0.01)
|
||||||
|
(0.01 0.09 0.01)
|
||||||
|
(0.015 0.09 0.01)
|
||||||
|
(0.02 0.09 0.01)
|
||||||
|
(0.025 0.09 0.01)
|
||||||
|
(0.03 0.09 0.01)
|
||||||
|
(0.035 0.09 0.01)
|
||||||
|
(0.04 0.09 0.01)
|
||||||
|
(0.045 0.09 0.01)
|
||||||
|
(0.05 0.09 0.01)
|
||||||
|
(0.055 0.09 0.01)
|
||||||
|
(0.06 0.09 0.01)
|
||||||
|
(0.065 0.09 0.01)
|
||||||
|
(0.07 0.09 0.01)
|
||||||
|
(0.075 0.09 0.01)
|
||||||
|
(0.08 0.09 0.01)
|
||||||
|
(0.085 0.09 0.01)
|
||||||
|
(0.09 0.09 0.01)
|
||||||
|
(0.095 0.09 0.01)
|
||||||
|
(0.1 0.09 0.01)
|
||||||
|
(0 0.095 0.01)
|
||||||
|
(0.005 0.095 0.01)
|
||||||
|
(0.01 0.095 0.01)
|
||||||
|
(0.015 0.095 0.01)
|
||||||
|
(0.02 0.095 0.01)
|
||||||
|
(0.025 0.095 0.01)
|
||||||
|
(0.03 0.095 0.01)
|
||||||
|
(0.035 0.095 0.01)
|
||||||
|
(0.04 0.095 0.01)
|
||||||
|
(0.045 0.095 0.01)
|
||||||
|
(0.05 0.095 0.01)
|
||||||
|
(0.055 0.095 0.01)
|
||||||
|
(0.06 0.095 0.01)
|
||||||
|
(0.065 0.095 0.01)
|
||||||
|
(0.07 0.095 0.01)
|
||||||
|
(0.075 0.095 0.01)
|
||||||
|
(0.08 0.095 0.01)
|
||||||
|
(0.085 0.095 0.01)
|
||||||
|
(0.09 0.095 0.01)
|
||||||
|
(0.095 0.095 0.01)
|
||||||
|
(0.1 0.095 0.01)
|
||||||
|
(0 0.1 0.01)
|
||||||
|
(0.005 0.1 0.01)
|
||||||
|
(0.01 0.1 0.01)
|
||||||
|
(0.015 0.1 0.01)
|
||||||
|
(0.02 0.1 0.01)
|
||||||
|
(0.025 0.1 0.01)
|
||||||
|
(0.03 0.1 0.01)
|
||||||
|
(0.035 0.1 0.01)
|
||||||
|
(0.04 0.1 0.01)
|
||||||
|
(0.045 0.1 0.01)
|
||||||
|
(0.05 0.1 0.01)
|
||||||
|
(0.055 0.1 0.01)
|
||||||
|
(0.06 0.1 0.01)
|
||||||
|
(0.065 0.1 0.01)
|
||||||
|
(0.07 0.1 0.01)
|
||||||
|
(0.075 0.1 0.01)
|
||||||
|
(0.08 0.1 0.01)
|
||||||
|
(0.085 0.1 0.01)
|
||||||
|
(0.09 0.1 0.01)
|
||||||
|
(0.095 0.1 0.01)
|
||||||
|
(0.1 0.1 0.01)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user