Returns {"t":...,"vessels":[{"id":...,"x":...,"psi":...,"u":...,"r":...},...]}
2 tests verify JSON structure and time accumulation.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CvodeConfig kept as backward-compat alias for RK45Config.
CvodeIntegrator removed. All 207 tests pass without SUNDIALS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Implemented comprehensive unit tests for the NavalSimulation class, covering N-body state independence, vessel control updates, and integration with maneuver systems.
- Created tests for the CouplingRegistry to validate force consumption and resolution behavior.
- Developed tests for the Environment and NavalEnvironment classes to ensure proper state management and functionality.
- Added tests for the IDomain interface to verify compliance with expected behaviors and constraints.
- Established tests for the World class to confirm domain management, time accumulation, and snapshot integrity.
Move files from flat core/naval/adapters layout into libs/{common,physics,simulation,vessel,world,persistence} with updated namespaces, CMakeLists, tests, README, AGENTS.md, and Doxyfile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Introduced a new body type "simple_box" with defined mass and added mass matrices in `simple_box.json`.
- Created scenarios for bodies with initial velocity and two bodies at rest in `body_with_initial_velocity.json` and `two_bodies_at_rest.json`, respectively.
- Implemented tests in `TestScenarioReader.cpp` to validate parsing of scenarios, body types, and simulation behavior.
- Ensured that bodies at rest remain at rest after simulation steps and that initial conditions are correctly applied.
Verify single and multi-body scenarios: body with no force models
and zero initial velocity stays at rest after 10s (100 × dt=0.1).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
CMake project structure with ymir_core, ymir_naval, and ymir_adapters
static library targets. Catch2 and nlohmann/json via FetchContent;
SUNDIALS and CGAL probed as optional system deps (required from M1/M2).
Smoke tests pass on macOS ARM64. Docker multi-stage image for Linux
x86_64. GitHub Actions CI matrix: Linux x86_64, macOS ARM64, Windows
x86_64. Code quality tooling: .clang-format, .clang-tidy, Doxyfile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>