Fix tutorials: typo in tutorials/viscoelastic/viscoelasticFluidFoam/S-MDCPP/constant...
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / primitives / complex / complexI.H
blob96defe78781ea17b4b3d77d848a861d7a59db4ea
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 \*---------------------------------------------------------------------------*/
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 const complex& complex::operator=(const complex& c)
81     re = c.re;
82     im = c.im;
83     return *this;
87 inline void complex::operator+=(const complex& c)
89     re += c.re;
90     im += c.im;
94 inline void complex::operator-=(const complex& c)
96     re -= c.re;
97     im -= c.im;
101 inline void complex::operator*=(const complex& c)
103     *this = (*this)*c;
107 inline void complex::operator/=(const complex& c)
109     *this = *this/c;
113 inline const complex& complex::operator=(const scalar s)
115     re = s;
116     im = 0.0;
117     return *this;
121 inline void complex::operator+=(const scalar s)
123     re += s;
127 inline void complex::operator-=(const scalar s)
129     re -= s;
133 inline void complex::operator*=(const scalar s)
135     re *= s;
136     im *= s;
140 inline void complex::operator/=(const scalar s)
142     re /= s;
143     im /= s;
147 inline complex complex::operator!() const
149     return conjugate();
153 inline bool complex::operator==(const complex& c) const
155     return (equal(re, c.re) && equal(im, c.im));
159 inline bool complex::operator!=(const complex& c) const
161     return !operator==(c);
165 // * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
168 inline scalar magSqr(const complex& c)
170     return (c.re*c.re + c.im*c.im);
174 inline complex sqr(const complex& c)
176     return c * c;
180 inline scalar mag(const complex& c)
182     return sqrt(magSqr(c));
186 inline const complex& max(const complex& c1, const complex& c2)
188     if (mag(c1) > mag(c2))
189     {
190         return c1;
191     }
192     else
193     {
194         return c2;
195     }
199 inline const complex& min(const complex& c1, const complex& c2)
201     if (mag(c1) < mag(c2))
202     {
203         return c1;
204     }
205     else
206     {
207         return c2;
208     }
212 inline complex limit(const complex& c1, const complex& c2)
214     return complex(limit(c1.re, c2.re), limit(c1.im, c2.im));
218 inline const complex& sum(const complex& c)
220     return c;
224 template<class Cmpt>
225 class Tensor;
227 inline complex transform(const Tensor<scalar>&, const complex c)
229     return c;
233 // * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
235 inline complex operator+(const complex& c1, const complex& c2)
237     return complex
238     (
239         c1.re + c2.re,
240         c1.im + c2.im
241     );
245 inline complex operator-(const complex& c)
247     return complex
248     (
249         -c.re,
250         -c.im
251     );
255 inline complex operator-(const complex& c1, const complex& c2)
257     return complex
258     (
259         c1.re - c2.re,
260         c1.im - c2.im
261     );
265 inline complex operator*(const complex& c1, const complex& c2)
267     return complex
268     (
269         c1.re*c2.re - c1.im*c2.im,
270         c1.im*c2.re + c1.re*c2.im
271     );
275 inline complex operator/(const complex& c1, const complex& c2)
277     scalar sqrC2 = magSqr(c2);
279     return complex
280     (
281         (c1.re*c2.re + c1.im*c2.im)/sqrC2,
282         (c1.im*c2.re - c1.re*c2.im)/sqrC2
283     );
287 inline complex operator*(const scalar s, const complex& c)
289     return complex(s*c.re, s*c.im);
293 inline complex operator*(const complex& c, const scalar s)
295     return complex(s*c.re, s*c.im);
299 inline complex operator/(const complex& c, const scalar s)
301     return complex(c.re/s, c.im/s);
305 inline complex operator/(const scalar s, const complex& c)
307     scalar sqrC2 = magSqr(c);
309     // Bug fix, Hua Shan.  2/Apr/2010
310     return complex
311     (
312         s*c.re/sqrC2,
313        -s*c.im/sqrC2
314     );
318 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
320 } // End namespace Foam
322 // ************************************************************************* //