143 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
148 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
150 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
152#ifdef FH_VISUALIZATION
154 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
157 virtual void RenderUpdate(
const double T,
const double*
const X);
160 static double* tanker_CX;
161 static double* tanker_CY;
162 static double* tanker_CN;
163 static double* tanker_CK;
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;
174 Eigen::Matrix<double, 1, 9> T;
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;
181 Eigen::Matrix<double, 3, 9> Xccdd;
182 Eigen::Matrix<double, 1, 9> Xccbd;
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;
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;
195 Eigen::Matrix<double, 3, 9> Yccd;
196 Eigen::Matrix<double, 1, 9> Yccbbd;
198 Eigen::Matrix<double, 1, 9> Yt;
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;
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;
211 Eigen::Matrix<double, 3, 9> Nccd;
213 Eigen::Matrix<double, 1, 9> Nccbbd;
214 Eigen::Matrix<double, 1, 9> Nt;
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;
222 Eigen::Matrix<double, 1, 9> Tuu;
223 Eigen::Matrix<double, 1, 9> Tun;
224 Eigen::Matrix<double, 1, 9> Tnn;
227 Eigen::Matrix<double, 1, 9> Cun;
228 Eigen::Matrix<double, 1, 9> Cnn;
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;
241 int m_indexStateDelta;
242 int m_indexStateVelocity;
243 int m_indexStateOmega;
244 int m_indexStateRotation;
245 int m_indexStatePosition;
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);
253 ISignalPort* m_InEngineControl;
254 ISignalPort* m_InRudderControl;
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;
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;
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;
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;
278 unsigned int m_tankerType;
279 unsigned int m_rudderType;
284 environment::EnvironmentProvider* m_Environment;
286#ifdef FH_VISUALIZATION
287 std::string m_sMaterial;
288 std::string m_sMeshName;
290 Ogre::Entity* m_pRenderEntity;
291 Ogre::SceneNode* m_pRenderNode;
292 Ogre::SceneManager* m_pSceneMgr;
295 void AttachHullMesh(
const Ogre::Vector3& userScale);