```{raw} latex \clearpage ``` (sec-item-nodepointslope1)= # NodePointSlope1 A 3D point/slope vector node for spatial Bernoulli-Euler ANCF (absolute nodal coordinate formulation) beam elements, with 3 position and 3 slope coordinates, all {ref}`ODE2 `; the slope vector is the derivative of the position with respect to the axial coordinate, $[1,\;0,\;0]\tp$ for a straight beam along the global $x$-axis. ## Interface - Provides: `Position`, `PointSlope1` - Node markers that can be attached: [](#sec-item-markernodeposition) - Objects that take this node: [](#sec-item-objectmasspoint), [](#sec-item-objectancfcable) ## Parameters The parameters of the item; in a dictionary, its type is 'PointSlope1': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | node's unique name | | **referenceCoordinates** | Vector6D | 6 | [0.,0.,0.,1.,0.,0.] | reference coordinates (x-pos,y-pos,z-pos; x-slopex, y-slopex, z-slopex) of node; global position of node without displacement | | **initialCoordinates** | Vector6D | 6 | [0.,0.,0.,0.,0.,0.] | initial displacement coordinates: ux, uy, uz and x/y/z 'displacements' of slopex | | **initialVelocities** | Vector6D | 6 | [0.,0.,0.,0.,0.,0.] | initial velocity coordinates | | **visualization** | VNodePointSlope1 | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePointSlope1`, given as `visualization`: | name | type | size | default | description | |---|---|---|---|---| | **show** | Bool | | True | set true, if item is shown in visualization and false if it is not shown | | **drawSize** | float | | -1. | drawing size (diameter, dimensions of underlying cube, etc.) for item; size == -1.f means that default size is used | | **color** | Float4 | 4 | [-1.,-1.,-1.,-1.] | Default RGBA color for nodes; 4th value is alpha-transparency; R=-1.f means, that default color is used | ## Drawing Drawn as [all nodes](#sec-drawing-nodes); with `nodes.showNodalSlopes`, also its slope vector. Settings beyond those of all nodes: [`nodes.showNodalSlopes`](#sec-vsettingsnodes). ## Output variables Available as `OutputVariableType` in sensors, `Get...Output()` and other functions: ```{tabularcolumns} \Y{0.25}\Y{0.25}\Y{0.5} ``` | output variable | symbol | description | |---|---|---| | Position | $\LU{0}{\pv}\cConfig = [p_0,\, p_1,\, p_2]\cConfig\tp$ | global 3D position vector of node (=displacement+reference position) | | Displacement | $\LU{0}{\uv}\cConfig = [q_0,\, q_1,\, q_2]\cConfig\tp$ | global 3D displacement vector of node | | Velocity | $\LU{0}{\vv}\cConfig = [\dot q_0,\,\dot q_1,\,\dot q_2]\cConfig\tp$ | global 3D velocity vector of node | | Acceleration | $\LU{0}{\av}\cConfig = [\ddot q_0,\,\ddot q_1,\,\ddot q_2]\cConfig\tp$ | global 3D acceleration vector of node | | CoordinatesTotal | | displacement plus reference coordinates of node | | Coordinates | | coordinates vector of node (3 displacement coordinates + 3 slope vector coordinates) | | Coordinates_t | | velocity coordinates vector of node (derivative of the 3 displacement coordinates + 3 slope vector coordinates) | | Coordinates_tt | | acceleration coordinates vector of node (derivative of the 3 displacement coordinates + 3 slope vector coordinates) | (description-nodepointslope1)= ## Detailed description ### Coordinates | index | symbol | kind | meaning | frame | |---|---|---|---|---| | 0, 1, 2 | $q_0,\,q_1,\,q_2$ | {ref}`ODE2 ` | displacement of the node position $\rv$ | global | | 3, 4, 5 | $q_3,\,q_4,\,q_5$ | {ref}`ODE2 ` | change of the slope vector $\rv^\prime$ | global | ### Configuration $$ \rv = \rv\cRef + [q_0,\,q_1,\,q_2]\tp, \quad \rv^\prime = \rv^\prime\cRef + [q_3,\,q_4,\,q_5]\tp . $$ ### The slope vector The slope vector is the derivative of the position of the beam axis with respect to the axial coordinate $x$ of the element in its reference configuration, $\rv^\prime = \partial \rv / \partial x$. In a straight beam along the global $x$-axis it is $[1,\;0,\;0]\tp$, the default of the reference coordinates. Its direction is the tangent of the beam axis and its length one plus the axial strain, $\varepsilon = \|\rv^\prime\| - 1$. A single slope vector carries no rotation about the beam axis: the element that uses the node has no torsion. ### Frame and interpretation All six coordinates are global (absolute nodal coordinates). The node is used by the spatial ANCF cable element `ObjectANCFCable`. ### Action on the equations of motion The six coordinates lead to six {ref}`ODE2 ` equations, which the element provides; a force at the node enters the first three. (miniexample-nodepointslope1)= ## Mini example ```python #a cantilever of one 3D ANCF cable element: position and slope (r_x) at each node L = 1; EI = 100; F = -0.1 n0 = mbs.AddNode(NodePointSlope1(referenceCoordinates=[0,0,0, 1,0,0])) #position, slope = axis n1 = mbs.AddNode(NodePointSlope1(referenceCoordinates=[L,0,0, 1,0,0])) mbs.AddObject(ObjectANCFCable(nodeNumbers=[n0,n1], length=L, massPerLength=1, bendingStiffness=EI, axialStiffness=1e5)) mGround = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=nGround, coordinate=0)) for i in [0,1,2,4,5]: #clamped: the position and the transverse components of the slope mCoord = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=n0, coordinate=i)) mbs.AddObject(ObjectConnectorCoordinate(markerNumbers=[mGround, mCoord])) mTip = mbs.AddMarker(MarkerNodePosition(nodeNumber=n1)) mbs.AddLoad(LoadForceVector(markerNumber=mTip, loadVector=[0,0,F])) mbs.Assemble() mbs.SolveStatic() #the cubic element is exact for a tip load: F*L^3/(3*EI) = -1/3000 exu.sys['testResult'] = mbs.GetNodeOutput(n1, exu.OutputVariableType.Displacement)[2]*1000 #-1/3 ``` Relevant Examples (Ex) and TestModels (TM) with weblink to github: [`accessFunctionsTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/accessFunctionsTest.py) (TM), [`energiesFlexibleBodiesTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/energiesFlexibleBodiesTest.py) (TM)