Marine systems simulation
Loading...
Searching...
No Matches
VirtualCurrent.h
1#pragma once
2
32#include <SimObject.h>
33#include <EnvironmentProvider.h>
34#include <memory>
35
36class VirtualCurrent;
37
38namespace artificial
39{
40
42public:
43 VirtualCurrentField() = default;
44 virtual ~VirtualCurrentField() = default;
45 void inline setVirtualCurrent(VirtualCurrent* virtCurr){ m_virtCurr = virtCurr; }
46 [[deprecated("This may not use up-to-date state info")]]
47 marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3]);
48private:
49 VirtualCurrent* m_virtCurr;
50};
51}
52
53class VirtualCurrent : public SimObject
54{
56public:
57 VirtualCurrent(const string& simObjectName, ISimObjectCreator* const creator);
58 virtual ~VirtualCurrent();
59 void FinalSetup(const double T, const double *const X, ISimObjectCreator* const creator);
60 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
61 void GetCurrent(const double T, const double* const X, const double position[3], double* currentVelocity);
62 void OdeFcn(const double T, const double* const X, double* const XDot, const bool bIsMajorTimeStep);
63
64 void PreOdeFcn(const double T, const double *const X, IStateUpdater* updater);
65
66#ifdef FH_VISUALIZATION
67 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
68 void RenderUpdate( const double T, const double* const X);
69#endif
70protected:
71 void SetOutputPortValues(const double T, const double* const X);
72 const double * PlanarCurrent(const double T, const double * const X, int layer);
73private:
74
75 ICommonComputation* m_SetOutputPortValues;
76 double m_Pp, m_Pd, m_Pi, m_IntegralSaturation, m_DerivativeTInv;
77 int m_CurrentIndex, m_IntegralIndex, m_DerivativeIndex, m_layers;
78
79 std::unique_ptr<double[]> m_PlanarCurrents;
80 environment::EnvironmentProvider *Environment;
81 std::shared_ptr<artificial::VirtualCurrentField> m_CurrentField = std::make_shared<artificial::VirtualCurrentField>();
82
83 std::vector<int> m_CurrentIndices, m_IntegralIndices, m_DerivativeIndices;
84 std::unique_ptr<double[]> m_Depths;
85
86 double m_MaximumCurrent;
87
88protected:
89 std::unique_ptr< ISignalPort*[] > m_Input_i;
90
91#ifdef FH_VISUALIZATION
92 Ogre::SceneNode* m_RenderNode;
93#endif
94};
Definition VirtualCurrent.h:94
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:89
Definition VirtualCurrent.h:41
marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3])
Defines the interface for an relaying information about ocean currents.
Definition CurrentField.h:13
Status
Definition marenv.h:40