double HomogeneousMooneyRivlinIsotropicMaterial::ComputeEnergy(int elementIndex, double * invariants) { double Ic = invariants[0]; double IIc = invariants[1]; double IIIc = invariants[2]; double energy = 0.5 * (-6.0 + (Ic * Ic - IIc) / pow(IIIc, 2.0 / 3.0)) * mu01 + (-3.0 + Ic / pow(IIIc, 1.0 / 3.0)) * mu10 + pow(-1.0 + sqrt(IIIc), 2.0) * v1; AddCompressionResistanceEnergy(elementIndex, invariants, &energy); return energy; }
double HomogeneousNeoHookeanIsotropicMaterial::ComputeEnergy(int elementIndex, double * invariants) { double IC = invariants[0]; double IIIC = invariants[2]; double J = sqrt(IIIC); double logJ = log(J); // Note: computation of J and logJ will fail for an inverted element. // The IsotropicHyperelasticFEM class will prevent inversions (assuming proper // threshold was set), so normally this is not an issue. double energy = 0.5 * muLame * (IC - 3.0) - muLame * logJ + 0.5 * lambdaLame * logJ * logJ; AddCompressionResistanceEnergy(elementIndex, invariants, &energy); return energy; }