fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / VectorN / OpenFOAM / primitives / TensorN.H
blobd9c87422f2367d8d0ab39faaf038b3f35f66fb36
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 Class
26     TensorN
28 Description
30 SourceFiles
31     TensorNI.H
33 \*---------------------------------------------------------------------------*/
35 #ifndef TensorN_H
36 #define TensorN_H
38 #include "VectorN.H"
39 #include "SphericalTensorN.H"
40 #include "DiagTensorN.H"
42 // * * * * * * * * * * * * * Forward Declarations  * * * * * * * * * * * * * //
44 template <class Cmpt, int length>
45 class DiagTensorN;
47 template <class Cmpt, int length>
48 class SphericalTensorN;
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 namespace Foam
55 /*---------------------------------------------------------------------------*\
56                            Class TensorN Declaration
57 \*---------------------------------------------------------------------------*/
59 template <class Cmpt, int length>
60 class TensorN
62     public VectorSpace<TensorN<Cmpt, length>, Cmpt, length*length>
65 public:
67     // Member constants
69         enum
70         {
71             rank = 2,            // Rank of TensorN is 2
72             rowLength = length   // Number of components in a row
73         };
76     // Static data members
78         static const char* const typeName;
80         static const TensorN zero;
81         static const TensorN one;
84     // Constructors
86         //- Construct null
87         inline TensorN();
89         //- Construct given VectorSpace
90         inline TensorN
91         (
92             const VectorSpace<TensorN<Cmpt, length>, Cmpt, length*length>&
93         );
95         //- Construct given component value.  Special use only!
96         explicit inline TensorN(const Cmpt& tx);
98         //- Construct from Istream
99         TensorN(Istream&);
102     // Member Functions
104         //- Return (i, j) component
105         inline const Cmpt& operator()
106         (
107             const direction i,
108             const direction j
109         ) const;
111         //- Return access to (i, j) component
112         inline Cmpt& operator()
113         (
114             const direction i,
115             const direction j
116         );
118         //- Diagonal
119         inline DiagTensorN<Cmpt, length> diag() const;
121         //- Transpose
122         inline TensorN<Cmpt, length> T() const;
124         //- Negative sum the vertical off-diagonal components
125         inline TensorN<Cmpt, length> negSumDiag() const;
127     // Member Operators
129         //- Assign to a SphericalTensorN
130         inline void operator=(const SphericalTensorN<Cmpt, length>&);
132         //- Assign to a DiagTensorN
133         inline void operator=(const DiagTensorN<Cmpt, length>&);
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 } // End namespace Foam
141 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
143 // Include inline implementations
144 #include "TensorNI.H"
146 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
148 #endif
150 // ************************************************************************* //