mFES - molecular Finite Element Solver  0.4
help.h
Go to the documentation of this file.
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