Marine systems simulation
DeepSeaGravityWaves.h
1
126#pragma once
127
128#include <CEnvironment.h>
129#include <vector>
130using std::vector;
131using std::copy;
132
133namespace NetCDFsinmod
134{
135 class Parser;
136 struct Grid;
137}
138
139class LinearWaveTheory;
140
141
142#ifdef FH_VISUALIZATION
143 #include <CFhCamera.h>
144 #include "sfh/ogre/C3DLine.h"
145#endif
146
148{
149public:
162 DeepSeaGravityWaves(string simObjectName, ISimObjectCreator* creator);
164
173 double GetSurfaceElevation (const double dT, const double* const dX, const double adPos[2]);
182 void GetSurfaceUnitNormal (const double dT, const double* const dX, const double adPos[2], double *adUnitNormalOut);
193 void GetParticleVelocity (const double dT, const double* const dX, const double adPos[3], double *adVelOut);
194
205 void GetParticleAcceleration (const double dT, const double* const dX, const double adPos[3], double *adAccOut);
214 double GetPressure (const double dT, const double* const dX, const double adPos[3]);
225 double GetTotalPressure (const double dT, const double* const dX, const double adPos[3]);
232 double GetSeadepth (const double adPos[2]);
239 double GetSeabedSigma (const double adPos[3]);
246 double GetSeabedTau (const double adPos[3]);
255 double GetSeabedRho (const double adPos[3]);
273 void GetWaveFrequencies (std::vector<double> & vec);
282 void GetWaveAmplitudes (std::vector<double> & vec);
291 void GetWavePhaseAngles (std::vector<double> & vec);
300 void GetWaveDirections (std::vector<double> & vec);
309 void GetWaveNumbers (std::vector<double> & vec);
320 void GetCurrentVelocity (const double dT, const double* const dX, const double adPos[3], double *adVelOut);
331 void GetCurrentProducerVelocity (const double dT, const double* const dX, const double adPos[3], double *adVelOut);
332
340 double GetDensity(const double T, const double *const X, const double pos[3]);
341
342
343 EnvironmentQuery PointEnvironmentQuery(const double T, const double* const X, const double Position[3]);
344 void PointEnvironmentQuery2(const double T, const double* const X, const double Position[3], EnvironmentQuery &q);
345
346 #ifdef FH_VISUALIZATION
355 void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
364 void RenderUpdate(const double T, const double* const X);
365 #endif
366
367protected:
368 LinearWaveTheory* m_WaveTheory;
370 string m_spectrum;
371 int m_MaxNumWaves;
372 int m_NumWaves;
373 int m_NumWaves4Multiplier;
374
375 vector<double> m_adWaveFrequency;
376 vector<double> m_adWaveAmplitude;
377 vector<double> m_adWaveDirection;
378 vector<double> m_adPhaseAngle;
379 vector<double> m_adWaveNumber;
380
382 double* m_depthMap;
383 ICurrentField* m_globalCurrentField;
384 vector<ICurrentField*> m_registeredCurrentFields;
385 double m_length_x;
386 double m_length_y;
387
388 #ifdef FH_VISUALIZATION
389 string m_sMaterial;
390 Ogre::SceneNode* m_pWorldSceneNode;
391 Ogre::SceneNode* m_RenderOceanNode;
392 Ogre::ManualObject* m_pOceanRenderObj;
393 Ogre::Light* m_pLight;
394 C3DLine* m_lines;
395 Ogre::ManualObject** m_depthPolygons;
396 Ogre::SceneNode** m_depthPolygonsNodes;
397 CFhCamera* m_FhCamera;
398 Ogre::Camera* m_OgreCamera;
399 #endif
400private:
401
402
403
404};
Definition: CEnvironment.h:10
Definition: DeepSeaGravityWaves.h:148
DeepSeaGravityWaves(string simObjectName, ISimObjectCreator *creator)
Reads parameters, registers states, input/output ports and shared resources.
vector< double > m_adWaveFrequency
For simulation without visualization. Is multiplied with 4 to get the total number of waves in a sea ...
Definition: DeepSeaGravityWaves.h:375
vector< double > m_adWaveAmplitude
Array holding wave frequencies for all waves.
Definition: DeepSeaGravityWaves.h:376
double GetSurfaceElevation(const double dT, const double *const dX, const double adPos[2])
Returns the surface elevation at a specific position.
double GetTotalPressure(const double dT, const double *const dX, const double adPos[3])
Returns the total pressure at a specific position.
void GetCurrentVelocity(const double dT, const double *const dX, const double adPos[3], double *adVelOut)
Returns the water current velocity at a specific position.
vector< double > m_adWaveDirection
Array holding wave amplitudes for all waves.
Definition: DeepSeaGravityWaves.h:377
NetCDFsinmod::Grid * m_grid
Array holding wave number for all waves.
Definition: DeepSeaGravityWaves.h:381
double GetSeabedSigma(const double adPos[3])
Returns the sea depth sigma at a specific position.
void GetCurrentProducerVelocity(const double dT, const double *const dX, const double adPos[3], double *adVelOut)
Returns the water current velocity producer at a specific position.
void GetWavePhaseAngles(std::vector< double > &vec)
Returns a vector of all wave phase angles.
string m_waveTheoryName
Enumerator holding the wave theory used.
Definition: DeepSeaGravityWaves.h:369
double GetPressure(const double dT, const double *const dX, const double adPos[3])
Returns the dynamic pressure at a specific position.
void GetWaveAmplitudes(std::vector< double > &vec)
Returns a vector of all wave amplitudes.
void GetWaveFrequencies(std::vector< double > &vec)
Returns a vector of all wave frequencies.
double GetSeabedTau(const double adPos[3])
Returns the sea depth tau at a specific position.
void GetSurfaceUnitNormal(const double dT, const double *const dX, const double adPos[2], double *adUnitNormalOut)
Returns the unit normal vector of the surface at a specific position.
void GetParticleAcceleration(const double dT, const double *const dX, const double adPos[3], double *adAccOut)
Returns the particle acceleration at a specific position.
double GetDensity(const double T, const double *const X, const double pos[3])
Returns the water density at a specific position.
vector< double > m_adWaveNumber
Array holding phase angles for all waves.
Definition: DeepSeaGravityWaves.h:379
void GetWaveDirections(std::vector< double > &vec)
Returns a vector of all wave directions.
void GetParticleVelocity(const double dT, const double *const dX, const double adPos[3], double *adVelOut)
Returns the particle velocity at a specific position.
void GetWaveNumbers(std::vector< double > &vec)
Returns a vector of all wave numbers.
double GetSeabedRho(const double adPos[3])
Returns the density of the seabed at a specific position.
vector< double > m_adPhaseAngle
Array holding wave propagation directions for all waves.
Definition: DeepSeaGravityWaves.h:378
void RegisterCurrentField(ICurrentField *currentField)
Registers an input current field in the environmental representation.
double GetSeadepth(const double adPos[2])
Returns the sea depth at a specific position.
Definition: ICurrentField.h:4
Definition: LinearWaveTheory.h:25
Definition: CEnvironment.h:38
Definition: NetCDFParser.h:7