4#include <marenv/Environment.h>
5#include <marenv/current/CurrentField.h>
6#include <marenv/seafloor/BathymetryField.h>
7#include <marenv/seafloor/FlatSeafloor.h>
8#include <marenv/wake/WakeField.h>
9#include <marenv/wave/NullWaveField.h>
10#include <marenv/wave/WaveEnergySpectrum.h>
11#include <marenv/wave/WaveFactory.h>
12#include <marenv/wave/WaveField.h>
16#include <unordered_map>
38 :
m_waves(std::make_shared<wave::NullWaveField>())
39 ,
m_depths(std::make_shared<seafloor::FlatSeafloor>())
50 void SetWaves(std::shared_ptr<wave::WaveField> wave);
69 void SetBathymetry(std::shared_ptr<seafloor::BathymetryField> bathymetry);
90 void AddCurrentField(
const std::string&
id, std::shared_ptr<current::CurrentField> field);
126 void AddWakeField(
const std::string&
id, std::shared_ptr<wake::WakeField> field);
152 std::shared_ptr<wake::WakeField>
GetWakeField(
const std::string&
id)
const;
193 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;
210 std::unordered_map<std::string, std::shared_ptr<current::CurrentField>>
m_currentFields;
213 std::shared_ptr<seafloor::BathymetryField>
m_depths;
216 std::unordered_map<std::string, std::shared_ptr<wake::WakeField>>
m_wakeFields;
222 double ComputeWakeFactor(
double time,
const double pos[3],
const double currentDirection[3])
const;
Definition EnvironmentFacade.h:29
std::unordered_map< std::string, std::shared_ptr< wake::WakeField > > m_wakeFields
Registry of wake fields indexed by unique identifier.
Definition EnvironmentFacade.h:216
std::shared_ptr< current::CurrentField > GetCurrentField(const std::string &id) const
Status GetSurfaceElevation(double time, const double pos[2], double &elevationOut) override
EnvironmentFacade()
Definition EnvironmentFacade.h:37
std::shared_ptr< wake::WakeField > GetWakeField(const std::string &id) const
std::vector< std::string > GetWakeFieldIds() const
Status GetDensity(double time, const double pos[3], double &density) override
Status ComputeTotalCurrent(double time, const double pos[3], double vel[3]) const
Sums the velocities of all registered current fields into vel[3].
bool HasCurrentField(const std::string &id) const
std::shared_ptr< wave::WaveField > m_waves
Wave field model providing wave-induced quantities.
Definition EnvironmentFacade.h:207
Status GetParticleAcceleration(double time, const double pos[3], double *accOut) 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 GetParticleVelocity(double time, const double pos[3], double *velOut) override
Status GetSurfaceUnitNormal(double time, const double pos[2], double *unitNormalOut) override
std::shared_ptr< seafloor::BathymetryField > GetBathymetry()
Status PointEnvironmentQuery(double time, const double pos[3], EnvironmentQuery &queryResult) override
Status GetCurrentVelocity(double time, const double pos[3], double *velOut) override
Status GetDynamicPressure(double time, const double pos[3], double &pressureOut) override
void SetWaves(std::shared_ptr< wave::WaveField > wave)
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.
Definition EnvironmentFacade.h:210
void AddCurrentField(const std::string &id, std::shared_ptr< current::CurrentField > field)
std::shared_ptr< wave::WaveField > GetWaves()
Status GetSubmergence(double time, const double pos[3], double &submergence) override
std::shared_ptr< seafloor::BathymetryField > m_depths
Bathymetry field model providing seafloor geometry and properties.
Definition EnvironmentFacade.h:213
void SetBathymetry(std::shared_ptr< seafloor::BathymetryField > bathymetry)
Status GetTotalPressure(double time, const double pos[3], double &pressureOut) override
std::vector< std::string > GetCurrentFieldIds() const
bool HasWakeField(const std::string &id) const
void RemoveCurrentField(const std::string &id)
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.
void RemoveWakeField(const std::string &id)
void SetWaves(const wave::WaveEnergySpectrum::SpectrumParameters ¶ms, wave::WaveTheory waveTheory, int numWaves, uint32_t seed)
void AddWakeField(const std::string &id, std::shared_ptr< wake::WakeField > field)
Status GetSeaDepth(const double pos[2], double &depthOut) override
Definition Environment.h:20
Status
Definition marenv.h:40
WaveTheory
Definition WaveFactory.h:18
The marenv root namespace.
Definition CumulativeDistribution.h:8
Struct for containing the data for a environment query.
Definition Environment.h:25
The parameters defining a certain wave field.
Definition WaveEnergySpectrum.h:41