fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / dimensionSet / dimensionSet.H
blob692c51425d25273a7bd2c36aa2479e2d89b38bee
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     Foam::dimensionSet
28 Description
29     Dimension set for the base types.
30     This type may be used to implement rigorous dimension checking
31     for algebraic manipulation.
33 SourceFiles
34     dimensionSet.C
35     dimensionSetIO.C
36     dimensionSets.C
38 \*---------------------------------------------------------------------------*/
40 #ifndef dimensionSet_H
41 #define dimensionSet_H
43 #include "scalar.H"
44 #include "bool.H"
45 #include "dimensionedScalarFwd.H"
46 #include "className.H"
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 namespace Foam
53 // Forward declaration of friend functions and operators
55 class dimensionSet;
57 // Friend functions
59 dimensionSet max(const dimensionSet&, const dimensionSet&);
60 dimensionSet min(const dimensionSet&, const dimensionSet&);
61 dimensionSet cmptMultiply(const dimensionSet&, const dimensionSet&);
62 dimensionSet cmptDivide(const dimensionSet&, const dimensionSet&);
64 dimensionSet pow(const dimensionSet&, const scalar);
65 dimensionSet pow(const dimensionSet&, const dimensionedScalar&);
66 dimensionSet pow(const dimensionedScalar&, const dimensionSet&);
68 dimensionSet sqr(const dimensionSet&);
69 dimensionSet pow3(const dimensionSet&);
70 dimensionSet pow4(const dimensionSet&);
71 dimensionSet pow5(const dimensionSet&);
72 dimensionSet pow6(const dimensionSet&);
74 dimensionSet sqrt(const dimensionSet&);
75 dimensionSet magSqr(const dimensionSet&);
76 dimensionSet mag(const dimensionSet&);
77 dimensionSet sign(const dimensionSet&);
78 dimensionSet pos(const dimensionSet&);
79 dimensionSet neg(const dimensionSet&);
80 dimensionSet inv(const dimensionSet&);
81 dimensionSet hinv(const dimensionSet&);
83 // Function to check the argument is dimensionless
84 //  for transcendental functions
85 dimensionSet trans(const dimensionSet&);
87 // Return the argument; transformations do not change the dimensions
88 dimensionSet transform(const dimensionSet&);
90 // Friend operators
92 dimensionSet operator-(const dimensionSet&);
93 dimensionSet operator+(const dimensionSet&, const dimensionSet&);
94 dimensionSet operator-(const dimensionSet&, const dimensionSet&);
95 dimensionSet operator*(const dimensionSet&, const dimensionSet&);
96 dimensionSet operator/(const dimensionSet&, const dimensionSet&);
97 dimensionSet operator&(const dimensionSet&, const dimensionSet&);
98 dimensionSet operator^(const dimensionSet&, const dimensionSet&);
99 dimensionSet operator&&(const dimensionSet&, const dimensionSet&);
101 // IOstream operators
103 Istream& operator>>(Istream&, dimensionSet&);
104 Ostream& operator<<(Ostream&, const dimensionSet&);
107 /*---------------------------------------------------------------------------*\
108                            Class dimensionSet Declaration
109 \*---------------------------------------------------------------------------*/
111 class dimensionSet
114 public:
116     // Member constants
118         enum
119         {
120             nDimensions = 7    // Number of dimensions in SI is 7
121         };
123         //- Define an enumeration for the names of the dimension exponents
124         enum dimensionType
125         {
126             MASS,               // kilogram   kg
127             LENGTH,             // metre      m
128             TIME,               // second     s
129             TEMPERATURE,        // Kelvin     K
130             MOLES,              // mole       mol
131             CURRENT,            // Ampere     A
132             LUMINOUS_INTENSITY  // Candela    Cd
133         };
136     // Static data members
138         static const scalar smallExponent;
141 private:
143     // private data
145         // dimensionSet stored as an array of dimension exponents
146         scalar exponents_[nDimensions];
149 public:
151     // Declare name of the class and its debug switch
152     ClassName("dimensionSet");
155     // Constructors
157         //- Construct given individual dimension exponents for all
158         //  seven dimensions
159         dimensionSet
160         (
161             const scalar mass,
162             const scalar length,
163             const scalar time,
164             const scalar temperature,
165             const scalar moles,
166             const scalar current,
167             const scalar luminousIntensity
168         );
170         //- Construct given individual dimension exponents for first
171         //  five dimensions
172         dimensionSet
173         (
174             const scalar mass,
175             const scalar length,
176             const scalar time,
177             const scalar temperature,
178             const scalar moles
179         );
181         //- Construct from Istream
182         dimensionSet(Istream&);
185     // Member functions
187         bool dimensionless() const;
188         void reset(const dimensionSet&);
191     // Member operators
193         scalar operator[](const dimensionType) const;
194         scalar& operator[](const dimensionType);
195         bool operator==(const dimensionSet&) const;
196         bool operator!=(const dimensionSet&) const;
198         bool operator=(const dimensionSet&) const;
200         bool operator+=(const dimensionSet&) const;
201         bool operator-=(const dimensionSet&) const;
202         bool operator*=(const dimensionSet&);
203         bool operator/=(const dimensionSet&);
206     // Friend functions
208         friend dimensionSet max(const dimensionSet&, const dimensionSet&);
209         friend dimensionSet min(const dimensionSet&, const dimensionSet&);
210         friend dimensionSet cmptMultiply
211         (
212             const dimensionSet&,
213             const dimensionSet&
214         );
215         friend dimensionSet cmptDivide
216         (
217             const dimensionSet&,
218             const dimensionSet&
219         );
221         friend dimensionSet pow(const dimensionSet&, const scalar);
222         friend dimensionSet pow(const dimensionSet&, const dimensionedScalar&);
223         friend dimensionSet pow(const dimensionedScalar&, const dimensionSet&);
225         friend dimensionSet sqr(const dimensionSet&);
226         friend dimensionSet pow3(const dimensionSet&);
227         friend dimensionSet pow4(const dimensionSet&);
228         friend dimensionSet pow5(const dimensionSet&);
229         friend dimensionSet pow6(const dimensionSet&);
231         friend dimensionSet sqrt(const dimensionSet&);
232         friend dimensionSet magSqr(const dimensionSet&);
233         friend dimensionSet mag(const dimensionSet&);
234         friend dimensionSet sign(const dimensionSet&);
235         friend dimensionSet pos(const dimensionSet&);
236         friend dimensionSet neg(const dimensionSet&);
237         friend dimensionSet inv(const dimensionSet&);
239         //- Function to check the argument is dimensionless
240         //  for transcendental functions
241         friend dimensionSet trans(const dimensionSet&);
243         //- Return the argument; transformations do not change the dimensions
244         friend dimensionSet transform(const dimensionSet&);
247     // Friend operators
249         friend dimensionSet operator-(const dimensionSet&);
251         friend dimensionSet operator+
252         (
253             const dimensionSet&,
254             const dimensionSet&
255         );
257         friend dimensionSet operator-
258         (
259             const dimensionSet&,
260             const dimensionSet&
261         );
263         friend dimensionSet operator*
264         (
265             const dimensionSet&,
266             const dimensionSet&
267         );
269         friend dimensionSet operator/
270         (
271             const dimensionSet&,
272             const dimensionSet&
273         );
275         friend dimensionSet operator&
276         (
277             const dimensionSet&,
278             const dimensionSet&
279         );
281         friend dimensionSet operator^
282         (
283             const dimensionSet&,
284             const dimensionSet&
285         );
287         friend dimensionSet operator&&
288         (
289             const dimensionSet&,
290             const dimensionSet&
291         );
294     // IOstream operators
296         friend Istream& operator>>(Istream&, dimensionSet&);
297         friend Ostream& operator<<(Ostream&, const dimensionSet&);
301 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
303 } // End namespace Foam
305 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
307 #include "dimensionSets.H"
309 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
311 #endif
313 // ************************************************************************* //