Skip to content
Snippets Groups Projects
Commit 38f969ed authored by Patrick Jaap's avatar Patrick Jaap
Browse files

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.
parent 8955c6d5
No related branches found
No related tags found
1 merge request!75Adjust Mooney-Rivlin energy in the Ciarlet case s.t. W(I)=0
Pipeline #51814 passed
......@@ -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
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment