FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
SeineOperation.h
1#pragma once
2
81#include "AttractorBase.h"
82
83#include "sfh/filters/IIR.h"
84#include "sfh/timers/StopWatch.h"
85
86#include <fhsim/simobject/SimObject.h>
87#include <fstream>
88#include <iostream>
89#include <stdio.h>
90#include <string>
91
92#ifdef FH_VISUALIZATION
93# include <fhsim/visual/renderer/Hud.h>
94#endif
95
96class SeineOperation : public SimObject
97{
98public:
100 SeineOperation(std::string simObjectName, ISimObjectCreator* creator);
101
104
106 void CalcOutput(const double dT, const double* const adX);
107 void CalcOutput2(const double dT, const double* const adX);
108 void CalcOutputCommon(const double dT, const double* const adX) const;
109 void CalcOutput2Common(const double dT, const double* const adX) const;
110
112 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const { }
113 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
114
116 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
117
118#ifdef FH_VISUALIZATION
120 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
121
123 virtual void RenderUpdate(const double dT, const double* const adX);
124#endif
125 const virtual double* WarpConnected(const double dT, const double* const adX);
126 const virtual double* BuoyPos(const double dT, const double* const adX);
127 const virtual double* VesselHeading(const double dT, const double* const adX);
128 const virtual double* VesselSpeed(const double dT, const double* const adX);
129 const virtual double* PWarpLength(const double dT, const double* const adX);
130 const virtual double* SWarpLength(const double dT, const double* const adX);
131
132protected:
134 static double NetAttractorStrengthAt(const double dT);
135
138 {
139 Phase_NotSet = 0,
140 Phase_SetFirstLeg,
141 Phase_SetNet,
142 Phase_SetSecondLeg,
143 Phase_Towing,
144 Phase_Hauling,
145 Phase_Finished
146 };
147
150 EPhase_t PhaseAt(const double dT) const;
151
152 ISignalPort* m_inVesselPos;
153 ISignalPort* m_inPBridleTension;
154 ISignalPort* m_inSBridleTension;
155 ISignalPort* m_inNetSWingPos;
156 ISignalPort* m_inNetPWingPos;
157 ISignalPort* m_inNetVel;
158 ISignalPort* m_inPBridlePos;
159 ISignalPort* m_inSBridlePos;
160
161 ICommonComputation* m_commonCalc;
162 ICommonComputation* m_commonCalc2;
163 // Configuration
164 double m_vesselHeading[7];
165 double m_vesselSpeed[7];
166 double m_phaseStartTime[7];
167 double m_payOutSpeedFactor;
168 double m_minTension;
171 double m_buoyPos[3];
172 double m_warpLengthCorrectionSpeed;
173 double m_initialSpeed;
174 double m_setSpeed;
175 double m_towSpeed;
176 double m_haulSpeed;
177 double m_finishedSpeed;
178 double m_winchHaulSpeed;
179 double m_initialHeading;
180 double m_towHeading;
181 double m_spreadAngle;
182 double m_setWarpLength;
183
184 double m_outPWarpLength;
185 double m_outSWarpLength;
186
187
188 double m_addedTrackLength;
189 double m_towTime;
190 double m_minWarpLength;
191 std::string m_attractorNameNet;
192 std::string m_attractorNameWarps;
193 std::string m_phase[7];
194 std::string m_speed[7];
195 std::string m_heading[7];
196 AttractorBase* m_attractorNet;
197 AttractorBase* m_attractorWarps;
198
199 // Output
200 double m_bool[2];
201 double m_wingSpread;
202 double m_netTangentialSpeed;
203 double m_netNormalSpeed;
204 double m_fileWritePeriod;
205 double m_bridleTension[2];
206 double m_bridleSpread;
207 bool m_outputToFile;
208 sfh::timers::StopWatch m_StopWatchFileWrite;
209 std::ofstream m_Outfile;
210 std::string m_fileName;
211 sfh::filters::IIR m_BridleTensionFilter;
213#ifdef FH_VISUALIZATION
214 Ogre::Entity* m_RenderMass;
215 Ogre::SceneNode* m_RenderNode;
216 sfh::timers::StopWatch m_StopWatchRenderUpdate;
217 // The status lines on the HUD, top to bottom; all empty without ShowStatus or without a HUD.
218 fhsim::HudLine m_hudTime;
219 fhsim::HudLine m_hudPhase;
220 fhsim::HudLine m_hudSpeed;
221 fhsim::HudLine m_hudHeading;
222 fhsim::HudLine m_hudWingSpread;
223 fhsim::HudLine m_hudBridleSpread;
224 fhsim::HudLine m_hudSbBridleTension;
225 fhsim::HudLine m_hudPrtBridleTension;
226 fhsim::HudLine m_hudNetNormalSpeed;
227 fhsim::HudLine m_hudNetTangentialSpeed;
228#endif
229};
Class modelling the interface of a general attractor.
Definition AttractorBase.h:18
Definition SeineOperation.h:97
bool m_showStatus
ShowStatus: the status lines are shown on the HUD.
Definition SeineOperation.h:212
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot) const
Calculates the state derivatives.
Definition SeineOperation.h:112
EPhase_t
Enumerator to define which operational phase the vessel is in.
Definition SeineOperation.h:138
~SeineOperation()
The destructor cleans up.
static double NetAttractorStrengthAt(const double dT)
The relative strength of the net attractor at time dT.
double m_buoyPos[3]
Definition SeineOperation.h:171
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
Latches the buoy at the vessel position of a step that starts in Phase_NotSet.
ICommonComputation * m_commonCalc
Calculations necessary for more than one output port.
Definition SeineOperation.h:161
EPhase_t PhaseAt(const double dT) const
void CalcOutput(const double dT, const double *const adX)
Performs calculations common to several output ports.
SeineOperation(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.