112#include <fhsim/simobject/SimObject.h>
113#include <fhsim_environment/BodyWake.h>
114#include <fhsim_environment/EnvironmentProvider.h>
115#include <fhsim_environment/SeafloorForcesInterface.h>
116#include <fhsim_environment/hydrodynamics/SphereHydro.h>
123 CenterWeight(std::string simObjectName, ISimObjectCreator* creator);
126 virtual void OdeFcn(
const double dT,
const double*
const adX,
127 double*
const adXDot)
const;
134 bool HasJacobians()
const override;
135 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
136 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
137 bool HasPortJacobians()
const override;
138 void InputPortJacobian(
const std::string& portName,
double T,
const double* X,
139 double* dF_dInput,
int portSize,
int nStates)
override;
141#ifdef FH_VISUALIZATION
143 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
145 void RenderUpdate(
const double T,
const double*
const X);
147 void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
149 void PreOdeFcn(
double T,
const double* X, IStateUpdater* updater)
override;
150 virtual const double* Position(
const double dT,
const double*
const adX);
151 virtual const double* Velocity(
const double dT,
const double*
const adX);
165 double m_visualizationScale;
171 std::optional<environment::sphere_hydro::SphereCaster>
m_caster;
173 std::unique_ptr<environment::wake::BodyWake>
m_wake;
175 environment::EnvironmentProvider* m_environment;
176 environment::SeafloorForcesInterface* m_seafloor;
178#ifdef FH_VISUALIZATION
179 std::string m_material;
180 std::string m_meshName;
182 Ogre::Entity* m_renderEntity;
183 Ogre::SceneNode* m_renderNode;
184 Ogre::SceneManager* m_sceneMgr;
Definition CenterWeight.h:121
std::optional< environment::sphere_hydro::SphereCaster > m_caster
The sphere on its states, for the wake.
Definition CenterWeight.h:171
double m_rhoWater
The water density Rho [kg/m^3].
Definition CenterWeight.h:168
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot) const
Calculates the state derivatives.
int m_IStateVel
The index of the velocity state.
Definition CenterWeight.h:161
void waterVelocity(double T, const double *X, double velocity[3]) const
The water velocity at the weight: the BodyWake's, without the weight's own wake.
ISignalPort * m_inForce2
A pointer to the input force 2.
Definition CenterWeight.h:158
environment::wake::BodyWakeSettings m_wakeSettings
The wake parameters.
Definition CenterWeight.h:172
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
Rebuilds the weight's wake when due and takes the other objects' wakes at the weight.
int m_IStatePos
The index of the position state.
Definition CenterWeight.h:160
ISignalPort * m_inForce3
A pointer to the input force 3.
Definition CenterWeight.h:159
environment::sphere_hydro::Sphere m_sphere
ρ, D = 2 r and C_d of the drag.
Definition CenterWeight.h:170
ISignalPort * m_inForce1
A pointer to the input force 1.
Definition CenterWeight.h:157
std::unique_ptr< environment::wake::BodyWake > m_wake
The wake the weight casts and receives, from FinalSetup.
Definition CenterWeight.h:173