]> git.treefish.org Git - seamulator.git/blobdiff - sea.h
Basically it's working
[seamulator.git] / sea.h
diff --git a/sea.h b/sea.h
index 48307ee540e68741669cd75fb67a0725bb6ffcd3..20f5d638d33479fd21d5b8daf0626e591d9926ac 100644 (file)
--- a/sea.h
+++ b/sea.h
@@ -1,15 +1,44 @@
 #pragma once
 
 #pragma once
 
+#include <chrono>
+#include <complex>
+#include <random>
+
+#include <fftw3.h>
+
 #include "seafwd.h"
 
 #include "seafwd.h"
 
+#include "complexpair.h"
 #include "watersurfacefwd.h"
 
 class Sea
 {
  public:
   Sea(WaterSurfacePtr surface);
 #include "watersurfacefwd.h"
 
 class Sea
 {
  public:
   Sea(WaterSurfacePtr surface);
+  ~Sea();
+  Sea(const Sea&) = delete;
+  Sea& operator=(const Sea&) = delete;
   void update();
 
  private:
   void update();
 
  private:
+  static const double PHILLIPS_CONSTANT;
+  static const double GRAVITATIONAL_CONSTANT;
+
   WaterSurfacePtr m_surface;
   WaterSurfacePtr m_surface;
+  double m_windDirection[2];
+  double m_windSpeed;
+  std::random_device m_randomDevice;
+  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;
 };
 };