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