```{raw} latex \clearpage ``` (sec-item-nodepointslope12)= # NodePointSlope12 A 3D point/slope vector node for thin ANCF (absolute nodal coordinate formulation) plate 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 in-plane coordinates of the plate. ## Interface - Provides: `Position`, `Orientation`, `PointSlope12` - 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-objectbeamgeometricallyexact), [](#sec-item-objectancfthinplate) ## Parameters The parameters of the item; in a dictionary, its type is 'PointSlope12': | name | type | size | default | description | |---|---|---|---|---| | **name** | String | | '' | node's unique name | | **referenceCoordinates** | Vector9D | 9 | [0.,0.,0.,1.,0.,0.,0.,1.,0.] | reference coordinates (x-pos,y-pos,z-pos; x-slopeX, y-slopeX, z-slopeX; x-slopeY, y-slopeY, z-slopeY) 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** | VNodePointSlope12 | | | parameters for visualization of item | ## Visualization parameters The parameters of `VNodePointSlope12`, 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-nodepointslope12)= ## 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_x^\prime$ | global | | 6, 7, 8 | $q_6,\,q_7,\,q_8$ | {ref}`ODE2 ` | change of the slope vector $\rv_y^\prime$ | global | ### Configuration $$ \rv = \rv\cRef + [q_0,\,q_1,\,q_2]\tp, \quad \rv_x^\prime = \rv_{x,\mathrm{ref}}^\prime + [q_3,\,q_4,\,q_5]\tp, \quad \rv_y^\prime = \rv_{y,\mathrm{ref}}^\prime + [q_6,\,q_7,\,q_8]\tp . $$ ### The slope vectors The two slope vectors are the derivatives of the position of the mid-surface of a thin plate with respect to its two in-plane coordinates, $\rv_x^\prime = \partial \rv / \partial x$ and $\rv_y^\prime = \partial \rv / \partial y$. In a flat plate in the global $x$-$y$ plane they are $[1,\;0,\;0]\tp$ and $[0,\;1,\;0]\tp$. They span the tangent plane of the mid-surface, and their lengths and angle carry its in-plane strains. The default reference coordinates are those of a flat plate in the global $x$-$y$ plane; 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 `ObjectANCFThinPlate`, whose element scales the slopes by `slopesScalingX` and `slopesScalingY`. ### Rotation `MarkerNodeRigid` and the output variables of the rotation take an orthonormal frame of the slopes: $\rv_x$ normalized is its $x$-axis, $\rv_y$ orthogonalized against it and normalized its $y$-axis, and the $z$-axis - the normal of the surface - is their cross product. The angular velocity $\tomega$ and the rotation Jacobian are not the derivatives of this frame but the least-squares fit $\tomega = \left(-\tilde\rv_x\tilde\rv_x - \tilde\rv_y\tilde\rv_y\right)^{-1}\left(\tilde\rv_x\dot\rv_x + \tilde\rv_y\dot\rv_y\right)$, symmetric in the two slopes; the two agree for slopes that keep their lengths and their right angle (#2219). The derivative of $\Jm_{rot}\tp\vv$ with respect to the coordinates is not implemented: a connector whose Jacobian needs it, e.g. a `RigidBodySpringDamper` at the node with an implicit solver, raises an error; a torque and a joint do not need it. ### 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-nodepointslope12)= ## Mini example ```python #a square plate clamped at one edge, from ANCF thin plate elements with position and slopes r_x, r_y from exudyn.shells import ShellMesh plate = ShellMesh(vertices=[[0,0,0],[1,0,0],[1,1,0],[0,1,0]], numberOfElementsX=2, numberOfElementsY=2, youngsModulus=2e9, poissonsRatio=0, density=1000, thickness=0.01) plate.CreateANCFThinPlateElements(mbs) #adds a NodePointSlope12 per mesh point for node in plate.boundaryNodeNumbers['left']: mNode = mbs.AddMarker(MarkerNodeRigid(nodeNumber=node)) mbs.CreateGenericJoint(itemNumbers=[oGround, mNode]) #clamped: position and orientation for element in plate.elementNumbers: mbs.AddLoad(LoadMassProportional(markerNumber=mbs.AddMarker(MarkerBodyMass(bodyNumber=element)), loadVector=[0,0,-9.81])) mbs.Assemble() mbs.SolveStatic() #a corner of the free edge; compare q*L^4/(8*D) = 0.0736 of a cantilever strip, D = E*h^3/12 corner = plate.vertexNodeNumbers[1] exu.sys['testResult'] = mbs.GetNodeOutput(corner, exu.OutputVariableType.Displacement)[2] ```