Marine systems simulation
Loading...
Searching...
No Matches
marenv::wave::AiryWavesScalar Class Reference

#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< WaveSnapshotLoadSnapshot () 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.
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ AiryWavesScalar() [1/2]

marenv::wave::AiryWavesScalar::AiryWavesScalar ( std::shared_ptr< WaveComponents waveComponents)

Constructor of Airy waves from wave component specifications.

Parameters
[in]waveComponentsShared pointer to wave component specifications.

◆ AiryWavesScalar() [2/2]

marenv::wave::AiryWavesScalar::AiryWavesScalar ( WaveEnergySpectrum::SpectrumParameters  spectrumParameters,
int  numWaves,
uint32_t  randomSeed 
)

Constructor of Airy waves from wave spectrum specification.

Parameters
[in]spectrumParametersWave spectrum specifications.
[in]numWavesNumber of waves to construct from the spectrum.
[in]randomSeedThe random seed to use.

Member Function Documentation

◆ ComputeDynamicPressure()

Status marenv::wave::AiryWavesScalar::ComputeDynamicPressure ( double  time,
const double  pos[3],
double &  pressureOut 
)
overridevirtual

Returns the dynamic pressure at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y,z) for which the pressure is desired.
[out]pressureOutThe pressure at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::wave::WaveField.

◆ ComputeParticleAcceleration()

Status marenv::wave::AiryWavesScalar::ComputeParticleAcceleration ( double  time,
const double  pos[3],
double  accOut[3] 
)
overridevirtual

Returns the particle acceleration at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y,z) for which the particle acceleration is desired.
[out]accOutThe particle acceleration at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Includes effects of both current and waves.

Implements marenv::wave::WaveField.

◆ ComputeParticleVelocity()

Status marenv::wave::AiryWavesScalar::ComputeParticleVelocity ( double  time,
const double  pos[3],
double  velOut[3] 
)
overridevirtual

Returns the particle velocity at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y,z) for which the particle velocity is desired.
[out]velOutThe particle velocity at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Includes effects of both current and waves.

Implements marenv::wave::WaveField.

◆ ComputePointQuery()

Status marenv::wave::AiryWavesScalar::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 
)
overridevirtual

Calculates multiple properties of the environment in one call.

Parameters
[in]timeSimulation time.
[in]posPosition.
[out]surface_elevationThe surface elevation above this point.
[out]surface_unit_normalThe surface unit normal above this point.
[out]particle_velocityThe particle velocity in this point.
[out]particle_accelerationThe particle acceleration in this point.
[out]pressureThe pressure. The pressure in this point.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::wave::WaveField.

◆ ComputeSurfaceElevation()

Status marenv::wave::AiryWavesScalar::ComputeSurfaceElevation ( double  time,
const double  pos[2],
double &  elevationOut 
)
overridevirtual

Returns the surface elevation at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y) for which surface elevation is desired.
[out]elevationOutSurface elevation at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::wave::WaveField.

◆ ComputeSurfaceUnitNormal()

Status marenv::wave::AiryWavesScalar::ComputeSurfaceUnitNormal ( double  time,
const double  pos[2],
double  unitNormalOut[3] 
)
overridevirtual

Returns the unit normal vector of the surface at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y) for which the unit normal surface vector is desired.
[out]unitNormalOutThe unit normal surface vector at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::wave::WaveField.

◆ ComputeTotalPressure()

Status marenv::wave::AiryWavesScalar::ComputeTotalPressure ( double  time,
const double  pos[3],
double &  pressureOut 
)
overridevirtual

Returns the total pressure at a specific position.

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y,z) for which the pressure is desired.
[out]pressureOutThe pressure at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::wave::WaveField.

◆ PositionIsInWater()

bool marenv::wave::AiryWavesScalar::PositionIsInWater ( double  time,
const double  pos[3] 
)

Decides if a given point is below the water surface.

Parameters
[in]timeTime in seconds.
[in]posThe 3D position to check (x,y,z) in meters.
Returns
True if the position is in water at given time, false otherwise.

The documentation for this class was generated from the following file: