The 3D twin drives each trim tank at a fixed flood/blow rate and treats the HP-air reserve as a slider that never runs out. This 2D companion replaces both with the real physics that produces those numbers: orifice flow (a Torricelli-style square-root law) and an ideal-gas air reservoir that actually depletes as it is used — a genuinely different computation, not the same motion redrawn flat.
Flooding (vented tank, seawater driven by hydrostatic head):
ṁ_flood = k_flood · √(ρ·g·(depth + draft))
Blowing (HP air pushes water out against the sea):
ṁ_blow = k_blow · √max(0, P_air − P_amb)
Reservoir depletion (ideal gas, fixed bank volume V_res):
dP_air/dt = −P_amb·(ṁ_blow/ρ_water) / V_res
Both flow laws are square-root-in-pressure, so flooding actually speeds up with depth (real vent physics) and blowing effectiveness fades smoothly to zero as the reservoir pressure is chased down by the rising ambient sea pressure — the reservoir keeps draining every time you blow, so a real "blow depth limit" for the current reserve is shown live, not baked in as a slider.
Pitch is no longer a smoothed readout: it is a genuine second-order rigid body, mass-spring-damper about the pitch axis, driven by the fore/aft mass imbalance and restored by a metacentric-style stiffness — so a sudden trim change now produces a real (lightly damped) pitch oscillation around its new equilibrium, not an instant ease-in.
I·θ″ + c·θ′ + k·θ = (m_aft − m_fore)·g·arm
- Fore / aft target sliders — commanded fill level for each trim tank.
- Vent / blow orifice size — scales both orifice constants (k_flood, k_blow) together, like opening a wider valve.
- HP air reserve (on refill) — the pressure the reservoir is topped up to when you press Refill; from then on it depletes with use exactly like a real air bank.
- Blow depth limit — the depth at which the current reservoir pressure equals ambient sea pressure, recomputed live as the reserve drains.