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