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
The following output variables are available as OutputVariableType in sensors, Get...Output() and other functions:
Position
:
position vector of joint given by marker0Velocity
:
velocity vector of joint given by marker0SlidingCoordinate
:
global sliding coordinate along all elements; the maximum sliding coordinate is equivalent to the reference lengths of all sliding elementsForce
:
joint force vector (3D)
intermediate variables |
symbol |
description |
---|---|---|
data node |
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 |
current global position which is provided by marker m0 |
|
marker m0 velocity |
current global velocity which is provided by marker m0 |
|
marker m0 orientation |
current rotation matrix provided by marker m0 (assumed to be rigid body) |
|
marker m0 angular velocity |
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 |
current global position at the ANCF cable element, evaluated at local sliding position sel
|
|
sliding position slope |
current global slope vector of the ANCF cable element, evaluated at local sliding position sel
|
|
sliding velocity |
current global velocity at the ANCF cable element, evaluated at local sliding position sel (sel not differentiated!!!) |
|
sliding velocity slope |
current global slope velocity vector of the ANCF cable element, evaluated at local sliding position sel
|
|
sliding normal vector |
2D normal vector computed from slope |
|
sliding normal velocity vector |
time derivative of 2D normal vector computed from slope velocity |
|
algebraic coordinates |
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 |
current global position of position marker m0
|
|
Velocity |
current global velocity of position marker m0
|
|
SlidingCoordinate |
sg = s + xdata1 |
current value of the global sliding coordinate |
Force |
f |
see below |
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
The vector (=difference; error) between the marker m0 and the marker m1 velocities reads
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
No index 2 case exists, because no time derivative exists for sel. The jacobian matrices for algebraic and ODE2 <ODE2>
coordinates read
if activeConnector = False
, the algebraic equations are changed to:
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
In the index 2 case, the second equation reads
if activeConnector = False
, the algebraic equations are changed to:
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
The index 2 case follows straightforward to
again assuming, that
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 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