Marine systems simulation
Loading...
Searching...
No Matches
Propeller.h
1#ifndef CPropeller_h__
2#define CPropeller_h__
3
92#include <memory>
93
94#include <ISimObjectCreator.h>
95#include <EnvironmentProvider.h>
96
97#ifdef FH_VISUALIZATION
98#include "sfh/ogre/CDynamicLines.h"
99#endif
100#include "./Ship/Actuators/IPropellerCalculator.h"
101
102namespace Ship{
103
104 class Propeller;
105
107 public:
108 PropellerCurrentField() = default;
109 virtual ~PropellerCurrentField() = default;
110 void inline setPropeller(Propeller* propeller){ m_propeller = propeller; }
111 [[deprecated("This may not use up-to-date state info")]]
112 marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3]);
113 private:
114 Propeller* m_propeller;
115
116 };
117
118 class Propeller: public SimObject
119 {
120 friend class PropellerCurrentField;
121 public:
122 Propeller(const string simObjectName, ISimObjectCreator* const creator);
123 virtual ~Propeller();
124 void FinalSetup( const double T, const double *const X, ISimObjectCreator* const creator );
125 void OdeFcn(const double T, const double* const X, double* const XDot, const bool bIsMajorTimeStep);
126
127 #ifdef FH_VISUALIZATION
128 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
129 void RenderUpdate( const double T, const double* const X);
130 #endif
131
133 const double* BladeTopNED(const double T, const double* const X);
135 const double* ForceNED(const double T, const double* const X);
137 const double* TorqueNED(const double T, const double* const X);
139 const double* Us(const double T, const double* const X);
141 const double* Rs(const double T, const double* const X);
142
143 private:
144
145 double Ct( double U, double F);
146
148 double m_Diameter;
151 bool m_DummyPropeller;
152
154 ISignalPort *m_InForceDirectionNED;
156 ISignalPort *m_InMyRPS;
158 ISignalPort *m_InMyPD;
160 ISignalPort *m_InVelocityNED;
162 ISignalPort *m_InPositionNED;
164 ISignalPort *m_InMyPropellerForce;
166 ISignalPort *m_InMyPropellerTorque;
167
168 std::vector<double> PDlist;
169 double m_BladeTop[3];
170 double m_Force[3];
171 double m_MyThrust[3];
172 double m_MyTorque[3];
173 double m_Position[3];
174 double m_Axis[3];
175
176 double m_MyUs;
177 double m_MyRs;
178
179 double m_MyDiam;
180 double m_MyDiam4;
181 double m_MyDiam5;
182 IPropellerCalculator **m_PropellerCalculator;
183 environment::EnvironmentProvider *m_Environment;
184 std::shared_ptr<PropellerCurrentField> m_currentField = std::make_shared<PropellerCurrentField>();
185 int m_RotateAngle;
186
187 #ifdef FH_VISUALIZATION
188 std::string m_Material;
189 Ogre::SceneNode* m_RenderNode;
190 CDynamicLines* m_lines;
191 #endif
192 };
193}
194
195#endif // CRudder_h__
Definition IPropellerCalculator.h:8
Definition Propeller.h:106
marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3])
Definition Propeller.h:119
const double * ForceNED(const double T, const double *const X)
const double * Us(const double T, const double *const X)
const double * BladeTopNED(const double T, const double *const X)
const double * Rs(const double T, const double *const X)
const double * TorqueNED(const double T, const double *const X)
Defines the interface for an relaying information about ocean currents.
Definition CurrentField.h:13
Status
Definition marenv.h:40
Simple waypoint object.
Definition CableAttach.h:16