47 sigmaNut_(dimensioned<scalar>::lookupOrAddToDict(
51 kappa_(dimensioned<scalar>::lookupOrAddToDict(
56 Cb1_(dimensioned<scalar>::lookupOrAddToDict(
60 Cb2_(dimensioned<scalar>::lookupOrAddToDict(
64 Cw1_(Cb1_ / sqr(kappa_) + (1.0 + Cb2_) / sigmaNut_),
65 Cw2_(dimensioned<scalar>::lookupOrAddToDict(
69 Cw3_(dimensioned<scalar>::lookupOrAddToDict(
73 Cv1_(dimensioned<scalar>::lookupOrAddToDict(
77 Cv2_(dimensioned<scalar>::lookupOrAddToDict(
82 nuTilda_(const_cast<volScalarField&>(
83 mesh.thisDb().lookupObject<volScalarField>(
"nuTilda"))),
87 mesh.time().timeName(),
92 dimensionedScalar(
"nuTildaRes", dimensionSet(0, 0, 0, 0, 0, 0, 0), 0.0),
93 zeroGradientFvPatchField<scalar>::typeName),
98 mesh.time().timeName(),
103 pseudoNuTildaEqn_(fvm::div(phi_, pseudoNuTilda_,
"div(phi,nuTilda)")),
104 y_(
mesh.thisDb().lookupObject<volScalarField>(
"yWall")),
108 mesh.time().timeName(),
110 IOobject::READ_IF_PRESENT,
111 IOobject::AUTO_WRITE),
113 dimensionedScalar(
"betaFINuTilda", dimensionSet(0, 0, 0, 0, 0, 0, 0), 1.0),
118 const fvSolution& myFvSolution =
mesh.thisDb().lookupObject<fvSolution>(
"fvSolution");
120 if (myFvSolution.found(
"relaxationFactors"))
122 if (myFvSolution.subDict(
"relaxationFactors").found(
"equations"))
124 if (myFvSolution.subDict(
"relaxationFactors").subDict(
"equations").found(
"nuTilda"))
126 relaxNuTildaEqn_ = myFvSolution.subDict(
"relaxationFactors").subDict(
"equations").getScalar(
"nuTilda");
134 nuTildaRes_.dimensions().reset(dimensionSet(0, 2, -2, 0, 0, 0, 0));
139 nuTildaRes_.dimensions().reset(dimensionSet(1, -1, -2, 0, 0, 0, 0));
152 const volScalarField& chi)
const
154 const volScalarField chi3(pow3(
chi));
155 return chi3 / (chi3 + pow3(
Cv1_));
159 const volScalarField& chi,
160 const volScalarField& fv1)
const
162 return 1.0 / pow3(scalar(1) +
chi /
Cv2_);
166 const volScalarField& chi,
167 const volScalarField& fv1)
const
170 const volScalarField chiByCv2((1 /
Cv2_) *
chi);
172 return (scalar(1) +
chi *
fv1)
174 * (3 * (scalar(1) + chiByCv2) + sqr(chiByCv2))
175 / pow3(scalar(1) + chiByCv2);
179 const volScalarField& Stilda)
const
186 dimensionedScalar(
"SMALL", Stilda.dimensions(), SMALL))
189 r.boundaryFieldRef() == 0.0;
191 const volScalarField g(r +
Cw2_ * (pow6(r) - r));
193 return g * pow((1.0 + pow6(
Cw3_)) / (pow6(g) + pow6(
Cw3_)), 1.0 / 6.0);
198 return tmp<volScalarField>(
229 word stateName = modelStates[idxI];
230 if (stateName ==
"nut")
232 modelStates[idxI] =
"nuTilda";
245 const volScalarField
chi(this->
chi());
246 const volScalarField
fv1(this->
fv1(chi));
249 nut_.correctBoundaryConditions();
265 nuTilda_.correctBoundaryConditions();
318 forAll(stateCon[idxI], idxJ)
320 word conStateName = stateCon[idxI][idxJ];
321 if (conStateName ==
"nut")
323 stateCon[idxI][idxJ] =
"nuTilda";
369 if (
mesh_.thisDb().foundObject<volScalarField>(
"p"))
373 else if (
mesh_.thisDb().foundObject<volScalarField>(
"p_rgh"))
380 "Neither p nor p_rgh was found in mesh.thisDb()!"
381 "addModelResidualCon failed to setup turbulence residuals!")
391 {
"U",
"nuTilda",
"phi"},
401 {
"U",
"T", pName,
"nuTilda",
"phi"},
402 {
"U",
"T", pName,
"nuTilda"},
403 {
"T", pName,
"nuTilda"}
421 dictionary dummyOptions;
422 dummyOptions.set(
"printToScreen", printToScreen);
451 word divNuTildaScheme =
"div(phi,nuTilda)";
455 label printToScreen = options.lookupOrDefault(
"printToScreen", 0);
459 isPC = options.getLabel(
"isPC");
463 divNuTildaScheme =
"div(pc)";
467 const volScalarField
chi(this->
chi());
468 const volScalarField
fv1(this->
fv1(chi));
470 const volScalarField Stilda(
471 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
474 volScalarField
rho = this->
rho();
476 tmp<fvScalarMatrix> nuTildaEqn(
484 nuTildaEqn.ref().relax();
490 SolverPerformance<scalar> solverNuTilda =
solve(nuTildaEqn);
494 nuTilda_.correctBoundaryConditions();
514 const volScalarField& mySource,
601 const volScalarField
chi(this->
chi());
602 const volScalarField
fv1(this->
fv1(chi));
605 const volScalarField Stilda(
606 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
640 const fvPatch& pp =
pseudoNuTilda_.boundaryField()[patchI].patch();
643 label cellI = pp.faceCells()[faceI];
665 const volScalarField
chi(this->
chi());
666 const volScalarField
fv1(this->
fv1(chi));
669 const volScalarField Stilda(
670 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
674 fvScalarMatrix nuTildaEqn(
681 List<scalar>& nuTildaSource = nuTildaEqn.source();
682 List<scalar>& nuTildaDiag = nuTildaEqn.diag();
685 for (label i = 0; i <
nuTilda_.size(); i++)
687 nuTildaRes[i] = nuTildaDiag[i] *
nuTilda_[i] - nuTildaSource[i];
689 nuTildaRes.primitiveFieldRef() -= nuTildaEqn.lduMatrix::H(
nuTilda_);
694 const fvPatch& pp =
nuTilda_.boundaryField()[patchI].patch();
699 label cellI = pp.faceCells()[faceI];
703 nuTildaRes[cellI] += nuTildaEqn.internalCoeffs()[patchI][faceI] *
nuTilda_[cellI];
704 nuTildaRes[cellI] -= nuTildaEqn.boundaryCoeffs()[patchI][faceI];
709 nuTildaRes.correctBoundaryConditions();
724 if (varName !=
"nuTilda")
727 "varName not valid. It has to be nuTilda")
731 const volScalarField
chi(this->
chi());
732 const volScalarField
fv1(this->
fv1(chi));
734 const volScalarField Stilda(
735 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
738 volScalarField
rho = this->
rho();
740 fvScalarMatrix nuTildaEqn(
750 diag = nuTildaEqn.D();
751 upper = nuTildaEqn.upper();
752 lower = nuTildaEqn.lower();
762 const volScalarField
chi(this->
chi());
763 const volScalarField
fv1(this->
fv1(chi));
765 const volScalarField Stilda(
766 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
769 volScalarField
rho = this->
rho();
776 PoD[cellI] = P[cellI] / (
D[cellI] + P[cellI] + 1e-16);
787 const volScalarField
chi(this->
chi());
788 const volScalarField
fv1(this->
fv1(chi));
790 const volScalarField Stilda(
791 this->
fv3(chi,
fv1) * ::sqrt(2.0) * mag(skew(fvc::grad(
U_)))
794 volScalarField
rho = this->
rho();
801 CoP[cellI] = C[cellI] / (P[cellI] + C[cellI] + 1e-16);