1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright held by original author
7 -------------------------------------------------------------------------------
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
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
31 \*---------------------------------------------------------------------------*/
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
43 //- Return the determinant of a tensor
44 inline scalar det(const tensor4& t)
48 t[3]*t[6]*t[9]*t[12] - t[2]*t[7]*t[9]*t[12] - t[3]*t[5]*t[10]*t[12] + t[1]*t[7]*t[10]*t[12] +
49 t[2]*t[5]*t[11]*t[12] - t[1]*t[6]*t[11]*t[12] - t[3]*t[6]*t[8]*t[13] + t[2]*t[7]*t[8]*t[13] +
50 t[3]*t[4]*t[10]*t[13] - t[0]*t[7]*t[10]*t[13] - t[2]*t[4]*t[11]*t[13] + t[0]*t[6]*t[11]*t[13] +
51 t[3]*t[5]*t[8]*t[14] - t[1]*t[7]*t[8]*t[14] - t[3]*t[4]*t[9]*t[14] + t[0]*t[7]*t[9]*t[14] +
52 t[1]*t[4]*t[11]*t[14] - t[0]*t[5]*t[11]*t[14] - t[2]*t[5]*t[8]*t[15] + t[1]*t[6]*t[8]*t[15] +
53 t[2]*t[4]*t[9]*t[15] - t[0]*t[6]*t[9]*t[15] - t[1]*t[4]*t[10]*t[15] + t[0]*t[5]*t[10]*t[15]
58 //- Return the inverse of a tensor given the determinant
59 inline tensor4 inv(const tensor4& t)
63 cofactor[0] = t[6]*t[11]*t[13] - t[7]*t[10]*t[13] + t[7]*t[9]*t[14]
64 - t[5]*t[11]*t[14] - t[6]*t[9]*t[15] + t[5]*t[10]*t[15];
65 cofactor[1] = t[3]*t[10]*t[13] - t[2]*t[11]*t[13] - t[3]*t[9]*t[14]
66 + t[1]*t[11]*t[14] + t[2]*t[9]*t[15] - t[1]*t[10]*t[15];
67 cofactor[2] = t[2]*t[7]*t[13] - t[3]*t[6]*t[13] + t[3]*t[5]*t[14]
68 - t[1]*t[7]*t[14] - t[2]*t[5]*t[15] + t[1]*t[6]*t[15];
69 cofactor[3] = t[3]*t[6]*t[9] - t[2]*t[7]*t[9] - t[3]*t[5]*t[10]
70 + t[1]*t[7]*t[10] + t[2]*t[5]*t[11] - t[1]*t[6]*t[11];
71 cofactor[4] = t[7]*t[10]*t[12] - t[6]*t[11]*t[12] - t[7]*t[8]*t[14]
72 + t[4]*t[11]*t[14] + t[6]*t[8]*t[15] - t[4]*t[10]*t[15];
73 cofactor[5] = t[2]*t[11]*t[12] - t[3]*t[10]*t[12] + t[3]*t[8]*t[14]
74 - t[0]*t[11]*t[14] - t[2]*t[8]*t[15] + t[0]*t[10]*t[15];
75 cofactor[6] = t[3]*t[6]*t[12] - t[2]*t[7]*t[12] - t[3]*t[4]*t[14]
76 + t[0]*t[7]*t[14] + t[2]*t[4]*t[15] - t[0]*t[6]*t[15];
77 cofactor[7] = t[2]*t[7]*t[8] - t[3]*t[6]*t[8] + t[3]*t[4]*t[10]
78 - t[0]*t[7]*t[10] - t[2]*t[4]*t[11] + t[0]*t[6]*t[11];
79 cofactor[8] = t[5]*t[11]*t[12] - t[7]*t[9]*t[12] + t[7]*t[8]*t[13]
80 - t[4]*t[11]*t[13] - t[5]*t[8]*t[15] + t[4]*t[9]*t[15];
81 cofactor[9] = t[3]*t[9]*t[12] - t[1]*t[11]*t[12] - t[3]*t[8]*t[13]
82 + t[0]*t[11]*t[13] + t[1]*t[8]*t[15] - t[0]*t[9]*t[15];
83 cofactor[10] = t[1]*t[7]*t[12] - t[3]*t[5]*t[12] + t[3]*t[4]*t[13]
84 - t[0]*t[7]*t[13] - t[1]*t[4]*t[15] + t[0]*t[5]*t[15];
85 cofactor[11] = t[3]*t[5]*t[8] - t[1]*t[7]*t[8] - t[3]*t[4]*t[9]
86 + t[0]*t[7]*t[9] + t[1]*t[4]*t[11] - t[0]*t[5]*t[11];
87 cofactor[12] = t[6]*t[9]*t[12] - t[5]*t[10]*t[12] - t[6]*t[8]*t[13]
88 + t[4]*t[10]*t[13] + t[5]*t[8]*t[14] - t[4]*t[9]*t[14];
89 cofactor[13] = t[1]*t[10]*t[12] - t[2]*t[9]*t[12] + t[2]*t[8]*t[13]
90 - t[0]*t[10]*t[13] - t[1]*t[8]*t[14] + t[0]*t[9]*t[14];
91 cofactor[14] = t[2]*t[5]*t[12] - t[1]*t[6]*t[12] - t[2]*t[4]*t[13]
92 + t[0]*t[6]*t[13] + t[1]*t[4]*t[14] - t[0]*t[5]*t[14];
93 cofactor[15] = t[1]*t[6]*t[8] - t[2]*t[5]*t[8] + t[2]*t[4]*t[9]
94 - t[0]*t[6]*t[9] - t[1]*t[4]*t[10] + t[0]*t[5]*t[10];
96 return cofactor/det(t);
99 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
101 } // End namespace Foam
103 // ************************************************************************* //