Marine systems simulation
Loading...
Searching...
No Matches
VirtualCurrent.h
1#pragma once
2
76#include <EnvironmentProvider.h>
77#include <SimObject.h>
78#include <memory>
79
80class VirtualCurrent;
81
83public:
84 VirtualCurrentField() = default;
85 virtual ~VirtualCurrentField() = default;
86 void inline setVirtualCurrent(VirtualCurrent* virtCurr){ m_virtCurr = virtCurr; }
87 [[deprecated("This may not use up-to-date state info")]]
88 marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3]);
89private:
90 VirtualCurrent* m_virtCurr;
91};
92
93class VirtualCurrent : public SimObject
94{
95 friend class VirtualCurrentField;
96 public:
97 VirtualCurrent(const string& simObjectName, ISimObjectCreator* const creator);
98 virtual ~VirtualCurrent();
99 void FinalSetup(const double T, const double* const X, ISimObjectCreator* const creator);
100 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
101 void OdeFcn(const double T, const double* const X, double* const XDot, const bool bIsMajorTimeStep);
102
103 void PreOdeFcn(const double T, const double* const X, IStateUpdater* updater);
104
105#ifdef FH_VISUALIZATION
106 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
107 void RenderUpdate(const double T, const double* const X);
108#endif
109 protected:
110 void SetOutputPortValues(const double T, const double* const X);
111 const double* PlanarCurrent(const double T, const double* const X, int layer);
112
113 private:
114 ICommonComputation* m_SetOutputPortValues;
115 double m_Pp, m_Pd, m_Pi, m_IntegralSaturation, m_DerivativeTInv;
116 int m_CurrentIndex, m_IntegralIndex, m_DerivativeIndex, m_layers;
117
118 std::unique_ptr<double[]> m_PlanarCurrents;
119 environment::EnvironmentProvider* Environment;
120 std::shared_ptr<VirtualCurrentField> m_CurrentField = std::make_shared<VirtualCurrentField>();
121
122
123 std::vector<int> m_CurrentIndices, m_IntegralIndices, m_DerivativeIndices;
124 std::unique_ptr<double[]> m_Depths;
125
126 double m_MaximumCurrent;
127
128 protected:
129 std::unique_ptr<ISignalPort*[]> m_Input_i;
130
131#ifdef FH_VISUALIZATION
132 Ogre::SceneNode* m_RenderNode;
133#endif
134};
Definition VirtualCurrent.h:82
marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3])
Definition VirtualCurrent.h:94
std::unique_ptr< ISignalPort *[]> m_Input_i
Set upper limit of the current.
Definition VirtualCurrent.h:129
void SetOutputPortValues(const double T, const double *const X)
Set upper limit of the current.
Defines the interface for an relaying information about ocean currents.
Definition CurrentField.h:13
Status
Definition marenv.h:40