4#include <marenv/marenv.h>
5#include <marenv/wave/LinearWaveTheory.h>
6#include <marenv/wave/WaveEnergySpectrum.h>
41 std::vector<xsimd::batch<double>>
omega;
42 std::vector<xsimd::batch<double>>
k;
43 std::vector<xsimd::batch<double>>
cosT;
44 std::vector<xsimd::batch<double>>
sinT;
45 std::vector<xsimd::batch<double>>
eps;
46 std::vector<xsimd::batch<double>>
zetaA;
48 std::vector<xsimd::batch<double>>
zetaAK;
51 std::vector<xsimd::batch<double>>
ampVelK;
54 std::vector<xsimd::batch<double>>
ampAccK;
89 std::vector<xsimd::batch<double>>
angle;
97 std::vector<xsimd::batch<double>>
expk;
109 static constexpr int kBatchSize =
static_cast<int>(xsimd::batch<double>::size);
168 double& surface_elevation,
169 double surface_unit_normal[3],
170 double particle_velocity[3],
171 double particle_acceleration[3],
172 double& pressure)
override;
193 return static_cast<SimdSnapshot*
>(snap.get())->simdStatic;
202 void PublishSimdSnapshot(std::shared_ptr<WaveComponents> wc);
Definition AiryWavesSimd.h:32
const WaveStaticSIMD & GetSimdStatic() const
Definition AiryWavesSimd.h:190
AiryWavesSimd(WaveEnergySpectrum::SpectrumParameters spectrumParameters, int numWaves, uint32_t randomSeed)
~AiryWavesSimd() override=default
Default destructor.
Status ComputeParticleVelocity(double time, const double pos[3], double velOut[3]) override
AiryWavesSimd(std::shared_ptr< WaveComponents > waveComponents)
bool PositionIsInWater(double time, const double pos[3])
Status ComputeParticleAcceleration(double time, const double pos[3], double accOut[3]) override
Status ComputeSurfaceUnitNormal(double time, const double pos[2], double unitNormalOut[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 ComputeDynamicPressure(double time, const double pos[3], double &pressureOut) override
void BlendInPlace(WaveComponentData &other, double alpha) override
Status ComputeSurfaceElevation(double time, const double pos[2], double &elevationOut) override
Status ComputeTotalPressure(double time, const double pos[3], double &pressureOut) override
Parent class for linear wave theories used to simulate gravity waves.
Definition LinearWaveTheory.h:43
std::shared_ptr< WaveSnapshot > LoadSnapshot() const
Definition LinearWaveTheory.h:75
Status
Definition marenv.h:40
Definition AiryWavesSimd.h:67
SimdSnapshot(std::shared_ptr< WaveComponents > wc, WaveStaticSIMD s)
Definition AiryWavesSimd.h:76
WaveStaticSIMD simdStatic
Pre-computed SIMD static data derived from wave components.
Definition AiryWavesSimd.h:68
Extended dynamic SIMD data including depth-dependent terms. See also WaveDynamicSIMD.
Definition AiryWavesSimd.h:96
std::vector< xsimd::batch< double > > expk
Exponential depth decay factor exp(-k*z).
Definition AiryWavesSimd.h:97
Definition AiryWavesSimd.h:88
std::vector< xsimd::batch< double > > sin_angle
Sine of phase angle.
Definition AiryWavesSimd.h:90
std::vector< xsimd::batch< double > > angle
Phase angle term (omega*t - k*x*cosT - k*y*sinT + eps).
Definition AiryWavesSimd.h:89
std::vector< xsimd::batch< double > > cos_angle
Cosine of phase angle.
Definition AiryWavesSimd.h:91
Definition AiryWavesSimd.h:107
static constexpr int kMaxBatches
Maximum SIMD batches needed for kMaxWaves.
Definition AiryWavesSimd.h:110
int nbatches
Number of active batches (set each fill).
Definition AiryWavesSimd.h:116
std::array< xsimd::batch< double >, kMaxBatches > cos_angle
Cosine of phase angle for each batch.
Definition AiryWavesSimd.h:114
std::array< xsimd::batch< double >, kMaxBatches > expk
Exponential depth decay for each batch.
Definition AiryWavesSimd.h:115
std::array< xsimd::batch< double >, kMaxBatches > angle
Phase angle for each batch.
Definition AiryWavesSimd.h:112
std::array< xsimd::batch< double >, kMaxBatches > sin_angle
Sine of phase angle for each batch.
Definition AiryWavesSimd.h:113
static constexpr int kBatchSize
SIMD batch width (architecture-dependent).
Definition AiryWavesSimd.h:109
static constexpr int kMaxWaves
Maximum supported wave components per computation.
Definition AiryWavesSimd.h:108
Definition AiryWavesSimd.h:40
std::vector< xsimd::batch< double > > ampAccKcosT
ampAccK * cosT.
Definition AiryWavesSimd.h:55
std::vector< xsimd::batch< double > > ampVelKcosT
ampVelK * cosT.
Definition AiryWavesSimd.h:52
std::vector< xsimd::batch< double > > totalAmplitude
zetaA (alias, for clarity in pressure).
Definition AiryWavesSimd.h:57
std::vector< xsimd::batch< double > > ampVelKsinT
ampVelK * sinT.
Definition AiryWavesSimd.h:53
std::vector< xsimd::batch< double > > zetaAK
zetaA * k.
Definition AiryWavesSimd.h:48
std::vector< xsimd::batch< double > > ampAccK
zetaA * g * k (acceleration amplitude * k).
Definition AiryWavesSimd.h:54
std::vector< xsimd::batch< double > > cosT
Cosine of propagation direction.
Definition AiryWavesSimd.h:43
std::vector< xsimd::batch< double > > eps
Phase shift.
Definition AiryWavesSimd.h:45
std::vector< xsimd::batch< double > > zetaAKcosT
zetaA * k * cosT.
Definition AiryWavesSimd.h:49
std::vector< xsimd::batch< double > > sinT
Sine of propagation direction.
Definition AiryWavesSimd.h:44
std::vector< xsimd::batch< double > > zetaAKsinT
zetaA * k * sinT.
Definition AiryWavesSimd.h:50
std::vector< xsimd::batch< double > > omega
Angular frequency [rad/s].
Definition AiryWavesSimd.h:41
std::vector< xsimd::batch< double > > zetaA
Wave amplitude [m].
Definition AiryWavesSimd.h:46
std::vector< xsimd::batch< double > > ampVelK
zetaA * (g/omega) * k (velocity amplitude * k).
Definition AiryWavesSimd.h:51
std::vector< xsimd::batch< double > > ampAccKsinT
ampAccK * sinT.
Definition AiryWavesSimd.h:56
std::vector< xsimd::batch< double > > k
Wave number [1/m].
Definition AiryWavesSimd.h:42
Details of a wave component.
Definition WaveField.h:23
The parameters defining a certain wave field.
Definition WaveEnergySpectrum.h:41
Definition LinearWaveTheory.h:25