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 "transport.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028
00029
00030
00031 namespace Foam
00032 {
00033 namespace XiModels
00034 {
00035 defineTypeNameAndDebug(transport, 0);
00036 addToRunTimeSelectionTable(XiModel, transport, dictionary);
00037 };
00038 };
00039
00040
00041
00042
00043 Foam::XiModels::transport::transport
00044 (
00045 const dictionary& XiProperties,
00046 const hhuCombustionThermo& thermo,
00047 const compressible::RASModel& turbulence,
00048 const volScalarField& Su,
00049 const volScalarField& rho,
00050 const volScalarField& b,
00051 const surfaceScalarField& phi
00052 )
00053 :
00054 XiModel(XiProperties, thermo, turbulence, Su, rho, b, phi),
00055 XiShapeCoef(readScalar(XiModelCoeffs_.lookup("XiShapeCoef"))),
00056 XiEqModel_(XiEqModel::New(XiProperties, thermo, turbulence, Su)),
00057 XiGModel_(XiGModel::New(XiProperties, thermo, turbulence, Su))
00058 {}
00059
00060
00061
00062
00063 Foam::XiModels::transport::~transport()
00064 {}
00065
00066
00067
00068
00069 Foam::tmp<Foam::volScalarField> Foam::XiModels::transport::Db() const
00070 {
00071 return XiGModel_->Db();
00072 }
00073
00074
00075 void Foam::XiModels::transport::correct
00076 (
00077 const fv::convectionScheme<scalar>& mvConvection
00078 )
00079 {
00080 volScalarField XiEqEta = XiEqModel_->XiEq();
00081 volScalarField GEta = XiGModel_->G();
00082
00083 volScalarField R = GEta*XiEqEta/(XiEqEta - 0.999);
00084
00085 volScalarField XiEqStar = R/(R - GEta);
00086
00087 volScalarField XiEq =
00088 1.0 + (1.0 + (2*XiShapeCoef)*(0.5 - b_))*(XiEqStar - 1.0);
00089
00090 volScalarField G = R*(XiEq - 1.0)/XiEq;
00091
00092 const objectRegistry& db = b_.db();
00093 const volScalarField& betav = db.lookupObject<volScalarField>("betav");
00094 const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
00095 const surfaceScalarField& phiSt =
00096 db.lookupObject<surfaceScalarField>("phiSt");
00097 const volScalarField& Db = db.lookupObject<volScalarField>("Db");
00098 const surfaceScalarField& nf = db.lookupObject<surfaceScalarField>("nf");
00099
00100 surfaceScalarField phiXi
00101 (
00102 "phiXi",
00103 phiSt
00104 + (
00105 - fvc::interpolate(fvc::laplacian(Db, b_)/mgb)*nf
00106 + fvc::interpolate(rho_)*fvc::interpolate(Su_*(1.0/Xi_ - Xi_))*nf
00107 )
00108 );
00109
00110 solve
00111 (
00112 betav*fvm::ddt(rho_, Xi_)
00113 + mvConvection.fvmDiv(phi_, Xi_)
00114 + fvm::div(phiXi, Xi_)
00115 - fvm::Sp(fvc::div(phiXi), Xi_)
00116 ==
00117 betav*rho_*R
00118 - fvm::Sp(betav*rho_*(R - G), Xi_)
00119 );
00120
00121
00122
00123 Xi_.max(1.0);
00124 Xi_ = min(Xi_, 2.0*XiEq);
00125 }
00126
00127
00128 bool Foam::XiModels::transport::read(const dictionary& XiProperties)
00129 {
00130 XiModel::read(XiProperties);
00131
00132 XiModelCoeffs_.lookup("XiShapeCoef") >> XiShapeCoef;
00133
00134 return true;
00135 }
00136
00137
00138