Marine systems simulation
Loading...
Searching...
No Matches
CMembraneStructure.h
1
9
10#pragma once
11
12//#define CNetStructure_DO_PROFILE
13
14// Includes
15#include <string>
16#include "SimObject.h"
17//#include "CNetElement3N.h"
18#include "CMembraneElement.h"
19#include <net/CNetCableElementSpec.h>
20#include <net/CNetCableElement.h>
21#include <net/CNetElementDef.h>
22#include <net/CNetBottomContactFilter.h>
23#include <net/CNetStructureSpec.h>
24#include <EnvironmentProvider.h>
25#include <SeafloorForcesInterface.h>
26
27
28#ifdef FH_VISUALIZATION
29 #include "sfh/ogre/NMeshGenerators.h"
30 #include "sfh/ogre/C3DLine.h"
31 #include <CTextRenderer.h>
32#endif
33
34namespace Netcage {
35
36//Class definition
37class CMembraneStructure : public SimObject
38{
39public:
41 CMembraneStructure(const std::string& sSimObjectName, ISimObjectCreator* const pCreator);
44 virtual void OdeFcn(const double dT, const double *const adX, double *const adXDot, const bool bIsMajorTimeStep);
45 virtual void InitialConditionSetup(const double dT, const double *const adCurrentIC, double *const adUpdatedIC, ISimObjectCreator *const pCreator);
46 virtual void FinalSetup(const double dT, const double *const adX, ISimObjectCreator *const pCreator);
47 const double * outExternalNodeForce(const double dT, const double *const adX, int iExtNode);
48
49#ifdef FH_VISUALIZATION
51 virtual void RenderInit(Ogre::Root *const pOgreRoot, ISimObjectCreator *const pCreator);
53 virtual void RenderUpdate(const double dT, const double *const adX);
54
55 void CreateCapsule( Ogre::ManualObject *capsule_manual);
56 C3DLine *myline;
57#endif
58 const virtual double * NodePos(const double dT, const double *const adX, int iExtNode);
59 const virtual double * NodeVel(const double dT, const double *const adX, int iExtNode);
60 const virtual double * BottomContact(const double dT, const double *const adX);
61 const virtual double * LowerMembranePosition(const double dT, const double *const adX);
62
63 void SetAddedDragPerMPS(double AddedDragPerMPS);
64protected:
65 virtual void CalcStateDerivatives(const double *const adX, double *const adXDot);
66 virtual void AddExternalForces(const double dT, const double *const adX);
67 virtual void AddNetForces(const double dT, const double *const adX);
68 virtual void AddCableForces(const double dT, const double *const adX);
69 virtual double AddNodeBottomForce(const double *const adX, int iNode, double dDiam, double adForceInOut[3]);
70 virtual void AddBottomForces(const double *const adX);
71 virtual void AddInputPorts(ISimObjectCreator *pCreator);
72 virtual void CreateNetPanels(std::vector<const CNetElementDef*> VNetElementDefs, ISimObjectCreator *pCreator);
73 virtual void CreateNetCables(std::vector<const CNetCableElementSpec*> VCableElements, ISimObjectCreator *pCreator);
74 virtual void CreateDataStructures();
75 virtual void CreateOutputPorts(ISimObjectCreator *pCreator);
76 VSPairStrInt CreateExternalNodeMap( std::string sTag, int* piUsed, CNetStructureSpec & NetSpec, ISimObjectCreator *pCreator);
77 void PRINTALLNODEFORCES(std::string spec, double dT);
78
80
81 ISignalPort **m_apInExternalForces;
82 int *m_aIStatePos;
83 int *m_aIStateVel;
85 double* m_NodeExternalForces;
87
89 int m_iNumNodesOutputPosAndVel;
90 int m_iNumPanelsCalc;
91 int m_iNumCablesCalc;
92 int m_iNumNodesOriginal;
93 int m_iNumNodesCalc;
94 int m_iNumNodeOutputs;
96
98
100 double m_adBottomContact[6];
101
102 environment::EnvironmentProvider* m_pEnvironment;
103 environment::SeafloorForcesInterface* m_seafloor;
105
107
108 std::vector<CNetCableElement*> m_VpCableElements;
109 std::vector<CMembraneElement*> m_VpNetElements;
110 float* m_afInertia;
111 int* m_aiNetConn;
112 int** m_aaiCableConn;
113 SAdaptationSpec_t m_SAdaptations;
114 bool m_bFoldingPointRefinementUsed;
116
117
119
121 VSPairStrInt m_VsNodesInputForce;
122 bool m_bUseTagForExternalNodes;
124
125 double* m_adNodeForce;
126 sfh::timers::StopWatch m_OdeTimer;
127
128 double m_LowerMembraneDepth;
129
130#ifdef CNetStructure_DO_PROFILE
131 sfh::timers::ProfilerWallclock m_Profiler;
132#endif
133
134
135};
136
137
138} // namespace
Definition CNetBottomContactFilter.h:7
Definition CNetStructureSpec.h:38
Definition CMembraneStructure.h:38
CNetBottomContactFilter m_BottomContactFilter
Environment.
Definition CMembraneStructure.h:99
std::vector< CNetCableElement * > m_VpCableElements
Element properties.
Definition CMembraneStructure.h:108
CMembraneStructure(const std::string &sSimObjectName, ISimObjectCreator *const pCreator)
The constructor sets the pointer to the output object and the parser object.
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition CMembraneStructure.h:120
virtual ~CMembraneStructure()
The destructor deletes dynamically allocated memory.
ISignalPort ** m_apInExternalForces
Interface member variables.
Definition CMembraneStructure.h:81
int m_iNumNodesInputForce
Node counts.
Definition CMembraneStructure.h:88
Class modelling a Net cage.
Definition CBottomRing.h:35
Class containing the specification for a net object.
Definition CNetStructureSpec.h:22