ObjectJointALEMoving2D
A specialized axially moving joint (without rotation) in 2D between a ALE Cable2D (marker1) and a position-based marker (marker0); ALE=Arbitrary Lagrangian Eulerian; the data coordinate x[0] provides the current index in slidingMarkerNumbers, and the ODE2 coordinate q[0] provides the (given) moving coordinate in the cable element.
Additional information for ObjectJointALEMoving2D:
- This
Object
has/provides the following types =Connector
,Constraint
- Requested
Marker
type =_None
- Requested
Node
type: read detailed information of item - Short name for Python =
ALEMovingJoint2D
- Short name for Python visualization object =
VALEMovingJoint2D
The item ObjectJointALEMoving2D with type = ‘JointALEMoving2D’ has the following parameters:
- name [type = String, default = ‘’]:constraints’s unique name
- markerNumbers [\([m0,\,m1]\tp\), type = ArrayMarkerIndex, default = [ invalid [-1], invalid [-1] ]]:marker m0: position-marker of mass point or rigid body; marker m1: updated marker to ANCF Cable2D element, where the sliding joint currently is attached to; must be initialized with an appropriate (global) marker number according to the starting position of the sliding object; this marker changes with time (PostNewtonStep)
- slidingMarkerNumbers [\([m_{s0}, \ldots, m_{sn}]\tp\), type = ArrayMarkerIndex, default = []]:a list of sn (global) marker numbers which are are used to update marker1
- slidingMarkerOffsets [\([d_{s0}, \ldots, d_{sn}]\), type = Vector, default = []]:this list contains the offsets of every sliding object (given by slidingMarkerNumbers) w.r.t. to the initial position (0): marker0: offset=0, marker1: offset=Length(cable0), marker2: offset=Length(cable0)+Length(cable1), …
- slidingOffset [\(s_{off}\), type = Real, default = 0.]:sliding offset list [SI:m]: a list of sn scalar offsets, which represent the (reference arc) length of all previous sliding cable elements
- nodeNumbers [\([n_{GD}, n_{ALE}]\), type = ArrayNodeIndex, default = [ invalid [-1], invalid [-1] ]]:node number of NodeGenericData (GD) with one data coordinate and of NodeGenericODE2 (ALE) with one ODE2 coordinate
- usePenaltyFormulation [type = Bool, default = False]:flag, which determines, if the connector is formulated with penalty, but still using algebraic equations (IsPenaltyConnector() still false)
- penaltyStiffness [\(k\), type = Real, default = 0.]:penalty stiffness [SI:N/m] used if usePenaltyFormulation=True
- activeConnector [type = Bool, default = True]:flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint
- visualization [type = VObjectJointALEMoving2D]:parameters for visualization of item
The item VObjectJointALEMoving2D has the following parameters:
- show [type = Bool, default = True]:set true, if item is shown in visualization and false if it is not shown
- drawSize [type = float, default = -1.]:drawing size = radius of revolute joint; size == -1.f means that default connector size is used
- color [type = Float4, default = [-1.,-1.,-1.,-1.]]:RGBA connector color; if R==-1, use default color
DESCRIPTION of ObjectJointALEMoving2D
The following output variables are available as OutputVariableType in sensors, Get…Output() and other functions:
Position
: \(\LU{0}{{\mathbf{p}}}_{m0}\)current global position of position marker \(m0\)Velocity
: \(\LU{0}{{\mathbf{v}}}_{m0}\)current global velocity of position marker \(m0\)SlidingCoordinate
: \(s_g = q_{ALE} + s_{off}\)current value of the global sliding ALE coordinate, including offset; note that reference coordinate of \(q_{ALE}\) is ignored!Coordinates
: \([x_{data0},\,q_{ALE}]\tp\)provides two values: [0] = current sliding marker index, [1] = ALE sliding coordinateCoordinates\_t
: \([\dot q_{ALE}]\tp\)provides ALE sliding velocityForce
: \({\mathbf{f}}\)joint force vector (3D)
Definition of quantities
intermediate variables
|
symbol
|
description
|
---|---|---|
generic data node
|
\({\mathbf{x}}=[x_{data0}]\tp\)
|
coordinates of node with node number \(n_{GD}\)
|
generic ODE2 node
|
\({\mathbf{q}}=[q_{0}]\tp\)
|
coordinates of node with node number \(n_{ALE}\), which is shared with all ALE-ANCF and ALE sliding joint objects
|
data coordinate
|
\(x_{data0}\)
|
the current index in slidingMarkerNumbers
|
ALE coordinate
|
\(q_{ALE} = q_{0}\)
|
current ALE coordinate (in fact this is the Eulerian coordinate in the ALE formulation); note that reference coordinate of \(q_{ALE}\) is ignored!
|
marker m0 position
|
\(\LU{0}{{\mathbf{p}}}_{m0}\)
|
current global position which is provided by marker m0
|
marker m0 velocity
|
\(\LU{0}{{\mathbf{v}}}_{m0}\)
|
current global velocity which is provided by marker m0
|
cable coordinates
|
\({\mathbf{q}}_{ANCF,m1}\)
|
current coordiantes of the ANCF cable element with the current marker \(m1\) is referring to
|
sliding position
|
\(\LUR{0}{{\mathbf{r}}}{ANCF} = {\mathbf{S}}(s_{el}){\mathbf{q}}_{ANCF,m1}\)
|
current global position at the ANCF cable element, evaluated at local sliding position \(s_{el}\)
|
sliding position slope
|
\(\LURU{0}{{\mathbf{r}}}{ANCF}{\prime} = {\mathbf{S}}^\prime(s_{el}){\mathbf{q}}_{ANCF,m1}\)
|
current global slope vector of the ANCF cable element, evaluated at local sliding position \(s_{el}\)
|
sliding velocity
|
\(\LUR{0}{{\mathbf{v}}}{ANCF} = {\mathbf{S}}(s_{el})\dot{\mathbf{q}}_{ANCF,m1} + \dot q_{ALE} \LURU{0}{{\mathbf{r}}}{ANCF}{\prime}\)
|
current global velocity at the ANCF cable element, evaluated at local sliding position \(s_{el}\), including convective term
|
sliding normal vector
|
\(\LU{0}{{\mathbf{n}}} = [-r^\prime_1,\,r^\prime_0]\)
|
2D normal vector computed from slope \({\mathbf{r}}^\prime=\LURU{0}{{\mathbf{r}}}{ANCF}{\prime}\)
|
algebraic variables
|
\({\mathbf{z}}=[\lambda_0,\,\lambda_1]\tp\)
|
algebraic variables (Lagrange multipliers) according to the algebraic equations
|
Geometric relations
The element sliding coordinate (in the local coordinates of the current sliding element) is computed from the ALE coordinate
For the description of the according quantities, see the description above. The distance \(d_{m1}\) is obtained from the slidingMarkerOffsets
list, using the current (local) index \(x_{data0}\).
The vector (=difference; error) between the marker \(m0\) and the marker \(m1\) (=\({\mathbf{r}}_{ANCF}\)) positions reads
Note that \(\LU{0}{{\mathbf{p}}}_{m0}\) represents the current position of the marker \(m0\), which could represent the midpoint of a mass sliding along the beam.
The position \(\LUR{0}{{\mathbf{r}}}{ANCF}\) is computed from the beam represented by marker \(m1\), using the local beam coordinate \(x=s_{el}\).
The marker and the according beam finite element changes during movement using the list slidingMarkerNumbers
and the index is updated in the PostNewtonStep.
The vector (=difference; error) between the marker \(m0\) and the marker \(m1\) velocities reads
Connector constraint equations
The 2D sliding joint is implemented having 2 equations, using the Lagrange multipliers \({\mathbf{z}}\). The algebraic (index 3) equations read
Note that the Lagrange multipliers \([\lambda_0,\,\lambda_1]\tp\)are the global forces in the joint. In the index 2 case the algebraic equations read
If usePenalty = True
, the algebraic equations are changed to:
If activeConnector = False
, the algebraic equations are changed to:
Post Newton Step
After the Newton solver has converged, a PostNewtonStep is performed for the element, which updates the marker \(m1\) index if necessary.
Furthermore, it is checked, if \(x_{data0}\) becomes smaller than zero, which raises a warning and keeps \(x_{data0}=0\). The same results if \(x_{data0}\ge sn\), then \(x_{data0} = sn\). Finally, the data coordinate is updated in order to provide the starting value for the next step,
Relevant Examples and TestModels with weblink:
ANCFmovingRigidbody.py (Examples/), ANCFmovingRigidBodyTest.py (TestModels/)
The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf