MarkerBodyCable2DShape

A special Marker attached to a 2D ANCF beam finite element with cubic interpolation and 8 coordinates.

Interface

Parameters

The parameters of the item; in a dictionary, its type is ‘BodyCable2DShape’:

name

type

size

default

description

name

String

‘’

marker’s unique name

bodyNumber

ObjectIndex

invalid (-1)

body number to which marker is attached to

numberOfSegments

PInt

3

number of number of segments; each segment is a line and is associated to a data (history) variable; must be same as in according contact element

verticalOffset

Real

0.

vertical offset from beam axis in positive (local) Y-direction; this offset accounts for consistent computation of positions and velocities at the surface of the beam

visualization

VMarkerBodyCable2DShape

parameters for visualization of item

Visualization parameters

The parameters of VMarkerBodyCable2DShape, 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

Drawing

Drawn as all markers; circles at the points of the cable it acts on.

Detailed description

Attached to

A planar ANCF cable element, ObjectANCFCable2D or ObjectALEANCFCable2D; the marker is made for the contact of a circle with the cable (ObjectContactCircleCable2D, ObjectContactFrictionCircleCable2D), which divides the element into numberOfSegments segments. Assemble() refuses it on any other body.

Marker quantities

The positions and velocities of the numberOfSegments+1 equidistant points of the element, at the distance verticalOffset from the axis in the local \(y\)-direction, as pairs \((x,\,y)\); and the length of the element and, for the ALE element, its axial coordinate, which the contact needs.

Jacobians

For each point, the two rows of the shape functions of the element, \(\partial \LU{0}{\pv}_j / \partial \qv\): a force at a segment point acts on the element’s coordinates through them.

Mini example

from exudyn.beams import GenerateBeamElementsAlongLine
#the shape of an ANCF cable element as line segments, for contact: a cantilever falls onto a circle
cable = ObjectANCFCable2D(massPerLength=1, bendingStiffness=10, axialStiffness=1e4,
                          bendingDamping=0.1)
beamInfo = GenerateBeamElementsAlongLine(mbs, positionStart=[0,0,0], positionEnd=[1,0,0],
                        numberOfElements=4, beamTemplate=cable, gravity=[0,-9.81,0],
                        groundConstraintsStart=[1,1,0,1])
nodes, elements = beamInfo['nodes'], beamInfo['elements']
mCircle = mbs.AddMarker(MarkerBodyPosition(bodyNumber=oGround, localPosition=[0.8,-0.2,0]))
nSegments = 4
for e in elements:
    mShape = mbs.AddMarker(MarkerBodyCable2DShape(bodyNumber=e, numberOfSegments=nSegments))
    nData = mbs.AddNode(NodeGenericData(numberOfDataCoordinates=nSegments, initialCoordinates=[0.1]*nSegments))
    mbs.AddObject(ObjectContactCircleCable2D(markerNumbers=[mCircle, mShape], nodeNumber=nData,
                                             numberOfContactSegments=nSegments, circleRadius=0.1,
                                             contactStiffness=1e4))

mbs.Assemble()
mbs.SolveDynamic()

#the tip rests beyond the circle, whose top is at y=-0.1
exu.sys['testResult'] = mbs.GetNodeOutput(nodes[-1], exu.OutputVariableType.Position)[1]

Relevant Examples (Ex) and TestModels (TM) with weblink to github: ANCFcontactCircle.py (Ex), ANCFcontactCircle2.py (Ex), ANCFmovingRigidbody.py (Ex), ANCFslidingJoint2D.py (Ex), beltDriveALE.py (Ex), beltDriveReevingSystem.py (Ex), beltDrivesComparison.py (Ex), sliderCrank3DwithANCFbeltDrive.py (Ex), sliderCrank3DwithANCFbeltDrive2.py (Ex), ANCFcontactCircleTest.py (TM), ANCFcontactFrictionTest.py (TM), ANCFmovingRigidBodyTest.py (TM), ANCFslidingAndALEjointTest.py (TM), connectorOutputVariablesTest.py (TM), contactFrictionCircleCable2DnoFrictionTest.py (TM)