116 Disk(
const std::string& SimObjectName, ISimObjectCreator*
const Creator);
118 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const Creator);
121 const double* Position(
const double T,
const double*
const X);
122 const double* Velocity(
const double T,
const double*
const X);
123 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
137 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
138 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
141 const environment::wake::BodyWake*
Wake()
const {
return m_flow.Wake(); }
145 environment::disk_hydro::DragFactors DiskDragFactors()
const;
147 ISignalPort* m_IForce;
158 mutable bool m_onSeabed =
false;
159 environment::SeafloorForcesInterface* m_seafloor =
nullptr;
162 double AxialInertiaShare(
double fraction)
const;
171 void ApplyInverseInertia(
const double axis[3],
double fraction,
const double force[3],
double acceleration[3])
const;
173 double m_axialAddedMass = 0.0;
176 const environment::disk_hydro::Disk& Shape()
const {
return m_caster->Shape(); }
178 std::optional<environment::disk_hydro::DiskCaster> m_caster;
179 environment::wake::BodyFlowInteraction m_flow;
181#ifdef FH_VISUALIZATION
183 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
184 void RenderUpdate(
const double dT,
const double*
const adX);
187 Ogre::SceneNode* m_Node;
188 Ogre::Entity* m_Entity;
189 Ogre::String m_Material;
190 std::string m_DiskMesh;
void PreOdeFcn(double T, const double *X) override
With CastWake: takes the disk axis from the Force input and rebuilds the wake when due.