FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Crowfoot.h
1#pragma once
2
77#include "trawl/subroutines/CrowfootMath.h"
78
79#include "sfh/filters/FIR.h"
80
81#include <fhsim/simobject/SimObject.h>
82#include <float.h>
83#include <string>
84#include <vector>
85
86class Crowfoot : public SimObject
87{
88public:
105 Crowfoot(const std::string& simObjectName, ISimObjectCreator* const creator);
106 // virtual void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
107 virtual ~Crowfoot();
108
109 void OdeFcn(const double T, const double* const X, double* const XDot) const override;
110 void AcceptedStep(const double T, const double* const X) override;
111
122 void UpdateVelocity(const double T);
123
124 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
125 // virtual void FinalSetup(const double dT, const double *const adX, ISimObjectCreator *const creator);
126
127 const virtual double* PositionOut(const double t, const double* const x);
128 const virtual double* VelocityOut(const double t, const double* const x);
129 const virtual double* LineForceOut(const double t, const double* const x, int lineIndex);
130 const virtual double* LineTensionOut(const double t, const double* const x, int lineIndex);
131
132
133#ifdef FH_VISUALIZATION
142 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
143
152 void RenderUpdate(const double T, const double* const X);
153#endif
154
155
156protected:
157 int m_numLines;
158 std::vector<const double*> m_linesPos;
159 std::vector<double*> m_linesForce;
160 // std::vector<double> m_linesLength;
161 std::vector<double> m_linesTension;
162
163 ISignalPort** m_inFasteningPositions;
164 ISignalPort** m_inLengths;
165 ISignalPort* m_inExternalForce;
166 CrowfootMath* m_crowfoot;
167
168 // int m_IStatePos;
169 // int m_IStateVel;
170 // int m_IStateErrorIntegral;
171 mutable double m_velocity[3];
172 mutable double m_instantPos[3];
173 double m_prevPos[3];
174 double m_prevTime;
176 // double m_integratorGain;
177 // double m_proportionalGain;
178 // double m_dampingGain;
179 // double m_distForMaxSpeed;
180 // double m_maximumSpeed;
181 // sfh::timers::StopWatch m_derivativeTimer;
182 // double m_timeStep;
183 // double m_lastError[3];
184 // double m_tmpError[3];
185 mutable sfh::filters::FIR m_filter;
186
187#ifdef FH_VISUALIZATION
188
189#endif
190};
Definition CrowfootMath.h:39
Definition Crowfoot.h:87
bool m_hasPrevPos
Whether an accepted step has been seen yet.
Definition Crowfoot.h:175
Crowfoot(const std::string &simObjectName, ISimObjectCreator *const creator)
Reads parameters, registers states, input/output ports and shared resources.
void UpdateVelocity(const double T)
Backward-differences the solved collecting point position.
double m_prevPos[3]
Solved position at the previous accepted step.
Definition Crowfoot.h:173
double m_prevTime
Time of the previous accepted step.
Definition Crowfoot.h:174