#pragma once
+#include <chrono>
#include <complex>
#include <random>
+#include <fftw3.h>
+
#include "seafwd.h"
#include "complexpair.h"
{
public:
Sea(WaterSurfacePtr surface);
+ ~Sea();
+ Sea(const Sea&) = delete;
+ Sea& operator=(const Sea&) = delete;
void update();
private:
std::mt19937 m_randomGenerator;
std::normal_distribution<> m_normalDistribution;
std::vector<ComplexPair> m_fourierAmplitudes;
+ fftw_complex *m_fftwIn, *m_fftwOut;
+ fftw_plan m_fftwPlan;
+ std::chrono::time_point<std::chrono::system_clock> m_startTime;
double phillipsSpectrum(double k_x, double k_y) const;
ComplexPair generateFourierAmplitude(double k_x, double k_y);
ComplexPair& fourierAmplitudeAt(int n, int m);
void generateFourierAmplitudes();
double spatialFrequencyForIndex(int n) const;
+ double getRuntime() const;
};