diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index 3a82c7407b..063b6fc04c 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 0000000000..846cc901c2
--- /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 .
+
+\*---------------------------------------------------------------------------*/
+
+#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(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 0000000000..1cb596a538
--- /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 .
+
+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\ 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\ 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 405fba9c82..2f857de2fc 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(), correctWalls)
+{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@@ -60,33 +45,4 @@ Foam::wallDist::~wallDist()
{}
-// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-
-void Foam::wallDist::correct()
-{
- // Get patchids of walls
- labelHashSet wallPatchIDs(getPatchIDs());
-
- // 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(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 d5182918f7..195c04dbc3 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\ 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\ 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();
};