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/AtomicSharedPtr.h>
7#include <marenv/marenv.h>
8#include <marenv/wake/WakeField.h>
9#include <memory>
10
11namespace environment
12{
13
47{
48public:
54 using AmbientCurrentFunction = std::function<marenv::Status(double time, const double pos[3], double vel[3])>;
55
74 NetCageWakeField(const double pos[3], double fullWakeDepth, double fullWakeDiameter, double wakeAngle, double initialBoundaryLayer, double maxDeficit, double deficitCutoff, AmbientCurrentFunction ambientCurrent);
75 ~NetCageWakeField() override = default;
76
83 void SetPosition(const double pos[3]);
84
95 marenv::Status Sample(double time, const double pos[3], marenv::wake::WakeSample& out) const override;
96
97private:
99 using Position = std::array<double, 3>;
100
106 double MaxDeficitBehindB(double x) const;
107
115 double DeficitInCageFrame(double x, double y, double z) const;
116
117 double m_depthA;
118 double m_distAB;
119 double m_radiusFullWakeA;
120 double m_wakeTangentX;
121 double m_tanWakeAngle;
122 double m_radiusNoWakeA;
123 double m_radiusNoWakeB;
124 double m_maxDeficit;
125 double m_bounds_x;
126 double m_bounds_z;
127
129 AmbientCurrentFunction m_ambientCurrent;
130};
131
132} // namespace environment
Definition NetCageWakeField.h:47
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:54
Definition AtomicSharedPtr.h:19
Definition WakeField.h:56
Status
Definition marenv.h:44
Definition WakeTypes.h:21