fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / VectorN / OpenFOAM / primitives / vector2 / tensor2I.H
blob381310734f3952178c5abfc80545ab0f94b25a3b
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 Type
26     tensor2
28 Description
29     TensorN of 2 scalars.
31 \*---------------------------------------------------------------------------*/
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 namespace Foam
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
42 //- Return tensor transpose
43 template<>
44 inline tensor2 tensor2::T() const
46     tensor2 transpose;
48     transpose[0] = this->operator[](0);
49     transpose[1] = this->operator[](2);
50     transpose[2] = this->operator[](1);
51     transpose[3] = this->operator[](3);
53     return transpose;
57 //- Assign to a sphericalTensor2
58 template<>
59 inline void tensor2::operator=(const sphericalTensor2& st)
61     this->v_[0] = st[0];
62     this->v_[1] = 0.0;
63     this->v_[2] = 0.0;
64     this->v_[3] = st[0];
68 //- Assign to a diagTensor2
69 template<>
70 inline void tensor2::operator=(const diagTensor2& dt)
72     this->v_[0] = dt[0];
73     this->v_[1] = 0.0;
74     this->v_[2] = 0.0;
75     this->v_[3] = dt[1];
78 // * * * * * * * * * * * * * * * Global Operators  * * * * * * * * * * * * * //
80 //- Inner-product between two tensors
81 inline tensor2
82 operator&(const tensor2& t1, const tensor2& t2)
84     tensor2 result;
86     result[0] = t1[0]*t2[0] + t1[1]*t2[2];
87     result[1] = t1[0]*t2[1] + t1[1]*t2[3];
88     result[2] = t1[2]*t2[0] + t1[3]*t2[2];
89     result[3] = t1[2]*t2[1] + t1[3]*t2[3];
91     return result;
95 //- Inner-product between a diagonal tensors and a tensor
96 inline tensor2
97 operator&(const diagTensor2& dt1, const tensor2& t2)
99     tensor2 result;
101     result[0] = dt1[0]*t2[0];
102     result[1] = dt1[0]*t2[1];
103     result[2] = dt1[1]*t2[2];
104     result[3] = dt1[1]*t2[3];
106     return result;
109 //- Inner-product between a tensor and diagonal tensor
110 inline tensor2
111 operator&(const tensor2& t1, const diagTensor2& dt2)
113     tensor2 result;
115     result[0] = t1[0]*dt2[0];
116     result[1] = t1[1]*dt2[1];
117     result[2] = t1[2]*dt2[0];
118     result[3] = t1[3]*dt2[1];
120     return result;
124 //- Inner-product between a spherical tensor and a tensor
125 inline tensor2
126 operator&(const sphericalTensor2& st1, const tensor2& t2)
128     tensor2 result;
130     result[0] = st1[0]*t2[0];
131     result[1] = st1[0]*t2[1];
132     result[2] = st1[0]*t2[2];
133     result[3] = st1[0]*t2[3];
135     return result;
138 //- Inner-product between a tensor and spherical tensor
139 inline tensor2
140 operator&(const tensor2& t1, const sphericalTensor2& st2)
142     tensor2 result;
144     result[0] = t1[0]*st2[0];
145     result[1] = t1[1]*st2[0];
146     result[2] = t1[2]*st2[0];
147     result[3] = t1[3]*st2[0];
149     return result;
153 //- Inner-product between a tensor and a vector
154 inline vector2
155 operator&(const tensor2& t, const vector2& v)
157     vector2 result;
159     result[0] = t[0]*v[0] + t[1]*v[1];
160     result[1] = t[2]*v[0] + t[3]*v[1];
162     return result;
166 //- Inner-product between a vector and a tensor
167 inline vector2
168 operator&(const vector2& v, const tensor2& t)
170     vector2 result;
172     result[0] = v[0]*t[0] + v[1]*t[2];
173     result[1] = v[0]*t[1] + v[1]*t[3];
175     return result;
179 //- Outer-product between two vectors
180 inline tensor2
181 operator*(const vector2& v1, const vector2& v2)
183     tensor2 result;
185     result[0] = v1[0]*v2[0];
186     result[1] = v1[0]*v2[1];
187     result[2] = v1[1]*v2[0];
188     result[3] = v1[1]*v2[1];
190     return result;
194 //- Return the determinant of a tensor
195 inline scalar det(const tensor2& t)
197     return
198     (
199         t[0]*t[3]-t[1]*t[2]
200     );
203 //- Return the inverse of a tensor given the determinant
204 inline tensor2 inv(const tensor2& t)
206     tensor2 cofactor;
208     cofactor[0] = t[3];
209     cofactor[1] = -t[1];
210     cofactor[2] = -t[2];
211     cofactor[3] = t[0];
213     return cofactor/det(t);
217 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
219 } // End namespace Foam
221 // ************************************************************************* //