1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
9 This file is part of OpenFOAM.
11 OpenFOAM is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
16 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 You should have received a copy of the GNU General Public License
22 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
28 #include "standardEvaporationModel.H"
29 #include "addToRunTimeSelectionTable.H"
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35 defineTypeNameAndDebug(standardEvaporationModel, 0);
37 addToRunTimeSelectionTable
40 standardEvaporationModel,
46 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
48 Foam::standardEvaporationModel::standardEvaporationModel
50 const dictionary& dict
53 evaporationModel(dict),
54 evapDict_(dict.subDict(typeName + "Coeffs")),
55 preReScFactor_(readScalar(evapDict_.lookup("preReScFactor"))),
56 ReExponent_(readScalar(evapDict_.lookup("ReExponent"))),
57 ScExponent_(readScalar(evapDict_.lookup("ScExponent"))),
58 evaporationScheme_(evapDict_.lookup("evaporationScheme")),
61 if (evaporationScheme_ == "implicit")
65 else if (evaporationScheme_ == "explicit")
72 << "evaporationScheme type " << evaporationScheme_
73 << " unknown. Use implicit or explicit." << nl
79 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
81 Foam::standardEvaporationModel::~standardEvaporationModel()
85 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
87 bool Foam::standardEvaporationModel::evaporation() const
93 // Correlation for the Sherwood Number
94 Foam::scalar Foam::standardEvaporationModel::Sh
96 const scalar ReynoldsNumber,
97 const scalar SchmidtNumber
103 *pow(ReynoldsNumber, ReExponent_)
104 *pow(SchmidtNumber, ScExponent_);
108 Foam::scalar Foam::standardEvaporationModel::relaxationTime
110 const scalar diameter,
111 const scalar liquidDensity,
112 const scalar rhoFuelVapor,
113 const scalar massDiffusionCoefficient,
114 const scalar ReynoldsNumber,
115 const scalar SchmidtNumber,
127 (pressure - partialFuelVaporPressure)/
128 (pressure - pressureAtSurface)
131 if the pressure @ Surface > pressure
133 and Xratio -> infinity (as it should)
134 ... this is numerically nasty
137 X_v,s = (p_v,s/p) X_v,d
138 where X_v,d = 1 for single component fuel
139 according to eq (3.136)
140 in D. Clerides Thesis
143 scalar Xratio = (Xs - Xf)/max(SMALL, 1.0 - Xs);
147 lgExpr = log(1.0 + Xratio);
150 // From Equation (3.79) in C. Kralj's Thesis:
151 // Note that the 2.0 (instead of 6.0) below is correct, since evaporation
152 // is d(diameter)/dt and not d(mass)/dt
155 6.0*massDiffusionCoefficient
156 *Sh(ReynoldsNumber, SchmidtNumber)
157 *rhoFuelVapor*lgExpr;
159 if (denominator > SMALL)
161 time = max(VSMALL, liquidDensity*sqr(diameter)/denominator);
168 Foam::scalar Foam::standardEvaporationModel::boilingTime
170 const scalar liquidDensity,
172 const scalar heatOfVapour,
174 const scalar Nusselt,
175 const scalar deltaTemp,
176 const scalar diameter,
190 // the deltaTemperature is limited to not go below .5 deg K
191 // for numerical reasons.
192 // This is probably not important, since it results in an upper
193 // limit for the boiling time... which we have anyway.
194 scalar deltaT = max(0.5, deltaTemp);
197 liquidDensity*cpFuel*sqr(diameter)
198 /(6.0*kappa*Nusselt*log(1.0 + cpFuel*deltaT/max(SMALL, heatOfVapour)));
200 time = max(VSMALL, time);
206 // ************************************************************************* //