MarkerBodyBeamShape

A special Marker attached to a 3D beam finite element which provides at least position and tangent to the beam axis.

Interface

  • Provides: Beam3DShape

Parameters

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

name

type

size

default

description

name

String

‘’

marker’s unique name

bodyNumber

ObjectIndex

invalid (-1)

body number to which marker is attached to (beam type)

visualization

VMarkerBodyBeamShape

parameters for visualization of item

Visualization parameters

The parameters of VMarkerBodyBeamShape, 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; spheres at the points of the beam it acts on.

Detailed description

Attached to

A spatial ANCF cable element, ObjectANCFCable; the marker is made for ObjectJointSliding, which evaluates the shape functions itself, and it serves no other beam: the implementation evaluates the shape functions of ObjectANCFCable. Assemble() refuses it on any other body.

Marker quantities

The coordinates of the element - position and slope of both nodes, including their reference values - and their velocities, and the length of the element.

Jacobians

The unit matrix of the element’s coordinates: the joint computes the action on each coordinate.

Mini example

#the shape of 3D ANCF cable elements for a sliding joint: a mass point slides along a clamped, stiff cable
from exudyn.beams import GenerateBeamElementsAlongLine
cable = ObjectANCFCable(massPerLength=1, bendingStiffness=1e4, axialStiffness=1e6)
beamInfo = GenerateBeamElementsAlongLine(mbs, positionStart=[0,0,0], positionEnd=[2,0,0],
                        numberOfElements=4, beamTemplate=cable,
                        groundConstraintsStart=[1,1,1, 1,1,1], groundConstraintsEnd=[1,1,1, 1,1,1])
nodes, elements = beamInfo['nodes'], beamInfo['elements']
nMass = mbs.AddNode(NodePoint(referenceCoordinates=[0.6,0,0]))
mbs.AddObject(ObjectMassPoint(nodeNumber=nMass, mass=1))
mMass = mbs.AddMarker(MarkerNodePosition(nodeNumber=nMass))
mbs.AddLoad(LoadForceVector(markerNumber=mMass, loadVector=[1,0,0]))

cableMarkers = [mbs.AddMarker(MarkerBodyBeamShape(bodyNumber=e)) for e in elements]
offsets = [0.5*i for i in range(4)] #the element length is 0.5
nData = mbs.AddNode(NodeGenericData(numberOfDataCoordinates=2, initialCoordinates=[1, 0.6])) #element 1, sliding coordinate
mbs.AddObject(ObjectJointSliding(markerNumbers=[mMass, cableMarkers[1]], slidingMarkerNumbers=cableMarkers,
                                 slidingMarkerOffsets=offsets, nodeNumber=nData, constrainRotations=[0,0,0]))

mbs.Assemble()
mbs.SolveDynamic()

#the mass slides: x = 0.6 + F/(2m)*t^2 at t=1, the stiff cable deflects little
exu.sys['testResult'] = mbs.GetNodeOutput(nMass, exu.OutputVariableType.Position)[0] #1.1

Relevant Examples (Ex) and TestModels (TM) with weblink to github: ANCFslidingJoint.py (Ex), NGsolveFFRFSlidingJoint.py (Ex)