//=============================================================================
/*! calculate determinant */
inline double det(const dsymat2& A)
{
return A(0,0)*A(1,1) -A(1,0)*A(1,0);
}
//=============================================================================
/*! calculate inverse */
inline dsymat2 inv(const dsymat2& A)
{
const double Adet( det(A) );
dsymat2 Ainv;
Ainv(0,0)= A(1,1)/Adet;
Ainv(1,0)=-A(1,0)/Adet; Ainv(1,1)= A(0,0)/Adet;
return Ainv;
}
//=============================================================================
/*! return 2x2 rotated tensor */
inline dsymat2 rotate(const dsymat2& m, const double& theta)
{
double c(cos(theta)), s(sin(theta));
double cc(c*c), cs(c*s), ss(s*s);
dsymat2 mat;
mat(0,0) =m(0,0)*cc -2.*m(1,0)*cs +m(1,1)*ss;
mat(1,0) =m(1,0)*cc +(m(0,0)-m(1,1))*cs -m(1,0)*ss;
mat(1,1) =m(1,1)*cc +2.*m(1,0)*cs +m(0,0)*ss;
return mat;
}