Skip to content

Commit d615169

Browse files
committed
unify HydrostaticsComponent construction across legacy and HydroSystem paths
Introduce CreateHydrostaticsComponent() in TestHydro as a single source of truth for constructing HydrostaticsComponent. Both the legacy TestHydro constructor and the HydroSystem setup now use this helper.
1 parent 9f1be95 commit d615169

2 files changed

Lines changed: 22 additions & 18 deletions

File tree

include/hydroc/hydro_forces.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,11 @@ class TestHydro {
466466
// to ensure consistent construction.
467467
std::unique_ptr<hydrochrono::hydro::ExcitationComponent> CreateExcitationComponent() const;
468468

469+
// Factory: creates HydrostaticsComponent with current equilibrium/stiffness data.
470+
// Used by both the TestHydro constructor and EnsureHydroSystemAndCoupler()
471+
// to ensure consistent construction.
472+
std::unique_ptr<hydrochrono::hydro::HydrostaticsComponent> CreateHydrostaticsComponent() const;
473+
469474
// Internal helpers for HydroSystem + ChronoHydroCoupler path
470475
// Constructs hydro_system_ and chrono_coupler_ once; subsequent calls are no-ops.
471476
void EnsureHydroSystemAndCoupler();

src/hydro_forces.cpp

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)