219 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
221 #ifdef FH_VISUALIZATION
232 ShipSimObject(
const std::string simObjectName, ISimObjectCreator*
const creator);
238 void FinalSetup(
const double T,
const double *
const X, ISimObjectCreator*
const creator );
241 void GetCurrent(
const double T,
const double*
const X,
const double position[3],
double* currentVelocity);
244 virtual void PreOdeFcn(
const double T,
const double *
const X);
247 virtual void OdeFcn(
const double T,
const double*
const X,
double*
const XDot)
const;
250 void AcceptedStep(
double T,
const double* X)
override;
252 #ifdef FH_VISUALIZATION
255 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
258 virtual void RenderUpdate(
const double T,
const double*
const X );
279 const double* EulerAnglesNED(
const double T,
const double*
const X);
285 const double*
OmegaNED(
const double T,
const double*
const X);
288 void ComputeRollPitchYaw(
const double T,
const double*
const X)
const;
289 void ComputeRelativeVelocity(
const double T,
const double*
const X)
const;
292 const double*
BodyForce(
const double T,
const double*
const X);
321 const double*
Encounter(
const double T,
const double*
const X);
330 const double*
SpeedInfo(
const double T,
const double *
const X);
339 const double *
FluidEnergy(
const double T,
const double*
const X);
340 const double * FluidEnergy2(
const double T,
const double*
const X);
341 const double * UFluidMemSpeed(
const double T,
const double*
const X);
343 const double* FluidForceBySpeedBody(
const double T,
const double*
const X,
int index);
402 const double * ViscousRoll(
const double T,
const double*
const X);
403 double m_ViscousRoll[6];
410 const double * DriftSpeed(
const double T,
const double*
const X);
413 double m_waveElevation;
419 void printShipInfo();
421 PrintDuringExec* m_logg;
423 Eigen::Vector3d m_forceExtNED;
424 Eigen::Vector3d m_forceExtBody;
426 Eigen::Vector3d m_PositionMidpoint;
427 Eigen::Vector3d m_PositionAP;
428 Eigen::Vector3d m_angles;
430 Eigen::Matrix<double,6,6> m_mrb;
431 Eigen::Matrix<double,6,6> m_invMrb;
436 environment::EnvironmentProvider *m_environment =
nullptr;
439 Eigen::Matrix<double,1,20> Horener_X;
440 Eigen::Matrix<double,1,20> Horener_Y;
441 std::vector<double> hx, hy;
442 sfh::math::SplineInterp *hoerner;
446 ISignalPort *m_InForceNED;
449 ISignalPort *m_InMomentNED;
452 ISignalPort *m_InForceBODY;
455 ISignalPort *m_InMomentBODY;
457 ICommonComputation *m_computeRelativeVelocity;
458 ICommonComputation *m_computeRotationAngles;
462 std::vector<double> m_waveHeight;
463 std::vector<double> m_waveFreq;
464 std::vector<double> m_wavePhase;
465 std::vector<double> m_waveDirection;
466 std::vector<double> m_waveNumber;
468 std::vector<double> m_uHistory;
469 std::vector<double> m_psiHistory;
470 std::vector<double> m_tHistory;
472 double **m_fluidForce;
473 double m_fluidForceExperienced[6];
474 double m_rotationForceFrame[4];
475 double m_speedInformation[5];
480 double m_steadyStateBody[6];
481 double m_steadyStateNED[6];
485 mutable double m_rollPitchYaw[3];
487 mutable double m_relativeSpeed[6];
489 double m_firstOrderForce[6];
490 double m_waveDriftForce[6];
491 double m_CforcesBody[6];
492 double m_CforcesFluid[6];
494 double m_crossFlowBody[6];
495 double m_resistance[6];
497 double m_fluidMemForce[6];
498 double m_restoringForce[6];
499 mutable double m_sumBodyForce[6];
500 double m_encounterFreq[52];
503 double m_hydrostaticSpring[3];
508 bool m_zeroSpeedRadiation;
510 bool m_hydroStaticsType;
514 bool m_waveforceHframe;
526 double m_surgeVelocity;
528 double m_wakeFraction;
530 double m_hydroStaticsStationVerticalStep;
532 double m_hydroStaticsStationHorizontalStep;
534 double m_hydroStaticsStationTop;
536 double m_hydroStaticsStationBottom;
538 double m_bilgeKeelStartPosition;
540 double m_bilgeKeelEndPosition;
542 double m_bilgeKeelHeight;
544 double m_damperLinear[3];
546 double m_damperQuadratic[3];
548 double m_damperRotLinear[3];
550 double m_damperRotQuadratic[3];
552 double m_dampingBlendSpeed;
554 double m_dampingBlendFraction;
557 double m_waveForceTransient;
574 double m_ForceScale[11];
576 std::string m_ForceInput;
578 std::string m_PotentialFileLocation;
580 std::string m_PotentialFileName;
582 std::string m_PotentialType;
584 double m_stablizeDOF[6];
586 bool m_coriolisRollOnly;
587 Eigen::Matrix<double, 6,1> m_coriolisDOFmangler;
589 static inline Eigen::Matrix3d S(
const Eigen::Vector3d &v){
590 Eigen::Matrix3d retval = Eigen::Matrix3d::Zero();
600#ifdef FH_VISUALIZATION
603 bool m_ShowForceArrows =
false;
605 std::string m_Material;
611 RenderType m_RenderAs;
613 std::string m_RenderType;
617 int ***m_IFluidState;
618 int ***m_FluidStateSize;
626 #ifdef FH_VISUALIZATION
629 void DrawShip(Ogre::SceneNode* renderNode, Ogre::SceneManager* sceneMgr);
630 void DrawStations( Ogre::SceneNode* m_RenderNode, Ogre::SceneManager * sceneMgr );
632 Ogre::ManualObject *manual ;
633 Ogre::SceneNode* m_RenderNodeHull;
634 Ogre::SceneNode* m_RenderNodeZeroCross;
635 Ogre::SceneNode* m_RenderNodeStations;
636 Ogre::SceneNode** m_RenderNodeSkegPoint;
638 double m_NodeOffset[3];
639 C3DArrow *FKF_u,*FKF_v,*FKF_w;
640 C3DArrow *FKT_u,*FKT_v,*FKT_w;
642 C3DArrow *FMF_u,*FMF_v,*FMF_w;
643 C3DArrow *FMT_u,*FMT_v,*FMT_w;
645 C3DArrow *RSF_u,*RSF_v,*RSF_w;
646 C3DArrow *RST_u,*RST_v,*RST_w;
661 double m_maxWavePeriod;