FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
ViscousShip.h
1#ifndef CViscousShip_h__
2#define CViscousShip_h__
3
4#include "HelperFunctions.h"
5#include <deque>
6#include <string>
7
8#include <Eigen/Eigen>
9
10#include "HullData/HullData.h"
11namespace Ship{
13 {
14 public :
15 enum EFileType
16 {
17 FILE_TYPE_VERES,
18 FILE_TYPE_WAMIT
19 };
20
22
23 void SetupFromFile( std::string fname, EFileType type, HullData *H);
24
25 void SetHullData( HullData *HD ){ myHullData = HD; }
26 // 0 = ITTC, 1= SeaWay
27 void SetTheoryFormulation( int theory ){ rollDampingTheory = theory;}
28 // amplitude horizon as a fraction of natural period ~B
29 void SetPhiAmplitudeHorizon(double horizon){phiAmplitudeHorizon = horizon;}
30
31
32 void GetViscousAddedMass(double u, double v, double r, Eigen::Matrix3d &Mat) const;
33
34 double GetViscousSurge(double u, double v, double r);
35 double GetViscousSway(double u, double v, double r);
36 double GetViscousYaw(double u, double v, double r);
37
38 double GetViscousRoll(double phiDot, double u = 0);
39 double EddieDamping( double phiDot, double u = 0);
40 double BilgeKeelDamping( double phiDot, double u = 0);
41 double FricitonDamping( double phiDot, double u = 0);
42 double LiftDamping( double phiDot, double u = 0);
43 double SkegDamping( double phiDot, double u = 0);
44
45 double SkegLiftDamping( double phiDot, double u );
46
47 void AddToRollTimeHistory( const double T, double RollAngle, const bool bIsMajorTimeStep );
48 void MakeBildgeKeel( double m_BilgeKeelStartPosition, double m_BilgeKeelEndPosition, double m_BilgeKeelHeight );
49 void MakeSkeg();
50
51 void SetHorizontalDampingBlend(double blendSpeed, double blendFraction=0.5);
52 void SetDpDampingX(double Xu, double Xv, double Xr);
53 void SetDpDampingY(double Yu, double Yv, double Yr);
54 void SetDpDampingN(double Nu, double Nv, double Nr);
55
56 double ManeuverReferenceSpeed() const { return m_maneuverReferenceSpeed; }
57 void ManeuverReferenceSpeed(double val) { m_maneuverReferenceSpeed = val; }
58 protected:
59
60 double deltaWingKP(double A_ratio);
61 double deltaWingKV(double A_ratio);
62 double deltaWingCL(double alfa, double Kp, double Kv);
63
64 double m_maneuverReferenceSpeed;
65 double m_viscousDampingBlender;
66
67 double Yv_man, Yr_man, Yrd_man, Yvd_man;
68 double Nv_man, Nr_man, Nrd_man, Nvd_man;
69 double Xrr_man, Xud_man, Xvr_man, Xvv_man, Xvvvv_man;
70
71 double Xu_dp, Yu_dp, Nu_dp;
72 double Xv_dp, Yv_dp, Nv_dp;
73 double Xr_dp, Yr_dp, Nr_dp;
74
75 int m_bilgeKeelStartSection;
76 int m_bilgeKeelEndSection;
77 double m_startSectionFractionBK;
78 double m_endSectionFractionBK;
79
80 int rollDampingTheory;
81
82 int m_withSkeg;
83 int SkegStartSection;
84 int SkegEndSection;
85 int *SkegStartPoints;
86 int *SkegEndPoints;
87
88 protected:
89 void ReadMainDimensionsVeres( std::string fname );
90 void ReadMainDimensionsWamit( std::string fname );
91 HullData *myHullData;
92
93 double surfaceOfHull;
94 double kinematicViscosity;
95
96 double *SectionalNormalBilgeKeelForce;
97 double *SectionalPressureOnHullFromBilgeKeels;
98 double *SectionalEddieForce;
99 double *bilgeKeelHeight;
100
101 double* Ds;
102 double* Bs;
103 double* H0;
104 double* SigmaS;
105 double* A1;
106 double* A3;
107 double* Ms;
108
109 double Lpp = kNotRead, B = kNotRead, T = kNotRead;
110 double Cb = kNotRead, VCG = kNotRead;
111
112 double Lo,Lr,Kn;
113
114 double* SectionLength;
115 std::deque<double> phi_history;
116 std::deque<double> time_history;
117 double phiAmplitude;
118 double phiAmplitudeTime;
119 double m_rf;
120 double OG;
121 double phiAmplitudeHorizon;
122 int numberOfStations;
123 bool m_skegLift;
124 bool m_hullLift;
125 };
126}
127#endif // CViscousShip_h__
Definition HullData.h:15
Definition ViscousShip.h:13
Simple waypoint object.
Definition CableAttach.h:16
constexpr double kNotRead
The value of a dimension that has not been read from a file yet.
Definition HelperFunctions.h:16