Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "LRRDiffStress.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028
00029
00030
00031 namespace Foam
00032 {
00033 namespace incompressible
00034 {
00035 namespace LESModels
00036 {
00037
00038
00039
00040 defineTypeNameAndDebug(LRRDiffStress, 0);
00041 addToRunTimeSelectionTable(LESModel, LRRDiffStress, dictionary);
00042
00043
00044
00045 void LRRDiffStress::updateSubGridScaleFields(const volScalarField& K)
00046 {
00047 nuSgs_ = ck_*sqrt(K)*delta();
00048 nuSgs_.correctBoundaryConditions();
00049 }
00050
00051
00052
00053
00054 LRRDiffStress::LRRDiffStress
00055 (
00056 const volVectorField& U,
00057 const surfaceScalarField& phi,
00058 transportModel& transport
00059 )
00060 :
00061 LESModel(typeName, U, phi, transport),
00062 GenSGSStress(U, phi, transport),
00063
00064 ck_
00065 (
00066 dimensioned<scalar>::lookupOrAddToDict
00067 (
00068 "ck",
00069 coeffDict_,
00070 0.09
00071 )
00072 ),
00073 c1_
00074 (
00075 dimensioned<scalar>::lookupOrAddToDict
00076 (
00077 "c1",
00078 coeffDict_,
00079 1.8
00080 )
00081 ),
00082 c2_
00083 (
00084 dimensioned<scalar>::lookupOrAddToDict
00085 (
00086 "c2",
00087 coeffDict_,
00088 0.6
00089 )
00090 )
00091 {
00092 updateSubGridScaleFields(0.5*tr(B_));
00093
00094 printCoeffs();
00095 }
00096
00097
00098
00099
00100 void LRRDiffStress::correct(const tmp<volTensorField>& tgradU)
00101 {
00102 const volTensorField& gradU = tgradU();
00103
00104 GenSGSStress::correct(gradU);
00105
00106 volSymmTensorField D = symm(gradU);
00107
00108 volSymmTensorField P = -twoSymm(B_ & gradU);
00109
00110 volScalarField K = 0.5*tr(B_);
00111 volScalarField Epsilon = 2*nuEff()*magSqr(D);
00112
00113 fvSymmTensorMatrix BEqn
00114 (
00115 fvm::ddt(B_)
00116 + fvm::div(phi(), B_)
00117 - fvm::laplacian(DBEff(), B_)
00118 + fvm::Sp(c1_*Epsilon/K, B_)
00119 ==
00120 P
00121 - (0.667*(1.0 - c1_)*I)*Epsilon
00122 - c2_*(P - 0.333*I*tr(P))
00123 - (0.667 - 2*c1_)*I*pow(K, 1.5)/delta()
00124 );
00125
00126 BEqn.relax();
00127 BEqn.solve();
00128
00129
00130
00131 forAll(B_, celli)
00132 {
00133 B_[celli].component(symmTensor::XX) =
00134 max(B_[celli].component(symmTensor::XX), k0().value());
00135 B_[celli].component(symmTensor::YY) =
00136 max(B_[celli].component(symmTensor::YY), k0().value());
00137 B_[celli].component(symmTensor::ZZ) =
00138 max(B_[celli].component(symmTensor::ZZ), k0().value());
00139 }
00140
00141 K = 0.5*tr(B_);
00142 bound(K, k0());
00143
00144 updateSubGridScaleFields(K);
00145 }
00146
00147
00148 bool LRRDiffStress::read()
00149 {
00150 if (GenSGSStress::read())
00151 {
00152 ck_.readIfPresent(coeffDict());
00153 c1_.readIfPresent(coeffDict());
00154 c2_.readIfPresent(coeffDict());
00155
00156 return true;
00157 }
00158 else
00159 {
00160 return false;
00161 }
00162 }
00163
00164
00165
00166
00167 }
00168 }
00169 }
00170
00171