Remove trailing whitespace systematically
[foam-extend-3.2.git] / src / foam / primitives / Tensor / Tensor.H
blob2e57382682c6692ff09b172a0b5fb07e3f38d329
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     Foam::Tensor
27 Description
28     Templated 3D tensor derived from VectorSpace adding construction from
29     9 components, element access using xx(), xy() etc. member functions and
30     the inner-product (dot-product) and outer-product of two Vectors
31     (tensor-product) operators.
33 SourceFiles
34     TensorI.H
36 \*---------------------------------------------------------------------------*/
38 #ifndef Tensor_H
39 #define Tensor_H
41 #include "Vector.H"
42 #include "SphericalTensor.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 template<class Cmpt>
50 class SymmTensor;
52 /*---------------------------------------------------------------------------*\
53                            Class Tensor Declaration
54 \*---------------------------------------------------------------------------*/
56 template <class Cmpt>
57 class Tensor
59     public VectorSpace<Tensor<Cmpt>, Cmpt, 9>
62 public:
64     //- Equivalent type of labels used for valid component indexing
65     typedef Tensor<label> labelType;
68     // Member constants
70         enum
71         {
72             rank = 2 // Rank of Tensor is 2
73         };
76     // Static data members
78         static const char* const typeName;
79         static const char* componentNames[];
81         static const Tensor zero;
82         static const Tensor one;
83         static const Tensor max;
84         static const Tensor min;
87     //- Component labeling enumeration
88     enum components { XX, XY, XZ, YX, YY, YZ, ZX, ZY, ZZ };
91     // Constructors
93         //- Construct null
94         inline Tensor();
96         //- Construct given VectorSpace
97         inline Tensor(const VectorSpace<Tensor<Cmpt>, Cmpt, 9>&);
99         //- Construct given SphericalTensor
100         inline Tensor(const SphericalTensor<Cmpt>&);
102         //- Construct given SymmTensor
103         inline Tensor(const SymmTensor<Cmpt>&);
105         //- Construct given the three vectors
106         inline Tensor
107         (
108             const Vector<Cmpt>& x,
109             const Vector<Cmpt>& y,
110             const Vector<Cmpt>& z
111         );
113         //- Construct given the nine components
114         inline Tensor
115         (
116             const Cmpt txx, const Cmpt txy, const Cmpt txz,
117             const Cmpt tyx, const Cmpt tyy, const Cmpt tyz,
118             const Cmpt tzx, const Cmpt tzy, const Cmpt tzz
119         );
121         //- Construct from Istream
122         Tensor(Istream&);
125     // Member Functions
127         // Access
129             inline const Cmpt& xx() const;
130             inline const Cmpt& xy() const;
131             inline const Cmpt& xz() const;
132             inline const Cmpt& yx() const;
133             inline const Cmpt& yy() const;
134             inline const Cmpt& yz() const;
135             inline const Cmpt& zx() const;
136             inline const Cmpt& zy() const;
137             inline const Cmpt& zz() const;
139             inline Cmpt& xx();
140             inline Cmpt& xy();
141             inline Cmpt& xz();
142             inline Cmpt& yx();
143             inline Cmpt& yy();
144             inline Cmpt& yz();
145             inline Cmpt& zx();
146             inline Cmpt& zy();
147             inline Cmpt& zz();
149             // Access vector components.
150             // Note: returning const only to find out lhs usage
152             inline const Vector<Cmpt> x() const;
153             inline const Vector<Cmpt> y() const;
154             inline const Vector<Cmpt> z() const;
156             //- Return (i, j) component.  Consistency with VectorN
157             inline const Cmpt& operator()
158             (
159                 const direction i,
160                 const direction j
161             ) const;
163             //- Return access to (i, j) component.  Consistency with VectorN
164             inline Cmpt& operator()
165             (
166                 const direction i,
167                 const direction j
168             );
171         //- Transpose
172         inline Tensor<Cmpt> T() const;
175     // Member Operators
177         //- Assign to a SphericalTensor
178         inline void operator=(const SphericalTensor<Cmpt>&);
180         //- Assign to a SymmTensor
181         inline void operator=(const SymmTensor<Cmpt>&);
185 template<class Cmpt>
186 class typeOfRank<Cmpt, 2>
188 public:
190     typedef Tensor<Cmpt> type;
194 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
196 } // End namespace Foam
198 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
200 // Include inline implementations
201 #include "TensorI.H"
203 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
205 #endif
207 // ************************************************************************* //