FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TestWakeBody.h
1#pragma once
2
8#include <fhsim/simobject/SimObject.h>
9#include <fhsim_environment/LumpedWakeCaster.h>
10#include <memory>
11#include <string>
12
13namespace environment
14{
15class EnvironmentProvider;
16} // namespace environment
17
18namespace testmodels
19{
20
85class TestWakeBody : public SimObject, public environment::wake::WakeCastingObject
86{
87public:
96 TestWakeBody(std::string SimObjectName, ISimObjectCreator* Creator);
97 ~TestWakeBody() override;
98
107 void FinalSetup(double T, const double* X, ISimObjectCreator* Creator) override;
108
115 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
116
118 void OdeFcn(double T, const double* X, double* XDot) const override;
119
121 const double* Position(double T, const double* X);
123 const double* WaterVelocity(double T, const double* X);
125 const double* Force(double T, const double* X);
126
128 const environment::wake::LumpedWakeCaster* WakeCaster() const { return m_caster.get(); }
129
130 environment::wake::WakeCastState Reference(const double* X) const override;
131 void CurrentLoad(const double* X, const double freeStream[3], const double flowDir[3], double force[3], double& frontalArea, double rearCentre[3]) const override;
132
133#ifdef FH_VISUALIZATION
135 void RenderInit(Ogre::Root* ogreRoot, ISimObjectCreator* creator) override { }
137 void RenderUpdate(double T, const double* X) override { }
138#endif
139
140private:
146 void Drag(const double waterVelocity[3], double force[3]) const;
147
149 double FrontalArea() const;
150
151 int m_positionIndex = 0;
152 double m_diameter = 1.0;
153 double m_dragCoefficient = 0.5;
154 double m_rho = 1025.0;
155 double m_towVelocity[3] = {0.0, 0.0, 0.0};
156 environment::wake::WakeSettings m_wakeSettings;
157 environment::EnvironmentProvider* m_environment = nullptr;
158 ISimObjectLogger* m_logger = nullptr;
159 std::unique_ptr<environment::wake::LumpedWakeCaster> m_caster;
160 double m_waterVelocity[3] = {0.0, 0.0, 0.0};
161 double m_force[3] = {0.0, 0.0, 0.0};
162};
163
164} // namespace testmodels
Definition TestWakeBody.h:86
void OdeFcn(double T, const double *X, double *XDot) const override
The position moves at TowVelocity.
void FinalSetup(double T, const double *X, ISimObjectCreator *Creator) override
const double * WaterVelocity(double T, const double *X)
Output port WaterVelocity [m/s], NED.
TestWakeBody(std::string SimObjectName, ISimObjectCreator *Creator)
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
const double * Force(double T, const double *X)
Output port Force [N], NED.
const double * Position(double T, const double *X)
Output port Position [m], NED.
const environment::wake::LumpedWakeCaster * WakeCaster() const
The wake caster; null without CastWake or before FinalSetup.
Definition TestWakeBody.h:128
SimObjects for testing environment functionality.
Definition TestBuoy1.h:16