FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
NetStructure.h
1#pragma once
2#include "CommonTypes.h"
3
174// #define CNetStructure_DO_PROFILE
175
176// Includes
177#include "NetBottomContactFilter.h"
178#include "NetCableElement.h"
179#include "NetCableElementSpec.h"
180#include "NetElement3N.h"
181#include "NetElementDef.h"
182#include "NetStructureSpec.h"
183
184#include "sfh/math/math.h"
185#include "sfh/timers/ProfilerWallclock.h"
186
187#include <fhsim/simobject/SimObject.h>
188#include <fhsim_environment/EnvironmentProvider.h>
189#include <fhsim_environment/SeafloorForcesInterface.h>
190#include <string>
191
192
193#ifdef FH_VISUALIZATION
194# include "sfh/ogre/C3DLine.h"
195# include "sfh/ogre/NMeshGenerators.h"
196
197# include <fhsim/visual/renderer/TextRenderer.h>
198#endif
199
200
201// Class definition
202class NetStructure : public SimObject
203{
204public:
206 NetStructure(std::string simObjectName, ISimObjectCreator* creator);
208 virtual ~NetStructure();
209 virtual void OdeFcn(const double dT, const double* const adX, double* const adXDot) const;
210 virtual void InitialConditionSetup(const double dT, const double* const adCurrentIC, double* const adUpdatedIC, ISimObjectCreator* const creator);
211 virtual void FinalSetup(const double dT, const double* const adX, ISimObjectCreator* const creator);
212 const double* outExternalNodeForce(const double dT, const double* const adX, int extNode);
213
215
224 bool HasJacobians() const override;
225 void OdeJacobian(double T, const double* X, double* J, int nStates) override;
226 int GetJacobianSparsity(int nStates, int* rowPtr, int* colIdx) override;
227
228 bool HasPortJacobians() const override;
229 void InputPortJacobian(const std::string& portName, double T, const double* X,
230 double* dF_dInput, int portSize, int nStates) override;
232
233#ifdef FH_VISUALIZATION
235 virtual void RenderInit(Ogre::Root* const ogreRoot, ISimObjectCreator* const creator);
237 virtual void RenderUpdate(const double dT, const double* const adX);
238#endif
239 const virtual double* NodePos(const double dT, const double* const adX, int extNode);
240 const virtual double* NodeVel(const double dT, const double* const adX, int extNode);
241 const virtual double* BottomContact(const double dT, const double* const adX);
242
243 const virtual double* StrainEnergy(const double dT, const double* const adX);
244 const virtual double* VelNorm(const double dT, const double* const adX);
245 double m_velNorm;
246
247 void SetAddedDragPerMPS(double AddedDragPerMPS);
248
249protected:
250 virtual void CalcStateDerivatives(const double* const adX, double* const adXDot) const;
251 virtual void AddExternalForces(const double dT, const double* const adX) const;
252 virtual void AddNetForces(const double dT, const double* const adX) const;
253 virtual void AddCableForces(const double dT, const double* const adX) const;
254 virtual double AddNodeBottomForce(const double* const adX, int node, double diam, double adForceInOut[3]) const;
255 virtual void AddBottomForces(const double* const adX) const;
256 virtual void AddInputPorts(ISimObjectCreator* creator);
257 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
258 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
259 virtual void CreateDataStructures();
260 virtual void CreateOutputPorts(ISimObjectCreator* creator);
261 VSPairStrInt CreateExternalNodeMap(std::string tag, int* piUsed, NetStructureSpec& NetSpec, ISimObjectCreator* creator);
262 void PRINTALLNODEFORCES(std::string spec, double dT);
263
269 const NetCableElement* cable,
270 const double pA[3], const double pB[3],
271 const double vA[3], const double vB[3],
272 double dFA_dpA[9], double dFA_dpB[9],
273 double dFA_dvA[9], double dFA_dvB[9]) const;
274
281 const NetCableElement* cable,
282 const double pA[3], const double pB[3],
283 const double vA[3], const double vB[3],
284 const double vFluid[3], double rhoWater,
285 double dFA_dvA[9], double dFA_dvB[9],
286 double dFB_dvA[9], double dFB_dvB[9]) const;
287
288 void ComputeCableDragPositionJacobian(
289 const NetCableElement* cable,
290 const double pA[3], const double pB[3],
291 const double vA[3], const double vB[3],
292 const double vFluid[3], double rhoWater,
293 double dFA_dpA[9], double dFA_dpB[9],
294 double dFB_dpA[9], double dFB_dpB[9]) const;
295
300 NetElement3N* panel,
301 const double pA[3], const double pB[3], const double pC[3],
302 const double vA[3], const double vB[3], const double vC[3],
303 const double vWater[3], double addedLinearDrag,
304 double dFA_dpA[9], double dFA_dpB[9], double dFA_dpC[9],
305 double dFB_dpA[9], double dFB_dpB[9], double dFB_dpC[9],
306 double dFC_dpA[9], double dFC_dpB[9], double dFC_dpC[9],
307 double dFA_dvA[9], double dFA_dvB[9], double dFA_dvC[9],
308 double dFB_dvA[9], double dFB_dvB[9], double dFB_dvC[9],
309 double dFC_dvA[9], double dFC_dvB[9], double dFC_dvC[9]) const;
310
311 double m_StrainEnergy;
312
314
315 ISignalPort** m_inExternalForces;
316 int* m_iStatePos;
317 int* m_iStateVel;
319 // double* m_NodeExternalForces;
321
323 int m_numNodesOutputPosAndVel;
324 int m_numPanelsCalc;
325 int m_numCablesCalc;
326 int m_numNodesOriginal;
327 int m_numNodesCalc;
328 int m_numNodeOutputs;
330
332
334 double m_bottomContact[6];
335
336 environment::EnvironmentProvider* m_environment;
337 environment::SeafloorForcesInterface* m_seafloor;
339
341
342 std::vector<NetCableElement*> m_VpCableElements;
343 std::vector<NetElement3N*> m_VpNetElements;
344 float* m_inertia;
345 int* m_netConn;
346 int** m_aaiCableConn;
347 SAdaptationSpec_t m_SAdaptations;
348 bool m_foldingPointRefinementUsed;
350
351
353
355 VSPairStrInt m_VsNodesInputForce;
356 bool m_useTagForExternalNodes;
358
359 double* m_nodeForce;
360 mutable sfh::timers::StopWatch m_OdeTimer;
361 double* m_accelerationNorms;
362
363#ifdef CNetStructure_DO_PROFILE
364 sfh::timers::ProfilerWallclock m_Profiler;
365#endif
366
367#ifdef FH_VISUALIZATION
368 bool m_lineVisualization;
369 C3DLine* m_LineVisualizationPressure;
370 C3DLine* m_LineVisualizationStrain;
371#endif
372};
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:203
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:333
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:315
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:342
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:322
VSPairStrInt m_VsNodesOutputPosAndVel
Nodes reachable directly through input or output ports.
Definition NetStructure.h:354
Class containing the specification for a net object.
Definition NetStructureSpec.h:22