FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
VirtualCurrent.h
1#pragma once
2
71#include <fhsim/simobject/SimObject.h>
72#include <fhsim_environment/EnvironmentProvider.h>
73#include <memory>
74#include <string>
75#include <vector>
76
77class VirtualCurrent;
78
80{
81 public:
82 VirtualCurrentField() = default;
83 virtual ~VirtualCurrentField() = default;
84 void inline setVirtualCurrent(VirtualCurrent* virtCurr) { m_virtCurr = virtCurr; }
85 [[deprecated("This may not use up-to-date state info")]]
86 marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3]);
87
88 private:
89 VirtualCurrent* m_virtCurr = nullptr;
90};
91
92class VirtualCurrent : public SimObject
93{
94 friend class VirtualCurrentField;
95
96 public:
97 VirtualCurrent(const std::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;
102
103 void PreOdeFcn(const double T, const double* const X);
104
105 protected:
106 void SetOutputPortValues(const double T, const double* const X) const;
107 const double* PlanarCurrent(const double T, const double* const X, int layer);
108
109 private:
110 ICommonComputation* m_SetOutputPortValues;
111 double m_Pp, m_Pd, m_Pi, m_IntegralSaturation, m_DerivativeTInv;
112 int m_CurrentIndex, m_IntegralIndex, m_DerivativeIndex, m_layers;
113
114 std::unique_ptr<double[]> m_PlanarCurrents;
115 environment::EnvironmentProvider* Environment = nullptr;
116 std::shared_ptr<VirtualCurrentField> m_CurrentField = std::make_shared<VirtualCurrentField>();
117
118
119 std::vector<int> m_CurrentIndices, m_IntegralIndices, m_DerivativeIndices;
120 std::unique_ptr<double[]> m_Depths;
121
122 double m_MaximumCurrent;
123
124 protected:
125 std::unique_ptr<ISignalPort*[]> m_Input_i;
126
127#ifdef FH_VISUALIZATION
128 Ogre::SceneNode* m_RenderNode;
129#endif
130};
Definition VirtualCurrent.h:80
marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3])
Definition VirtualCurrent.h:93
std::unique_ptr< ISignalPort *[]> m_Input_i
Set upper limit of the current.
Definition VirtualCurrent.h:125
void PreOdeFcn(const double T, const double *const X)
Computes the output port values; writes no state.
Defines the interface for a field relaying information about ocean currents.
Definition CurrentField.h:13
Status
Definition marenv.h:44