BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / specie / thermo / specieThermo / specieThermoI.H
blobb2d2edd5c146b89a345a83754cb55e468b8f9c86
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 "specieThermo.H"
28 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
30 template<class Thermo>
31 inline Foam::specieThermo<Thermo>::specieThermo
33     const Thermo& sp
36     Thermo(sp)
40 template<class Thermo>
41 inline Foam::scalar Foam::specieThermo<Thermo>::T
43     scalar f,
44     scalar T0,
45     scalar (specieThermo<Thermo>::*F)(const scalar) const,
46     scalar (specieThermo<Thermo>::*dFdT)(const scalar) const,
47     scalar (specieThermo<Thermo>::*limit)(const scalar) const
48 ) const
50     scalar Test = T0;
51     scalar Tnew = T0;
52     scalar Ttol = T0*tol_;
53     int    iter = 0;
55     do
56     {
57         Test = Tnew;
58         Tnew =
59             (this->*limit)(Test - ((this->*F)(Test) - f)/(this->*dFdT)(Test));
61         if (iter++ > maxIter_)
62         {
63             FatalErrorIn
64             (
65                 "specieThermo<Thermo>::T(scalar f, scalar T0, "
66                 "scalar (specieThermo<Thermo>::*F)(const scalar) const, "
67                 "scalar (specieThermo<Thermo>::*dFdT)(const scalar) const"
68                 ") const"
69             )   << "Maximum number of iterations exceeded"
70                 << abort(FatalError);
71         }
73     } while (mag(Tnew - Test) > Ttol);
75     return Tnew;
79 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
81 template<class Thermo>
82 inline Foam::specieThermo<Thermo>::specieThermo
84     const word& name,
85     const specieThermo& st
88     Thermo(name, st)
92 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
94 template<class Thermo>
95 inline Foam::scalar Foam::specieThermo<Thermo>::cv(const scalar T) const
97     return this->cp(T) - this->RR;
101 template<class Thermo>
102 inline Foam::scalar Foam::specieThermo<Thermo>::gamma(const scalar T) const
104     scalar CP = this->cp(T);
105     return CP/(CP - this->RR);
109 template<class Thermo>
110 inline Foam::scalar Foam::specieThermo<Thermo>::e(const scalar T) const
112     return this->h(T) - this->RR*(T - this->Tstd);
116 template<class Thermo>
117 inline Foam::scalar Foam::specieThermo<Thermo>::es(const scalar T) const
119     return this->hs(T) - this->RR*(T - this->Tstd);
123 template<class Thermo>
124 inline Foam::scalar Foam::specieThermo<Thermo>::g(const scalar T) const
126     return this->h(T) - T*this->s(T);
130 template<class Thermo>
131 inline Foam::scalar Foam::specieThermo<Thermo>::a(const scalar T) const
133     return this->e(T) - T*this->s(T);
137 template<class Thermo>
138 inline Foam::scalar Foam::specieThermo<Thermo>::Cp(const scalar T) const
140     return this->cp(T)/this->W();
144 template<class Thermo>
145 inline Foam::scalar Foam::specieThermo<Thermo>::Cv(const scalar T) const
147     return this->cv(T)/this->W();
151 template<class Thermo>
152 inline Foam::scalar Foam::specieThermo<Thermo>::H(const scalar T) const
154     return this->h(T)/this->W();
158 template<class Thermo>
159 inline Foam::scalar Foam::specieThermo<Thermo>::Hs(const scalar T) const
161     return this->hs(T)/this->W();
165 template<class Thermo>
166 inline Foam::scalar Foam::specieThermo<Thermo>::Hc() const
168     return this->hc()/this->W();
172 template<class Thermo>
173 inline Foam::scalar Foam::specieThermo<Thermo>::S(const scalar T) const
175     return this->s(T)/this->W();
179 template<class Thermo>
180 inline Foam::scalar Foam::specieThermo<Thermo>::E(const scalar T) const
182     return this->e(T)/this->W();
186 template<class Thermo>
187 inline Foam::scalar Foam::specieThermo<Thermo>::G(const scalar T) const
189     return this->g(T)/this->W();
193 template<class Thermo>
194 inline Foam::scalar Foam::specieThermo<Thermo>::A(const scalar T) const
196     return this->a(T)/this->W();
200 template<class Thermo>
201 inline Foam::scalar Foam::specieThermo<Thermo>::K(const scalar T) const
203     scalar arg = -this->nMoles()*this->g(T)/(this->RR*T);
205     if (arg < 600.0)
206     {
207         return ::exp(arg);
208     }
209     else
210     {
211         return VGREAT;
212     }
216 template<class Thermo>
217 inline Foam::scalar Foam::specieThermo<Thermo>::Kp(const scalar T) const
219     return K(T);
223 template<class Thermo>
224 inline Foam::scalar Foam::specieThermo<Thermo>::Kc(const scalar T) const
226     if (equal(this->nMoles(), SMALL))
227     {
228         return Kp(T);
229     }
230     else
231     {
232         return Kp(T)*pow(this->Pstd/(this->RR*T), this->nMoles());
233     }
237 template<class Thermo>
238 inline Foam::scalar Foam::specieThermo<Thermo>::Kx
240     const scalar T,
241     const scalar p
242 ) const
244     if (equal(this->nMoles(), SMALL))
245     {
246         return Kp(T);
247     }
248     else
249     {
250         return Kp(T)*pow(this->Pstd/p, this->nMoles());
251     }
255 template<class Thermo>
256 inline Foam::scalar Foam::specieThermo<Thermo>::Kn
258     const scalar T,
259     const scalar p,
260     const scalar n
261 ) const
263     if (equal(this->nMoles(), SMALL))
264     {
265         return Kp(T);
266     }
267     else
268     {
269         return Kp(T)*pow(n*this->Pstd/p, this->nMoles());
270     }
274 template<class Thermo>
275 inline Foam::scalar Foam::specieThermo<Thermo>::TH
277     const scalar h,
278     const scalar T0
279 ) const
281     return T
282     (
283         h,
284         T0,
285         &specieThermo<Thermo>::H,
286         &specieThermo<Thermo>::Cp,
287         &specieThermo<Thermo>::limit
288     );
292 template<class Thermo>
293 inline Foam::scalar Foam::specieThermo<Thermo>::THs
295     const scalar hs,
296     const scalar T0
297 ) const
299     return T
300     (
301         hs,
302         T0,
303         &specieThermo<Thermo>::Hs,
304         &specieThermo<Thermo>::Cp,
305         &specieThermo<Thermo>::limit
306     );
310 template<class Thermo>
311 inline Foam::scalar Foam::specieThermo<Thermo>::TE
313     const scalar e,
314     const scalar T0
315 ) const
317     return T
318     (
319         e,
320         T0,
321         &specieThermo<Thermo>::E,
322         &specieThermo<Thermo>::Cv,
323         &specieThermo<Thermo>::limit
324     );
328 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
330 template<class Thermo>
331 inline void Foam::specieThermo<Thermo>::operator+=
333     const specieThermo<Thermo>& st
336     Thermo::operator+=(st);
340 template<class Thermo>
341 inline void Foam::specieThermo<Thermo>::operator-=
343     const specieThermo<Thermo>& st
346     Thermo::operator-=(st);
350 template<class Thermo>
351 inline void Foam::specieThermo<Thermo>::operator*=(const scalar s)
353     Thermo::operator*=(s);
357 // * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
359 template<class Thermo>
360 inline Foam::specieThermo<Thermo> Foam::operator+
362     const specieThermo<Thermo>& st1,
363     const specieThermo<Thermo>& st2
366     return specieThermo<Thermo>
367     (
368         static_cast<const Thermo&>(st1) + static_cast<const Thermo&>(st2)
369     );
373 template<class Thermo>
374 inline Foam::specieThermo<Thermo> Foam::operator-
376     const specieThermo<Thermo>& st1,
377     const specieThermo<Thermo>& st2
380     return specieThermo<Thermo>
381     (
382         static_cast<const Thermo&>(st1) - static_cast<const Thermo&>(st2)
383     );
387 template<class Thermo>
388 inline Foam::specieThermo<Thermo> Foam::operator*
390     const scalar s,
391     const specieThermo<Thermo>& st
394     return specieThermo<Thermo>
395     (
396         s*static_cast<const Thermo&>(st)
397     );
401 template<class Thermo>
402 inline Foam::specieThermo<Thermo> Foam::operator==
404     const specieThermo<Thermo>& st1,
405     const specieThermo<Thermo>& st2
408     return st2 - st1;
412 // ************************************************************************* //