Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "nearWallDist.H"
00027 #include <finiteVolume/fvMesh.H>
00028 #include <meshTools/cellDistFuncs.H>
00029 #include <finiteVolume/wallFvPatch.H>
00030 #include <finiteVolume/surfaceFields.H>
00031
00032
00033
00034 void Foam::nearWallDist::doAll()
00035 {
00036 cellDistFuncs wallUtils(mesh_);
00037
00038
00039 labelHashSet wallPatchIDs(wallUtils.getPatchIDs<wallPolyPatch>());
00040
00041
00042
00043 labelList neighbours(wallUtils.maxPatchSize(wallPatchIDs));
00044
00045
00046
00047
00048 const volVectorField& cellCentres = mesh_.C();
00049
00050 forAll(mesh_.boundary(), patchI)
00051 {
00052 fvPatchScalarField& ypatch = operator[](patchI);
00053
00054 const fvPatch& patch = mesh_.boundary()[patchI];
00055
00056 if (isA<wallFvPatch>(patch))
00057 {
00058 const polyPatch& pPatch = patch.patch();
00059
00060 const unallocLabelList& faceCells = patch.faceCells();
00061
00062
00063 forAll(patch, patchFaceI)
00064 {
00065 label nNeighbours = wallUtils.getPointNeighbours
00066 (
00067 pPatch,
00068 patchFaceI,
00069 neighbours
00070 );
00071
00072 label minFaceI = -1;
00073
00074 ypatch[patchFaceI] = wallUtils.smallestDist
00075 (
00076 cellCentres[faceCells[patchFaceI]],
00077 pPatch,
00078 nNeighbours,
00079 neighbours,
00080 minFaceI
00081 );
00082 }
00083 }
00084 else
00085 {
00086 ypatch = 0.0;
00087 }
00088 }
00089 }
00090
00091
00092
00093
00094 Foam::nearWallDist::nearWallDist(const Foam::fvMesh& mesh)
00095 :
00096 volScalarField::GeometricBoundaryField
00097 (
00098 mesh.boundary(),
00099 mesh.V(),
00100 calculatedFvPatchScalarField::typeName
00101 ),
00102 mesh_(mesh)
00103 {
00104 doAll();
00105 }
00106
00107
00108
00109
00110 Foam::nearWallDist::~nearWallDist()
00111 {}
00112
00113
00114
00115
00116 void Foam::nearWallDist::correct()
00117 {
00118 if (mesh_.changing())
00119 {
00120
00121 forAll(mesh_.boundary(), patchI)
00122 {
00123 operator[](patchI).setSize(mesh_.boundary()[patchI].size());
00124 }
00125 }
00126
00127 doAll();
00128 }
00129
00130
00131