FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructureTest.h
1
9
10#ifndef CNetStructureTest_H
11#define CNetStructureTest_H
12
13// #define CNetStructure_DO_PROFILE
14
15// Includes
16#include "NetCableElementTestSpec.h"
17#include "NetTwineElementSpec.h"
18
19#include <assert.h>
20#include <fhsim/simobject/SimObject.h>
21#include <fhsim_environment/EnvironmentProvider.h>
22#include <map>
23#include <string>
24#include <vector>
25// #include "CNetMeshElementSpec.h"
26
27#include "NetCableElementTest.h"
28#include "NetTwineElement.h"
29// #include "CNetMeshElement.h"
30
31#include "NetStructureTestSpec.h"
32#ifdef FH_VISUALIZATION
33# include "sfh/ogre/C3DLine.h"
34# include "sfh/ogre/NMeshGenerators.h"
35
36# include <fhsim/visual/renderer/TextRenderer.h>
37#endif
38
39
40// Class definition
41class NetStructureTest : public SimObject
42{
43public:
45 NetStructureTest(std::string simObjectName, ISimObjectCreator* creator);
48 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
49 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
50 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
51 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
52
53#ifdef FH_VISUALIZATION
54 // Initial specification of the simObject geometry for rendering.
55 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
56 // Updating the simObject for rendering the next frame.
57 virtual void RenderUpdate(const double dT, const double* const adX);
58#endif
59 const virtual double* dragReduction(const double T, const double* const X);
60 const virtual double* projectedArea(const double T, const double* const X);
61 const virtual double* projectedVelocity(const double T, const double* const X);
62 const virtual double* dragForce(const double T, const double* const X);
63 const virtual double* cableForce(const double T, const double* const X);
64 const virtual double* appendixForce(const double T, const double* const X);
65
66
67 double m_dragReduction;
68 double m_projectedArea;
69 double m_projectedVelocity;
70
71 const virtual double* NodePos(const double dT, const double* const adX, int extNode);
72 const virtual double* NodeVel(const double dT, const double* const adX, int extNode);
73
74protected:
75 virtual void AddExternalForces(const double dT, const double* const adX) const;
76 virtual void AddCableForces(const double dT, const double* const adX) const;
77 virtual void AddInputPorts(ISimObjectCreator* creator);
78
79 virtual void CreateNetCables(std::vector<NetCableElementTestSpec*> VCableElements, ISimObjectCreator* creator);
80 virtual void CreateNetTwines(std::vector<const NetTwineElementSpec*> VCableElements, ISimObjectCreator* creator);
81 // virtual void CreateNetMeshes(std::vector<const CNetMeshElementSpec*> VCableElements, ISimObjectCreator *creator);
82
83 virtual void CreateDataStructures();
84 virtual void CreateOutputPorts(ISimObjectCreator* creator);
85 std::vector<std::pair<std::string, int>> CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureTestSpec& NetSpec, ISimObjectCreator* creator);
86
87#ifdef FH_VISUALIZATION
88# pragma warning(disable : 4244)
89 bool m_lineVisualization;
90 int m_colorBy;
91 // C3DLine *m_LineVisualizationPressure;
92 C3DLine* m_Lines;
93
94 static Ogre::ColourValue mapToColor(double val)
95 {
96 if (val <= 0.0) {
97 return Ogre::ColourValue(0.0, 0.0, 1.0); // Blue
98 } else if (val >= 1.0) {
99 return Ogre::ColourValue(1.0, 0.0, 0.0); // Red
100 } else if (val >= 0.75) {
101 return Ogre::ColourValue(1.0, 4.0 - val / 0.25, 0.0); // Red -> Yellow
102 } else if (val >= 0.5) {
103 return Ogre::ColourValue(val / 0.25 - 2.0, 1.0, 0.0); // Yellow -> Green
104 } else if (val >= 0.25) {
105 return Ogre::ColourValue(0.0, 1.0, 2.0 - val / 0.25); // Green -> BlueGreen
106 } else {
107 return Ogre::ColourValue(0.0, val / 0.25, 1.0); // BlueGreen -> Blue
108 }
109 }
110#endif
111
112 // bool m_symplecticHack;
113 double m_symplecticStepsize;
114
115
117
118 ISignalPort** m_inExternalForces;
119 ISignalPort* m_colorLimits;
120 int* m_iStatePos;
121 int* m_iStateVel;
123 double* m_NodeExternalForces;
125
127 int m_numNodesOutputPosAndVel;
128 int m_numCables;
129 // int m_numNodesOriginal;
130 int m_numNodesCalc;
131 // int m_numNodeOutputs;
133
135
136 environment::EnvironmentProvider* m_environment;
137 mutable double m_currentVel[3];
138 const double* currentVelocity(const double dT, const double* const adX);
139 const double* currentVelocity(const double dT, const double* const adX) const;
141
143
144 std::vector<NetCableElementTest*> m_cableElements;
145 std::vector<NetTwineElement*> m_VpTwineElements;
146 // std::vector<CNetMeshElement*> m_VpMeshElements;
147 float* m_inertia;
148 // float* m_inertiaReciprocal;
149 int** m_aaiCableConn;
150 bool m_foldingPointRefinementUsed;
152
153
155
156 std::vector<std::pair<std::string, int>> m_VsNodesOutputPosAndVel;
157 std::vector<std::pair<std::string, int>> m_VsNodesInputForce;
158 bool m_useTagForExternalNodes;
160
161 double* m_nodeForce;
162 unsigned int m_numTwinesCalc;
163
164 int** m_netsurface;
165
166 sfh::linalg::sse_vec3f* omp_posa;
167 sfh::linalg::sse_vec3f* omp_posb;
168 sfh::linalg::sse_vec3f* omp_vela;
169 sfh::linalg::sse_vec3f* omp_velb;
170 sfh::linalg::sse_vec3f* omp_velf;
171
172 sfh::linalg::sse_vec3f* omp_forceA;
173 sfh::linalg::sse_vec3f* omp_forceB;
174 double m_dragForce[3];
175 double m_cableForce[3];
176 double m_appendixForce[3];
177};
178
179
180#endif
Definition NetStructureTestSpec.h:15
Class containing a net object.
Definition NetStructureTest.h:42
std::vector< NetCableElementTest * > m_cableElements
Element properties.
Definition NetStructureTest.h:144
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructureTest.h:118
NetStructureTest(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
virtual ~NetStructureTest()
The destructor deletes dynamically allocated memory.
std::vector< std::pair< std::string, int > > m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructureTest.h:156
environment::EnvironmentProvider * m_environment
Environment.
Definition NetStructureTest.h:136
int m_numNodesInputForce
Node counts.
Definition NetStructureTest.h:126