Marine systems simulation
Loading...
Searching...
No Matches
VirtualCurrentInDir.h
1#pragma once
2
32#include <SimObject.h>
33#include <EnvironmentProvider.h>
34#include <memory>
35
37
39public:
40 VirtualCurrentFieldInDir() = default;
41 virtual ~VirtualCurrentFieldInDir() = default;
42 void inline setVirtualCurrentInDir(VirtualCurrentInDir* virtCurr){ m_virtCurr = virtCurr; }
43 [[deprecated("This may not use up-to-date state info")]]
44 marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3]);
45private:
46 VirtualCurrentInDir* m_virtCurr;
47};
48
49class VirtualCurrentInDir : public SimObject
50{
51friend class VirtualCurrentFieldInDir;
52public:
53 VirtualCurrentInDir(const string& simObjectName, ISimObjectCreator* const creator);
54 virtual ~VirtualCurrentInDir();
55 void FinalSetup(const double T, const double *const X, ISimObjectCreator* const creator);
56 void InitialConditionSetup(const double T, const double* const currentIC, double* const updatedIC, ISimObjectCreator* const creator);
57 void GetCurrent(const double T, const double* const X, const double position[3], double* currentVelocity);
58 void OdeFcn(const double T, const double* const X, double* const XDot, const bool bIsMajorTimeStep);
59
60 void PreOdeFcn(const double T, const double *const X, IStateUpdater* updater);
61
62#ifdef FH_VISUALIZATION
63 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
64 void RenderUpdate( const double T, const double* const X);
65#endif
66protected:
67 void SetOutputPortValues(const double T, const double* const X);
68 const double * PlanarCurrent(const double T, const double * const X, int layer);
69private:
70
71 ICommonComputation* m_SetOutputPortValues;
72 double m_Pp, m_Pd, m_Pi, m_IntegralSaturation, m_DerivativeTInv;
73 int m_CurrentIndex, m_IntegralIndex, m_DerivativeIndex, m_layers;
74
75 std::unique_ptr<double[]> m_PlanarCurrents;
76 environment::EnvironmentProvider *Environment;
77 std::shared_ptr<VirtualCurrentFieldInDir> m_CurrentField = std::make_shared<VirtualCurrentFieldInDir>();
78
79 std::vector<int> m_CurrentIndices, m_IntegralIndices, m_DerivativeIndices;
80 std::unique_ptr<double[]> m_Depths;
81
82 double m_MaximumCurrent;
83 std::unique_ptr<double[]> m_Directions;
84
85 double m_MaximumCurrentRel;
86
87 double m_MinimumCurrentTot;
88
89 bool m_AdaMax;
90 std::unique_ptr<double[]> m_AdaMaxRatio;
91 std::unique_ptr<double[]> m_AdaErr;
92 std::unique_ptr<double[]> m_AdaErrTol;
93
94protected:
95 std::unique_ptr< ISignalPort*[] > m_Input_e;
96 std::unique_ptr< ISignalPort*[] > m_Input_d;
97 std::unique_ptr< ISignalPort*[] > m_Input_v;
98 std::unique_ptr< ISignalPort*[] > m_Input_vt;
99
100#ifdef FH_VISUALIZATION
101 Ogre::SceneNode* m_RenderNode;
102#endif
103};
Definition VirtualCurrentInDir.h:38
marenv::Status GetCurrent(const double T, const double position[3], double currentVelocity[3])
Definition VirtualCurrentInDir.h:50
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