FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructure.h
1#pragma once
2#include "CommonTypes.h"
3
178// #define CNetStructure_DO_PROFILE
179
180// Includes
181#include "NetBottomContactFilter.h"
182#include "NetCableElement.h"
183#include "NetCableElementSpec.h"
184#include "NetElement3N.h"
185#include "NetElementDef.h"
186#include "NetStructureSpec.h"
187
188#include "sfh/math/math.h"
189#include "sfh/timers/ProfilerWallclock.h"
190
191#include <fhsim/simobject/SimObject.h>
192#include <fhsim_environment/EnvironmentProvider.h>
193#include <fhsim_environment/SeafloorForcesInterface.h>
194#include <string>
195
196
197#ifdef FH_VISUALIZATION
198# include "sfh/ogre/C3DLine.h"
199# include "sfh/ogre/NMeshGenerators.h"
200
201# include <fhsim/visual/renderer/TextRenderer.h>
202#endif
203
204
205// Class definition
206class NetStructure : public SimObject
207{
208public:
210 NetStructure(std::string simObjectName, ISimObjectCreator* creator);
212 virtual ~NetStructure();
213 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
214 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
215 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
216 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
217
219
228 bool HasJacobians() const override;
229 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
230 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
231
232 bool HasPortJacobians() const override;
233 void InputPortJacobian(const std::string& portName, double T, const double* X,
234 double* dF_dInput, int portSize, int nStates) override;
236
237#ifdef FH_VISUALIZATION
239 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
241 virtual void RenderUpdate(const double dT, const double* const adX);
242#endif
243 const virtual double* NodePos(const double dT, const double* const adX, int extNode);
244 const virtual double* NodeVel(const double dT, const double* const adX, int extNode);
245 const virtual double* BottomContact(const double dT, const double* const adX);
246
247 const virtual double* StrainEnergy(const double dT, const double* const adX);
248 const virtual double* VelNorm(const double dT, const double* const adX);
249 double m_velNorm;
250
251 void SetAddedDragPerMPS(double AddedDragPerMPS);
252
253protected:
254 virtual void CalcStateDerivatives(const double* const adX, double* const adXDot) const;
255 virtual void AddExternalForces(const double dT, const double* const adX) const;
256 virtual void AddNetForces(const double dT, const double* const adX) const;
257 virtual void AddCableForces(const double dT, const double* const adX) const;
258 virtual double AddNodeBottomForce(const double* const adX, int node, double diam, double adForceInOut[3]) const;
259 virtual void AddBottomForces(const double* const adX) const;
260 virtual void AddInputPorts(ISimObjectCreator* creator);
261 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
262 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
263 virtual void CreateDataStructures();
264 virtual void CreateOutputPorts(ISimObjectCreator* creator);
265 VSPairStrInt CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureSpec& NetSpec, ISimObjectCreator* creator);
266 void PRINTALLNODEFORCES(std::string spec, double dT);
267
273 const NetCableElement* cable,
274 const double pA[3], const double pB[3],
275 const double vA[3], const double vB[3],
276 double dFA_dpA[9], double dFA_dpB[9],
277 double dFA_dvA[9], double dFA_dvB[9]) const;
278
285 const NetCableElement* cable,
286 const double pA[3], const double pB[3],
287 const double vA[3], const double vB[3],
288 const double vFluid[3], double rhoWater,
289 double dFA_dvA[9], double dFA_dvB[9],
290 double dFB_dvA[9], double dFB_dvB[9]) const;
291
292 void ComputeCableDragPositionJacobian(
293 const NetCableElement* cable,
294 const double pA[3], const double pB[3],
295 const double vA[3], const double vB[3],
296 const double vFluid[3], double rhoWater,
297 double dFA_dpA[9], double dFA_dpB[9],
298 double dFB_dpA[9], double dFB_dpB[9]) const;
299
304 NetElement3N* panel,
305 const double pA[3], const double pB[3], const double pC[3],
306 const double vA[3], const double vB[3], const double vC[3],
307 const double vWater[3], double addedLinearDrag,
308 double dFA_dpA[9], double dFA_dpB[9], double dFA_dpC[9],
309 double dFB_dpA[9], double dFB_dpB[9], double dFB_dpC[9],
310 double dFC_dpA[9], double dFC_dpB[9], double dFC_dpC[9],
311 double dFA_dvA[9], double dFA_dvB[9], double dFA_dvC[9],
312 double dFB_dvA[9], double dFB_dvB[9], double dFB_dvC[9],
313 double dFC_dvA[9], double dFC_dvB[9], double dFC_dvC[9]) const;
314
315 double m_StrainEnergy;
316
318
319 ISignalPort** m_inExternalForces;
320 int* m_iStatePos;
321 int* m_iStateVel;
323 // double* m_NodeExternalForces;
325
327 int m_numNodesOutputPosAndVel;
328 int m_numPanelsCalc;
329 int m_numCablesCalc;
330 int m_numNodesOriginal;
331 int m_numNodesCalc;
332 int m_numNodeOutputs;
334
336
338 double m_bottomContact[6];
339
340 environment::EnvironmentProvider* m_environment;
341 environment::SeafloorForcesInterface* m_seafloor;
343
345
346 std::vector<NetCableElement*> m_VpCableElements;
347 std::vector<NetElement3N*> m_VpNetElements;
348 float* m_inertia;
349 int* m_netConn;
350 int** m_aaiCableConn;
351 SAdaptationSpec_t m_SAdaptations;
352 bool m_foldingPointRefinementUsed;
354
355
357
359 VSPairStrInt m_VsNodesInputForce;
360 bool m_useTagForExternalNodes;
362
363 double* m_nodeForce;
364 mutable sfh::timers::StopWatch m_OdeTimer;
365 double* m_accelerationNorms;
366
367#ifdef CNetStructure_DO_PROFILE
368 sfh::timers::ProfilerWallclock m_Profiler;
369#endif
370
371#ifdef FH_VISUALIZATION
372 bool m_lineVisualization;
373 C3DLine* m_LineVisualizationPressure;
374 C3DLine* m_LineVisualizationStrain;
375#endif
376};
Definition NetBottomContactFilter.h:7
Class containing a cable element object, allowing for disks and spheres to be connected.
Definition NetCableElement.h:34
Definition NetElement3N.h:34
Definition NetStructureSpec.h:38
Definition NetStructure.h:207
void ComputeCableDragVelocityJacobian(const NetCableElement *cable, const double pA[3], const double pB[3], const double vA[3], const double vB[3], const double vFluid[3], double rhoWater, double dFA_dvA[9], double dFA_dvB[9], double dFB_dvA[9], double dFB_dvB[9]) const
virtual ~NetStructure()
The destructor deletes dynamically allocated memory.
NetBottomContactFilter m_BottomContactFilter
Environment.
Definition NetStructure.h:337
NetStructure(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
ISignalPort ** m_inExternalForces
Interface member variables.
Definition NetStructure.h:319
void ComputeCableStructuralJacobian(const NetCableElement *cable, const double pA[3], const double pB[3], const double vA[3], const double vB[3], double dFA_dpA[9], double dFA_dpB[9], double dFA_dvA[9], double dFA_dvB[9]) const
bool HasJacobians() const override
std::vector< NetCableElement * > m_VpCableElements
Element properties.
Definition NetStructure.h:346
void ComputePanelJacobianFD(NetElement3N *panel, const double pA[3], const double pB[3], const double pC[3], const double vA[3], const double vB[3], const double vC[3], const double vWater[3], double addedLinearDrag, double dFA_dpA[9], double dFA_dpB[9], double dFA_dpC[9], double dFB_dpA[9], double dFB_dpB[9], double dFB_dpC[9], double dFC_dpA[9], double dFC_dpB[9], double dFC_dpC[9], double dFA_dvA[9], double dFA_dvB[9], double dFA_dvC[9], double dFB_dvA[9], double dFB_dvB[9], double dFB_dvC[9], double dFC_dvA[9], double dFC_dvB[9], double dFC_dvC[9]) const
int m_numNodesInputForce
Node counts.
Definition NetStructure.h:326
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructure.h:358
Class containing the specification for a net object.
Definition NetStructureSpec.h:22