47 Cmu_(dimensioned<scalar>::lookupOrAddToDict(
51 beta_(dimensioned<scalar>::lookupOrAddToDict(
55 gamma_(dimensioned<scalar>::lookupOrAddToDict(
59 alphaK_(dimensioned<scalar>::lookupOrAddToDict(
63 alphaOmega_(dimensioned<scalar>::lookupOrAddToDict(
68 omega_(const_cast<volScalarField&>(
69 mesh_.thisDb().lookupObject<volScalarField>(
"omega"))),
73 mesh.time().timeName(),
78 dimensionedScalar(
"omegaRes", dimensionSet(0, 0, 0, 0, 0, 0, 0), 0.0),
79 zeroGradientFvPatchField<scalar>::typeName),
81 const_cast<volScalarField&>(
82 mesh_.thisDb().lookupObject<volScalarField>(
"k"))),
86 mesh.time().timeName(),
91 dimensionedScalar(
"kRes", dimensionSet(0, 0, 0, 0, 0, 0, 0), 0.0),
92 zeroGradientFvPatchField<scalar>::typeName),
97 mesh.time().timeName(),
99 IOobject::READ_IF_PRESENT,
100 IOobject::AUTO_WRITE),
102 dimensionedScalar(
"betaFIK", dimensionSet(0, 0, 0, 0, 0, 0, 0), 1.0),
107 mesh.time().timeName(),
109 IOobject::READ_IF_PRESENT,
110 IOobject::AUTO_WRITE),
112 dimensionedScalar(
"betaFIOmega", dimensionSet(0, 0, 0, 0, 0, 0, 0), 1.0),
118 omegaRes_.dimensions().reset(dimensionSet(0, 0, -2, 0, 0, 0, 0));
119 kRes_.dimensions().reset(dimensionSet(0, 2, -3, 0, 0, 0, 0));
123 omegaRes_.dimensions().reset(dimensionSet(1, -3, -2, 0, 0, 0, 0));
124 kRes_.dimensions().reset(dimensionSet(1, -1, -3, 0, 0, 0, 0));
128 label nWallFaces = 0;
131 if (
omega_.boundaryField()[patchI].type() ==
"omegaWallFunction"
132 &&
omega_.boundaryField()[patchI].size() > 0)
145 tmp<volTensorField> tgradU = fvc::grad(
U_);
146 GPtr_.reset(
new volScalarField(
"kOmega:G",
nut_ * (tgradU() && dev(twoSymm(tgradU())))));
179 word stateName = modelStates[idxI];
180 if (stateName ==
"nut")
182 modelStates[idxI] =
"omega";
183 modelStates.append(
"k");
198 nut_.correctBoundaryConditions();
215 k_.correctBoundaryConditions();
240 omega_.correctBoundaryConditions();
254 if (
omega_.boundaryField()[patchI].type() ==
"omegaWallFunction"
255 and
omega_.boundaryField()[patchI].size() > 0)
257 const UList<label>& faceCells =
mesh_.boundaryMesh()[patchI].faceCells();
279 if (
omega_.boundaryField()[patchI].type() ==
"omegaWallFunction"
280 &&
omega_.boundaryField()[patchI].size() > 0)
282 const UList<label>& faceCells =
mesh_.boundaryMesh()[patchI].faceCells();
287 omega_.boundaryFieldRef()[patchI][faceI] =
omega_[faceCells[faceI]];
343 label stateConSize = stateCon.size();
347 forAll(stateCon[idxI], idxJ)
349 word conStateName = stateCon[idxI][idxJ];
350 if (conStateName ==
"nut")
352 stateCon[idxI][idxJ] =
"omega";
353 stateCon[idxI].append(
"k");
363 forAll(stateCon[idxI], idxJ)
365 word conStateName = stateCon[idxI][idxJ];
366 if (conStateName ==
"U")
373 stateCon[idxI].append(
"U");
378 if (idxI != stateConSize - 1)
381 forAll(stateCon[idxI + 1], idxJ)
383 word conStateName = stateCon[idxI + 1][idxJ];
384 if (conStateName ==
"U")
391 stateCon[idxI + 1].append(
"U");
397 "In DAStateInfo, nut shows in the largest connectivity level! "
398 "This is not supported!")
445 if (
mesh_.thisDb().foundObject<volScalarField>(
"p"))
449 else if (
mesh_.thisDb().foundObject<volScalarField>(
"p_rgh"))
456 "Neither p nor p_rgh was found in mesh.thisDb()!"
457 "addModelResidualCon failed to setup turbulence residuals!")
467 {
"U",
"omega",
"k",
"phi"},
474 {
"U",
"omega",
"k",
"phi"},
484 {
"U",
"T", pName,
"omega",
"k",
"phi"},
485 {
"U",
"T", pName,
"omega",
"k"},
486 {
"U",
"T", pName,
"omega",
"k"}
491 {
"U",
"T", pName,
"omega",
"k",
"phi"},
492 {
"U",
"T", pName,
"omega",
"k"},
493 {
"U",
"T", pName,
"omega",
"k"}
511 dictionary dummyOptions;
512 dummyOptions.set(
"printToScreen", printToScreen);
541 word divKScheme =
"div(phi,k)";
542 word divOmegaScheme =
"div(phi,omega)";
546 label printToScreen = options.lookupOrDefault(
"printToScreen", 0);
550 isPC = options.getLabel(
"isPC");
554 divKScheme =
"div(pc)";
555 divOmegaScheme =
"div(pc)";
559 volScalarField
rho = this->
rho();
564 volScalarField divU(fvc::div(fvc::absolute(
phi_ / fvc::interpolate(
rho),
U_)));
566 tmp<volTensorField> tgradU = fvc::grad(
U_);
567 volScalarField& G =
const_cast<volScalarField&
>(
GPtr_());
568 G =
nut_ * (tgradU() && dev(twoSymm(tgradU())));
574 omega_.boundaryFieldRef().updateCoeffs();
584 tmp<fvScalarMatrix> omegaEqn(
592 omegaEqn.ref().relax();
593 omegaEqn.ref().boundaryManipulate(
omega_.boundaryFieldRef());
599 SolverPerformance<scalar> solverOmega =
solve(omegaEqn);
616 tmp<fvScalarMatrix> kEqn(
631 SolverPerformance<scalar> solverK =
solve(kEqn);
661 if (varName !=
"k" && varName !=
"omega")
664 "varName not valid. It has to be k or omega")
668 volScalarField
rho = this->
rho();
673 volScalarField divU(fvc::div(fvc::absolute(
phi_ / fvc::interpolate(
rho),
U_)));
675 tmp<volTensorField> tgradU = fvc::grad(
U_);
676 volScalarField& G =
const_cast<volScalarField&
>(
GPtr_());
677 G =
nut_ * (tgradU() && dev(twoSymm(tgradU())));
684 if (varName ==
"omega")
687 fvScalarMatrix omegaEqn(
701 upper = omegaEqn.upper();
702 lower = omegaEqn.lower();
704 else if (varName ==
"k")
718 upper = kEqn.upper();
719 lower = kEqn.lower();
729 tmp<volTensorField> tgradU = fvc::grad(
U_);
730 volScalarField& G =
const_cast<volScalarField&
>(
GPtr_());
731 G =
nut_ * (tgradU() && dev(twoSymm(tgradU())));
733 volScalarField
rho = this->
rho();
740 PoD[cellI] = P[cellI] / (
D[cellI] + P[cellI] + 1e-16);
751 tmp<volTensorField> tgradU = fvc::grad(
U_);
752 volScalarField& G =
const_cast<volScalarField&
>(
GPtr_());
753 G =
nut_ * (tgradU() && dev(twoSymm(tgradU())));
755 volScalarField
rho = this->
rho();
762 CoP[cellI] = C[cellI] / (P[cellI] + C[cellI] + 1e-16);