Motions
Wall boundary particles can be moved during a simulation with a prescribed motion. Depending on the type of the imposed motion, different values must be defined.
Background
The principal concept is to define a motion for a specific phase and apply this motion within a given time-frame. Similar to the phases, different motions are defined consecutively. Using this approach it is possible to combine different motions for one and the same phase at different times. Thus, it is possible to realize more complex motions with a combination of existing motion types. However, if a special motion is required it is worth it to contact the nanoFluidX support. It might be easier/faster to improve the available motion types for special customer requests.
Before proceeding with the glossary of related commands for the motion setup, there is an important disclaimer that has to be made. Given the current structure of nanoFluidX, there are clear rules regarding which motions can be combined, executed in sequence or modified upon restart.
- A - impose_vel+impose_vel (allowed for all)
- C - rotate_axis+rotate_axis (allowed if only different in time and freq, other differences may cause unknown behavior)
- D - planetary+planetary (allowed if only different in time and freq)
- E - conrod+conrod (allowed if only different in time and freq)
- F - position_file+position_file (not allowed)
- G - trn_osc+trn_osc (allowed if only different in time and freq)
- H - passive_rigid_body+passive_rigid_body (not allowed)
- K - C+A (allowed)
- L - D+A (allowed)
- M - E+A (not allowed, unknown behavior)
- N - C+D or D+C (not allowed, unknown behavior)
- O - A+C (allowed, A is discarded)
- P - A+D (allowed, A is discarded)
- Q - F+Others or Others+F (not allowed, A+F/F+A may behave correctly though)
- R - G+Others or Others+G (not allowed, unknown behavior)
- S - H+Others or Others+H (not allowed)
- Motions should not be removed from a restart/continue
- Motions may be added to the restart/continue
- If a motion has to have a transition at the restart time, one may modify the ending of the first motion and add the second one from the start of the restart/continue time.
- Example for restart/continue, clean run:
- motion1{ROTATE_AXIS; start 0; end 10}
- Example for restart/continue from 5, add a second motion:
- motion1{ROTATE_AXIS; start 0; end 5}
Commands
motions
{
       motion
       {
           phase_motion                    1
           motion_type                     IMPOSE_VEL 
           impose_vel                      "0. 0. 1."
           tstart_prescribe                0.
           tend_prescribe                  2.
           t_damping                       0.5
       }
       motion
       {
           phase_motion                    2
           motion_type                     ROTATE
           freq_unit                       RPM			
           rot_freq                        "50. 0. 0."
           rot_freq_init                   "0. 0. 0."
           rot_cntr                        "0. 0. 0."
           tstart_prescribe                0.
           tend_prescribe                  3.
           t_damping                       0.5
           max_dist                        0.1
       }
       motion
       {   
           phase_motion                    2
           motion_type                     ROTATE_AXIS
           freq_unit                       Hz			 
           rot_axis                        "1. 0. 0."
           rot_axis_freq                   50.0
           rot_axis_freq_init              0.0
           rot_cntr                        "0. 0. 0."
           tstart_prescribe		   0.
           tend_prescribe                  3.
           t_damping                       0.5
           max_dist                        0.1
       }
       motion
       {
           phase_motion                    1
           motion_type                     POSITION_FILE
           positionFile                    motionfile.txt
           rot_cntr                        "0. 0. 0."		
           isOrientation                   false
           tstart_prescribe                0.
           tend_prescribe                  1.
       }
       motion
       {
           phase_motion                    3
           motion_type                     PLANETARY    
           freq_unit                       Rad/s			               
           orbit_cntr                      "0.0 0.0 0.0"
           orbit_radius                    0.06
           year_rotationVec		   "1.0 0.0 0.0"
           year_frequency                  1.73
           year_frequency_init             0.0
           day_rotationVec                 "1.0 0.0 0.0"
           day_frequency                   6.11
           day_frequency_init              0.0
           initial_centerOfDayRotation     "0.58 0.22 0.34"
           tstart_prescribe		   0.0
           tend_prescribe                  1.0
           max_dist                        0.1
       }
       motion
       {
           phase_motion                    3
           motion_type                     OSCILLATE
           freq_unit                       Hz
           oscill_ampl                     "0.0 0.07 0.0"
           oscill_freq_init                "0.0 0.0 0.0"
           oscill_freq                     "0.0 50.0 0.0"
           oscill_phaseshift               "0.0 90.0 0.0"
           tstart_prescribe                0.0
           tend_prescribe                  0.0
           t_damping                       0.0
       }
       motion
       {
           motion_type                      CONROD
           phase_piston                     5               
           phase_conrod                     7
           freq_unit                        Rad/min		  
           crankshaft_rot_freq              -100.0
           crankshaft_rot_freq_init         0.0
           crankshaft_axis                  "0.0 1.0 0.0"
           crankshaft_cntr                  "1.15 0.11 0.6"
           crankshaft_normal                "0.2 0.0 -0.9"
           crankshaft_phaseshift            0.0
           crankshaft_rad                   0.12
           conrod_length                    0.15
           piston_offset                    0.01
           tstart_prescribe                 0.0
           tend_prescribe                   1.0 
           t_damping                        0.1
       }
       motion
       {
           phase_motion                     1
           motion_type                      PASSIVE_RIGID_BODY       
           freq_unit                        Rad/s                    
           init_CoM                         "1.0 1.0 1.0"            
           mom_inert_diag                   "1.0 1.0 1.0"            
           mom_inert_offdiag                "0.0 1.0 0.0"            
           body_mass                        10                       
           init_vel                         "0.0 0.0 1.0"            
           init_angvel                      "0.0 0.0 0.5"            
           mom_principal_ax_x_i             "1.0 0.0 0.0"            
           mom_principal_ax_y_i             "0.0 1.0 0.0"            
           mom_principal_ax_z_i             "0.0 0.0 1.0"            
           prbcon_ax_x_i                    "1.0 0.0 0.0"            
           prbcon_ax_y_i                    "1.0 0.0 0.0"            
           prbcon_ax_z_i                    "1.0 0.0 0.0"            
           prbcon_linlck_c                  "1.0 1.0 0.0"            
           prbcon_anglck_c                  "1.0 1.0 1.0"            
           prbcon_linspr_k_c                "5.0 0.0 0.0"            
           prbcon_linspr_p_c                "0.0 0.0 0.0"            
           prbcon_angspr_k_c                "0.0 0.0 8.0"
           prbcon_lindmp_c_c                "0.0 0.0 0.0"
           prbcon_angdmp_c_c                "0.0 0.0 0.0"            
           prbcon_angspr_p_c                "0.0 0.0 0.0"            
           prbcon_linlim_pls_c              "2.0 0.0 -3.0"           
           prbcon_linlim_mns_c              "1.0 0.0 -2.0"           
           prbcon_anglim_pls_c              "2.0 0.0 -3.0"           
           prbcon_anglim_mns_c              "1.0 0.0 -2.0"           
           prbcon_pt_i                      "0.0 0.0 0.0"            
           prbcon_ax_hinge_c                "0.0 1.0 0.0"
           prbcon_cnstfrc_c                 "3.0 -1.0 0.0"
           prbcon_cnsttrq_c                 "1.0 5.0 -2.0"            
           prbcon_linvel_ctoi               true
           prbcon_linvel_a_c                "1.0 0.0 0.0"
           prbcon_linvel_f_c                "prb_tlvs.txt"
           prbcon_angvel_ctoi               true
           prbcon_angvel_a_c                "1.0 0.0 0.0"
           prbcon_angvel_f_c                "prb_alvs.txt"
       }
       motion
       {
           motion_type                      DOUBLE_ROLLER_1DOF
           dr1dof_bod_phs                   "1 2 3"
           dr1dof_frw_phs                   "4 5 6 7"
           dr1dof_bck_phs                   "8 9"
           dr1dof_drvr_frwbck               reardrive
           dr1dof_bod_cgpnt                 "5.0 1.0 2.0"
           dr1dof_frw_axpnt                 "0.0 1.0 2.0"
           dr1dof_bck_axpnt                 "0.0 2.0 3.0"
           dr1dof_whl_rd                    5.0
           dr1dof_vel_init                  0.0
           dr1dof_vel                       0.0
           dr1dof_time_start                0.0
           dr1dof_time_rampup               0.0
           dr1dof_time_rampdn               0.0
           dr1dof_time_end                  0.0
           dr1dof_rd_pth_ply                2.0
           dr1dof_rd_pth_file               somefile.someextension
           dr1dof_tvs_file                  /path/to/tvsfile.txt
           
       }
       motion
       {
           motion_type             DOUBLE_ROLLER_3DOF
           dr3dof_bod_phs          "1 2 3"           
           dr3dof_frw_phs          "4 5 6 7"         
           dr3dof_bck_phs          "8 9"             
           dr3dof_drvr_frwbck      reardrive         
           dr3dof_bod_cgpnt        "5.0 1.0 2.0"     
           dr3dof_bod_ms           730               
           dr3dof_bod_iyy          2460              
           dr3dof_frw_ms           46                
           dr3dof_bck_ms           46                
           dr3dof_frw_ks           17500             
           dr3dof_bck_ks           17500             
           dr3dof_frw_cs           1000              
           dr3dof_bck_cs           1000              
           dr3dof_frw_axpnt        "0.0 1.0 2.0"     
           dr3dof_bck_axpnt        "0.0 2.0 3.0"     
           dr3dof_whl_rd           5.0               
           dr3dof_bod_eqlb         "0.0 0.0"                                       
           dr3dof_bod_reffrm       false             
           dr3dof_ptch_mod         false             
           dr3dof_bod_z_1dofcon    "0 0.04 -0.04"                                  
           dr3dof_bod_a_1dofcon    "0 0.001 -0.001"                                 
           dr3dof_fld_react_freq   1                 
           dr3dof_vel_init         0.0               
           dr3dof_vel              0.0               
           dr3dof_tvs_file         tvs_file.txt      
           dr3dof_time_start       0.0               
           dr3dof_time_rampup      0.0               
           dr3dof_time_rampdn      0.0               
           dr3dof_time_end         0.0               
           dr3dof_rd_pth_ply       2.0               
           dr3dof_rd_pth_file      rd_pth_file.txt   
        }
        ...
}Definitions
| Command | Contents | SI Unit Example | 
|---|---|---|
| phase_motion | The following motion is applied to this phase number Options 
 Note: The type of these phases needs to be
                                        MOVINGWALL or WALL. The
                                        WALL phase types can only be assigned
                                        IMPOSE_VEL and ROTATE_AXIS
                                    motion types, in which case the velocities on these
                                        WALL phases will be set as a velocity
                                    boundary condition, in accordance with the specified
                                    motion. | |
| motion_type | The type of the imposed motion Options 
 | |
| freq_unit | Defines which unit will be used to specify rotational frequencies
                                for this motion Options 
 Default = Hz (same as rotations per second) except for PASSIVE_RIGID_BODY (Rad/s). | |
| impose_vel | For motion_type = IMPOSE_VEL.
                                This is the imposed velocity of the moving wall particles defined as
                                a vector in X, Y and directions. Default = “0. 0. 0” | |
| tstart_prescribe / tend_prescribe | Within the time-frame tstart_prescribe and
                                    tend_prescribe, the velocity of the moving
                                wall particles is set to
                                        impose_vel. Note: tend_prescribe
                                    should be greater than or equal to
                                        tstart_prescribe. Default = 0.0 | |
| t_damping | In SPH, impulsively started motions always cause pressure
                                oscillations since in a weakly-compressible method disturbances can
                                only travel at the numerical speed of sound. To alleviate this
                                effect it is possible to slowly increase the imposed motion starting
                                at tstart_prescribe for an interval of
                                    t_damping. Tip: For example: 
 Default = 0.0 Note: t_damping
                                        will be renamed to t_ramping in the
                                        future, as it describes better the effect it has in the
                                        simulation. The exact version wherein this switch will take
                                        place is unknown, but will be appropriately announced via
                                        Release Notes. | |
| rot_freq | For motion_type= ROTATE.
                                Rotational frequency vector [rot/s] specified as a vector with x, y,
                                and z-axis components. Default = “0. 0. 0” | |
| rot_freq_init | For motion_type= ROTATE. This
                                case is a restart and you can specify initial frequency of rotation.
                                With this command you can start from, for example, 1000 RPM to an
                                arbitrary RPM. Default = “0. 0. 0” | |
| rot_cntr | For motion_type= ROTATE and
                                    ROTATE_AXIS. Center-of-rotation for the
                                rotational motion. Note: For a body that is rotating around its axis
                                    of symmetry such as a gear, the center of rotation needs to lie
                                    anywhere along the specified direction of the rotation vector.
                                    For example, on the axis of the gear. Default = “0. 0. 0” | |
| rot_axis | For motion_type= ROTATE_AXIS.
                                Defines the axis of rotation of a body. Default = “0. 0. 0” | |
| rot_axis_freq | For motion_type= ROTATE_AXIS.
                                Defines the frequency of rotation of the body. Default = “0. 0. 0.” or 0.0 (depending on the motion type) | |
| rot_axis_freq_init | For motion_type= ROTATE_AXIS.
                                In case it is a restart, you can specify initial frequency of
                                rotation. This allows you to start from 1000 RPM to an arbitrary
                                RPM, for example. Default = 0.0 | |
| positionFile | The name of the file that contains the prescribed motion
                                    information Note: For more information, refer to the POSITION_FILE
                                    section. Related Commands 
 | |
| rot_cntr | If this command is defined in the configuration file, it will use
                                this point as the center of rotation and it will move it as
                                specified by the position text file. Attention: If this
                                    command is not specified, the code will rotate the body around
                                    the calculated center of mass. Related Commands 
 | |
| isOrientation | Options 
 Related Commands 
 | |
| orbit_cntr | Defines the planetary carrier center location. It is sufficient that it lies on the year rotation axis, since the year rotation axis is specified separately. | |
| orbit_radius | Distance between the orbit_cntr and the planet gear center (initial_centerOfDayRotation). | |
| year_rotationVec | Axis of year rotation. Can be defined as an arbitrary vector (it will be normalized automatically). | |
| year_frequency | Frequency of the year rotation | [rot/s] | 
| year_frequency_init | In case it is a restart, you can specify initial year frequency
                                of rotation. This allows you to start from 1000 RPM to an arbitrary
                                RPM, for example. Default = “0. 0. 0.” or 0.0 (depending on the motion type) | |
| day_rotationVec | Axis of day rotation. Can be defined as an arbitrary vector (it will be normalized automatically). | |
| day_frequency | Frequency of the day rotation | [rot/s] | 
| day_frequency_init | In case it is a restart you can specify initial day frequency of
                                rotation. This allows you to start from 1000 RPM to an arbitrary
                                RPM, for example. Default = “0. 0. 0.” or 0.0 (depending on the motion type) | |
| initial_centerOfDayRotation | Initial coordinates of the planetary gear for which the motion is defined. | 
| Command | Contents | SI Unit Example | 
|---|---|---|
| oscill_ampl | Amplitude of the oscillatory motion | [m] | 
| oscill_freq_init | Initial frequency of the oscillating motion. When the case is a restart, you can specify initial frequency of oscillation. For example, you can start from 1000 Hz and go to an arbitrary oscillation frequency. | |
| oscill_freq | Frequency of the oscillating motion | |
| oscill_phaseshift | Initial phase shift along the cosine function, for example, which defines the initial piston position. | [deg] | 
CONROD Commands
| Command | Contents | SI Unit Example | 
|---|---|---|
| phase_piston | Defines which piston phase belongs to a particular
                                        conrod Note: CONROD motion is the only motion that defines
                                        the motion for two phases at a time – the piston and the
                                        conrod phase. | |
| phase_conrod | Defines which conrod phase belongs to a particular
                                        piston Note: CONROD motion is the only motion that defines
                                        the motion for two phases at a time – the piston and the
                                        conrod phase. | |
| crankshaft_rot_freq | Rotational frequency of the crankshaft (needed for proper
                                    conrod/piston motion definition) Note: The actual crankshaft
                                        motion is defined separately by ROTATE or
                                            ROTATE_AXIS. | [rot/s] | 
| crankshaft_rot_freq_init | Initial rotational frequency of the crankshaft in case of a restart | [rot/s] | 
| crankshaft_axis | Defines the axis of the crankshaft (necessary for proper conrod/piston motion definition) | |
| crankshaft_cntr | Point belonging to the crankshaft axis (lying on the crankshaft axis) | |
| crankshaft_normal | Cylinder-parallel vector in a direction pointing closer to
                                    the crankshaft axis unit vector. In other words, this is a
                                    vector parallel to the piston's line of movement and pointing in
                                    the direction of piston movement when moving away from
                                        TDC. Tip:  Be aware of the sign, try the opposite direction
                                        if it is not working. | |
| crankshaft_phaseshift | Defines the initial angular position (phaseshift) of the
                                    particular conrod/piston pair with respect to the
                                        crankshaft_normal direction. The reference point for this angle is when the crankshaft is parallel to the cylinder and the piston is closer to TDC. The sign is with respect to crankshaft axis. | [deg] | 
| crankshaft_rad | Defines the radius of the crankshaft; the distance between the crankshaft axis and the conrod-crankshaft connection center. | [m] | 
| conrod_length | Defines the length of the conrod; the distance between the conrod-crankshaft and conrod-piston connections. | [m] | 
| piston_offset | Positive or negative offset in the direction of crankshaft_axis x crankshaft_normal (cross product). | [m] | 
| max_dist | Provides a maximum radius of the geometry with the center of
                                    the circle being on the rotation axis. In combination with the
                                    other motion definitions, this helps calculate the reference
                                        velocity. This value is automatically exported by the SimLab pre-processor. Tip: It is recommended that
                                        you specify ref_vel explicitly and avoid
                                        using the fall back option of automatic
                                            ref_vel calculation. | [m] | 
PASSIVE_RIGID_BODY Commands
| Command | Contents | SI Unit Example | 
|---|---|---|
| body_mass | If the MOVINGWALL phase is a passive rigid
                                    body, you need to prescribe the mass of the body, as the
                                    discretized geometry based on particles that may not reflect the
                                    real geometry. For example, you can create just the hull of a ship and assign specific masses to the body, as if the geometry was a full ship. Note: This option recalculates
                                        the density of each particle, and the rho_0 of this phase is
                                        ignored. | |
| init_CoM | Initial location of the center of mass Related Commands 
 | |
| init_vel | Initial linear velocity of the rigid body Note: This is a
                                        vector value. | [m/s] | 
| init_angvel | Initial angular velocity of the rigid body Note: This is a
                                        vector value. | [rad/s] | 
| mom_inert_diag | Diagonal components of the moment of inertia around the
                                    global X, Y and Z axes. Tip: For more information,
                                        refer to the PASSIVE_RIGID_BODY
                                        section).The corresponding values refer to XX, YY and
                                    ZZ components. | [kg*m2] | 
| mom_inert_offdiag | Off-diagonal components of the moment of inertia around the
                                    global X, Y and Z axes. Tip: For more information,
                                        refer to the PASSIVE_RIGID_BODY
                                        section).The corresponding values refer to XY, XZ and
                                    YZ components. | [kg*m2] | 
| Important: For the following commands, if the
                                        inertial reference frame does not align with the global
                                        axes, for example, if the moment of inertia needs to be
                                        defined around the principal axes of the body, then
                                        additional information must be supplied to define the
                                        principal axes. To do this you must define any two unit
                                        vectors of the principal axes and a third vector is
                                        calculated by the code. The coordinates must be specified
                                        with respect to the global axes. | ||
| mom_principal_ax_x_i | Unit vector in the X-direction of the principal axis. This is a vector value, for example “1.0 0 0” implies the principal axis is aligned with the global X-axis in this case. | |
| mom_principal_ax_y_i | Unit vector in the Y-direction of the principal axis. This is a vector value, for example “0.0 1.0 0” implies the principal axis is aligned with the global Y-axis in this case. | |
| mom_principal_ax_z_i | Unit vector in the Z-direction of the principal axis. This is a vector value, for example “0 0 1.0” implies the principal axis is aligned with the global Z-axis in this case. | |
| Important: With the above rigid body related
                                        commands, you can simulate a freely moving rigid body that
                                        is interacting with the fluid. However, additional options
                                        are available to constrain motion and add linear or
                                        torsional springs with the following commands. Unless
                                        another coordinate system is defined for the constraints
                                        (constraint reference frame), the code assumes constraint
                                        alignment with the global axes. If this is not the case, if
                                        some of the constraints are under angles, then the
                                        constraint reference frame must be defined by specifying any
                                        two unit vectors. The coordinates must be specified with
                                        respect to the global axes. | ||
| prbcon_ax_x_i | Unit vector in the X-direction of the constraint axis. This is a vector value, for example “1.0 0 0” implies the X-axis of the constraint frame is aligned with the global X-axis in this case. | |
| prbcon_ax_y_i | Unit vector in the Y-direction of the constraint axis. This is a vector value, for example “0.0 1.0 0” implies the Y-axis of the constraint frame is aligned with the global Y-axis in this case. | |
| prbcon_ax_z_i | Unit vector in the Z-direction of the constraint axis. This is a vector value, for example “0 0 1.0” implies the Z-axis of the constraint frame is aligned with the global Z-axis in this case. | |
| Important: Once the constraint reference frame has
                                        been defined, you can proceed to defining the constraints
                                        themselves. If you want to lock linear or angular
                                        degrees-of-freedom you can use the following. | ||
| prbcon_linlck_c | This is a vector value that defines which of the linear
                                    motions will be locked. Options 
 Tip: For example, “1.0 0 0” locks the
                                        linear motion in the X-direction of the constraint
                                        frame. | |
| prbcon_anglck_c | This is a vector value that defines which of the angular
                                    motions will be locked. Options 
 Tip: For example, “1.0 0 0” locks the
                                        angular motion around the X-direction of the constraint
                                        frame. | |
| Important: Define linear and torsional springs using
                                        the following commands. | ||
| prbcon_linspr_k_c | Linear spring stiffness coefficient. This is a vector value. | [N/m] | 
| prbcon_linspr_p_c | Pre-deformation distance with respect to the initial (equilibrium) position. This is a vector value. | [m] | 
| prbcon_angspr_k_c | Torsional spring stiffness coefficient. This is a vector value. | [Nm/rad] | 
| prbcon_angspr_p_c | Pre-deformation angle with respect to the initial (equilibrium) position. This is a vector value. | [rad] | 
| prbcon_lindmp_c_c | Linear damping coefficients along the corresponding constraint axis. Inactive when pinned. | [Ns/m] | 
| prbcon_angdmp_c_c | Torsional damping coefficients around the corresponding constraint axis. | [Nms/rad] | 
| Important: It is often necessary to set the limits
                                        of motion, such that the constrained body would not go
                                        beyond a certain distance or beyond a certain angle value.
                                        Set limits with the following commands. | ||
| prbcon_linlim_pls_c | Allowed upper limit coordinate of the linear motion with respect to the init_CoM. This is a vector value (to specify all three directions in the constraint reference frame). | [m] | 
| prbcon_linlim_mns_c | Allowed lower limit coordinate of the linear motion with respect to the init_CoM. This is a vector value (to specify all three directions in the constraint reference frame). | [m] | 
| prbcon_anglim_pls_c | Allowed upper limit angle of the rotational motion with respect to the initial position. This is a vector value (to specify all three directions in the constraint reference frame). | [rad] | 
| prbcon_anglim_mns_c | Allowed lower limit angle of the rotational motion with respect to the initial position. This is a vector value (to specify all three directions in the constraint reference frame). | [rad] | 
| Important: A special case of limited motion is a
                                        hinge whose center of rotation is not the center of mass
                                        (axis of rotation does not pass through the center of mass).
                                        In this situation the axis of rotation needs to be
                                        specified, which can be done by translating the constraint
                                        reference frame to a new position and by modifying the
                                        rotational lock command. | ||
| prbcon_pt_i | Specified by the new origin of the constraint frame and defined in the global coordinate system. This is a vector value. | |
| prbcon_ax_hinge_c | Since the rotations are now moved away from the center of
                                    mass, new rotational constraints must be set in place. This is a
                                    vector value that defines which of the angular motions will be locked. Options 
 Tip: For example, “1.0 0 0” unlocks
                                        only the angular motion around the x direction of the
                                        constraint frame. By setting all three values to zero, one
                                        enables a spherical joint behavior. CAUTION: Overrides the
                                            prbcon_anglck_c
                                    command. | |
| prbcon_cnstfrc_c | A constant force applied in constraint frame. Note: Inactive if the motion is pinned in the given
                                        direction. | [N] | 
| prbcon_cnsttrq_c | A constant torque applied in constraint frame around a X, Y
                                    and Z axes. Note: Inactive if the motion is pinned in
                                        the given rotation. | [Nm] | 
| prbcon_linvel_ctoi | Set this command to true to keep constraint frame stationary,
                                    set to false to rotate constraint frame with body frame. Note: Applies only to the
                                            prbcon_linvel
                                    constraint. | |
| prbcon_linvel_a_c | Set any element to a positive number to activate the preset time dependent linear velocity for that constraint axis. | [m/s] | 
| prbcon_linvel_f_c | Name of a 4-column file (t,u,v,w) for preset time dependent
                                    linear velocity applied in constraint frame. Note: Inactive for all pinned motion directions. | [m/s] | 
| prbcon_angvel_ctoi | Options 
 Note: Applies only to
                                            prbcon_angvel
                                    constraint. | |
| prbcon_angvel_a_c | Set any element to a positive number to activate the preset time dependent linear velocity for that constraint axis. | [Rad/s] | 
| prbcon_angvel_f_c | Name of a 4-column file (
                                            
                                        ) for preset time dependent
                                    linear velocity applied in constraint frame. Note: Inactive for
                                        all pinned motion directions. | [Rad/s] | 
DOUBLE_ROLLER_1DOF Commands
| Command | Contents | SI Unit Example | 
|---|---|---|
| dr1dof_bod_phs | List of phases associated with the body in form of a vector (space separated and under quotation marks). | |
| dr1dof_frw_phs | List of phases associated with the front wheels (space separated and under quotation marks). | |
| dr1dof_bck_phs | List of phases associated with the rear wheels (space separated and under quotation marks). | |
| dr1dof_drvr_frwbck | Optional command that specifies if the vehicle is rear drive
                                    or front drive Options 
 | |
| dr1dof_bod_cgpnt | Optional command that defines a reference point on the
                                    vehicle body which would later be used for post-processing. This
                                    does not have any impact on the motion definition. Default = "0.0 0.0 0.0" | [m] | 
| dr1dof_frw_axpnt | A reference point on the line passing through the front wheel axle and parallel to Y-axis | [m] | 
| dr1dof_bck_axpnt | A reference point on the line passing through the rear wheel axle and parallel to Y-axis | [m] | 
| dr1dof_whl_rd | Defines the wheel radius. It must be a positive number | [m] | 
| dr1dof_vel_init | Initial velocity of the center of the driving wheel Note: This
                                        command is optional. Default = 0.0 | [m/s] | 
| dr1dof_vel | Determines the velocity of the vehicle. Set this command to false to rotate constraint frame with body frame. | [Rad/s] | 
| dr1dof_time_start | Starting time of the motion Note: This command is
                                        optional. Default = 0.0 | |
| dr1dof_time_rampup | Ramp-up duration of the motion (after which the vehicle
                                    reaches desired velocity). Note: This command is
                                        optional. Default = 0.0 | |
| dr1dof_time_rampdn | Ramp down duration of the motion (after which the vehicle
                                    comes to a halt). Note: This command is
                                        optional. Default = 0.0 | |
| dr1dof_time_end | Ending time of the motion Note: This command is
                                        optional. Default = End time of the simulation | |
| dr1dof_rd_pth_ply | Arc length coefficient (arc length is equal to
                                        dr1dof_rd_pth_ply*dx).
                                    The arc is used to connect any two lines in the path
                                        definition. Note: This command is optional. Default = 2.0 | |
| dr1dof_rd_pth_file | Relative or absolute path to the file containing the two-column (X Z) piecewise linear road path (the road path Z must be a function of road path X, that is, X values must be strictly increasing). The vehicle will follow the specified road. | |
| dr1dof_tvs_file | Relative or absolute path to the file containing
                                    time-velocity series (.tvs) data. The
                                        .tvs file has a two column space
                                    delimited format with the first column specifying time values in
                                    a strictly increasing order, while the second column specifies
                                    the driving wheel axis signed velocity magnitude along the road.
                                    It is possible to specify any positive or negative value as well
                                    as zero in any order in the second column of the
                                        .tvs file. Note: 
                                         
 | 
- Only two axles are supported.
- All wheels must have the same radius.
- The wheels always follow the road.
- This motion is not stackable (no ability to super-pose double roller motion with any other motion).
- The wheel rotation axes must be parallel to Y-axis.
- Only constant driver wheel axis velocity is supported.
- Initial position of driver and driven wheels must be within the first line segment.
- Two consecutive road segments may not have the same normal (there has to be an angle between two segments).
- Road path is a two column file of the X Z form.
- Road path must contain at least one line segment (two X Z pairs).
- Road path X-coordinates must be strictly increasing.
DOUBLE_ROLLER_3DOF Commands
| Command | Contents | SI Unit Example | 
|---|---|---|
| dr3dof_bod_phs | Phase or list of phases that follow the body motion. If more
                                    than one phase was specified, the list should be enclosed in
                                    quotation marks, start with a number and end with a number. The
                                    list separator is space. Tip: For example, "1 10 2 6
                                        5". No default (Multi element integer) | |
| dr3dof_frw_phs | Phase or list of phases that follow the front wheel motion.
                                    If more than one phase was specified, the list should be
                                    enclosed in quotation marks, start with a number and end with a
                                    number. The list separator is space. Tip: For
                                        example, "4 7". No default (Multi element integer) | |
| dr3dof_bck_phs | Phase or list of phases that follow the rear wheel motion. If
                                    more than one phase was specified, the list should be enclosed
                                    in quotation marks, start with a number and end with a number.
                                    The list separator is space. Tip: For example,
                                        "8". No default (Multi element integer) | |
| dr3dof_drvr_frwbck | Options 
 Default = reardrive (Predefined) | |
| dr3dof_bod_cgpnt | Center of mass of the body phases and reference point used
                                    for calculating moments on the body phases. This is the internal
                                    center of rotation though apparent center of rotation may be
                                        different. Default = "0.0, 0.0, 0.0" (Three element float) | |
| dr3dof_bod_ms | Total mass of the body phases No default (Float) | |
| dr3dof_bod_iyy | Mass moment of inertial of combined body phases about Y No default (Float) | |
| dr3dof_frw_ms | Combined front wheel mass. Only used when
                                        dr3dof_ptch_mod is active and ignored
                                        otherwise. Default = 0.0 (Float) | |
| dr3dof_bck_ms | Combined rear wheel mass. Only used when
                                        dr3dof_ptch_mod is active and ignored
                                        otherwise. Default = 0.0 (Float) | |
| dr3dof_frw_ks | Effective front wheel spring constant. A positive value is
                                        recommended. No default (Float) | |
| dr3dof_bck_ks | Effective rear wheel spring constant. A positive value is
                                        recommended. No default (Float) | |
| dr3dof_frw_cs | Effective front wheel damping coefficient. A positive value
                                    is recommended. No default (Float) | |
| dr3dof_bck_cs | Effective rear wheel damping coefficient. A positive value is
                                        recommended. No default (Float) | |
| dr3dof_frw_axpnt | Coordinates of a point passing through the front axis of the
                                    motion. This point is used as a reference point for calculating
                                    moments on the front wheel phases. No default (Three element float) | |
| dr3dof_bck_axpnt | Coordinates of a point passing through the rear axis of the
                                    motion. This point is used as a reference point for calculating
                                    moments on the rear wheel phases. No default (Three element float) | |
| dr3dof_whl_rd | Wheel radius. Must be a positive number. No default (Float) | |
| dr3dof_bod_eqlb | Adjustment of position and angle of the body by "Z ANG" in
                                    case the initial configuration is not in equilibrium. This
                                    adjustment does not introduce perturbation. The body is
                                    translated by Z [m] in the Z-direction and is rotated by ANG
                                    [deg] about the driver axis. Default = "0.0 0.0" (Two element float) | |
| dr3dof_bod_reffrm | Options 
 Default - false (Boolean) | |
| dr3dof_ptch_mod | Options 
 Default - false (Boolean) | |
| dr3dof_bod_z_1dofcon | Constrain body Z-position by equivalent 1DoF motion in
                                        meters. In combination with dr3dof_bod_a_1dofcon, it has a similar effect to limiting stretch/compression of the suspension. Set the first element to a positive number to activate, for example, "1 X Y". Or set to a non-positive number to deactivate, for example, "0 X Y". Once active, the second element is the allowed positive deviation and the third element is the allowed negative deviation. The body is not allowed beyond the deviation range. For example, when set to "1 0.02 -0.05", the body may go 0.02 m further up and 0.05 m further down compared to equivalent 1DoF motion in Z-direction. A positive number for the second element and a negative number for the third element is recommended, but is not necessary. Default = "0.0 0.0 0.0" (Three element float) | |
| dr3dof_bod_a_1dofcon | Constrain body the Y-angle by equivalent 1DoF motion in
                                        degrees. In combination with dr3dof_bod_z_1dofcon, it has a similar effect to limiting stretch/ compression of the suspension. Set the first element to a positive number to activate, for example, "1 X Y". Or set to a non-positive number to deactivate, for example, "0 X Y". Once active, the second element is the allowed positive deviation and the third element is the allowed negative deviation. The body is not allowed beyond the deviation range. For example, when set to "1 5 -2", the body may deviate by 5 degrees in positive Y (clockwise) and 2 degrees in negative Y (counter clockwise) direction from equivalent 1DoF motion. A positive number for the third element is recommended, but is not necessary. Default = "0.0 0.0 0.0" (Three element float) | |
| dr3dof_fld_react_freq | Frequency of sampling fluid force and torque on the body
                                    phases. The force and torque will remain constant in between
                                    sampling points. Set to a non-positive value to
                                        deactivate. Default = 0 (Integer) | |
| dr3dof_tvs_file | Relative or absolute path to the file containing
                                    time-velocity series data. When defined, takes precedence over
                                        dr3dof_vel_init, dr3dof_vel,
                                        dr3dof_time_rampup and/ or
                                        dr3dof_time_rampdn. Note: Relative path is
                                        preferred over absolute path due to
                                        portability. (String) | |
| dr3dof_vel_init | Initial signed velocity magnitude of the driving wheel axis
                                    along the road. Ignored when dr3dof_tvs_file is
                                        present. Default = 0.0 (Float) | |
| dr3dof_vel | Signed velocity magnitude of the driving wheel axis along the
                                        road. Note: Ignored when dr3dof_tvs_file
                                        is present. Default = 0.0 (Float) | |
| dr3dof_time_rampup | Time duration to ramp from dr3dof_vel_init
                                    to dr3dof_vel. The ramp starts at
                                        dr3dof_time_start and ends at
                                        dr3dof_time_start +
                                        dr3dof_time_rampup. Note: Ignored when
                                            dr3dof_tvs_file is
                                        present. Default = 0.0 (Float) | |
| dr3dof_time_start | Start time of the motion Default = 0.0 (Float) | |
| dr3dof_time_end | End time of the motion Default = t_end (Float) | |
| dr3dof_time_rampdn | Time duration to ramp from dr3dof_vel to
                                        dr3dof_vel_init. The ramp starts at
                                        dr3dof_time_end -
                                        dr3dof_time_rampdn and ends at
                                        dr3dof_time_end. Ignored when
                                        dr3dof_tvs_file is present. Default = 0.0 (Float) | |
| dr3dof_rd_pth_ply | A coefficient to determine the arc length as
                                    dr3dof_rd_pth_ply*dx. An approximate arc length is then used to
                                    construct a circular piece to connect the road pieces with a
                                    topside angle of more than 180 degrees after
                                        elevation. Default = 2.0 (Float) | |
| dr3dof_rd_pth_file | Relative or absolute path to a file containing the two-column
                                    (X Z) piecewise linear road path. The road path Z must be a
                                    function of road path X, for example, X-values must be strictly
                                        increasing. No default (String) |