Part VI
Verification
D. Nonlinear supports · Friction support that holds
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 rests on a friction support with μ = 0.30 and a given normal reaction of 100.0 N, and is pushed along the axis by 10.0 N. The support starts sticking. Is the friction enough to hold the push? This is the counterpart of the break-away case, with a larger normal force.
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 force | F | 10.0 N |
| Friction coefficient | μ | 0.30 |
| Normal reaction (given) | N | 100.0 N |
| Maximum iterations | — | 4 |
| Active-set residual tolerance | — | 0.0 (count) |
| Initial state | — | sticking |
2.Method.
While sticking, the support restrains the end, and one solve gives a tangential reaction of −10.0 N. The friction limit is 0.30 × 100.0 = 30.0 N, so the reaction is well within it. The support stays sticking, nothing changes state, and the loop converges on the first iteration.
The normal reaction is a given input. The case does not model where it comes from.
3.Results.
| Quantity | Expected |
|---|---|
| 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 tangential reaction is worked in the reference but is not compared as a number; the tests check it 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.
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_sticking.md.
Test record, with the recorded run of 2026-07-10:
nl-assembled-friction-stick-original.md.