FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
TrawlCable.h
1#pragma once
2
90#include "ITrawlCable.h"
91// #include "ICollidableObject.h"
92// #include "ConstraintCableInterface.h"
93
94
95#ifdef FH_VISUALIZATION
96# include "sfh/ogre/C3DLine.h"
97#endif
98
99class TrawlCable : public SimObject, public ITrawlCable
100{
101public:
107 TrawlCable(const std::string& simObjectName, ISimObjectCreator* const creator);
108
113
118 void OdeFcn(const double T, const double* const X, double* const XDot) const;
119
123 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
124
129 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
130
131
132#ifdef FH_VISUALIZATION
133 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
134 void RenderUpdate(const double T, const double* const X);
135#endif
136
137 void Compute(const double T, const double* const X);
138 void AddDependency(ICommonComputation* dependecy);
139 CoRiBoDynamics::ConstraintSolver* GetConstraintSolver();
143 double getRegulatorTimeConstant();
144
145protected:
146 void MainCalculations(const double T, const double* const X);
147 void MainCalculationsCommon(const double T, const double* const X) const;
148
149 struct element
150 {
151 int p;
152 int q;
153 int v;
154 int w;
155 int n;
156 };
157 void DistributeCatenary(CoRiBoDynamics::vec3 P1, CoRiBoDynamics::vec3 P2, std::vector<element> elements, double L, double* states, int i1, int i2, ISimObjectCreator* creator);
158
159 environment::EnvironmentProvider* m_environment;
160
161 enum Chirality
162 {
163 PORT,
164 STARBOARD
165 };
166 Chirality m_Chirality;
167
168 double m_TrawlDoorMass;
169 double m_TrawlDoorArea;
170 double m_TrawlDoorLx;
171 double m_TrawlDoorLy;
172 double m_TrawlDoorLz;
173 CoRiBoDynamics::vec3 m_TrawlDoorWarpConnection;
174 CoRiBoDynamics::vec3 m_TrawlDoorTopBridleConnection;
175 CoRiBoDynamics::vec3 m_TrawlDoorBottomBridleConnection;
176
177 double m_ClumpWeightMass;
178 double m_ClumpWeightLength;
179 double m_ClumpWeightRadius;
180
181 int m_NumTopWarp;
182 double m_TopWarpLength;
183 double m_TopWarpElementLength;
184
185 int m_NumWarp;
188
192
196
199
203
205 // double m_collisionStiffness; /// Gamma value of contact constraint.
206
207 CoRiBoDynamics::ConstraintSolver* m_ConstraintSolver;
211
212 std::set<ICommonComputation*> m_ExternalDependencies;
213
214 ICommonComputation* m_MainCalculations;
215 ITrawlCable* m_ExtTrawlCable;
216
217 std::vector<element> m_TopWarpElements;
218 std::vector<element> m_WarpElements;
219 std::vector<element> m_TopBridleElements;
220 std::vector<element> m_BottomBridleElements;
221 element m_TrawlDoorElement;
222 element m_TrawlDoorWeightElement;
223
224 element m_ClumpWeightElement;
225
226 const double* winchForce(const double T, const double* const X);
227 double m_winchForce[3];
228 int m_WinchPointConnectionIndex;
229
230 const double* TopBridleEndForce(const double T, const double* const X);
231 double m_TopBridleEndForce[3];
232 int m_TopBridleEndPointConnectionIndex;
233
234 const double* BottomBridleEndForce(const double T, const double* const X);
235 double m_BottomBridleEndForce[3];
236 int m_BottomBridleEndPointConnectionIndex;
237
238 const double* trawlDoorPosition(const double T, const double* const X);
239
240
241 ICommonComputation* m_ContactForceCalculations;
242 void ContactForceCalculations(const double T, const double* const X);
243 void ContactForceCalculationsCommon(const double T, const double* const X) const;
244 const double* normalForceTrawlDoor(const double T, const double* const X);
245 const double* normalForceClumpWeight(const double T, const double* const X);
246 const double* normalForceTopBridle(const double T, const double* const X);
247 const double* normalForceBottomBridle(const double T, const double* const X);
248 const double* normalForceWarp(const double T, const double* const X);
249 const double* contactPositionTopBridle(const double T, const double* const X);
250 const double* contactPositionBottomBridle(const double T, const double* const X);
251 const double* contactPositionWarp(const double T, const double* const X);
252 double m_normalForceTrawlDoor[1];
253 double m_normalForceClumpWeight[1];
254 double m_normalForceTopBridle[3];
255 double m_normalForceBottomBridle[3];
256 double m_normalForceWarp[3];
257
258 ISignalPort* m_WinchPosition;
259 ISignalPort* m_WinchVelocity;
260
261 ISignalPort* m_TopBridleEndPosition;
262 ISignalPort* m_TopBridleEndVelocity;
263
264 ISignalPort* m_BottomBridleEndPosition;
265 ISignalPort* m_BottomBridleEndVelocity;
266
267#ifdef FH_VISUALIZATION
268 bool m_HQ_Render;
269 Ogre::SceneNode** m_TopWarpNodes;
270 Ogre::SceneNode** m_WarpNodes;
271 Ogre::SceneNode** m_TopBridleNodes;
272 Ogre::SceneNode** m_BottomBridleNodes;
273 Ogre::SceneNode* m_TrawlDoorNode;
274 Ogre::SceneNode* m_ClumpWeightNode;
275 C3DLine* m_TopWarpLine;
276 C3DLine* m_WarpLine;
277 C3DLine* m_TopBridleLine;
278 C3DLine* m_BottomBridleLine;
279#endif
280};
Definition TrawlCableConstraintSets.h:117
Definition TrawlCableConstraintSets.h:71
Definition TrawlCableConstraintSets.h:11
Definition ITrawlCable.h:18
Definition TrawlCable.h:100
double m_CollisionFrequencyCoefficient
Frequency response coefficient.
Definition TrawlCable.h:198
double m_TopBridleLength
Warp cable length.
Definition TrawlCable.h:194
double m_WarpLength
Nominal cable diameter.
Definition TrawlCable.h:193
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
double m_frequencyCoefficient
Bridle cable length.
Definition TrawlCable.h:197
CoRiBoDynamics::TrawlCableJointConstraint * m_JointConstraint
collision constraints
Definition TrawlCable.h:209
double m_TopBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:190
double m_BottomBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:202
CoRiBoDynamics::TrawlCableCollisionManager * m_CollisionManager
6dof rigid body constrained dynamic solver
Definition TrawlCable.h:208
CoRiBoDynamics::TrawlCableCollisionManager * GetCollisionManager()
6dof rigid body constrained dynamic solver
int m_NumTopBridle
The number of discrete cable elements in the warp.
Definition TrawlCable.h:186
double m_BottomBridleDiameter
Nominal cable diameter.
Definition TrawlCable.h:191
CoRiBoDynamics::EnvironmentForces * GetEnvironmentForces()
structural joint constraints
TrawlCable(const std::string &simObjectName, ISimObjectCreator *const creator)
double m_WarpElementLength
Frequency response coefficient.
Definition TrawlCable.h:200
CoRiBoDynamics::TrawlCableJointConstraint * GetJointConstraint()
collision constraints
double m_WarpDiameter
The number of discrete cable elements int the lower bridle.
Definition TrawlCable.h:189
double m_BottomBridleLength
Bridle cable length.
Definition TrawlCable.h:195
double m_collisionDampingFactor
Length of discrete cable elements.
Definition TrawlCable.h:204
int m_NumBottomBridle
The number of discrete cable elements in the top bridle.
Definition TrawlCable.h:187
CoRiBoDynamics::EnvironmentForces * m_environmentForces
structural joint constraints
Definition TrawlCable.h:210
double m_TopBridleElementLength
Length of discrete cable elements.
Definition TrawlCable.h:201
ICommonComputation * m_MainCalculations
list of all (unique) CommonComputation nodes that have registered external geometry in the cable coll...
Definition TrawlCable.h:214
void OdeFcn(const double T, const double *const X, double *const XDot) const
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator)
CoRiBoDynamics::ConstraintSolver * m_ConstraintSolver
Relative damping coefficient of contact constraint. 1 is critical damping.
Definition TrawlCable.h:207
Definition TrawlCable.h:150