correction to d4edb38234db8268907f04836d49bb93461b8a88
[OpenFOAM-1.5.x.git] / src / OpenFOAM / primitives / complex / complexI.H
blob8bf647180c65ab3bd420ce22c5d138e87e14dbfd
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2008 OpenCFD Ltd.
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 \*---------------------------------------------------------------------------*/
27 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
29 namespace Foam
32 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
34 inline complex::complex()
38 inline complex::complex(const scalar Re, const scalar Im)
40     re(Re),
41     im(Im)
45 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
47 inline scalar complex::Re() const
49     return re;
53 inline scalar complex::Im() const
55     return im;
59 inline scalar& complex::Re()
61     return re;
65 inline scalar& complex::Im()
67     return im;
71 inline complex complex::conjugate() const
73     return complex(re, -im);
77 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
79 inline void complex::operator=(const complex& c)
81     re = c.re;
82     im = c.im;
86 inline void complex::operator+=(const complex& c)
88     re += c.re;
89     im += c.im;
93 inline void complex::operator-=(const complex& c)
95     re -= c.re;
96     im -= c.im;
100 inline void complex::operator*=(const complex& c)
102     *this = (*this)*c;
106 inline void complex::operator/=(const complex& c)
108     *this = *this/c;
112 inline void complex::operator=(const scalar s)
114     re = s;
115     im = 0.0;
119 inline void complex::operator+=(const scalar s)
121     re += s;
125 inline void complex::operator-=(const scalar s)
127     re -= s;
131 inline void complex::operator*=(const scalar s)
133     re *= s;
134     im *= s;
138 inline void complex::operator/=(const scalar s)
140     re /= s;
141     im /= s;
145 inline complex complex::operator!() const
147     return conjugate();
151 inline bool complex::operator==(const complex& c) const
153     return (equal(re, c.re) && equal(im, c.im));
157 inline bool complex::operator!=(const complex& c) const
159     return !operator==(c);
163 // * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
166 inline scalar magSqr(const complex& c)
168     return (c.re*c.re + c.im*c.im);
172 inline complex sqr(const complex& c)
174     return c * c;
178 inline scalar mag(const complex& c)
180     return sqrt(magSqr(c));
184 inline const complex& max(const complex& c1, const complex& c2)
186     if (mag(c1) > mag(c2))
187     {
188         return c1;
189     }
190     else
191     {
192         return c2;
193     }
197 inline const complex& min(const complex& c1, const complex& c2)
199     if (mag(c1) < mag(c2))
200     {
201         return c1;
202     }
203     else
204     {
205         return c2;
206     }
210 inline complex limit(const complex& c1, const complex& c2)
212     return complex(limit(c1.re, c2.re), limit(c1.im, c2.im));
216 inline const complex& sum(const complex& c)
218     return c;
222 template<class Cmpt>
223 class Tensor;
225 inline complex transform(const Tensor<scalar>&, const complex c)
227     return c;
231 // * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
233 inline complex operator+(const complex& c1, const complex& c2)
235     return complex
236     (
237         c1.re+c2.re,
238         c1.im+c2.im
239     );
243 inline complex operator-(const complex& c)
245     return complex
246     (
247         -c.re,
248         -c.im
249     );
253 inline complex operator-(const complex& c1, const complex& c2)
255     return complex
256     (
257         c1.re-c2.re,
258         c1.im-c2.im
259     );
263 inline complex operator*(const complex& c1, const complex& c2)
265     return complex
266     (
267         c1.re*c2.re - c1.im*c2.im,
268         c1.im*c2.re + c1.re*c2.im
269     );
273 inline complex operator/(const complex& c1, const complex& c2)
275     scalar sqrC2 = magSqr(c2);
277     return complex
278     (
279         (c1.re*c2.re + c1.im*c2.im)/sqrC2,
280         (c1.im*c2.re - c1.re*c2.im)/sqrC2
281     );
285 inline complex operator*(const scalar s, const complex& c)
287     return complex(s*c.re, s*c.im);
291 inline complex operator*(const complex& c, const scalar s)
293     return complex(s*c.re, s*c.im);
297 inline complex operator/(const complex& c, const scalar s)
299     return complex(c.re/s, c.im/s);
303 inline complex operator/(const scalar s, const complex& c)
305     return complex(s/c.re, s/c.im);
309 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
311 } // End namespace Foam
313 // ************************************************************************* //