Marine systems simulation
CNorrbinTanker.h
1#ifndef CNorrbinTanker_H
2#define CNorrbinTanker_H
3
83#include <Eigen/Eigen>
84
85#include <CEnvironment.h>
86#include <SimObject.h>
87#include <string>
88
89
90class CNorrbinTanker : public SimObject
91{
92 public:
93 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
94
96 CNorrbinTanker(std::string sSimObjectName, ISimObjectCreator* pCreator);
97
98 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
99
100 void OdeFcn(const double dT, const double* const adX, double* const adXDot, const bool bIsMajorTimeStep);
101
102#ifdef FH_VISUALIZATION
104 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
105
107 virtual void RenderUpdate(const double T, const double* const X);
108#endif
109
110 static double* tanker_CX; // wind drag coefficient surge
111 static double* tanker_CY; // wind drag coefficient sway
112 static double* tanker_CN; // wind drag coefficient yaw
113 static double* tanker_CK; // wind drag coefficient roll
114
115 Eigen::Matrix<double, 1, 9> DWT;
116 Eigen::Matrix<double, 1, 9> DISPL;
117 Eigen::Matrix<double, 1, 9> Lpp;
118 Eigen::Matrix<double, 1, 9> B;
119 Eigen::Matrix<double, 1, 9> D;
120 Eigen::Matrix<double, 1, 9> TT;
121 Eigen::Matrix<double, 1, 9> U0;
122 Eigen::Matrix<double, 1, 9> RPM0;
123
124 Eigen::Matrix<double, 1, 9> T;
125
126 Eigen::Matrix<double, 1, 9> Xdu;
127 Eigen::Matrix<double, 1, 9> Xuu;
128 Eigen::Matrix<double, 1, 9> Xvr;
129 Eigen::Matrix<double, 1, 9> Xvv;
130
131 Eigen::Matrix<double, 3, 9> Xccdd;
132 Eigen::Matrix<double, 1, 9> Xccbd;
133
134
135 Eigen::Matrix<double, 1, 9> Xduz;
136 Eigen::Matrix<double, 1, 9> Xuuz;
137 Eigen::Matrix<double, 1, 9> Xvrz;
138 Eigen::Matrix<double, 1, 9> Xvvzz;
139
140 Eigen::Matrix<double, 1, 9> Ydv;
141 Eigen::Matrix<double, 1, 9> Yur;
142 Eigen::Matrix<double, 1, 9> Yuv;
143 Eigen::Matrix<double, 1, 9> Yvv;
144
145 Eigen::Matrix<double, 3, 9> Yccd;
146 Eigen::Matrix<double, 1, 9> Yccbbd;
147
148 Eigen::Matrix<double, 1, 9> Yt;
149
150 Eigen::Matrix<double, 1, 9> Ydvz;
151 Eigen::Matrix<double, 1, 9> Yurz;
152 Eigen::Matrix<double, 1, 9> Yuvz;
153 Eigen::Matrix<double, 1, 9> Yvvz;
154 Eigen::Matrix<double, 1, 9> Yccbbdz;
155
156 Eigen::Matrix<double, 1, 9> kk_Ndr;
157 Eigen::Matrix<double, 1, 9> Nur_xg;
158 Eigen::Matrix<double, 1, 9> Nuv;
159 Eigen::Matrix<double, 1, 9> Nvr;
160
161 Eigen::Matrix<double, 3, 9> Nccd;
162
163 Eigen::Matrix<double, 1, 9> Nccbbd;
164 Eigen::Matrix<double, 1, 9> Nt;
165
166 Eigen::Matrix<double, 1, 9> Ndrz;
167 Eigen::Matrix<double, 1, 9> Nurz;
168 Eigen::Matrix<double, 1, 9> Nuvz;
169 Eigen::Matrix<double, 1, 9> Nvrz;
170 Eigen::Matrix<double, 1, 9> Nccbbdz;
171
172 Eigen::Matrix<double, 1, 9> Tuu;
173 Eigen::Matrix<double, 1, 9> Tun;
174 Eigen::Matrix<double, 1, 9> Tnn;
175
176 // C equation
177 Eigen::Matrix<double, 1, 9> Cun;
178 Eigen::Matrix<double, 1, 9> Cnn;
179
180 // Q equation
181 Eigen::Matrix<double, 1, 9> kk_Qn;
182 Eigen::Matrix<double, 1, 9> Qf;
183 Eigen::Matrix<double, 1, 9> Quu;
184 Eigen::Matrix<double, 1, 9> Qun;
185 Eigen::Matrix<double, 1, 9> Qnn;
186 Eigen::Matrix<double, 1, 9> Qn;
187 Eigen::Matrix<double, 1, 9> Qmu;
188
189 protected:
190 int m_indexStateRPM;
191 int m_indexStateDelta;
192 int m_indexStateVelocity;
193 int m_indexStateOmega;
194 int m_indexStateRotation;
195 int m_indexStatePosition;
196 double m_rhoWater;
197
198 virtual const double* Position(const double dT, const double* const adX);
199 virtual const double* Velocity(const double dT, const double* const adX);
200 virtual const double* Rotation(const double dT, const double* const adX);
201 virtual const double* Omega(const double dT, const double* const adX);
202
203 ISignalPort* m_InEngineControl;
204 ISignalPort* m_InRudderControl;
205
206 double comp_c(double u, double n);
207 double comp_ndot(double u, double n, double my);
208 double compute_gT(double u, double n);
209
210 double rudder_gln(double beta, double c, double delta, double z);
211 double rudder_gy(double beta, double c, double delta, double z);
212 double rudder_gx(double beta, double c, double delta);
213
214 double nlin_N(double u, double v, double r, double z);
215 double nlin_Y(double u, double v, double r, double z);
216 double nlin_X(double u, double v, double r, double z);
217
218 unsigned int m_tankerType;
219 unsigned int m_rudderType;
220
221 ISignalPort* m_pInForce;
222 ISignalPort* m_pInTorque;
223
224 CEnvironment* m_Environment;
225
226#ifdef FH_VISUALIZATION
227 std::string m_sMaterial;
228 std::string m_sMeshName;
229 double m_dScale;
230 Ogre::Entity* m_pRenderEntity;
231 Ogre::SceneNode* m_pRenderNode;
232 Ogre::SceneManager* m_pSceneMgr;
233#endif
234};
235
236
237#endif
Definition: CEnvironment.h:10
Definition: CNorrbinTanker.h:91
ISignalPort * m_pInForce
A pointer to the input force.
Definition: CNorrbinTanker.h:221
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:222