Remove trailing whitespace systematically
[foam-extend-3.2.git] / src / foam / primitives / Scalar / Scalar.H
blob7fdef931a478cf374d0f66298cc423acca9a8f94
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     |
5     \\  /    A nd           | For copyright notice see file Copyright
6      \\/     M anipulation  |
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 Typedef
25     Foam::Scalar
27 Description
28     Single floating point number
30 SourceFiles
31     Scalar.C
33 \*---------------------------------------------------------------------------*/
35 #include "pTraits.H"
37 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
39 // template specialisation for pTraits<Scalar>
40 template<>
41 class pTraits<Scalar>
43     Scalar p_;
45 public:
47     //- Component type
48     typedef Scalar cmptType;
50     // Member constants
52         enum
53         {
54             dim = 3,         // Dimensionality of space
55             rank = 0,        // Rank of Scalar is 0
56             nComponents = 1  // Number of components in Scalar is 1
57         };
60     // Static data members
62         static const char* const typeName;
63         static const char* componentNames[];
64         static const Scalar zero;
65         static const Scalar one;
66         static const Scalar max;
67         static const Scalar min;
70     // Constructors
72         //- Construct from Scalar
73         pTraits(const Scalar s)
74         {
75             p_ = s;
76         }
78         //- Construct from Istream
79         pTraits(Istream&);
82     // Member operators
84         operator Scalar() const
85         {
86             return p_;
87         }
89         operator Scalar&()
90         {
91             return p_;
92         }
96 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
98 //- Return a string representation of a Scalar
99 word name(const Scalar);
102 inline Scalar& setComponent(Scalar& s, const direction)
104     return s;
107 inline Scalar component(const Scalar s, const direction)
109     return s;
112 inline Scalar sign(const Scalar s)
114     return (s >= 0)? 1: -1;
117 inline Scalar pos(const Scalar s)
119     return (s >= 0)? 1: 0;
122 inline Scalar neg(const Scalar s)
124     return (s < 0)? 1: 0;
127 inline bool equal(const Scalar& s1, const Scalar& s2)
129     return mag(s1 - s2) <= ScalarVSMALL;
132 inline bool notEqual(const Scalar s1, const Scalar s2)
134     return mag(s1 - s2) > ScalarVSMALL;
137 inline Scalar limit(const Scalar s1, const Scalar s2)
139     return (mag(s1) < mag(s2)) ? s1: 0.0;
142 inline Scalar minMod(const Scalar s1, const Scalar s2)
144     return (mag(s1) < mag(s2)) ? s1: s2;
147 inline Scalar magSqr(const Scalar s)
149     return s*s;
152 inline Scalar sqr(const Scalar s)
154     return s*s;
157 inline Scalar sqrtSumSqr(const Scalar a, const Scalar b)
159     Scalar maga = mag(a);
160     Scalar magb = mag(b);
162     if (maga > magb)
163     {
164         return maga*sqrt(1.0 + sqr(magb/maga));
165     }
166     else
167     {
168         return magb < ScalarVSMALL ? 0.0 : magb*sqrt(1.0 + sqr(maga/magb));
169     }
172 inline Scalar pow3(const Scalar s)
174     return s*sqr(s);
177 inline Scalar pow4(const Scalar s)
179     return sqr(sqr(s));
182 inline Scalar pow5(const Scalar s)
184     return s*pow4(s);
187 inline Scalar pow6(const Scalar s)
189     return pow3(sqr(s));
192 inline Scalar inv(const Scalar s)
194     return 1.0/s;
197 inline Scalar dot(const Scalar s1, const Scalar s2)
199     return s1*s2;
202 inline Scalar cmptMultiply(const Scalar s1, const Scalar s2)
204     return s1*s2;
207 inline Scalar cmptDivide(const Scalar s1, const Scalar s2)
209     return s1/s2;
212 inline Scalar cmptSumMultiply(const Scalar s1, const Scalar s2)
214     return s1*s2;
217 inline Scalar cmptMax(const Scalar s)
219     return s;
222 inline Scalar cmptMin(const Scalar s)
224     return s;
227 inline Scalar cmptAv(const Scalar s)
229     return s;
232 inline Scalar cmptMag(const Scalar s)
234     return mag(s);
238 // Standard C++ transcendental functions
239 transFunc(sqrt)
240 transFunc(cbrt)
241 transFunc(exp)
242 transFunc(log)
243 transFunc(log10)
244 transFunc(sin)
245 transFunc(cos)
246 transFunc(tan)
247 transFunc(asin)
248 transFunc(acos)
249 transFunc(atan)
250 transFunc(sinh)
251 transFunc(cosh)
252 transFunc(tanh)
253 transFunc(asinh)
254 transFunc(acosh)
255 transFunc(atanh)
257 // Standard ANSI-C (but not in <cmath>) transcendental functions
259 transFunc(erf)
260 transFunc(erfc)
261 transFunc(lgamma)
263 transFunc(j0)
264 transFunc(j1)
266 transFunc(y0)
267 transFunc(y1)
270 // Stabilisation around zero for division
271 inline Scalar stabilise(const Scalar s, const Scalar small)
273     if (s >= 0)
274     {
275         return s + small;
276     }
277     else
278     {
279         return s - small;
280     }
284 inline Scalar cmptStabilise
286     const Scalar s,
287     const Scalar small,
288     const Scalar value
291     if (mag(s) < small)
292     {
293         return sign(s)*value;
294     }
295     else
296     {
297         return s;
298     }
302 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
304 Scalar readScalar(Istream&);
305 Istream& operator>>(Istream&, Scalar&);
306 Ostream& operator<<(Ostream&, const Scalar);
309 // ************************************************************************* //