Files
Ymir/naval/src/forces/InertialForces.cpp
T
vinihcrosaandClaude Sonnet 4.6 dd4e79cbd6 feat(naval): add naval domain module (M2)
NavalForceModel bridge pattern keeps core::ForceModel interface intact
while providing NavalContext (environment, speedToWater, speedToWind,
EMA q_avg) to all naval models via bindContext.

Force models: Inertial (Coriolis), Restoring (hydrostatic spring),
Damping (potential + linear/quadratic), Squat (ICORELS shallow-water),
Wind (REGULAR/ACSINKAGE), Current (OBOKATA section-integration and
REGULAR with Van der Pol VIM RK4), Thrust (open-water Kt), Rudder
(Prandtl lift), Tug (PUSH/PULL/ESCORTING with bilinear table).

Wave engine: JONSWAP/PIERSON/REGULAR spectrum, Mitsuyasu cos-2S
directional spreading, WAMIT RAO interpolation in WaveForces.

NavalSimulation wraps core::Simulation, rebuilds NavalContext each
step, maintains EMA (tau=16.5s). 63/63 tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 01:14:23 -03:00

41 lines
1.2 KiB
C++

#include <ymir/naval/forces/InertialForces.h>
namespace ymir::naval
{
InertialForces::InertialForces(const InertialConfig& cfg)
: cfg_(cfg)
, M11_(cfg.totalMass[0][0])
, M22_(cfg.totalMass[1][1])
, dXa_(cfg.addedMass[0][0] - cfg.addedMass[1][1])
{
}
Forces InertialForces::computeNaval(const BodyState& state, const NavalContext& ctx)
{
const double u = state.u();
const double v = state.v();
const double w = state.w();
const double p = state.p();
const double q = state.q_rot();
const double r = state.r(); // ψ̇
const double Vc0 = ctx.speedToWater[0];
const double Vc1 = ctx.speedToWater[1];
const double cx = cfg_.cg[0];
const double cy = cfg_.cg[1];
const double cz = cfg_.cg[2];
const double m = cfg_.mass;
Forces fi;
fi.f[0] = r * (M22_ * v + dXa_ * Vc1);
fi.f[1] = r * (-M11_ * u + dXa_ * Vc0);
fi.f[2] = 0.0;
fi.f[3] = m * (cz * (u * r - w * p) + cy * (u * q - v * p));
fi.f[4] = m * (cx * (v * p - u * q) + cz * (v * r - w * q));
fi.f[5] = r * (cfg_.addedMass[0][5] * v - cfg_.addedMass[1][5] * u);
return fi;
}
} // namespace ymir::naval