FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructureTest.h
1
191#ifndef CNetStructureTest_H
192#define CNetStructureTest_H
193
194// #define CNetStructure_DO_PROFILE
195
196// Includes
197#include "NetCableElementTestSpec.h"
198#include "NetTwineElementSpec.h"
199
200#include <assert.h>
201#include <fhsim/simobject/SimObject.h>
202#include <fhsim_environment/EnvironmentProvider.h>
203#include <map>
204#include <string>
205#include <vector>
206#include <utility>
207// #include "CNetMeshElementSpec.h"
208
209#include "NetVec3f.h"
210#include "NetCableElementTest.h"
211#include "NetTwineElement.h"
212// #include "CNetMeshElement.h"
213
214#include "NetStructureTestSpec.h"
215#ifdef FH_VISUALIZATION
216# include "sfh/ogre/C3DLine.h"
217# include "sfh/ogre/NMeshGenerators.h"
218#endif
219
220
221// Class definition
222class NetStructureTest : public SimObject
223{
224public:
226 NetStructureTest(std::string simObjectName, ISimObjectCreator* creator);
229 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
230 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
231 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
232 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
233
234#ifdef FH_VISUALIZATION
235 // Initial specification of the simObject geometry for rendering.
236 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
237 // Updating the simObject for rendering the next frame.
238 virtual void RenderUpdate(const double dT, const double* const adX);
239#endif
240 const virtual double* dragReduction(const double T, const double* const X);
241 const virtual double* projectedArea(const double T, const double* const X);
242 const virtual double* projectedVelocity(const double T, const double* const X);
243 const virtual double* dragForce(const double T, const double* const X);
244 const virtual double* cableForce(const double T, const double* const X);
245 const virtual double* appendixForce(const double T, const double* const X);
246
247
248 double m_dragReduction;
249 double m_projectedArea;
250 double m_projectedVelocity;
251
252 const virtual double* NodePos(const double dT, const double* const adX, int extNode);
253 const virtual double* NodeVel(const double dT, const double* const adX, int extNode);
254
255protected:
256 virtual void AddExternalForces(const double dT, const double* const adX) const;
257 virtual void AddCableForces(const double dT, const double* const adX) const;
258 virtual void AddInputPorts(ISimObjectCreator* creator);
259
260 virtual void CreateNetCables(std::vector<NetCableElementTestSpec*> VCableElements, ISimObjectCreator* creator);
261 virtual void CreateNetTwines(std::vector<const NetTwineElementSpec*> VCableElements, ISimObjectCreator* creator);
262 // virtual void CreateNetMeshes(std::vector<const CNetMeshElementSpec*> VCableElements, ISimObjectCreator *creator);
263
264 virtual void CreateDataStructures();
265 virtual void CreateOutputPorts(ISimObjectCreator* creator);
266 std::vector<std::pair<std::string, int>> CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureTestSpec& NetSpec, ISimObjectCreator* creator);
267
268#ifdef FH_VISUALIZATION
269# pragma warning(disable : 4244)
270 bool m_lineVisualization;
271 int m_colorBy;
272 // C3DLine *m_LineVisualizationPressure;
273 C3DLine* m_Lines;
274
275 static Ogre::ColourValue mapToColor(double val)
276 {
277 if (val <= 0.0) {
278 return Ogre::ColourValue(0.0, 0.0, 1.0); // Blue
279 } else if (val >= 1.0) {
280 return Ogre::ColourValue(1.0, 0.0, 0.0); // Red
281 } else if (val >= 0.75) {
282 return Ogre::ColourValue(1.0, 4.0 - val / 0.25, 0.0); // Red -> Yellow
283 } else if (val >= 0.5) {
284 return Ogre::ColourValue(val / 0.25 - 2.0, 1.0, 0.0); // Yellow -> Green
285 } else if (val >= 0.25) {
286 return Ogre::ColourValue(0.0, 1.0, 2.0 - val / 0.25); // Green -> BlueGreen
287 } else {
288 return Ogre::ColourValue(0.0, val / 0.25, 1.0); // BlueGreen -> Blue
289 }
290 }
291#endif
292
293 // bool m_symplecticHack;
294 double m_symplecticStepsize;
295
296
298
299 ISignalPort** m_inExternalForces;
300 ISignalPort* m_colorLimits;
301 int* m_iStatePos;
302 int* m_iStateVel;
304 double* m_NodeExternalForces;
306
308 int m_numNodesOutputPosAndVel;
309 int m_numCables;
310 // int m_numNodesOriginal;
311 int m_numNodesCalc;
312 // int m_numNodeOutputs;
314
316
317 environment::EnvironmentProvider* m_environment;
318 mutable double m_currentVel[3];
319 const double* currentVelocity(const double dT, const double* const adX);
320 const double* currentVelocity(const double dT, const double* const adX) const;
322
324
325 std::vector<NetCableElementTest*> m_cableElements;
326 std::vector<NetTwineElement*> m_VpTwineElements;
327 // std::vector<CNetMeshElement*> m_VpMeshElements;
328 float* m_inertia;
329 // float* m_inertiaReciprocal;
330 int** m_aaiCableConn;
331 bool m_foldingPointRefinementUsed;
333
334
336
337 std::vector<std::pair<std::string, int>> m_VsNodesOutputPosAndVel;
338 std::vector<std::pair<std::string, int>> m_VsNodesInputForce;
339 bool m_useTagForExternalNodes;
341
342 double* m_nodeForce;
343 unsigned int m_numTwinesCalc;
344
345 int** m_netsurface;
346
347 NetVec3f* omp_posa;
348 NetVec3f* omp_posb;
349 NetVec3f* omp_vela;
350 NetVec3f* omp_velb;
351 NetVec3f* omp_velf;
352
353 NetVec3f* omp_forceA;
354 NetVec3f* omp_forceB;
355 double m_dragForce[3];
356 double m_cableForce[3];
357 double m_appendixForce[3];
358};
359
360
361#endif
Definition NetStructureTestSpec.h:16
Definition NetStructureTest.h:223
std::vector< NetCableElementTest * > m_cableElements
Element properties.
Definition NetStructureTest.h:325
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructureTest.h:299
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:337
environment::EnvironmentProvider * m_environment
Environment.
Definition NetStructureTest.h:317
int m_numNodesInputForce
Node counts.
Definition NetStructureTest.h:307