FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WakeField.h
1#pragma once
3
4#include <marenv/marenv.h>
5#include <marenv/wake/FieldSketch.h>
6#include <marenv/wake/WakeSampleParts.h>
7#include <marenv/wake/WakeTypes.h>
8
9#include <array>
10#include <cstddef>
11#include <cstdint>
12#include <span>
13
14namespace marenv::wake
15{
23{
24 double centre[3];
25 double radius;
26 double tBegin;
27 double tEnd;
28 double cutoff = 0.0;
29};
30
56{
57public:
58 virtual ~WakeField() = default;
59
86 virtual Status Sample(double t, const double pos[3], WakeSample& out) const = 0;
87
100 virtual WakeSampleParts SampleParts(double t, const double pos[3]) const
101 {
102 WakeSampleParts parts;
103 parts.status = Sample(t, pos, parts.sample);
104 return parts;
105 }
106
121 virtual bool MayReach(const WakeQueryRegion& region) const
122 {
123 (void)region;
124 return true;
125 }
126
127 // The two virtuals below were added in 2.1.1 (ENV-0107) after every earlier virtual, so the slots of
128 // the earlier ones stay where 2.1.0 put them (the ABI still changes: rebuild every class that derives from WakeField).
129
147 virtual Status SampleExcluding(double t, const double pos[3], std::span<const int> excludedTags, WakeSample& out) const
148 {
149 (void)excludedTags;
150 return Sample(t, pos, out);
151 }
152
157 virtual WakeSampleParts SamplePartsExcluding(double t, const double pos[3], std::span<const int> excludedTags) const
158 {
159 (void)excludedTags;
160 return SampleParts(t, pos);
161 }
162
163 // The four virtuals below were added in 2.1.2 after every earlier virtual (rebuild every class that derives from WakeField).
164
174 virtual std::uint64_t Revision() const { return 0; }
175
182 virtual bool StaticFrom(double t) const
183 {
184 (void)t;
185 return false;
186 }
187
200 virtual void SampleMany(double t, std::span<const std::array<double, 3>> positions, std::span<WakeSample> out, std::span<Status> status) const
201 {
202 for (std::size_t i = 0; i < positions.size(); ++i)
203 status[i] = Sample(t, positions[i].data(), out[i]);
204 }
205
212 virtual void Sketch(double t, FieldSketch& out) const
213 {
214 (void)t;
215 (void)out;
216 }
217
218protected:
219 WakeField() = default;
220};
221} // namespace marenv::wake
Definition WakeField.h:56
virtual Status SampleExcluding(double t, const double pos[3], std::span< const int > excludedTags, WakeSample &out) const
Definition WakeField.h:147
virtual WakeSampleParts SamplePartsExcluding(double t, const double pos[3], std::span< const int > excludedTags) const
Definition WakeField.h:157
virtual bool StaticFrom(double t) const
Definition WakeField.h:182
virtual void SampleMany(double t, std::span< const std::array< double, 3 > > positions, std::span< WakeSample > out, std::span< Status > status) const
Definition WakeField.h:200
virtual bool MayReach(const WakeQueryRegion &region) const
Definition WakeField.h:121
virtual std::uint64_t Revision() const
Definition WakeField.h:174
virtual WakeSampleParts SampleParts(double t, const double pos[3]) const
Definition WakeField.h:100
virtual void Sketch(double t, FieldSketch &out) const
Definition WakeField.h:212
virtual Status Sample(double t, const double pos[3], WakeSample &out) const =0
Status
Definition marenv.h:40
Policy mixin: this type is neither copyable nor movable.
Definition marenv.h:96
Definition FieldSketch.h:16
Definition WakeField.h:23
double radius
Radius of the sphere, m.
Definition WakeField.h:25
double centre[3]
Centre of the sphere, m, NED.
Definition WakeField.h:24
double tEnd
Last query time, s; tEnd >= tBegin.
Definition WakeField.h:27
double cutoff
0: the exact tier (a field may be culled only where d = 0); > 0: the cutoff tier (where d < cutoff).
Definition WakeField.h:28
double tBegin
First query time, s.
Definition WakeField.h:26
Definition WakeSampleParts.h:111
Status status
Not blending: the status of WakeField::Sample() at the sample time.
Definition WakeSampleParts.h:113
WakeSample sample
Not blending: WakeField::Sample() at the sample time.
Definition WakeSampleParts.h:114
Definition WakeTypes.h:21