46 virtual void OdeFcn(
const double dT,
const double*
const adX,
double*
const adXDot)
const;
47 virtual void InitialConditionSetup(
const double dT,
const double*
const adCurrentIC,
double*
const adUpdatedIC, ISimObjectCreator*
const creator);
48 virtual void FinalSetup(
const double dT,
const double*
const adX, ISimObjectCreator*
const creator);
49 const double*
const outExternalNodeForce(
const double dT,
const double*
const adX,
int extNode);
51#ifdef FH_VISUALIZATION
53 virtual void RenderInit(Ogre::Root*
const ogreRoot, ISimObjectCreator*
const creator);
55 virtual void RenderUpdate(
const double dT,
const double*
const adX);
57 void CreateCapsule(Ogre::ManualObject* capsule_manual);
60 const virtual double*
const NodePos(
const double dT,
const double*
const adX,
int extNode);
61 const virtual double*
const NodeVel(
const double dT,
const double*
const adX,
int extNode);
62 const virtual double*
const BottomContact(
const double dT,
const double*
const adX);
63 void SetAddedDragPerMPS(
double AddedDragPerMPS);
64 const virtual double*
const NodeForce(
const double dT,
const double*
const adX,
int extNode)
const;
66 virtual void CalcStateDerivatives(
const double*
const adX,
double*
const adXDot)
const;
67 virtual void AddExternalForces(
const double dT,
const double*
const adX)
const;
68 virtual void AddNetForces(
const double dT,
const double*
const adX)
const;
69 virtual void AddCableForces(
const double dT,
const double*
const adX)
const;
70 virtual double AddNodeBottomForce(
const double*
const adX,
int node,
double diam,
double adForceInOut[3])
const;
71 virtual void AddBottomForces(
const double*
const adX)
const;
72 virtual void AddInputPorts(ISimObjectCreator* creator);
73 virtual void CreateNetPanels(std::vector<const NetElementDef*> VNetElementDefs, ISimObjectCreator* creator);
74 virtual void CreateNetCables(std::vector<const NetCableElementSpec*> VCableElements, ISimObjectCreator* creator);
75 virtual void CreateDataStructures();
76 virtual void CreateOutputPorts(ISimObjectCreator* creator);
77 VSPairStrInt CreateExternalNodeMap(std::string tag,
int* piUsed,
NetStructureSpec& NetSpec, ISimObjectCreator* creator);
78 void PRINTALLNODEFORCES(std::string spec,
double dT);
80 void SetExternalPos(
const double dT,
const double*
const adX)
const;
81 void SetExternalVel(
const double dT,
const double*
const adX)
const;
89 ISignalPort** m_InTopConstraintsVel;
93 double* m_NodeExternalForces;
94 double* m_NodeConstraintsPos;
95 double* m_NodeConstraintsVel;
99 int m_numNodesOutputPosAndVel;
102 int m_numNodesOriginal;
104 int m_numNodeOutputs;
107 double* m_NodeInternalForces;
109 int (*m_hasPosAndVelStates)[2];
111 int m_NumNodesInputPosAndVel;
112 int m_NumNodesOutputForce;
114 VSPairStrInt m_VsNodesInputPosAndVel;
115 VSPairStrInt m_VsNodesOutputForce;
122 double m_bottomContact[6];
124 environment::EnvironmentProvider* m_environment;
125 environment::SeafloorForcesInterface* m_seafloor;
131 std::vector<NetElement3NWithConstraints*> m_VpNetElements;
134 int** m_aaiCableConn;
136 bool m_foldingPointRefinementUsed;
143 VSPairStrInt m_VsNodesInputForce;
144 bool m_useTagForExternalNodes;
148 mutable sfh::timers::StopWatch m_OdeTimer;
150 bool m_CageWakeEffectsActive;
153 CoRiBoDynamics::ConstraintSolver* m_constraintSolver;
161 std::vector<states> m_stateVector;
162 CoRiBoDynamics::JointConstraint* m_jointConstr;
164 mutable double m_topPosition1[3];
165 mutable double m_topVelocity1[3];
166 double m_topOrientation1[4];
167 double m_topangularVel1[3];
168 mutable double m_topPosition2[3];
169 mutable double m_topVelocity2[3];
170 double m_topOrientation2[4];
172 double m_topangularVel2[3];
173 double* m_nodeWeight;
175 double m_YoungsModulus;
176 int m_numConstraintsElements;
177 double m_depthOfConstraintsCable;
178#ifdef FH_VISUALIZATION
179 Ogre::SceneNode** m_renderNodes;
183#ifdef NetStructureWithConstraints_DO_PROFILE
184 sfh::timers::ProfilerWallclock m_Profiler;