diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-04-23 17:48:02 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-04-23 17:48:02 -0400 |
commit | 84c0bfa85374e45f06c1b6d7311b80f78670fb7c (patch) | |
tree | ef655f76be13a469bb8de9cad6de56a2ffd294b6 /src/ocean/ocean_alt.h | |
parent | 4dff6a2ca02a6a2e8179ff831b7d2d9fe42e17e8 (diff) |
saving
Diffstat (limited to 'src/ocean/ocean_alt.h')
-rw-r--r-- | src/ocean/ocean_alt.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/ocean/ocean_alt.h b/src/ocean/ocean_alt.h new file mode 100644 index 0000000..76a298e --- /dev/null +++ b/src/ocean/ocean_alt.h @@ -0,0 +1,95 @@ +#ifndef OCEAN_ALT_H +#define OCEAN_ALT_H +#define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT +#define EIGEN_DONT_VECTORIZE + +#include <map> +#include <vector> +#include <utility> +#include <Eigen/Dense> + +// for every 1d index up to length*width +struct WaveIndexConstant{ + Eigen::Vector2d h0_prime = Eigen::Vector2d(0.f, 0.f); + Eigen::Vector2d h0_prime_conj = Eigen::Vector2d(0.f, 0.f); + + double w_prime = 0.0; + + + Eigen::Vector2d base_horiz_pos = Eigen::Vector2d(0.f, 0.f); // static horiz pos with no displacement + Eigen::Vector2d k_vector = Eigen::Vector2d(0.f, 0.f); // static horiz pos with no displacement +}; + +class ocean_alt +{ +public: + ocean_alt(); + void updateVertexAmplitudes(double t); + std::vector<Eigen::Vector3f> get_vertices(); + std::vector<Eigen::Vector3i> get_faces(); + void fft_prime(double t); + std::vector<Eigen::Vector3f> getNormals(); + + + + + + +private: + + Eigen::Vector2i index_1d_to_2d(int i); + Eigen::Vector2d get_k_vector(int n_prime, int m_prime); + double phillips_prime(Eigen::Vector2d k); + Eigen::Vector2d h_0_prime(Eigen::Vector2d k); + double omega_prime(Eigen::Vector2d k); + void init_wave_index_constants(); + Eigen::Vector2d complex_exp(double exponent); + Eigen::Vector2d h_prime_t(int i, double t); + Eigen::Vector2d get_horiz_pos(int i); + std::pair<double, double> sample_complex_gaussian(); + + + + + + + + + + std::map<int, WaveIndexConstant> m_waveIndexConstants; // stores constants that only need to be calculate once for each grid constant + + + + const double Lx = 100.0; + const double Lz = 100.0; + + const int num_rows = 32; + const int num_cols = 32; + + const int N = num_rows*num_cols; // total number of grid points + const double lambda = .40; // how much displacement matters + const double spacing = 35.0; // spacing between grid points + + const double A = 1.0; // numeric constant for the Phillips spectrum + const double V = 5.5; // wind speed + const double gravity = 9.81; + const double L = V*V/gravity; + const Eigen::Vector2d omega_wind = Eigen::Vector2d(1.0, 0.0); // wind direction, used in Phillips equation + + std::vector<Eigen::Vector2d> m_current_h; // current height fields for each K + std::vector<Eigen::Vector2d> m_displacements; // current displacement vector for each K + std::vector<Eigen::Vector2d> m_slopes; // current displacement vector for each K + //std::vector<Eigen::Vector3f> m_slope_vectors; // current displacement vector for each K + + std::vector<Eigen::Vector3f> m_normals; // current displacement vector for each K + + + + + + const double D = 1.0; // Depth below mean water level (for dispersion relation) + + +}; + +#endif // OCEAN_ALT_H |