Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / reactionThermo / mixtures / homogeneousMixture / homogeneousMixture.C
blob8b7fff26e5e6f8613964830bd4dfcd598f4f524f
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 "homogeneousMixture.H"
27 #include "fvMesh.H"
29 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
31 template<class ThermoType>
32 const char* Foam::homogeneousMixture<ThermoType>::specieNames_[1] = {"b"};
35 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
37 template<class ThermoType>
38 Foam::homogeneousMixture<ThermoType>::homogeneousMixture
40     const dictionary& thermoDict,
41     const fvMesh& mesh
44     basicMultiComponentMixture
45     (
46         thermoDict,
47         speciesTable(nSpecies_, specieNames_),
48         mesh
49     ),
51     reactants_(thermoDict.subDict("reactants")),
52     products_(thermoDict.subDict("products")),
53     mixture_("mixture", reactants_),
54     b_(Y("b"))
58 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
60 template<class ThermoType>
61 const ThermoType& Foam::homogeneousMixture<ThermoType>::mixture
63     const scalar b
64 ) const
66     if (b > 0.999)
67     {
68         return reactants_;
69     }
70     else if (b < 0.001)
71     {
72         return products_;
73     }
74     else
75     {
76         mixture_ = b/reactants_.W()*reactants_;
77         mixture_ += (1 - b)/products_.W()*products_;
79         return mixture_;
80     }
84 template<class ThermoType>
85 void Foam::homogeneousMixture<ThermoType>::read(const dictionary& thermoDict)
87     reactants_ = ThermoType(thermoDict.subDict("reactants"));
88     products_ = ThermoType(thermoDict.subDict("products"));
92 template<class ThermoType>
93 const ThermoType& Foam::homogeneousMixture<ThermoType>::getLocalThermo
95     const label specieI
96 ) const
98     if (specieI == 0)
99     {
100         return reactants_;
101     }
102     else if (specieI == 1)
103     {
104         return products_;
105     }
106     else
107     {
108         FatalErrorIn
109         (
110             "const ThermoType& Foam::homogeneousMixture<ThermoType>::"
111             "getLocalThermo"
112             "("
113                 "const label "
114             ") const"
115         )   << "Unknown specie index " << specieI << ". Valid indices are 0..1"
116             << abort(FatalError);
118         return reactants_;
119     }
123 template<class ThermoType>
124 Foam::scalar Foam::homogeneousMixture<ThermoType>::nMoles
126     const label specieI
127 ) const
129     return getLocalThermo(specieI).nMoles();
133 template<class ThermoType>
134 Foam::scalar Foam::homogeneousMixture<ThermoType>::W
136     const label specieI
137 ) const
139     return getLocalThermo(specieI).W();
143 template<class ThermoType>
144 Foam::scalar Foam::homogeneousMixture<ThermoType>::Cp
146     const label specieI,
147     const scalar T
148 ) const
150     return getLocalThermo(specieI).Cp(T);
154 template<class ThermoType>
155 Foam::scalar Foam::homogeneousMixture<ThermoType>::Cv
157     const label specieI,
158     const scalar T
159 ) const
161     return getLocalThermo(specieI).Cv(T);
165 template<class ThermoType>
166 Foam::scalar Foam::homogeneousMixture<ThermoType>::H
168     const label specieI,
169     const scalar T
170 ) const
172     return getLocalThermo(specieI).H(T);
176 template<class ThermoType>
177 Foam::scalar Foam::homogeneousMixture<ThermoType>::Hs
179     const label specieI,
180     const scalar T
181 ) const
183     return getLocalThermo(specieI).Hs(T);
187 template<class ThermoType>
188 Foam::scalar Foam::homogeneousMixture<ThermoType>::Hc
190     const label specieI
191 ) const
193     return getLocalThermo(specieI).Hc();
197 template<class ThermoType>
198 Foam::scalar Foam::homogeneousMixture<ThermoType>::S
200     const label specieI,
201     const scalar T
202 ) const
204     return getLocalThermo(specieI).S(T);
208 template<class ThermoType>
209 Foam::scalar Foam::homogeneousMixture<ThermoType>::E
211     const label specieI,
212     const scalar T
213 ) const
215     return getLocalThermo(specieI).E(T);
219 template<class ThermoType>
220 Foam::scalar Foam::homogeneousMixture<ThermoType>::G
222     const label specieI,
223     const scalar T
224 ) const
226     return getLocalThermo(specieI).G(T);
230 template<class ThermoType>
231 Foam::scalar Foam::homogeneousMixture<ThermoType>::A
233     const label specieI,
234     const scalar T
235 ) const
237     return getLocalThermo(specieI).A(T);
241 template<class ThermoType>
242 Foam::scalar Foam::homogeneousMixture<ThermoType>::mu
244     const label specieI,
245     const scalar T
246 ) const
248     return getLocalThermo(specieI).mu(T);
252 template<class ThermoType>
253 Foam::scalar Foam::homogeneousMixture<ThermoType>::kappa
255     const label specieI,
256     const scalar T
257 ) const
259     return getLocalThermo(specieI).kappa(T);
263 template<class ThermoType>
264 Foam::scalar Foam::homogeneousMixture<ThermoType>::alpha
266     const label specieI,
267     const scalar T
268 ) const
270     return getLocalThermo(specieI).alpha(T);
274 // ************************************************************************* //