```{raw} latex \clearpage ``` (sec-item-nodepointslope23)= # NodePointSlope23 A 3D point/slope vector node for spatial, shear and cross-section deformable ANCF (absolute nodal coordinate formulation) beam elements, with 3 position and 2 $\times$ 3 slope coordinates, all {ref}`ODE2 `; the slope vectors are the derivatives of the position with respect to the two cross section coordinates $y$ and $z$. ## Interface - Provides: `Position`, `Orientation`, `PointSlope23` - Node markers that can be attached: [](#sec-item-markernodeposition), [](#sec-item-markernoderigid), [](#sec-item-markernoderotationcoordinate) - Objects that take this node: [](#sec-item-objectmasspoint), [](#sec-item-objectancfbeam), [](#sec-item-objectbeamgeometricallyexact) ## Parameters The parameters of the item; in a dictionary, its type is 'PointSlope23': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | node's unique name | | **referenceCoordinates** | Vector9D | 9 | [0.,0.,0.,0.,1.,0.,0.,0.,1.] | reference coordinates (x-pos,y-pos,z-pos; x-slopey, y-slopey, z-slopey; x-slopez, y-slopez, z-slopez) of node; global position of node without displacement | | **initialCoordinates** | Vector9D | 9 | [0.,0.,0.,0.,0.,0.,0.,0.,0.] | initial displacement coordinates relative to reference coordinates | | **initialVelocities** | Vector9D | 9 | [0.,0.,0.,0.,0.,0.,0.,0.,0.] | initial velocity coordinates | | **visualization** | VNodePointSlope23 | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePointSlope23`, 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 vectors. 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 = \LU{0}{[p_0,\, p_1,\, p_2]}\cConfig\tp$ | global 3D position vector of node (=displacement+reference position) | | Displacement | $\LU{0}{\uv}\cConfig = \LU{0}{[q_0,\, q_1,\, q_2]}\cConfig\tp$ | global 3D displacement vector of node | | Velocity | $\LU{0}{\vv}\cConfig = \LU{0}{[\dot q_0,\,\dot q_1,\,\dot q_2]}\cConfig\tp$ | global 3D velocity vector of node | | Acceleration | $\LU{0}{\av}\cConfig = \LU{0}{[\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 | | coordinate vector of node (relative to reference configuration) | | Coordinates_t | | velocity coordinates vector of node | | Coordinates_tt | | acceleration coordinates vector of node | | RotationMatrix | $[A_{00},\,A_{01},\,A_{02},\,A_{10},\,\ldots,\,A_{21},\,A_{22}]\cConfig\tp$ | vector with 9 components of the rotation matrix $\LU{0b}{\Rot}\cConfig$ in row-major format, in any configuration; the rotation matrix transforms local ($b$) to global (0) coordinates | | Rotation | $[\varphi_0,\,\varphi_1,\,\varphi_2]\tp\cConfig$ | vector with 3 components of the Euler / Tait-Bryan angles in xyz-sequence | | AngularVelocity | $\LU{0}{\tomega}\cConfig = \LU{0}{[\omega_0,\,\omega_1,\,\omega_2]}\cConfig\tp$ | global 3D angular velocity vector of node | | AngularVelocityLocal | $\LU{b}{\tomega}\cConfig = \LU{b}{[\omega_0,\,\omega_1,\,\omega_2]}\cConfig\tp$ | local (body-fixed) 3D angular velocity vector of node | (description-nodepointslope23)= ## 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_y$ | global | | 6, 7, 8 | $q_6,\,q_7,\,q_8$ | {ref}`ODE2 ` | change of the slope vector $\rv_z$ | global | ### Configuration $$ \rv = \rv\cRef + [q_0,\,q_1,\,q_2]\tp, \quad \rv_y = \rv_{y,\mathrm{ref}} + [q_3,\,q_4,\,q_5]\tp, \quad \rv_z = \rv_{z,\mathrm{ref}} + [q_6,\,q_7,\,q_8]\tp . $$ ### The slope vectors Unlike the slopes of the cable nodes, the two slope vectors of this node are **not** taken along the beam axis: they are the derivatives of the position with respect to the two **cross section** coordinates $y$ and $z$, $\rv_y = \partial \rv / \partial y$ and $\rv_z = \partial \rv / \partial z$, so that a point of the cross section at $(y,\,z)$ is at $\rv + y\,\rv_y + z\,\rv_z$, as `ObjectANCFBeam` computes it. The axial direction follows from the positions of the two nodes of the element. In a beam along the global $x$-axis the slope vectors are $[0,\;1,\;0]\tp$ and $[0,\;0,\;1]\tp$; they span the cross section, and their lengths and angle carry its deformation - the element is shear and cross section deformable. The default reference coordinates are those of a beam along the global $x$-axis; a model gives the reference coordinates of every node. ### Frame and interpretation All nine coordinates are global (absolute nodal coordinates). The node is used by `ObjectANCFBeam`. ### Rotation `MarkerNodeRigid` and the output variables of the rotation take the orthonormal frame of the slopes: $\rv_z$ normalized is its $z$-axis, $\rv_y$ orthogonalized against it and normalized its $y$-axis, and the $x$-axis is their cross product. The angular velocity $\tomega$ and the rotation Jacobian $\Jm_{rot} = \partial \tomega / \partial \dot \qv$ are the derivatives of this frame, so joints and torques act consistently with it (#2763). ### Action on the equations of motion The nine coordinates lead to nine {ref}`ODE2 ` equations, which the element provides; a force at the node enters the first three. (miniexample-nodepointslope23)= ## Mini example ```python #a cantilever of four ANCF beam elements: position and the slopes r_y, r_z of the cross section L = 1; nElements = 4; F = -0.1 section = exu.BeamSection() section.stiffnessMatrix = np.diag([1e5, 1e4, 1e4, 100, 100, 100]) #EA, GA_y, GA_z, GJ, EI_y, EI_z section.massPerLength = 1 section.inertia = 0.01*np.eye(3) mGround = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=nGround, coordinate=0)) n0 = mbs.AddNode(NodePointSlope23(referenceCoordinates=[0,0,0, 0,1,0, 0,0,1])) for i in range(9): #clamped: position and both slopes mbs.AddObject(ObjectConnectorCoordinate(markerNumbers=[mGround, mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=n0, coordinate=i))])) for k in range(nElements): n1 = mbs.AddNode(NodePointSlope23(referenceCoordinates=[L*(k+1)/nElements,0,0, 0,1,0, 0,0,1])) mbs.AddObject(ObjectANCFBeam(nodeNumbers=[n0,n1], length=L/nElements, sectionData=section)) n0 = n1 mTip = mbs.AddMarker(MarkerNodeRigid(nodeNumber=n1)) mbs.AddLoad(LoadForceVector(markerNumber=mTip, loadVector=[0,F,0])) mbs.Assemble() mbs.SolveStatic() #converges to F*L^3/(3*EI_z) + F*L/GA_y = -0.3433e-3 as the number of elements grows exu.sys['testResult'] = mbs.GetNodeOutput(n1, exu.OutputVariableType.Displacement)[1]*1000 #-0.338 ``` Relevant Examples (Ex) and TestModels (TM) with weblink to github: [`ANCFBeamEigTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/ANCFBeamEigTest.py) (TM), [`ANCFBeamTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/ANCFBeamTest.py) (TM), [`ANCFCableBeamDampingTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/ANCFCableBeamDampingTest.py) (TM), [`energiesFlexibleBodiesTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/energiesFlexibleBodiesTest.py) (TM), [`geometricallyExactBeamTest.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/geometricallyExactBeamTest.py) (TM), [`rightAngleFrame.py`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/rightAngleFrame.py) (TM)