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 = nullptr;
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);
108
109 protected:
110 void SetOutputPortValues(const double T, const double* const X) const;
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 = nullptr;
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: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:129
void PreOdeFcn(const double T, const double *const X)
Computes the output port values; writes no state.
Defines the interface for an relaying information about ocean currents.
Definition CurrentField.h:13
Status
Definition marenv.h:40