General info for all nodes
What a node is
A node provides coordinates and nothing else: no mass, no stiffness, no equations. The object that uses the node - a mass point, a rigid body, a finite element - provides the equations for its coordinates, and a node that no object uses leaves the system without equations for them. Each node page says, under Action on the equations of motion, which equations its coordinates get.
Reference, initial and current coordinates
Every node has referenceCoordinates, which define the reference configuration, and
initialCoordinates and initialVelocities, which are relative to them: a NodePoint starts at
referenceCoordinates + initialCoordinates. The coordinates of the system are the current
coordinates, without the reference values - displacements, or changes of rotation parameters; the
output variable Coordinates returns them and CoordinatesTotal adds the reference values. See
Reference coordinates and displacements and Reference and current coordinates.
The kinds of coordinates
kind |
what the solver does with it |
nodes |
|---|---|---|
second order differential equations: positions, rotations, slopes |
the point, rigid body and slope nodes, |
|
first order differential equations: states |
|
|
algebraic variables |
|
|
data |
no unknowns: states an object updates between steps, such as contact or friction |
|
NodePointGround has no coordinates at all.
Frames
The coordinates of a node are global, unless the object that uses the node reads them otherwise:
ObjectFFRF reads the points of its mesh in the frame of its rigid body node. Every node page says
under Frame and interpretation which objects deviate.
Rotation parametrizations
A rigid body is a rigid body node and an ObjectRigidBody, and the node decides how the rotation is
parametrized; CreateRigidBody(..., nodeType=...) chooses it.
node |
rotation coordinates |
constraint |
singularity |
suited for |
|---|---|---|---|---|
|
4 Euler parameters |
one, \(\ttheta\tp\ttheta = 1\), added by the node |
none |
general 3D motion, implicit integration |
|
3 Tait-Bryan angles |
none |
at \(\theta_1 = \pm\pi/2\) |
small or planar-like rotations, readable angles |
|
rotation vector |
none |
none in the Lie group update |
arbitrary rotations, explicit and implicit Lie group integration |
|
1 angle about \(z\) |
none |
none |
planar motion |
In all of them, the torque equations are the torques projected with the transposed velocity transformation \(\Gm\tp\) of the node, \(\tomega = \Gm \dot\ttheta\).
Markers on nodes
A node marker needs the node to provide what it measures: MarkerNodePosition a position,
MarkerNodeRigid a position and an orientation, MarkerNodeRotationCoordinate an orientation. The
Interface of each node lists the markers and the objects that fit. MarkerNodeCoordinate and
MarkerNodeCoordinates act on single coordinates and fit every node with ODE2 coordinates.
Drawing
A node is drawn if nodes.show and its own show are True: as a sphere of diameter
nodes.defaultSize with nodes.tiling segments, or as a point with nodes.drawNodesAsPoint, in
nodes.defaultColor or its own color; a size of -1 takes a fraction of openGL.advanced.initialMaxSceneSize. In a
contour plot (contour.outputVariable, contour.outputVariableComponent) with contour.nodesColored, it takes the
color of its value. nodes.showNumbers writes its number. A node without a position - Node1D, the generic nodes -
draws nothing.
The settings: nodes.show, nodes.defaultSize, nodes.defaultColor, nodes.drawNodesAsPoint, nodes.tiling, nodes.showNumbers, contour.outputVariable, contour.outputVariableComponent, contour.nodesColored, openGL.advanced.initialMaxSceneSize.