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 <OpenFOAM/error.H>
00027
00028 #include "standardEvaporationModel.H"
00029 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00030
00031
00032
00033 namespace Foam
00034 {
00035
00036
00037
00038 defineTypeNameAndDebug(standardEvaporationModel, 0);
00039
00040 addToRunTimeSelectionTable
00041 (
00042 evaporationModel,
00043 standardEvaporationModel,
00044 dictionary
00045 );
00046
00047
00048
00049
00050
00051 standardEvaporationModel::standardEvaporationModel
00052 (
00053 const dictionary& dict
00054 )
00055 :
00056 evaporationModel(dict),
00057 evapDict_(dict.subDict(typeName + "Coeffs")),
00058 preReScFactor_(readScalar(evapDict_.lookup("preReScFactor"))),
00059 ReExponent_(readScalar(evapDict_.lookup("ReExponent"))),
00060 ScExponent_(readScalar(evapDict_.lookup("ScExponent"))),
00061 evaporationScheme_(evapDict_.lookup("evaporationScheme")),
00062 nEvapIter_(0)
00063 {
00064 if (evaporationScheme_ == "implicit")
00065 {
00066 nEvapIter_ = 2;
00067 }
00068 else if (evaporationScheme_ == "explicit")
00069 {
00070 nEvapIter_ = 1;
00071 }
00072 else
00073 {
00074 FatalError
00075 << "evaporationScheme type " << evaporationScheme_
00076 << " unknown.\n"
00077 << "Use implicit or explicit."
00078 << abort(FatalError);
00079 }
00080 }
00081
00082
00083
00084
00085 standardEvaporationModel::~standardEvaporationModel()
00086 {}
00087
00088
00089
00090
00091 bool standardEvaporationModel::evaporation() const
00092 {
00093 return true;
00094 }
00095
00096
00097 scalar standardEvaporationModel::Sh
00098 (
00099 const scalar ReynoldsNumber,
00100 const scalar SchmidtNumber
00101 ) const
00102 {
00103 return 2.0 + preReScFactor_*pow(ReynoldsNumber,ReExponent_)*pow(SchmidtNumber,ScExponent_);
00104 }
00105
00106 scalar standardEvaporationModel::relaxationTime
00107 (
00108 const scalar diameter,
00109 const scalar liquidDensity,
00110 const scalar rhoFuelVapor,
00111 const scalar massDiffusionCoefficient,
00112 const scalar ReynoldsNumber,
00113 const scalar SchmidtNumber,
00114 const scalar Xs,
00115 const scalar Xf,
00116 const scalar m0,
00117 const scalar dm,
00118 const scalar dt
00119 ) const
00120 {
00121 scalar time = GREAT;
00122 scalar lgExpr = 0.0;
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 scalar Xratio = (Xs - Xf)/max(SMALL, 1.0 - Xs);
00142
00143 if (Xratio > 0.0)
00144 {
00145 lgExpr = log(1.0 + Xratio);
00146 }
00147
00148
00149
00150
00151
00152 scalar denominator =
00153 6.0 * massDiffusionCoefficient
00154 * Sh(ReynoldsNumber, SchmidtNumber)
00155 * rhoFuelVapor * lgExpr;
00156
00157 if (denominator > SMALL)
00158 {
00159 time = max(VSMALL, liquidDensity * pow(diameter, 2.0)/denominator);
00160 }
00161
00162 return time;
00163 }
00164
00165
00166 scalar standardEvaporationModel::boilingTime
00167 (
00168 const scalar liquidDensity,
00169 const scalar cpFuel,
00170 const scalar heatOfVapour,
00171 const scalar kappa,
00172 const scalar Nusselt,
00173 const scalar deltaTemp,
00174 const scalar diameter,
00175 const scalar,
00176 const scalar,
00177 const scalar,
00178 const scalar,
00179 const scalar,
00180 const scalar,
00181 const scalar,
00182 const scalar,
00183 const scalar
00184 ) const
00185 {
00186 scalar time = GREAT;
00187
00188
00189
00190
00191
00192 scalar deltaT = max(0.5, deltaTemp);
00193
00194 time = liquidDensity*cpFuel*sqr(diameter)/
00195 (
00196 6.0 * kappa * Nusselt * log(1.0 + cpFuel * deltaT/max(SMALL, heatOfVapour))
00197 );
00198
00199 time = max(VSMALL, time);
00200
00201 return time;
00202 }
00203
00204 inline label standardEvaporationModel::nEvapIter() const
00205 {
00206 return nEvapIter_;
00207 }
00208
00209
00210 }
00211
00212