FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetCageWakeField.h
1#pragma once
2
3#include <array>
4#include <atomic>
5#include <functional>
6#include <marenv/marenv.h>
7#include <marenv/wake/WakeField.h>
8#include <memory>
9
10namespace environment
11{
12
46{
47public:
53 using AmbientCurrentFunction = std::function<marenv::Status(double time, const double pos[3], double vel[3])>;
54
73 NetCageWakeField(const double pos[3], double fullWakeDepth, double fullWakeDiameter, double wakeAngle, double initialBoundaryLayer, double maxDeficit, double deficitCutoff, AmbientCurrentFunction ambientCurrent);
74 ~NetCageWakeField() override = default;
75
82 void SetPosition(const double pos[3]);
83
94 marenv::Status Sample(double time, const double pos[3], marenv::wake::WakeSample& out) const override;
95
96private:
98 using Position = std::array<double, 3>;
99
105 double MaxDeficitBehindB(double x) const;
106
114 double DeficitInCageFrame(double x, double y, double z) const;
115
116 double m_depthA;
117 double m_distAB;
118 double m_radiusFullWakeA;
119 double m_wakeTangentX;
120 double m_tanWakeAngle;
121 double m_radiusNoWakeA;
122 double m_radiusNoWakeB;
123 double m_maxDeficit;
124 double m_bounds_x;
125 double m_bounds_z;
126
127 std::atomic<std::shared_ptr<const Position>> m_pos;
128 AmbientCurrentFunction m_ambientCurrent;
129};
130
131} // namespace environment
Definition NetCageWakeField.h:46
NetCageWakeField(const double pos[3], double fullWakeDepth, double fullWakeDiameter, double wakeAngle, double initialBoundaryLayer, double maxDeficit, double deficitCutoff, AmbientCurrentFunction ambientCurrent)
void SetPosition(const double pos[3])
marenv::Status Sample(double time, const double pos[3], marenv::wake::WakeSample &out) const override
std::function< marenv::Status(double time, const double pos[3], double vel[3])> AmbientCurrentFunction
Definition NetCageWakeField.h:53
Definition WakeField.h:50
Status
Definition marenv.h:40
Definition WakeTypes.h:21