# Axisymmetric elements: radial RF picks up the hoop force of the 2° segment, so one CAX4 shows 0.38 of the reaction and free, unloaded nodes show RF

**URL:** <https://calculix.discourse.group/t/axisymmetric-elements-radial-rf-picks-up-the-hoop-force-of-the-2-segment-so-one-cax4-shows-0-38-of-the-reaction-and-free-unloaded-nodes-show-rf/4205>\
**Category:** Analysis issues\
**Created:** [October 21, 2026, 6:53pm UTC](https://calculix.discourse.group/t/axisymmetric-elements-radial-rf-picks-up-the-hoop-force-of-the-2-segment-so-one-cax4-shows-0-38-of-the-reaction-and-free-unloaded-nodes-show-rf/4205 "2026-10-21T18:53:47Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sandervdb](https://avatars.discourse-cdn.com/v4/letter/s/49beb7/32.png) [@Sandervdb](https://calculix.discourse.group/u/Sandervdb)\
**Post date:** [October 21, 2026, 6:53pm UTC](https://calculix.discourse.group/t/axisymmetric-elements-radial-rf-picks-up-the-hoop-force-of-the-2-segment-so-one-cax4-shows-0-38-of-the-reaction-and-free-unloaded-nodes-show-rf/4205/1 "2026-10-21T18:53:47Z")

</div>

## Summary

The manual defines RF as the sum of the external forces in a node, i.e. loads plus reactions: section 6.11.5 (Forces obtained by selecting RF) of the 2.23 manual says “With RF you get the sum of all external forces in a node” (see also section 7.99, \*NODE PRINT). For axisymmetric elements (CAX4, CAX8, CAX8R) the radial component of RF in ccx 2.23 is not that:

- at a node under a prescribed radial displacement, RF is a mesh-dependent fraction of the reaction: 0.381 of it on one CAX4 element, rising to 0.95 on 16 elements in the same ring;
- at free, unloaded nodes RF is not zero.

Both the `.dat` file (`*NODE PRINT`) and the `.frd` file (`*NODE FILE`) are affected. The axial component is right. The displacements are right; only the force output is off.

The cause is the mapping of the forces from the expanded 2° segment back to the 2-D nodes: it adds the global x, y, z components of the two expansion nodes, which sit at ±1°. Their forces also contain the hoop force acting on the cut faces of the segment. The x components of those hoop forces add up instead of cancelling.

## Version

ccx 2.23 (macOS arm64). Source: master 9ba5d76 (16 Oct 2026).

## Already reported or fixed?

Not reported: I found no matching GitHub issue (open or closed) or pull request in Dhondtguido/CalculiX, and no calculix.discourse.group topic (searched 21 Oct 2026). Not fixed: `map3dto1d2d.f` is unchanged on master (9ba5d76).

Related:

- [RF axisymmetric with OUTPUT 3D](https://calculix.discourse.group/t/3780) (RF axisymmetric with OUTPUT 3D): about the 2° versus 360° scale of RF, which the \*NODE FILE section documents. Its last post suggests documenting the scale for \*NODE PRINT too: `*NODE PRINT` prints RF for the 2° segment while `*NODE FILE` (OUTPUT=2D) stores it for 360° (`frd.c` line 1524 multiplies by 180). That scale is not the error reported here; the numbers below are compared at the matching scale.
- [Force ouput of 2D asymmetric compression model less than experimental value](https://calculix.discourse.group/t/1973) (O-ring compression, CAX elements): the axial reaction looked 180 times too small, again the 2° scale. It concerns the axial component, which is right here.
- [Technical Proposal: Implementation of Independent Reaction Force Output in CalculiX · Issue #146 · Dhondtguido/CalculiX · GitHub](https://github.com/Dhondtguido/CalculiX/issues/146), [Technical Proposal: Implementation of Independent Reaction Force Output and summary of applied and reaction forces in CalculiX · Issue #224 · Dhondtguido/CalculiX · GitHub](https://github.com/Dhondtguido/CalculiX/issues/224) and PR [Output only reaction forces. by g0mb4 · Pull Request #154 · Dhondtguido/CalculiX · GitHub](https://github.com/Dhondtguido/CalculiX/pull/154) ask for a separate reaction-only output; they do not concern axisymmetric elements. In the forum thread of that pull request, [Output reaction forces only - #37 by vicmw](https://calculix.discourse.group/t/3809/37) lists axisymmetric models among the cases such an output must be checked on; no axisymmetric result is reported there.

## Minimal input

`cax_rf.inp`:

```auto
** one CAX4 ring element, r 10 to 20, height 5; all nodes held axially;
** inner nodes 1 and 4 pushed out by the displacement that a pressure of 1
** on the inner face gives (cax_p.inp)
*NODE, NSET=NALL
1, 10., 0.
2, 20., 0.
3, 20., 5.
4, 10., 5.
*ELEMENT, TYPE=CAX4, ELSET=EALL
1, 1, 2, 3, 4
*NSET, NSET=INNER
1, 4
*MATERIAL, NAME=M
*ELASTIC
210000., 0.3
*SOLID SECTION, ELSET=EALL, MATERIAL=M
*BOUNDARY
NALL, 2, 2
*STEP
*STATIC
*BOUNDARY
INNER, 1, 1, 8.098171E-05
*NODE PRINT, NSET=NALL
RF
*NODE PRINT, NSET=INNER, TOTALS=ONLY
RF
*NODE FILE
RF
*END STEP

```

`cax_p.inp` is the same model under load control: the step’s `*BOUNDARY` card and its line `INNER, 1, 1, 8.098171E-05` are replaced by

```auto
*DLOAD
1, P4, 1.
*NODE PRINT, NSET=INNER
U

```

## How to run

```auto
ccx cax_p
ccx cax_rf

```

## Expected

`cax_p` gives the inner displacement used in `cax_rf`:

```auto
         1 8.098171E-05 0.000000E+00 0.000000E+00
         4 8.098171E-05 0.000000E+00 0.000000E+00

```

The model is linear and both runs have the same stiffness, so the reaction in `cax_rf` equals the load of `cax_p`: a pressure of 1 on the inner face, 2π · 10 · 5 = 314.159 for the full circumference, or 314.159 / 180 = 1.74533 for the 2° segment. The outer nodes 2 and 3 are free and unloaded, so their RF is 0.

## Actual

`.dat` (2° segment):

```auto
 forces (fx,fy,fz) for set NALL and time 0.1000000E+01

         1 3.326568E-01 -7.215169E-01 1.776357E-15
         2 -3.326568E-01 -3.253086E-01 1.776357E-15
         3 -3.326568E-01 3.253086E-01 -3.552714E-15
         4 3.326568E-01 7.215169E-01 1.776357E-15

 total force (fx,fy,fz) for set INNER and time 0.1000000E+01

        6.653136E-01 -1.554312E-15 3.552714E-15

```

`.frd` (360°):

```auto
 -1 1 5.98782E+01-1.29873E+02 3.23411E-13
 -1 2-5.98782E+01-5.85555E+01 3.16078E-13
 -1 3-5.98782E+01 5.85555E+01-6.43155E-13
 -1 4 5.98782E+01 1.29873E+02 3.23411E-13

```

- Inner reaction: 0.6653136 instead of 1.74533 (`.dat`), 2 × 59.8782 = 119.756 instead of 314.159 (`.frd`): 0.381 of the reaction in both files.
- Outer nodes 2 and 3 (free, unloaded): radial RF −0.3326568 (`.dat`) and −59.8782 (`.frd`) instead of 0.

The same test on the same ring with more elements in the radial direction gives an inner reaction of 0.642 (2 CAX4), 0.807 (4), 0.949 (16) of the true value; CAX8R gives 0.759, 0.868, 0.932 and 0.983 on 1, 2, 4 and 16 elements, although its inner displacement under the pressure is the same to seven digits on all four meshes. Each mesh divides the ring (r 10 to 20, height 5) into n equal elements in r: CAX4 nodes at r = 10 + 10 i / n, z = 0 and 5; CAX8R adds the midside nodes (r halfway, z = 0 and 5; r on the element edges, z = 2.5). Each mesh runs twice: first with the pressure `1, P4, 1.` on the inner face of element 1, which gives the inner radial displacement u, then with u prescribed on the inner nodes (r = 10) as in `cax_rf.inp`, and with `*NODE PRINT, NSET=INNER, TOTALS=YES` / `U, RF`. The ratio is the total inner RF over the 2° share of the pressure load, 314.159 / 180 = 1.74533.

> **cax4\_2.inp: the two-element CAX4 mesh with the prescribed displacement**
>
> ```auto
> *NODE, NSET=NALL
> 1, 10, 0
> 2, 15, 0
> 3, 15, 5
> 4, 10, 5
> 5, 20, 0
> 6, 20, 5
> *ELEMENT, TYPE=CAX4, ELSET=EALL
> 1, 1, 2, 3, 4
> 2, 2, 5, 6, 3
> *NSET, NSET=INNER
> 1, 4
> *MATERIAL, NAME=M
> *ELASTIC
> 210000., 0.3
> *SOLID SECTION, ELSET=EALL, MATERIAL=M
> *BOUNDARY
> NALL, 2, 2
> *STEP
> *STATIC
> *BOUNDARY
> INNER, 1, 1, 8.750486000000e-05
> *NODE PRINT, NSET=INNER, TOTALS=YES
> U, RF
> *END STEP
> 
> ```
> 
> Total inner RF 1.119697 = 0.64154 × 1.74533.

The axial RF is right: one CAX4 ring under an axial `*CLOAD` of 1000 (full circumference: 500 at each top node) has an axial RF total of −5.555556 (`.dat`, 2°) at its held nodes, i.e. −1000 / 180.

> **axial\_cload.inp**
>
> ```auto
> *NODE, NSET=NALL
> 1, 10., 0.
> 2, 20., 0.
> 3, 20., 5.
> 4, 10., 5.
> *ELEMENT, TYPE=CAX4, ELSET=EALL
> 1, 1, 2, 3, 4
> *NSET, NSET=BOT
> 1, 2
> *NSET, NSET=TOP
> 3, 4
> *MATERIAL, NAME=M
> *ELASTIC
> 210000., 0.
> *SOLID SECTION, ELSET=EALL, MATERIAL=M
> *BOUNDARY
> BOT, 2, 2
> 1, 1, 1
> *STEP
> *STATIC
> *CLOAD
> TOP, 2, 500.
> *NODE PRINT, NSET=BOT, TOTALS=YES
> RF
> *NODE PRINT, NSET=TOP
> U
> *END STEP
> 
> ```
> 
> `*NODE PRINT` total for BOT: 2.553151E-02, −5.555556E+00, 6.661338E-16.

## Where it goes wrong

`*NODE FILE, OUTPUT=3D` shows the forces in the expanded 2° segment. For `cax_rf` with `*NODE FILE` changed to `*NODE FILE, OUTPUT=3D`, the inner expansion nodes 5 and 14 (at −1°) and 7 and 16 (at +1°) carry:

```auto
 -1 5 1.66328E-01-3.60758E-01-1.54634E+01
 -1 7 1.66328E-01-3.60758E-01 1.54634E+01
 -1 8-1.66328E-01-1.62654E-01-9.52895E+00

```

The large z components are the hoop forces on the two cut faces of the segment. Projected on each node’s own radial direction (cos 1°, 0, ∓sin 1°), the inner nodes carry 0.166328 cos 1° + 15.4634 sin 1° = 0.436176 each: 4 × 0.436176 = 1.744705 for the segment, 314.047 for 360°, within 0.04 % of 314.159. The outer nodes carry −0.166328 cos 1° + 9.52895 sin 1° ≈ 4E-07, i.e. zero. So the expanded model has the right reaction.

`src/map3dto1d2d.f` (called for the forces from `src/resultsprint.f` line 223) maps them to the 2-D nodes by adding the components of the two expansion nodes, lines 561-571:

```fortran
! middle nodes of quadratic 2d-elements
! or end nodes of linear 2d-elements
                     do l=1,3,2
                        node3d=kon(indexe+node8(l,j))
                        if(inum(node3d).ne.0) cycle
                        inum(node3d)=1
                        do k=1,nfield
                           yn(k,node2d)=yn(k,node2d)+yn(k,node3d)
                        enddo
                     enddo

```

For plane stress and plane strain elements the two expansion nodes are parallel copies, and this sum is right. For axisymmetric elements they are rotated by ±1° about the y axis (`src/gen3dfrom2d.f` lines 301-313), so x of the sum is 2 f\_r cos 1° − 2 f\_hoop sin 1°: the hoop force term is the error. It shrinks with the element size along r, as observed.

## Fix

Possible fix (not built or tested): in `map3dto1d2d.f`, for axisymmetric elements, sum the expansion nodes’ forces in their own cylindrical axes, i.e. take f\_x cos 1° ∓ f\_z sin 1° as the radial part and f\_y as the axial part, and drop the hoop part (the circumferential displacement is constrained). The same applies to the quadratic elements (lines 547-558, three nodes through the segment).

Workaround: take radial reactions of axisymmetric models from `*NODE FILE, OUTPUT=3D` projected on the radial direction as above, or from a load-controlled run.

---

<div class="post-metadata">

**Author:** ![Calc\_em](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@Calc\_em](https://calculix.discourse.group/u/Calc_em)\
**Post date:** [October 21, 2026, 8:02pm UTC](https://calculix.discourse.group/t/axisymmetric-elements-radial-rf-picks-up-the-hoop-force-of-the-2-segment-so-one-cax4-shows-0-38-of-the-reaction-and-free-unloaded-nodes-show-rf/4205/2 "2026-10-21T20:02:31Z")

</div>

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

cax\_p.dat:

```auto
                        S T E P 1

                                INCREMENT 1

 displacements (vx,vy,vz) for set INNER and time 0.1000000E+01

         1 8.098171E-05 0.000000E+00 0.000000E+00
         4 8.098171E-05 0.000000E+00 0.000000E+00

 forces (fx,fy,fz) for set NALL and time 0.1000000E+01

         1 3.327075E-01 -7.216268E-01 -1.776357E-15
         2 -3.327075E-01 -3.253581E-01 1.776357E-15
         3 -3.327075E-01 3.253581E-01 1.776357E-15
         4 3.327075E-01 7.216268E-01 -5.329071E-15

 total force (fx,fy,fz) for set INNER and time 0.1000000E+01

        6.654149E-01 9.992007E-16 -7.105427E-15

```

---

<div class="post-metadata">

**Author:** ![Sandervdb](https://avatars.discourse-cdn.com/v4/letter/s/49beb7/32.png) [@Sandervdb](https://calculix.discourse.group/u/Sandervdb)\
**Post date:** [October 22, 2026, 7:22am UTC](https://calculix.discourse.group/t/axisymmetric-elements-radial-rf-picks-up-the-hoop-force-of-the-2-segment-so-one-cax4-shows-0-38-of-the-reaction-and-free-unloaded-nodes-show-rf/4205/3 "2026-10-22T07:22:17Z")

</div>

Posted: [Axisymmetric elements: radial RF picks up the hoop force of the 2° segment, so one CAX4 shows 0.38 of the reaction and free, unloaded nodes show RF · Issue #229 · Dhondtguido/CalculiX · GitHub](https://github.com/Dhondtguido/CalculiX/issues/229)
