-
Notifications
You must be signed in to change notification settings - Fork 41
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
Set up CI using GitHub Actions #85
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add codeowners and gazebo ci.yml Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ci.yml - Minimal version - checkout only. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ci.yml - Change checkout actions/checkout@v3 Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add CI workflows for ubuntu and macos - Rename and split macOS into separate workflow. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci - Install Gazebo Garden. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci - Test caching Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci - Add brew install script. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci - Add build script. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos-ci - Add test step. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add GitHub Actions status badge, remove travis badges. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ci install scripts - Update the brew installation script to force relinking on all dependencies of the installed packages. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ci install scripts - Fix relink step. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ubunti-ci workflow. - Add install, build and test steps. - Rename macos scripts. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ubunti-ci workflow. - Install additional build dependencies. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ubunti-ci workflow. - Fix colcon build command line. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ubunti-ci workflow. - Add build dependency libtbb-dev. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update ci workflows. - Move macOS to colcon build. - Update workflow for ubuntu 20.04 - Ensure cgal etc are linked as well as deps. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update workflows. - Split Ubuntu jobs to separate workflow Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update workflows. - Update names. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos workflow - add build tools Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: fix EigenFFTW test - Fix EigenFFTW breaking on Ubuntu. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macos workflow - reenable build and test Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: fix tests - Fix timer in CGAL test and disable triangulation tests failing on Ubuntu. - Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: check colcon install on macOS workflow Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: disable trochoid wave test Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: investigate why colcon not found in macOS CI workflow Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed. Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed - Use pip3 Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed - Use full path to colcon Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed - add pip install checks Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: add workflow to check build tools are installed - update path to Python scripts Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com> CI: update macOS CI build - Update path to Python scripts Signed-off-by: Rhys Mainwaring <rhys.mainwaring@me.com>
- Pip install colcon and vcstool with --user flag 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 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR replaces travis-CI with GitHub actions. There are workflows for macOS Monterey and Ubuntu Jammy (22.04).
Details