Marine systems simulation
Loading...
Searching...
No Matches
GerstnerWaves.h
1#pragma once
3
4#include <marenv/wave/LinearWaveTheory.h>
5#include <marenv/wave/WaveEnergySpectrum.h>
6
7namespace marenv::wave
8{
9
18{
19public:
25 explicit GerstnerWaves(std::shared_ptr<WaveComponents> waveComponents);
33 GerstnerWaves(WaveEnergySpectrum::SpectrumParameters spectrumParameters, int numWaves, uint32_t randomSeed);
35
36 ~GerstnerWaves() override = default;
38
39 Status ComputeSurfaceElevation(double time, const double pos[2], double& elevationOut) override;
48 Status ComputeSurfaceElevationAtLagrange(double time, const double lagrangePos[2], double& elevationOut);
50
51 Status ComputeSurfaceUnitNormal(double time, const double pos[2], double unitNormalOut[3]) override;
60 Status ComputeSurfaceUnitNormalAtLagrange(double time, const double lagrangePos[2], double unitNormalOut[3]);
62
63 Status ComputeParticleVelocity(double time, const double pos[3], double velOut[3]) override;
72 Status ComputeParticleVelocityAtLagrange(double time, const double lagrangePos[3], double velOut[3]);
74
75 Status ComputeParticleAcceleration(double time, const double pos[3], double accOut[3]) override;
84 Status ComputeParticleAccelerationAtLagrange(double time, const double lagrangePos[3], double accOut[3]);
86
87 Status ComputeDynamicPressure(double time, const double pos[3], double& pressureOut) override;
96 Status ComputeDynamicPressureAtLagrange(double time, const double lagrangePos[3], double& pressureOut);
98
99 Status ComputeTotalPressure(double time, const double pos[3], double& pressureOut) override;
108 Status ComputeTotalPressureWithElevation(double eulerZ, double elevation, double& pressureOut);
110
112 double time,
113 const double pos[3],
114 double& surface_elevation,
115 double surface_unit_normal[3],
116 double particle_velocity[3],
117 double particle_acceleration[3],
118 double& pressure) override;
119
120protected:
128 void FindLagrangePoint3D(double time, const double eulerPosIn[3], double* lagrangePosOut);
136 void FindLagrangePoint2D(double time, const double eulerPosIn[2], double* lagrangePosOut);
138
140};
141} // namespace marenv::wave
Definition GerstnerWaves.h:18
void ThrowIfWavesAreTooSteep()
Throws an exception if the waves are too steep.
Status ComputeParticleAcceleration(double time, const double pos[3], double accOut[3]) override
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) override
Status ComputeSurfaceUnitNormal(double time, const double pos[2], double unitNormalOut[3]) override
Status ComputeParticleVelocity(double time, const double pos[3], double velOut[3]) override
Status ComputeTotalPressure(double time, const double pos[3], double &pressureOut) override
GerstnerWaves(WaveEnergySpectrum::SpectrumParameters spectrumParameters, int numWaves, uint32_t randomSeed)
Status ComputeParticleAccelerationAtLagrange(double time, const double lagrangePos[3], double accOut[3])
Status ComputeDynamicPressure(double time, const double pos[3], double &pressureOut) override
Status ComputeDynamicPressureAtLagrange(double time, const double lagrangePos[3], double &pressureOut)
Status ComputeParticleVelocityAtLagrange(double time, const double lagrangePos[3], double velOut[3])
Status ComputeSurfaceElevation(double time, const double pos[2], double &elevationOut) override
Status ComputeTotalPressureWithElevation(double eulerZ, double elevation, double &pressureOut)
Status ComputeSurfaceElevationAtLagrange(double time, const double lagrangePos[2], double &elevationOut)
GerstnerWaves(std::shared_ptr< WaveComponents > waveComponents)
void FindLagrangePoint2D(double time, const double eulerPosIn[2], double *lagrangePosOut)
Status ComputeSurfaceUnitNormalAtLagrange(double time, const double lagrangePos[2], double unitNormalOut[3])
void FindLagrangePoint3D(double time, const double eulerPosIn[3], double *lagrangePosOut)
~GerstnerWaves() override=default
Default destructor.
Parent class for linear wave theories used to simulate gravity waves.
Definition LinearWaveTheory.h:43
Status
Definition marenv.h:40
The parameters defining a certain wave field.
Definition WaveEnergySpectrum.h:41