Composite Pressure Vessel Problems

I have an application that creates motion programs for filament winding machines. A common application is the manufacture high performance composite pressure vessels. A complimentary software module create FEA models with the generated fibre architecture. Current support is for MSc Nastran, NX Nastran, Abaqus, LS-Dyna and ANSYS. I thought if might be interesting to see if we could make models to run in Calculix. The picture below shows a simple pressure cylinder with a single layer of material. It is interesting that the thickness and orientation is continuously variable over the domes so modelling by hand would be hard.

The picture below shows a example of the shell model (LS-Dyna data).

I created a software flavour to output for Calculix, the Abaqus inp file created thousand of errors due to unsupported options/differences to Abaqus etc but with some reading of the documents for the keywords I managed to reformat the output to remove all the errors. The problem I have is the solver does not create any output and just stops with no exit status information.

The output from the command window is pasted below. Any ideas how to debug? Maybe I have just done something dumb? I will try to add the .inp file later.

ccx_dynamic -i fea6_SH


CalculiX Version 2.22, Copyright(C) 1998-2024 Guido Dhondt
CalculiX comes with ABSOLUTELY NO WARRANTY. This is free
software, and you are welcome to redistribute it under
certain conditions, see gpl.htm


You are using an executable made on Sun Aug 4 19:44:24 2024

The numbers below are estimated upper bounds

number of:

nodes: 441210
elements: 4200
one-dimensional elements: 0
two-dimensional elements: 4200
integration points per element: 16
degrees of freedom per node: 3
layers per element: 2

distributed facial loads: 4200
distributed volumetric loads: 0
concentrated loads: 840
single point constraints: 303240
multiple point constraints: 504211
terms in all multiple point constraints: 3226441
tie constraints: 0
dependent nodes tied by cyclic constraints: 0
dependent nodes in pre-tension constraints: 0

sets: 4204
terms in all sets: 16940

materials: 1
constants per material and temperature: 9
temperature points per material: 1
plastic data points per material: 0

orientations: 16800
amplitudes: 4
data points in all amplitudes: 4
print requests: 0
transformations: 2
property cards: 0

STEP 1

*INFO reading *STEP: nonlinear geometric
effects are turned off

dir

12/10/2025 00:39 .
12/10/2025 00:27 ..
12/10/2025 00:39 193,522 fea6_SH.12d
12/10/2025 00:39 0 fea6_SH.cvg
12/10/2025 00:39 0 fea6_SH.dat
12/10/2025 00:38 2,144,171 fea6_SH.inp
12/10/2025 00:39 0 fea6_SH.sta

https://drive.google.com/file/d/1kCjpHBKvRunrXkBmo-xoWt5Bd-Bs5L98/view?usp=drive_link

That is a google drive to the .inp file I was trying to run.

You have to set access to “Anyone with the link” first and then copy and paste the link here.

I removed the file link permissions, I didn’t realise those were set.

CalculiX has different syntax for composite shell sections. In Abaqus, the syntax is:

*SHELL SECTION, ELSET=…, COMPOSITE
thickness, number_of_integration_points, material, orientation, ply_name

while CalculiX uses:

*SHELL SECTION, ELSET=…, COMPOSITE
thickness, , material, orientation

So try removing the unsupported items from each data line of the shell section definitions.

Also, BOUNDARY should have only node/nset and DOF range when defined prior to the *STEP.

And what are those zeros as node numbers in element definitions ?

*ELEMENT, TYPE=S8R, ELSET=esec000001
1, 1, 71, 72, 2, 0, 0, 0, 0

Many thanks for the reply some useful points.

I changed the shell section lines as suggested, the manual said the integration points value was not used so I had left it at 1 but it is now a blank field. I dropped the last parameter (ply id/global ply no). This change in itself does not seem to change the output / behaviour of the solver in my case.

The *BOUNDARY I removed the last field (zero displacement)
ns1,2,3
**ns1,2,3,0.0

This change also does not seem to change anything but I am not fully understanding your comment. The intention was zero displacement at that node set for any/all steps, do I need to move it?

The final comment is more fundamental the model formulation was originally with 4 node quads which it appears are not supported, I assumed (like some other systems) if the mid-side nodes were “0” the system would interpolate them. Is that a bad assumption? Calculix does not choke on it in a evident way (error message). I can look at that but that is a reasonable amount of additional work to test it.

All comments appreciated. Andrew

OK I moved * BOUNDARY I now have:

*STEP, nlgeom=NO
*STATIC
1., 1., 1e-05, 1.
**
*BOUNDARY
ns1,2,3,0.0
*BOUNDARY
ns2,2,2.0.0
**
** LOADS
**
** Name: Load-1 Type: Pressure
*DSLOAD
LSURF1, P, 1.0000
*CLOAD
ns2,3,113.165
**
** OUTPUT REQUESTS
**
*NODE FILE
RF, U
*EL FILE
S, E
*END STEP

I now get “*ERROR in allocation: at least one fatal error message while reading the input deck: CalculiX stops.” But am not wiser to the error is there a verbose mode or similar?

In CalculiX, there are homogeneous and inhomogeneous boundary conditions. The former are defined before the first *STEP and have the following syntax:

*BOUNDARY
node/nset, first_dof, last_dof

There’s no magnitude here because it’s always zero.

Then, inhomogeneous BCs are the ones defined within the step, and their syntax is:

*BOUNDARY
node/nset, first_dof, last_dof, magnitude

Of course, magnitude can be zero here, which results in an equivalent definition as homogeneous BC. Other definitions may pass the checks, but aren’t compliant with the syntax and should be used carefully.

I’m pretty sure that’s the source of the problem. CalculiX’s error messages cover only part of the possible keyword syntax mistakes. When it fails without errors, it’s either a bug or a less obvious syntax issue (likely in this case). Maybe you could try converting this mesh to second order by linear interpolation in some mesher such as Gmsh.

This typically means there’s a more specific error above. Here, it seems to say:

*ERROR reading *BOUNDARY. Card image:
NS2,2,2.0.0

And that’s because you have 2.0.0 (full stop instead of a comma).

1 Like

“And that’s because you have 2.0.0 (full stop instead of a comma).”

Good spot! This is the classic problem of hand modifying a deck, particularly fraught when the input validation has some holes. OK that fixed the obvious bomb out so now I will mod the code to generate the mid side nodes to see if that fixes it.

Thanks for the help so far.

CSC Conversion Time: 0.035912

Init Time: 0.998120
Factorize Time: 0.896791
Solve Time: 14.466326
Clean up Time: 0.000000

Sum: 16.397150

Total PaStiX Time: 29.513875
CCX without PaStiX Time: -0.615194
Share of PaStiX Time: 1.021288
Total Time: 28.898681
Reusability: 0 : 2


Using up to 1 cpu(s) for the stress calculation.

Job finished

It looks like those pesky mid-side nodes were a problem! I added new code to create the nodes and updated element topologies, I now need to see if I post-process and if the result make sense. I least for now “basic” feasibility seems to have advanced. Thanks for the help to far.

Well it seems to have done something that looks generally OK with an internal pressure load. The fixed end stayed fixed and the vessel expanded and elongated in a rotationally symmetric way! Good first attempt! More work now required to check and validate!

2 Likes