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