21 #ifndef RFFGEN_UTIL_MODIFY_INVARIANTS_HH 
   22 #define RFFGEN_UTIL_MODIFY_INVARIANTS_HH 
   24 #include "../operations.hh" 
   25 #include "../CMath/pow.hh" 
   34     template <
class Matrix,
class FirstInvariant>
 
   35     using FirstPrincipalInvariantBase  = MathematicalOperations::Product< MathematicalOperations::Chain<CMath::Pow<-1,3>  , LinearAlgebra::ThirdPrincipalInvariant<Matrix> > , FirstInvariant >;
 
   37     template <
class Matrix,
class SecondInvariant>
 
   38     using SecondPrincipalInvariantBase = MathematicalOperations::Product< MathematicalOperations::Chain<CMath::Pow<-2,3> , LinearAlgebra::ThirdPrincipalInvariant<Matrix> > , SecondInvariant >;
 
   41   template <
class Matrix, 
class FirstInvariant>
 
   42   struct ModifyFirstPrincipalInvariant : Detail::FirstPrincipalInvariantBase<Matrix,FirstInvariant>
 
   44     ModifyFirstPrincipalInvariant() = 
default;
 
   46     ModifyFirstPrincipalInvariant(
const Matrix& A, 
const FirstInvariant& inv)
 
   47       : Detail::FirstPrincipalInvariantBase<Matrix,FirstInvariant> ( A , inv )
 
   51   template <
class Matrix, 
class SecondInvariant>
 
   52   struct ModifySecondPrincipalInvariant : Detail::SecondPrincipalInvariantBase<Matrix,SecondInvariant>
 
   54     ModifySecondPrincipalInvariant() = 
default;
 
   56     ModifySecondPrincipalInvariant(
const Matrix& A, 
const SecondInvariant& inv)
 
   57       : Detail::SecondPrincipalInvariantBase<Matrix,SecondInvariant> ( A , inv )
 
   65 #endif // RFFGEN_UTIL_MODIFY_INVARIANTS_HH