Marine systems simulation
Loading...
Searching...
No Matches
CTrawlDoor_base.h
1#ifndef CTrawlDoor_base_H
2#define CTrawlDoor_base_H
3
4#include <string>
5#include <math.h>
6
7#include <SimObject.h>
8#include "sfh/sim/kinematics.h"
9
10#include <EnvironmentProvider.h>
11
12
13
14#ifdef FH_VISUALIZATION
15#include "OgreParticleSystem.h"
16#ifdef USE_BILLBOARD_LABELS
17#include "sfh/ogre/CMovableText.h"
18#endif
19#endif
20
114//#define TD_AR 1.45
115//#define TD_C_X 0.11
116//#define TD_C_Z 0.22
117//#define TD_OUT_OF_BOUND_COEFF {0.2, 1.2, 0.4, 1.0, 1.0, 1.0}
118
119class CTrawlDoor_base : public SimObject
120{
121public:
123 CTrawlDoor_base(std::string sSimObjectName, ISimObjectCreator* pCreator);
124
126 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot, const bool bIsMajorTimeStep);
127
128
129#ifdef FH_VISUALIZATION
131 virtual void RenderInit(Ogre::Root* const pOgreRoot, ISimObjectCreator* const pCreator);
132
134 virtual void RenderUpdate(const double dT, const double* const adX);
135#endif
136
137protected:
138 virtual void TD_HydroForces(const double pRelVel[], double *pAlpha, double *pBeta, double *pU, double pForceSS[]);
139 //virtual void TD_AngularDamping(double rho, double TD_ARea, const double pRelVel[], double pAngDamp[]);
140 virtual void TD_HydroForces_SS(double TD_Area, double rho, const double pRelVel[], double alpha, double beta, double U, double* pCoeffSS, double* pForceSS);
141 virtual void TD_HydroCoeff_SS(double alpha, double beta, double pCoeffSS[]);
142 virtual void TD_vel2HydroAng(const double pRelVel[], double* pAlpha, double* pBeta, double* pU);
143 virtual void AddExternalForces(double dT, const double* const adX);
144 virtual void AddInternalForces();
145 virtual void AddHydroForces();
146 virtual void AddDampingForces();
147 virtual void AddBottomForces(){};
148 virtual void CalcDerivatives(double dT, double* const adXDot, const double* const adX);
149 virtual void CalcFoundation(const double dT, const double* const adX, double* const adXDot, bool bIsMajorTimeStep);
150 virtual void AddExternalForce(const double adPos_d[3], const double adForceExternal_n[3]);
151 virtual void CalcOutput(const double dT, const double* const adX);
152 void FinalSetup(const double dT, const double *const adX, ISimObjectCreator* const pCreator);
153 // Geometry and properties
155 double m_adCOG[3];
156 double m_dArea;
157 double m_dHeight;
158 double m_dLength;
159 double m_dAR;
160 double m_dCurvature;
161 double m_dMass;
162 double m_dMassInverse[6][6];
163 double m_mdCornerPos_body[4][3];
164 double m_dRhoDoor;
165
166 // Hydrodynamic forces
167 double m_adOutOfBoundCoeff[6];
168 double m_adHydrodynamicCorrections[6];
169
170 // Fastening points
171 double m_adWarpPos_d[3];
172 double m_adLBPos_d[3];
173 double m_adUBPos_d[3];
174
175 // External
176 double m_dRhoWater;
177 double m_adForce_warp[3];
178 double m_adForce_LB[3];
179 double m_adForce_UB[3];
180 double m_adWaterVel_n[3];
181 ICommonComputation* m_pCommonCalc;
182
183 environment::EnvironmentProvider* m_pEnvironment;
184
185 // Input ports
186 ISignalPort* m_pInWarp_F;
187 ISignalPort* m_pInLB_F;
188 ISignalPort* m_pInUB_F;
189
190 // Output ports
191 const double* OutPos1(const double dT, const double* const adX);
192 const double* OutPos3(const double dT, const double* const adX);
193 const double* OutPos2(const double dT, const double* const adX);
194 const double* OutVel1(const double dT, const double* const adX);
195 const double* OutVel3(const double dT, const double* const adX);
196 const double* OutVel2(const double dT, const double* const adX);
197
198 double m_adOutPos1[3];
199 double m_adOutPos3[3];
200 double m_adOutPos2[3];
201 double m_adOutVel1[3];
202 double m_adOutVel3[3];
203 double m_adOutVel2[3];
204
205 unsigned long m_IStatePos;
206 unsigned long m_IStateQuater;
207 unsigned long m_IStateLocalVel;
208 unsigned long m_IStateOmega;
209 unsigned long m_IStateHydroForce;
210
211 // For computational efficiency
212 double ma_adSumForces[6];
213 double ma_dAlpha;
214 double ma_dBeta;
215 double ma_dU;
216
217 const double* ma_adXPos_n;
218 const double* ma_adXQuater;
219 const double* ma_adXVel_d;
220 const double* ma_adXOmega;
221
222 double ma_mdR[3][3];
223 double ma_adXVel_n[3];
224 double ma_adHydroForceSS[6];
225 double ma_adRelVel_d[6];
226 double ma_adWaterVel_d[3];
227
228#ifdef FH_VISUALIZATION
229 void BottomContactRenderInit();
230 void RenderBottomContact(double depth, double m_aCornerPos_ned[4][3], double m_adSubmergence[4]);
231 Ogre::ParticleSystem* m_particleSystem;
232 Ogre::SceneNode* m_particleNode;
233 Ogre::ParticleEmitter* m_particleEmitter;
234 Ogre::Vector3 m_visualizationScale;
235
236 std::string m_sMeshName;
237 double m_dVisScale;
238 double m_dLengthScale;
239 double m_dHeightScale;
240 double m_dCurvatureScale;
241 Ogre::Entity* m_pRenderEntity;
242 Ogre::SceneNode* m_pRenderNode;
243 Ogre::Quaternion m_InitOrientation;
244 Ogre::SceneManager* m_pSceneMgr;
245
246#ifdef USE_BILLBOARD_LABELS
247 Ogre::SceneNode* m_BBRenderNode;
248 Ogre::CMovableText* m_BBTxt;
249 double m_dBBTxtSize;
250#endif
251#endif
252
253};
254
255
256#endif
Definition CTrawlDoor_base.h:120
double m_adForce_LB[3]
A pointer to the force.
Definition CTrawlDoor_base.h:178
double m_adWaterVel_n[3]
The water velocity in the door position.
Definition CTrawlDoor_base.h:180
double m_dRhoWater
The density of the surrounding fluid.
Definition CTrawlDoor_base.h:176
double m_adForce_warp[3]
A pointer to the Warp force.
Definition CTrawlDoor_base.h:177
double m_dRhoDoor
The density of the trawl door material.
Definition CTrawlDoor_base.h:164
bool m_bIsPort
Is this a port trawl door?
Definition CTrawlDoor_base.h:154
CTrawlDoor_base(std::string sSimObjectName, ISimObjectCreator *pCreator)
The constructor sets the pointer to the output object and the parser object.
ICommonComputation * m_pCommonCalc
Calculations necessary for more than one output port.
Definition CTrawlDoor_base.h:181
ISignalPort * m_pInLB_F
The cable length input port.
Definition CTrawlDoor_base.h:187
double m_dMass
The mass of the object.
Definition CTrawlDoor_base.h:161
ISignalPort * m_pInUB_F
The cable length input port.
Definition CTrawlDoor_base.h:188
double m_dArea
The trawldoor area.
Definition CTrawlDoor_base.h:156
ISignalPort * m_pInWarp_F
The cable length input port.
Definition CTrawlDoor_base.h:186
double m_adForce_UB[3]
A pointer to the input force.
Definition CTrawlDoor_base.h:179
double m_adCOG[3]
The trawl door center of gravity.
Definition CTrawlDoor_base.h:155
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep)
Calculates the state derivatives.