Marine systems simulation
CRFShell.h
1
11
12#ifndef CRFShell_H
13#define CRFShell_H
14
16#include <string>
17#include <Eigen/Eigen>
18
19#include "SimObject.h"
20#include <CIntegratorOptions.h>
21#include "CEnvironment.h"
22#include "sfh/constants.h"
23
24#ifdef FH_VISUALIZATION
25#include "sfh/ogre/C3DLine.h"
26#endif
27
28namespace membrane {
29
30/*
31typedef Eigen::Matrix<double,6,6> mat66;
32typedef Eigen::Matrix<double,6,1> vect6;
33typedef Eigen::Matrix<double,3,3> mat33;
34typedef Eigen::Matrix<double,3,6> mat36;
35typedef Eigen::Matrix<double,6,3> mat63;
36typedef Eigen::Matrix<double,3,1> vect3;
37*/
38
39class CRFShell : public SimObject
40{
41public:
42 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
43
44 CRFShell(std::string sSimObjectName, ISimObjectCreator* pCreator);
45 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const pCreator);
46 virtual ~CRFShell();
47
48#ifdef FH_VISUALIZATION
50 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
51
53 virtual void RenderUpdate(const double dT, const double* const adX);
54
56 void DrawBody(Ogre::SceneNode* renderNode, Ogre::SceneManager* sceneMgr);
57#endif
58
68 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot, const bool bIsMajorTimeStep);
69
70 virtual int HHTAlpha(const double dT, const double* const adX, const double TS, const double TI, const double Alpha, const int SubTS);
71 virtual void FEPlot(const double dT, const double* const adX);
72
73protected:
75 ISignalPort* m_pInForce_B;
77 int* m_TopConnectNode;
78 ISignalPort** m_TopInPos;
79 ISignalPort** m_TopInVel;
80 int m_BotConnectNum;
81 int* m_BotConnectNode;
82 ISignalPort** m_BotInForce;
83 ISignalPort* m_BotInForceM;
84 int m_BotNode;
85
87 virtual const double* VolumeCL(const double dT, const double* const adX);
88 virtual const double* DragCOE(const double dT, const double* const adX);
89 virtual const double* StressMX(const double dT, const double* const adX);
90
91 double* m_TopOutForce;
92 virtual const double* TopOutForce(const double dT, const double* const adX, int iTop);
93 double* m_BotOutPos;
94 double* m_BotOutVel;
95 virtual const double* BotOutPos(const double dT, const double* const adX, int iBot);
96 virtual const double* BotOutVel(const double dT, const double* const adX, int iBot);
97 double m_BotOutPosM[3];
98 double m_BotOutVelM[3];
99 virtual const double* BotOutPosM(const double dT, const double* const adX);
100 virtual const double* BotOutVelM(const double dT, const double* const adX);
101
102 // ShapeTBD =============================
103 virtual const double* OutLayerDir(const double dT, const double* const adX, int iLay);
104 virtual const double* OutLayerFloVel(const double dT, const double* const adX, int iLay);
105 virtual const double* OutLayerEleVel(const double dT, const double* const adX, int iLay);
106 virtual const double* OutLayerRelVel(const double dT, const double* const adX, int iLay);
107 // ShapeTBD =============================
108
110 int m_IStatePos;
111 int m_IStateVel;
112 int m_IStateVol;
113
116
117 int m_Nodes;
118 int m_Triangles;
119 double m_MeshSize;
120
121 double m_Loc[3];
122 double m_Dim[4];
123 string m_Shape;
124 double m_Filling[2];
125 double m_dPress[10];
126 double m_rPress[2];
127
128 double m_AddM;
129 double* m_B2G;
130 double m_Damp[2];
131 double m_Drag;
132 double m_StrDamp[2];
133
134 double m_Thickness;
135 double m_Density;
136 double m_Youngs;
137 double m_Poissons;
138 double m_Yield;
139 double m_CArea;
140 double m_Volume[8];
141 double m_Mass;
142 double m_MStrain[6];
143 double m_MStress[9];
144
145 double m_Indt;
146
147 Eigen::Matrix<double,3,3> m_D;
148
149 bool m_Bending;
150 int* m_TI;
151 int* m_TPI;
152 double* m_NodeM;
153 double* m_NodeMR;
154 double* m_NodeB;
155 double* m_NodeB2;
156 double* m_TC;
157 double* m_TPC;
158 double* m_TArea;
159 Eigen::Matrix<double,3,1>* m_N;
160 Eigen::Matrix<double,3,6>* m_B;
161 Eigen::Matrix<double,6,3>* m_Bt;
162 Eigen::Matrix<double,6,6>* m_K;
163 Eigen::Matrix<double,6,6>* m_PK;
164 Eigen::Matrix<double,3,1>* m_Strain;
165 Eigen::Matrix<double,3,1>* m_Stress;
166 double* m_VMS;
167 double* m_VMSB;
168 double* m_RAngle;
169 //Eigen::Matrix<double,6,6>* m_KA; /// Mass matrix of the triangles.
170 Eigen::Matrix<double,3,3>* m_RG2L;
171 Eigen::Matrix<double,3,3>* m_RL2G;
172 Eigen::Matrix<double,3,1>* m_OL;
173 Eigen::Matrix<double,3,3> m_PD;
174 Eigen::Matrix<double,3,6>* m_PB;
175 int m_IC;
176 int m_BC;
177
178 double m_BendR;
179 double m_VolR[3];
180 int m_ItM;
181 std::string m_OutFolder;
182
183 CIntegratorOptions* m_Integrator;
184 int m_Iteration;
185 double m_RelTol;
186 double m_TS;
187 double m_Alpha;
188 double m_Beta;
189 double m_Gamma;
190 double* m_NodeP0;
191 double* m_NodeP;
192 double* m_NodeV0;
193 double* m_NodeV;
194 double* m_NodeA0;
195 double* m_NodeA;
196 double* m_NodeF0;
197 double* m_NodeF;
198 double* m_NodeD;
199 double m_TS_s;
200 double* m_NodeP_s;
201 double* m_NodeV_s;
202 double* m_NodeA_s;
203 double* m_NodeF_s;
204 int m_TPlot;
205
206 double m_EOpenA;
207 double m_Omg[2];
208 double m_OmgDot;
209 double m_Vol;
210 double m_VolDot;
211
212 double m_NetEK[2];
213
214 // ShapeTBD =============================
215 double m_DragCoeff[2];
216 double m_Solidity;
219 int m_MeshNum[3];
220 double m_InitialPos[3];
221
228
229 double m_MorisonCM[2];
230
232 double m_ContactDis;
233 ISignalPort* m_ContactPoint;
234 ISignalPort** m_ContactEdge;
235 double m_ContactForce[3];
236 virtual const double* OutContactForce(const double dT, const double* const adX);
237 // ShapeTBD =============================
238
239 int m_TNlgeom;
240 Eigen::Matrix<double,6,1>* m_FiNlgeom;
241 Eigen::Matrix<double,6,1>* m_FoNlgeom;
242
243#ifdef FH_VISUALIZATION
244 string m_Material;
245 vector<Ogre::SceneNode*> m_RenderNodes;
246 Ogre::SceneManager* m_SceneMgr;
247 vector<Ogre::ManualObject*> m_Manual;
248
249 int m_RenderType;
250 C3DLine* m_3DLine;
251 C3DLine* m_3DLineTri;
252 double m_Color[4];
253 bool m_RenderStress;
254#endif
255
256};
257
258};
259#endif
260
Definition: CEnvironment.h:10
double m_Solidity
Drag coefficients in normal [0] and tangential [1] directions.
Definition: CRFShell.h:216
double m_ContactStiff
Morison mass coefficients.
Definition: CRFShell.h:231
double m_Poissons
Elastic modulus of the membrane elements [N/m^2].
Definition: CRFShell.h:120
double * m_NodeB2
Node damping matrix.
Definition: CRFShell.h:138
double m_InitialPos[3]
Number of meshes on each layer [0], number of layers [1] and number of bottom node [2] (0 or 1)
Definition: CRFShell.h:220
double m_Yield
Poisson's ratio of the membrane elements [#].
Definition: CRFShell.h:121
int * m_TI
Boolean. True if bending stiffness is considered.
Definition: CRFShell.h:133
double * m_NodeB
Node mass matrix (relative).
Definition: CRFShell.h:137
double m_Damp[2]
Buoyancy-gravity [N].
Definition: CRFShell.h:113
Eigen::Matrix< double, 3, 1 > * m_Stress
Strain matrix of the triangles.
Definition: CRFShell.h:148
double m_MStrain[6]
Mass of the structure [kg].
Definition: CRFShell.h:125
virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep)
virtual const double * OutLayerFloVel(const double dT, const double *const adX, int iLay)
Output layer direction.
double m_Youngs
Density of the membrane elements [kg/m^3].
Definition: CRFShell.h:119
double * m_OutLayerRelVel
Output element velocity.
Definition: CRFShell.h:227
double m_AddM
Restoring pressure.
Definition: CRFShell.h:111
double * m_NodeMR
Node mass matrix.
Definition: CRFShell.h:136
double m_VolR[3]
Bending restriction. minus: no; plus: restricted to m_BendR*m_Yield;.
Definition: CRFShell.h:162
int * m_TPI
Index of the triangle nodes in Node matrix.
Definition: CRFShell.h:134
double m_CArea
Yield strength of the membrane elements [N/m^2].
Definition: CRFShell.h:122
double * m_NodeA_s
Node velocity matrix (substep).
Definition: CRFShell.h:192
double * m_NodeV0
Node position matrix (i+1).
Definition: CRFShell.h:182
Eigen::Matrix< double, 3, 3 > m_D
Initial time step.
Definition: CRFShell.h:130
double * m_NodeA0
Node velocity matrix (i+1).
Definition: CRFShell.h:184
double * m_VMSB
von Mises stress of the triangles.
Definition: CRFShell.h:150
Eigen::Matrix< double, 3, 1 > * m_Strain
Bending stiffness matrix of the triangles.
Definition: CRFShell.h:147
double m_Vol
Time derivative of outflow vertical velocity.
Definition: CRFShell.h:199
double m_BendR
Boundary condition. 0: free or simply supported; 1: clamped.
Definition: CRFShell.h:161
bool m_Bending
Material matrix.
Definition: CRFShell.h:132
double * m_NodeF_s
Node acceleration matrix (substep).
Definition: CRFShell.h:193
double m_EOpenA
Plot time step.
Definition: CRFShell.h:196
int m_Iteration
Output folder.
Definition: CRFShell.h:167
Eigen::Matrix< double, 3, 6 > * m_PB
Material matrix (bending).
Definition: CRFShell.h:157
Eigen::Matrix< double, 6, 3 > * m_Bt
Shape matrix of the triangles.
Definition: CRFShell.h:144
virtual const double * OutLayerEleVel(const double dT, const double *const adX, int iLay)
Output flow velocity.
virtual const double * OutLayerRelVel(const double dT, const double *const adX, int iLay)
Output element velocity.
double m_VolDot
Volume state.
Definition: CRFShell.h:200
Eigen::Matrix< double, 3, 1 > * m_OL
Rotation matrix of the triangles (original).
Definition: CRFShell.h:155
double m_Mass
Volume of a closed structure [m^3].
Definition: CRFShell.h:124
double m_Drag
Damping coefficient [#].
Definition: CRFShell.h:114
double * m_TC
Node damping matrix (quadratic).
Definition: CRFShell.h:139
double * m_NodeF0
Node acceleration matrix (i+1).
Definition: CRFShell.h:186
Eigen::Matrix< double, 6, 6 > * m_K
Transpose Shape matrix of the triangles.
Definition: CRFShell.h:145
virtual const double * VolumeCL(const double dT, const double *const adX)
Index of the bottom node.
double m_StrDamp[2]
Drag coefficient [#].
Definition: CRFShell.h:115
double * m_RAngle
von Mises stress of the triangles (bending).
Definition: CRFShell.h:151
double m_TS_s
Node incremental displacement matrix.
Definition: CRFShell.h:189
double m_Gamma
Beta parameter in the HHT-alpha time integration method.
Definition: CRFShell.h:179
Eigen::Matrix< double, 6, 1 > * m_FiNlgeom
Time step to update geometric nonlinearity.
Definition: CRFShell.h:205
double m_MStress[9]
Maximum and mean strain.
Definition: CRFShell.h:126
double * m_NodeP0
Gamma parameter in the HHT-alpha time integration method.
Definition: CRFShell.h:180
double * m_TArea
Initial local locations of the surrounding nodes (wl,wm,wn).
Definition: CRFShell.h:141
double m_TS
Relative tolerance to stop iteration.
Definition: CRFShell.h:186
double m_FlowReduce
Solidity for net.
Definition: CRFShell.h:217
double m_NetEK[2]
Time derivative of volume state.
Definition: CRFShell.h:202
CIntegratorOptions * m_Integrator
Output folder.
Definition: CRFShell.h:183
bool m_OutLayerData
Initial position.
Definition: CRFShell.h:222
double m_Thickness
Structural damping coefficients [1/(rad/s)]. Frequency dependent.
Definition: CRFShell.h:117
double * m_TPC
Initial local locations of the triangle nodes.
Definition: CRFShell.h:140
Eigen::Matrix< double, 3, 1 > * m_N
Initial area of the element.
Definition: CRFShell.h:142
int m_OutLayerNum
Output layer data or not.
Definition: CRFShell.h:223
double * m_B2G
Added Mass coefficient [#].
Definition: CRFShell.h:112
double * m_NodeD
Node force matrix (i+1).
Definition: CRFShell.h:188
double m_OmgDot
Outflow vertical velocity.
Definition: CRFShell.h:198
double * m_OutLayerDir
Output layer number.
Definition: CRFShell.h:224
double m_Omg[2]
Efficient openning area.
Definition: CRFShell.h:197
double * m_NodeF
Node force matrix (i).
Definition: CRFShell.h:187
int m_IStatePos
States.
Definition: CRFShell.h:93
double m_RelTol
Maximum number of iteration.
Definition: CRFShell.h:168
int m_TPlot
Node force matrix (substep).
Definition: CRFShell.h:194
int m_IC
Stress matrix of the triangles (bending).
Definition: CRFShell.h:158
int m_Triangles
Number of nodes [#].
Definition: CRFShell.h:101
double * m_NodeA
Node acceleration matrix (i).
Definition: CRFShell.h:185
int m_TNlgeom
Equivilent net stiffness.
Definition: CRFShell.h:204
double * m_OutLayerFloVel
Output layer direction.
Definition: CRFShell.h:225
int m_IStateVel
Index of the global position in the state vector.
Definition: CRFShell.h:94
Eigen::Matrix< double, 3, 3 > * m_RL2G
Rotation matrix of the triangles (original).
Definition: CRFShell.h:154
int m_BotNode
A pointer to the input force (bottom).
Definition: CRFShell.h:74
int m_BC
Initial condition. 0: no; 1: yes.
Definition: CRFShell.h:159
int m_MeshNum[3]
Caculate volume or not.
Definition: CRFShell.h:219
double m_Volume[8]
Cross area of a closed structure [m^2].
Definition: CRFShell.h:123
double m_MorisonCM[2]
Output relative velocity.
Definition: CRFShell.h:229
double m_Dim[4]
NED location [m].
Definition: CRFShell.h:105
std::string m_OutFolder
Maximum iterations.
Definition: CRFShell.h:164
Eigen::Matrix< double, 3, 6 > * m_B
Normal matrix of the triangles.
Definition: CRFShell.h:143
double m_Alpha
Integration time step.
Definition: CRFShell.h:177
Eigen::Matrix< double, 6, 6 > * m_PK
Membrane stiffness matrix of the triangles.
Definition: CRFShell.h:146
int m_Nodes
Pointer to DeepSeaGravityWaves -> CEnvironment.
Definition: CRFShell.h:100
CEnvironment * m_Environment
Index of the volume in the state vector.
Definition: CRFShell.h:98
ISignalPort * m_pInForce_B
Input ports.
Definition: CRFShell.h:65
double * m_VMS
Stress matrix of the triangles.
Definition: CRFShell.h:149
bool m_CalVolume
Flow reduction factor.
Definition: CRFShell.h:218
int m_ItM
Volume restriction. minus: no; plus: reduced iteration when m_Vol<m_VolR*m_Volume[0];.
Definition: CRFShell.h:163
double m_dPress[10]
Filling percentage.
Definition: CRFShell.h:108
double m_DragCoeff[2]
Equivilent net stiffness.
Definition: CRFShell.h:215
double * m_NodeM
Index of the triangles and nodes in the patch surrounding a triangle (0/1,b,c,d,l,...
Definition: CRFShell.h:135
double * m_NodeV_s
Node position matrix (substep).
Definition: CRFShell.h:191
double m_MeshSize
Number of triangles [#].
Definition: CRFShell.h:102
int m_TopConnectNum
A pointer to the input force (bottom).
Definition: CRFShell.h:66
double m_Filling[2]
Shape.
Definition: CRFShell.h:107
double * m_NodeP
Node position matrix (i).
Definition: CRFShell.h:181
double * m_OutLayerEleVel
Output flow velocity.
Definition: CRFShell.h:226
Eigen::Matrix< double, 6, 1 > * m_FoNlgeom
Initial in-plane forces.
Definition: CRFShell.h:206
Eigen::Matrix< double, 3, 3 > * m_RG2L
Radius angle of the triangles.
Definition: CRFShell.h:153
double * m_NodeV
Node velocity matrix (i).
Definition: CRFShell.h:183
int m_IStateVol
Index of the global velocity in the state vector.
Definition: CRFShell.h:95
double m_rPress[2]
Drainage pressure.
Definition: CRFShell.h:109
double m_Density
Thickness of the membrane elements [m].
Definition: CRFShell.h:118
string m_Shape
NED dimension [m].
Definition: CRFShell.h:106
double m_Indt
Maximum and mean stress.
Definition: CRFShell.h:128
double m_Beta
Alpha parameter in the HHT-alpha time integration method.
Definition: CRFShell.h:178
Eigen::Matrix< double, 3, 3 > m_PD
Location of the triangles (original).
Definition: CRFShell.h:156
double m_Loc[3]
Mesh size [m].
Definition: CRFShell.h:104
double * m_NodeP_s
Integration substep.
Definition: CRFShell.h:190
Includes.
Definition: CConstantStrainTriangle.h:22