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

#include <EnvironmentFacade.h>

+ Inheritance diagram for marenv::EnvironmentFacade:
+ Collaboration diagram for marenv::EnvironmentFacade:

Public Member Functions

 EnvironmentFacade ()
 
void SetWaves (std::shared_ptr< wave::WaveField > wave)
 
void SetWaves (const wave::WaveEnergySpectrum::SpectrumParameters &params, wave::WaveTheory waveTheory, int numWaves, uint32_t seed)
 
void SetBathymetry (std::shared_ptr< seafloor::BathymetryField > bathymetry)
 
std::shared_ptr< wave::WaveFieldGetWaves ()
 
std::shared_ptr< seafloor::BathymetryFieldGetBathymetry ()
 
void AddCurrentField (const std::string &id, std::shared_ptr< current::CurrentField > field)
 
void RemoveCurrentField (const std::string &id)
 
bool HasCurrentField (const std::string &id) const
 
std::shared_ptr< current::CurrentFieldGetCurrentField (const std::string &id) const
 
void AddWakeField (const std::string &id, std::shared_ptr< wake::WakeField > field)
 
void RemoveWakeField (const std::string &id)
 
bool HasWakeField (const std::string &id) const
 
std::shared_ptr< wake::WakeFieldGetWakeField (const std::string &id) const
 
std::vector< std::string > GetWakeFieldIds () const
 
std::vector< std::string > GetCurrentFieldIds () const
 
Status GetSubmergence (double time, const double pos[3], double &submergence) override
 
Status GetSurfaceElevation (double time, const double pos[2], double &elevationOut) override
 
Status GetSurfaceUnitNormal (double time, const double pos[2], double *unitNormalOut) override
 
Status GetParticleVelocity (double time, const double pos[3], double *velOut) override
 
Status GetParticleAcceleration (double time, const double pos[3], double *accOut) override
 
Status GetDynamicPressure (double time, const double pos[3], double &pressureOut) override
 
Status GetTotalPressure (double time, const double pos[3], double &pressureOut) override
 
Status GetSeaDepth (const double pos[2], double &depthOut) override
 
Status ComputeRayIntersection (const double origin[3], const double direction[3], double &distanceOut, double maxSearchDistance=100, double startSearchDistance=-1, double stepSize=1.0, double convergenceTolerance=0.01) override
 
Status GetCurrentVelocity (double time, const double pos[3], double *velOut) override
 
Status GetDensity (double time, const double pos[3], double &density) override
 
Status PointEnvironmentQuery (double time, const double pos[3], EnvironmentQuery &queryResult) override
 
- Public Member Functions inherited from marenv::Environment
virtual ~Environment ()=0
 Virtual destructor.
 
virtual Status GetSurfaceUnitNormal (double time, const double pos[2], double unitNormalOut[3])=0
 
virtual Status GetParticleVelocity (double time, const double pos[3], double velOut[3])=0
 
virtual Status GetParticleAcceleration (double time, const double pos[3], double accOut[3])=0
 
virtual Status GetCurrentVelocity (double time, const double pos[3], double velOut[3])=0
 

Protected Member Functions

Status ComputeTotalCurrent (double time, const double pos[3], double vel[3]) const
 Sums the velocities of all registered current fields into vel[3].
 
double ComputeWakeFactor (double time, const double pos[3], const double currentDirection[3]) const
 Computes the combined multiplicative wake attenuation factor from all registered wake fields.
 
- Protected Member Functions inherited from marenv::Environment
 Environment ()=default
 The constructor is protected.
 

Protected Attributes

std::shared_ptr< wave::WaveFieldm_waves
 Wave field model providing wave-induced quantities.
 
std::unordered_map< std::string, std::shared_ptr< current::CurrentField > > m_currentFields
 Registry of current fields indexed by unique identifier; velocities are summed for the total current.
 
std::shared_ptr< seafloor::BathymetryFieldm_depths
 Bathymetry field model providing seafloor geometry and properties.
 
std::unordered_map< std::string, std::shared_ptr< wake::WakeField > > m_wakeFields
 Registry of wake fields indexed by unique identifier.
 

Detailed Description

Defines an environment.

Some methods are at the moment simple stubs.

Constructor & Destructor Documentation

◆ EnvironmentFacade()

marenv::EnvironmentFacade::EnvironmentFacade ( )
inline

Default constructor. Initialises with null/default field implementations:

NullWaveField (no waves), FlatSeafloor (200 m flat bottom). No current fields are registered by default.

Member Function Documentation

◆ AddCurrentField()

void marenv::EnvironmentFacade::AddCurrentField ( const std::string &  id,
std::shared_ptr< current::CurrentField field 
)

Adds a current field with the given identifier. The velocities of all registered current

Parameters
[in]idUnique identifier for this current field.
[in]fieldThe current field to add.

fields are summed to produce the total ambient current.

Exceptions
std::invalid_argumentif a current field with the given id already exists.

◆ AddWakeField()

void marenv::EnvironmentFacade::AddWakeField ( const std::string &  id,
std::shared_ptr< wake::WakeField field 
)

Adds a wake field with the given identifier.

Parameters
[in]idUnique identifier for this wake field.
[in]fieldThe wake field to add.
Exceptions
std::invalid_argumentif a wake field with the given id already exists.

◆ ComputeRayIntersection()

Status marenv::EnvironmentFacade::ComputeRayIntersection ( const double  origin[3],
const double  direction[3],
double &  distanceOut,
double  maxSearchDistance = 100,
double  startSearchDistance = -1,
double  stepSize = 1.0,
double  convergenceTolerance = 0.01 
)
overridevirtual

Returns the distance a ray must travel before intercepting the seafloor.

Parameters
[in]originPosition (x,y,z) of the origin of the ray
[in]directionThe unit direction (x,y,z) of the ray
[out]distanceOutThe distance the beam travelled before reaching the seabed.
[in]maxSearchDistanceThe maximum distance from the origin to search for an intersection.
[in]startSearchDistanceThe distance from the origin to start searching for an intersection (initial guess).
[in]stepSizeThe search step size.
[in]convergenceToleranceThe vertical error tolerance between a computed point on the ray and a point on the seafloor to consider an intersection found.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::Environment.

◆ GetBathymetry()

std::shared_ptr< seafloor::BathymetryField > marenv::EnvironmentFacade::GetBathymetry ( )

Gets the bathymetry to be used.

Returns
Bathymetry to be used.

◆ GetCurrentField()

std::shared_ptr< current::CurrentField > marenv::EnvironmentFacade::GetCurrentField ( const std::string &  id) const

Returns the current field with the given identifier.

Parameters
[in]idIdentifier of the current field.
Returns
Shared pointer to the current field.
Exceptions
std::invalid_argumentif the identifier does not exist.

◆ GetCurrentFieldIds()

std::vector< std::string > marenv::EnvironmentFacade::GetCurrentFieldIds ( ) const

Returns a list of all registered current field identifiers.

Returns
Vector of identifiers.

◆ GetCurrentVelocity()

Status marenv::EnvironmentFacade::GetCurrentVelocity ( double  time,
const double  pos[3],
double *  velOut 
)
override

Returns the water current velocity at a specific position.

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

Includes effects of only currents, not waves.

◆ GetDensity()

Status marenv::EnvironmentFacade::GetDensity ( double  time,
const double  pos[3],
double &  density 
)
overridevirtual

Returns the water density at a specific position

Parameters
[in]timeCurrent simulation time.
[in]posPosition (x,y,z) for which the water current velocity producer is desired.
[out]densityThe water density at given position and time.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::Environment.

◆ GetDynamicPressure()

Status marenv::EnvironmentFacade::GetDynamicPressure ( 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::Environment.

◆ GetParticleAcceleration()

Status marenv::EnvironmentFacade::GetParticleAcceleration ( double  time,
const double  pos[3],
double *  accOut 
)
override

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.

◆ GetParticleVelocity()

Status marenv::EnvironmentFacade::GetParticleVelocity ( double  time,
const double  pos[3],
double *  velOut 
)
override

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.

◆ GetSeaDepth()

Status marenv::EnvironmentFacade::GetSeaDepth ( const double  pos[2],
double &  depthOut 
)
overridevirtual

Returns the sea depth at a specific position.

Parameters
[in]posPosition (x,y) for which sea depth is desired.
[out]depthOutThe sea depth at pos.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::Environment.

◆ GetSubmergence()

Status marenv::EnvironmentFacade::GetSubmergence ( double  time,
const double  pos[3],
double &  submergence 
)
overridevirtual

Calculates the submergence of a specific position.

Parameters
[in]timeTime
[in]posPosition
[out]submergenceThe submergence of the position
Returns
marenv::Status::OK on success. See marenv::Status for other values

Implements marenv::Environment.

◆ GetSurfaceElevation()

Status marenv::EnvironmentFacade::GetSurfaceElevation ( 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::Environment.

◆ GetSurfaceUnitNormal()

Status marenv::EnvironmentFacade::GetSurfaceUnitNormal ( double  time,
const double  pos[2],
double *  unitNormalOut 
)
override

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.

◆ GetTotalPressure()

Status marenv::EnvironmentFacade::GetTotalPressure ( 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.

Includes both dynamic and static pressure.

Implements marenv::Environment.

◆ GetWakeField()

std::shared_ptr< wake::WakeField > marenv::EnvironmentFacade::GetWakeField ( const std::string &  id) const

Returns the wake field with the given identifier.

Parameters
[in]idIdentifier of the wake field.
Returns
Shared pointer to the wake field.
Exceptions
std::invalid_argumentif the identifier does not exist.

◆ GetWakeFieldIds()

std::vector< std::string > marenv::EnvironmentFacade::GetWakeFieldIds ( ) const

Returns a list of all registered wake field identifiers.

Returns
Vector of identifiers.

◆ GetWaves()

std::shared_ptr< wave::WaveField > marenv::EnvironmentFacade::GetWaves ( )

Gets the wave to be used.

Returns
Wave to be used.

◆ HasCurrentField()

bool marenv::EnvironmentFacade::HasCurrentField ( const std::string &  id) const

Returns true if a current field with the given identifier exists.

Parameters
[in]idIdentifier to check.

◆ HasWakeField()

bool marenv::EnvironmentFacade::HasWakeField ( const std::string &  id) const

Returns true if a wake field with the given identifier exists.

Parameters
[in]idIdentifier to check.

◆ PointEnvironmentQuery()

Status marenv::EnvironmentFacade::PointEnvironmentQuery ( double  time,
const double  pos[3],
EnvironmentQuery queryResult 
)
overridevirtual

Calculates multiple properties of the environment in one call.

Parameters
[in]timeSimulation time.
[in]posPosition.
[out]queryResultThe result of the query.
Returns
marenv::Status::OK on success. See marenv::Status for other values.

Implements marenv::Environment.

◆ RemoveCurrentField()

void marenv::EnvironmentFacade::RemoveCurrentField ( const std::string &  id)

Removes the current field with the given identifier.

Parameters
[in]idIdentifier of the current field to remove.
Exceptions
std::invalid_argumentif no current field with the given id exists.

◆ RemoveWakeField()

void marenv::EnvironmentFacade::RemoveWakeField ( const std::string &  id)

Removes the wake field with the given identifier.

Parameters
[in]idIdentifier of the wake field to remove.
Exceptions
std::invalid_argumentif no wake field with the given id exists.

◆ SetBathymetry()

void marenv::EnvironmentFacade::SetBathymetry ( std::shared_ptr< seafloor::BathymetryField bathymetry)

Sets the bathymetry to be used.

Parameters
[in]bathymetryBathymetry to be used.

◆ SetWaves() [1/2]

void marenv::EnvironmentFacade::SetWaves ( const wave::WaveEnergySpectrum::SpectrumParameters params,
wave::WaveTheory  waveTheory,
int  numWaves,
uint32_t  seed 
)

Creates the wave model based on spectrum parameters. Automatically selects between scalar and simd implementations for Airy waves.

Parameters
[in]paramsThe spectrum parameters.
[in]waveTheoryThe wave theory to use.
[in]numWavesThe number of waves to create.
[in]seedThe random seed to use.

◆ SetWaves() [2/2]

void marenv::EnvironmentFacade::SetWaves ( std::shared_ptr< wave::WaveField wave)

Sets the wave to be used.

Parameters
[in]waveWave to be used.

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