ENH: patchCloud: return pTraits<Type>::max for unfound points
[OpenFOAM-1.7.x.git] / src / turbulenceModels / LES / LESdeltas / maxhxhyhzDelta / maxhxhyhzDelta.C
blob0ba1d63b1aa42642dcadf10a0e81f86d734096c5
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2010-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "maxhxhyhzDelta.H"
27 #include "addToRunTimeSelectionTable.H"
29 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
31 namespace Foam
34 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
36 defineTypeNameAndDebug(maxhxhyhzDelta, 0);
37 addToRunTimeSelectionTable(LESdelta, maxhxhyhzDelta, dictionary);
39 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
41 void maxhxhyhzDelta::calcDelta()
43     label nD = mesh().nGeometricD();
45     tmp<volScalarField> hmax
46     (
47         new volScalarField
48         (
49             IOobject
50             (
51                 "hmax",
52                 mesh().time().timeName(),
53                 mesh(),
54                 IOobject::NO_READ,
55                 IOobject::NO_WRITE
56             ),
57             mesh(),
58             dimensionedScalar("zrero", dimLength, 0.0)
59         )
60     );
62     const cellList& cells = mesh().cells();
64     forAll(cells,cellI)
65     {
66         scalar deltaMaxTmp = 0.0;
67         const labelList& cFaces = mesh().cells()[cellI];
68         const point& centrevector = mesh().cellCentres()[cellI];
70         forAll(cFaces, cFaceI)
71         {
72             label faceI = cFaces[cFaceI];
73             const point& facevector = mesh().faceCentres()[faceI];
74             scalar tmp = mag(facevector - centrevector);
75             if (tmp > deltaMaxTmp)
76             {
77                 deltaMaxTmp = tmp;
78             }
79         }
80         hmax()[cellI] = deltaCoeff_*deltaMaxTmp;
81     }
83     if (nD == 3)
84     {
85         delta_.internalField() = hmax();
86     }
87     else if (nD == 2)
88     {
89         WarningIn("maxhxhyhzDelta::calcDelta()")
90             << "Case is 2D, LES is not strictly applicable\n"
91             << endl;
93         delta_.internalField() = hmax();
94     }
95     else
96     {
97         FatalErrorIn("maxhxhyhzDelta::calcDelta()")
98             << "Case is not 3D or 2D, LES is not applicable"
99             << exit(FatalError);
100     }
104 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
106 maxhxhyhzDelta::maxhxhyhzDelta
108     const word& name,
109     const fvMesh& mesh,
110     const dictionary& dd
113     LESdelta(name, mesh),
114     deltaCoeff_(readScalar(dd.subDict(type() + "Coeffs").lookup("deltaCoeff")))
116     calcDelta();
120 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
122 void maxhxhyhzDelta::read(const dictionary& dd)
124     dd.subDict(type() + "Coeffs").lookup("deltaCoeff") >> deltaCoeff_;
125     calcDelta();
129 void maxhxhyhzDelta::correct()
131     if (mesh_.changing())
132     {
133         calcDelta();
134     }
138 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
140 } // End namespace Foam
142 // ************************************************************************* //