144 EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
149 void FinalSetup(
const double T,
const double*
const X, ISimObjectCreator*
const creator);
151 void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
153#ifdef FH_VISUALIZATION
155 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
158 virtual void RenderUpdate(
const double T,
const double*
const X);
161 static double* tanker_CX;
162 static double* tanker_CY;
163 static double* tanker_CN;
164 static double* tanker_CK;
166 Eigen::Matrix<double, 1, 9> DWT;
167 Eigen::Matrix<double, 1, 9> DISPL;
168 Eigen::Matrix<double, 1, 9> Lpp;
169 Eigen::Matrix<double, 1, 9> B;
170 Eigen::Matrix<double, 1, 9> D;
171 Eigen::Matrix<double, 1, 9> TT;
172 Eigen::Matrix<double, 1, 9> U0;
173 Eigen::Matrix<double, 1, 9> RPM0;
175 Eigen::Matrix<double, 1, 9> T;
177 Eigen::Matrix<double, 1, 9> Xdu;
178 Eigen::Matrix<double, 1, 9> Xuu;
179 Eigen::Matrix<double, 1, 9> Xvr;
180 Eigen::Matrix<double, 1, 9> Xvv;
182 Eigen::Matrix<double, 3, 9> Xccdd;
183 Eigen::Matrix<double, 1, 9> Xccbd;
186 Eigen::Matrix<double, 1, 9> Xduz;
187 Eigen::Matrix<double, 1, 9> Xuuz;
188 Eigen::Matrix<double, 1, 9> Xvrz;
189 Eigen::Matrix<double, 1, 9> Xvvzz;
191 Eigen::Matrix<double, 1, 9> Ydv;
192 Eigen::Matrix<double, 1, 9> Yur;
193 Eigen::Matrix<double, 1, 9> Yuv;
194 Eigen::Matrix<double, 1, 9> Yvv;
196 Eigen::Matrix<double, 3, 9> Yccd;
197 Eigen::Matrix<double, 1, 9> Yccbbd;
199 Eigen::Matrix<double, 1, 9> Yt;
201 Eigen::Matrix<double, 1, 9> Ydvz;
202 Eigen::Matrix<double, 1, 9> Yurz;
203 Eigen::Matrix<double, 1, 9> Yuvz;
204 Eigen::Matrix<double, 1, 9> Yvvz;
205 Eigen::Matrix<double, 1, 9> Yccbbdz;
207 Eigen::Matrix<double, 1, 9> kk_Ndr;
208 Eigen::Matrix<double, 1, 9> Nur_xg;
209 Eigen::Matrix<double, 1, 9> Nuv;
210 Eigen::Matrix<double, 1, 9> Nvr;
212 Eigen::Matrix<double, 3, 9> Nccd;
214 Eigen::Matrix<double, 1, 9> Nccbbd;
215 Eigen::Matrix<double, 1, 9> Nt;
217 Eigen::Matrix<double, 1, 9> Ndrz;
218 Eigen::Matrix<double, 1, 9> Nurz;
219 Eigen::Matrix<double, 1, 9> Nuvz;
220 Eigen::Matrix<double, 1, 9> Nvrz;
221 Eigen::Matrix<double, 1, 9> Nccbbdz;
223 Eigen::Matrix<double, 1, 9> Tuu;
224 Eigen::Matrix<double, 1, 9> Tun;
225 Eigen::Matrix<double, 1, 9> Tnn;
228 Eigen::Matrix<double, 1, 9> Cun;
229 Eigen::Matrix<double, 1, 9> Cnn;
232 Eigen::Matrix<double, 1, 9> kk_Qn;
233 Eigen::Matrix<double, 1, 9> Qf;
234 Eigen::Matrix<double, 1, 9> Quu;
235 Eigen::Matrix<double, 1, 9> Qun;
236 Eigen::Matrix<double, 1, 9> Qnn;
237 Eigen::Matrix<double, 1, 9> Qn;
238 Eigen::Matrix<double, 1, 9> Qmu;
242 int m_indexStateDelta;
243 int m_indexStateVelocity;
244 int m_indexStateOmega;
245 int m_indexStateRotation;
246 int m_indexStatePosition;
255 int LocalIndex(
int globalStateIndex)
const {
return globalStateIndex - m_indexStatePosition; }
258 virtual const double* Position(
const double dT,
const double*
const adX);
259 virtual const double* Velocity(
const double dT,
const double*
const adX);
260 virtual const double* Rotation(
const double dT,
const double*
const adX);
261 virtual const double* Omega(
const double dT,
const double*
const adX);
263 ISignalPort* m_InEngineControl;
264 ISignalPort* m_InRudderControl;
266 double comp_beta(
double u,
double v)
const;
267 double comp_c(
double u,
double n)
const;
268 double comp_ndot(
double u,
double n,
double my)
const;
269 double compute_gT(
double u,
double n)
const;
271 double rudder_gln(
double beta,
double c,
double delta,
double z)
const;
272 double rudder_gy(
double beta,
double c,
double delta,
double z)
const;
273 double rudder_gx(
double beta,
double c,
double delta)
const;
275 double comp_Yuv(
double z)
const;
276 double comp_m11(
double z)
const;
277 double comp_m22(
double z)
const;
278 double comp_m33(
double z)
const;
279 double nlin_N(
double u,
double v,
double r,
double z)
const;
280 double nlin_Y(
double u,
double v,
double r,
double z)
const;
281 double nlin_X(
double u,
double v,
double r,
double z)
const;
284 bool HasJacobians()
const override;
285 void OdeJacobian(
double simTime,
const double* X,
double* J,
int nStates)
override;
286 int GetJacobianSparsity(
int nStates,
int* rowPtr,
int* colIdx)
override;
288 unsigned int m_tankerType;
289 unsigned int m_rudderType;
294 environment::EnvironmentProvider* m_Environment;
296#ifdef FH_VISUALIZATION
297 std::string m_sMaterial;
298 std::string m_sMeshName;
300 Ogre::Entity* m_pRenderEntity;
301 Ogre::SceneNode* m_pRenderNode;
302 Ogre::SceneManager* m_pSceneMgr;
305 void AttachHullMesh(
const Ogre::Vector3& userScale);