Marine systems simulation
Loading...
Searching...
No Matches
CNetStructure.h
1#pragma once
2
173//#define CNetStructure_DO_PROFILE
174
175// Includes
176#include <string>
177
178
179#include "SimObject.h"
180#include "EnvironmentProvider.h"
181#include <SeafloorForcesInterface.h>
182#include "sfh/timers/ProfilerWallclock.h"
183#include "sfh/math/math.h"
184
185#include "CNetBottomContactFilter.h"
186#include "CNetStructureSpec.h"
187#include "CNetElement3N.h"
188#include "CNetCableElementSpec.h"
189#include "CNetCableElement.h"
190#include "CNetElementDef.h"
191
192
193#ifdef FH_VISUALIZATION
194 #include "sfh/ogre/NMeshGenerators.h"
195 #include "sfh/ogre/C3DLine.h"
196 #include "CTextRenderer.h"
197#endif
198
199
200//Class definition
201class CNetStructure : public SimObject
202{
203public:
205 CNetStructure(std::string sSimObjectName, ISimObjectCreator *pCreator);
207 virtual ~CNetStructure();
208 virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep);
209 virtual void InitialConditionSetup(const double dT, const double *const adCurrentIC, double *const adUpdatedIC, ISimObjectCreator *const pCreator);
210 virtual void FinalSetup(const double dT, const double *const adX, ISimObjectCreator *const pCreator);
211 const double * outExternalNodeForce(const double dT, const double *const adX, int iExtNode);
212
213#ifdef FH_VISUALIZATION
215 virtual void RenderInit(Ogre::Root *const pOgreRoot, ISimObjectCreator *const pCreator);
217 virtual void RenderUpdate(const double dT, const double *const adX);
218#endif
219 const virtual double * NodePos(const double dT, const double *const adX, int iExtNode);
220 const virtual double * NodeVel(const double dT, const double *const adX, int iExtNode);
221 const virtual double * BottomContact(const double dT, const double *const adX);
222
223 const virtual double * StrainEnergy(const double dT, const double *const adX);
224 const virtual double * VelNorm(const double dT, const double *const adX);
225 double m_velNorm;
226
227 void SetAddedDragPerMPS(double AddedDragPerMPS);
228protected:
229 virtual void CalcStateDerivatives(const double *const adX, double *const adXDot);
230 virtual void AddExternalForces(const double dT, const double *const adX);
231 virtual void AddNetForces(const double dT, const double *const adX);
232 virtual void AddCableForces(const double dT, const double *const adX);
233 virtual double AddNodeBottomForce(const double *const adX, int iNode, double dDiam, double adForceInOut[3]);
234 virtual void AddBottomForces(const double *const adX);
235 virtual void AddInputPorts(ISimObjectCreator *pCreator);
236 virtual void CreateNetPanels(std::vector<const CNetElementDef*> VNetElementDefs, ISimObjectCreator *pCreator);
237 virtual void CreateNetCables(std::vector<const CNetCableElementSpec*> VCableElements, ISimObjectCreator *pCreator);
238 virtual void CreateDataStructures();
239 virtual void CreateOutputPorts(ISimObjectCreator *pCreator);
240 VSPairStrInt CreateExternalNodeMap( std::string sTag, int* piUsed, CNetStructureSpec & NetSpec, ISimObjectCreator *pCreator);
241 void PRINTALLNODEFORCES(std::string spec, double dT);
242
243 double m_StrainEnergy;
244
246
247 ISignalPort **m_apInExternalForces;
248 int *m_aIStatePos;
249 int *m_aIStateVel;
251 //double* m_NodeExternalForces;
253
255 int m_iNumNodesOutputPosAndVel;
256 int m_iNumPanelsCalc;
257 int m_iNumCablesCalc;
258 int m_iNumNodesOriginal;
259 int m_iNumNodesCalc;
260 int m_iNumNodeOutputs;
262
264
266 double m_adBottomContact[6];
267
268 environment::EnvironmentProvider* m_pEnvironment;
269 environment::SeafloorForcesInterface *m_seafloor;
271
273
274 std::vector<CNetCableElement*> m_VpCableElements;
275 std::vector<CNetElement3N*> m_VpNetElements;
276 float* m_afInertia;
277 int* m_aiNetConn;
278 int** m_aaiCableConn;
279 SAdaptationSpec_t m_SAdaptations;
280 bool m_bFoldingPointRefinementUsed;
282
283
285
287 VSPairStrInt m_VsNodesInputForce;
288 bool m_bUseTagForExternalNodes;
290
291 double* m_adNodeForce;
292 sfh::timers::StopWatch m_OdeTimer;
293 double* m_adAccelerationNorms;
294
295#ifdef CNetStructure_DO_PROFILE
296 sfh::timers::ProfilerWallclock m_Profiler;
297#endif
298
299#ifdef FH_VISUALIZATION
300 bool m_bLineVisualization;
301 C3DLine *m_LineVisualizationPressure;
302 C3DLine *m_LineVisualizationStrain;
303#endif
304
305};
Definition CNetBottomContactFilter.h:7
Definition CNetStructureSpec.h:38
Definition CNetStructure.h:202
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition CNetStructure.h:286
CNetStructure(std::string sSimObjectName, ISimObjectCreator *pCreator)
The constructor sets the pointer to the output object and the parser object.
std::vector< CNetCableElement * > m_VpCableElements
Element properties.
Definition CNetStructure.h:274
CNetBottomContactFilter m_BottomContactFilter
Environment.
Definition CNetStructure.h:265
int m_iNumNodesInputForce
Node counts.
Definition CNetStructure.h:254
ISignalPort ** m_apInExternalForces
Interface member variables.
Definition CNetStructure.h:247
virtual ~CNetStructure()
The destructor deletes dynamically allocated memory.
Class containing the specification for a net object.
Definition CNetStructureSpec.h:22