Marine systems simulation
Loading...
Searching...
No Matches
WaveEnergySpectrum.h
1#pragma once
3
4#include "marenv/marenv.h"
5#include <marenv/wave/WaveComponents.h>
6
7namespace marenv::wave
8{
10
12
14{
15public:
17
19 {
20 None = 0,
22 };
24
26 {
27 Random,
29
30 };
32
34 {
37 };
39
41 {
42 double Hs = 1.0;
43 double T1 = 6.0;
44 double Theta = 0.0;
45 double cosinePower = 2.0;
46 double omegaNDimLowLim = 0.1;
47 double omegaNDimUppLim = 10.0;
48 SpectrumType spectrumType = SpectrumType::JONSWAP;
51 };
59 WaveEnergySpectrum(const SpectrumParameters& spectrumParameters, int numWaves, uint32_t randomSeed);
60 ~WaveEnergySpectrum() = default;
61
66 std::shared_ptr<WaveComponents> GetWaveComponents();
67
68protected:
70
71 using NormalizedProbabilityDistribution = double (WaveEnergySpectrum::*)(const double);
73
76
84 [[nodiscard]] double CosPower(double theta) const;
91 [[nodiscard]] double SpectralEnergy(double omega) const;
98 [[nodiscard]] double JONSWAP(double omega) const;
105 [[nodiscard]] double Issc(double omega) const;
107
108private:
109 struct WaveComponentSpec
110 {
111 double zetaA;
112 double omega;
113 double theta;
114 double energy;
115 bool operator<(const WaveComponentSpec& a)
116 {
117 return zetaA < a.zetaA;
118 }
119 };
120 std::shared_ptr<WaveComponents> m_waveComponents;
121 int m_numWaves;
122 uint32_t m_randomSeed;
123 std::vector<WaveComponentSpec> m_waveComponentSpecs;
124};
125
126} // namespace marenv::wave
Represents a wave field.
Definition WaveEnergySpectrum.h:14
void CalcWaveFrequencies()
Calculates frequencies of each wave component.
SpectrumParameters m_param
Wave spectrum parameters.
Definition WaveEnergySpectrum.h:106
double(WaveEnergySpectrum::*)(const double) NormalizedProbabilityDistribution
Defines the type of a normalized probability distribution function.
Definition WaveEnergySpectrum.h:71
DirectionSpectrum
Shape function for the direction spectrum.
Definition WaveEnergySpectrum.h:19
@ CosineSquared
The function is of the form cos(theta)^n.
double JONSWAP(double omega) const
FrequencyBinning
Methods for dividing a spectrum in discrete frequencies.
Definition WaveEnergySpectrum.h:34
@ EqualSqrtEnergy
Each wave component has the same .
@ EqualEnergy
Each wave component has the same energy.
WaveEnergySpectrum(const SpectrumParameters &spectrumParameters, int numWaves, uint32_t randomSeed)
double Issc(double omega) const
std::shared_ptr< WaveComponents > GetWaveComponents()
double SpectralEnergy(double omega) const
double CosPower(double theta) const
DirectionBinning
Methods for realisation of direction spectrum.
Definition WaveEnergySpectrum.h:26
@ Random
Random distribution according to the direction spectrum.
@ Sequential
Higher energies in main direction.
void CalcWaveDirections()
Calculates wave directions according to the specified spectrum parameters.
Policy mixin: this type is default copyable but not movable.
Definition marenv.h:100
The parameters defining a certain wave field.
Definition WaveEnergySpectrum.h:41
SpectrumType spectrumType
Spectrum type (JONSWAP or ISSC).
Definition WaveEnergySpectrum.h:48
double omegaNDimUppLim
Non-dimensional omega_nDim = omega*T1/(2*pi) upper limit.
Definition WaveEnergySpectrum.h:47
double T1
Mean wave period.
Definition WaveEnergySpectrum.h:43
double omegaNDimLowLim
Non-dimensional omega_nDim = omega*T1/(2*pi) lower limit.
Definition WaveEnergySpectrum.h:46
double cosinePower
directional spectrum is given as cos(theta)^cosinePower.
Definition WaveEnergySpectrum.h:45
double Theta
Mean wave propagation direction.
Definition WaveEnergySpectrum.h:44
FrequencyBinning frequencyBinning
How the frequencies of each wave component is set.
Definition WaveEnergySpectrum.h:50
double Hs
Significant wave height.
Definition WaveEnergySpectrum.h:42
DirectionBinning directionBinning
How the directions of each wave component is set.
Definition WaveEnergySpectrum.h:49