117 Disk(
const std::string& SimObjectName, ISimObjectCreator*
const Creator);
119 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const Creator);
122 const double* Position(
const double T,
const double*
const X);
123 const double* Velocity(
const double T,
const double*
const X);
124 void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
138 void OdeJacobian(
double T,
const double* X,
double* J,
int nStates)
override;
139 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
142 const environment::wake::BodyWake*
Wake()
const {
return m_flow.Wake(); }
146 environment::disk_hydro::DragFactors DiskDragFactors()
const;
148 ISignalPort* m_IForce;
159 mutable bool m_onSeabed =
false;
160 environment::SeafloorForcesInterface* m_seafloor =
nullptr;
163 double AxialInertiaShare(
double fraction)
const;
172 void ApplyInverseInertia(
const double axis[3],
double fraction,
const double force[3],
double acceleration[3])
const;
174 double m_axialAddedMass = 0.0;
177 const environment::disk_hydro::Disk& Shape()
const {
return m_caster->Shape(); }
179 std::optional<environment::disk_hydro::DiskCaster> m_caster;
180 environment::wake::BodyFlowInteraction m_flow;
182#ifdef FH_VISUALIZATION
184 void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
185 void RenderUpdate(
const double dT,
const double*
const adX);
188 Ogre::SceneNode* m_Node;
189 Ogre::Entity* m_Entity;
190 Ogre::String m_Material;
191 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.