For a FEM simulation of a Neo-Hook solid model, how do we know we are in the "regime" of nonlinearity of the solid? In other words, how do I know the hyperelastic material law is really used, and not just a needless additional computational cost because it can be modeled with a linear elastic Hook law. Following these Wikipedia figures for example, does this mean the nonlinearity really happens when we see a nonlinear relationship between $\lambda_{11}$ and $P_{11}$?

For my case/simulation, I chose the element with the biggest stress values, and I calculated the Lagrange Green strain tensor $\pmb{E}$ there, I computed the eigendecomposition to get the biggest eigenvalue $E_{11}$ and its associated eigenvector $\pmb{v}_{11}$. I then compute the stretch as : $\lambda_{11} = \sqrt{1+2E_{11}}$. For the principal stress I compute : $P_{11} = \pmb{v}_{11} \cdot (\pmb{P}\pmb{v}_{11})$ where $\pmb{P}$ is the first Piola-Kirchoff stress. Should I expect to see a nonlinear relationship here? Is my definition of these quantities correct? In my case, I get something linear: enter image description here

I used $W(\pmb{F}) = \frac{\mu_s}{2}\, (|\pmb{F}|^2 - 3 - 2\, \log(J)) $ with $\mu = 1923076$.

  • $\begingroup$ It looks like you’re still in the linear region, just to understand better, how are you running this model? Also maybe plotting stress $(\mathbf{\frac{\partial W}{\partial E}})$ and strain $(\mathbf{E})$ components directly might help in seeing where the nonlinearity is really present in the material model. $\endgroup$ May 25, 2023 at 20:42
  • $\begingroup$ Your $\lambda_{11}$ is close to one. Which means it is close to linear elastic and hence you are seeing a linear response. Make $\lambda_{11}$ much bigger - say 1.2, or 2 or 5 or 10. Then see what you get. Also, you might try plotting the stress-strain curve without using FEM. Try deriving a (non-linear) equation for the stress-strain curve and solve it using fsolve or something equivalent. $\endgroup$
    – NNN
    May 26, 2023 at 12:31
  • $\begingroup$ @NNN, would you expand your comment into an answer? $\endgroup$
    – nicoguaro
    May 28, 2023 at 14:48

2 Answers 2


Since your $\lambda_{11}$ is close to unity, it means that your response will be close to linear, because your strain is small. You have not provided enough strain for the non-linearity to kick-in.

I would plot over a larger range of $\lambda_{11}$, say from 1 to 5. That should be enough to see the non-linearity.

Also, before doing FEM, I would derive a non-linear relationship between $\lambda_{11}$ and $P_{11}$, solve the resulting equations with some non-linear solver and plot the results. And then compare with FEM.

Edit: Also try plotting an exponential constitutive relation such as the Veronda Westmann model.


In the FEM simulation, the part is loaded using forces, so I don't control the range of $\lambda_{11}$. Specifically, it's a 2D beam under a bending. So it gives something like this : enter image description here

As suggested by @NNN I derived the relationship $P_{11}(\lambda_{11})$ and I have $P_{11} =(\lambda_{11}^2 - 1) \mu / \lambda_{11} $, which is indeed not very "nonlinear", unless $\mu$ is very low. In the comparison between FEA (the above plot) and the analytical expression, it does seem to match. The problem is that I probably "sampled" the stress and its principal component the wrong way, since using the principal direction only gives stretches $\lambda \in [.999, 1.0003]$ whether the $yy$ component for example (as shown in the paraview contour) reaches values much higher : If I plot the $P_{yy} = f(\sqrt{1+2*E_{yy}})$ for the two corner elements, I get : enter image description here

Could you please indicate what's the right way to compute the principal directions for the principal stretch ?

Thank you.

  • $\begingroup$ Typically when plots the stress-strain relationship, it is in uniaxial tension, not bending. Try setting up a uniaxial tension problem. Also I'm not sure about your stress-strain relationship. It should be something of the form stress/strain = modulus and yours looks like stress = modulus/strain $\endgroup$
    – NNN
    Jun 1, 2023 at 3:02
  • $\begingroup$ The $(\lambda_{11}^2 - 1)$ is actually on the numerator, I wrote like in code :D I edited. I think I mis-explained my question, I wanted to know for arbitrary loading/deformations, e.g bending, how can we know we are in the nonlinearity regime, is the eigendecomposition of the Green-Lagrange tensor (for a discretised element very deformed e.g the corner of the bent part) the right approach ? $\endgroup$
    – Zed
    Jun 1, 2023 at 7:17
  • $\begingroup$ If you want to know if a particular element has gone into the non-linear regime, I would do something like you said. I would probably take the polar decomposition of $\mathbf{F}$ and look for the eigenvalues of the stretch tensor. But after getting the stretches one would need to look up against a uniaxial stress strain curve to figure out whether the material is non-linear at that stretch ... $\endgroup$
    – NNN
    Jun 1, 2023 at 7:42
  • $\begingroup$ Thank you ! And do you confirme that I have to compute the stress in THAT direction ? something like $\pmb{v}_{11} \cdot (\pmb{P} \pmb{v}_{11})$ . $\endgroup$
    – Zed
    Jun 1, 2023 at 9:25
  • $\begingroup$ I believe so, if $\mathbb{v}_{11}$ is the direction you are interested it. But it's been a while since I did this and I can't find something directly relevant online $\endgroup$
    – NNN
    Jun 1, 2023 at 9:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.