# Motion: Joint Based

Command ElementModifies a joint motion element.

## Format

<Motion_Joint
id                  = "integer"
joint_id            = "integer"
motion_type         = { "R" | "T" }
{
val_type            = "D"
|
val_type            = "V"
ic_disp             = "real"
|
val_type            = "A"
ic_disp             = "real"
ic_vel              = "real"
}
{
type                = "EXPRESSION"
expr                = "motionsolve_expression"
|
type                = "USERSUB"
usrsub_dll_name     = "valid_path_name"
usrsub_param_string = "USER([[par_1[,...][,par_n]])"
usrsub_fnc_name     = "valid_function_name"
}
/>

## Attributes

id
Element identification number (integer>0). This number is unique among all Motion_Joint elements.
type
Select either "EXPRESSION" or "USERSUB". Specifies how the motion is defined. The "EXPRESSION" option specifies that the motion value is a MotionSolve expression that can be evaluated at run-time. The "USERSUB" option indicates that the value of the motion value is specified in a user defined subroutine. The parameters usrsub_param_string, usrsub_dll_name and usrsub_fnc_name are used to provide more information about the user defined subroutine.
val_type
Modifies whether the motion applies a displacement input ("D"), a velocity input ("V"), or an acceleration input ("A").
expr
Modifies the expression that defines the motion value. Use this parameter only when type = "EXPRESSION". Any valid run-time MotionSolve expression can be provided as input.
usrsub_param_string
Modifies the list of parameters that are passed from the data file to the user defined function specified by usrsub_fnc_name. Use this keyword only when type = "USERSUB" is selected.
usrsub_dll_name
Modifies the path and name of the DLL or shared library containing the user subroutine. MotionSolve uses this information to load the user subroutine specified by usrsub_fnc_name in the DLL at run time.
usrsub_fnc_name
Modifies the name for the user subroutine function (from the default of MOTSUB).
joint_id
Specifies the ID of the joint at which the motion input is applied.
motion_type
Modifies the type of motion to be applied. Select from "R" and "T", which stand for rotational and translational, respectively.
ic_disp
Modifies the displacement initial condition that is required when val_type = "V" or val_type = "A".
ic_vel
Modifies the velocity initial condition that is required when val_type = "A".

## Example

<Motion_Joint
id                  = "101001"
type                = "EXPRESSION"
val_type            = "D"
expr                = "-.2*TIME"
joint_id            = "101002"
motion_type         = "R"
ic_disp             = "0."
ic_vel              = "0."
/>
<Motion_Joint
id                  = "301001"
type                = "USERSUB"
val_type            = "D"
usrsub_param_string = "USER(5,2)"
usrsub_dll_name     = "NULL"
joint_id            = "301002"
motion_type         = "R"
ic_disp             = "0."
ic_vel              = "0."
/>