diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 3a82c7407beaedabb6d306bed77b1fdb6a8f0738..063b6fc04cbbdc08c2258c1de97000659c43ca71 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -36,6 +36,7 @@ $(derivedFvPatches)/regionCoupled/regionCoupledWallFvPatch.C wallDist = fvMesh/wallDist +$(wallDist)/patchDist.C $(wallDist)/wallPointYPlus/wallPointYPlus.C $(wallDist)/nearWallDistNoSearch.C $(wallDist)/nearWallDist.C diff --git a/src/finiteVolume/fvMesh/wallDist/patchDist.C b/src/finiteVolume/fvMesh/wallDist/patchDist.C new file mode 100644 index 0000000000000000000000000000000000000000..846cc901c2cc61628d2bcbaf8c2a40632016c57b --- /dev/null +++ b/src/finiteVolume/fvMesh/wallDist/patchDist.C @@ -0,0 +1,92 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 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 "patchDist.H" +#include "patchWave.H" +#include "fvMesh.H" +#include "emptyFvPatchFields.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::patchDist::patchDist +( + const fvMesh& mesh, + const labelHashSet& patchIDs, + const bool correctWalls +) +: + volScalarField + ( + IOobject + ( + "y", + mesh.time().timeName(), + mesh + ), + mesh, + dimensionedScalar("y", dimLength, GREAT) + ), + cellDistFuncs(mesh), + patchIDs_(patchIDs), + correctWalls_(correctWalls), + nUnset_(0) +{ + patchDist::correct(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::patchDist::~patchDist() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::patchDist::correct() +{ + // Calculate distance starting from patch faces + patchWave wave(cellDistFuncs::mesh(), patchIDs_, correctWalls_); + + // Transfer cell values from wave into *this + transfer(wave.distance()); + + // Transfer values on patches into boundaryField of *this + forAll(boundaryField(), patchI) + { + if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI])) + { + scalarField& waveFld = wave.patchDistance()[patchI]; + + boundaryField()[patchI].transfer(waveFld); + } + } + + // Transfer number of unset values + nUnset_ = wave.nUnset(); +} + + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/wallDist/patchDist.H b/src/finiteVolume/fvMesh/wallDist/patchDist.H new file mode 100644 index 0000000000000000000000000000000000000000..1cb596a538fbc4e18024dde7c7500db4d316dfbf --- /dev/null +++ b/src/finiteVolume/fvMesh/wallDist/patchDist.H @@ -0,0 +1,152 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 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/>. + +Class + Foam::patchDist + +Description + Calculation of distance to nearest patch for all cells and boundary. + Uses meshWave to do actual calculation. + + Distance correction: + + if correctWalls = true: + For each cell with face on wall calculate the true nearest point + (by triangle decomposition) on that face and do the same for that face's + pointNeighbours. This will find the true nearest distance in almost all + cases. Only very skewed cells or cells close to another wall might be + missed. + + For each cell with only one point on wall the same is done except now it + takes the pointFaces() of the wall point to look for the nearest point. + +Note + + correct() : for now does complete recalculation. (which usually is + ok since mesh is smoothed). However for topology change where geometry + in most of domain does not change you could think of starting from the + old cell values. Tried but not done since: + - meshWave would have to be called with old cellInfo. + This is List\<wallInfo\> of nCells. + - cannot construct from distance (y_) only since we don't know a value + for origin_. (origin_ = GREAT already used to denote illegal value.) + - so we would have to store a List\<wallInfo\> which unfortunately does + not get resized/mapped automatically upon mesh changes. + +SourceFiles + patchDist.C + +\*---------------------------------------------------------------------------*/ + +#ifndef patchDist_H +#define patchDist_H + +#include "volFields.H" +#include "cellDistFuncs.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class fvMesh; + +/*---------------------------------------------------------------------------*\ + Class patchDist Declaration +\*---------------------------------------------------------------------------*/ + +class patchDist +: + public volScalarField, + public cellDistFuncs +{ + + +private: + + // Private Member Data + + //- Set of patch IDs + labelHashSet patchIDs_; + + //- Do accurate distance calculation for near-wall cells. + bool correctWalls_; + + //- Number of unset cells and faces. + label nUnset_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct + patchDist(const patchDist&); + + //- Disallow default bitwise assignment + void operator=(const patchDist&); + + +public: + + // Constructors + + //- Construct from mesh and flag whether or not to correct wall. + // Calculate for all cells. correctWalls : correct wall (face&point) + // cells for correct distance, searching neighbours. + patchDist + ( + const fvMesh& mesh, + const labelHashSet& patchIDs, + const bool correctWalls = true + ); + + + //- Destructor + virtual ~patchDist(); + + + // Member Functions + + const volScalarField& y() const + { + return *this; + } + + label nUnset() const + { + return nUnset_; + } + + //- Correct for mesh geom/topo changes + virtual void correct(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/wallDist/wallDist.C b/src/finiteVolume/fvMesh/wallDist/wallDist.C index 405fba9c82afdb8180e1e43cebf4e306c261a0e7..2f857de2fce73a51aff1dc128a795ba4f7e6c470 100644 --- a/src/finiteVolume/fvMesh/wallDist/wallDist.C +++ b/src/finiteVolume/fvMesh/wallDist/wallDist.C @@ -24,34 +24,19 @@ License \*---------------------------------------------------------------------------*/ #include "wallDist.H" -#include "patchWave.H" #include "fvMesh.H" #include "wallPolyPatch.H" -#include "fvPatchField.H" -#include "Field.H" -#include "emptyFvPatchFields.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::wallDist::wallDist(const fvMesh& mesh, const bool correctWalls) +Foam::wallDist::wallDist +( + const fvMesh& mesh, + const bool correctWalls +) : - volScalarField - ( - IOobject - ( - "y", - mesh.time().timeName(), - mesh - ), - mesh, - dimensionedScalar("y", dimLength, GREAT) - ), - cellDistFuncs(mesh), - correctWalls_(correctWalls), - nUnset_(0) -{ - wallDist::correct(); -} + patchDist(mesh, getPatchIDs<wallPolyPatch>(), correctWalls) +{} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // @@ -60,33 +45,4 @@ Foam::wallDist::~wallDist() {} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::wallDist::correct() -{ - // Get patchids of walls - labelHashSet wallPatchIDs(getPatchIDs<wallPolyPatch>()); - - // Calculate distance starting from wallPatch faces. - patchWave wave(cellDistFuncs::mesh(), wallPatchIDs, correctWalls_); - - // Transfer cell values from wave into *this - transfer(wave.distance()); - - // Transfer values on patches into boundaryField of *this - forAll(boundaryField(), patchI) - { - if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI])) - { - scalarField& waveFld = wave.patchDistance()[patchI]; - - boundaryField()[patchI].transfer(waveFld); - } - } - - // Transfer number of unset values - nUnset_ = wave.nUnset(); -} - - // ************************************************************************* // diff --git a/src/finiteVolume/fvMesh/wallDist/wallDist.H b/src/finiteVolume/fvMesh/wallDist/wallDist.H index d5182918f70c2e1c5be5f85122c92146276fc75d..195c04dbc3cc2c9c30030d2348ce13339e94e593 100644 --- a/src/finiteVolume/fvMesh/wallDist/wallDist.H +++ b/src/finiteVolume/fvMesh/wallDist/wallDist.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,33 +25,7 @@ Class Foam::wallDist Description - Calculation of distance to nearest wall for all cells and boundary. - Uses meshWave to do actual calculation. - - Distance correction: - - if correctWalls = true: - For each cell with face on wall calculate the true nearest point - (by triangle decomposition) on that face and do that same for that face's - pointNeighbours. This will find the true nearest distance in almost all - cases. Only very skewed cells or cells close to another wall might be - missed. - - For each cell with only point on wall the same is done except now it takes - the pointFaces() of the wall point to look for the nearest point. - -Note - - correct() : for now does complete recalculation. (which usually is - ok since mesh is smoothed). However for topology change where geometry - in most of domain does not change you could think of starting from the - old cell values. Tried but not done since: - - meshWave would have to be called with old cellInfo. - This is List\<wallInfo\> of nCells. - - cannot construct from distance (y_) only since we don't know a value - for origin_. (origin_ = GREAT already used to denote illegal value.) - - so we would have to store a List\<wallInfo\> which unfortunately does - not get resized/mapped automatically upon mesh changes. + Specialisation of patchDist for wall distance calculation SourceFiles wallDist.C @@ -61,9 +35,7 @@ SourceFiles #ifndef wallDist_H #define wallDist_H -#include "volFields.H" -#include "cellDistFuncs.H" - +#include "patchDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -73,27 +45,16 @@ namespace Foam class fvMesh; /*---------------------------------------------------------------------------*\ - Class wallDist Declaration + Class wallDist Declaration \*---------------------------------------------------------------------------*/ class wallDist : - public volScalarField, - public cellDistFuncs + public patchDist { - private: - // Private Member Data - - //- Do accurate distance calculation for near-wall cells. - bool correctWalls_; - - //- Number of unset cells and faces. - label nUnset_; - - // Private Member Functions //- Disallow default bitwise copy construct @@ -110,27 +71,15 @@ public: //- Construct from mesh and flag whether or not to correct wall. // Calculate for all cells. correctWalls : correct wall (face&point) // cells for correct distance, searching neighbours. - wallDist(const fvMesh& mesh, bool correctWalls = true); + wallDist + ( + const fvMesh& mesh, + const bool correctWalls = true + ); //- Destructor virtual ~wallDist(); - - - // Member Functions - - const volScalarField& y() const - { - return *this; - } - - label nUnset() const - { - return nUnset_; - } - - //- Correct for mesh geom/topo changes - virtual void correct(); };