FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WakeSelection.h
1#pragma once
4
5#include <marenv/WaterVelocity.h> // WaterVelocityParts
6#include <marenv/wake/JetField.h>
7#include <marenv/wake/WakeField.h>
8#include <marenv/wake/WakeSampleParts.h>
9#include <marenv/wake/WakeTypes.h> // WakeComposition
10
11#include <array>
12#include <cstddef>
13#include <functional>
14#include <memory>
15#include <span>
16#include <vector>
17
18namespace marenv::wake
19{
33{
34 const WakeField* exclude = nullptr;
35 const WakeField* own = nullptr;
36 const JetField* excludeJet = nullptr;
37 std::span<const int> ownExcludedTags {};
38};
39
49WakeQueryRegion EnclosingRegion(std::span<const std::array<double, 3>> positions, double time, double cutoff = 0.0);
50
52using OwnTagsAt = std::function<std::span<const int>(std::size_t point)>;
53
62{
63public:
69 const WakeComposition& At(std::size_t point, double t) const;
70
77 WakeComposition At(std::size_t point, double t, const WakeSample& own) const;
78
80 std::size_t NumPoints() const { return m_compositions.size(); }
81
83 int NumFields() const { return static_cast<int>(m_numFields); }
84
86 int NumJets() const { return static_cast<int>(m_numJets); }
87
88private:
89 friend class WakeSelection;
90
92 WakeComposition Compose(std::size_t point, double t, const WakeSample* own) const;
93
94 std::size_t m_numFields = 0;
95 std::size_t m_numJets = 0;
96 bool m_hasOwn = false;
97 bool m_blending = false;
98 std::vector<WakeSampleParts> m_parts;
99 std::vector<JetSampleParts> m_jetParts;
100 mutable std::vector<WakeComposition> m_compositions;
101};
102
119{
120public:
122 WakeComposition Compose(double t, const double pos[3]) const;
123
129 void ComposeMany(double t, std::span<const std::array<double, 3>> positions, std::span<WakeComposition> out) const;
130
138 HeldWakes Hold(double t, std::span<const std::array<double, 3>> positions, const OwnTagsAt& ownTags = {}) const;
139
141 int NumFields() const { return static_cast<int>(m_fields.size()); }
142
144 int NumJets() const { return static_cast<int>(m_jets.size()); }
145
146private:
147 friend class WakeRegistry;
148
149 WakeSelection(std::vector<std::shared_ptr<const WakeField>> fields, std::vector<std::shared_ptr<const JetField>> jets, const WakeQuery& query, const WaterVelocityParts& parts);
150
151 std::vector<std::shared_ptr<const WakeField>> m_owned;
152 std::vector<std::shared_ptr<const JetField>> m_ownedJets;
153 std::vector<const WakeField*> m_fields;
154 std::vector<const JetField*> m_jets;
155 WakeQuery m_query;
156 WaterVelocityParts m_parts;
157};
158} // namespace marenv::wake
Definition WakeSelection.h:62
std::size_t NumPoints() const
Number of points held.
Definition WakeSelection.h:80
const WakeComposition & At(std::size_t point, double t) const
WakeComposition At(std::size_t point, double t, const WakeSample &own) const
int NumJets() const
Number of registered jets held at each point. Equals WakeSelection::NumJets().
Definition WakeSelection.h:86
int NumFields() const
Number of registered wake fields held at each point; the own field is not counted....
Definition WakeSelection.h:83
Definition JetField.h:134
Definition WakeField.h:56
Definition WakeRegistry.h:47
Definition WakeSelection.h:119
HeldWakes Hold(double t, std::span< const std::array< double, 3 > > positions, const OwnTagsAt &ownTags={}) const
int NumFields() const
Number of registered wake fields selected.
Definition WakeSelection.h:141
int NumJets() const
Number of registered jets selected.
Definition WakeSelection.h:144
void ComposeMany(double t, std::span< const std::array< double, 3 > > positions, std::span< WakeComposition > out) const
WakeComposition Compose(double t, const double pos[3]) const
The composition at a point of the region at time t.
WakeQueryRegion EnclosingRegion(std::span< const std::array< double, 3 > > positions, double time, double cutoff=0.0)
Definition WaterVelocity.h:33
Definition WakeTypes.h:138
Definition WakeField.h:23
Definition WakeSelection.h:33
const WakeField * exclude
A registered field to skip; null skips none.
Definition WakeSelection.h:34
const JetField * excludeJet
A registered jet to skip; null skips none.
Definition WakeSelection.h:36
std::span< const int > ownExcludedTags
The tags of own's sources to leave out at this point (WakeField::SampleExcluding(),...
Definition WakeSelection.h:37
const WakeField * own
An unregistered field to compose in as well; null adds none.
Definition WakeSelection.h:35
Definition WakeTypes.h:21