Skip to content

Latest commit

 

History

History
297 lines (194 loc) · 14 KB

ObjectJointSliding2D.rst

File metadata and controls

297 lines (194 loc) · 14 KB

ObjectJointSliding2D

A specialized sliding joint (without rotation) in 2D between a Cable2D (marker1) and a position-based marker (marker0); the data coordinate x[0] provides the current index in slidingMarkerNumbers, and x[1] the local position in the cable element at the beginning of the timestep.

Additional information for ObjectJointSliding2D:

  • This Object has/provides the following types = Connector, Constraint
  • Requested Marker type = _None
  • Requested Node type = GenericData
  • Short name for Python = SlidingJoint2D
  • Short name for Python visualization object = VSlidingJoint2D

The item ObjectJointSliding2D with type = 'JointSliding2D' 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 or rigid body marker of mass point or rigid body; marker m1: updated marker to 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 = []]:
    these markers are used to update marker m1, if the sliding position exceeds the current cable's range; the markers must be sorted such that marker msi at x=cable(i).length is equal to marker(i+1) at x=0 of cable(i+1)
  • slidingMarkerOffsets [[ds0, …, dsn], type = Vector, default = []]:
    this list contains the offsets of every sliding object (given by slidingMarkerNumbers) w.r.t. to the initial position (0): marker m0: offset=0, marker m1: offset=Length(cable0), marker m2: offset=Length(cable0)+Length(cable1), ...
  • nodeNumber [nGD, type = NodeIndex, default = invalid (-1)]:
    node number of a NodeGenericData for 1 dataCoordinate showing the according marker number which is currently active and the start-of-step (global) sliding position
  • classicalFormulation [type = Bool, default = True]:
    True: uses a formulation with 3 (+1) equations, including the force in sliding direction to be zero; forces in global coordinates, only index 3; False: use local formulation, which only needs 2 (+1) equations and can be used with index 2 formulation
  • constrainRotation [type = Bool, default = False]:
    True: add constraint on rotation of marker m0 relative to slope (if True, marker m0 must be a rigid body marker); False: marker m0 body can rotate freely
  • axialForce [fax, type = Real, default = 0]:
    ONLY APPLIES if classicalFormulation==True; axialForce represents an additional sliding force acting between beam and marker m0 body in axial (beam) direction; this force can be used to drive a body on a beam, but can only be changed with user functions.
  • activeConnector [type = Bool, default = True]:
    flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint
  • visualization [type = VObjectJointSliding2D]:
    parameters for visualization of item

The item VObjectJointSliding2D 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 ObjectJointSliding2D

The following output variables are available as OutputVariableType in sensors, Get...Output() and other functions:

  • Position:
    position vector of joint given by marker0
  • Velocity:
    velocity vector of joint given by marker0
  • SlidingCoordinate:
    global sliding coordinate along all elements; the maximum sliding coordinate is equivalent to the reference lengths of all sliding elements
  • Force:
    joint force vector (3D)

Definition of quantities

intermediate variables
symbol
description
data node
${\mathbf{x}}=[x_{data0},\,x_{data1}]\tp$
coordinates of node with node number nGD
data coordinate 0
xdata0
the current index in slidingMarkerNumbers
data coordinate 1
xdata1
the global sliding coordinate (ranging from 0 to the total length of all sliding elements) at start-of-step - beginning of the timestep
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
marker m0 orientation
$\LU{0,m0}{\Rot}$
current rotation matrix provided by marker m0 (assumed to be rigid body)
marker m0 angular velocity
$\LU{0}{\tomega}_{m0}$
current angular velocity vector provided by marker m0 (assumed to be rigid body)
cable coordinates
qANCF, 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 sel
sliding position slope
$\LURU{0}{{\mathbf{r}}}{ANCF}{\prime} = {\mathbf{S}}^\prime(s_{el}){\mathbf{q}}_{ANCF,m1} = [r^\prime_0,\,r^\prime_1]\tp$
current global slope vector of the ANCF cable element, evaluated at local sliding position sel
sliding velocity
$\LUR{0}{{\mathbf{v}}}{ANCF} = {\mathbf{S}}(s_{el})\dot{\mathbf{q}}_{ANCF,m1}$
current global velocity at the ANCF cable element, evaluated at local sliding position sel (sel not differentiated!!!)
sliding velocity slope
$\LURU{0}{{\mathbf{v}}}{ANCF}{\prime} = {\mathbf{S}}^\prime(s_{el})\dot{\mathbf{q}}_{ANCF,m1}$
current global slope velocity vector of the ANCF cable element, evaluated at local sliding position sel
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}$
sliding normal velocity vector
$\LU{0}{\dot{\mathbf{n}}} = [-\dot r^\prime_1,\,\dot r^\prime_0]$
time derivative of 2D normal vector computed from slope velocity $\dot {\mathbf{r}}^\prime=\LURU{0}{\dot {\mathbf{r}}}{ANCF}{\prime}$
algebraic coordinates
${\mathbf{z}}=[\lambda_0,\,\lambda_1,\, s]\tp$
algebraic coordinates composed of Lagrange multipliers λ0 and λ1 (in local cable coordinates: λ0 is in axis direction) and the current sliding coordinate s, which is local in the current cable element.
local sliding coordinate
s
local incremental sliding coordinate s: the (algebraic) sliding coordinate relative to the start-of-step value. Thus, s only contains small local increments.
output variables
symbol
formula
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
sg = s + xdata1
current value of the global sliding coordinate
Force
f
see below

Geometric relations

Assume we have given the sliding coordinate s (e.g., as a guess of the Newton method or beginning of the time step). The element sliding coordinate (in the local coordinates of the current sliding element) is computed as


sel = s + xdata1 − dm1 = sg − dm1.

The vector (=difference; error) between the marker m0 and the marker m1 (=rANCF) positions reads

$$\LU{0}{\Delta{\mathbf{p}}} = \LUR{0}{{\mathbf{r}}}{ANCF} - \LU{0}{{\mathbf{p}}}_{m0}$$

The vector (=difference; error) between the marker m0 and the marker m1 velocities reads

$$\LU{0}{\Delta{\mathbf{v}}} = \LUR{0}{\dot{\mathbf{r}}}{ANCF} - \LU{0}{{\mathbf{v}}}_{m0}$$

Connector constraint equations (classicalFormulation=True)

The 2D sliding joint is implemented having 3 equations (4 if constrainRotation==True, see below), using the special algebraic coordinates z. The algebraic equations read

$$\begin{aligned} \LU{0}{\Delta{\mathbf{p}}} &=& \Null, \quad \mbox{... two index 3 eqs, ensure sliding body stays at cable}\\\ \left[\lambda_0,\lambda_1\right] \cdot \LURU{0}{{\mathbf{r}}}{ANCF}{\prime} - |\LURU{0}{{\mathbf{r}}}{ANCF}{\prime}| \cdot f_\mathrm{ax} &=& 0, \quad \mbox{... one index 1 equ., ensure force in sliding dir.~= 0} \\\ \end{aligned}$$

No index 2 case exists, because no time derivative exists for sel. The jacobian matrices for algebraic and ODE2 <ODE2> coordinates read

$${\mathbf{J}}_{AE} = \mr{0}{0}{r^\prime_0} {0}{0}{r^\prime_1} {r^\prime_0}{r^\prime_1}{r^{\prime\prime}_0\lambda_0 + r^{\prime\prime}_1\lambda_1}$$

$${\mathbf{J}}_{ODE2} = \mp{-J_{pos,m0}}{{\mathbf{S}}(s_{el})} {\Null\tp}{\left[\lambda_0,\,\lambda_1\right]\cdot{\mathbf{S}}^\prime(s_{el}) }$$

if activeConnector = False, the algebraic equations are changed to:

$$\begin{aligned} \lambda_0 &=& 0, \\\ \lambda_1 &=& 0, \\\ s &=& 0 \end{aligned}$$

Connector constraint equations (classicalFormulation=False)

The 2D sliding joint is implemented having 3 equations (first equation is dummy and could be eliminated; 4 equations if constrainRotation==True, see below), using the special algebraic coordinates z. The algebraic equations read

$$\begin{aligned} \lambda_0 &=& 0, \quad \mbox{... equation not necessary, but can be used for switching to other modes} \\\ \LU{0}{\Delta{\mathbf{p}}\tp} \LU{0}{{\mathbf{n}}} &=& 0, \quad \mbox{... equation ensures that sliding body stays at cable centerline; index3}\\\ \LU{0}{\Delta{\mathbf{p}}\tp} \LURU{0}{{\mathbf{r}}}{ANCF}{\prime} &=& 0. \quad \mbox{... resolves the sliding coordinate $s$; index1 equation!} \end{aligned}$$

In the index 2 case, the second equation reads

$$\LU{0}{\Delta{\mathbf{v}}\tp} \LU{0}{{\mathbf{n}}} + \LU{0}{\Delta{\mathbf{p}}\tp} \LU{0}{\dot{\mathbf{n}}} = 0$$

if activeConnector = False, the algebraic equations are changed to:

$$\begin{aligned} \lambda_0 &=& 0, \\\ \lambda_1 &=& 0, \\\ s &=& 0 \end{aligned}$$

In case that constrainRotation = True, an additional constraint is added for the relative rotation between the slope of the cable and the orientation of marker m0 body. Assuming that the orientation of marker m0 is a 2D matrix (taking only x and y coordinates), the constraint reads

$$\LURU{0}{{\mathbf{r}}}{ANCF}{\prime\mathrm{T}} \LU{0,m0}{\Rot} \vp{0}{1} = 0$$

The index 2 case follows straightforward to

$$\LURU{0}{\dot {\mathbf{r}}}{ANCF}{\prime\mathrm{T}} \LU{0,m0}{\Rot} \vp{0}{1} + \LURU{0}{{\mathbf{r}}}{ANCF}{\prime\mathrm{T}} \LU{0,m0}{\Rot} \LU{0}{\tilde \tomega}_{m0} \vp{0}{1} = 0$$

again assuming, that $\LU{0}{\tilde \tomega}_{m0}$ is only a 2 × 2 matrix.

Post Newton Step

After the Newton solver has converged, a PostNewtonStep is performed for the element, which updates the marker m1 index if necessary.

$$\begin{aligned} s_{el} < 0 \quad \ra \quad x_{data0}\;-\!\!=1 \nonumber\\\ s_{el} > L \quad \ra \quad x_{data0}\;+\!\!=1 \end{aligned}$$

Furthermore, it is checked, if xdata0 becomes smaller than zero, which raises a warning and keeps xdata0 = 0. The same results if xdata0 ≥ sn, then xdata0 = sn. Finally, the data coordinate is updated in order to provide the starting value for the next step,


xdata1 +​​ = s.

Relevant Examples and TestModels with weblink:

ANCFmovingRigidbody.py (Examples/), ANCFslidingJoint2D.py (Examples/), ANCFslidingJoint2Drigid.py (Examples/), ANCFswitchingSlidingJoint2D.py (Examples/), modelUnitTests.py (TestModels/)

The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf