@@ -289,15 +289,8 @@ TestHydro::TestHydro(std::vector<std::shared_ptr<ChBody>> user_bodies,
289289 }
290290 }
291291
292- // Initialize hydrostatics component
293- const auto gravitational_acceleration_ch = bodies_[0 ]->GetSystem ()->GetGravitationalAcceleration ();
294- const Eigen::Vector3d gravitational_acceleration (
295- gravitational_acceleration_ch.x (),
296- gravitational_acceleration_ch.y (),
297- gravitational_acceleration_ch.z ()
298- );
299- hydrostatics_component_ = std::make_unique<hydrochrono::hydro::HydrostaticsComponent>(
300- file_info_, num_bodies_, equilibrium_, cb_minus_cg_, gravitational_acceleration);
292+ // Initialize hydrostatics component (uses shared factory for consistent construction)
293+ hydrostatics_component_ = CreateHydrostaticsComponent ();
301294
302295 // Create Chrono force callbacks for each body (multibody setup)
303296 for (int b = 0 ; b < num_bodies_; ++b) {
@@ -496,6 +489,19 @@ std::unique_ptr<hydrochrono::hydro::ExcitationComponent> TestHydro::CreateExcita
496489 return std::make_unique<hydrochrono::hydro::ExcitationComponent>(user_waves_, num_bodies_);
497490}
498491
492+ std::unique_ptr<hydrochrono::hydro::HydrostaticsComponent> TestHydro::CreateHydrostaticsComponent () const {
493+ // Single source of truth for HydrostaticsComponent construction.
494+ // Used by TestHydro constructor and EnsureHydroSystemAndCoupler().
495+ const auto gravitational_acceleration_ch = bodies_[0 ]->GetSystem ()->GetGravitationalAcceleration ();
496+ const Eigen::Vector3d gravitational_acceleration (
497+ gravitational_acceleration_ch.x (),
498+ gravitational_acceleration_ch.y (),
499+ gravitational_acceleration_ch.z ()
500+ );
501+ return std::make_unique<hydrochrono::hydro::HydrostaticsComponent>(
502+ file_info_, num_bodies_, equilibrium_, cb_minus_cg_, gravitational_acceleration);
503+ }
504+
499505// ------------------------------------------------------------
500506// Internal helpers for HydroSystem + ChronoHydroCoupler path
501507// ------------------------------------------------------------
@@ -512,15 +518,8 @@ void TestHydro::EnsureHydroSystemAndCoupler() {
512518 // Build force components for HydroSystem (independent from legacy components)
513519 std::vector<std::unique_ptr<hydrochrono::hydro::IHydroForceComponent>> components;
514520
515- // Hydrostatics component
516- const auto gravitational_acceleration_ch = bodies_[0 ]->GetSystem ()->GetGravitationalAcceleration ();
517- const Eigen::Vector3d gravitational_acceleration (
518- gravitational_acceleration_ch.x (),
519- gravitational_acceleration_ch.y (),
520- gravitational_acceleration_ch.z ()
521- );
522- components.push_back (std::make_unique<hydrochrono::hydro::HydrostaticsComponent>(
523- file_info_, num_bodies_, equilibrium_, cb_minus_cg_, gravitational_acceleration));
521+ // Hydrostatics component (uses shared factory for consistent construction)
522+ components.push_back (CreateHydrostaticsComponent ());
524523
525524 // Radiation component (owns its own velocity history)
526525 const int rirf_steps = file_info_.GetRIRFDims (2 );
0 commit comments