FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
WaveEnergySpectrum.h
1#pragma once
3
4#include "marenv/marenv.h"
5#include "marenv/calc/LcgRandom.h"
6#include <vector>
7#include <marenv/wave/WaveComponents.h>
8
9namespace marenv::wave
10{
12
14
16{
17public:
19
21 {
22 None = 0,
24 };
26
28 {
29 Random,
31
32 };
34
36 {
39 };
41
43 {
44 double Hs = 1.0;
45 double T1 = 6.0;
46 double Theta = 0.0;
47 double cosinePower = 2.0;
48 double omegaNDimLowLim = 0.1;
49 double omegaNDimUppLim = 10.0;
50 SpectrumType spectrumType = SpectrumType::JONSWAP;
53 };
65 WaveEnergySpectrum(const SpectrumParameters& spectrumParameters, int numWaves, uint32_t randomSeed);
66 ~WaveEnergySpectrum() = default;
67
72 std::shared_ptr<WaveComponents> GetWaveComponents();
73
74protected:
76
77 using NormalizedProbabilityDistribution = double (WaveEnergySpectrum::*)(const double);
93 [[nodiscard]] double IntegrateSpectrum(double omegaLow, double omegaHigh, double step) const;
103 [[nodiscard]] double BinFrequency(double omegaLow, double omegaHigh, double step) const;
108 [[nodiscard]] std::vector<double> CalcBinEdges() const;
119
127 [[nodiscard]] double CosPower(double theta) const;
134 [[nodiscard]] double SpectralEnergy(double omega) const;
141 [[nodiscard]] double JONSWAP(double omega) const;
148 [[nodiscard]] double Issc(double omega) const;
150
151private:
152 struct WaveComponentSpec
153 {
154 double zetaA;
155 double omega;
156 double theta;
157 double energy;
158 bool operator<(const WaveComponentSpec& a)
159 {
160 return zetaA < a.zetaA;
161 }
162 };
163 std::shared_ptr<WaveComponents> m_waveComponents;
164 int m_numWaves;
165 uint32_t m_randomSeed;
166 std::vector<WaveComponentSpec> m_waveComponentSpecs;
167};
168
169} // namespace marenv::wave
Generation of very simple pseudo-random numbers.
Definition LcgRandom.h:60
Represents a wave field.
Definition WaveEnergySpectrum.h:16
SpectrumParameters m_param
Wave spectrum parameters.
Definition WaveEnergySpectrum.h:149
double(WaveEnergySpectrum::*)(const double) NormalizedProbabilityDistribution
Defines the type of a normalized probability distribution function.
Definition WaveEnergySpectrum.h:77
DirectionSpectrum
Shape function for the direction spectrum.
Definition WaveEnergySpectrum.h:21
@ CosineSquared
The function is of the form cos(theta)^n.
std::vector< double > CalcBinEdges() const
double JONSWAP(double omega) const
FrequencyBinning
Methods for dividing a spectrum in discrete frequencies.
Definition WaveEnergySpectrum.h:36
@ EqualSqrtEnergy
Each wave component has the same .
@ EqualEnergy
Each wave component has the same energy.
double BinFrequency(double omegaLow, double omegaHigh, double step) const
void CalcWaveDirections(calc::LcgRandom &random)
WaveEnergySpectrum(const SpectrumParameters &spectrumParameters, int numWaves, uint32_t randomSeed)
void CalcCalmSeaFrequencies()
Calculates the frequencies of a calm sea (Hs = 0): those of Hs = 1, with zero energy and amplitude.
double Issc(double omega) const
std::shared_ptr< WaveComponents > GetWaveComponents()
double SpectralEnergy(double omega) const
double IntegrateSpectrum(double omegaLow, double omegaHigh, double step) const
double CosPower(double theta) const
DirectionBinning
Methods for realisation of direction spectrum.
Definition WaveEnergySpectrum.h:28
@ Random
Random distribution according to the direction spectrum.
@ Sequential
Higher energies in main direction.
Policy mixin: this type is movable but not copyable.
Definition marenv.h:126
The parameters defining a certain wave field.
Definition WaveEnergySpectrum.h:43
SpectrumType spectrumType
Spectrum type (JONSWAP or ISSC).
Definition WaveEnergySpectrum.h:50
double omegaNDimUppLim
Non-dimensional omega_nDim = omega*T1/(2*pi) upper limit.
Definition WaveEnergySpectrum.h:49
double T1
Mean wave period.
Definition WaveEnergySpectrum.h:45
double omegaNDimLowLim
Non-dimensional omega_nDim = omega*T1/(2*pi) lower limit.
Definition WaveEnergySpectrum.h:48
double cosinePower
directional spectrum is given as cos(theta)^cosinePower.
Definition WaveEnergySpectrum.h:47
double Theta
Mean wave propagation direction [rad]: the direction the waves go to, from North (x) towards East (y)...
Definition WaveEnergySpectrum.h:46
FrequencyBinning frequencyBinning
How the frequencies of each wave component is set.
Definition WaveEnergySpectrum.h:52
double Hs
Significant wave height.
Definition WaveEnergySpectrum.h:44
DirectionBinning directionBinning
How the directions of each wave component is set.
Definition WaveEnergySpectrum.h:51