Notation
The notation is used to explain:
typical symbols in equations and formulas (e.g., \(q\))
common types used as parameters in items (e.g.,
PInt
)typical annotation of equations (or parts of it) and symbols (e.g.,
ODE2
)
Common types
Common types are especially used in the definition of items.
These types indicate how they need to be set (e.g., a Vector3D
is set as a list of 3 floats or as a numpy array with 3 floats),
and they usually include some range or size check (e.g., PReal
is checked for being positive and non-zero):
float
\(\ldots\) a single-precision floating point number (note: in Python, ‘float
‘ is used also for double precision numbers; in EXUDYN, internally floats are single precision numbers especially for graphics objects and OpenGL)Real
\(\ldots\) a double-precision floating point number (note: in Python this is also of type ‘float
‘)UReal
\(\ldots\) same asReal
, but may not be negativePReal
\(\ldots\) same asReal
, but must be positive, non-zero (e.g., step size may never be zero)Index
\(\ldots\) deprecated, represents unsined integer,UInt
Int
\(\ldots\) a (signed) integer number, which converts to ‘int
‘ in Python, ‘int
‘ in C++UInt
\(\ldots\) an unsigned integer number, which converts to ‘int
‘ in PythonPInt
\(\ldots\) an positive integer number (> 0), which converts to ‘int
‘ in PythonNodeIndex, MarkerIndex, ...
\(\ldots\) a special (non-negative) integer type to represent indices of nodes, markers, …; specifically, an unintentional conversion from one index type to the other is not possible (e.g., to convertNodeIndex
toMarkerIndex
); see Section Item indexString
\(\ldots\) a stringArrayIndex
\(\ldots\) a list of integer numbers (either list or in some casesnumpy
arrays may be allowed)ArrayNodeIndex
\(\ldots\) a list of node indicesBool
\(\ldots\) a boolean parameter: eitherTrue
orFalse
(’bool
‘ in Python)VObjectMassPoint
,VObjectRigidBody
,VObjectGround
, etc. \(\ldots\) represents the visualization object of the underlying object; ‘V’ is put in front of object nameBodyGraphicsData
\(\ldots\) see Section GraphicsDataVector2D
\(\ldots\) a list ornumpy
array of 2 real numbersVector3D
\(\ldots\) a list ornumpy
array of 3 real numbersVector'X'D
\(\ldots\) a list ornumpy
array of ‘X’ real numbersFloat4
\(\ldots\) a list of 4 float numbersVector
\(\ldots\) a list ornumpy
array of real numbers (length given by according object)NumpyVector
\(\ldots\) a 1Dnumpy
array with real numbers (size given by according object); similar as Vector, but not accepting listMatrix3D
\(\ldots\) a list of lists ornumpy
array with \(3 \times 3\) real numbersMatrix6D
\(\ldots\) a list of lists ornumpy
array with \(6 \times 6\) real numbersNumpyMatrix
\(\ldots\) a 2Dnumpy
array (matrix) with real numbers (size given by according object)NumpyMatrixI
\(\ldots\) a 2Dnumpy
array (matrix) with integer numbers (size given by according object)MatrixContainer
\(\ldots\) a versatile representation for dense and sparse matrices, see Section MatrixContainerPyFunctionGraphicsData
\(\ldots\) a user function providing GraphicsData, see the user function description of the according objectPyFunctionMbsScalar...
\(\ldots\) a user function for the according object; the name is chosen according to the interface (arguments containing scalars, vectors, etc.) and is only used internally for code generation; see the according user function description
Note that for integers, there is also the exu.InvalidIndex()
which is used to uniquely mark invalid indices, e.g., for default values of node numbers in objects or for other functions, often marked as invalid (-1)
in the documentation. Currently, the invalid index is set to -1, but it may change in the future!
States and coordinate attributes
The following subscripts are used to define configurations of a quantity, e.g., for a vector of displacement coordinates \({\mathbf{q}}\):
\({\mathbf{q}}\cConfig \ldots\) \({\mathbf{q}}\) in any configuration
\({\mathbf{q}}\cRef \ldots\) \({\mathbf{q}}\) in reference configuration, e.g., reference coordinates: \({\mathbf{c}}\cRef\)
\({\mathbf{q}}\cIni \ldots\) \({\mathbf{q}}\) in initial configuration, e.g., initial displacements: \({\mathbf{u}}\cIni\)
\({\mathbf{q}}\cCur \ldots\) \({\mathbf{q}}\) in current configuration
\({\mathbf{q}}\cVis \ldots\) \({\mathbf{q}}\) in visualization configuration
\({\mathbf{q}}\cSOS \ldots\) \({\mathbf{q}}\) in start of step configuration
As written in the introduction, the coordinates are attributed to certain types of equations and therefore, the following attributes are used (usually as subscript, e.g., \({\mathbf{q}}_{ODE2}\)):
Time is usually defined as ‘time’ or \(t\). The cross product or vector product ‘\(\times\)‘ is often replaced by the skew symmetric matrix using the tilde ‘\(\tilde{\;\;}\)‘ symbol,
in which \(\tilde{\;\;}\) transforms a vector \({\mathbf{a}}\) into a skew-symmetric matrix \(\tilde {\mathbf{a}}\). If the components of \({\mathbf{a}}\) are defined as \({\mathbf{a}} = \vrRow{a_0}{a_1}{a_2}\tp\), then the skew-symmetric matrix reads
The inverse operation is denoted as \(\vec\), resulting in \(\vec(\tilde {\mathbf{a}}) = {\mathbf{a}}\).
For the length of a vector we often use the abbreviation
A vector \({\mathbf{a}}=[x,\, y,\, z]\tp\) can be transformed into a diagonal matrix, e.g.,
Symbols in item equations
The following tables contains the common notation General coordinates are:
python name (or description)
|
symbol
|
description
|
---|---|---|
displacement coordinates (ODE2)
|
\({\mathbf{q}} = [q_0,\, \ldots,\, q_n]\tp\)
|
vector of \(n\) displacement based coordinates in any configuration; used for second order differential equations
|
rotation coordinates (ODE2)
|
\(\tpsi = [\psi_0,\, \ldots,\, \psi_\eta]\tp\)
|
vector of \(\eta\) rotation based coordinates in any configuration; these coordinates are added to reference rotation parameters to provide the current rotation parameters; used for second order differential equations
|
coordinates (ODE1)
|
\({\mathbf{y}} = [y_0,\, \ldots,\, y_n]\tp\)
|
vector of \(n\) coordinates for first order ordinary differential equations (ODE1) in any configuration
|
algebraic coordinates
|
\({\mathbf{z}} = [z_0,\, \ldots,\, z_m]\tp\)
|
vector of \(m\) algebraic coordinates if not Lagrange multipliers in any configuration
|
Lagrange multipliers
|
\(\tlambda = [\lambda_0,\, \ldots,\, \lambda_m]\tp\)
|
vector of \(m\) Lagrange multipliers (=algebraic coordinates) in any configuration
|
data coordinates
|
\({\mathbf{x}} = [x_0,\, \ldots,\, x_l]\tp\)
|
vector of \(l\) data coordinates in any configuration
|
The following parameters represent possible OutputVariable (list is not complete):
python name
|
symbol
|
description
|
---|---|---|
Coordinate
|
\({\mathbf{c}} = [c_0,\, \ldots,\, c_n]\tp\)
|
|
Coordinate_t
|
\(\dot {\mathbf{c}} = [c_0,\, \ldots,\, c_n]\tp\)
|
time derivative of coordinate vector
|
Displacement
|
\(\LU{0}{{\mathbf{u}}} = [u_0,\, u_1,\, u_2]\tp\)
|
global displacement vector with 3 displacement coordinates \(u_i\) in any configuration; in 1D or 2D objects, some of there coordinates may be zero
|
Rotation
|
\([\varphi_0,\,\varphi_1,\,\varphi_2]\tp\cConfig\)
|
vector with 3 components of the Euler 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
|
Rotation (alt.)
|
\(\ttheta = [\theta_0,\, \ldots,\, \theta_n]\tp\)
|
vector of rotation parameters (e.g., Euler parameters, Tait Bryan angles, …) with \(n\) coordinates \(\theta_i\) in any configuration
|
Identity matrix
|
\({\mathbf{I}} = \mr{1}{0}{0} {0}{\ddots}{0} {0}{0}{1}\)
|
the identity matrix, very often \({\mathbf{I}} = \mathbf{I}_{3 \times 3}\), the \(3 \times 3\) identity matrix
|
Identity transformation
|
\(\LU{0b}{\mathbf{I}_{3 \times 3}} = \mathbf{I}_{3 \times 3}\)
|
converts body-fixed into global coordinates, e.g., \(\LU{0}{{\mathbf{x}}} = \LU{0b}{\mathbf{I}_{3 \times 3}} \LU{b}{{\mathbf{x}}}\), thus resulting in \(\LU{0}{{\mathbf{x}}} = \LU{b}{{\mathbf{x}}}\) in this case
|
RotationMatrix
|
\(\LU{0b}{\Rot} = \mr{A_{00}}{A_{01}}{A_{02}} {A_{10}}{A_{11}}{A_{12}} {A_{20}}{A_{21}}{A_{22}}\)
|
a 3D rotation matrix, which transforms local (e.g., body \(b\)) to global coordinates (0): \(\LU{0}{{\mathbf{x}}} = \LU{0b}{\Rot} \LU{b}{{\mathbf{x}}}\)
|
RotationMatrixX
|
\(\LU{01}{\Rot_0(\theta_0)} = \mr{1}{0}{0} {0}{\cos(\theta_0)}{-\sin(\theta_0)} {0}{\sin(\theta_0)}{\cos(\theta_0)}\)
|
rotation matrix for rotation around \(X\) axis (axis 0), transforming a vector from frame 1 to frame 0
|
RotationMatrixY
|
\(\LU{01}{\Rot_1(\theta_1)} = \mr{\cos(\theta_1)}{0}{\sin(\theta_1)} {0}{1}{0} {-\sin(\theta_1)}{0}{\cos(\theta_1)}\)
|
rotation matrix for rotation around \(Y\) axis (axis 1), transforming a vector from frame 1 to frame 0
|
RotationMatrixZ
|
\(\LU{01}{\Rot_2(\theta_2)} = \mr{\cos(\theta_2)}{-\sin(\theta_2)}{0} {\sin(\theta_2)}{\cos(\theta_2)}{0} {0}{0}{1}\)
|
rotation matrix for rotation around \(Z\) axis (axis 2), transforming a vector from frame 1 to frame 0
|
Position
|
\(\LU{0}{{\mathbf{p}}} = [p_0,\, p_1,\, p_2]\tp\)
|
global position vector with 3 position coordinates \(p_i\) in any configuration
|
Velocity
|
\(\LU{0}{{\mathbf{v}}} = \LU{0}{\dot {\mathbf{u}}} = [v_0,\, v_1,\, v_2]\tp\)
|
global velocity vector with 3 displacement coordinates \(v_i\) in any configuration
|
AngularVelocity
|
\(\LU{0}{\tomega} = [\omega_0,\, \ldots,\, \omega_2]\tp\)
|
global angular velocity vector with \(3\) coordinates \(\omega_i\) in any configuration
|
Acceleration
|
\(\LU{0}{{\mathbf{a}}} = \LU{0}{\ddot {\mathbf{u}}} = [a_0,\, a_1,\, a_2]\tp\)
|
global acceleration vector with 3 displacement coordinates \(a_i\) in any configuration
|
AngularAcceleration
|
\(\LU{0}{\talpha} = \LU{0}{\dot \tomega} = [\alpha_0,\, \ldots,\, \alpha_2]\tp\)
|
global angular acceleration vector with \(3\) coordinates \(\alpha_i\) in any configuration
|
VelocityLocal
|
\(\LU{b}{{\mathbf{v}}} = [v_0,\, v_1,\, v_2]\tp\)
|
local (body-fixed) velocity vector with 3 displacement coordinates \(v_i\) in any configuration
|
AngularVelocityLocal
|
\(\LU{b}{\tomega} = [\omega_0,\, \ldots,\, \omega_2]\tp\)
|
local (body-fixed) angular velocity vector with \(3\) coordinates \(\omega_i\) in any configuration
|
Force
|
\(\LU{0}{{\mathbf{f}}} = [f_0,\, \ldots,\, f_2]\tp\)
|
vector of \(3\) force components in global coordinates
|
Torque
|
\(\LU{0}{\ttau} = [\tau_0,\, \ldots,\, \tau_2]\tp\)
|
vector of \(3\) torque components in global coordinates
|
The following table collects some typical input parameters for nodes, objects and markers:
python name
|
symbol
|
description
|
---|---|---|
referenceCoordinates
|
\({\mathbf{c}}\cRef = [c_0,\, \ldots,\, c_n]\cRef\tp = [c_{\mathrm{Ref},0},\, \ldots,\, c_{\mathrm{Ref},n}]\cRef\tp\)
|
\(n\) coordinates of reference configuration (can usually be set at initialization of nodes)
|
initialCoordinates
|
\({\mathbf{c}}\cIni\)
|
initial coordinates with generalized or mixed displacement/rotation quantities (can usually be set at initialization of nodes)
|
reference point
|
\(\pRefG = [r_0,\, r_1,\, r_2]\tp\)
|
reference point of body, e.g., for rigid bodies or FFRF bodies, in any configuration; NOTE: for ANCF elements, \(\pRefG\) is used for the position vector to the beam centerline
|
localPosition
|
\(\pLocB = [\LUR{b}{b}{0},\, \LUR{b}{b}{1},\, \LUR{b}{b}{2}]\tp\)
|
local (body-fixed) position vector with 3 position coordinates \(b_i\) in any configuration, measured relative to reference point; NOTE: for rigid bodies, \(\LU{0}{{\mathbf{p}}} = \pRefG + \LU{0b}{\Rot} \pLocB\); localPosition is used for definition of body-fixed local position of markers, sensors, COM, etc.
|