The regression scene of 2026-10-05: a frictionless 6x6 cloth patch (20 g per vertex) resting on a fixed level 12x12 plate, ALM-DAT self-contact, margin 20 mm, gap 10 mm, K = 1000 N/m, 6 iterations, 60 Hz, 4 s. Four runs: the contact force along the stored plane normal (the design note) or along the closest-point direction (the penalty path), each with the penalty-metric floor at K on (today's default) or off (rho = m/dt² = 72 N/m, the host's support rule). Built 2026-11-05 from notes/alm-dat-force-direction/demo.py on ankac/alm-dat-main.
plane normal, floor on: 0.6 cm
closest point, floor on: 0.6 cm
plane normal, floor off: 47.3 cm
closest point, floor off: 12.2 cm
The patch outline over the plate, all four runs on the same clock; the dashed outline is the start position.
At 1 s, for the free vertex with the largest lateral push, every contact row it has with the plate: the stored plane normal (dashed red) and the closest-point direction (green), and the summed row forces under each convention with that run's multipliers and gaps. On the current base the two sets of arrows coincide: the separator search takes the closest-point axis as its first candidate and keeps it when it certifies the pair, so for a resting patch the certified normal is the closest-point direction. The normals lean 11 to 16 degrees because a vertex has rows with the neighbouring triangles of the triangulated plate, not only with the one below it; those lateral components cancel to about 1 mN over the patch, against a weight of 9.6 N.
Tilt from the vertical of the stored plane normals (red) and the closest-point directions (green), all rows of the free patch at 1 s. The bars overlap exactly in the floor-on runs. In the floor-off runs the patch is already sliding at 1 s, so its rows pair with other triangles and the tilts are larger.
| floor on, rho = K = 1000 N/m | floor off, rho = m/dt² = 72 N/m | |
|---|---|---|
| force along the plane normal | 0.6 cm, settled | 47.3 cm, still moving |
| force along the closest-point direction | 0.6 cm, settled | 12.2 cm, still moving |
particle_contact_alm_force_direction keeps both for the review.