FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TestWakeCluster.h
1#pragma once
2
8#include <fhsim/simobject/SimObject.h>
9#include <fhsim_environment/BodyWake.h>
10#include <fhsim_environment/hydrodynamics/SphereHydro.h>
11#include <fhsim_environment/WakeSourceSet.h>
12#include <memory>
13#include <string>
14#include <vector>
15
16namespace environment
17{
18class EnvironmentProvider;
19} // namespace environment
20
21namespace testmodels
22{
23
80class TestWakeCluster : public SimObject, public environment::wake::IndexedWakeCastingObject
81{
82public:
91 TestWakeCluster(std::string SimObjectName, ISimObjectCreator* Creator);
92 ~TestWakeCluster() override;
93
102 void FinalSetup(double T, const double* X, ISimObjectCreator* Creator) override;
103
110 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
111
113 void OdeFcn(double T, const double* X, double* XDot) const override;
114
116 const double* Position(double T, const double* X);
118 const double* WaterVelocity(double T, const double* X);
120 const double* Force(double T, const double* X);
121
123 const environment::wake::BodyWake* Wake() const { return m_wake.get(); }
124
125 int NumBodies() const override { return m_numBodies; }
126 environment::wake::WakeCastState Body(const double* X, int body) const override;
127 double BodyRadius(int /*body*/) const override { return 0.5 * m_sphere.diameter; }
128 environment::wake::SourceLoad BodyLoad(const double* X, int body, const double bodyVel[3], const double waterVel[3]) const override;
129
130#ifdef FH_VISUALIZATION
132 void RenderInit(Ogre::Root* ogreRoot, ISimObjectCreator* creator) override { }
134 void RenderUpdate(double T, const double* X) override { }
135#endif
136
137private:
138 int m_positionIndex = 0;
139 int m_numBodies = 3;
140 environment::sphere_hydro::Sphere m_sphere;
141 double m_towVelocity[3] = {0.0, 0.0, 0.0};
142 environment::wake::BodyWakeSettings m_wakeSettings;
143 std::unique_ptr<environment::wake::BodyWake> m_wake;
144 std::vector<double> m_waterVelocity;
145 std::vector<double> m_force;
146};
147
148} // namespace testmodels
Definition TestWakeCluster.h:81
void OdeFcn(double T, const double *X, double *XDot) const override
The positions move at TowVelocity.
const double * Position(double T, const double *X)
Output port Position [m], NED.
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
TestWakeCluster(std::string SimObjectName, ISimObjectCreator *Creator)
const double * WaterVelocity(double T, const double *X)
Output port WaterVelocity [m/s], NED.
const double * Force(double T, const double *X)
Output port Force [N], NED.
void FinalSetup(double T, const double *X, ISimObjectCreator *Creator) override
const environment::wake::BodyWake * Wake() const
The wakes cast and received; null before FinalSetup.
Definition TestWakeCluster.h:123
SimObjects for testing environment functionality.
Definition TestBuoy1.h:16