29 #include "Fastor/Fastor.h"
34 namespace EnergyDensityFunctions {
36 using namespace Fastor;
37 using namespace FastorStandardTensors;
39 template <
typename T >
44 const T J = sqrt( determinant( C ) );
45 const T
I1 = trace( C );
47 T res = G / 2. * (
I1 - 3. ) + ( K / 2. - G / 3. ) * pow( J - 1, 2 ) - G * log( J );
52 template <
typename T >
57 const T J = sqrt( determinant( C ) );
58 const T
I1 = trace( C );
60 T res = K / 8. * pow( J - 1. / J, 2. ) + G / 2. * (
I1 * pow( J, -2. / 3 ) - 3. );
65 template <
typename T >
70 const T J = sqrt( determinant( C ) );
71 const T
I1 = trace( C );
73 T res = G / 2. * (
I1 - 3. ) + 3. * G * G / ( 3. * K - 2. * G ) * ( pow( J, 2. / 3 - K / G ) - 1 );
78 namespace FirstOrderDerived {
80 template <
typename T >
83 using namespace FastorIndices;
85 const T J = sqrt( determinant( C ) );
86 const T
I1 = trace( C );
88 T psi = K / 8. * pow( J - 1. / J, 2. ) + G / 2. * (
I1 * pow( J, -2. / 3 ) - 3. );
91 const T dPsi_dJ = K / 4. * ( J - 1. / J ) * ( 1. + 1. / ( J * J ) ) - G / 3. *
I1 * pow( J, -5. / 3. );
92 const T dPsi_dI1 = G / 2. * pow( J, -2. / 3. );
101 return { psi, dPsi_dC };
105 namespace SecondOrderDerived {
107 template <
typename T >
112 using namespace FastorIndices;
114 const T J = sqrt( determinant( C ) );
115 const T
I1 = trace( C );
117 T psi = K / 8. * pow( J - 1. / J, 2. ) + G / 2. * (
I1 * pow( J, -2. / 3 ) - 3. );
120 const T dPsi_dJ = K / 4. * ( J - 1. / J ) * ( 1 + 1. / ( J * J ) ) - G / 3. *
I1 * pow( J, -5. / 3. );
121 const T dPsi_dI1 = G / 2. * pow( J, -2. / 3. );
130 const T d2Psi_dJdJ = K / 4. * ( 1. + 3. / ( J * J * J * J ) ) + 5. / 9. * G *
I1 * pow( J, -8. / 3. );
131 const T d2Psi_dJdI1 = -G / 3. * pow( J, -5. / 3. );
132 Tensor3333t< T > d2J_dCdC = J / 4. * einsum< JI, LK, to_IJKL >( CInv, CInv ) -
133 J / 2. * einsum< JK, LI, to_IJKL >( CInv, CInv );
135 Tensor3333t< T > d2Psi_dCdC = d2Psi_dJdJ * einsum< IJ, KL >( dJ_dC, dJ_dC ) + dPsi_dJ * d2J_dCdC +
137 ( einsum< IJ, KL >( dJ_dC, dI1_dC ) + einsum< IJ, KL >( dI1_dC, dJ_dC ) );
139 return { psi, dPsi_dC, d2Psi_dCdC };