FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WakeSelection.h
1#pragma once
4
5#include <marenv/wake/JetField.h>
6#include <marenv/wake/WakeField.h>
7#include <marenv/wake/WakeSampleParts.h>
8#include <marenv/wake/WakeTypes.h> // WakeComposition
9
10#include <array>
11#include <cstddef>
12#include <functional>
13#include <memory>
14#include <span>
15#include <vector>
16
17namespace marenv::wake
18{
31{
32 const WakeField* exclude = nullptr;
33 const WakeField* own = nullptr;
34 const JetField* excludeJet = nullptr;
35 std::span<const int> ownExcludedTags {};
36 bool withWakes = true;
37 bool withJets = true;
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
82private:
83 friend class WakeSelection;
84
86 WakeComposition Compose(std::size_t point, double t, const WakeSample* own) const;
87
88 std::size_t m_numFields = 0;
89 std::size_t m_numJets = 0;
90 bool m_hasOwn = false;
91 bool m_blending = false;
92 std::vector<WakeSampleParts> m_parts;
93 std::vector<JetSampleParts> m_jetParts;
94 mutable std::vector<WakeComposition> m_compositions;
95};
96
113{
114public:
116 WakeComposition Compose(double t, const double pos[3]) const;
117
120 void ComposeMany(double t, std::span<const std::array<double, 3>> positions, std::span<WakeComposition> out) const;
121
129 HeldWakes Hold(double t, std::span<const std::array<double, 3>> positions, const OwnTagsAt& ownTags = {}) const;
130
132 int NumFields() const { return static_cast<int>(m_fields.size()); }
133
135 int NumJets() const { return static_cast<int>(m_jets.size()); }
136
137private:
138 friend class WakeRegistry;
139
140 WakeSelection(std::vector<std::shared_ptr<const WakeField>> fields, std::vector<std::shared_ptr<const JetField>> jets, const WakeQuery& query);
141
142 std::vector<std::shared_ptr<const WakeField>> m_owned;
143 std::vector<std::shared_ptr<const JetField>> m_ownedJets;
144 std::vector<const WakeField*> m_fields;
145 std::vector<const JetField*> m_jets;
146 WakeQuery m_query;
147};
148} // 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
Definition JetField.h:134
Definition WakeField.h:56
Definition WakeRegistry.h:47
Definition WakeSelection.h:113
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:132
int NumJets() const
Number of registered jets selected.
Definition WakeSelection.h:135
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 WakeTypes.h:138
Definition WakeField.h:23
Definition WakeSelection.h:31
const WakeField * exclude
A registered field to skip; null skips none.
Definition WakeSelection.h:32
const JetField * excludeJet
A registered jet to skip; null skips none.
Definition WakeSelection.h:34
bool withWakes
Compose the wake fields, own included; false samples none of them and leaves the deficit 0.
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:35
bool withJets
Compose the jets; false samples none of them.
Definition WakeSelection.h:37
const WakeField * own
An unregistered field to compose in as well; null adds none.
Definition WakeSelection.h:33
Definition WakeTypes.h:21