ObjectMass1D

A 1D (translational) mass which is attached to Node1D. Note, that the mass does not need to have the interpretation as a translational mass.

Interface

Parameters

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

name

type

size

default

description

name

String

‘’

objects’s unique name

mass

UReal

0.

(symbol: \(m\)) mass [SI:kg] of mass

nodeNumber

NodeIndex

invalid (-1)

(symbol: \(n0\)) node number (type NodeIndex) for Node1D

referencePosition

Vector3D

3

[0.,0.,0.]

(symbol: \(\LU{0}{\pRef_0}\)) a reference position, used to transform the 1D coordinate to a position

referenceRotation

Matrix3D

9

[[1,0,0], [0,1,0], [0,0,1]]

(symbol: \(\LU{0b}{\Rot_{0}} \in \Rcal^{3 \times 3}\)) the constant body rotation matrix, which transforms body-fixed (b) to global (0) coordinates

visualization

VObjectMass1D

parameters for visualization of item

Renamed parameters, still taken with a DeprecationWarning: physicsMass (deprecated since 1.12.258, removed in 2031): use mass.

Visualization parameters

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

graphicsData

BodyGraphicsData

Structure contains data for body visualization; data is defined in special list / dictionary structure

Drawing

Drawn as all bodies; its graphicsData, moved along the axis of its reference rotation by the coordinate of its node.

Output variables

Available as OutputVariableType in sensors, Get...Output() and other functions:

output variable

symbol

description

Position

\(\LU{0}{\pv}\cConfig\)

global position vector; for interpretation see intermediate variables

Displacement

\(\LU{0}{\uv}\cConfig\)

global displacement vector; for interpretation see intermediate variables

Velocity

\(\LU{0}{\vv}\cConfig \)

global velocity vector; for interpretation see intermediate variables

RotationMatrix

\(\LU{0b}{\Rot}\)

vector with 9 components of the rotation matrix (row-major format)

Rotation

vector with 3 components of the Euler/Tait-Bryan angles in xyz-sequence (\(\LU{0b}{\Rot}\cConfig=:\Rot_0(\varphi_0) \cdot \Rot_1(\varphi_1) \cdot \Rot_2(\varphi_2)\)), recomputed from rotation matrix \(\LU{0b}{\Rot}\)

AngularVelocity

\(\LU{0}{\tomega}\cConfig\)

global 3D angular velocity vector of body

AngularVelocityLocal

\(\LU{b}{\tomega}\cConfig\)

local (body-fixed) 3D angular velocity vector of body

KineticEnergy

\(T = \frac{1}{2} m\, \dot q_0^2\)

kinetic energy of the mass; localPosition must be \([0,0,0]\)

PotentialEnergy

\(V = 0\)

the body has no elastic energy; gravity and other loads are not part of it (see exudyn.advancedUtilities.LoadPotentialEnergy) - the value stays the same when a body gets a built-in gravity; localPosition must be \([0,0,0]\)

Detailed description

Definition of quantities

intermediate variables

symbol

description

position coordinate

\({p_0}\cConfig = {c_0}\cConfig + {c_0}\cRef\)

the coordinate \(c_0\) of the node plus its reference value

Position

\(\LU{0}{\pv}\cConfig = \LU{0}{\pRef_0} + \LU{0b}{\Rot_{0}} \LU{b}{\vr{p_0}{0}{0}}\cConfig\)

the mass moves along the local \(x\)-axis of the frame given by referencePosition \(\LU{0}{\pRef_0}\) and referenceRotation \(\LU{0b}{\Rot_{0}}\)

Velocity

\(\LU{0}{\vv}\cConfig = \LU{0b}{\Rot_{0}} \LU{b}{\vr{\dot c_0}{0}{0}}\cConfig\)

velocity of the mass

applied force

\(\LU{0}{\fv}_a\)

3D force from loads, connectors and joints

residual force

\(f\)

the component of the applied forces along the axis

The coordinate need not be a translation: the object is any scalar mass-spring-damper equation.

Equations of motion

\[ m \cdot \ddot c_0 = f , \quad f = \LU{b}{[1,\,0,\,0]} \LU{b0}{\Rot_{0}} \LU{0}{\fv}_a . \]

Marker interfaces

\[ \LU{0}{\Jm_{pos}} = \frac{\partial \LU{0}{\vv}}{\partial \dot c_0} = \LU{0b}{\Rot_{0}} \LU{b}{\vr{1}{0}{0}} , \quad \LU{0}{\Jm_{rot}} = \Null : \]

a force acts with its component along the axis, a torque has no effect. The mass-weighted Jacobian is \(m\) times \(\LU{0}{\Jm_{pos}}\).

Mini example

node = mbs.AddNode(Node1D(referenceCoordinates = [1], 
                          initialCoordinates=[0.5],
                          initialVelocities=[0.5]))
mass = mbs.AddObject(Mass1D(nodeNumber = node, mass=1))

#assemble and solve system for default parameters
mbs.Assemble()
mbs.SolveDynamic()

#check result, get current mass position at local position [0,0,0]
exu.sys['testResult'] = mbs.GetObjectOutputBody(mass, exu.OutputVariableType.Position, [0,0,0])[0]
#final x-coordinate of position shall be 2

Relevant Examples (Ex) and TestModels (TM) with weblink to github: craneReevingSystem.py (Ex), lugreFrictionTest.py (Ex), mpi4pyExample.py (Ex), multiprocessingTest.py (Ex), nMassOscillator.py (Ex), nMassOscillatorEigenmodes.py (Ex), nMassOscillatorInteractive.py (Ex), connectorOutputVariablesTest.py (TM), contactComparisonTest.py (TM), coordinateSpringDamperExtVelocityOffsetTest.py (TM), energiesTest.py (TM), explicitSolversPostNewtonTest.py (TM), driveTrainTest.py (TM), mainSystemUserFunctionsTest.py (TM)