|
Marine systems simulation
|
#include <AiryWavesSimd.h>
Inheritance diagram for marenv::wave::AiryWavesSimd:
Collaboration diagram for marenv::wave::AiryWavesSimd:Classes | |
| struct | SimdSnapshot |
| struct | WaveDynamicSIMD |
| struct | WaveDynamicSIMDExpAmp |
| Extended dynamic SIMD data including depth-dependent terms. See also WaveDynamicSIMD. More... | |
| struct | WaveDynamicStack |
| struct | WaveStaticSIMD |
Public Member Functions | |
| AiryWavesSimd (std::shared_ptr< WaveComponents > waveComponents) | |
| AiryWavesSimd (WaveEnergySpectrum::SpectrumParameters spectrumParameters, int numWaves, uint32_t randomSeed) | |
| ~AiryWavesSimd () override=default | |
| Default destructor. | |
| bool | PositionIsInWater (double time, const double pos[3]) |
| Status | ComputeSurfaceElevation (double time, const double pos[2], double &elevationOut) override |
| Status | ComputeSurfaceUnitNormal (double time, const double pos[2], double unitNormalOut[3]) override |
| Status | ComputeParticleVelocity (double time, const double pos[3], double velOut[3]) override |
| Status | ComputeParticleAcceleration (double time, const double pos[3], double accOut[3]) override |
| Status | ComputeDynamicPressure (double time, const double pos[3], double &pressureOut) override |
| Status | ComputeTotalPressure (double time, const double pos[3], double &pressureOut) override |
| Status | ComputePointQuery (double time, const double pos[3], double &surface_elevation, double surface_unit_normal[3], double particle_velocity[3], double particle_acceleration[3], double &pressure) override |
| void | BlendInPlace (WaveComponentData &other, double alpha) override |
| const WaveStaticSIMD & | GetSimdStatic () const |
Public Member Functions inherited from marenv::wave::LinearWaveTheory | |
| LinearWaveTheory (std::shared_ptr< WaveComponents > waveComponents, std::string waveTheoryName) | |
| WaveField::InsecureDatapointers | GetWaveComponents () const override |
| std::string | SpectrumName () const override |
| std::string | WaveTheoryName () const override |
| WaveComponentData | GetWaveComponentsCopy () const override |
| void | BlendInPlace (WaveComponentData &other, double alpha) override |
Public Member Functions inherited from marenv::wave::WaveField | |
| virtual | ~WaveField ()=default |
| Virtual destructor. | |
| virtual marenv::wave::WaveComponentData | GetWaveComponentsCopy (double time, size_t maxComponents=0) const |
Additional Inherited Members | |
Protected Member Functions inherited from marenv::wave::LinearWaveTheory | |
| std::shared_ptr< WaveSnapshot > | LoadSnapshot () const |
| void | StoreSnapshot (std::shared_ptr< WaveSnapshot > snap) |
Protected Member Functions inherited from marenv::wave::WaveField | |
| WaveField ()=default | |
| Constructor. | |
Protected Attributes inherited from marenv::wave::LinearWaveTheory | |
| std::string | m_spectrumName |
| The name of the wave spectrum. | |
| std::string | m_waveTheoryName |
| The name of the wave theory. | |
Calculates physical properties in a sea state from a set of for Airy theory
gravity waves (first-order Stokes waves). This class is based on SIMD (Single Instruction Multiple Data) operations for efficient computation of wave properties. This makes it more efficient for larger number of wave components. For a smaller number of wave components, please consider using the AiryWavesScalar class instead. Tests show that AiryWavesScalar is about 10% faster for one wave component and one call to the simplest function per iteration. Otherwise AiryWavesSimd is faster. See the image below for a comparison between AiryWavesScalar and AiryWavesSimd.
Thread safety**: concurrent calls to any Compute* method on the same instance are safe. A concurrent BlendInPlace call is also safe: it atomically publishes a new snapshot; in-flight Compute* calls complete against the old consistent snapshot and are unaffected.
|
explicit |
Constructor of Airy waves from wave component specifications.
| [in] | waveComponents | Shared pointer to wave component specifications. |
| marenv::wave::AiryWavesSimd::AiryWavesSimd | ( | WaveEnergySpectrum::SpectrumParameters | spectrumParameters, |
| int | numWaves, | ||
| uint32_t | randomSeed | ||
| ) |
Constructor of Airy waves from wave spectrum specification.
| [in] | spectrumParameters | Wave spectrum specifications. |
| [in] | numWaves | Number of waves to construct from the spectrum. |
| [in] | randomSeed | The random seed to use. |
|
overridevirtual |
Atomically blend wave components towards another set and rebuild the SIMD
| [in] | other | Target wave component data. |
| [in] | alpha | Blend factor (0=keep current, 1=use other). |
snapshot. Safe to call concurrently with any Compute* method.
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the dynamic pressure at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y,z) for which the pressure is desired. |
| [out] | pressureOut | The pressure at pos. |
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the particle acceleration at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y,z) for which the particle acceleration is desired. |
| [out] | accOut | The particle acceleration at pos. |
Includes effects of both current and waves.
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the particle velocity at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y,z) for which the particle velocity is desired. |
| [out] | velOut | The particle velocity at pos. |
Includes effects of both current and waves.
Implements marenv::wave::WaveField.
|
overridevirtual |
Calculates multiple properties of the environment in one call.
| [in] | time | Simulation time. |
| [in] | pos | Position. |
| [out] | surface_elevation | The surface elevation above this point. |
| [out] | surface_unit_normal | The surface unit normal above this point. |
| [out] | particle_velocity | The particle velocity in this point. |
| [out] | particle_acceleration | The particle acceleration in this point. |
| [out] | pressure | The pressure. The pressure in this point. |
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the surface elevation at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y) for which surface elevation is desired. |
| [out] | elevationOut | Surface elevation at pos. |
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the unit normal vector of the surface at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y) for which the unit normal surface vector is desired. |
| [out] | unitNormalOut | The unit normal surface vector at pos. |
Implements marenv::wave::WaveField.
|
overridevirtual |
Returns the total pressure at a specific position.
| [in] | time | Current simulation time. |
| [in] | pos | Position (x,y,z) for which the pressure is desired. |
| [out] | pressureOut | The pressure at pos. |
Implements marenv::wave::WaveField.
|
inline |
Static SIMD parameters used by AiryWaves computations.
Returns a reference into the current snapshot; for a stable view across multiple calls acquire a snapshot explicitly via LoadSnapshot().
| bool marenv::wave::AiryWavesSimd::PositionIsInWater | ( | double | time, |
| const double | pos[3] | ||
| ) |
Decides if a given point is below the water surface.
| [in] | time | Time in seconds. |
| [in] | pos | 3D position (x,y,z) in meters. |