FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
CableSurface.h
1#pragma once
2
9#include <fhsim_environment/BodySubmergence.h>
10#include <marenv/EnvironmentFacade.h>
11
12#include <algorithm>
13#include <cmath>
14#include <memory>
15
16namespace cable_surface
17{
18
32template<class Element>
33void SetSurface(marenv::EnvironmentFacade& environment, double maxWaveElevation, double T, const double posA[3], const double posB[3], Element& element)
34{
35 const double halfSize = element.SurfaceHalfSize();
36 const double top = std::min(posA[2], posB[2]) - halfSize; // shallowest point, z down
37 const double bottom = std::max(posA[2], posB[2]) + halfSize;
38 if (top > maxWaveElevation || bottom < -maxWaveElevation) {
39 element.SetSurfaceElevation(0.0, 0.0);
40 return;
41 }
42 double etaA = 0.0, etaB = 0.0;
43 if (environment.GetSurfaceElevation(T, posA, etaA) != marenv::Status::OK)
44 etaA = 0.0;
45 if (environment.GetSurfaceElevation(T, posB, etaB) != marenv::Status::OK)
46 etaB = 0.0;
47 element.SetSurfaceElevation(etaA, etaB);
48}
49
50// The gated surface queries (R66, R67; P-off, MARE-0343) are fhsim_environment's (ENV-0090, MARE-0344).
51using environment::body_submergence::CylinderWetFraction;
52using environment::body_submergence::MeanWaveAcceleration;
53using environment::body_submergence::Submergence;
54using environment::body_submergence::WaveAcceleration;
55using environment::body_submergence::WavesWithElevation;
56
66template<class Element>
67void SetWaveAcceleration(marenv::wave::WaveField* waves, double T, const double posA[3], const double posB[3], Element& element)
68{
69 double mean[3];
70 MeanWaveAcceleration(waves, T, posA, posB, mean);
71 element.SetWaveAcceleration(mean);
72}
73
74} // namespace cable_surface
Definition EnvironmentFacade.h:42
Status GetSurfaceElevation(double time, const double pos[2], double &elevationOut) override
The interface for an representing waves.
Definition WaveField.h:35
@ OK
The value is valid.