Crack propagation simulation using CalculiX as a solver

I do not know how much interest is for simulating crack propagation using CalculiX as a solver. For those interested in the subject, I am able to simulate explicitly fatigue crack growth in 3D geometries. Each model generated in the simulation process is solved with CalculiX. For verification purposes, I solved the same problem with Abaqus and Ansys. All three solutions match. I also compared the prediction (crack path) against experimental data for validation purposes. I attached a picture showing the comparison.


Hello there. Interesting. Which criterion are you using to determine the direction of the crack growth? Would be nice to share the paper you are referring to and how this is modelled in Abaqus.

Personally, I use the phase-field approach to fracture to model crack propagation problems, since it can handle both branching and merging of cracks in a quite elegant manner. Neither remeshing nor ad-hoc criteria is needed since everything is a result of the strain and fracture energies written in a variational format. The “con”? One needs an extra element to handle the new degree of freedom related to the crack (damage) and there are several variants to implement this “monolithic” or “staggered” (decoupled), other solvers than N-R, etc…

I would be happy to implement this in calculix since I have now this as in-house routines, which are proven to work. Since I do this in my “free time” at the moment and I am not super familiar with the calculix code structure, I would be glad if someone else who knows the structure very well would be willing to assist. It would be nice since other tools have XFEM and other methods to model crack popagation. To my knowledge, none of these have phase-field at the moment. Let me know if some interest sparkles @dhondt and the crew!.



I am using the classical maximum tangential stress criteria for direction and Paris relationship to compute remaining useful life. I can use Ansys, Abaqus and Calculix to perform 3D crack propagation simulations.
I do have several presentations showing the development along with validation and verification requirements:

I understand the advantage of the phase-field approach but my goal is to provide modeling capabilities that would allow performing component (3D) level assessments and leveraging all modeling capabilities a finite element package offers. The remeshing technique that I am using employs CAD models, provides a mesh containing a crack (or multiple), maintains CAD-mesh relationship and I can make use of any modeling (pre-processing, solution, post-processing) capabilities that are already available in Ansys, Abaqus or CalculiX.

1 Like

Ok, good. I understand.
If you have plans to make it public (or if you have done it already), I would be the first interested in looking through your workflow in more detail.
Nice work, Adrian!

1 Like

Thank you John.
If you desire more workflow info, I have a webinar on techbriefs:

Today, I am holding another webinar:
I just hope the two webinars provide some level of detail related to the workflow. If there still are questions, just let me know.


1 Like

Thanks, Adrian. I saw this a bit late, since I’m at European time. But I can see they are on demand. Will look at them later on.

1 Like


When I compile 2.17, I got an error message saying Undefined reference to ‘crackpropagation’ in CalculiXstep.c. I am wondering if it is the code to do this. But I can’t find where it is.



Hi Cean
I am using CalculiX to solve each finite element model generated in the crack propagation simulation. The driver is SimModeler.

Hi Adrian,

Here is the code in CalculiXstep.c . I don’t know if it is the part that solve your model, but it stops me to generate ccx.exe. The detail of this crackpropagation() function is nowhere to be found.


else if(*nmethod==15){


Hi Cean,
I am not familiar with CalculiX functions. You need to wait until the moderator will get back to you.

I commented that line out and got ccx.exe.
Tried to solve an example inp file and it works.

Does SimModeler generate an inp file and then CalculiX solves it? Which solver your choose?

/* nmethod=1: static analysis   */
/* nmethod=2: frequency analysis  */
/* nmethod=3: buckling analysis */
/* nmethod=4: (linear or nonlinear) dynamic analysis */
/* nmethod=5: steady state dynamics analysis */
/* nmethod=6: Coriolis frequency calculation */
/* nmethod=7: flutter frequency calculation */
/* nmethod=8:  magnetostatics */
/* nmethod=9:  magnetodynamics */
/* nmethod=10: electromagnetic eigenvalue problems */
/* nmethod=11: superelement creation */
/* nmethod=12: sensitivity analysis  */
/* nmethod=13: Green function calculation */
/* nmethod=14: Robustness w.r.t. to geometric tolerances */

nmethod=15 is not listed on it.

Hi Cean
Yes, SimModeler writes inp files for CalculiX. Each model is solved in batch mode.
The default solver is static.
Once you have the CalculiX inp files you can edit them and assign a different solver if you wish. I never did it in CalculiX though. I am an Ansys user and in Ansys it is easy to modify the analysis type.

It’s easy for me to use a text editor to change the key word.

After feeding your inp into CalculiX, CalculiX does one step static calculation, then feed the result back to SimModeler. SimModeler does the propagation, and let CalculiX do calculation again.
Is this what you mean using CalculiX as a solver?

I have seen only one crack simulation, it is from Nastran-95. NASTRAN-95/d06011a.txt at master · nasa/NASTRAN-95 (
The crack is in the middle. I don’t know if it also could treat crack at an edge. Also if the Piecewise Linear Analysis still used today?

Combine Mesh and Result with FreeCAD’s Link actions : fea (

Hi Cean,
Yes, your statement is correct “After feeding your inp into CalculiX, CalculiX does one step static calculation, then feed the result back to SimModeler. SimModeler does the propagation, and let CalculiX do calculation again”.

For more info, just access the webinars that I posted in this thread.

I think CalculiX will do the propagation with this crackpropagation() function.