fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / primitives / Scalar / Scalar.H
blobb7cbfb656cda280a340fdceffc50c12106b0ac34
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 Typedef
26     Foam::Scalar
28 Description
29     Single floating point number
31 SourceFiles
32     Scalar.C
34 \*---------------------------------------------------------------------------*/
36 #include "pTraits.H"
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 // template specialisation for pTraits<Scalar>
41 template<>
42 class pTraits<Scalar>
44     Scalar p_;
46 public:
48     //- Component type
49     typedef Scalar cmptType;
51     // Member constants
53         enum
54         {
55             dim = 3,         // Dimensionality of space
56             rank = 0,        // Rank of Scalar is 0
57             nComponents = 1  // Number of components in Scalar is 1
58         };
61     // Static data members
63         static const char* const typeName;
64         static const char* componentNames[];
65         static const Scalar zero;
66         static const Scalar one;
67         static const Scalar max;
68         static const Scalar min;
71     // Constructors
73         //- Construct from Scalar
74         pTraits(const Scalar s)
75         {
76             p_ = s;
77         }
79         //- Construct from Istream
80         pTraits(Istream&);
83     // Member operators
85         operator Scalar() const
86         {
87             return p_;
88         }
90         operator Scalar&()
91         {
92             return p_;
93         }
97 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
99 //- Return a string representation of a Scalar
100 word name(const Scalar);
103 inline Scalar& setComponent(Scalar& s, const direction)
105     return s;
108 inline Scalar component(const Scalar s, const direction)
110     return s;
113 inline Scalar sign(const Scalar s)
115     return (s >= 0)? 1: -1;
118 inline Scalar pos(const Scalar s)
120     return (s >= 0)? 1: 0;
123 inline Scalar neg(const Scalar s)
125     return (s < 0)? 1: 0;
128 inline bool equal(const Scalar& s1, const Scalar& s2)
130     return mag(s1 - s2) <= ScalarVSMALL;
133 inline bool notEqual(const Scalar s1, const Scalar s2)
135     return mag(s1 - s2) > ScalarVSMALL;
138 inline Scalar limit(const Scalar s1, const Scalar s2)
140     return (mag(s1) < mag(s2)) ? s1: 0.0;
143 inline Scalar minMod(const Scalar s1, const Scalar s2)
145     return (mag(s1) < mag(s2)) ? s1: s2;
148 inline Scalar magSqr(const Scalar s)
150     return s*s;
153 inline Scalar sqr(const Scalar s)
155     return s*s;
158 inline Scalar sqrtSumSqr(const Scalar a, const Scalar b)
160     Scalar maga = mag(a);
161     Scalar magb = mag(b);
163     if (maga > magb)
164     {
165         return maga*sqrt(1.0 + sqr(magb/maga));
166     }
167     else
168     {
169         return magb < ScalarVSMALL ? 0.0 : magb*sqrt(1.0 + sqr(maga/magb));
170     }
173 inline Scalar pow3(const Scalar s)
175     return s*sqr(s);
178 inline Scalar pow4(const Scalar s)
180     return sqr(sqr(s));
183 inline Scalar pow5(const Scalar s)
185     return s*pow4(s);
188 inline Scalar pow6(const Scalar s)
190     return pow3(sqr(s));
193 inline Scalar inv(const Scalar s)
195     return 1.0/s;
198 inline Scalar dot(const Scalar s1, const Scalar s2)
200     return s1*s2;
203 inline Scalar cmptMultiply(const Scalar s1, const Scalar s2)
205     return s1*s2;
208 inline Scalar cmptDivide(const Scalar s1, const Scalar s2)
210     return s1/s2;
213 inline Scalar cmptSumMultiply(const Scalar s1, const Scalar s2)
215     return s1*s2;
218 inline Scalar cmptMax(const Scalar s)
220     return s;
223 inline Scalar cmptMin(const Scalar s)
225     return s;
228 inline Scalar cmptAv(const Scalar s)
230     return s;
233 inline Scalar cmptMag(const Scalar s)
235     return mag(s);
239 // Standard C++ transcendental functions
240 transFunc(sqrt)
241 transFunc(cbrt)
242 transFunc(exp)
243 transFunc(log)
244 transFunc(log10)
245 transFunc(sin)
246 transFunc(cos)
247 transFunc(tan)
248 transFunc(asin)
249 transFunc(acos)
250 transFunc(atan)
251 transFunc(sinh)
252 transFunc(cosh)
253 transFunc(tanh)
254 transFunc(asinh)
255 transFunc(acosh)
256 transFunc(atanh)
258 // Standard ANSI-C (but not in <cmath>) transcendental functions
260 transFunc(erf)
261 transFunc(erfc)
262 transFunc(lgamma)
264 transFunc(j0)
265 transFunc(j1)
267 transFunc(y0)
268 transFunc(y1)
271 // Stabilisation around zero for division
272 inline Scalar stabilise(const Scalar s, const Scalar small)
274     if (s >= 0)
275     {
276         return s + small;
277     }
278     else
279     {
280         return s - small;
281     }
285 inline Scalar cmptStabilise
287     const Scalar s,
288     const Scalar small,
289     const Scalar value
292     if (mag(s) < small)
293     {
294         return sign(s)*value;
295     }
296     else
297     {
298         return s;
299     }
303 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
305 Scalar readScalar(Istream&);
306 Istream& operator>>(Istream&, Scalar&);
307 Ostream& operator<<(Ostream&, const Scalar);
310 // ************************************************************************* //