Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / OpenFOAM / primitives / Tensor2D / Tensor2D.H
blobcdb1e480fa5c6e1ad150a80e44efb4c3b6fda3c0
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::Tensor2D
27 Description
28     Templated 2D tensor derived from VectorSpace adding construction from
29     4 components, element access using xx(), xy(), yx() and yy() member
30     functions and the iner-product (dot-product) and outer-product of two
31     Vector2Ds (tensor-product) operators.
33 SourceFiles
34     Tensor2DI.H
36 \*---------------------------------------------------------------------------*/
38 #ifndef Tensor2D_H
39 #define Tensor2D_H
41 #include "Vector2D.H"
42 #include "SphericalTensor2D.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 /*---------------------------------------------------------------------------*\
50                            Class Tensor2D Declaration
51 \*---------------------------------------------------------------------------*/
53 template <class Cmpt>
54 class Tensor2D
56     public VectorSpace<Tensor2D<Cmpt>, Cmpt, 4>
59 public:
61     // Member constants
63         enum
64         {
65             rank = 2 // Rank of Tensor2D is 2
66         };
69     // Static data members
71         static const char* const typeName;
72         static const char* componentNames[];
74         static const Tensor2D zero;
75         static const Tensor2D one;
76         static const Tensor2D max;
77         static const Tensor2D min;
80     //- Component labeling enumeration
81     enum components { XX, XY, YX, YY };
84     // Constructors
86         //- Construct null
87         inline Tensor2D();
89         //- Construct given VectorSpace
90         inline Tensor2D(const VectorSpace<Tensor2D<Cmpt>, Cmpt, 4>&);
92         //- Construct given SphericalTensor2D
93         inline Tensor2D(const SphericalTensor2D<Cmpt>&);
95         //- Construct given the two vectors
96         inline Tensor2D
97         (
98             const Vector2D<Cmpt>& x,
99             const Vector2D<Cmpt>& y
100         );
102         //- Construct given the four components
103         inline Tensor2D
104         (
105             const Cmpt txx, const Cmpt txy,
106             const Cmpt tyx, const Cmpt tyy
107         );
109         //- Construct from Istream
110         Tensor2D(Istream&);
113     // Member Functions
115         // Access
117             inline const Cmpt& xx() const;
118             inline const Cmpt& xy() const;
119             inline const Cmpt& yx() const;
120             inline const Cmpt& yy() const;
122             inline Cmpt& xx();
123             inline Cmpt& xy();
124             inline Cmpt& yx();
125             inline Cmpt& yy();
127             // Access vector components.
129             inline Vector2D<Cmpt> x() const;
130             inline Vector2D<Cmpt> y() const;
132         //- Transpose
133         inline Tensor2D<Cmpt> T() const;
136     // Member Operators
138         //- Copy SphericalTensor2D
139         inline void operator=(const SphericalTensor2D<Cmpt>&);
143 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
145 } // End namespace Foam
147 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
149 // Include inline implementations
150 #include "Tensor2DI.H"
152 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
154 #endif
156 // ************************************************************************* //