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.5on a node changes nothing and gives no message. - CPS4, CPE4, CAX4:
4,8on 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.