Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / reactionThermo / mixtures / inhomogeneousMixture / inhomogeneousMixture.C
blobbd0698c6824e6fe8f36845fd40f61dae9a7f9e4f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
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 "inhomogeneousMixture.H"
27 #include "fvMesh.H"
29 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
31 template<class ThermoType>
32 const char* Foam::inhomogeneousMixture<ThermoType>::specieNames_[2] =
33     {"ft", "b"};
36 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
38 template<class ThermoType>
39 Foam::inhomogeneousMixture<ThermoType>::inhomogeneousMixture
41     const dictionary& thermoDict,
42     const fvMesh& mesh
45     basicMultiComponentMixture
46     (
47         thermoDict,
48         speciesTable(nSpecies_, specieNames_),
49         mesh
50     ),
52     stoicRatio_(thermoDict.lookup("stoichiometricAirFuelMassRatio")),
54     fuel_(thermoDict.subDict("fuel")),
55     oxidant_(thermoDict.subDict("oxidant")),
56     products_(thermoDict.subDict("burntProducts")),
58     mixture_("mixture", fuel_),
60     ft_(Y("ft")),
61     b_(Y("b"))
65 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
67 template<class ThermoType>
68 const ThermoType& Foam::inhomogeneousMixture<ThermoType>::mixture
70     const scalar ft,
71     const scalar b
72 ) const
74     if (ft < 0.0001)
75     {
76         return oxidant_;
77     }
78     else
79     {
80         scalar fu = b*ft + (1.0 - b)*fres(ft, stoicRatio().value());
81         scalar ox = 1 - ft - (ft - fu)*stoicRatio().value();
82         scalar pr = 1 - fu - ox;
84         mixture_ = fu/fuel_.W()*fuel_;
85         mixture_ += ox/oxidant_.W()*oxidant_;
86         mixture_ += pr/products_.W()*products_;
88         return mixture_;
89     }
93 template<class ThermoType>
94 void Foam::inhomogeneousMixture<ThermoType>::read(const dictionary& thermoDict)
96     stoicRatio_ = thermoDict.lookup("stoichiometricAirFuelMassRatio");
98     fuel_ = ThermoType(thermoDict.subDict("fuel"));
99     oxidant_ = ThermoType(thermoDict.subDict("oxidant"));
100     products_ = ThermoType(thermoDict.subDict("burntProducts"));
104 template<class ThermoType>
105 const ThermoType& Foam::inhomogeneousMixture<ThermoType>::getLocalThermo
107     const label specieI
108 ) const
110     if (specieI == 0)
111     {
112         return fuel_;
113     }
114     else if (specieI == 1)
115     {
116         return oxidant_;
117     }
118     else if (specieI == 2)
119     {
120         return products_;
121     }
122     else
123     {
124         FatalErrorIn
125         (
126             "const ThermoType& Foam::inhomogeneousMixture<ThermoType>::"
127             "getLocalThermo"
128             "("
129                 "const label "
130             ") const"
131         )   << "Unknown specie index " << specieI << ". Valid indices are 0..2"
132             << abort(FatalError);
134         return fuel_;
135     }
139 template<class ThermoType>
140 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::nMoles
142     const label specieI
143 ) const
145     return getLocalThermo(specieI).nMoles();
149 template<class ThermoType>
150 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::W
152     const label specieI
153 ) const
155     return getLocalThermo(specieI).W();
159 template<class ThermoType>
160 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::Cp
162     const label specieI,
163     const scalar T
164 ) const
166     return getLocalThermo(specieI).Cp(T);
170 template<class ThermoType>
171 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::Cv
173     const label specieI,
174     const scalar T
175 ) const
177     return getLocalThermo(specieI).Cv(T);
181 template<class ThermoType>
182 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::H
184     const label specieI,
185     const scalar T
186 ) const
188     return getLocalThermo(specieI).H(T);
192 template<class ThermoType>
193 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::Hs
195     const label specieI,
196     const scalar T
197 ) const
199     return getLocalThermo(specieI).Hs(T);
203 template<class ThermoType>
204 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::Hc
206     const label specieI
207 ) const
209     return getLocalThermo(specieI).Hc();
213 template<class ThermoType>
214 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::S
216     const label specieI,
217     const scalar T
218 ) const
220     return getLocalThermo(specieI).S(T);
224 template<class ThermoType>
225 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::E
227     const label specieI,
228     const scalar T
229 ) const
231     return getLocalThermo(specieI).E(T);
235 template<class ThermoType>
236 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::G
238     const label specieI,
239     const scalar T
240 ) const
242     return getLocalThermo(specieI).G(T);
246 template<class ThermoType>
247 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::A
249     const label specieI,
250     const scalar T
251 ) const
253     return getLocalThermo(specieI).A(T);
257 template<class ThermoType>
258 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::mu
260     const label specieI,
261     const scalar T
262 ) const
264     return getLocalThermo(specieI).mu(T);
268 template<class ThermoType>
269 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::kappa
271     const label specieI,
272     const scalar T
273 ) const
275     return getLocalThermo(specieI).kappa(T);
279 template<class ThermoType>
280 Foam::scalar Foam::inhomogeneousMixture<ThermoType>::alpha
282     const label specieI,
283     const scalar T
284 ) const
286     return getLocalThermo(specieI).alpha(T);
290 // ************************************************************************* //