FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
0395 — RbCable/Cable joints relax over about 1000 s: the Baumgarte beta is a time where a rate is needed
ID 0395
Class BUG
Severity 2
Status ready

Models: RbCable/Cable

Found: 2026-10-16, feature seabed-pins (plan D1 phase 0; analysis features/seabed-pins/rbcable-stiffness.md, confirmed by three runs on 553ffc6)

Decision: owner ruling 2026-10-16: fix in D1 (feature seabed-pins/seabed-law), option C. The owner chose option C, with these rulings 2026-10-16: (1) the joint model is an explicit bending moment M = EI·κ, computed from the joint angle and applied as a force; the joints keep only position constraints. (2) EI is a new user parameter; its default is today's loose 1×7 strand value E·7πD⁴/5184. (3) Timing: D1 phase 2, together with the other law switches; phase 1 stays bit for bit. (4) Owner ruling 2026-10-16: the moment also gets bending damping M_d = c_b·θ̇ with ζ_b = 0.05; c_b follows from EI and the element inertia, no new input. Nothing is fixed here yet. Rejected: A (beta as a rate, keep epsilon = beta^2/k: the axial rows become stiff springs near the explicit stability limit at 1 ms), B (hard axial joints plus rate-based soft bending rows: more change than C), D (keep and document a quasi-rigid cable with relaxation time about 1.1 updateFreq s: the seabed pins would rest on a frozen initial shape).

Evidence

src/RMCable/Cable.cpp:86-95: m_betaN = 1 / updateFreq (and m_betaM = m_betaT = 1 / (updateFreq stabilityFactor)), with m_epsilon* = beta^2 L / (2 E I N). The right-hand side of the constraint solve (:665-710) uses beta^2 c as an acceleration, so beta has to be a rate (1/s). With updateFreq 1000, beta = 1e-3 s, so each joint relaxes over about 1/beta = 1000 s and the chain keeps its initial shape. The static law does not depend on beta: lambda = -(beta^2/epsilon) c = -(2EI/l) sin(theta/2) n.

Runs (FhSim of an ME build at 553ffc6, inputs changed only, no code change; run 3 had a temporary print in a throw-away copy, since removed):

  1. Seabed case: CableRM_SeabedRegression_in.xml with the ends at z = 8 m, depth 10 m, no current, Euler_i 1 ms, TEnd 10. Deepest element z (initial 10.6176 m, the seabed at 10 m):
    • updateFreq 1000: 10.61763 m at 0 s, 10.61762 m at 10 s. Frozen (the deepest element changes by 1e-5 m).
    • updateFreq 1: 10.465 m at 2 s, 10.235 m at 4 s, 10.022 m at 6 s, 10.031 m at 10 s.
    • updateFreq 0.1: 10.078 m at 2 s, 10.028 m at 4 s, 10.031 m at 10 s. The soil elements rise to the seabed as the analysis predicts.
  2. Cross-current case: CableRM_CrossCurrentStart_in.xml, Light cable (3 kg/m, updateFreq 200), 5 s, RK45_i. The angle between neighbouring elements, theta_i = 2 asin|vec(q_i* q_{i+1})|, is constant to four digits at every joint (0.1238, 0.1660, 0.2191, 0.2707, 0.2936, 0.2707, 0.2191, 0.1660, 0.1238 rad from 0 to 5 s). The cable moves sideways as a whole (the middle element's y goes from 0 to 1.38 m) while the joints open: the gap between the joint points of neighbouring elements grows from 0.003 to 0.007 m at t = 0 to 0.27 m at the ends of the chain at t = 5 s (the end gaps to the fixed points 0.013 m to 0.149 m), and the distance of the centres from the line A-B grows (middle element 2.618 m to 3.494 m). So the motion is a rigid swing about A-B plus gap drift (translational beta_N is tiny too), with no bending.
  3. Static law: after case 1 settled (10 s), |lambda_rot| / sin(theta/2) at the nine joints is 53.02 (updateFreq 0.1; 52.98 to 53.06) against 2 E I / l = 53.03 N m (E = 1e9, I = 7 pi D^4 / 5184 = 2.65e-8 m^4, l = 1 m). With updateFreq 1, the run had not settled and the ratio is 50.8 to 54.8.

Effect

An RbCable/Cable does not change shape in the seconds a run lasts: soil elements stay in the soil, a cable on the seabed stays where it started, and a current only swings it about the line between its ends with the joints opening. This is not a defect of EI (26.5 N m^2 is soft). The CableRM baselines (CableRM_SeabedRegression too) pin this frozen behaviour and will move when it is fixed; so will every model that uses RbCable/Cable for a cable that has to sag or settle.

Fix (owner's choice: C)

C, as ruled 2026-10-16: bending as an explicit moment M = EI·κ, computed from the joint angle and applied as a force. The joints keep only position constraints. EI is a user parameter, default E·7πD⁴/5184 (today's loose 1×7 strand value). The moment is applied in D1 phase 2, with the other law switches. Bending damping (owner ruling 2026-10-16): M_d = c_b·θ̇ with ζ_b = 0.05, c_b = 2 ζ_b √(J·EI/l) from EI and the element's rotational inertia J (design contact-model-design.md section 7); no new input. Behaviour commit with its test first; the CableRM baselines are regenerated in a separate commit.

Test that would prove it

A cable between two fixed ends 1 m above a seabed at 10 m with 2 m of slack, no current, Euler_i 1 ms at the default updateFreq: its soil elements rise to the seabed within 10 s (today they move by under 1e-5 m).

Risk

Changes every RbCable/Cable result; a bending-free chain needs a check of its stability at the 1 ms step.