mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge remote branch 'OpenCFD/olesenm' into olesenm
This commit is contained in:
@ -106,7 +106,7 @@ void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
|
|
||||||
volScalarField K = 0.5*tr(B_);
|
volScalarField K = 0.5*tr(B_);
|
||||||
|
|
||||||
solve
|
tmp<fvSymmTensorMatrix> BEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho(), B_)
|
fvm::ddt(rho(), B_)
|
||||||
+ fvm::div(phi(), B_)
|
+ fvm::div(phi(), B_)
|
||||||
@ -118,6 +118,8 @@ void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- (2*ce_ - 0.667*cm_)*I*rho()*epsilon()
|
- (2*ce_ - 0.667*cm_)*I*rho()*epsilon()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
BEqn().relax();
|
||||||
|
BEqn().solve();
|
||||||
|
|
||||||
// Bounding the component kinetic energies
|
// Bounding the component kinetic energies
|
||||||
|
|
||||||
|
|||||||
@ -108,7 +108,9 @@ GenEddyVisc::GenEddyVisc
|
|||||||
),
|
),
|
||||||
mesh_
|
mesh_
|
||||||
)
|
)
|
||||||
{}
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -79,7 +79,7 @@ LESModel::LESModel
|
|||||||
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
||||||
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
||||||
|
|
||||||
kMin_("kMin", dimVelocity*dimVelocity, SMALL),
|
kMin_("kMin", sqr(dimVelocity), SMALL),
|
||||||
|
|
||||||
delta_(LESdelta::New("delta", U.mesh(), *this))
|
delta_(LESdelta::New("delta", U.mesh(), *this))
|
||||||
{
|
{
|
||||||
@ -131,8 +131,12 @@ autoPtr<LESModel> LESModel::New
|
|||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"LESModel::New(const volVectorField& U, const "
|
"LESModel::New"
|
||||||
"surfaceScalarField& phi, const basicThermo&)"
|
"("
|
||||||
|
"const volVectorField&, "
|
||||||
|
"const surfaceScalarField&, "
|
||||||
|
"const basicThermo&"
|
||||||
|
")"
|
||||||
) << "Unknown LESModel type " << modelName
|
) << "Unknown LESModel type " << modelName
|
||||||
<< endl << endl
|
<< endl << endl
|
||||||
<< "Valid LESModel types are :" << endl
|
<< "Valid LESModel types are :" << endl
|
||||||
@ -167,7 +171,7 @@ bool LESModel::read()
|
|||||||
coeffDict_ <<= *dictPtr;
|
coeffDict_ <<= *dictPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
readIfPresent("kMin", kMin_);
|
kMin_.readIfPresent(*this);
|
||||||
|
|
||||||
delta_().read(*this);
|
delta_().read(*this);
|
||||||
|
|
||||||
|
|||||||
@ -302,7 +302,7 @@ void SpalartAllmaras::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField Stilda =
|
volScalarField Stilda =
|
||||||
fv3()*::sqrt(2.0)*mag(skew(gradU)) + fv2()*nuTilda_/sqr(kappa_*dTilda_);
|
fv3()*::sqrt(2.0)*mag(skew(gradU)) + fv2()*nuTilda_/sqr(kappa_*dTilda_);
|
||||||
|
|
||||||
solve
|
tmp<fvScalarMatrix> nuTildaEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho(), nuTilda_)
|
fvm::ddt(rho(), nuTilda_)
|
||||||
+ fvm::div(phi(), nuTilda_)
|
+ fvm::div(phi(), nuTilda_)
|
||||||
@ -318,6 +318,9 @@ void SpalartAllmaras::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- fvm::Sp(rho()*Cw1_*fw(Stilda)*nuTilda_/sqr(dTilda_), nuTilda_)
|
- fvm::Sp(rho()*Cw1_*fw(Stilda)*nuTilda_/sqr(dTilda_), nuTilda_)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
nuTildaEqn().relax();
|
||||||
|
nuTildaEqn().solve();
|
||||||
|
|
||||||
bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0));
|
bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0));
|
||||||
nuTilda_.correctBoundaryConditions();
|
nuTilda_.correctBoundaryConditions();
|
||||||
|
|
||||||
|
|||||||
@ -118,7 +118,7 @@ void dynOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
||||||
volScalarField G = 2*muSgs_*(gradU && D);
|
volScalarField G = 2*muSgs_*(gradU && D);
|
||||||
|
|
||||||
solve
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho(), k_)
|
fvm::ddt(rho(), k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -129,9 +129,8 @@ void dynOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- fvm::Sp(ce_(D)*rho()*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce_(D)*rho()*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
//FIXME: why not this?
|
kEqn().relax();
|
||||||
// kEqn.relax();
|
kEqn().solve();
|
||||||
// kEqn.solve();
|
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
|
|||||||
@ -106,7 +106,7 @@ void lowReOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
||||||
volScalarField G = 2*muSgs_*(gradU && dev(symm(gradU)));
|
volScalarField G = 2*muSgs_*(gradU && dev(symm(gradU)));
|
||||||
|
|
||||||
solve
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho(), k_)
|
fvm::ddt(rho(), k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -117,6 +117,9 @@ void lowReOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
kEqn().relax();
|
||||||
|
kEqn().solve();
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields();
|
updateSubGridScaleFields();
|
||||||
|
|||||||
@ -93,7 +93,7 @@ void oneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
volScalarField divU = fvc::div(phi()/fvc::interpolate(rho()));
|
||||||
volScalarField G = 2*muSgs_*(gradU && dev(symm(gradU)));
|
volScalarField G = 2*muSgs_*(gradU && dev(symm(gradU)));
|
||||||
|
|
||||||
fvScalarMatrix kEqn
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho(), k_)
|
fvm::ddt(rho(), k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -104,8 +104,8 @@ void oneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
kEqn.relax();
|
kEqn().relax();
|
||||||
kEqn.solve();
|
kEqn().solve();
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
|
|||||||
@ -229,6 +229,7 @@ LRR::LRR
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -258,6 +258,7 @@ LaunderGibsonRSTM::LaunderGibsonRSTM
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -187,6 +187,7 @@ LaunderSharmaKE::LaunderSharmaKE
|
|||||||
autoCreateAlphat("alphat", mesh_)
|
autoCreateAlphat("alphat", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
mut_ = rho_*Cmu_*fMu()*sqr(k_)/epsilon_;
|
mut_ = rho_*Cmu_*fMu()*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -81,7 +81,7 @@ RASModel::RASModel
|
|||||||
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
||||||
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
||||||
|
|
||||||
kMin_("kMin", dimVelocity*dimVelocity, SMALL),
|
kMin_("kMin", sqr(dimVelocity), SMALL),
|
||||||
epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL),
|
epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL),
|
||||||
omegaMin_("omegaMin", dimless/dimTime, SMALL),
|
omegaMin_("omegaMin", dimless/dimTime, SMALL),
|
||||||
|
|
||||||
@ -133,9 +133,13 @@ autoPtr<RASModel> RASModel::New
|
|||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"RASModel::New(const volScalarField&, "
|
"RASModel::New"
|
||||||
"const volVectorField&, const surfaceScalarField&, "
|
"("
|
||||||
"basicThermo&)"
|
"const volScalarField&, "
|
||||||
|
"const volVectorField&, "
|
||||||
|
"const surfaceScalarField&, "
|
||||||
|
"basicThermo&"
|
||||||
|
")"
|
||||||
) << "Unknown RASModel type " << modelName
|
) << "Unknown RASModel type " << modelName
|
||||||
<< endl << endl
|
<< endl << endl
|
||||||
<< "Valid RASModel types are :" << endl
|
<< "Valid RASModel types are :" << endl
|
||||||
|
|||||||
@ -186,6 +186,7 @@ RNGkEpsilon::RNGkEpsilon
|
|||||||
autoCreateAlphat("alphat", mesh_)
|
autoCreateAlphat("alphat", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -168,6 +168,7 @@ kEpsilon::kEpsilon
|
|||||||
autoCreateAlphat("alphat", mesh_)
|
autoCreateAlphat("alphat", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
mut_ = Cmu_*rho_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -258,6 +258,7 @@ kOmegaSST::kOmegaSST
|
|||||||
autoCreateAlphat("alphat", mesh_)
|
autoCreateAlphat("alphat", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(omega_, omegaMin_);
|
bound(omega_, omegaMin_);
|
||||||
|
|
||||||
mut_ =
|
mut_ =
|
||||||
|
|||||||
@ -102,7 +102,7 @@ void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField K = 0.5*tr(B_);
|
volScalarField K = 0.5*tr(B_);
|
||||||
volScalarField Epsilon = 2*nuEff()*magSqr(D);
|
volScalarField Epsilon = 2*nuEff()*magSqr(D);
|
||||||
|
|
||||||
fvSymmTensorMatrix BEqn
|
tmp<fvSymmTensorMatrix> BEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(B_)
|
fvm::ddt(B_)
|
||||||
+ fvm::div(phi(), B_)
|
+ fvm::div(phi(), B_)
|
||||||
@ -114,8 +114,8 @@ void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- (2*ce_ - 0.667*cm_)*I*Epsilon
|
- (2*ce_ - 0.667*cm_)*I*Epsilon
|
||||||
);
|
);
|
||||||
|
|
||||||
BEqn.relax();
|
BEqn().relax();
|
||||||
BEqn.solve();
|
BEqn().solve();
|
||||||
|
|
||||||
// Bounding the component kinetic energies
|
// Bounding the component kinetic energies
|
||||||
|
|
||||||
|
|||||||
@ -78,7 +78,7 @@ LESModel::LESModel
|
|||||||
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
||||||
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
||||||
|
|
||||||
kMin_("kMin", dimVelocity*dimVelocity, SMALL),
|
kMin_("kMin", sqr(dimVelocity), SMALL),
|
||||||
delta_(LESdelta::New("delta", U.mesh(), *this))
|
delta_(LESdelta::New("delta", U.mesh(), *this))
|
||||||
{
|
{
|
||||||
readIfPresent("kMin", kMin_);
|
readIfPresent("kMin", kMin_);
|
||||||
@ -128,8 +128,12 @@ autoPtr<LESModel> LESModel::New
|
|||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"LESModel::New(const volVectorField& U, const "
|
"LESModel::New"
|
||||||
"surfaceScalarField& phi, transportModel&)"
|
"("
|
||||||
|
"const volVectorField&, "
|
||||||
|
"const surfaceScalarField& ,"
|
||||||
|
"transportModel&"
|
||||||
|
")"
|
||||||
) << "Unknown LESModel type " << modelName
|
) << "Unknown LESModel type " << modelName
|
||||||
<< endl << endl
|
<< endl << endl
|
||||||
<< "Valid LESModel types are :" << endl
|
<< "Valid LESModel types are :" << endl
|
||||||
@ -167,7 +171,7 @@ bool LESModel::read()
|
|||||||
|
|
||||||
delta_().read(*this);
|
delta_().read(*this);
|
||||||
|
|
||||||
readIfPresent("kMin", kMin_);
|
kMin_.readIfPresent(*this);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -90,7 +90,10 @@ LRRDiffStress::LRRDiffStress
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
updateSubGridScaleFields(0.5*tr(B_));
|
volScalarField K = 0.5*tr(B_);
|
||||||
|
bound(K, kMin_);
|
||||||
|
|
||||||
|
updateSubGridScaleFields(K);
|
||||||
|
|
||||||
printCoeffs();
|
printCoeffs();
|
||||||
}
|
}
|
||||||
@ -111,7 +114,7 @@ void LRRDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
volScalarField K = 0.5*tr(B_);
|
volScalarField K = 0.5*tr(B_);
|
||||||
volScalarField Epsilon = 2*nuEff()*magSqr(D);
|
volScalarField Epsilon = 2*nuEff()*magSqr(D);
|
||||||
|
|
||||||
fvSymmTensorMatrix BEqn
|
tmp<fvSymmTensorMatrix> BEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(B_)
|
fvm::ddt(B_)
|
||||||
+ fvm::div(phi(), B_)
|
+ fvm::div(phi(), B_)
|
||||||
@ -124,8 +127,8 @@ void LRRDiffStress::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- (0.667 - 2*c1_)*I*pow(K, 1.5)/delta()
|
- (0.667 - 2*c1_)*I*pow(K, 1.5)/delta()
|
||||||
);
|
);
|
||||||
|
|
||||||
BEqn.relax();
|
BEqn().relax();
|
||||||
BEqn.solve();
|
BEqn().solve();
|
||||||
|
|
||||||
// Bounding the component kinetic energies
|
// Bounding the component kinetic energies
|
||||||
|
|
||||||
|
|||||||
@ -295,7 +295,7 @@ void SpalartAllmaras::correct(const tmp<volTensorField>& gradU)
|
|||||||
const volScalarField dTilda = this->dTilda(S);
|
const volScalarField dTilda = this->dTilda(S);
|
||||||
const volScalarField STilda = this->STilda(S, dTilda);
|
const volScalarField STilda = this->STilda(S, dTilda);
|
||||||
|
|
||||||
fvScalarMatrix nuTildaEqn
|
tmp<fvScalarMatrix> nuTildaEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(nuTilda_)
|
fvm::ddt(nuTilda_)
|
||||||
+ fvm::div(phi(), nuTilda_)
|
+ fvm::div(phi(), nuTilda_)
|
||||||
@ -311,8 +311,8 @@ void SpalartAllmaras::correct(const tmp<volTensorField>& gradU)
|
|||||||
- fvm::Sp(Cw1_*fw(STilda, dTilda)*nuTilda_/sqr(dTilda), nuTilda_)
|
- fvm::Sp(Cw1_*fw(STilda, dTilda)*nuTilda_/sqr(dTilda), nuTilda_)
|
||||||
);
|
);
|
||||||
|
|
||||||
nuTildaEqn.relax();
|
nuTildaEqn().relax();
|
||||||
nuTildaEqn.solve();
|
nuTildaEqn().solve();
|
||||||
|
|
||||||
bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0));
|
bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0));
|
||||||
nuTilda_.correctBoundaryConditions();
|
nuTilda_.correctBoundaryConditions();
|
||||||
|
|||||||
@ -176,7 +176,6 @@ SpalartAllmarasIDDES::SpalartAllmarasIDDES
|
|||||||
1.63
|
1.63
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -127,6 +127,8 @@ dynOneEqEddy::dynOneEqEddy
|
|||||||
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
||||||
filter_(filterPtr_())
|
filter_(filterPtr_())
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields(symm(fvc::grad(U)));
|
updateSubGridScaleFields(symm(fvc::grad(U)));
|
||||||
|
|
||||||
printCoeffs();
|
printCoeffs();
|
||||||
@ -145,7 +147,7 @@ void dynOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
|
|
||||||
volScalarField P = 2.0*nuSgs_*magSqr(D);
|
volScalarField P = 2.0*nuSgs_*magSqr(D);
|
||||||
|
|
||||||
fvScalarMatrix kEqn
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(k_)
|
fvm::ddt(k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -155,8 +157,8 @@ void dynOneEqEddy::correct(const tmp<volTensorField>& tgradU)
|
|||||||
- fvm::Sp(ce(D)*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce(D)*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
kEqn.relax();
|
kEqn().relax();
|
||||||
kEqn.solve();
|
kEqn().solve();
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
|
|||||||
@ -118,6 +118,8 @@ dynSmagorinsky::dynSmagorinsky
|
|||||||
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
||||||
filter_(filterPtr_())
|
filter_(filterPtr_())
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields(dev(symm(fvc::grad(U))));
|
updateSubGridScaleFields(dev(symm(fvc::grad(U))));
|
||||||
|
|
||||||
printCoeffs();
|
printCoeffs();
|
||||||
@ -133,6 +135,7 @@ void dynSmagorinsky::correct(const tmp<volTensorField>& gradU)
|
|||||||
volSymmTensorField D = dev(symm(gradU));
|
volSymmTensorField D = dev(symm(gradU));
|
||||||
|
|
||||||
k_ = cI(D)*sqr(delta())*magSqr(D);
|
k_ = cI(D)*sqr(delta())*magSqr(D);
|
||||||
|
bound(k_, kMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields(D);
|
updateSubGridScaleFields(D);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -323,6 +323,7 @@ kOmegaSSTSAS::kOmegaSSTSAS
|
|||||||
mesh_
|
mesh_
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(omega_, omegaMin_);
|
bound(omega_, omegaMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields(magSqr(symm(fvc::grad(U))));
|
updateSubGridScaleFields(magSqr(symm(fvc::grad(U))));
|
||||||
|
|||||||
@ -119,6 +119,8 @@ locDynOneEqEddy::locDynOneEqEddy
|
|||||||
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
filterPtr_(LESfilter::New(U.mesh(), coeffDict())),
|
||||||
filter_(filterPtr_())
|
filter_(filterPtr_())
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
|
|
||||||
volScalarField KK = 0.5*(filter_(magSqr(U)) - magSqr(filter_(U)));
|
volScalarField KK = 0.5*(filter_(magSqr(U)) - magSqr(filter_(U)));
|
||||||
updateSubGridScaleFields(symm(fvc::grad(U)), KK);
|
updateSubGridScaleFields(symm(fvc::grad(U)), KK);
|
||||||
|
|
||||||
@ -139,7 +141,7 @@ void locDynOneEqEddy::correct(const tmp<volTensorField>& gradU)
|
|||||||
|
|
||||||
volScalarField P = 2.0*nuSgs_*magSqr(D);
|
volScalarField P = 2.0*nuSgs_*magSqr(D);
|
||||||
|
|
||||||
fvScalarMatrix kEqn
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(k_)
|
fvm::ddt(k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -149,8 +151,8 @@ void locDynOneEqEddy::correct(const tmp<volTensorField>& gradU)
|
|||||||
- fvm::Sp(ce(D, KK)*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce(D, KK)*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
kEqn.relax();
|
kEqn().relax();
|
||||||
kEqn.solve();
|
kEqn().solve();
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
|
|||||||
@ -86,6 +86,8 @@ oneEqEddy::oneEqEddy
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
|
|
||||||
updateSubGridScaleFields();
|
updateSubGridScaleFields();
|
||||||
|
|
||||||
printCoeffs();
|
printCoeffs();
|
||||||
@ -100,7 +102,7 @@ void oneEqEddy::correct(const tmp<volTensorField>& gradU)
|
|||||||
|
|
||||||
volScalarField G = 2.0*nuSgs_*magSqr(symm(gradU));
|
volScalarField G = 2.0*nuSgs_*magSqr(symm(gradU));
|
||||||
|
|
||||||
fvScalarMatrix kEqn
|
tmp<fvScalarMatrix> kEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(k_)
|
fvm::ddt(k_)
|
||||||
+ fvm::div(phi(), k_)
|
+ fvm::div(phi(), k_)
|
||||||
@ -110,8 +112,8 @@ void oneEqEddy::correct(const tmp<volTensorField>& gradU)
|
|||||||
- fvm::Sp(ce_*sqrt(k_)/delta(), k_)
|
- fvm::Sp(ce_*sqrt(k_)/delta(), k_)
|
||||||
);
|
);
|
||||||
|
|
||||||
kEqn.relax();
|
kEqn().relax();
|
||||||
kEqn.solve();
|
kEqn().solve();
|
||||||
|
|
||||||
bound(k_, kMin_);
|
bound(k_, kMin_);
|
||||||
|
|
||||||
|
|||||||
@ -72,7 +72,6 @@ spectEddyVisc::spectEddyVisc
|
|||||||
LESModel(typeName, U, phi, transport),
|
LESModel(typeName, U, phi, transport),
|
||||||
GenEddyVisc(U, phi, transport),
|
GenEddyVisc(U, phi, transport),
|
||||||
|
|
||||||
|
|
||||||
cB_
|
cB_
|
||||||
(
|
(
|
||||||
dimensioned<scalar>::lookupOrAddToDict
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
|||||||
@ -198,6 +198,7 @@ LRR::LRR
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*sqr(k_)/epsilon_;
|
nut_ = Cmu_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -140,6 +140,7 @@ LamBremhorstKE::LamBremhorstKE
|
|||||||
autoCreateLowReNut("nut", mesh_)
|
autoCreateLowReNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*fMu_*sqr(k_)/epsilon_;
|
nut_ = Cmu_*fMu_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -224,6 +224,7 @@ LaunderGibsonRSTM::LaunderGibsonRSTM
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*sqr(k_)/epsilon_;
|
nut_ = Cmu_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -146,6 +146,7 @@ LaunderSharmaKE::LaunderSharmaKE
|
|||||||
autoCreateLowReNut("nut", mesh_)
|
autoCreateLowReNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilonTilda_, epsilonMin_);
|
bound(epsilonTilda_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*fMu()*sqr(k_)/epsilonTilda_;
|
nut_ = Cmu_*fMu()*sqr(k_)/epsilonTilda_;
|
||||||
|
|||||||
@ -170,11 +170,17 @@ LienCubicKE::LienCubicKE
|
|||||||
autoCreateEpsilon("epsilon", mesh_)
|
autoCreateEpsilon("epsilon", mesh_)
|
||||||
),
|
),
|
||||||
|
|
||||||
//FIXME - epsilon is not bounded
|
|
||||||
|
|
||||||
gradU_(fvc::grad(U)),
|
gradU_(fvc::grad(U)),
|
||||||
eta_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))),
|
eta_
|
||||||
ksi_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))),
|
(
|
||||||
|
k_/(epsilon_ + epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))
|
||||||
|
),
|
||||||
|
ksi_
|
||||||
|
(
|
||||||
|
k_/(epsilon_ + epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))
|
||||||
|
),
|
||||||
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
||||||
fEta_(A2_ + pow(eta_, 3.0)),
|
fEta_(A2_ + pow(eta_, 3.0)),
|
||||||
|
|
||||||
@ -228,6 +234,7 @@ LienCubicKE::LienCubicKE
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*sqr(k_)/epsilon_ + C5viscosity_;
|
nut_ = Cmu_*sqr(k_)/epsilon_ + C5viscosity_;
|
||||||
|
|||||||
@ -220,14 +220,22 @@ LienCubicKELowRe::LienCubicKELowRe
|
|||||||
y_(mesh_),
|
y_(mesh_),
|
||||||
|
|
||||||
gradU_(fvc::grad(U)),
|
gradU_(fvc::grad(U)),
|
||||||
eta_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))),
|
eta_
|
||||||
ksi_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))),
|
(
|
||||||
|
k_/(epsilon_ + epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))
|
||||||
|
),
|
||||||
|
ksi_
|
||||||
|
(
|
||||||
|
k_/(epsilon_ + epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))
|
||||||
|
),
|
||||||
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
||||||
fEta_(A2_ + pow(eta_, 3.0)),
|
fEta_(A2_ + pow3(eta_)),
|
||||||
|
|
||||||
C5viscosity_
|
C5viscosity_
|
||||||
(
|
(
|
||||||
-2.0*pow(Cmu_, 3.0)*pow(k_, 4.0)/pow(epsilon_, 3.0)
|
-2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_ + epsilonMin_)
|
||||||
*(magSqr(gradU_ + gradU_.T()) - magSqr(gradU_ - gradU_.T()))
|
*(magSqr(gradU_ + gradU_.T()) - magSqr(gradU_ - gradU_.T()))
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -252,7 +260,7 @@ LienCubicKELowRe::LienCubicKELowRe
|
|||||||
symm
|
symm
|
||||||
(
|
(
|
||||||
// quadratic terms
|
// quadratic terms
|
||||||
pow(k_, 3.0)/sqr(epsilon_)
|
pow3(k_)/sqr(epsilon_ + epsilonMin_)
|
||||||
*(
|
*(
|
||||||
Ctau1_/fEta_
|
Ctau1_/fEta_
|
||||||
*(
|
*(
|
||||||
@ -263,8 +271,8 @@ LienCubicKELowRe::LienCubicKELowRe
|
|||||||
+ Ctau3_/fEta_*(gradU_.T() & gradU_)
|
+ Ctau3_/fEta_*(gradU_.T() & gradU_)
|
||||||
)
|
)
|
||||||
// cubic term C4
|
// cubic term C4
|
||||||
- 20.0*pow(k_, 4.0)/pow(epsilon_, 3.0)
|
- 20.0*pow4(k_)/pow3(epsilon_ + epsilonMin_)
|
||||||
*pow(Cmu_, 3.0)
|
*pow3(Cmu_)
|
||||||
*(
|
*(
|
||||||
((gradU_ & gradU_) & gradU_.T())
|
((gradU_ & gradU_) & gradU_.T())
|
||||||
+ ((gradU_ & gradU_.T()) & gradU_.T())
|
+ ((gradU_ & gradU_.T()) & gradU_.T())
|
||||||
@ -280,6 +288,7 @@ LienCubicKELowRe::LienCubicKELowRe
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_
|
nut_ = Cmu_
|
||||||
@ -430,8 +439,8 @@ void LienCubicKELowRe::correct()
|
|||||||
|
|
||||||
epsEqn().relax();
|
epsEqn().relax();
|
||||||
|
|
||||||
# include "LienCubicKELowReSetWallDissipation.H"
|
#include "LienCubicKELowReSetWallDissipation.H"
|
||||||
# include "wallDissipationI.H"
|
#include "wallDissipationI.H"
|
||||||
|
|
||||||
solve(epsEqn);
|
solve(epsEqn);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|||||||
@ -180,6 +180,7 @@ LienLeschzinerLowRe::LienLeschzinerLowRe
|
|||||||
autoCreateLowReNut("nut", mesh_)
|
autoCreateLowReNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*(scalar(1) - exp(-Am_*yStar_))
|
nut_ = Cmu_*(scalar(1) - exp(-Am_*yStar_))
|
||||||
|
|||||||
@ -144,7 +144,6 @@ NonlinearKEShih::NonlinearKEShih
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
//FIXME: should be named 'kappa_' or 'kappa'?
|
|
||||||
kappa_
|
kappa_
|
||||||
(
|
(
|
||||||
dimensioned<scalar>::lookupOrAddToDict
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
@ -175,7 +174,6 @@ NonlinearKEShih::NonlinearKEShih
|
|||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
mesh_
|
mesh_
|
||||||
//FIXME: what about autoCreateK("k", mesh_)
|
|
||||||
),
|
),
|
||||||
|
|
||||||
epsilon_
|
epsilon_
|
||||||
@ -189,39 +187,30 @@ NonlinearKEShih::NonlinearKEShih
|
|||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
mesh_
|
mesh_
|
||||||
//FIXME: what about autoCreateK("epsilon", mesh_)
|
|
||||||
),
|
),
|
||||||
|
|
||||||
//FIXME: epsilon is not bounded
|
|
||||||
|
|
||||||
gradU_(fvc::grad(U)),
|
gradU_(fvc::grad(U)),
|
||||||
eta_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))),
|
eta_
|
||||||
ksi_(k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))),
|
(
|
||||||
|
k_/(epsilon_ + epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ + gradU_.T())))
|
||||||
|
),
|
||||||
|
ksi_
|
||||||
|
(
|
||||||
|
k_/(epsilon_+ epsilonMin_)
|
||||||
|
*sqrt(2.0*magSqr(0.5*(gradU_ - gradU_.T())))
|
||||||
|
),
|
||||||
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))),
|
||||||
fEta_(A2_ + pow(eta_, 3.0)),
|
fEta_(A2_ + pow(eta_, 3.0)),
|
||||||
|
|
||||||
// FIXME: epsilon is not bounded
|
|
||||||
nut_("nut", Cmu_*sqr(k_)/(epsilon_ + epsilonMin_)),
|
nut_("nut", Cmu_*sqr(k_)/(epsilon_ + epsilonMin_)),
|
||||||
// FIXME: why not use the following?
|
|
||||||
// nut_
|
|
||||||
// (
|
|
||||||
// IOobject
|
|
||||||
// (
|
|
||||||
// "nut",
|
|
||||||
// runTime_.timeName(),
|
|
||||||
// mesh_,
|
|
||||||
// IOobject::NO_READ,
|
|
||||||
// IOobject::AUTO_WRITE
|
|
||||||
// ),
|
|
||||||
// autoCreateNut("nut", mesh_)
|
|
||||||
// ),
|
|
||||||
|
|
||||||
nonlinearStress_
|
nonlinearStress_
|
||||||
(
|
(
|
||||||
"nonlinearStress",
|
"nonlinearStress",
|
||||||
symm
|
symm
|
||||||
(
|
(
|
||||||
pow(k_, 3.0)/sqr(epsilon_)
|
pow3(k_)/sqr(epsilon_ + epsilonMin_)
|
||||||
*(
|
*(
|
||||||
Ctau1_/fEta_
|
Ctau1_/fEta_
|
||||||
*(
|
*(
|
||||||
@ -234,11 +223,9 @@ NonlinearKEShih::NonlinearKEShih
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
//FIXME: could use this
|
|
||||||
// nut_ = Cmu_*sqr(k_)/epsilon_;
|
|
||||||
|
|
||||||
#include "wallNonlinearViscosityI.H"
|
#include "wallNonlinearViscosityI.H"
|
||||||
|
|
||||||
printCoeffs();
|
printCoeffs();
|
||||||
|
|||||||
@ -80,7 +80,7 @@ RASModel::RASModel
|
|||||||
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
||||||
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
coeffDict_(subOrEmptyDict(type + "Coeffs")),
|
||||||
|
|
||||||
kMin_("kMin", dimVelocity*dimVelocity, SMALL),
|
kMin_("kMin", sqr(dimVelocity), SMALL),
|
||||||
epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL),
|
epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL),
|
||||||
omegaMin_("omegaMin", dimless/dimTime, SMALL),
|
omegaMin_("omegaMin", dimless/dimTime, SMALL),
|
||||||
|
|
||||||
@ -131,8 +131,12 @@ autoPtr<RASModel> RASModel::New
|
|||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"RASModel::New(const volVectorField&, "
|
"RASModel::New"
|
||||||
"const surfaceScalarField&, transportModel&)"
|
"("
|
||||||
|
"const volVectorField&, "
|
||||||
|
"const surfaceScalarField&, "
|
||||||
|
"transportModel&"
|
||||||
|
")"
|
||||||
) << "Unknown RASModel type " << modelName
|
) << "Unknown RASModel type " << modelName
|
||||||
<< endl << endl
|
<< endl << endl
|
||||||
<< "Valid RASModel types are :" << endl
|
<< "Valid RASModel types are :" << endl
|
||||||
|
|||||||
@ -155,6 +155,7 @@ RNGkEpsilon::RNGkEpsilon
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*sqr(k_)/epsilon_;
|
nut_ = Cmu_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -128,6 +128,7 @@ kEpsilon::kEpsilon
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
|
|
||||||
nut_ = Cmu_*sqr(k_)/epsilon_;
|
nut_ = Cmu_*sqr(k_)/epsilon_;
|
||||||
|
|||||||
@ -137,6 +137,7 @@ kOmega::kOmega
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(omega_, omegaMin_);
|
bound(omega_, omegaMin_);
|
||||||
|
|
||||||
nut_ = k_/omega_;
|
nut_ = k_/omega_;
|
||||||
|
|||||||
@ -236,6 +236,7 @@ kOmegaSST::kOmegaSST
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(omega_, omegaMin_);
|
bound(omega_, omegaMin_);
|
||||||
|
|
||||||
nut_ =
|
nut_ =
|
||||||
|
|||||||
@ -196,6 +196,7 @@ qZeta::qZeta
|
|||||||
autoCreateNut("nut", mesh_)
|
autoCreateNut("nut", mesh_)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
bound(k_, kMin_);
|
||||||
bound(epsilon_, epsilonMin_);
|
bound(epsilon_, epsilonMin_);
|
||||||
bound(q_, qMin_);
|
bound(q_, qMin_);
|
||||||
bound(zeta_, zetaMin_);
|
bound(zeta_, zetaMin_);
|
||||||
|
|||||||
Reference in New Issue
Block a user