182 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
187 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
189 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
192 void PreOdeFcn(
double T,
const double* X, IStateUpdater* updater)
override;
194#ifdef FH_VISUALIZATION
196 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
199 virtual void RenderUpdate(
const double T,
const double*
const X);
202 static double* tanker_CX;
203 static double* tanker_CY;
204 static double* tanker_CN;
205 static double* tanker_CK;
207 Eigen::Matrix<double, 1, 9> DWT;
208 Eigen::Matrix<double, 1, 9> DISPL;
209 Eigen::Matrix<double, 1, 9> Lpp;
210 Eigen::Matrix<double, 1, 9> B;
211 Eigen::Matrix<double, 1, 9> D;
212 Eigen::Matrix<double, 1, 9> TT;
213 Eigen::Matrix<double, 1, 9> U0;
214 Eigen::Matrix<double, 1, 9> RPM0;
216 Eigen::Matrix<double, 1, 9> T;
218 Eigen::Matrix<double, 1, 9> Xdu;
219 Eigen::Matrix<double, 1, 9> Xuu;
220 Eigen::Matrix<double, 1, 9> Xvr;
221 Eigen::Matrix<double, 1, 9> Xvv;
223 Eigen::Matrix<double, 3, 9> Xccdd;
224 Eigen::Matrix<double, 1, 9> Xccbd;
227 Eigen::Matrix<double, 1, 9> Xduz;
228 Eigen::Matrix<double, 1, 9> Xuuz;
229 Eigen::Matrix<double, 1, 9> Xvrz;
230 Eigen::Matrix<double, 1, 9> Xvvzz;
232 Eigen::Matrix<double, 1, 9> Ydv;
233 Eigen::Matrix<double, 1, 9> Yur;
234 Eigen::Matrix<double, 1, 9> Yuv;
235 Eigen::Matrix<double, 1, 9> Yvv;
237 Eigen::Matrix<double, 3, 9> Yccd;
238 Eigen::Matrix<double, 1, 9> Yccbbd;
240 Eigen::Matrix<double, 1, 9> Yt;
242 Eigen::Matrix<double, 1, 9> Ydvz;
243 Eigen::Matrix<double, 1, 9> Yurz;
244 Eigen::Matrix<double, 1, 9> Yuvz;
245 Eigen::Matrix<double, 1, 9> Yvvz;
246 Eigen::Matrix<double, 1, 9> Yccbbdz;
248 Eigen::Matrix<double, 1, 9> kk_Ndr;
249 Eigen::Matrix<double, 1, 9> Nur_xg;
250 Eigen::Matrix<double, 1, 9> Nuv;
251 Eigen::Matrix<double, 1, 9> Nvr;
253 Eigen::Matrix<double, 3, 9> Nccd;
255 Eigen::Matrix<double, 1, 9> Nccbbd;
256 Eigen::Matrix<double, 1, 9> Nt;
258 Eigen::Matrix<double, 1, 9> Ndrz;
259 Eigen::Matrix<double, 1, 9> Nurz;
260 Eigen::Matrix<double, 1, 9> Nuvz;
261 Eigen::Matrix<double, 1, 9> Nvrz;
262 Eigen::Matrix<double, 1, 9> Nccbbdz;
264 Eigen::Matrix<double, 1, 9> Tuu;
265 Eigen::Matrix<double, 1, 9> Tun;
266 Eigen::Matrix<double, 1, 9> Tnn;
269 Eigen::Matrix<double, 1, 9> Cun;
270 Eigen::Matrix<double, 1, 9> Cnn;
273 Eigen::Matrix<double, 1, 9> kk_Qn;
274 Eigen::Matrix<double, 1, 9> Qf;
275 Eigen::Matrix<double, 1, 9> Quu;
276 Eigen::Matrix<double, 1, 9> Qun;
277 Eigen::Matrix<double, 1, 9> Qnn;
278 Eigen::Matrix<double, 1, 9> Qn;
279 Eigen::Matrix<double, 1, 9> Qmu;
283 int m_indexStateDelta;
284 int m_indexStateVelocity;
285 int m_indexStateOmega;
286 int m_indexStateRotation;
287 int m_indexStatePosition;
302 environment::wake::WakeCastState
Reference(
double T,
const double* X)
const override;
304 void CurrentLoad(
double T,
const double* X,
const double freeStream[3],
const double flowDir[3],
double force[3],
double& frontalArea,
305 double rearCentre[3])
const override;
307 environment::wake::PropellerJetInput
PropellerJet(
double T,
const double* X)
const override;
314 environment::wake::BodyFlowInteraction
m_flow;
322 void HullInflow(
double T,
const double* X,
double current[3])
const;
324 virtual const double* Position(
const double dT,
const double*
const adX);
325 virtual const double* Velocity(
const double dT,
const double*
const adX);
326 virtual const double* Rotation(
const double dT,
const double*
const adX);
327 virtual const double* Omega(
const double dT,
const double*
const adX);
329 ISignalPort* m_InEngineControl;
330 ISignalPort* m_InRudderControl;
332 double comp_beta(
double u,
double v)
const;
333 double comp_c(
double u,
double n)
const;
334 double comp_ndot(
double u,
double n,
double my)
const;
335 double compute_gT(
double u,
double n)
const;
337 double rudder_gln(
double beta,
double c,
double delta,
double z)
const;
338 double rudder_gy(
double beta,
double c,
double delta,
double z)
const;
339 double rudder_gx(
double beta,
double c,
double delta)
const;
341 double comp_Yuv(
double z)
const;
342 double comp_m11(
double z)
const;
343 double comp_m22(
double z)
const;
344 double comp_m33(
double z)
const;
345 double nlin_N(
double u,
double v,
double r,
double z)
const;
346 double nlin_Y(
double u,
double v,
double r,
double z)
const;
347 double nlin_X(
double u,
double v,
double r,
double z)
const;
352 bool HasJacobians()
const override;
353 void OdeJacobian(
double simTime,
const double* X,
double* J,
int nStates)
override;
354 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
356 unsigned int m_tankerType;
357 unsigned int m_rudderType;
362 environment::EnvironmentProvider* m_Environment;
364#ifdef FH_VISUALIZATION
365 std::string m_sMaterial;
366 std::string m_sMeshName;
368 Ogre::Entity* m_pRenderEntity;
369 Ogre::SceneNode* m_pRenderNode;
370 Ogre::SceneManager* m_pSceneMgr;
373 void AttachHullMesh(
const Ogre::Vector3& userScale);