void IsotropicMaterialWithCompressionResistance::AddCompressionResistanceGradient(int elementIndex, double * invariants, double * gradient) { if (enableCompressionResistance) { double IIIC = invariants[2]; double J = sqrt(IIIC); if (J < 1) { double compressionResistanceFactor = GetCompressionResistanceFactor(elementIndex); gradient[2] += -compressionResistanceFactor * (J - 1.0) * (J - 1.0) / (1728.0 * J); } } }
void IsotropicMaterialWithCompressionResistance::AddCompressionResistanceHessian(int elementIndex, double * invariants, double * hessian) { if (enableCompressionResistance) { double IIIC = invariants[2]; double J = sqrt(IIIC); if (J < 1.0) { double compressionResistanceFactor = GetCompressionResistanceFactor(elementIndex); hessian[5] += compressionResistanceFactor * (1.0 - J) * (1.0 + 11.0 * J) / (576.0 * J * J * J); } } }
void IsotropicMaterialWithCompressionResistance::AddCompressionResistanceEnergy(int elementIndex, double * invariants, double * energy) { if (enableCompressionResistance) { double IIIC = invariants[2]; double J = sqrt(IIIC); if (J < 1) { double compressionResistanceFactor = GetCompressionResistanceFactor(elementIndex); *energy += -compressionResistanceFactor * (J - 1.0) * (J - 1.0) * (J - 1.0) / 2592.0; } } }