Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / thermophysicalModels / specie / thermo / janaf / janafThermo.H
blobf590e7b20a9f2c03fd96043437039463506e20ad
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::janafThermo
27 Description
28     JANAF tables based thermodynamics package templated
29     into the equationOfState.
31 SourceFiles
32     janafThermoI.H
33     janafThermo.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef janafThermo_H
38 #define janafThermo_H
40 #include "scalar.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 // Forward declaration of friend functions and operators
49 template<class equationOfState> class janafThermo;
51 template<class equationOfState>
52 inline janafThermo<equationOfState> operator+
54     const janafThermo<equationOfState>&,
55     const janafThermo<equationOfState>&
58 template<class equationOfState>
59 inline janafThermo<equationOfState> operator-
61     const janafThermo<equationOfState>&,
62     const janafThermo<equationOfState>&
65 template<class equationOfState>
66 inline janafThermo<equationOfState> operator*
68     const scalar,
69     const janafThermo<equationOfState>&
72 template<class equationOfState>
73 inline janafThermo<equationOfState> operator==
75     const janafThermo<equationOfState>&,
76     const janafThermo<equationOfState>&
79 template<class equationOfState>
80 Ostream& operator<<
82     Ostream&,
83     const janafThermo<equationOfState>&
87 /*---------------------------------------------------------------------------*\
88                            Class janafThermo Declaration
89 \*---------------------------------------------------------------------------*/
91 template<class equationOfState>
92 class janafThermo
94     public equationOfState
97 public:
99         static const int nCoeffs_ = 7;
100         typedef FixedList<scalar, nCoeffs_> coeffArray;
102 private:
104     // Private data
106         // Temperature limits of applicability of functions
107         scalar Tlow_, Thigh_, Tcommon_;
109         coeffArray highCpCoeffs_;
110         coeffArray lowCpCoeffs_;
113     // Private member functions
115         //- Check given temperature is within the range of the fitted coeffs
116         //  Note: bounding T within range.  HJ, 12/Oct/2010
117         inline void checkT(scalar& T) const;
119         //- Return the coefficients corresponding to the given temperature
120         //  Note: bounding T within range.  HJ, 12/Oct/2010
121         inline const coeffArray& coeffs(scalar& T) const;
124 public:
126     // Constructors
128         //- Construct from components
129         inline janafThermo
130         (
131             const equationOfState& st,
132             const scalar Tlow,
133             const scalar Thigh,
134             const scalar Tcommon,
135             const coeffArray& highCpCoeffs,
136             const coeffArray& lowCpCoeffs
137         );
139         //- Construct from Istream
140         janafThermo(Istream&);
142         //- Construct as a named copy
143         inline janafThermo(const word&, const janafThermo&);
146     // Member Functions
148         //- Heat capacity at constant pressure [J/(kmol K)]
149         //  Note: bounding T within range.  HJ, 12/Oct/2010
150         inline scalar cp(scalar T) const;
152         //- Enthalpy [J/kmol]
153         //  Note: bounding T within range.  HJ, 12/Oct/2010
154         inline scalar h(scalar T) const;
156         //- Sensible enthalpy [J/kmol]
157         //  Note: bounding T within range.  HJ, 12/Oct/2010
158         inline scalar hs(scalar T) const;
160         //- Chemical enthalpy [J/kmol]
161         inline scalar hc() const;
163         //- Entropy [J/(kmol K)]
164         //  Note: bounding T within range.  HJ, 12/Oct/2010
165         inline scalar s(scalar T) const;
168     // Member operators
170         inline void operator+=(const janafThermo&);
171         inline void operator-=(const janafThermo&);
174     // Friend operators
176         friend janafThermo operator+ <equationOfState>
177         (
178             const janafThermo&,
179             const janafThermo&
180         );
182         friend janafThermo operator- <equationOfState>
183         (
184             const janafThermo&,
185             const janafThermo&
186         );
188         friend janafThermo operator* <equationOfState>
189         (
190             const scalar,
191             const janafThermo&
192         );
194         friend janafThermo operator== <equationOfState>
195         (
196             const janafThermo&,
197             const janafThermo&
198         );
201     // Ostream Operator
203         friend Ostream& operator<< <equationOfState>
204         (
205             Ostream&,
206             const janafThermo&
207         );
211 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
213 } // End namespace Foam
215 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
217 #include "janafThermoI.H"
219 #ifdef NoRepository
220 #   include "janafThermo.C"
221 #endif
223 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
225 #endif
227 // ************************************************************************* //