FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
RundDorg.h
1#pragma once
155// #include "ITrawlCable.h"
156// #include "ICollidableObject.h"
157// #include "ConstraintCableInterface.h"
158#include "TrawlCableConstraintSets.h"
159
160#include <fhsim/simobject/SimObject.h>
161#include <fhsim_coribo/eigen_matrix_defs.h>
162
163#ifdef FH_VISUALIZATION
164# include "sfh/ogre/C3DLine.h"
165#endif
166
167class RundDorg : public SimObject //, public ITrawlCable
168{
169public:
175 RundDorg(const std::string& simObjectName, ISimObjectCreator* const creator);
176
181
186 void OdeFcn(const double T, const double* const X, double* const XDot) const;
187
191 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
192
197 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
198
199
200#ifdef FH_VISUALIZATION
201 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
202 void RenderUpdate(const double T, const double* const X);
203#endif
204
205protected:
206 void MainCalculations(const double T, const double* const X);
207 void MainCalculationsCommon(const double T, const double* const X) const;
208
209 struct element
210 {
211 int p;
212 int q;
213 int v;
214 int w;
215 int n;
216 };
217 void DistributeCatenary(CoRiBoDynamics::vec3 P1, CoRiBoDynamics::vec3 P2, std::vector<element> elements, double L, double* states, int i1, int i2, ISimObjectCreator* creator);
218
219 environment::EnvironmentProvider* m_environment;
220
221 enum Chirality
222 {
223 PORT,
224 STARBOARD
225 };
226 Chirality m_Chirality;
227
228 enum WeightType
229 {
230 FOIL,
231 CLUMP
232 };
233 WeightType m_WeightType;
234
235 double m_FoilMass;
236 double m_FoilArea;
237 double m_FoilLx;
238 double m_FoilLy;
239 double m_FoilLz;
240 CoRiBoDynamics::vec3 m_WeightMainConnection;
241 CoRiBoDynamics::vec3 m_WeightFishLine1Connection;
242 CoRiBoDynamics::vec3 m_WeightFishLine2Connection;
243
244 double m_ClumpWeightMass;
245 double m_ClumpWeightLength;
246 double m_ClumpWeightRadius;
247
248 int m_NumMain;
251
255
259
261
265
266 CoRiBoDynamics::ConstraintSolver* m_ConstraintSolver;
269
270 ICommonComputation* m_MainCalculations;
271
272 std::vector<element> m_MainElements;
273 std::vector<element> m_Line1Elements;
274 std::vector<element> m_Line2Elements;
275 element m_FoilElement;
276 element m_FoilWeightElement;
277 element m_ClumpWeightElement;
278
280 const double* ExternalJointForce(const double T, const double* const X, int connectionIndex, double* force);
281
282 const double* MainForce(const double T, const double* const X);
283 const double* MainForceVector(const double T, const double* const X);
284 double m_MainForce[3];
285 double m_MainForceMagnitude;
286 int m_MainForceConnectionIndex;
287
288 const double* Line1Force(const double T, const double* const X);
289 const double* Line1ForceVector(const double T, const double* const X);
290 double m_Line1Force[3];
291 double m_Line1ForceMagnitude;
292 int m_Line1ConnectionIndex;
293
294 const double* Line2Force(const double T, const double* const X);
295 const double* Line2ForceVector(const double T, const double* const X);
296 double m_Line2Force[3];
297 double m_Line2ForceMagnitude;
298 int m_Line2ConnectionIndex;
299
300 const double* WeightPosition(const double T, const double* const X);
301
302 /*const double* WeightMainForce( const double T, const double* const X );
303 double m_WeightMainForce[3];
304 const double* WeightLine1Force( const double T, const double* const X );
305 double m_WeightLine1Force[3];
306 const double* WeightLine2Force( const double T, const double* const X );
307 double m_WeightLine2Force[3];*/
308
309 ISignalPort* MainPosition;
310 ISignalPort* m_MainVelocity;
311
312 ISignalPort* m_Line1Position;
313 ISignalPort* m_Line1Velocity;
314
315 ISignalPort* m_Line2Position;
316 ISignalPort* m_Line2Velocity;
317
318#ifdef FH_VISUALIZATION
319 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
320 bool m_HQ_Render;
321 Ogre::SceneNode** m_MainNodes = nullptr;
322 Ogre::SceneNode** m_Line1Nodes = nullptr;
323 Ogre::SceneNode** m_Line2Nodes = nullptr;
324 Ogre::SceneNode* m_WeightNode = nullptr;
325 C3DLine* m_MainLine = nullptr;
326 C3DLine* m_Line1Line = nullptr;
327 C3DLine* m_Line2Line = nullptr;
328#endif
329};
Definition TrawlCableConstraintSets.h:119
Definition TrawlCableConstraintSets.h:11
Definition RundDorg.h:168
void FinalSetup(const double T, const double *const X, ISimObjectCreator *const creator)
int m_NumLine1
The number of discrete cable elements in the warp.
Definition RundDorg.h:249
double m_MainDiameter
The number of discrete cable elements int the lower bridle.
Definition RundDorg.h:252
const double * ExternalJointForce(const double T, const double *const X, int connectionIndex, double *force)
Store the force of an external ball joint in force and return it.
RundDorg(const std::string &simObjectName, ISimObjectCreator *const creator)
CoRiBoDynamics::ConstraintSolver * m_ConstraintSolver
Length of discrete cable elements.
Definition RundDorg.h:266
void OdeFcn(const double T, const double *const X, double *const XDot) const
void InitialConditionSetup(const double T, const double *const currentIC, double *const updatedIC, ISimObjectCreator *const creator)
double m_Line2ElementLength
Length of discrete cable elements.
Definition RundDorg.h:264
double m_Line1ElementLength
Length of discrete cable elements.
Definition RundDorg.h:263
CoRiBoDynamics::TrawlCableJointConstraint * m_JointConstraint
6dof rigid body constrained dynamic solver
Definition RundDorg.h:267
CoRiBoDynamics::EnvironmentForces * m_environmentForces
structural joint constraints
Definition RundDorg.h:268
double m_MainElementLength
Frequency response coefficient.
Definition RundDorg.h:262
double m_frequencyCoefficient
Bridle cable length.
Definition RundDorg.h:260
double m_Line1Diameter
Nominal cable diameter.
Definition RundDorg.h:253
int m_NumLine2
The number of discrete cable elements in the top bridle.
Definition RundDorg.h:250
double m_Line2Length
Bridle cable length.
Definition RundDorg.h:258
double m_Line2Diameter
Nominal cable diameter.
Definition RundDorg.h:254
double m_MainLength
Nominal cable diameter.
Definition RundDorg.h:256
double m_Line1Length
Warp cable length.
Definition RundDorg.h:257
Definition RundDorg.h:210