35 int NumNodes()
const override {
return m_net.m_numNodesCalc; }
36 int NumPanels()
const override {
return m_net.m_numPanelsCalc; }
38 void PanelNodes(
int panel,
int nodes[3])
const override
40 for (
int k = 0; k < 3; k++)
41 nodes[k] = m_net.m_netConn[panel * 3 + k];
44 void NodePosition(
const double* X,
int node,
double pos[3])
const override
46 const double* state = m_net.NodePositionState(X, node);
47 for (
int k = 0; k < 3; k++)
51 void NodeVelocity(
const double* X,
int node,
double vel[3])
const override
53 const double* state = m_net.NodeVelocityState(X, node);
54 for (
int k = 0; k < 3; k++)
58 int NumCables()
const override {
return m_net.m_numCablesCalc; }
60 void CableNodes(
int cable,
int nodes[2])
const override
62 for (
int k = 0; k < 2; k++)
63 nodes[k] = m_net.m_VpCableElements[cable]->m_conn[k];
66 environment::wake::PanelEvaluation EvaluatePanel(
const double* X,
int panel,
const double elementVel[3],
const double waterVel[3])
const override
69 PanelNodes(panel, nodes);
70 const double* posA = m_net.NodePositionState(X, nodes[0]);
71 const double* posB = m_net.NodePositionState(X, nodes[1]);
72 const double* posC = m_net.NodePositionState(X, nodes[2]);
73 const auto& element = *m_net.m_VpNetElements[panel];
74 environment::wake::PanelEvaluation evaluation;
75 evaluation.load = element.EvaluatePanelLoad(m_net.m_panelHydrodynamics.law, m_net.m_panelHydrodynamics.fluid, posA, posB, posC, elementVel, waterVel, evaluation.area);
76 evaluation.solidity = element.WakeSolidity(posA, posB, posC);
80 void CableHydrodynamicForce(
double T,
const double* X,
double force[3])
const override { m_net.CableHydrodynamicForce(T, X, force); }