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 incompressible
00034 {
00035 namespace LESModels
00036 {
00037
00038
00039
00040 defineTypeNameAndDebug(DeardorffDiffStress, 0);
00041 addToRunTimeSelectionTable(LESModel, DeardorffDiffStress, dictionary);
00042
00043
00044
00045 void DeardorffDiffStress::updateSubGridScaleFields(const volScalarField& K)
00046 {
00047 nuSgs_ = ck_*sqrt(K)*delta();
00048 nuSgs_.correctBoundaryConditions();
00049 }
00050
00051
00052
00053
00054 DeardorffDiffStress::DeardorffDiffStress
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.094
00071 )
00072 ),
00073 cm_
00074 (
00075 dimensioned<scalar>::lookupOrAddToDict
00076 (
00077 "cm",
00078 coeffDict_,
00079 4.13
00080 )
00081 )
00082 {
00083 updateSubGridScaleFields(0.5*tr(B_));
00084
00085 printCoeffs();
00086 }
00087
00088
00089
00090
00091 void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU)
00092 {
00093 const volTensorField& gradU = tgradU();
00094
00095 GenSGSStress::correct(gradU);
00096
00097 volSymmTensorField D = symm(gradU);
00098
00099 volSymmTensorField P = -twoSymm(B_ & gradU);
00100
00101 volScalarField K = 0.5*tr(B_);
00102 volScalarField Epsilon = 2*nuEff()*magSqr(D);
00103
00104 fvSymmTensorMatrix BEqn
00105 (
00106 fvm::ddt(B_)
00107 + fvm::div(phi(), B_)
00108 - fvm::laplacian(DBEff(), B_)
00109 + fvm::Sp(cm_*sqrt(K)/delta(), B_)
00110 ==
00111 P
00112 + 0.8*K*D
00113 - (2*ce_ - 0.667*cm_)*I*Epsilon
00114 );
00115
00116 BEqn.relax();
00117 BEqn.solve();
00118
00119
00120
00121 forAll(B_, celli)
00122 {
00123 B_[celli].component(symmTensor::XX) =
00124 max(B_[celli].component(symmTensor::XX), k0().value());
00125 B_[celli].component(symmTensor::YY) =
00126 max(B_[celli].component(symmTensor::YY), k0().value());
00127 B_[celli].component(symmTensor::ZZ) =
00128 max(B_[celli].component(symmTensor::ZZ), k0().value());
00129 }
00130
00131 K = 0.5*tr(B_);
00132 bound(K, k0());
00133
00134 updateSubGridScaleFields(K);
00135 }
00136
00137
00138 bool DeardorffDiffStress::read()
00139 {
00140 if (GenSGSStress::read())
00141 {
00142 ck_.readIfPresent(coeffDict());
00143 cm_.readIfPresent(coeffDict());
00144
00145 return true;
00146 }
00147 else
00148 {
00149 return false;
00150 }
00151 }
00152
00153
00154
00155
00156 }
00157 }
00158 }
00159
00160