Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Waves simulation optimisation - part 2 #84

Merged
merged 21 commits into from
Nov 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f048279
Waves: update FFT wave simulation tests for non-square grids (nx != ny)
srmainwaring Nov 18, 2022
1c8c5d1
Waves: apply google coding standards
srmainwaring Nov 18, 2022
08354c3
Waves: apply google coding standards
srmainwaring Nov 18, 2022
6e3879f
Waves: apply google coding standards
srmainwaring Nov 18, 2022
d74a743
Waves: apply google coding standards
srmainwaring Nov 18, 2022
203f709
Waves: apply google coding standards
srmainwaring Nov 18, 2022
a6bf004
Waves: apply google coding standards
srmainwaring Nov 18, 2022
71561e0
Waves: update FFT test namesWaves
srmainwaring Nov 18, 2022
46c8d8c
Waves: preparation for vectorising FFT wave simulation update
srmainwaring Nov 19, 2022
c7d5661
Waves: preparation for vectorising FFT wave simulation update
srmainwaring Nov 19, 2022
155e827
Waves: progress vectorising FFT wave simulation update
srmainwaring Nov 19, 2022
8c7fe76
Waves: vectorise base amplitude calc for FFT wave simulation
srmainwaring Nov 19, 2022
d424fb2
Waves: add unit test for Eigen and FFTW
srmainwaring Nov 19, 2022
0f51c5f
Waves: add unit test for Eigen and FFTW
srmainwaring Nov 19, 2022
f6be745
Waves: add unit test for Eigen and FFTW
srmainwaring Nov 20, 2022
939773f
Waves: add Eigen alignment macro
srmainwaring Nov 20, 2022
7925729
Waves: use Eigen types for FFTW storage - reduce copies
srmainwaring Nov 20, 2022
81ad4ca
Waves: remove unused code from FFWT wave simulation
srmainwaring Nov 20, 2022
a3439a7
Waves: use row-major Eigen matrix storage for FFT wave simulation
srmainwaring Nov 20, 2022
af400c6
Waves: use row-major Eigen matrix storage for FFT wave simulation
srmainwaring Nov 20, 2022
75edc43
Waves: update output mapping from row to col major storage in FFT wav…
srmainwaring Nov 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions gz-waves/include/gz/waves/WaveSimulation.hh
Original file line number Diff line number Diff line change
Expand Up @@ -31,35 +31,35 @@ namespace waves

WaveSimulation();

virtual void SetWindVelocity(double _ux, double _uy) = 0;
virtual void SetWindVelocity(double ux, double uy) = 0;

virtual void SetTime(double _value) = 0;
virtual void SetTime(double value) = 0;

virtual void ComputeElevation(
Eigen::Ref<Eigen::MatrixXd> _h) = 0;
Eigen::Ref<Eigen::MatrixXd> h) = 0;

virtual void ComputeElevationDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy) = 0;
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy) = 0;

virtual void ComputeDisplacements(
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy) = 0;
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy) = 0;

virtual void ComputeDisplacementsDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) = 0;
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) = 0;

virtual void ComputeDisplacementsAndDerivatives(
Eigen::Ref<Eigen::MatrixXd> _h,
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy,
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy,
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) = 0;
Eigen::Ref<Eigen::MatrixXd> h,
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy,
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy,
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) = 0;
};
}
}
Expand Down
50 changes: 24 additions & 26 deletions gz-waves/include/gz/waves/WaveSimulationFFT2.hh
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,10 @@
#ifndef GZ_WAVES_WAVESIMULATIONFFT2_HH_
#define GZ_WAVES_WAVESIMULATIONFFT2_HH_

#include "WaveSimulation.hh"

using Eigen::MatrixXd;

#include <memory>

#include "WaveSimulation.hh"

using Eigen::MatrixXd;

namespace gz
Expand All @@ -35,45 +33,45 @@ namespace waves
public:
virtual ~WaveSimulationFFT2();

WaveSimulationFFT2(double _lx, double _ly, int _nx, int _ny);
WaveSimulationFFT2(double lx, double ly, int nx, int ny);

void SetUseVectorised(bool _value);
void SetUseVectorised(bool value);

/// \brief Set lambda which controls the horizontal wave displacement.
void SetLambda(double _lambda);
void SetLambda(double lambda);

virtual void SetWindVelocity(double _ux, double _uy) override;
virtual void SetWindVelocity(double ux, double uy) override;

virtual void SetTime(double _value) override;
virtual void SetTime(double value) override;

virtual void ComputeElevation(
Eigen::Ref<Eigen::MatrixXd> _h) override;
Eigen::Ref<Eigen::MatrixXd> h) override;

virtual void ComputeElevationDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy) override;
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy) override;

virtual void ComputeDisplacements(
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy) override;
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy) override;

virtual void ComputeDisplacementsDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

virtual void ComputeDisplacementsAndDerivatives(
Eigen::Ref<Eigen::MatrixXd> _h,
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy,
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy,
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> h,
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy,
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy,
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

private:
std::unique_ptr<WaveSimulationFFT2Impl> impl;
std::unique_ptr<WaveSimulationFFT2Impl> impl_;
};
}
}
Expand Down
52 changes: 26 additions & 26 deletions gz-waves/include/gz/waves/WaveSimulationSinusoid.hh
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
#ifndef GZ_WAVES_WAVESIMULATIONSINUSOID_HH_
#define GZ_WAVES_WAVESIMULATIONSINUSOID_HH_

#include "WaveSimulation.hh"
#include <memory>

#include <Eigen/Dense>

#include <memory>
#include "WaveSimulation.hh"

using Eigen::MatrixXd;

Expand All @@ -45,49 +45,49 @@ namespace waves
public:
~WaveSimulationSinusoid();

WaveSimulationSinusoid(double _lx, double _ly, int _nx, int _ny);
WaveSimulationSinusoid(double lx, double ly, int nx, int ny);

void SetUseVectorised(bool _value);
void SetUseVectorised(bool value);

void SetDirection(double _dir_x, double _dir_y);
void SetDirection(double dir_x, double dir_y);

void SetAmplitude(double _value);
void SetAmplitude(double value);

void SetPeriod(double _value);
void SetPeriod(double value);

virtual void SetWindVelocity(double _ux, double _uy) override;
virtual void SetWindVelocity(double ux, double uy) override;

virtual void SetTime(double _value) override;
virtual void SetTime(double value) override;

virtual void ComputeElevation(
Eigen::Ref<Eigen::MatrixXd> _h) override;
Eigen::Ref<Eigen::MatrixXd> h) override;

virtual void ComputeElevationDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy) override;
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy) override;

virtual void ComputeDisplacements(
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy) override;
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy) override;

virtual void ComputeDisplacementsDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

virtual void ComputeDisplacementsAndDerivatives(
Eigen::Ref<Eigen::MatrixXd> _h,
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy,
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy,
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> h,
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy,
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy,
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

private:
class Impl;
std::unique_ptr<Impl> impl;
std::unique_ptr<Impl> impl_;
};
}
}
Expand Down
48 changes: 24 additions & 24 deletions gz-waves/include/gz/waves/WaveSimulationTrochoid.hh
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
#ifndef GZ_WAVES_WAVESIMULATIONTROCHOID_HH_
#define GZ_WAVES_WAVESIMULATIONTROCHOID_HH_

#include "WaveSimulation.hh"
#include <memory>

#include <Eigen/Dense>

#include <memory>
#include "WaveSimulation.hh"

using Eigen::MatrixXd;

Expand All @@ -37,42 +37,42 @@ namespace waves
virtual ~WaveSimulationTrochoid();

WaveSimulationTrochoid(
int _N,
double _L,
std::shared_ptr<WaveParameters> _params);
int nx,
double lx,
std::shared_ptr<WaveParameters> params);

virtual void SetWindVelocity(double _ux, double _uy) override;
virtual void SetWindVelocity(double ux, double uy) override;

virtual void SetTime(double _time) override;
virtual void SetTime(double time) override;

virtual void ComputeElevation(
Eigen::Ref<Eigen::MatrixXd> _h) override;
Eigen::Ref<Eigen::MatrixXd> h) override;

virtual void ComputeElevationDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy) override;
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy) override;

virtual void ComputeDisplacements(
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy) override;
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy) override;

virtual void ComputeDisplacementsDerivatives(
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

virtual void ComputeDisplacementsAndDerivatives(
Eigen::Ref<Eigen::MatrixXd> _h,
Eigen::Ref<Eigen::MatrixXd> _sx,
Eigen::Ref<Eigen::MatrixXd> _sy,
Eigen::Ref<Eigen::MatrixXd> _dhdx,
Eigen::Ref<Eigen::MatrixXd> _dhdy,
Eigen::Ref<Eigen::MatrixXd> _dsxdx,
Eigen::Ref<Eigen::MatrixXd> _dsydy,
Eigen::Ref<Eigen::MatrixXd> _dsxdy) override;
Eigen::Ref<Eigen::MatrixXd> h,
Eigen::Ref<Eigen::MatrixXd> sx,
Eigen::Ref<Eigen::MatrixXd> sy,
Eigen::Ref<Eigen::MatrixXd> dhdx,
Eigen::Ref<Eigen::MatrixXd> dhdy,
Eigen::Ref<Eigen::MatrixXd> dsxdx,
Eigen::Ref<Eigen::MatrixXd> dsydy,
Eigen::Ref<Eigen::MatrixXd> dsxdy) override;

private:
std::unique_ptr<WaveSimulationTrochoidImpl> impl;
std::unique_ptr<WaveSimulationTrochoidImpl> impl_;
};
}
}
Expand Down
46 changes: 23 additions & 23 deletions gz-waves/include/gz/waves/WaveSpectrum.hh
Original file line number Diff line number Diff line change
Expand Up @@ -31,37 +31,37 @@ inline namespace v2
public:
virtual ~OmniDirectionalWaveSpectrum();

virtual double Evaluate(double _k) const = 0;
virtual double Evaluate(double k) const = 0;

virtual void Evaluate(
Eigen::Ref<Eigen::MatrixXd> _spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &_k) const = 0;
Eigen::Ref<Eigen::MatrixXd> spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &k) const = 0;
};

class PiersonMoskowitzWaveSpectrum : public OmniDirectionalWaveSpectrum
{
public:
virtual ~PiersonMoskowitzWaveSpectrum();

PiersonMoskowitzWaveSpectrum(double _u19=5.0, double _gravity=9.81);
PiersonMoskowitzWaveSpectrum(double u19=5.0, double gravity=9.81);

virtual double Evaluate(double _k) const override;
virtual double Evaluate(double k) const override;

virtual void Evaluate(
Eigen::Ref<Eigen::MatrixXd> _spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &_k) const override;
Eigen::Ref<Eigen::MatrixXd> spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &k) const override;

double Gravity() const;

void SetGravity(double _value);
void SetGravity(double value);

double U19() const;

void SetU19(double _value);
void SetU19(double value);

private:
double _gravity{9.81};
double _u19{5.0};
double gravity_{9.81};
double u19_{5.0};
};

class ECKVWaveSpectrum : public OmniDirectionalWaveSpectrum
Expand All @@ -70,32 +70,32 @@ inline namespace v2
virtual ~ECKVWaveSpectrum();

ECKVWaveSpectrum(
double _u10=5.0,
double _cap_omega_c=0.84,
double _gravity=9.81);
double u10=5.0,
double cap_omega_c=0.84,
double gravity=9.81);

virtual double Evaluate(double _k) const override;
virtual double Evaluate(double k) const override;

virtual void Evaluate(
Eigen::Ref<Eigen::MatrixXd> _spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &_k) const override;
Eigen::Ref<Eigen::MatrixXd> spectrum,
const Eigen::Ref<const Eigen::MatrixXd> &k) const override;

double Gravity() const;

void SetGravity(double _value);
void SetGravity(double value);

double U10() const;

void SetU10(double _value);
void SetU10(double value);

double CapOmegaC() const;

void SetCapOmegaC(double _value);
void SetCapOmegaC(double value);

private:
double _gravity{9.81};
double _u10{5.0};
double _cap_omega_c{0.84};
double gravity_{9.81};
double u10_{5.0};
double cap_omega_c_{0.84};
};

}
Expand Down
Loading