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