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 5 #89

Merged
merged 7 commits into from
Nov 24, 2022

Conversation

srmainwaring
Copy link
Owner

This PR is part 5 in a series of updates to the wave simulation.

The main change is converting the FFT wave simulation to use the complex to real FFTW planner. This is faster and reduces the storage and copying required in the simulation by a factor of 2.

Details

  1. Add example using the fftw_plan_dft_c2r_1d to EigenFFTW_Test.
  2. Change the FFT wave simulation to use fftw_plan_dft_c2r_2d which has nx * ny/2 + 1 complex inputs and nx * ny real outputs. Re-dimension data as required and update amplitude calculations to fill the arrays correctly.
  3. Move the allocation of the FFT storage into the function to create the plan and initialise post plan creation. This is because FFTW may overwrite the storage when creating the plan (although not for FFTW_ESTIMATE).
  4. The loop populating the amplitudes now ranges to < ny/2+1 in the inner most loop.
  5. Disable the Hermitian tests on the optimised wave sim (as this is now assumed in the c2r FFTW plan).
  6. Temporarily disable the Parseval's Identity test - the loops need to be redesigned to count elements in the re-dimensioned arrays correctly.

Notes

  1. This change has uncovered a couple of issues regarding the FFT derivative calculations that are used in the shading. The derivative amplitudes in the reference version are not Hermitian - possibly because of the Nyquist terms being imaginary, when they must be real. The new calculation forces these terms to be Hermitian. A couple of cross-check tests against the reference version have been disabled until this is resolved.

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
@srmainwaring srmainwaring added the enhancement New feature or request label Nov 24, 2022
@srmainwaring srmainwaring self-assigned this Nov 24, 2022
@srmainwaring srmainwaring merged commit 214fd87 into master Nov 24, 2022
@srmainwaring srmainwaring deleted the srmainwaring/wave-optimsation-part5 branch November 24, 2022 13:07
srmainwaring added a commit that referenced this pull request Nov 25, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Nov 25, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Nov 30, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Dec 5, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Dec 6, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Dec 8, 2022
Linear potential wave-body model demo (#70)

* Wave Body: Add linear potential wave-body model

Ellipsoid Buoy: add model for an ellipsoid buoy

- Add test model for hydrodynamics models.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: update linear wave-body interaction model

- add contributions to moments from hydrostatic equilibrium term (centre of buoyancy).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: update linear wave-body interaction model

- update comments and disable debug output

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: update models for testing linear wave-body interaction model

- set wave amplitudes to zero and compare the two hydrostatic models

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: use loaded hydro data in calculations

- Clean up.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: document the hydrostatics calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: use waterplane origin as reference point for displacements

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: add force control parameters to ellipsoid example

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave-Body:

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Fluid added mass: update added mass example

- Clean and symmetrise matrix

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Fluid added mass: add code to symmetrise added mass (disabled)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Fluid added mass: add flags for additional debug info

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Fluid added mass: cleanup

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: update example model and add notes

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: use waves test model

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: add world for ellipsoid test case

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* ROS: add a project to publish gazebo messages to ros2

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

ROS: update README

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Update example regular wave models (#73)

* Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: add checks when reading the hdf5 file (#74)

* Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body MBARI: add collision mesh and change default BEM file (#77)

* Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Merge (#80) into demo/linear-wave-body  (#81)

* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update regular wave model descriptions

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Merge branch 'master' into demo/linear-wave-body (#83)

* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Wave Body: post rebase fixes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
srmainwaring added a commit that referenced this pull request Dec 8, 2022
* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant