FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
RundDorg.h
1#pragma once
182// #include "ITrawlCable.h"
183// #include "ICollidableObject.h"
184// #include "ConstraintCableInterface.h"
185#include "CableSegment.h"
186#include "TrawlRig.h"
187
188#include <fhsim/simobject/SimObject.h>
189#include <fhsim_coribo/eigen_matrix_defs.h>
190#include <memory>
191
192#ifdef FH_VISUALIZATION
193# include "sfh/ogre/C3DLine.h"
194#endif
195
196class RundDorg : public SimObject //, public ITrawlCable
197{
198public:
204 RundDorg(const std::string& simObjectName, ISimObjectCreator* const creator);
205
210
215 void OdeFcn(const double T, const double* const X, double* const XDot) const;
216
220 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
221
226 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
227
231 void PreOdeFcn(const double T, const double* const X, IStateUpdater* const updater) override;
232
233
234#ifdef FH_VISUALIZATION
235 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
236 void RenderUpdate(const double T, const double* const X);
237#endif
238
239protected:
240 void MainCalculations(const double T, const double* const X);
241 void MainCalculationsCommon(const double T, const double* const X) const;
242
243
244
245 enum Chirality
246 {
247 PORT,
248 STARBOARD
249 };
250 Chirality m_Chirality;
251
252 enum WeightType
253 {
254 FOIL,
255 CLUMP
256 };
257 WeightType m_WeightType;
258
259 double m_FoilMass;
260 double m_FoilArea;
261 double m_FoilLx;
262 double m_FoilLy;
263 double m_FoilLz;
264 CoRiBoDynamics::vec3 m_WeightMainConnection;
265 CoRiBoDynamics::vec3 m_WeightFishLine1Connection;
266 CoRiBoDynamics::vec3 m_WeightFishLine2Connection;
267
268 double m_ClumpWeightMass;
269 double m_ClumpWeightLength;
270 double m_ClumpWeightRadius;
271
272 int m_NumMain;
275
279
283
285
289
290 std::unique_ptr<trawl_mooring::TrawlRig> m_ownRig;
292
293 ICommonComputation* m_MainCalculations;
294
295 std::vector<trawl_mooring::ElementStates> m_MainElements;
296 std::vector<trawl_mooring::ElementStates> m_Line1Elements;
297 std::vector<trawl_mooring::ElementStates> m_Line2Elements;
298 trawl_mooring::ElementStates m_FoilElement;
299 trawl_mooring::ElementStates m_FoilWeightElement;
300 trawl_mooring::ElementStates m_ClumpWeightElement;
301
303 const double* ExternalJointForce(const double T, const double* const X, int connectionIndex, double* force);
304
305 const double* MainForce(const double T, const double* const X);
306 const double* MainForceVector(const double T, const double* const X);
307 double m_MainForce[3];
308 double m_MainForceMagnitude;
309 int m_MainForceConnectionIndex;
310
311 const double* Line1Force(const double T, const double* const X);
312 const double* Line1ForceVector(const double T, const double* const X);
313 double m_Line1Force[3];
314 double m_Line1ForceMagnitude;
315 int m_Line1ConnectionIndex;
316
317 const double* Line2Force(const double T, const double* const X);
318 const double* Line2ForceVector(const double T, const double* const X);
319 double m_Line2Force[3];
320 double m_Line2ForceMagnitude;
321 int m_Line2ConnectionIndex;
322
323 const double* WeightPosition(const double T, const double* const X);
324
325 /*const double* WeightMainForce( const double T, const double* const X );
326 double m_WeightMainForce[3];
327 const double* WeightLine1Force( const double T, const double* const X );
328 double m_WeightLine1Force[3];
329 const double* WeightLine2Force( const double T, const double* const X );
330 double m_WeightLine2Force[3];*/
331
332 ISignalPort* MainPosition;
333 ISignalPort* m_MainVelocity;
334
335 ISignalPort* m_Line1Position;
336 ISignalPort* m_Line1Velocity;
337
338 ISignalPort* m_Line2Position;
339 ISignalPort* m_Line2Velocity;
340
341#ifdef FH_VISUALIZATION
342 // Every pointer below is assigned in RenderInit only, which a headless run never calls.
343 bool m_HQ_Render;
344 Ogre::SceneNode** m_MainNodes = nullptr;
345 Ogre::SceneNode** m_Line1Nodes = nullptr;
346 Ogre::SceneNode** m_Line2Nodes = nullptr;
347 Ogre::SceneNode* m_WeightNode = nullptr;
348 C3DLine* m_MainLine = nullptr;
349 C3DLine* m_Line1Line = nullptr;
350 C3DLine* m_Line2Line = nullptr;
351#endif
352};
Definition RundDorg.h:197
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:273
double m_MainDiameter
The number of discrete cable elements int the lower bridle.
Definition RundDorg.h:276
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)
void OdeFcn(const double T, const double *const X, double *const XDot) const
std::unique_ptr< trawl_mooring::TrawlRig > m_ownRig
Length of discrete cable elements.
Definition RundDorg.h:290
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:288
double m_Line1ElementLength
Length of discrete cable elements.
Definition RundDorg.h:287
double m_MainElementLength
Frequency response coefficient.
Definition RundDorg.h:286
double m_frequencyCoefficient
Bridle cable length.
Definition RundDorg.h:284
double m_Line1Diameter
Nominal cable diameter.
Definition RundDorg.h:277
int m_NumLine2
The number of discrete cable elements in the top bridle.
Definition RundDorg.h:274
double m_Line2Length
Bridle cable length.
Definition RundDorg.h:282
double m_Line2Diameter
Nominal cable diameter.
Definition RundDorg.h:278
void PreOdeFcn(const double T, const double *const X, IStateUpdater *const updater) override
double m_MainLength
Nominal cable diameter.
Definition RundDorg.h:280
const trawl_mooring::RigParts * m_rig
m_ownRig's parts.
Definition RundDorg.h:291
double m_Line1Length
Warp cable length.
Definition RundDorg.h:281
The state indices of one rigid element and its index in the solver.
Definition CableSegment.h:32
The parts of one constraint solver that every cable on it uses.
Definition TrawlRig.h:47