FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlDoorBase.h
1#pragma once
2
3#include "sfh/sim/kinematics.h"
4
5#include <fhsim/simobject/SimObject.h>
6#include <fhsim_environment/EnvironmentProvider.h>
7#include <math.h>
8#include <string>
9
10
11#ifdef FH_VISUALIZATION
12# include "OgreParticleSystem.h"
13# ifdef USE_BILLBOARD_LABELS
14# include "sfh/ogre/CMovableText.h"
15# endif
16#endif
17
110// #define TD_AR 1.45
111// #define TD_C_X 0.11
112// #define TD_C_Z 0.22
113// #define TD_OUT_OF_BOUND_COEFF {0.2, 1.2, 0.4, 1.0, 1.0, 1.0}
114
115class TrawlDoorBase : public SimObject
116{
117public:
119 TrawlDoorBase(std::string simObjectName, ISimObjectCreator* creator);
120
122 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const override;
123
133 bool HasJacobians() const override;
134 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
135 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
137
138
139#ifdef FH_VISUALIZATION
141 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
142
144 virtual void RenderUpdate(const double dT, const double* const adX);
145#endif
146
147protected:
148 virtual void TD_HydroForces(const double relVel[], double* alpha, double* beta, double* pU, double forceSS[]);
149 // virtual void TD_AngularDamping(double rho, double TD_ARea, const double relVel[], double angDamp[]);
150 virtual void TD_HydroForces_SS(double TD_Area, double rho, const double relVel[], double alpha, double beta, double U, double* coeffSS, double* forceSS);
151 virtual void TD_HydroCoeff_SS(double alpha, double beta, double coeffSS[]);
152 virtual void TD_vel2HydroAng(const double relVel[], double* alpha, double* beta, double* pU);
153 virtual void AddExternalForces(double dT, const double* const adX);
154 virtual void AddInternalForces();
155 virtual void AddHydroForces();
156 virtual void AddDampingForces();
157 virtual void AddBottomForces() { };
158 virtual void CalcDerivatives(double dT, double* const adXDot, const double* const adX);
159 virtual void CalcFoundation(const double dT, const double* const adX, double* const adXDot);
160 virtual void AddExternalForce(const double adPos_d[3], const double adForceExternal_n[3]);
161 virtual void CalcOutput(const double dT, const double* const adX);
162 void CalcOutputCommon(const double dT, const double* const adX) const;
163 void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
164 // Geometry and properties
165 bool m_isPort;
166 double m_cOG[3];
167 double m_area;
168 double m_height;
169 double m_length;
170 double m_aR;
171 double m_curvature;
172 double m_mass;
173 double m_massInverse[6][6];
174 double m_mdCornerPos_body[4][3];
175 double m_rhoDoor;
176
177 // Hydrodynamic forces
178 double m_outOfBoundCoeff[6];
179 double m_hydrodynamicCorrections[6];
180
181 // Fastening points
182 double m_warpPos_d[3];
183 double m_lBPos_d[3];
184 double m_uBPos_d[3];
185
186 // External
187 double m_rhoWater;
188 double m_force_warp[3];
189 double m_force_LB[3];
190 double m_force_UB[3];
191 double m_waterVel_n[3];
192 ICommonComputation* m_commonCalc;
193
194 environment::EnvironmentProvider* m_environment;
195
196 // Input ports
197 ISignalPort* m_inWarp_F;
198 ISignalPort* m_inLB_F;
199 ISignalPort* m_inUB_F;
200
201 // Output ports
202 const double* OutPos1(const double dT, const double* const adX);
203 const double* OutPos3(const double dT, const double* const adX);
204 const double* OutPos2(const double dT, const double* const adX);
205 const double* OutVel1(const double dT, const double* const adX);
206 const double* OutVel3(const double dT, const double* const adX);
207 const double* OutVel2(const double dT, const double* const adX);
208
209 double m_outPos1[3];
210 double m_outPos3[3];
211 double m_outPos2[3];
212 double m_outVel1[3];
213 double m_outVel3[3];
214 double m_outVel2[3];
215
216 unsigned long m_IStatePos;
217 unsigned long m_IStateQuater;
218 unsigned long m_IStateLocalVel;
219 unsigned long m_IStateOmega;
220 unsigned long m_IStateHydroForce;
221
222 // For computational efficiency
223 double ma_adSumForces[6];
224 double ma_dAlpha;
225 double ma_dBeta;
226 double ma_dU;
227
232
233 const double* ma_adXPos_n;
234 const double* ma_adXQuater;
235 const double* ma_adXVel_d;
236 const double* ma_adXOmega;
237
238 double ma_mdR[3][3];
239 double ma_adXVel_n[3];
240 double ma_adHydroForceSS[6];
241 double ma_adRelVel_d[6];
242 double ma_adWaterVel_d[3];
243
244#ifdef FH_VISUALIZATION
245 void BottomContactRenderInit();
246 void RenderBottomContact(double depth, double m_cornerPos_ned[4][3], double m_submergence[4]);
247 Ogre::ParticleSystem* m_particleSystem;
248 Ogre::SceneNode* m_particleNode;
249 Ogre::ParticleEmitter* m_particleEmitter;
250 Ogre::Vector3 m_visualizationScale;
251
252 std::string m_meshName;
253 double m_visScale;
254 double m_lengthScale;
255 double m_heightScale;
256 double m_curvatureScale;
257 Ogre::Entity* m_renderEntity;
258 Ogre::SceneNode* m_renderNode;
259 Ogre::Quaternion m_InitOrientation;
260 Ogre::SceneManager* m_sceneMgr;
261
262# ifdef USE_BILLBOARD_LABELS
263 Ogre::SceneNode* m_BBRenderNode;
264 Ogre::CMovableText* m_BBTxt;
265 double m_bBTxtSize;
266# endif
267#endif
268};
Definition TrawlDoorBase.h:116
double m_area
The trawldoor area.
Definition TrawlDoorBase.h:167
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot) const override
Calculates the state derivatives.
double m_force_warp[3]
A pointer to the Warp force.
Definition TrawlDoorBase.h:188
double m_rhoDoor
The density of the trawl door material.
Definition TrawlDoorBase.h:175
TrawlDoorBase(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
double m_waterVel_n[3]
The water velocity in the door position.
Definition TrawlDoorBase.h:191
double m_cOG[3]
The trawl door center of gravity.
Definition TrawlDoorBase.h:166
double m_rhoWater
The density of the surrounding fluid.
Definition TrawlDoorBase.h:187
double m_force_LB[3]
A pointer to the force.
Definition TrawlDoorBase.h:189
double m_force_UB[3]
A pointer to the input force.
Definition TrawlDoorBase.h:190
ISignalPort * m_inLB_F
The cable length input port.
Definition TrawlDoorBase.h:198
double m_mass
The mass of the object.
Definition TrawlDoorBase.h:172
ISignalPort * m_inUB_F
The cable length input port.
Definition TrawlDoorBase.h:199
bool m_isPort
Is this a port trawl door?
Definition TrawlDoorBase.h:165
ISignalPort * m_inWarp_F
The cable length input port.
Definition TrawlDoorBase.h:197
ICommonComputation * m_commonCalc
Calculations necessary for more than one output port.
Definition TrawlDoorBase.h:192
double m_outAlpha
Definition TrawlDoorBase.h:231