Marine systems simulation
VirtualCurrent.h
1#pragma once
2
32#include <SimObject.h>
33#include <CEnvironment.h>
34#include <memory>
35
36class VirtualCurrent : public SimObject, ICurrentField
37{
38public:
39 VirtualCurrent(const string& simObjectName, ISimObjectCreator* const creator);
40
41 void FinalSetup(const double T, const double *const X, ISimObjectCreator* const creator);
42 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
43 void GetCurrent(const double T, const double* const X, const double position[3], double* currentVelocity);
44 void OdeFcn(const double T, const double* const X, double* const XDot, const bool bIsMajorTimeStep);
45
46 void PreOdeFcn(const double T, const double *const X, IStateUpdater* updater);
47
48#ifdef FH_VISUALIZATION
49 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
50 void RenderUpdate( const double T, const double* const X);
51#endif
52protected:
53 void SetOutputPortValues(const double T, const double* const X);
54 const double * PlanarCurrent(const double T, const double * const X, int layer);
55private:
56
57 ICommonComputation* m_SetOutputPortValues;
58 double m_Pp, m_Pd, m_Pi, m_IntegralSaturation, m_DerivativeTInv;
59 int m_CurrentIndex, m_IntegralIndex, m_DerivativeIndex, m_layers;
60
61 std::unique_ptr<double[]> m_PlanarCurrents;
62 CEnvironment *Environment;
63
64 std::vector<int> m_CurrentIndices, m_IntegralIndices, m_DerivativeIndices;
65 std::unique_ptr<double[]> m_Depths;
66
67 double m_MaximumCurrent;
68
69protected:
70 std::unique_ptr< ISignalPort*[] > m_Input_i;
71
72#ifdef FH_VISUALIZATION
73 Ogre::SceneNode* m_RenderNode;
74#endif
75};
Definition: CEnvironment.h:10
Definition: ICurrentField.h:4
Definition: VirtualCurrent.h:81
void SetOutputPortValues(const double T, const double *const X)
Set upper limit of the current.
std::unique_ptr< ISignalPort *[] > m_Input_i
Set upper limit of the current.
Definition: VirtualCurrent.h:70