37 namespace compressible
44 scalar alphaSgsJayatillekeWallFunctionFvPatchScalarField::maxExp_ = 50.0;
45 scalar alphaSgsJayatillekeWallFunctionFvPatchScalarField::tolerance_ = 0.01;
46 label alphaSgsJayatillekeWallFunctionFvPatchScalarField::maxIters_ = 10;
50 void alphaSgsJayatillekeWallFunctionFvPatchScalarField::checkType()
52 if (!isA<wallFvPatch>(patch()))
56 "alphaSgsJayatillekeWallFunctionFvPatchScalarField::checkType()"
58 <<
"Patch type for patch " << patch().name() <<
" must be wall\n"
59 <<
"Current patch type is " << patch().type() <<
nl
65 scalar alphaSgsJayatillekeWallFunctionFvPatchScalarField::Psmooth
70 return 9.24*(
pow(Prat, 0.75) - 1.0)*(1.0 + 0.28*
exp(-0.007*Prat));
74 scalar alphaSgsJayatillekeWallFunctionFvPatchScalarField::yPlusTherm
82 for (
int i=0; i<maxIters_; i++)
84 scalar
f = ypt - (
log(E_*ypt)/kappa_ + P)/Prat;
85 scalar df = 1.0 - 1.0/(ypt*kappa_*Prat);
86 scalar yptNew = ypt - f/df;
92 else if (
mag(yptNew - ypt) < tolerance_)
108 alphaSgsJayatillekeWallFunctionFvPatchScalarField::
109 alphaSgsJayatillekeWallFunctionFvPatchScalarField
115 fixedValueFvPatchScalarField(p, iF),
125 alphaSgsJayatillekeWallFunctionFvPatchScalarField::
126 alphaSgsJayatillekeWallFunctionFvPatchScalarField
134 fixedValueFvPatchScalarField(ptf, p, iF, mapper),
142 alphaSgsJayatillekeWallFunctionFvPatchScalarField::
143 alphaSgsJayatillekeWallFunctionFvPatchScalarField
150 fixedValueFvPatchScalarField(p, iF, dict),
160 alphaSgsJayatillekeWallFunctionFvPatchScalarField::
161 alphaSgsJayatillekeWallFunctionFvPatchScalarField
166 fixedValueFvPatchScalarField(awfpsf),
168 kappa_(awfpsf.kappa_),
170 hsName_(awfpsf.hsName_)
176 alphaSgsJayatillekeWallFunctionFvPatchScalarField::
177 alphaSgsJayatillekeWallFunctionFvPatchScalarField
183 fixedValueFvPatchScalarField(awfpsf, iF),
185 kappa_(awfpsf.kappa_),
187 hsName_(awfpsf.hsName_)
195 void alphaSgsJayatillekeWallFunctionFvPatchScalarField::evaluate
203 const label patchI = patch().index();
229 sqrt((muSgsw[faceI] + muw[faceI])/rhow[faceI]*magGradUw[faceI]);
231 if (uTau > ROOTVSMALL)
238 scalar kUu =
min(kappa_*magUp[faceI]/uTau, maxExp_);
239 scalar fkUu =
exp(kUu) - 1.0 - kUu*(1.0 + 0.5*kUu);
242 - uTau/(ry[faceI]*muw[faceI]/rhow[faceI])
244 + 1.0/E_*(fkUu - 1.0/6.0*kUu*
sqr(kUu));
247 - 1.0/(ry[faceI]*muw[faceI]/rhow[faceI])
248 - magUp[faceI]/
sqr(uTau)
249 - 1.0/E_*kUu*fkUu/uTau;
251 scalar uTauNew = uTau - f/df;
252 err =
mag((uTau - uTauNew)/uTau);
255 }
while (uTau>VSMALL && err>tolerance_ && ++iter<maxIters_);
257 scalar yPlus = uTau/ry[faceI]/(muw[faceI]/rhow[faceI]);
260 scalar
Pr = muw[faceI]/alphaw[faceI];
263 scalar Prat = Pr/Prt_;
266 scalar P = Psmooth(Prat);
267 scalar yPlusTherm = this->yPlusTherm(P, Prat);
270 scalar alphaEff = 0.0;
271 if (yPlus < yPlusTherm)
273 scalar
A = qDot[faceI]*rhow[faceI]*uTau/ry[faceI];
274 scalar B = qDot[faceI]*Pr*yPlus;
275 scalar
C = Pr*0.5*rhow[faceI]*uTau*
sqr(magUp[faceI]);
276 alphaEff = A/(B + C + VSMALL);
280 scalar
A = qDot[faceI]*rhow[faceI]*uTau/ry[faceI];
281 scalar B = qDot[faceI]*Prt_*(1.0/kappa_*
log(E_*yPlus) + P);
282 scalar magUc = uTau/kappa_*
log(E_*yPlusTherm) -
mag(Uw[faceI]);
285 *(Prt_*
sqr(magUp[faceI]) + (Pr - Prt_)*
sqr(magUc));
286 alphaEff = A/(B + C + VSMALL);
290 alphaSgsw[faceI] =
max(0.0, alphaEff - alphaw[faceI]);
294 Info<<
" uTau = " << uTau <<
nl
295 <<
" Pr = " << Pr <<
nl
296 <<
" Prt = " << Prt_ <<
nl
297 <<
" qDot = " << qDot[faceI] <<
nl
298 <<
" yPlus = " << yPlus <<
nl
299 <<
" yPlusTherm = " << yPlusTherm <<
nl
300 <<
" alphaEff = " << alphaEff <<
nl
301 <<
" alphaw = " << alphaw[faceI] <<
nl
302 <<
" alphaSgsw = " << alphaSgsw[faceI] <<
nl
308 alphaSgsw[faceI] = 0.0;
314 void alphaSgsJayatillekeWallFunctionFvPatchScalarField::write(
Ostream& os)
const
321 writeEntry(
"value", os);