113 Disk(
const std::string& SimObjectName, ISimObjectCreator*
const Creator);
115 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const Creator);
117 void PreOdeFcn(
double T,
const double* X, IStateUpdater* updater)
override;
118 const double* Position(
const double T,
const double*
const X);
119 const double* Velocity(
const double T,
const double*
const X);
120 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
126 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
127 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
130 const environment::wake::BodyWake*
Wake()
const {
return m_flow.Wake(); }
134 environment::disk_hydro::DragFactors DiskDragFactors()
const;
136 ISignalPort* m_IForce;
147 mutable bool m_onSeabed =
false;
150 double AxialInertiaShare(
double fraction)
const;
159 void ApplyInverseInertia(
const double axis[3],
double fraction,
const double force[3],
double acceleration[3])
const;
161 double m_axialAddedMass = 0.0;
164 const environment::disk_hydro::Disk& Shape()
const {
return m_caster->Shape(); }
166 std::optional<environment::disk_hydro::DiskCaster> m_caster;
167 environment::wake::BodyFlowInteraction m_flow;
169#ifdef FH_VISUALIZATION
171 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
172 void RenderUpdate(
const double dT,
const double*
const adX);
175 Ogre::SceneNode* m_Node;
176 Ogre::Entity* m_Entity;
177 Ogre::String m_Material;
178 std::string m_DiskMesh;
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
With CastWake: takes the disk axis from the Force input and rebuilds the wake when due.