27 #include "WTensorFunctions.h"
29 std::ostream& operator<<( std::ostream& os,
const RealEigenSystem& sys )
31 os << sys[0].first <<
", " << sys[0].second << std::endl;
32 os << sys[1].first <<
", " << sys[1].second << std::endl;
33 os << sys[2].first <<
", " << sys[2].second << std::endl;
42 const double M_SQRT3 = 1.73205080756887729352744634151;
43 double de = m( 1, 2 ) * m( 1, 0 );
44 double dd = m( 1, 2 ) * m( 1, 2 );
45 double ee = m( 1, 0 ) * m( 1, 0 );
46 double ff = m( 2, 0 ) * m( 2, 0 );
47 double m0 = m( 0, 0 ) + m( 1, 1 ) + m( 2, 2 );
48 double c1 = m( 0, 0 ) * m( 1, 1 ) + m( 0, 0 ) * m( 2, 2 ) + m( 1, 1 ) * m( 2, 2 )
50 double c0 = m( 2, 2 ) * dd + m( 0, 0 ) * ee + m( 1, 1 ) * ff - m( 0, 0 ) * m( 1, 1 ) * m( 2, 2 ) - 2. * m( 2, 0 ) * de;
52 double p, sqrt_p, q, c, s, phi;
53 p = m0 * m0 - 3. * c1;
54 q = m0 * ( p - ( 3. / 2. ) * c1 ) - ( 27. / 2. ) * c0;
55 sqrt_p = sqrt( fabs( p ) );
57 phi = 27. * ( 0.25 * c1 * c1 * ( p - c1 ) + c0 * ( q + 27. / 4. * c0 ) );
58 phi = ( 1. / 3. ) * atan2( sqrt( fabs( phi ) ), q );
60 c = sqrt_p * cos( phi );
61 s = ( 1. / M_SQRT3 ) * sqrt_p * sin( phi );
63 std::vector< double > w( 3 );
65 w[ 2 ] = ( 1. / 3. ) * ( m0 - c );
Implements a symmetric tensor that has the same number of components in every direction.