JPRIM

The JPRIM statement describes a joint primitive, which constrains one, two, or three degrees of either translational or rotational freedom. JPRIMs do not usually have a physical analogue and are predominantly useful in enforcing standard geometric constraints.

Format

Arguments

 
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

Extended Definition

The JPRIM statement describes a joint primitive, which constrains one, two, or three degrees of either translational or rotational freedom. The joint primitives, in general, do not have physical counterparts. The next figure shows the degrees of freedom each joint primitive allows.
In these and subsequent joint primitive figures, thick solid arrows show permissible motions of the I marker with respect to the J marker, thick dashed arrows show forbidden motions of the I marker with respect to the J marker, and thin solid lines show the I marker. Ghost constructs suggest spatial relationships.
Summary of Joint Primitive
The table below lists the number of translational or rotational constraints each joint primitive imposes.
Primitive Constraints
 
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
The reaction force on the part containing the I marker always acts at the I marker. The reaction force on the part containing the J marker acts at the instantaneous location of the I marker; that is, the point of application can vary with time if the I and J markers translate with respect to one another. The reaction force on the part containing the J marker is always equal and opposite to the reaction force on the part containing the I marker.

Joint primitives can be combined to define a complex constraint. In fact, they can be used to create any of the recognizable joints (except for RACKPIN and SCREW). However, motions cannot be applied on joint primitives as they can be on recognizable joints. For more information on recognizable joints, see JOINT.
 
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.

Examples

JPRIM/0101, INLINE, I=0140, J=0240
This JPRIM statement indicates that Adams Solver (C++) is to use an inline joint primitive to connect one part to another. This connects the first part at Marker 0140 to the second at Marker 0240.
See other Constraints available.