Marine systems simulation
CSeineOperation.h
1#pragma once
2
56#include <stdio.h>
57#include <string>
58#include <iostream>
59#include <fstream>
60
61#include <SimObject.h>
62
63#include "CAttractorBase.h"
64
65#ifdef FH_VISUALIZATION
66#include "CTextRenderer.h"
67#endif
68#include "sfh/timers/StopWatch.h"
69#include "sfh/filters/IIR.h"
70
71class CSeineOperation : public SimObject
72{
73public:
75 CSeineOperation(std::string sSimObjectName, ISimObjectCreator* pCreator);
76
79
81 void CalcOutput(const double dT, const double* const adX);
82 void CalcOutput2(const double dT, const double* const adX);
83
85 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot, const bool bIsMajorTimeStep){}
86 virtual void FinalSetup(const double dT, const double *const adX, ISimObjectCreator* const pCreator);
87
88#ifdef FH_VISUALIZATION
90 virtual void RenderInit(Ogre::Root* const pOgreRoot, ISimObjectCreator* const pCreator);
91
93 virtual void RenderUpdate(const double dT, const double* const adX);
94#endif
95 const virtual double * WarpConnected(const double dT, const double *const adX);
96 const virtual double * BuoyPos(const double dT, const double *const adX);
97 const virtual double * VesselHeading(const double dT, const double *const adX);
98 const virtual double * VesselSpeed(const double dT, const double *const adX);
99 const virtual double * PWarpLength(const double dT, const double *const adX);
100 const virtual double * SWarpLength(const double dT, const double *const adX);
101
102protected:
104 void SetOperationalPhase(const double dT);
105
107 void SetAttractorStrengths(const double dT);
108
111 {
112 Phase_NotSet = 0,
113 Phase_SetFirstLeg,
114 Phase_SetNet ,
115 Phase_SetSecondLeg ,
116 Phase_Towing ,
117 Phase_Hauling ,
118 Phase_Finished
119 };
120
121 ISignalPort* m_pInVesselPos;
122 ISignalPort* m_pInPBridleTension;
123 ISignalPort* m_pInSBridleTension;
124 ISignalPort* m_pInNetSWingPos;
125 ISignalPort* m_pInNetPWingPos;
126 ISignalPort* m_pInNetVel;
127 ISignalPort* m_pInPBridlePos;
128 ISignalPort* m_pInSBridlePos;
129
130 ICommonComputation* m_pCommonCalc;
131 ICommonComputation* m_pCommonCalc2;
132 // Configuration
133 double m_adVesselHeading[7];
134 double m_adVesselSpeed[7];
135 double m_adPhaseStartTime[7];
136 double m_dPayOutSpeedFactor;
137 double m_dMinTension;
138 double m_adBuoyPos[3];
139 double m_dLastCall;
140 double m_dDeltaT;
141 double m_dWarpLengthCorrectionSpeed;
142 double m_dInitialSpeed;
143 double m_dSetSpeed;
144 double m_dTowSpeed;
145 double m_dHaulSpeed;
146 double m_dFinishedSpeed;
147 double m_dWinchHaulSpeed;
148 double m_dInitialHeading;
149 double m_dTowHeading ;
150 double m_dSpreadAngle;
151 double m_dSetWarpLength;
152
153 bool m_bWarpConnected;
154 double m_dOutPWarpLength;
155 double m_dOutSWarpLength;
156
157
158 double m_dAddedTrackLength;
159 double m_dTowTime;
160 double m_dMinWarpLength;
161 std::string m_sAttractorNameNet;
162 std::string m_sAttractorNameWarps;
163 std::string m_asPhase[7];
164 std::string m_asSpeed[7];
165 std::string m_asHeading[7];
166 CAttractorBase* m_pAttractorNet;
167 CAttractorBase* m_pAttractorWarps;
168 EPhase_t m_EPhase;
169
170 // Output
171 double m_adBool[2];
172 double m_dWingSpread;
173 double m_dNetTangentialSpeed;
174 double m_dNetNormalSpeed;
175 double m_dFileWritePeriod;
176 double m_adBridleTension[2];
177 double m_dBridleSpread;
178 bool m_bOutputToFile;
179 sfh::timers::StopWatch m_StopWatchFileWrite;
180 sfh::timers::StopWatch m_StopWatchRenderUpdate;
181 std::ofstream m_Outfile;
182 std::string m_sFileName;
183 sfh::filters::IIR m_BridleTensionFilter;
184#ifdef FH_VISUALIZATION
185 Ogre::Entity* m_RenderMass;
186 Ogre::SceneNode* m_RenderNode;
187 std::string m_DisplayText;
188 CTextRenderer* m_TextRenderer;
189 //CTextRenderer* m_TextRendererCopyright;
190#endif
191
192};
Class modelling the interface of a general attractor.
Definition: CAttractorBase.h:17
Definition: CSeineOperation.h:72
ICommonComputation * m_pCommonCalc
Calculations necessary for more than one output port.
Definition: CSeineOperation.h:130
CSeineOperation(std::string sSimObjectName, ISimObjectCreator *pCreator)
The constructor sets the pointer to the output object and the parser object.
void SetOperationalPhase(const double dT)
Sets the operational phase of the system.
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep)
Calculates the state derivatives.
Definition: CSeineOperation.h:85
void SetAttractorStrengths(const double dT)
Sets the strength of the attractors.
EPhase_t
Enumerator to define which operational phase the vessel is in.
Definition: CSeineOperation.h:111
void CalcOutput(const double dT, const double *const adX)
Performs calculations common to several output ports.
~CSeineOperation()
The destructor cleans up.