FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CNorrbinTanker.h
1#ifndef CNorrbinTanker_H
2#define CNorrbinTanker_H
3
133#include <Eigen/Eigen>
134
135#include <fhsim/simobject/SimObject.h>
136#include <fhsim_environment/EnvironmentProvider.h>
137#include <string>
138
139
140class CNorrbinTanker : public SimObject
141{
142 public:
143 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
144
146 CNorrbinTanker(std::string sSimObjectName, ISimObjectCreator* pCreator);
147
148 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
149
150 void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
151
152#ifdef FH_VISUALIZATION
154 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
155
157 virtual void RenderUpdate(const double T, const double* const X);
158#endif
159
160 static double* tanker_CX; // wind drag coefficient surge
161 static double* tanker_CY; // wind drag coefficient sway
162 static double* tanker_CN; // wind drag coefficient yaw
163 static double* tanker_CK; // wind drag coefficient roll
164
165 Eigen::Matrix<double, 1, 9> DWT;
166 Eigen::Matrix<double, 1, 9> DISPL;
167 Eigen::Matrix<double, 1, 9> Lpp;
168 Eigen::Matrix<double, 1, 9> B;
169 Eigen::Matrix<double, 1, 9> D;
170 Eigen::Matrix<double, 1, 9> TT;
171 Eigen::Matrix<double, 1, 9> U0;
172 Eigen::Matrix<double, 1, 9> RPM0;
173
174 Eigen::Matrix<double, 1, 9> T;
175
176 Eigen::Matrix<double, 1, 9> Xdu;
177 Eigen::Matrix<double, 1, 9> Xuu;
178 Eigen::Matrix<double, 1, 9> Xvr;
179 Eigen::Matrix<double, 1, 9> Xvv;
180
181 Eigen::Matrix<double, 3, 9> Xccdd;
182 Eigen::Matrix<double, 1, 9> Xccbd;
183
184
185 Eigen::Matrix<double, 1, 9> Xduz;
186 Eigen::Matrix<double, 1, 9> Xuuz;
187 Eigen::Matrix<double, 1, 9> Xvrz;
188 Eigen::Matrix<double, 1, 9> Xvvzz;
189
190 Eigen::Matrix<double, 1, 9> Ydv;
191 Eigen::Matrix<double, 1, 9> Yur;
192 Eigen::Matrix<double, 1, 9> Yuv;
193 Eigen::Matrix<double, 1, 9> Yvv;
194
195 Eigen::Matrix<double, 3, 9> Yccd;
196 Eigen::Matrix<double, 1, 9> Yccbbd;
197
198 Eigen::Matrix<double, 1, 9> Yt;
199
200 Eigen::Matrix<double, 1, 9> Ydvz;
201 Eigen::Matrix<double, 1, 9> Yurz;
202 Eigen::Matrix<double, 1, 9> Yuvz;
203 Eigen::Matrix<double, 1, 9> Yvvz;
204 Eigen::Matrix<double, 1, 9> Yccbbdz;
205
206 Eigen::Matrix<double, 1, 9> kk_Ndr;
207 Eigen::Matrix<double, 1, 9> Nur_xg;
208 Eigen::Matrix<double, 1, 9> Nuv;
209 Eigen::Matrix<double, 1, 9> Nvr;
210
211 Eigen::Matrix<double, 3, 9> Nccd;
212
213 Eigen::Matrix<double, 1, 9> Nccbbd;
214 Eigen::Matrix<double, 1, 9> Nt;
215
216 Eigen::Matrix<double, 1, 9> Ndrz;
217 Eigen::Matrix<double, 1, 9> Nurz;
218 Eigen::Matrix<double, 1, 9> Nuvz;
219 Eigen::Matrix<double, 1, 9> Nvrz;
220 Eigen::Matrix<double, 1, 9> Nccbbdz;
221
222 Eigen::Matrix<double, 1, 9> Tuu;
223 Eigen::Matrix<double, 1, 9> Tun;
224 Eigen::Matrix<double, 1, 9> Tnn;
225
226 // C equation
227 Eigen::Matrix<double, 1, 9> Cun;
228 Eigen::Matrix<double, 1, 9> Cnn;
229
230 // Q equation
231 Eigen::Matrix<double, 1, 9> kk_Qn;
232 Eigen::Matrix<double, 1, 9> Qf;
233 Eigen::Matrix<double, 1, 9> Quu;
234 Eigen::Matrix<double, 1, 9> Qun;
235 Eigen::Matrix<double, 1, 9> Qnn;
236 Eigen::Matrix<double, 1, 9> Qn;
237 Eigen::Matrix<double, 1, 9> Qmu;
238
239 protected:
240 int m_indexStateRPM;
241 int m_indexStateDelta;
242 int m_indexStateVelocity;
243 int m_indexStateOmega;
244 int m_indexStateRotation;
245 int m_indexStatePosition;
246 double m_rhoWater;
247
248 virtual const double* Position(const double dT, const double* const adX);
249 virtual const double* Velocity(const double dT, const double* const adX);
250 virtual const double* Rotation(const double dT, const double* const adX);
251 virtual const double* Omega(const double dT, const double* const adX);
252
253 ISignalPort* m_InEngineControl;
254 ISignalPort* m_InRudderControl;
255
256 double comp_beta(double u, double v) const;
257 double comp_c(double u, double n) const;
258 double comp_ndot(double u, double n, double my) const;
259 double compute_gT(double u, double n) const;
260
261 double rudder_gln(double beta, double c, double delta, double z) const;
262 double rudder_gy(double beta, double c, double delta, double z) const;
263 double rudder_gx(double beta, double c, double delta) const;
264
265 double comp_Yuv(double z) const;
266 double comp_m11(double z) const;
267 double comp_m22(double z) const;
268 double comp_m33(double z) const;
269 double nlin_N(double u, double v, double r, double z) const;
270 double nlin_Y(double u, double v, double r, double z) const;
271 double nlin_X(double u, double v, double r, double z) const;
272
273 public:
274 bool HasJacobians() const override;
275 void OdeJacobian(double simTime, const double* X, double* J, int nStates) override;
276 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
277
278 unsigned int m_tankerType;
279 unsigned int m_rudderType;
280
281 ISignalPort* m_pInForce;
282 ISignalPort* m_pInTorque;
283
284 environment::EnvironmentProvider* m_Environment;
285
286#ifdef FH_VISUALIZATION
287 std::string m_sMaterial;
288 std::string m_sMeshName;
289 double m_dScale;
290 Ogre::Entity* m_pRenderEntity;
291 Ogre::SceneNode* m_pRenderNode;
292 Ogre::SceneManager* m_pSceneMgr;
293
295 void AttachHullMesh(const Ogre::Vector3& userScale);
296#endif
297};
298
299
300#endif
Definition CNorrbinTanker.h:141
ISignalPort * m_pInForce
A pointer to the input force.
Definition CNorrbinTanker.h:281
CNorrbinTanker(std::string sSimObjectName, ISimObjectCreator *pCreator)
The constructor sets the pointer to the output object and the parser object.
ISignalPort * m_pInTorque
A pointer to the input force.
Definition CNorrbinTanker.h:282
double m_rhoWater
Water density the force and torque inputs are normalised with [kg/m^3] (BASE-0054).
Definition CNorrbinTanker.h:246