From 38f969edc46d072e30db0c5c60514f13a03fd90f Mon Sep 17 00:00:00 2001 From: Patrick Jaap <patrick.jaap@tu-dresden.de> Date: Tue, 4 Oct 2022 11:08:16 +0200 Subject: [PATCH] Adjust Mooney-Rivlin energy in the Ciarlet case s.t. W(I)=0 This is done by subtracting "dim" or "1" at the given terms. Now it is consistent with the other 2 cases of MR energy. --- dune/elasticity/materials/mooneyrivlindensity.hh | 12 ++++++++---- test/mooneyrivlintest.cc | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dune/elasticity/materials/mooneyrivlindensity.hh b/dune/elasticity/materials/mooneyrivlindensity.hh index a14f96f..644fa44 100644 --- a/dune/elasticity/materials/mooneyrivlindensity.hh +++ b/dune/elasticity/materials/mooneyrivlindensity.hh @@ -66,9 +66,11 @@ public: C = F^TF and B = FF^T have the same eigenvalues - we can use either one of them. There are three Mooney-Rivlin-Variants: - ciarlet: W(F) = mooneyrivlin_a*(normF)^2 + mooneyrivlin_b*(normFinv)^2*detF^2 + mooneyrivlin_c*(detF)^2 - - (2*mooneyrivlin_a + 4*mooneyrivlin_b + 2*mooneyrivlin_c)*ln(detF), - where the last term is chosen s.t. W( t*I ) is minimal for t=1 + ciarlet: W(F) = mooneyrivlin_a * [ (normF)^2 - dim ] # -dim for w(I) = 0 + + mooneyrivlin_b * [ (normFinv)^2*detF^2 - dim ] # -dim for w(I) = 0 + + mooneyrivlin_c * [ (detF)^2 - 1 ] # -1 for W(I) = 0 + + (2*mooneyrivlin_a + 4*mooneyrivlin_b + 2*mooneyrivlin_c)*ln(detF), + where the last term is chosen s.t. W( t*I ) is minimal for t=1. log: W(F) = \sum_{i,j=0}^{i+j<=n} mooneyrivlin_ij * (I1 - 3)^i * (I2 - 3)^j + mooneyrivlin_k * ln(det(F))^2 square: W(F) = \sum_{i,j=0}^{i+j<=n} mooneyrivlin_ij * (I1 - 3)^i * (I2 - 3)^j + mooneyrivlin_k * 0.5 * (det(F) - 1)^2 @@ -100,7 +102,9 @@ public: gradientInverse.invert(); field_type frobeinusNormFInverseSquared = gradientInverse.frobenius_norm2(); using std::log; - return mooneyrivlin_a*frobeniusNormFsquared + mooneyrivlin_b*frobeinusNormFInverseSquared*detF*detF + mooneyrivlin_c*detF*detF + return mooneyrivlin_a * ( frobeniusNormFsquared - dim ) + + mooneyrivlin_b * ( frobeinusNormFInverseSquared*detF*detF - dim ) + + mooneyrivlin_c * ( detF*detF - 1.0 ) - (2.0*mooneyrivlin_a + 4.0*mooneyrivlin_b + 2.0*mooneyrivlin_c)*log(detF); } else diff --git a/test/mooneyrivlintest.cc b/test/mooneyrivlintest.cc index 89a0471..58ddbd1 100644 --- a/test/mooneyrivlintest.cc +++ b/test/mooneyrivlintest.cc @@ -165,7 +165,7 @@ int main (int argc, char *argv[]) parameters["mooneyrivlin_a"] = "2.42e+6"; parameters["mooneyrivlin_b"] = "6.52e+6"; parameters["mooneyrivlin_c"] = "-7.34e+6"; - expectedEnergy = 76302830.4; + expectedEnergy = 56822830.4; expectedGradientTwoNorm = 40670527.3; expectedGradientInfinityNorm = 11116511.8; expectedMatrixFrobeniusNorm = 2.1978108e+09; -- GitLab