Static Linear elastic analysis in Calculix

I tried a simple static analysis with Calculix. The analysis consists in a single C3D8 element uniaxially elongated 10% along Z direction.

I compared two different materials:

  1. Linear elastic material:
    100000, 0.3
  2. Linear elastic-plastic material (with a huge yield stress to avoid any plasticity):
    100000, 0.3

The stress output is different in both cases. Does anybody know why? I thought that the output stress was Cauchy stress,

Do you have NLGEOM enabled ?

Yes, I have NLGEOM enabled. Indeed, I have checked the RF at nodes and the results for both materials differ.

How big are the differences in results ?

For the purely elastic material:
SMISES = 12330 MPa

For the elastic-plastic material:
SMISES = 9577 MPa
TOTALFORCE = 9046.348 N

Check stresses in the dat file. *El print

I found the “problem”. When including the *PLASTIC keyword calculix switches to an hyperelastic-type potential for the elastic range. As it is stated in the documentation:

For finite strain (visco)plasticity, triggered by the keywords *PLASTIC and/or
*CREEP in combination with the paramter NLGEOM on the *STATIC card,
a hyperelastic-type potential is used for the elastic range. For details the reader
is referred to [23], Section 6.3.1.

Thank you for your comments

Hi, Jalkorta

I think your post has a lot of juice.

I have defined a Neo Hookean material for comparison purposes between the different material definitions. According to theory, my parameters for an equivalent Neo Hook Elastic material with E=100000 [MPa] and 0.3 Poisson Ratio are :


According to manual : “Perfectly incompressible materials require the use of hybrid finite ele-
ments, in which the pressure is taken as an additional independent variable (in
addition to the displacements). CalculiX does not provide such elements. Con-
sequently, a slight amount of compressibility is required for CalculiX to work.
If the user inserts zero compressibility coefficients, CalculiX uses a default value
corresponding to an initial value of the Poisson coefficient of 0.475”

Poisson 0.3 and it’s corresponding D1 satisfy that condition.
Why is ccx changing my D1 parameter from 2.4E-11 [1/Pa] to 2.6E-12 [1/Pa]?

*WARNING reading *HYPERELASTIC: default value was used for compressibility coefficients
   D1 =  0.2600E-11  

Reversing that D1 value to it’s corresponding Poisson says that ccx default is using a Poisson Ratio = 0.499978 wich is not allowed. ???¿?

Any idea what could be wrong?

By the way, using ccx default value D1 delivers perfect agreement with a Plastic card but only with high Poisson ratio.



Seems like there is a bug when ccx read a D1 number smaller than 1E-10.
D1=1E-11 is read as zero and the default value is triggered.

@Disla It’s not really a bug, it’s the zero-test which has an arbitrary delta. I’d prefer if it was a fatal error to avoid confusion but it’s clearly intentional.

1 Like

Thank you Victor,

Would that mean the Elastic Range of plastic materials overrides the *Elastic section input to default Poisson Ratio (0.499 in this case) ?
There is no warning in the monitor when *PLASTIC is used.

By other hand it’s kind of weird that a value is not considered because it’s too small but then it’s replaced by an smaller one.

I can’t find any reference to “delta” nor “zero test” in the manual. ¿Could this be adjusted to a lower number with custom card?

There’s an *ELASTIC card with *HYPERELASTIC? I didn’t know you could do that.

How did you get

0.499978 wich is not allowed. ?

I get 0.4754 with D1=0.2600E-11 and C10=19230769200

With a smaller C10, the automatic D1 is bigger, and above the 1E-10 zero-threshold, so I imagine that theshold makes more sense for softer materials.

By “zero test” I meant that part you quotes “If the user inserts zero compressibility coefficients …”

If I understood that note on the manual Plastic is splitted into hyperelastic for the Elastic range and Plastic for the rest. ¿I was asking my self wich hyperlastic constant is ccx considering?


That’s weird. Maybe I have a mistake somewhere. I used Excel Simplex LP solver. This are my set of equations. Maybe there are different combinations of D1 and C10 that satisfy the solution or do I need increased accuracy. Direct input E and Nu gives me a different result than yours.

a 10% strain together with *ELASTIC is not coherent, so not very strange both results are different.

Sorry, I wasn’t following properly. I had no idea it used hyperelastic for plastic’s elastic!

The numbers are strange though. I did it in the other direction:

G = 2*C10
K = 2/D1
nu = (3K - 2G) / (6K + 2G) = 0.4754

As a check, I also get
E = 9KG / (3K+G) = 113500e6, not 100000e6 like you started with.

When I do that using your D1 and C10, I do get nu=0.4754, E=100000e6. So I guess everything is OK??

Me neither.
From now on I will forget about the pure elastic material. As @JuanP74 rightly pointed out, the discrepancy shown in the curve when NLGEOM is present is normal for high stains. Don Guido already anticipated it in his summary post. To avoid that, one can go to an hyperplastic material which I guess is what he is doing.

That’s what motivated my comparison.
In this case, as the range of the plastic material that @jalkorta proposed is all within the “elastic” range, I expected that it would behave like the equivalent hyperelastic material built from E=100000MPa and nu= 0.3 … but not.
That’s when I saw on the monitor that ccx was modifying the Neo Hook properties. ccx changes the Poisson ratio to the default value of 0.475.
I’ve looked in the code but I don’t have enough programming experience. I have only seen this as suspicious.

FILE “hyperelastics.f”.

    do i=1,3
            if(k.eq.0) exit
            if(dabs(elcon(k,j,nmat)).lt.1.d-10) then    <<<--------------------------------
     & '*WARNING reading *HYPERELASTIC: default value was'
               write(*,*) ' used for compressibility coefficient
               write(*,100) i,elcon(k,j,nmat)
 100 format(' D',i1,' = ',e11.4)

In general, for an hyperelastic material ( small E) , D1 is > 1E-10 and it’s not affected, but here, and almost any steel (E of the order of 200,000Mpa with Poisson Ratio =0.3) causes a lower value of D1<1E-10 and will be triggering the default value of 0.475.
That would make any steel defined as *plastic material practically incompressible in the entire elastic range.
Perhaps the note in the manual that says that plastic flow is isochoric refers to both , the elastic and plastic regime.???
Not sure if that was intentional or not.

Note: Sorry if my English is unclear. I’m not sure If I have managed to explain what doesn’t fit me.

That minimum D1 is only when you use the *HYPERELASTIC card, isn’t it? So maybe the hyperelastic it does for *PLASTIC may be fine with high E and 0.3 Poisson’s ratio?


This would be my proposal to explain the source of discrepancy between a Neo Hook material model and the elastic range of Plastic Material.

For comparison I have directly measure Young Modulus and Poisson Ration on my results.

1-Neo Hook material model is actually not suitable for high Young modulus models. The default compressibility value is triggered before it should be desired overriding the user input value.

The reason is explained in my previous post.

2-In a Neo Hookean material model, there is a close correspondence between the pairs (C10, D1) and (E , Nu). Changing D1 to it’s default value without adjusting C10 accordingly changes not only its equivalent Poisson ration but also it’s equivalent Young modulus. The model becomes much stiff.

3-Material defined directly as Plastic doesn’t seem to show any issue.

Abstract of my measures on four cubes 1x1x1 with the following material parameters:






EDITED: Fixed Final Step Young Modulus value. I was using the wrong strain measure to compute it. Doesn’t change the final conlcusion. Just confirms Young modulus remains “constant along the computation” as it should.


if I understood well, if you use MPa as units then you do not face this issue because 1.d-10 is low enough? or I am wrong?