FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
SeineOperation.h
1#pragma once
2
56#include "AttractorBase.h"
57
58#include <fhsim/simobject/SimObject.h>
59#include <fstream>
60#include <iostream>
61#include <stdio.h>
62#include <string>
63
64#ifdef FH_VISUALIZATION
65# include <fhsim/visual/renderer/TextRenderer.h>
66#endif
67#include "sfh/filters/IIR.h"
68#include "sfh/timers/StopWatch.h"
69
70class SeineOperation : public SimObject
71{
72public:
74 SeineOperation(std::string simObjectName, ISimObjectCreator* creator);
75
78
80 void CalcOutput(const double dT, const double* const adX);
81 void CalcOutput2(const double dT, const double* const adX);
82 void CalcOutputCommon(const double dT, const double* const adX) const;
83 void CalcOutput2Common(const double dT, const double* const adX) const;
84
86 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const { }
87 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
88
89#ifdef FH_VISUALIZATION
91 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
92
94 virtual void RenderUpdate(const double dT, const double* const adX);
95#endif
96 const virtual double* WarpConnected(const double dT, const double* const adX);
97 const virtual double* BuoyPos(const double dT, const double* const adX);
98 const virtual double* VesselHeading(const double dT, const double* const adX);
99 const virtual double* VesselSpeed(const double dT, const double* const adX);
100 const virtual double* PWarpLength(const double dT, const double* const adX);
101 const virtual double* SWarpLength(const double dT, const double* const adX);
102
103protected:
105 void SetOperationalPhase(const double dT);
106
108 void SetAttractorStrengths(const double dT);
109
112 {
113 Phase_NotSet = 0,
114 Phase_SetFirstLeg,
115 Phase_SetNet,
116 Phase_SetSecondLeg,
117 Phase_Towing,
118 Phase_Hauling,
119 Phase_Finished
120 };
121
122 ISignalPort* m_inVesselPos;
123 ISignalPort* m_inPBridleTension;
124 ISignalPort* m_inSBridleTension;
125 ISignalPort* m_inNetSWingPos;
126 ISignalPort* m_inNetPWingPos;
127 ISignalPort* m_inNetVel;
128 ISignalPort* m_inPBridlePos;
129 ISignalPort* m_inSBridlePos;
130
131 ICommonComputation* m_commonCalc;
132 ICommonComputation* m_commonCalc2;
133 // Configuration
134 double m_vesselHeading[7];
135 double m_vesselSpeed[7];
136 double m_phaseStartTime[7];
137 double m_payOutSpeedFactor;
138 double m_minTension;
139 double m_buoyPos[3];
140 double m_lastCall;
141 double m_deltaT;
142 double m_warpLengthCorrectionSpeed;
143 double m_initialSpeed;
144 double m_setSpeed;
145 double m_towSpeed;
146 double m_haulSpeed;
147 double m_finishedSpeed;
148 double m_winchHaulSpeed;
149 double m_initialHeading;
150 double m_towHeading;
151 double m_spreadAngle;
152 double m_setWarpLength;
153
154 bool m_warpConnected;
155 double m_outPWarpLength;
156 double m_outSWarpLength;
157
158
159 double m_addedTrackLength;
160 double m_towTime;
161 double m_minWarpLength;
162 std::string m_attractorNameNet;
163 std::string m_attractorNameWarps;
164 std::string m_phase[7];
165 std::string m_speed[7];
166 std::string m_heading[7];
167 AttractorBase* m_attractorNet;
168 AttractorBase* m_attractorWarps;
169 EPhase_t m_EPhase;
170
171 // Output
172 double m_bool[2];
173 double m_wingSpread;
174 double m_netTangentialSpeed;
175 double m_netNormalSpeed;
176 double m_fileWritePeriod;
177 double m_bridleTension[2];
178 double m_bridleSpread;
179 bool m_outputToFile;
180 sfh::timers::StopWatch m_StopWatchFileWrite;
181 sfh::timers::StopWatch m_StopWatchRenderUpdate;
182 std::ofstream m_Outfile;
183 std::string m_fileName;
184 sfh::filters::IIR m_BridleTensionFilter;
185#ifdef FH_VISUALIZATION
186 Ogre::Entity* m_RenderMass;
187 Ogre::SceneNode* m_RenderNode;
188 std::string m_DisplayText;
189 TextRenderer* m_TextRenderer;
190 // TextRenderer* m_TextRendererCopyright;
191#endif
192};
Class modelling the interface of a general attractor.
Definition AttractorBase.h:17
Definition SeineOperation.h:71
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot) const
Calculates the state derivatives.
Definition SeineOperation.h:86
EPhase_t
Enumerator to define which operational phase the vessel is in.
Definition SeineOperation.h:112
~SeineOperation()
The destructor cleans up.
ICommonComputation * m_commonCalc
Calculations necessary for more than one output port.
Definition SeineOperation.h:131
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.