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 "DeardorffDiffStress.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028
00029
00030
00031 namespace Foam
00032 {
00033 namespace compressible
00034 {
00035 namespace LESModels
00036 {
00037
00038
00039
00040 defineTypeNameAndDebug(DeardorffDiffStress, 0);
00041 addToRunTimeSelectionTable(LESModel, DeardorffDiffStress, dictionary);
00042
00043
00044
00045
00046 void DeardorffDiffStress::updateSubGridScaleFields(const volScalarField& K)
00047 {
00048 muSgs_ = ck_*rho()*sqrt(K)*delta();
00049 muSgs_.correctBoundaryConditions();
00050
00051 alphaSgs_ = muSgs_/Prt_;
00052 alphaSgs_.correctBoundaryConditions();
00053 }
00054
00055
00056
00057
00058 DeardorffDiffStress::DeardorffDiffStress
00059 (
00060 const volScalarField& rho,
00061 const volVectorField& U,
00062 const surfaceScalarField& phi,
00063 const basicThermo& thermoPhysicalModel
00064 )
00065 :
00066 LESModel(typeName, rho, U, phi, thermoPhysicalModel),
00067 GenSGSStress(rho, U, phi, thermoPhysicalModel),
00068
00069 ck_
00070 (
00071 dimensioned<scalar>::lookupOrAddToDict
00072 (
00073 "ck",
00074 coeffDict_,
00075 0.094
00076 )
00077 ),
00078 cm_
00079 (
00080 dimensioned<scalar>::lookupOrAddToDict
00081 (
00082 "cm",
00083 coeffDict_,
00084 4.13
00085 )
00086 )
00087 {
00088 updateSubGridScaleFields(0.5*tr(B_));
00089
00090 printCoeffs();
00091 }
00092
00093
00094
00095
00096 void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
00097 {
00098 const volTensorField& gradU = tgradU();
00099
00100 GenSGSStress::correct(gradU);
00101
00102 volSymmTensorField D = symm(gradU);
00103
00104 volSymmTensorField P = -rho()*twoSymm(B_ & gradU);
00105
00106 volScalarField K = 0.5*tr(B_);
00107
00108 solve
00109 (
00110 fvm::ddt(rho(), B_)
00111 + fvm::div(phi(), B_)
00112 - fvm::laplacian(DBEff(), B_)
00113 + fvm::Sp(cm_*rho()*sqrt(K)/delta(), B_)
00114 ==
00115 P
00116 + 0.8*rho()*K*D
00117 - (2*ce_ - 0.667*cm_)*I*rho()*epsilon()
00118 );
00119
00120
00121
00122
00123 forAll(B_, celli)
00124 {
00125 B_[celli].component(symmTensor::XX) =
00126 max(B_[celli].component(symmTensor::XX), 1.0e-10);
00127 B_[celli].component(symmTensor::YY) =
00128 max(B_[celli].component(symmTensor::YY), 1.0e-10);
00129 B_[celli].component(symmTensor::ZZ) =
00130 max(B_[celli].component(symmTensor::ZZ), 1.0e-10);
00131 }
00132
00133 K = 0.5*tr(B_);
00134 bound(K, k0());
00135
00136 updateSubGridScaleFields(K);
00137 }
00138
00139
00140 bool DeardorffDiffStress::read()
00141 {
00142 if (GenSGSStress::read())
00143 {
00144 ck_.readIfPresent(coeffDict());
00145 cm_.readIfPresent(coeffDict());
00146
00147 return true;
00148 }
00149 else
00150 {
00151 return false;
00152 }
00153 }
00154
00155
00156
00157
00158 }
00159 }
00160 }
00161
00162