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