BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / lagrangian / dieselSpray / spraySubModels / evaporationModel / standardEvaporationModel / standardEvaporationModel.C
blobae0052bb779b55b99ba4f06a786866fcaa37b973
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
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
19     for more details.
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 \*---------------------------------------------------------------------------*/
26 #include "error.H"
28 #include "standardEvaporationModel.H"
29 #include "addToRunTimeSelectionTable.H"
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33 namespace Foam
35     defineTypeNameAndDebug(standardEvaporationModel, 0);
37     addToRunTimeSelectionTable
38     (
39         evaporationModel,
40         standardEvaporationModel,
41         dictionary
42     );
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")),
59     nEvapIter_(0)
61     if (evaporationScheme_ == "implicit")
62     {
63         nEvapIter_ = 2;
64     }
65     else if (evaporationScheme_ == "explicit")
66     {
67         nEvapIter_ = 1;
68     }
69     else
70     {
71         FatalError
72             << "evaporationScheme type " << evaporationScheme_
73             << " unknown. Use implicit or explicit." << nl
74             << abort(FatalError);
75     }
79 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
81 Foam::standardEvaporationModel::~standardEvaporationModel()
85 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
87 bool Foam::standardEvaporationModel::evaporation() const
89     return true;
93 // Correlation for the Sherwood Number
94 Foam::scalar Foam::standardEvaporationModel::Sh
96     const scalar ReynoldsNumber,
97     const scalar SchmidtNumber
98 ) const
100     return
101         2.0
102       + preReScFactor_
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,
116     const scalar Xs,
117     const scalar Xf,
118     const scalar m0,
119     const scalar dm,
120     const scalar dt
121 ) const
123     scalar time = GREAT;
124     scalar lgExpr = 0.0;
126     /*
127         (pressure - partialFuelVaporPressure)/
128         (pressure - pressureAtSurface)
129       = 1 + Xratio
131         if the pressure @ Surface > pressure
132         this lead to boiling
133         and Xratio -> infinity (as it should)
134         ... this is numerically nasty
136     NB!
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
141     */
143     scalar Xratio = (Xs - Xf)/max(SMALL, 1.0 - Xs);
145     if (Xratio > 0.0)
146     {
147         lgExpr = log(1.0 + Xratio);
148     }
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
154     scalar denominator =
155         6.0*massDiffusionCoefficient
156        *Sh(ReynoldsNumber, SchmidtNumber)
157        *rhoFuelVapor*lgExpr;
159     if (denominator > SMALL)
160     {
161         time = max(VSMALL, liquidDensity*sqr(diameter)/denominator);
162     }
164     return time;
168 Foam::scalar Foam::standardEvaporationModel::boilingTime
170     const scalar liquidDensity,
171     const scalar cpFuel,
172     const scalar heatOfVapour,
173     const scalar kappa,
174     const scalar Nusselt,
175     const scalar deltaTemp,
176     const scalar diameter,
177     const scalar,
178     const scalar,
179     const scalar,
180     const scalar,
181     const scalar,
182     const scalar,
183     const scalar,
184     const scalar,
185     const scalar
186 ) const
188     scalar time = GREAT;
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);
196     time =
197         liquidDensity*cpFuel*sqr(diameter)
198        /(6.0*kappa*Nusselt*log(1.0 + cpFuel*deltaT/max(SMALL, heatOfVapour)));
200     time = max(VSMALL, time);
202     return time;
206 // ************************************************************************* //