Marine systems simulation
Loading...
Searching...
No Matches
NetCdfSeafloor.h
1#pragma once
2
3#include "SimObject.h"
4#include "fhsim_environment/EnvironmentProvider.h"
5
6#include <marenv/seafloor/BathymetryField.h>
7#include <memory>
8#include <string>
9#include <vector>
10
11#ifdef NETCDFCPP_AVAILABLE
12# include "util/NetCDFParser.h"
13#endif
14
15namespace environmentmodels
16{
17
24{
25public:
30 explicit NetCdfSeafloorBathymetry(const std::string& filename);
32
41 [[nodiscard]] marenv::Status GetDepth(const double pos[2], double& depthOut) override;
42
49 [[nodiscard]] marenv::Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3]) override;
50
57 [[nodiscard]] marenv::Status GetSeabedSigma(const double pos[3], double& sigmaOut) override;
58
65 [[nodiscard]] marenv::Status GetSeabedTau(const double pos[3], double& tauOut) override;
66
73 [[nodiscard]] marenv::Status GetSeabedRho(const double pos[3], double& rhoOut) override;
74
86 [[nodiscard]] marenv::Status ComputeRayIntersection(const double origin[3], const double direction[3],
87 double& distanceOut, double maxSearchDistance, double startSearchDistance,
88 double stepSize, double convergenceTolerance) override;
89
90#ifdef NETCDFCPP_AVAILABLE
97 const netcdf_sinmod::Grid& GetGrid() const { return m_grid; }
98
105 const double* GetDepthMap() const { return m_depthMap; }
106
113 double GetLengthX() const { return m_length_x; }
114
121 double GetLengthY() const { return m_length_y; }
122#endif
123
124private:
130 double GetDepthInternal(const double pos[2]) const;
131
132#ifdef NETCDFCPP_AVAILABLE
133 netcdf_sinmod::Grid m_grid {};
134 double* m_depthMap = nullptr;
135 double m_length_x = 0.0;
136 double m_length_y = 0.0;
137#endif
138};
139
171class NetCdfSeafloor : public SimObject
172{
173public:
179 NetCdfSeafloor(std::string simObjectName, ISimObjectCreator* creator);
180 ~NetCdfSeafloor() override = default;
181
183 void FinalSetup(const double T, const double* const adX, ISimObjectCreator* creator) override;
184
186 void OdeFcn(const double dT, const double* const adX, double* const adXDot, const bool bIsMajorTimeStep) override;
187
188#ifdef FH_VISUALIZATION
190 void RenderInit(Ogre::Root* ogreRoot, ISimObjectCreator* creator) override;
191
193 void RenderUpdate(double T, const double* X) override;
194#endif
195
196private:
197 std::string m_filename;
198 std::shared_ptr<NetCdfSeafloorBathymetry> m_bathymetry;
199 environment::EnvironmentProvider* m_pEnvironment = nullptr;
200
201#ifdef FH_VISUALIZATION
202 Ogre::SceneNode* m_pSeabedNode = nullptr;
203#endif
204};
205
206} // namespace environmentmodels
Definition NetCdfSeafloor.h:24
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)
marenv::Status GetDepth(const double pos[2], double &depthOut) override
Definition NetCdfSeafloor.h:172
void FinalSetup(const double T, const double *const adX, ISimObjectCreator *creator) override
Register bathymetry with Environment.
void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep) override
ODE function (no-op for static bathymetry).
NetCdfSeafloor(std::string simObjectName, ISimObjectCreator *creator)
Definition BathymetryField.h:24
Status
Definition marenv.h:40
Environment SimObjects.
Definition Environment.h:24
Grid dimensions structure.
Definition NetCDFParser.h:23