NodePoint2DSlope1
A 2D point/slope vector node for planar Bernoulli-Euler ANCF (absolute nodal coordinate formulation) beam elements. The node has 4 displacement degrees of freedom (2 for displacement of point node and 2 for the slope vector ‘slopex’); all coordinates lead to second order differential equations; the slope vector defines the directional derivative w.r.t the local axial (x) coordinate, denoted as \(()^\prime\); in straight configuration aligned at the global x-axis, the slope vector reads \(\rv^\prime=[r_x^\prime\;\;r_y^\prime]^T=[1\;\;0]^T\).
Interface
Python names:
NodePoint2DSlope1orPoint2DS1, andVPoint2DS1for its visualizationProvides:
Position2D,Orientation2D,Point2DSlope1Node markers that can be attached: MarkerNodePosition, MarkerNodeRigid
Objects that take this node: ObjectMassPoint2D, ObjectRigidBody2D, ObjectANCFCable2D, ObjectBeamGeometricallyExact2D
Parameters
The parameters of the item; in a dictionary, its type is ‘Point2DSlope1’:
name |
type |
size |
default |
description |
|---|---|---|---|---|
name |
String |
‘’ |
node’s unique name |
|
referenceCoordinates |
Vector4D |
4 |
[0.,0.,1.,0.] |
reference coordinates (x-pos,y-pos; x-slopex, y-slopex) of node; global position of node without displacement |
initialCoordinates |
Vector4D |
4 |
[0.,0.,0.,0.] |
initial displacement coordinates: ux, uy and x/y ‘displacements’ of slopex |
initialVelocities |
Vector4D |
4 |
[0.,0.,0.,0.] |
initial velocity coordinates |
visualization |
VNodePoint2DSlope1 |
parameters for visualization of item |
Visualization parameters
The parameters of VNodePoint2DSlope1, 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; with nodes.showNodalSlopes, also its slope vector.
Settings beyond those of all nodes: nodes.showNodalSlopes.
Output variables
Available as OutputVariableType in sensors, Get...Output() and other functions:
output variable |
symbol |
description |
|---|---|---|
Position |
\(\LU{0}{\pv}\cConfig = [p_0,\, p_1,\,0]\cConfig\tp\) |
global 3D position vector of node (=displacement+reference position) |
Displacement |
\(\LU{0}{\uv}\cConfig = [q_0,\, q_1,\,0]\cConfig\tp\) |
global 3D displacement vector of node |
Velocity |
\(\LU{0}{\vv}\cConfig = [\dot q_0,\,\dot q_1,\,0]\cConfig\tp\) |
global 3D velocity vector of node |
Acceleration |
\(\LU{0}{\av}\cConfig = [\ddot q_0,\,\ddot q_1,\,0]\cConfig\tp\) |
global 3D acceleration vector of node |
CoordinatesTotal |
displacement plus reference coordinates of node |
|
Coordinates |
coordinates vector of node (2 displacement coordinates + 2 slope vector coordinates) |
|
Coordinates_t |
velocity coordinates vector of node (derivative of the 2 displacement coordinates + 2 slope vector coordinates) |
|
Coordinates_tt |
acceleration coordinates vector of node (derivative of the 2 displacement coordinates + 2 slope vector coordinates) |
Detailed description
Coordinates
index |
symbol |
kind |
meaning |
frame |
|---|---|---|---|---|
0, 1 |
\(q_0,\,q_1\) |
displacement of the node position \(\rv\) |
global |
|
2, 3 |
\(q_2,\,q_3\) |
change of the slope vector \(\rv^\prime\) |
global |
Configuration
Position and slope vector are the sums of reference and current values,
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]\tp\), which is the default of the
reference coordinates. Its direction is the tangent of the beam axis, and so the rotation of the
cross section in a Bernoulli-Euler beam; its length is one plus the axial strain,
\(\varepsilon = \|\rv^\prime\| - 1\), as ObjectANCFCable2D computes it. A reference slope of length
other than one therefore describes a pre-strained beam.
Frame and interpretation
All four coordinates are global, with no rotation parameters: this is the absolute nodal coordinate
formulation. The node is used by the planar ANCF cable elements, ObjectANCFCable2D and
ObjectALEANCFCable2D, which share the node between neighbouring elements; the beam utilities
(exudyn.beams) create them.
Action on the equations of motion
The four coordinates lead to four ODE2 equations, which the element provides. A force at the
node enters the first two; MarkerNodeRigid sees the node as a position with the orientation of the
slope vector.
Mini example
#a cantilever of one ANCF cable element: position and slope (r_x) at each node
L = 1; EI = 100; F = -0.1
n0 = mbs.AddNode(NodePoint2DSlope1(referenceCoordinates=[0,0, 1,0])) #position, slope = axis
n1 = mbs.AddNode(NodePoint2DSlope1(referenceCoordinates=[L,0, 1,0]))
mbs.AddObject(ObjectANCFCable2D(nodeNumbers=[n0,n1], length=L, massPerLength=1,
bendingStiffness=EI, axialStiffness=1e5))
mGround = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=nGround, coordinate=0))
for i in [0,1,3]: #clamped: x, y and the y-component 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,F,0]))
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)[1]*1000 #-1/3
Relevant Examples (Ex) and TestModels (TM) with weblink to github: ALEANCFpipe.py (Ex), ANCFcantileverTestDyn.py (Ex), ANCFcontactCircle.py (Ex), ANCFcontactCircle2.py (Ex), ANCFmovingRigidbody.py (Ex), ANCFslidingJoint2D.py (Ex), ANCFslidingJoint2Drigid.py (Ex), ANCFswitchingSlidingJoint2D.py (Ex), ANCFtestHalfcircle.py (Ex), ANCFtests2.py (Ex), sliderCrank3DwithANCFbeltDrive.py (Ex), solverFunctionsTestEigenvalues.py (Ex), createItemNumbersTest.py (TM), energiesFlexibleBodiesTest.py (TM), energiesTest.py (TM), …