*BOUNDARY on DOF 8 in a structural model silently fixes the rotation about x (DOF 4) instead of giving an error

Summary

The manual documents DOF 8 in only two places:

  • as the static pressure in 3-D CFD (§6.9.19);
  • as the electric potential in electromagnetic calculations (§6.9.22).

For structures, *BOUNDARY (§7.4) lists DOFs 1–6 and 11. Internally ccx maps 8 onto its DOF 4 (§10.2.1), the slot that a structural node uses for the rotation about x.

In a structural model ccx accepts a *BOUNDARY on DOF 8 without any message, and the result depends on the node:

  • Shell or beam node: the rotation about x is held, or prescribed if a value is given.
  • Solid node: the line is ignored.
  • Plane-stress, plane-strain or axisymmetric node: ccx usually crashes. The outcome varies from run to run.

Version

ccx 2.23 (conda-forge build pl5321h484372f_2, macOS arm64). The DOF 8 mapping in bounadd.f is unchanged on master (9ba5d76c).

Already reported or fixed?

Not reported: there is no matching GitHub issue (open or closed) or open pull request in Dhondtguido/CalculiX, and no calculix.discourse.group topic (searched 17 Oct 2026). Not fixed: unchanged on master. conda-forge’s latest 2.23 build (pl5321hd17ca8b_8) gives the same results on shell, beam and solid nodes. On plane and axisymmetric nodes it no longer crashes (its fix-2d-rotational-dofs patch; open PR #200 covers that crash upstream).

Minimal input

job.inp:

** One S4 shell, clamped along the edge x=0 (nodes 1 and 4), corner load at node 3.
** The rotation about x at nodes 1 and 4 is given as DOF 8 instead of DOF 4.
*NODE
1,0.,0.,0.
2,1.,0.,0.
3,1.,1.,0.
4,0.,1.,0.
*NSET,NSET=NALL
1,2,3,4
*ELEMENT,TYPE=S4,ELSET=EALL
1,1,2,3,4
*MATERIAL,NAME=STEEL
*ELASTIC
210000.,0.3
*SHELL SECTION,ELSET=EALL,MATERIAL=STEEL
0.1
*BOUNDARY
1,1,3
1,5,6
1,8
4,1,3
4,5,6
4,8
*STEP
*STATIC
*CLOAD
3,3,1.
*NODE PRINT,NSET=NALL
U
*END STEP

How to run

OMP_NUM_THREADS=1 ccx job

Expected

An *ERROR, since DOF 8 has no meaning in a structural analysis. For example:

*ERROR reading *BOUNDARY: degree of freedom 8 can only be used
       in CFD and electromagnetic calculations

At the least there should be a *WARNING that the line is ignored. The solution would then be that of the deck without the two DOF 8 lines: U3 = 1.569850E-02 at node 3.

Actual

The job finishes with exit code 0 and no warning:

 STEP            1

 Static analysis was selected


 Job finished

The .dat file is byte-identical to that of the same deck with DOF 4 in place of DOF 8:

*BOUNDARY lines at nodes 1 and 4 U3 at node 3
1,8 / 4,8 (this deck) 1.450110E-02
1,4 / 4,4 1.450110E-02
no DOF 4 or DOF 8 line 1.569850E-02
1,8,8,0.01 / 4,8,8,0.01 1.494961E-02, the same as 1,4,4,0.01 / 4,4,4,0.01

Other element types:

  • B31: DOF 8 acts like DOF 4. An L-frame of two B31 elements is a torsional mechanism without a DOF 4 constraint at its support, yet it solves when DOF 8 is given, with the same .dat as with DOF 4.
  • C3D8: 7,8,8,0.5 on a node changes nothing and gives no message.
  • CPS4, CPE4, CAX4: 4,8 on a node ends differently from run to run. Over 6 runs of the CPS4 deck there were 5 bus errors (exit code 138) and 1 normal finish. Other runs gave a segmentation fault (139) or *ERROR in usermpc: mpc of type ... is unknown (201). This is the uninitialised mean-rotation path that DOFs 4–6 take on plane nodes, which open PR #200 addresses.

Where it goes wrong

bounadd.f maps DOF 8 onto DOF 4 for every node (master lines 109–110). It does not check the type of analysis or the elements at the node.

Workaround

Do not use DOF 8 in structural *BOUNDARY cards. If the rotation about x is meant, use DOF 4.

Confirmed (using official build of ccx 2.23 on Windows), needs a GitHub ticket.

CSC Conversion Time: 0.005352
Init Time: 0.064804
Factorize Time: 0.006282
Solve Time: 0.086747
Clean up Time: 0.000000
---------------------------------
Sum: 0.163185

Total PaStiX Time: 0.163185
CCX without PaStiX Time: 0.039652
Share of PaStiX Time: 0.804514
Total Time: 0.202836
Reusability: 0 : 1
________________________________________

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


 Job finished

________________________________________

Total CalculiX Time: 0.218138
________________________________________

@Sandervdb This one is left to report on GitHub.

Sorry, I posted it on github but forgot to report it back here :smiley: *BOUNDARY on DOF 8 in a structural model silently fixes the rotation about x (DOF 4) instead of giving an error · Issue #219 · Dhondtguido/CalculiX · GitHub

1 Like