FreeFOAM The Cross-Platform CFD Toolkit
omegaWallFunctionFvPatchScalarField.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd.
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
29 #include <finiteVolume/volFields.H>
32 
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 
35 namespace Foam
36 {
37 namespace compressible
38 {
39 namespace RASModels
40 {
41 
42 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
43 
44 void omegaWallFunctionFvPatchScalarField::checkType()
45 {
46  if (!isA<wallFvPatch>(patch()))
47  {
48  FatalErrorIn("omegaWallFunctionFvPatchScalarField::checkType()")
49  << "Invalid wall function specification" << nl
50  << " Patch type for patch " << patch().name()
51  << " must be wall" << nl
52  << " Current patch type is " << patch().type() << nl << endl
53  << abort(FatalError);
54  }
55 }
56 
57 
58 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
59 
60 omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField
61 (
62  const fvPatch& p,
64 )
65 :
67  UName_("U"),
68  rhoName_("rho"),
69  kName_("k"),
70  GName_("RASModel::G"),
71  muName_("mu"),
72  mutName_("mut"),
73  Cmu_(0.09),
74  kappa_(0.41),
75  E_(9.8),
76  beta1_(0.075)
77 {
78  checkType();
79 }
80 
81 
82 omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField
83 (
85  const fvPatch& p,
87  const fvPatchFieldMapper& mapper
88 )
89 :
90  fixedInternalValueFvPatchField<scalar>(ptf, p, iF, mapper),
91  UName_(ptf.UName_),
92  rhoName_(ptf.rhoName_),
93  kName_(ptf.kName_),
94  GName_(ptf.GName_),
95  muName_(ptf.muName_),
96  mutName_(ptf.mutName_),
97  Cmu_(ptf.Cmu_),
98  kappa_(ptf.kappa_),
99  E_(ptf.E_),
100  beta1_(ptf.beta1_)
101 {
102  checkType();
103 }
104 
105 
106 omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField
107 (
108  const fvPatch& p,
110  const dictionary& dict
111 )
112 :
114  UName_(dict.lookupOrDefault<word>("U", "U")),
115  rhoName_(dict.lookupOrDefault<word>("rho", "rho")),
116  kName_(dict.lookupOrDefault<word>("k", "k")),
117  GName_(dict.lookupOrDefault<word>("G", "RASModel::G")),
118  muName_(dict.lookupOrDefault<word>("mu", "mu")),
119  mutName_(dict.lookupOrDefault<word>("mut", "mut")),
120  Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)),
121  kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)),
122  E_(dict.lookupOrDefault<scalar>("E", 9.8)),
123  beta1_(dict.lookupOrDefault<scalar>("beta1", 0.075))
124 {
125  checkType();
126 }
127 
128 
129 omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField
130 (
132 )
133 :
135  UName_(owfpsf.UName_),
136  rhoName_(owfpsf.rhoName_),
137  kName_(owfpsf.kName_),
138  GName_(owfpsf.GName_),
139  muName_(owfpsf.muName_),
140  mutName_(owfpsf.mutName_),
141  Cmu_(owfpsf.Cmu_),
142  kappa_(owfpsf.kappa_),
143  E_(owfpsf.E_),
144  beta1_(owfpsf.beta1_)
145 {
146  checkType();
147 }
148 
149 
150 omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField
151 (
154 )
155 :
157  UName_(owfpsf.UName_),
158  rhoName_(owfpsf.rhoName_),
159  kName_(owfpsf.kName_),
160  GName_(owfpsf.GName_),
161  muName_(owfpsf.muName_),
162  mutName_(owfpsf.mutName_),
163  Cmu_(owfpsf.Cmu_),
164  kappa_(owfpsf.kappa_),
165  E_(owfpsf.E_),
166  beta1_(owfpsf.beta1_)
167 {
168  checkType();
169 }
170 
171 
172 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
173 
174 void omegaWallFunctionFvPatchScalarField::updateCoeffs()
175 {
176  if (updated())
177  {
178  return;
179  }
180 
181  const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
182  const scalarField& y = rasModel.y()[patch().index()];
183 
184  const scalar Cmu25 = pow(Cmu_, 0.25);
185 
186  volScalarField& G = const_cast<volScalarField&>
187  (db().lookupObject<volScalarField>(GName_));
188 
189  volScalarField& omega = const_cast<volScalarField&>
190  (db().lookupObject<volScalarField>(dimensionedInternalField().name()));
191 
192  const scalarField& k = db().lookupObject<volScalarField>(kName_);
193 
194  const scalarField& rhow =
195  patch().lookupPatchField<volScalarField, scalar>(rhoName_);
196 
197  const scalarField& muw =
198  patch().lookupPatchField<volScalarField, scalar>(muName_);
199 
200  const scalarField& mutw =
201  patch().lookupPatchField<volScalarField, scalar>(mutName_);
202 
203  const fvPatchVectorField& Uw =
204  patch().lookupPatchField<volVectorField, vector>(UName_);
205 
206  const scalarField magGradUw = mag(Uw.snGrad());
207 
208  // Set omega and G
209  forAll(mutw, faceI)
210  {
211  label faceCellI = patch().faceCells()[faceI];
212 
213  scalar omegaVis = 6.0*(muw[faceI]/rhow[faceI])/(beta1_*sqr(y[faceI]));
214  scalar omegaLog = sqrt(k[faceCellI])/(Cmu25*kappa_*y[faceI]);
215  omega[faceCellI] = sqrt(sqr(omegaVis) + sqr(omegaLog));
216 
217  G[faceCellI] =
218  (mutw[faceI] + muw[faceI])
219  *magGradUw[faceI]
220  *Cmu25*sqrt(k[faceCellI])
221  /(kappa_*y[faceI]);
222  }
223 
224  // TODO: perform averaging for cells sharing more than one boundary face
225 
227 }
228 
229 
230 void omegaWallFunctionFvPatchScalarField::write(Ostream& os) const
231 {
233  writeEntryIfDifferent<word>(os, "U", "U", UName_);
234  writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_);
235  writeEntryIfDifferent<word>(os, "k", "k", kName_);
236  writeEntryIfDifferent<word>(os, "G", "RASModel::G", GName_);
237  writeEntryIfDifferent<word>(os, "mu", "mu", muName_);
238  writeEntryIfDifferent<word>(os, "mut", "mut", mutName_);
239  os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
240  os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
241  os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
242  os.writeKeyword("beta1") << beta1_ << token::END_STATEMENT << nl;
243  writeEntry("value", os);
244 }
245 
246 
247 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
248 
250 (
253 );
254 
255 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
256 
257 } // End namespace RASModels
258 } // End namespace compressible
259 } // End namespace Foam
260 
261 // ************************ vim: set sw=4 sts=4 et: ************************ //