183 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
188 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
190 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
195#ifdef FH_VISUALIZATION
197 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
200 virtual void RenderUpdate(
const double T,
const double*
const X);
203 static double* tanker_CX;
204 static double* tanker_CY;
205 static double* tanker_CN;
206 static double* tanker_CK;
208 Eigen::Matrix<double, 1, 9> DWT;
209 Eigen::Matrix<double, 1, 9> DISPL;
210 Eigen::Matrix<double, 1, 9> Lpp;
211 Eigen::Matrix<double, 1, 9> B;
212 Eigen::Matrix<double, 1, 9> D;
213 Eigen::Matrix<double, 1, 9> TT;
214 Eigen::Matrix<double, 1, 9> U0;
215 Eigen::Matrix<double, 1, 9> RPM0;
217 Eigen::Matrix<double, 1, 9> T;
219 Eigen::Matrix<double, 1, 9> Xdu;
220 Eigen::Matrix<double, 1, 9> Xuu;
221 Eigen::Matrix<double, 1, 9> Xvr;
222 Eigen::Matrix<double, 1, 9> Xvv;
224 Eigen::Matrix<double, 3, 9> Xccdd;
225 Eigen::Matrix<double, 1, 9> Xccbd;
228 Eigen::Matrix<double, 1, 9> Xduz;
229 Eigen::Matrix<double, 1, 9> Xuuz;
230 Eigen::Matrix<double, 1, 9> Xvrz;
231 Eigen::Matrix<double, 1, 9> Xvvzz;
233 Eigen::Matrix<double, 1, 9> Ydv;
234 Eigen::Matrix<double, 1, 9> Yur;
235 Eigen::Matrix<double, 1, 9> Yuv;
236 Eigen::Matrix<double, 1, 9> Yvv;
238 Eigen::Matrix<double, 3, 9> Yccd;
239 Eigen::Matrix<double, 1, 9> Yccbbd;
241 Eigen::Matrix<double, 1, 9> Yt;
243 Eigen::Matrix<double, 1, 9> Ydvz;
244 Eigen::Matrix<double, 1, 9> Yurz;
245 Eigen::Matrix<double, 1, 9> Yuvz;
246 Eigen::Matrix<double, 1, 9> Yvvz;
247 Eigen::Matrix<double, 1, 9> Yccbbdz;
249 Eigen::Matrix<double, 1, 9> kk_Ndr;
250 Eigen::Matrix<double, 1, 9> Nur_xg;
251 Eigen::Matrix<double, 1, 9> Nuv;
252 Eigen::Matrix<double, 1, 9> Nvr;
254 Eigen::Matrix<double, 3, 9> Nccd;
256 Eigen::Matrix<double, 1, 9> Nccbbd;
257 Eigen::Matrix<double, 1, 9> Nt;
259 Eigen::Matrix<double, 1, 9> Ndrz;
260 Eigen::Matrix<double, 1, 9> Nurz;
261 Eigen::Matrix<double, 1, 9> Nuvz;
262 Eigen::Matrix<double, 1, 9> Nvrz;
263 Eigen::Matrix<double, 1, 9> Nccbbdz;
265 Eigen::Matrix<double, 1, 9> Tuu;
266 Eigen::Matrix<double, 1, 9> Tun;
267 Eigen::Matrix<double, 1, 9> Tnn;
270 Eigen::Matrix<double, 1, 9> Cun;
271 Eigen::Matrix<double, 1, 9> Cnn;
274 Eigen::Matrix<double, 1, 9> kk_Qn;
275 Eigen::Matrix<double, 1, 9> Qf;
276 Eigen::Matrix<double, 1, 9> Quu;
277 Eigen::Matrix<double, 1, 9> Qun;
278 Eigen::Matrix<double, 1, 9> Qnn;
279 Eigen::Matrix<double, 1, 9> Qn;
280 Eigen::Matrix<double, 1, 9> Qmu;
284 int m_indexStateDelta;
285 int m_indexStateVelocity;
286 int m_indexStateOmega;
287 int m_indexStateRotation;
288 int m_indexStatePosition;
303 environment::wake::WakeCastState
Reference(
double T,
const double* X)
const override;
305 void CurrentLoad(
double T,
const double* X,
const double freeStream[3],
const double flowDir[3],
double force[3],
double& frontalArea,
306 double rearCentre[3])
const override;
308 environment::wake::PropellerJetInput
PropellerJet(
double T,
const double* X)
const override;
315 environment::wake::BodyFlowInteraction
m_flow;
323 void HullInflow(
double T,
const double* X,
double current[3])
const;
325 virtual const double* Position(
const double dT,
const double*
const adX);
326 virtual const double* Velocity(
const double dT,
const double*
const adX);
327 virtual const double* Rotation(
const double dT,
const double*
const adX);
328 virtual const double* Omega(
const double dT,
const double*
const adX);
330 ISignalPort* m_InEngineControl;
331 ISignalPort* m_InRudderControl;
333 double comp_beta(
double u,
double v)
const;
334 double comp_c(
double u,
double n)
const;
335 double comp_ndot(
double u,
double n,
double my)
const;
336 double compute_gT(
double u,
double n)
const;
338 double rudder_gln(
double beta,
double c,
double delta,
double z)
const;
339 double rudder_gy(
double beta,
double c,
double delta,
double z)
const;
340 double rudder_gx(
double beta,
double c,
double delta)
const;
342 double comp_Yuv(
double z)
const;
343 double comp_m11(
double z)
const;
344 double comp_m22(
double z)
const;
345 double comp_m33(
double z)
const;
346 double nlin_N(
double u,
double v,
double r,
double z)
const;
347 double nlin_Y(
double u,
double v,
double r,
double z)
const;
348 double nlin_X(
double u,
double v,
double r,
double z)
const;
353 bool HasJacobians()
const override;
354 void OdeJacobian(
double simTime,
const double* X,
double* J,
int nStates)
override;
355 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
357 unsigned int m_tankerType;
358 unsigned int m_rudderType;
363 environment::EnvironmentProvider* m_Environment;
365#ifdef FH_VISUALIZATION
366 std::string m_sMaterial;
367 std::string m_sMeshName;
369 Ogre::Entity* m_pRenderEntity;
370 Ogre::SceneNode* m_pRenderNode;
371 Ogre::SceneManager* m_pSceneMgr;
374 void AttachHullMesh(
const Ogre::Vector3& userScale);