FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WaveField.h
1#pragma once
3
4#include <marenv/marenv.h>
5
6#include <memory>
7#include <string>
8#include <vector>
10
11#if defined(_MSC_VER)
12# define RESTRICT __restrict
13#else
14# define RESTRICT __restrict__
15#endif
17
18namespace marenv::wave
19{
21
23{
24 std::vector<double> zetaA;
25 std::vector<double> epsilon;
26 std::vector<double> omega;
27 std::vector<double> waveNumber;
28 std::vector<double> theta;
29};
41{
42public:
44
46 {
47 const double* RESTRICT zetaA;
48 const double* RESTRICT epsilon;
49 const double* RESTRICT omega;
50 const double* RESTRICT waveNumber;
51 const double* RESTRICT theta;
52 const double* RESTRICT cosTheta;
53 const double* RESTRICT sinTheta;
54 const double* RESTRICT remainingAccumulatedAmplitude;
56 };
64 virtual ~WaveField() = default;
69 [[nodiscard]] virtual std::string SpectrumName() const = 0;
74 [[nodiscard]] virtual std::string WaveTheoryName() const = 0;
83 virtual marenv::Status ComputeSurfaceElevation(double time, const double pos[2], double& elevationOut) = 0;
92 virtual marenv::Status ComputeDynamicPressure(double time, const double pos[3], double& pressureOut) = 0;
105 virtual marenv::Status ComputeTotalPressure(double time, const double pos[3], double& pressureOut) = 0;
114 virtual marenv::Status ComputeSurfaceUnitNormal(double time, const double pos[2], double unitNormalOut[3]) = 0;
125 virtual marenv::Status ComputeParticleVelocity(double time, const double pos[3], double velOut[3]) = 0;
136 virtual marenv::Status ComputeParticleAcceleration(double time, const double pos[3], double accOut[3]) = 0;
137
150 virtual marenv::Status ComputePointQuery(double time, const double pos[3], double& surface_elevation, // clang-format off
151 double surface_unit_normal[3], double particle_velocity[3],
152 double particle_acceleration[3], double& pressure) = 0; // clang-format on
167
181 virtual marenv::wave::WaveComponentData GetWaveComponentsCopy(double time, size_t maxComponents = 0) const;
182
199 [[nodiscard]] virtual double MaxWaveElevation() const;
200
201protected:
203
204 WaveField() = default;
205};
206} // namespace marenv::wave
Definition WaveField.h:41
virtual marenv::Status ComputeParticleAcceleration(double time, const double pos[3], double accOut[3])=0
virtual double MaxWaveElevation() const
virtual marenv::Status ComputeTotalPressure(double time, const double pos[3], double &pressureOut)=0
virtual marenv::Status ComputeSurfaceUnitNormal(double time, const double pos[2], double unitNormalOut[3])=0
virtual marenv::Status ComputeSurfaceElevation(double time, const double pos[2], double &elevationOut)=0
virtual ~WaveField()=default
virtual std::string SpectrumName() const =0
virtual marenv::wave::WaveComponentData GetWaveComponentsCopy() const =0
virtual marenv::wave::WaveComponentData GetWaveComponentsCopy(double time, size_t maxComponents=0) const
WaveField()=default
Constructor.
virtual std::string WaveTheoryName() const =0
virtual marenv::Status ComputeDynamicPressure(double time, const double pos[3], double &pressureOut)=0
virtual marenv::Status ComputePointQuery(double time, const double pos[3], double &surface_elevation, double surface_unit_normal[3], double particle_velocity[3], double particle_acceleration[3], double &pressure)=0
virtual InsecureDatapointers GetWaveComponents() const =0
virtual marenv::Status ComputeParticleVelocity(double time, const double pos[3], double velOut[3])=0
Status
Definition marenv.h:44
Policy mixin: this type is neither copyable nor movable.
Definition marenv.h:112
Details of a wave component.
Definition WaveField.h:23
std::vector< double > zetaA
Spectral amplitude.
Definition WaveField.h:24
std::vector< double > epsilon
Random phase angle.
Definition WaveField.h:25
std::vector< double > waveNumber
Wave number.
Definition WaveField.h:27
std::vector< double > theta
Wave propagation direction.
Definition WaveField.h:28
std::vector< double > omega
Wave frequency.
Definition WaveField.h:26
Pointers to wave component details.
Definition WaveField.h:46
int numWaves
The number of wave components.
Definition WaveField.h:55
const double *RESTRICT epsilon
Pointer to random phase angle array.
Definition WaveField.h:48
const double *RESTRICT omega
Pointer to wave frequency array.
Definition WaveField.h:49
const double *RESTRICT theta
Pointer to wave propagation direction array.
Definition WaveField.h:51
const double *RESTRICT sinTheta
Pointer to array of precalculated sin(theta).
Definition WaveField.h:53
const double *RESTRICT cosTheta
Pointer to array of precalculated cos(theta).
Definition WaveField.h:52
const double *RESTRICT waveNumber
Pointer to wave number array.
Definition WaveField.h:50
const double *RESTRICT zetaA
Pointer to spectral amplitude array.
Definition WaveField.h:47
const double *RESTRICT remainingAccumulatedAmplitude
Each element is the sum of the amplitudes of the remaining wave components.
Definition WaveField.h:54