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