FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetCdfSeafloor.h
1#pragma once
2
3#include "fhsim_environment/EnvironmentProvider.h"
4
5#include <fhsim/simobject/SimObject.h>
6#include <marenv/seafloor/BathymetryField.h>
7#include <memory>
8#include <string>
9#include <vector>
10
11#include "util/NetCDFParser.h"
12
13namespace environmentmodels
14{
15
22{
23public:
28 explicit NetCdfSeafloorBathymetry(const std::string& filename);
30
39 [[nodiscard]] marenv::Status GetDepth(const double pos[2], double& depthOut) override;
40
47 [[nodiscard]] marenv::Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3]) override;
48
55 [[nodiscard]] marenv::Status GetSeabedSigma(const double pos[3], double& sigmaOut) override;
56
63 [[nodiscard]] marenv::Status GetSeabedTau(const double pos[3], double& tauOut) override;
64
71 [[nodiscard]] marenv::Status GetSeabedRho(const double pos[3], double& rhoOut) override;
72
84 [[nodiscard]] marenv::Status ComputeRayIntersection(const double origin[3], const double direction[3],
85 double& distanceOut, double maxSearchDistance, double startSearchDistance,
86 double stepSize, double convergenceTolerance) override;
87
92 const netcdf_sinmod::Grid& GetGrid() const { return m_grid; }
93
98 const double* GetDepthMap() const { return m_depthMap; }
99
104 double GetLengthX() const { return m_length_x; }
105
110 double GetLengthY() const { return m_length_y; }
111
112private:
118 double GetDepthInternal(const double pos[2]) const;
119
120 netcdf_sinmod::Grid m_grid {};
121 double* m_depthMap = nullptr;
122 double m_length_x = 0.0;
123 double m_length_y = 0.0;
124};
125
158class NetCdfSeafloor : public SimObject
159{
160public:
166 NetCdfSeafloor(std::string simObjectName, ISimObjectCreator* creator);
167 ~NetCdfSeafloor() override = default;
168
170 void FinalSetup(const double T, const double* const adX, ISimObjectCreator* creator) override;
171
173 void OdeFcn(const double dT, const double* const adX, double* const adXDot) const override;
174
175#ifdef FH_VISUALIZATION
177 void RenderInit(Ogre::Root* ogreRoot, ISimObjectCreator* creator) override;
178
180 void RenderUpdate(double T, const double* X) override;
181#endif
182
183private:
184 std::string m_filename;
185 std::shared_ptr<NetCdfSeafloorBathymetry> m_bathymetry;
186 environment::EnvironmentProvider* m_pEnvironment = nullptr;
187
188#ifdef FH_VISUALIZATION
189 Ogre::SceneNode* m_pSeabedNode = nullptr;
190#endif
191};
192
193} // namespace environmentmodels
Definition NetCdfSeafloor.h:22
const netcdf_sinmod::Grid & GetGrid() const
Definition NetCdfSeafloor.h:92
const double * GetDepthMap() const
Definition NetCdfSeafloor.h:98
marenv::Status GetSeabedSigma(const double pos[3], double &sigmaOut) override
marenv::Status GetSeabedTau(const double pos[3], double &tauOut) override
marenv::Status ComputeRayIntersection(const double origin[3], const double direction[3], double &distanceOut, double maxSearchDistance, double startSearchDistance, double stepSize, double convergenceTolerance) override
marenv::Status GetSeabedRho(const double pos[3], double &rhoOut) override
marenv::Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3]) override
NetCdfSeafloorBathymetry(const std::string &filename)
double GetLengthX() const
Definition NetCdfSeafloor.h:104
marenv::Status GetDepth(const double pos[2], double &depthOut) override
double GetLengthY() const
Definition NetCdfSeafloor.h:110
Definition NetCdfSeafloor.h:159
void FinalSetup(const double T, const double *const adX, ISimObjectCreator *creator) override
Register bathymetry with Environment.
NetCdfSeafloor(std::string simObjectName, ISimObjectCreator *creator)
void OdeFcn(const double dT, const double *const adX, double *const adXDot) const override
ODE function (no-op for static bathymetry).
Definition BathymetryField.h:24
Status
Definition marenv.h:40
Environment SimObjects.
Definition Environment.h:25
Grid dimensions structure.
Definition NetCDFParser.h:23