Part VI
Verification
D. Nonlinear supports · Friction with a derived normal force
A straight member 1.0 mm long, with an axial stiffness of 100.0 N/mm, is fixed at one end. The other end can move only along the member’s axis. That end sits on a friction support with μ = 0.30 and is pushed along the axis by 10.0 N. No normal force is given. Instead the same end is held in the transverse y direction and loaded there by −100.0 N, and the friction support must take its normal force from the reaction at that restraint. Does the support hold?
1.Inputs.
Illustrative values, taken from no standard and chosen so the arithmetic can be followed by hand. Most do not describe a real pipe; read them in any consistent set of units.
| Quantity | Symbol | Value |
|---|---|---|
| Node count | — | 2 |
| Member length | L | 1.0 mm |
| Axial stiffness | k | 100.0 N/mm |
| Applied axial (friction-direction) force | Fx | 10.0 N |
| Applied normal-direction force | Fy | −100.0 N |
| Friction coefficient | μ | 0.30 |
| Normal source | — | node 1, Uy restraint |
| Maximum iterations | — | 4 |
| Active-set residual tolerance | — | 0.0 (count) |
| Initial state | — | sticking |
2.Method.
The sticking support restrains the axial degree of freedom, and the transverse degree of freedom at the same node is restrained as well. One linear solve gives a transverse reaction of 100.0 N against the −100.0 N load. The friction support takes the absolute value of that named reaction as its normal force.
The friction limit is then 0.30 × 100.0 = 30.0 N. The axial reaction is −10.0 N, well inside the limit, so the support stays sticking and nothing changes state on the first iteration.
The normal force comes only from the restraint the case names. No default normal force is supplied.
3.Results.
| Quantity | Expected |
|---|---|
| Derived normal reaction | 100.0 N |
| Tangential reaction | −10.0 N |
| Iteration count | 1 |
| Final changed-support count | 0.0 |
| Final state | sticking |
| Converged | true |
The tests check that:
- The solve converges in exactly 1 iteration, ending with the support still sticking and a changed-support count of 0.
- The derived normal reaction and the tangential reaction are worked in the reference but are not compared as numbers; the tests check them through the resulting state and iteration count.
- At the final iteration the out-of-balance force, moment and work at the free degrees of freedom are all exactly 0.0.
- The solve carries no notice that its tolerance is unset.
- With only one iteration there is no previous result, so no displacement change is recorded.
What it shows. Compared with an independent hand calculation.
Path exercised. The benchmark calls the solver’s components directly: elements, loads, frame solver and stress recovery. It does not go through the program’s own model-to-solve path.
Agreement. The loop counts as converged only when no support changes state from one iteration to the next: the changed-support count must reach exactly 0, with no relative or absolute allowance, within at most 4 iterations. At the final iteration the out-of-balance force, moment and work at the free degrees of freedom must be 0.0, and the change in displacement and reaction over the last iteration must stay inside a recorded envelope. Long values are shown here to seven significant figures; the tests compare the full values in the record.
A friction support has no normal force of its own. Here it borrows one from the reaction at another restraint, so its friction limit depends on the rest of the solution rather than on a fixed input.
4.Run it yourself.
cd projects/chirality-piping cargo test --manifest-path validation/benchmarks/nonlinear/Cargo.toml assembled_global_loop_seed_cases_converge_under_governed_policy cargo test --manifest-path validation/benchmarks/nonlinear/Cargo.toml assembled_convergence_observations_record_measured_fixture_values_only cargo test --manifest-path validation/benchmarks/nonlinear/Cargo.toml assembled_force_displacement_residual_observations_use_free_dof_force_moment_thresholds
Hand calculation:
validation/hand_calcs/nonlinear/assembled_friction_derived_normal.md.
Test record, with the recorded run of 2026-07-10:
nl-assembled-friction-derived-normal-original.md.