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