Contact stiffness setting

Hello Everybody

I have a question regarding the value you choose for the contact stiffness in your simulation.

By comparing my results obtained with ccx to ansys, I have found, that in order to get similar results to ansys I need to increase the contact stiffness settings to quite high values - at least compared to the recommendation of the manual (5 to 50 times young’s modulus).

Using values this low and analyzing the contacts, I see that my contacts in ccx are way too soft and that the elements penetrate each other much more than in ansys.

Is there a better way to estimate the contact stiffness needed than the rule of thumb of the manual?
It seems a bit impractical to run many simulations after each other and to tune these contact values for each model.

edit: I am comparing a 2D case, not sure if this matters

Thank you for your insights

Not that I’m aware of (sorry). I faced a similar issue some time ago with compressing a “soft” rubber-like part. I had to do several adjustments to the contact stiffness and also friction.

Definitely. The worst part is that you actually have to look at the results to evaluate the inter-element penetrations, not sure if there is a way to automate this.

For the linear pressure-overclosure option, you can get a feeling for the value by thinking of it as a layer of elastic material (blue in attached picture) between the two parts. Imagine it has a thickness and Young’s modulus that will cause negligible relative displacement (eg. a thin steel shim between two large steel parts) and calculate the stiffness as that layer’s Young’s modulus / thickness.

Perhaps a simpler way to think of it - how much extra thickness can you add to one of the two parts without significantly altering its stiffness in the direction normal to the contact surface? Calculate the contact stiffness as E/t where E is the part’s E and t is the extra thickness.

The recommendation of


isn’t generally valid because the appropriate value also depends on the scale of the objects. Also, the units aren’t consistent. I recommend to start with


where L is some characteristic length that I can’t quite define, but maybe the thickness of the parts. Then increase it by a factor of 100 or 1000 if you need to. Starting too low rather than too high saves frustration because if it’s wrong, it still gives a solution quickly and you can see the problem of penetration whereas starting too high can leave you waiting hours for the solver to eventually fail with no clue about what went wrong.


Thank you for the explanation and suggestions. It makes sense that the 50 x E is not generally valid.

I guess that some trial and error is necessary and unavoidable with the contact definitions.

This is a really interesting topic for me.
I wonder, how can you decide that your model has to be adjusted? What are the criteria for that?
Ok, that the solver can not solve the problem is an obvious reason but what else? especially if I have no experiment data to compare with?

1 Like

The error in displacement due to contact stiffness is the relative displacement available with:


or from the difference in displacements of the two parts.

How much error is acceptable depends on the application. For example, in an interference fit, a small error in displacement would cause a large error in strain so you might need a high contact stiffness. But if the contact is supporting a part that’s loaded by a force rather than another constraint, then you might be able to just eyeball the deformed view to make sure it’s position is within whatever loose tolerance you need since error in displacement may have no effect on the stress due to the applied force.

CCX 2.17 has the new mortar contact which seems to perform better and maybe doesn’t even need you to choose a contact stiffness??


I used cgx and studied the result COPEN. From my understanding it shows how much the contact is open (pos. values) or penetrating (neg. values).

1 Like

Thank you for sharing your guidance for contact stiffness, I’ve been puzzled by how to visualise this for some time.
Much appreciated

Thank you for asking the question and sharing your findings.

I think this is an appropriate thread to attach this to

I’ve been working on simulating a dynamic explicit contact problem in calculix and have been running into some issues with the “hard” penalty which just defaults to a linear penalty with a very high stiffness. The high contact stiffness makes the simulation unstable. I could reduce the time increment, but then the simulation would take weeks (the equivalent abaqus simulation with their “hard” penalty contact takes <5 hrs). I have also tried reducing the contact stiffness such that the stability limit isn’t severely affected, but then unrealistically large overlap occurs (the abaqus simulation has very little if any observable overlap)

Part of the abaqus documentation for their “hard” contact states:

“For hard penalty contact, default penalty stiffnesses are chosen such that the stable time increments of the deformable parent elements of contact surface facets are effectively reduced by approximately 4% for increments in which contact forces are being transmitted; default penalty stiffnesses of node-based surface nodes require a 1% decrease in the element-by-element time increment to ensure numerical stability.”

Does anyone have any idea how to automatically choose such a penalty stiffness? Or does anyone know of any literature that would describe the abaqus “general contact” algorithm. I’m happy to try to develop some new Calculix options if I had a good place to start from.


1 Like

Came to the party late here, but one more thing to consider. For press fits, the error in penetration will directly impact your interference value and will have a meaningful impact on your results. For example, if you allow a 0.01 mm penetration with your contact stiffness and your press fit interference is 0.1 mm, you will introduce a 10% error. However, if you have a block sitting on a table and model the contact between the two, gravity will be gravity the load will pass through to the table, and the error will be minimal due to the penetration. This is the difference between a displacement controlled and load controlled problem.

Since setting contact stiffness is a matter of setting it stiff enough that it does not impact your problem but not so stiff that you can’t converge - get in the habit of roughly knowing the loads you are passing through so that you can set the contact stiffness just high enough to keep it in the third decimal place of compression.


JohnM, thanks for this comment. This could be a good solution to evaluate whether the stiffness is appropriate without comparing to another FEA solver.

1 Like