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

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\)

ODE2

displacement of the node position \(\rv\)

global

2, 3

\(q_2,\,q_3\)

ODE2

change of the slope vector \(\rv^\prime\)

global

Configuration

Position and slope vector are the sums of reference and current values,

\[ \rv = \rv\cRef + [q_0,\,q_1]\tp, \quad \rv^\prime = \rv^\prime\cRef + [q_2,\,q_3]\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]\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), …