ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / reactionThermo / mixtures / multiComponentMixture / multiComponentMixture.C
blob3d78443860ff996c24d313f7da22119ce14b7064
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 "multiComponentMixture.H"
28 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
30 template<class ThermoType>
31 const ThermoType& Foam::multiComponentMixture<ThermoType>::constructSpeciesData
33     const dictionary& thermoDict
36     forAll(species_, i)
37     {
38         speciesData_.set
39         (
40             i,
41             new ThermoType(thermoDict.subDict(species_[i]))
42         );
43     }
45     return speciesData_[0];
49 template<class ThermoType>
50 void Foam::multiComponentMixture<ThermoType>::correctMassFractions()
52     // It changes Yt patches to "calculated"
53     volScalarField Yt("Yt", 1.0*Y_[0]);
55     for (label n=1; n<Y_.size(); n++)
56     {
57         Yt += Y_[n];
58     }
60     forAll(Y_, n)
61     {
62         Y_[n] /= Yt;
63     }
67 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
69 template<class ThermoType>
70 Foam::multiComponentMixture<ThermoType>::multiComponentMixture
72     const dictionary& thermoDict,
73     const wordList& specieNames,
74     const HashPtrTable<ThermoType>& specieThermoData,
75     const fvMesh& mesh
78     basicMultiComponentMixture(thermoDict, specieNames, mesh),
79     speciesData_(species_.size()),
80     mixture_("mixture", *specieThermoData[specieNames[0]])
82     forAll(species_, i)
83     {
84         speciesData_.set
85         (
86             i,
87             new ThermoType(*specieThermoData[species_[i]])
88         );
89     }
91     correctMassFractions();
95 template<class ThermoType>
96 Foam::multiComponentMixture<ThermoType>::multiComponentMixture
98     const dictionary& thermoDict,
99     const fvMesh& mesh
102     basicMultiComponentMixture(thermoDict, thermoDict.lookup("species"), mesh),
103     speciesData_(species_.size()),
104     mixture_("mixture", constructSpeciesData(thermoDict))
106     correctMassFractions();
110 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
112 template<class ThermoType>
113 const ThermoType& Foam::multiComponentMixture<ThermoType>::cellMixture
115     const label celli
116 ) const
118     mixture_ = Y_[0][celli]/speciesData_[0].W()*speciesData_[0];
120     for (label n=1; n<Y_.size(); n++)
121     {
122         mixture_ += Y_[n][celli]/speciesData_[n].W()*speciesData_[n];
123     }
125     return mixture_;
129 template<class ThermoType>
130 const ThermoType& Foam::multiComponentMixture<ThermoType>::patchFaceMixture
132     const label patchi,
133     const label facei
134 ) const
136     mixture_ =
137         Y_[0].boundaryField()[patchi][facei]
138        /speciesData_[0].W()*speciesData_[0];
140     for (label n=1; n<Y_.size(); n++)
141     {
142         mixture_ +=
143             Y_[n].boundaryField()[patchi][facei]
144            /speciesData_[n].W()*speciesData_[n];
145     }
147     return mixture_;
151 template<class ThermoType>
152 void Foam::multiComponentMixture<ThermoType>::read
154     const dictionary& thermoDict
157     forAll(species_, i)
158     {
159         speciesData_[i] = ThermoType(thermoDict.subDict(species_[i]));
160     }
164 template<class ThermoType>
165 Foam::scalar Foam::multiComponentMixture<ThermoType>::nMoles
167     const label specieI
168 ) const
170     return speciesData_[specieI].nMoles();
174 template<class ThermoType>
175 Foam::scalar Foam::multiComponentMixture<ThermoType>::W
177     const label specieI
178 ) const
180     return speciesData_[specieI].W();
184 template<class ThermoType>
185 Foam::scalar Foam::multiComponentMixture<ThermoType>::Cp
187     const label specieI,
188     const scalar T
189 ) const
191     return speciesData_[specieI].Cp(T);
195 template<class ThermoType>
196 Foam::scalar Foam::multiComponentMixture<ThermoType>::Cv
198     const label specieI,
199     const scalar T
200 ) const
202     return speciesData_[specieI].Cv(T);
206 template<class ThermoType>
207 Foam::scalar Foam::multiComponentMixture<ThermoType>::H
209     const label specieI,
210     const scalar T
211 ) const
213     return speciesData_[specieI].H(T);
217 template<class ThermoType>
218 Foam::scalar Foam::multiComponentMixture<ThermoType>::Hs
220     const label specieI,
221     const scalar T
222 ) const
224     return speciesData_[specieI].Hs(T);
228 template<class ThermoType>
229 Foam::scalar Foam::multiComponentMixture<ThermoType>::Hc
231     const label specieI
232 ) const
234     return speciesData_[specieI].Hc();
238 template<class ThermoType>
239 Foam::scalar Foam::multiComponentMixture<ThermoType>::S
241     const label specieI,
242     const scalar T
243 ) const
245     return speciesData_[specieI].S(T);
249 template<class ThermoType>
250 Foam::scalar Foam::multiComponentMixture<ThermoType>::E
252     const label specieI,
253     const scalar T
254 ) const
256     return speciesData_[specieI].E(T);
260 template<class ThermoType>
261 Foam::scalar Foam::multiComponentMixture<ThermoType>::G
263     const label specieI,
264     const scalar T
265 ) const
267     return speciesData_[specieI].G(T);
271 template<class ThermoType>
272 Foam::scalar Foam::multiComponentMixture<ThermoType>::A
274     const label specieI,
275     const scalar T
276 ) const
278     return speciesData_[specieI].A(T);
282 template<class ThermoType>
283 Foam::scalar Foam::multiComponentMixture<ThermoType>::mu
285     const label specieI,
286     const scalar T
287 ) const
289     return speciesData_[specieI].mu(T);
293 template<class ThermoType>
294 Foam::scalar Foam::multiComponentMixture<ThermoType>::kappa
296     const label specieI,
297     const scalar T
298 ) const
300     return speciesData_[specieI].kappa(T);
304 template<class ThermoType>
305 Foam::scalar Foam::multiComponentMixture<ThermoType>::alpha
307     const label specieI,
308     const scalar T
309 ) const
311     return speciesData_[specieI].alpha(T);
315 // ************************************************************************* //