mFES - molecular Finite Element Solver
0.4
|
00001 #include <gprim.hpp> 00002 00003 00004 namespace netgen 00005 { 00006 00007 double Det (const Mat<3,3> & m) 00008 { 00009 return 00010 m(0,0) * m(1,1) * m(2,2) 00011 + m(1,0) * m(2,1) * m(0,2) 00012 + m(2,0) * m(0,1) * m(1,2) 00013 - m(0,0) * m(2,1) * m(1,2) 00014 - m(1,0) * m(0,1) * m(2,2) 00015 - m(2,0) * m(1,1) * m(0,2); 00016 } 00017 00018 void CalcInverse (const Mat<3,3> & m, Mat<3,3> & inv) 00019 { 00020 double det = Det (m); 00021 if (det == 0) 00022 { 00023 inv = 0; 00024 return; 00025 } 00026 00027 double idet = 1.0 / det; 00028 inv(0,0) = idet * (m(1,1) * m(2,2) - m(1,2) * m(2,1)); 00029 inv(1,0) = -idet * (m(1,0) * m(2,2) - m(1,2) * m(2,0)); 00030 inv(2,0) = idet * (m(1,0) * m(2,1) - m(1,1) * m(2,0)); 00031 00032 inv(0,1) = -idet * (m(0,1) * m(2,2) - m(0,2) * m(2,1)); 00033 inv(1,1) = idet * (m(0,0) * m(2,2) - m(0,2) * m(2,0)); 00034 inv(2,1) = -idet * (m(0,0) * m(2,1) - m(0,1) * m(2,0)); 00035 00036 inv(0,2) = idet * (m(0,1) * m(1,2) - m(0,2) * m(1,1)); 00037 inv(1,2) = -idet * (m(0,0) * m(1,2) - m(0,2) * m(1,0)); 00038 inv(2,2) = idet * (m(0,0) * m(1,1) - m(0,1) * m(1,0)); 00039 } 00040 } 00041