FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WavePropulsionHull.h
1#ifndef WavePropulsionHull_H
2#define WavePropulsionHull_H
3
129#include "WaveHull.h"
130
132{
133public:
134 WavePropulsionHull(std::string simObjectName, ISimObjectCreator* creator);
135
136 void FinalSetup(double T, const double* X, ISimObjectCreator* creator) override;
137 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
138
139 const double* ThrustPort(double T, const double* X);
140 const double* RudderForcePort(double T, const double* X);
141
142protected:
143 Loads ExtraLoads(double T, const double* X, const Dof& velocity) const override;
144 std::array<Dof, 6> ExtraLoadsVelocityJacobian(const Dof& velocity) const override;
145
146private:
148 template<class S>
149 struct Actuation
150 {
151 S thrust;
152 S rudderNormalForce;
153 };
154
155 template<class S>
156 Actuation<S> Actuate(double propellerSpeed, double rudderAngle, const S& u, const S& v, const S& r) const;
157
158 template<class S>
159 std::array<S, 6> LoadsOf(const Actuation<S>& actuation, double rudderAngle) const;
160
162 void HoldInputs(double T, const double* X);
163
164 ISignalPort* m_inPropellerSpeed = nullptr;
165 ISignalPort* m_inRudderAngle = nullptr;
166
167 double m_diameter = 0.0;
168 double m_kt[3] = {0.0, 0.0, 0.0};
169 double m_wakeFraction = 0.0;
170 double m_thrustDeduction = 0.0;
171 double m_propellerX = 0.0;
172 double m_propellerZ = 0.0;
173
174 double m_rudderArea = 0.0;
175 double m_liftSlope = 0.0;
176 double m_rudderX = 0.0;
177 double m_rudderZ = 0.0;
178 double m_hullInteraction = 0.0;
179 double m_hullInteractionX = 0.0;
180 double m_slipstreamFactor = 0.0;
181
182 double m_heldPropellerSpeed = 0.0;
183 double m_heldRudderAngle = 0.0;
184
185 double m_thrustOut = 0.0;
186 std::array<double, 2> m_rudderForceOut {};
187};
188
189#endif
Definition WaveHull.h:244
std::array< double, 3 > Dof
Three generalized loads or coordinates: (heave, roll, pitch) or (surge, sway, yaw).
Definition WaveHull.h:247
std::array< double, 6 > Loads
Generalized loads on the six modes, ordered surge, sway, heave, roll, pitch, yaw [N,...
Definition WaveHull.h:249
Definition WavePropulsionHull.h:132
std::array< Dof, 6 > ExtraLoadsVelocityJacobian(const Dof &velocity) const override
Loads ExtraLoads(double T, const double *X, const Dof &velocity) const override