ATPOINT | Indicates a three-degree-of-freedom primitive that allows only rotational motion of one part with respect to another (see the figure below). For an atpoint primitive, Adams Solver (C++) constrains all three translational displacements so that the I and J markers are always superimposed. Atpoint Primitive ![]() |
I=id,J=id | Specifies the identifier of one fixed marker in each part the primitive connects. Adams Solver (C++) connects one part at the I marker to another at the J marker. |
INLINE | Indicates a four-degree-of-freedom primitive that allows one translational and three rotational motions of one part with respect to another (see the figure below). For an inline primitive, Adams Solver (C++) imposes two translational constraints, which confine the translational motion of the I marker to the line defined by the z-axis of the J marker. Inline Primitive ![]() |
INPLANE | Indicates a five-degree-of-freedom primitive that allows both translational and rotational motion of one part with respect to another (see the figure below). For an inplane primitive, Adams Solver (C++) imposes one translational constraint, which confines the translational motion of the I marker to the x-y plane of the J marker. Inplane Primitive ![]() |
ORIENTATION | Indicates a three-degree-of-freedom primitive that allows only translational motion of one part with respect to another (see the figure below). For an orientation primitive, Adams Solver (C++) imposes three rotational constraints to keep the orientation of the I marker identical to the orientation of the J marker. Orientation Primitive ![]() |
PARALLEL_AXES | Indicates a four-degree-of-freedom primitive that allows both translational and rotational motion of one part with respect to another (see the figure below). For a parallel axes primitive, Adams Solver (C++) imposes two rotational constraints so that the z-axis of the I marker stays parallel to the z-axis of the J marker. This primitive permits relative rotation about the common z-axis of I and J and permits all relative displacements. |
Parallel Axes Primitive ![]() | |
PERPENDICULAR | Indicates a five-degree-of-freedom primitive that allows both translational and rotational motion of one part with respect to another (see the figure below). For a perpendicular primitive, Adams Solver (C++) imposes a single rotational constraint on the I and the J markers so that their z-axes remain perpendicular. This allows relative rotations about either z-axis, but does not allow any relative rotation in the direction perpendicular to both z-axes. |
Perpendicular Primitive ![]() |

This type of Joint Primitive: | Removes No. Translational DOF | Removes No. of Rotational DOF | Removes Total Number DOF |
|---|---|---|---|
Atpoint | 3 | 0 | 3 |
Inline | 2 | 0 | 2 |
Inplane | 1 | 0 | 1 |
Orientation | 0 | 3 | 3 |
Parallel Axes | 0 | 2 | 2 |
Perpendicular | 0 | 1 | 1 |
Tip: | ■The atpoint primitive is identical to the spherical joint (see JOINT). ■Just as the JPRIM elements are the primitive forms of the JOINT elements, the GCON element is an even more primite or abstract way to represent constraints in the system. The GCON element can easily represent some of the constraints that users have looked for in the JPRIM element. For example, users have occasionally requested a distance JPRIM, a constraint that keeps two markers offset by a specified distance. To do this, use: GCON/id, I=i, FUN=DM(i,j)-<offset> which will keep two markers, i and j, apart by the distance <offset> and report, as a result, the reaction force applied to i to accomplish this. Note that <offset> must be non-negative. Furthermore, an <offset> of zero should not be considered equivalent to an ATPOINT JPRIM that removes three DOFs, when the GCON only removes one. The <offset> value does not need to be constant, nor is it limited to functions of time. |
Caution: | ■The two markers that define a joint primitive must be in two different parts. In Adams Solver (C++), any joint primitive can be attached to a marker on a flexible body, thereby lifting restrictions in the Adams Solver (FORTRAN). Joint primitives, however, which do not keep the I and J markers coincident require special consideration when the J marker is on a flexible body. In general, joint reaction forces only act on flexible bodies at the marker attachment. If the joint permits the markers to move relative to each other, the offset between the markers is treated as a rigid lever. That is, a reaction force-moment pair (Fi, Mi) at marker I will cause a reaction force-moment pair (Fj, Mj) at marker J according to: Fj = -Fi Mj = -Mi - r x Fi Where r is the instantaneous position vector from marker J to marker I. For example, an I marker on a part that is constrained by an inline joint primitive to move on the z-axis of a J marker on a flexible body should not be considered to be sliding over the surface of the flexible body because the true effect of the primitive is that of a part sliding on a rigid rod that is welded to the flexible body at the location of J. ■Some JPRIM elements purport to align marker axes so that they are parallel and point in the same direction. In actuality, the JPRIM only guarantees that the axes are either parallel or anti-parallel (pointing in the opposite direction). Because the parallel orientation is verified during model input, and because markers are very unlikely to instantaneously to flip by 180 degrees, the likelihood of anti-parallel axes has been very low. However, with the advent of curve-markers, which will experience an orientation flip when passing through an inflection point, the situation has become a possibility. Although it would have been possible to forbid anti-parallel assembly of JPRIM axes and enforce this at run-time, the overhead of such checking would not be justifiable, given the low probability of the occurrence. Furthermore, because the only recourse would be to stop the simulation, it is not clear that this check would be very useful. If the user requires that two axes (for example, the Z axes) remain parallel, as opposed to anti-parallel, we recommend that the following GCON be added to the model: GCON/id, FUN=UVZ(i)*UVZ(j)-1 (replace UVZ with UVX or UVY for X and Y axes, respectively). The GCON will be flagged as a redundant constraint, but since Adams Solver (C++) stops as soon as a redundant constraint becomes a conflicting constraint, a solution involving anti-parallel axes will be prevented. |