FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
SeineOperation.h
1#pragma once
2
81#include "AttractorNetBin.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) override;
117 void AcceptedStep(const double dT, const double* const adX) override;
118
119#ifdef FH_VISUALIZATION
121 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
122
124 virtual void RenderUpdate(const double dT, const double* const adX);
125#endif
126 const virtual double* WarpConnected(const double dT, const double* const adX);
127 const virtual double* BuoyPos(const double dT, const double* const adX);
128 const virtual double* VesselHeading(const double dT, const double* const adX);
129 const virtual double* VesselSpeed(const double dT, const double* const adX);
130 const virtual double* PWarpLength(const double dT, const double* const adX);
131 const virtual double* SWarpLength(const double dT, const double* const adX);
132
133protected:
135 static double NetAttractorStrengthAt(const double dT);
136
139 {
140 Phase_NotSet = 0,
141 Phase_SetFirstLeg,
142 Phase_SetNet,
143 Phase_SetSecondLeg,
144 Phase_Towing,
145 Phase_Hauling,
146 Phase_Finished
147 };
148
151
153 void ReadWarpAttractorName(ISimObjectCreator* const creator);
155 void CheckSchedule(ISimObjectCreator* const creator) const;
156
157 EPhase_t PhaseAt(const double dT) const;
158
159 ISignalPort* m_inVesselPos;
160 ISignalPort* m_inPBridleTension;
161 ISignalPort* m_inSBridleTension;
162 ISignalPort* m_inNetSWingPos;
163 ISignalPort* m_inNetPWingPos;
164 ISignalPort* m_inNetVel;
165 ISignalPort* m_inPBridlePos;
166 ISignalPort* m_inSBridlePos;
167
168 ICommonComputation* m_commonCalc;
169 ICommonComputation* m_commonCalc2;
170 // Configuration
171 double m_vesselHeading[7];
172 double m_vesselSpeed[7];
173 double m_phaseStartTime[7];
174 double m_payOutSpeedFactor;
175 double m_minTension;
178 double m_buoyPos[3];
179 double m_warpLengthCorrectionSpeed;
180 double m_initialSpeed;
181 double m_setSpeed;
182 double m_towSpeed;
183 double m_haulSpeed;
184 double m_finishedSpeed;
185 double m_winchHaulSpeed;
186 double m_initialHeading;
187 double m_towHeading;
188 double m_spreadAngle;
189 double m_setWarpLength;
190
191 double m_outPWarpLength;
192 double m_outSWarpLength;
193
194
195 double m_addedTrackLength;
196 double m_towTime;
197 double m_minWarpLength;
198 std::string m_attractorNameNet;
199 std::string m_attractorNameWarp;
200 std::string m_phase[7];
201 std::string m_speed[7];
202 std::string m_heading[7];
203 AttractorNetBin* m_attractorNet;
204
205 // Output
206 double m_bool[2];
207 double m_wingSpread;
208 double m_netTangentialSpeed;
209 double m_netNormalSpeed;
210 double m_fileWritePeriod;
211 double m_bridleTension[2];
212 double m_bridleSpread;
213 bool m_outputToFile;
214 sfh::timers::StopWatch m_StopWatchFileWrite;
215 std::ofstream m_Outfile;
216 std::string m_fileName;
217 sfh::filters::IIR m_BridleTensionFilter;
219#ifdef FH_VISUALIZATION
220 Ogre::Entity* m_RenderMass;
221 Ogre::SceneNode* m_RenderNode;
222 sfh::timers::StopWatch m_StopWatchRenderUpdate;
223 // The status lines on the HUD, top to bottom; all empty without ShowStatus or without a HUD.
224 fhsim::HudLine m_hudTime;
225 fhsim::HudLine m_hudPhase;
226 fhsim::HudLine m_hudSpeed;
227 fhsim::HudLine m_hudHeading;
228 fhsim::HudLine m_hudWingSpread;
229 fhsim::HudLine m_hudBridleSpread;
230 fhsim::HudLine m_hudSbBridleTension;
231 fhsim::HudLine m_hudPrtBridleTension;
232 fhsim::HudLine m_hudNetNormalSpeed;
233 fhsim::HudLine m_hudNetTangentialSpeed;
234#endif
235};
The net bin of Seine/Vessel: a sphere that pulls the net and warp nodes inside it.
Definition AttractorNetBin.h:16
Definition SeineOperation.h:97
bool m_showStatus
ShowStatus: the status lines are shown on the HUD.
Definition SeineOperation.h:218
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:139
~SeineOperation()
The destructor cleans up.
void CheckSchedule(ISimObjectCreator *const creator) const
Refuses a schedule that cannot run: a speed that is zero or not a number, MinWarpLength above WarpLen...
static double NetAttractorStrengthAt(const double dT)
The relative strength of the net attractor at time dT.
double m_buoyPos[3]
Definition SeineOperation.h:178
ICommonComputation * m_commonCalc
Calculations necessary for more than one output port.
Definition SeineOperation.h:168
void ReadWarpAttractorName(ISimObjectCreator *const creator)
Reads the warp attractor name from AttractorNameWarp, or from its old name AttractorNameWarps.
void CalcOutput(const double dT, const double *const adX)
Performs calculations common to several output ports.
void PreOdeFcn(double T, const double *X) override
Latches the buoy at the vessel position of a step that starts in Phase_NotSet.
SeineOperation(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.