FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
RBCEngine.h
1
4//
12
13#ifndef CRBCENGINE_H
14#define CRBCENGINE_H
15
16
17
18//Class definition
20{
21public:
23 RBCEngine(int nofBarElements,
24 double barMass,
25 double length,
26 double omegaNL,
27 double omegaN,
28 double zetaNL,
29 double zetaN,
30 bool fixedFixed,
31 double kei,
32 double ked,
33 double kep
34 );
37
38 // Member functions
39 // GetInitialStates is to be called before calling StateUpdate,
40 // GetAccelerations, GetEndForces, GetNodePositions, or
41 // GetNodeVelocities
42 bool GetInitialStates(const double * const posA,
43 const double * const posB,
44 const double * const velA,
45 const double * const velB,
46 double * vecB,
47 double * vecR,
48 double * vecBdot,
49 double * vecRdot,
50 double * endNodeSum
51 );
54 bool StateUpdate(const double * const posA,
55 const double * const posB,
56 const double * const velA,
57 const double * const velB,
58 const double * const vecB,
59 const double * const vecR,
60 const double * const vecBdot,
61 const double * const vecRdot,
62 const double * const endNodeSum,
63 double *addedMass,
64 double *nodeForces,
65 const double dT
66 );
68 bool GetAccelerations(double *dotDot, double *rDotDot);
69 bool GetEndForces(double *forceA, double *forceB);
70 bool GetNodePositions(double *nodePosition);
71 bool GetNodeVelocities(double *nodeVelocities);
72 bool GetEndNodeSum(double *endNodeSum);
73
75 bool IsInitialised() const { return m_initialised; }
76
80 struct History
81 {
82 double tau1ep[3];
83 double endNodeSum[3];
84 };
85 History SaveHistory() const;
86 void RestoreHistory(const History& history);
87 private:
88 // parameters gained from the constructor
89 int m_NofBarElements;
90 double m_barMass;
91 double m_length;
92
93 double m_omegaNL;
94 double m_omegaN;
95 double m_zetaNL;
96 double m_zetaN;
97 double m_kei;
98 double m_ked;
99 double m_kep;
100
101 bool m_fixedFixed;
102
103 //
104 const double m_g;
105
106 // internally needed storage needed for Get functions
107 double *m_dotDot;
108 double *m_rDotDot;
109 double *m_forceA;
110 double *m_forceB;
111 double *m_nodePositions;
112 double *m_nodeVelocities;
113 double *m_endNodeSum;
114
115 // internally needed storage needed for various book-keeping
116 bool m_dataUptoDate;
117 bool m_initialised;
118
119 double m_tau1ep[3]; //acceleration from the last element in fix-fix case
120
121 double *m_f_a;
122 double *m_f_b;
123
124 double *m_tau1_x;
125 double *m_tau1_y;
126 double *m_tau1_z;
127 double *m_tau2_x;
128 double *m_tau2_y;
129 double *m_tau2_z;
130
131 double *m_lambda_x;
132 double *m_lambda_y;
133 double *m_lambda_z;
134
135 double *m_Wn1c;
136 double *m_Wn1cT;
137 double *m_Pn1c;
138 double *m_Wn1caT;
139 double *m_Wn1cbT;
140 double *m_invertN1c;
141
142 double m_totalSumD[3];
143
144 // private member functions
145 bool CalcBarForces(double *nodeForces);
146 bool CalcTau(const double * const vecB,
147 const double * const vecBdot);
148 bool CalcLambda(const double * const posA,
149 const double * const velA,
150 const double * const vecB,
151 const double * const vecBdot,
152 const double * const vecR,
153 const double * const vecRdot);
154
155 bool CalcAcc(const double * const posB,
156 const double * const velB,
157 const double * const vecB,
158 const double * const vecBdot,
159 const double * const vecR,
160 const double * const vecRdot,
161 const double * const endNodeSum,
162 const double dT);
163 bool CalcEndForces();
164 bool CalcNodePositions(const double * const vecB,
165 const double * const vecR);
166 bool CalcNodeVelocities(const double * const vecBdot,
167 const double * const vecRdot);
168
169 void MatrixCalcAcc(const double *tau1, const double *tau2,
170 const double *lambda, double **accR,
171 double **accB);
172 void MatrixCalcLambda(const double *tau1, const double *tau2,
173 const double * barConstraint,
174 const double *ndotdot,
175 const double *invert,
176 double **lambda);
177 void CreateMatrises(void);
178};
179
180
181#endif
Class containing a Rigid Bar Cable (RBC) calculation engine.
Definition RBCEngine.h:20
~RBCEngine()
The destructor cleans up dynamically allocated memory.
bool GetInitialStates(const double *const posA, const double *const posB, const double *const velA, const double *const velB, double *vecB, double *vecR, double *vecBdot, double *vecRdot, double *endNodeSum)
bool StateUpdate(const double *const posA, const double *const posB, const double *const velA, const double *const velB, const double *const vecB, const double *const vecR, const double *const vecBdot, const double *const vecRdot, const double *const endNodeSum, double *addedMass, double *nodeForces, const double dT)
bool GetNodePositions(double *nodePosition)
(dim: 3(N+1))
bool GetNodeVelocities(double *nodeVelocities)
(dim: 3(N+1))
bool IsInitialised() const
True once GetInitialStates has run. Before that StateUpdate computes nothing.
Definition RBCEngine.h:75
RBCEngine(int nofBarElements, double barMass, double length, double omegaNL, double omegaN, double zetaNL, double zetaN, bool fixedFixed, double kei, double ked, double kep)
The constructor.
bool GetEndForces(double *forceA, double *forceB)
(dim: 3)
bool GetAccelerations(double *dotDot, double *rDotDot)
Get functions are based on the last StateUpdate call.
bool GetEndNodeSum(double *endNodeSum)
(dim: 3)
Definition RBCEngine.h:81