Remove trailing whitespace systematically
[foam-extend-3.2.git] / src / foam / primitives / FadOne / FadOne.H
blob036282826f01fbf66335d25c961bb8072e1f30da
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 Class
25     FadOne
27 Description
28     Forward automatic derivative of the first order.  Supports multi-variable
29     derivative, where the number of independent variables is specified at
30     compile-time.  Replaces scalar in calculations
32 SourceFiles
33     FadOneI.H
34     FadOne.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef FadOne_H
39 #define FadOne_H
41 #include "error.H"
42 #include "IOstream.H"
43 #include "token.H"
45 #include "products.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 // * * * * * * Forward declaration of template friend fuctions * * * * * * * //
54 template<int nVars> class FadOne;
56 template<int nVars>
57 inline FadOne<nVars> operator+(const FadOne<nVars>&, const FadOne<nVars>&);
59 template<int nVars>
60 inline FadOne<nVars> operator+(const double, const FadOne<nVars>&);
62 template<int nVars>
63 inline FadOne<nVars> operator+(const FadOne<nVars>&, const double);
65 template<int nVars>
66 inline FadOne<nVars> operator-(const FadOne<nVars>&);
68 template<int nVars>
69 inline FadOne<nVars> operator-(const FadOne<nVars>&, const FadOne<nVars>&);
71 template<int nVars>
72 inline FadOne<nVars> operator-(const double, const FadOne<nVars>&);
74 template<int nVars>
75 inline FadOne<nVars> operator-(const FadOne<nVars>&, const double);
77 template<int nVars>
78 inline FadOne<nVars> operator*(const FadOne<nVars>&, const FadOne<nVars>&);
80 template<int nVars>
81 inline FadOne<nVars> operator*(const double, const FadOne<nVars>&);
83 template<int nVars>
84 inline FadOne<nVars> operator*(const FadOne<nVars>&, const double);
86 template<int nVars>
87 inline FadOne<nVars> operator/(const FadOne<nVars>&, const FadOne<nVars>&);
89 template<int nVars>
90 inline FadOne<nVars> operator/(const double, const FadOne<nVars>&);
92 template<int nVars>
93 inline FadOne<nVars> operator/(const FadOne<nVars>&, const double);
95 template<int nVars>
96 inline bool operator<(const FadOne<nVars>&, const FadOne<nVars>&);
98 template<int nVars>
99 inline bool operator<=(const FadOne<nVars>&, const FadOne<nVars>&);
101 template<int nVars>
102 inline bool operator>(const FadOne<nVars>&, const FadOne<nVars>&);
104 template<int nVars>
105 inline bool operator>=(const FadOne<nVars>&, const FadOne<nVars>&);
107 template<int nVars>
108 inline bool operator==(const FadOne<nVars>&, const FadOne<nVars>&);
110 template<int nVars>
111 inline bool operator!=(const FadOne<nVars>&, const FadOne<nVars>&);
113 template<int nVars>
114 Istream& operator>>(Istream&, FadOne<nVars>&);
116 template<int nVars>
117 Ostream& operator<<(Ostream&, const FadOne<nVars>&);
120 /*---------------------------------------------------------------------------*\
121                            Class FadOne Declaration
122 \*---------------------------------------------------------------------------*/
124 template<int nVars>
125 class FadOne
127     // Private data
129         //- Length of data list
130         static const label Length = nVars + 1;
132         //- Value and derivatives
133         double data_[Length];
136     // Private Member Functions
139 public:
141     //- Component type
142     typedef FadOne<nVars> cmptType;
145     // Member constants
147         enum
148         {
149             dim = 3,         // Dimensionality of space
150             rank = 0,        // Rank od Scalar is 0
151             nComponents = 1  // Number of components in FadOne is 1
152         };
154     // Static data members
156         static const char* const typeName;
157         static const char* componentNames[];
158         static const FadOne<nVars> zero;
159         static const FadOne<nVars> one;
162     // Constructors
164         //- Construct null
165         inline FadOne();
167         //- Construct from value
168         explicit inline FadOne(const double& v);
170         //- Construct from Istream
171         explicit inline FadOne(Istream&);
173         //- Construct as copy
174         inline FadOne(const FadOne<nVars>&);
177     // Destructor - default
180     // Member Functions
182         //- Return value
183         inline const double& value() const;
184         inline double& value();
186         //- Return derivative
187         inline const double& deriv(const label i) const;
188         inline double& deriv(const label i);
191     // Member Operators
193         inline void operator=(const double&);
194         inline void operator=(const FadOne<nVars>&);
196         inline void operator+=(const double&);
197         inline void operator+=(const FadOne<nVars>&);
198         inline void operator-=(const double&);
199         inline void operator-=(const FadOne<nVars>&);
200         inline void operator*=(const double&);
201         inline void operator*=(const FadOne<nVars>&);
202         inline void operator/=(const double&);
203         inline void operator/=(const FadOne<nVars>&);
206     // Friend Functions
209     // Friend operators
211         friend FadOne<nVars> operator+ <nVars>
212         (
213             const FadOne<nVars>&,
214             const FadOne<nVars>&
215         );
217         friend FadOne<nVars> operator+ <nVars>
218         (
219             const double,
220             const FadOne<nVars>&
221         );
223         friend FadOne<nVars> operator+ <nVars>
224         (
225             const FadOne<nVars>&,
226             const double
227         );
229         friend FadOne<nVars> operator- <nVars>(const FadOne<nVars>&);
231         friend FadOne<nVars> operator- <nVars>
232         (
233             const FadOne<nVars>&,
234             const FadOne<nVars>&
235         );
237         friend FadOne<nVars> operator- <nVars>
238         (
239             const double,
240             const FadOne<nVars>&
241         );
243         friend FadOne<nVars> operator- <nVars>
244         (
245             const FadOne<nVars>&,
246             const double
247         );
249         friend FadOne<nVars> operator* <nVars>
250         (
251             const FadOne<nVars>&,
252             const FadOne<nVars>&
253         );
255         friend FadOne<nVars> operator* <nVars>
256         (
257             const double,
258             const FadOne<nVars>&
259         );
261         friend FadOne<nVars> operator* <nVars>
262         (
263             const FadOne<nVars>&,
264             const double
265         );
267         friend FadOne<nVars> operator/ <nVars>
268         (
269             const FadOne<nVars>&,
270             const FadOne<nVars>&
271         );
273         friend FadOne<nVars> operator/ <nVars>
274         (
275             const double,
276             const FadOne<nVars>&
277         );
279         friend FadOne<nVars> operator/ <nVars>
280         (
281             const FadOne<nVars>&,
282             const double
283         );
285         friend bool operator< <nVars>
286         (
287             const FadOne<nVars>&,
288             const FadOne<nVars>&
289         );
291         friend bool operator<= <nVars>
292         (
293             const FadOne<nVars>&,
294             const FadOne<nVars>&
295         );
297         friend bool operator> <nVars>
298         (
299             const FadOne<nVars>&,
300             const FadOne<nVars>&
301         );
303         friend bool operator>= <nVars>
304         (
305             const FadOne<nVars>&,
306             const FadOne<nVars>&
307         );
309         friend bool operator== <nVars>
310         (
311             const FadOne<nVars>&,
312             const FadOne<nVars>&
313         );
315         friend bool operator!= <nVars>
316         (
317             const FadOne<nVars>&,
318             const FadOne<nVars>&
319         );
322     // IOstream Operators
324         friend Istream& operator>> <nVars>(Istream&, FadOne<nVars>&);
325         friend Ostream& operator<< <nVars>(Ostream&, const FadOne<nVars>&);
329 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
331 } // End namespace Foam
333 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
335 #include "FadOneI.H"
336 #include "FadOne.C"
337 #include "FadOneFunctions.H"
338 #include "FadOneFunctionsI.H"
340 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
342 #endif
344 // ************************************************************************* //