|
Marine systems simulation
|
#include <AiryWavesScalar.h>
Inheritance diagram for marenv::wave::AiryWavesScalar:
Collaboration diagram for marenv::wave::AiryWavesScalar:Public Member Functions | |
| AiryWavesScalar (std::shared_ptr< WaveComponents > waveComponents) | |
| AiryWavesScalar (WaveEnergySpectrum::SpectrumParameters spectrumParameters, int numWaves, uint32_t randomSeed) | |
| ~AiryWavesScalar () 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 |
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 uses scalar implementation instead of SIMD operations. This makes it efficient for smaller number of wave components. For a larger number of wave components, please consider using the AiryWaves class instead. AiryWaves is based on SIMD (Single Instruction Multiple Data) operations for efficient computation of wave properties, making it more efficient for larger number of wave components.
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.
| marenv::wave::AiryWavesScalar::AiryWavesScalar | ( | std::shared_ptr< WaveComponents > | waveComponents | ) |
Constructor of Airy waves from wave component specifications.
| [in] | waveComponents | Shared pointer to wave component specifications. |
| marenv::wave::AiryWavesScalar::AiryWavesScalar | ( | 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 |
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.
| bool marenv::wave::AiryWavesScalar::PositionIsInWater | ( | double | time, |
| const double | pos[3] | ||
| ) |
Decides if a given point is below the water surface.
| [in] | time | Time in seconds. |
| [in] | pos | The 3D position to check (x,y,z) in meters. |