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.
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}
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
}
...
}
- phase_motion
- The following motion is applied to this phase number.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.
- freq_unit
- Defines which unit will be used to specify rotational frequencies for this motion.
- impose_vel
- For motion_type = IMPOSE_VEL
- 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 equal tstart_prescribe.
- 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.
- rot_freq
- For motion_type= ROTATE
- rot_freq_init
- For motion_type= ROTATE
- rot_cntr
- For motion_type= ROTATE and ROTATE_AXIS
- rot_axis
- For motion_type= ROTATE_AXIS
- rot_axis_freq
- For motion_type= ROTATE_AXIS
- rot_axis_freq_init
- For motion_type= ROTATE_AXIS
- positionFile
- The name of the file that contains the prescribed motion information.
- 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.
- isOrientation
- If this switch is set to false, the code looks for a 7-column format input, reading the rotational velocity vectors. If it is set to true, the code looks for an 8-column format, which defines cosine values of the axis vector and the orientation scalar (in radians).
- orbit_cntr
- Defines the planetary carrier center location.
- orbit_radius
- Distance between the orbit_cntr and the planet gear center (initial_centerOfDayRotation).
- year_rotationVec
- Axis of year rotation.
- year_frequency
- Frequency of the year rotation.
- year_frequency_init
- In case that the case is a restart you can specify initial year frequency of rotation. With this you can start from, for example, 1000 RPM to an arbitrary RPM.
- day_rotationVec
- Axis of day rotation.
- day_frequency
- Frequency of the day rotation.
- day_frequency_init
- In case that the case is a restart you can specify initial day frequency of rotation. With this you can start from, for example, 1000 RPM to an arbitrary RPM.
- initial_centerOfDayRotation
- Initial coordinates of the planetary gear for which the motion is defined.
- oscill_ampl
- Amplitude of the oscillatory motion.
- oscill_freq_init
- Initial frequency of the oscillating motion.
- oscill_freq
- Frequency of the oscillating motion.
- oscill_phaseshift
- Initial phase shift along the cosine function, for example, which defines the initial piston position.
- phase_piston
- CONROD motion is the only motion that defines the motion for two phases at a time – the piston and the conrod phase.
- phase_conrod
- 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).
- crankshaft_rot_freq_init
- Initial rotational frequency of the crankshaft, in case of a restart.
- 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 crankshaft axis unit vector (careful with the sign, try the opposite direction if not working).
- crankshaft_phaseshift
- This command defines the initial angular position (phaseshift) of the particular conrod/piston pair with respect to the crankshaft_normal direction.
- crankshaft_rad
- This defines the radius of the crankshaft; the distance between the crankshaft axis and the conrod-crankshaft connection center.
- conrod_length
- Defines the length of the conrod; the distance between the conrod-crankshaft and conrod-piston connections.
- piston_offset
- Positive or negative offset in the direction of crankshaft_axis x crankshaft_normal (cross product).
- max_dist
- max_dist command 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 help calculate the reference velocity.
- 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.
- init_CoM
- Initial location of the center of mass.
- init_vel
- Initial linear velocity of the rigid body.
- init_angvel
- Initial angular velocity of the rigid body.
- mom_inert_diag
- Diagonal components of the moment of inertia around the global x, y and z axes. For more details see Motion: PASSIVE_RIGID_BODY).
- mom_inert_offdiag
- Off-diagonal components of the moment of inertia around the global x, y and z axes. For more details see Motion: PASSIVE_RIGID_BODY).
- mom_principal_ax_x_i
- Unit vector in the x direction of the principal axis (for more details see Motion: PASSIVE_RIGID_BODY).
- mom_principal_ax_y_i
- Unit vector in the y direction of the principal axis (for more details see Motion: PASSIVE_RIGID_BODY).
- mom_principal_ax_z_i
- Unit vector in the z direction of the principal axis (for more details see Motion: PASSIVE_RIGID_BODY).
- prbcon_ax_x_i
- Unit vector in the x direction of the constraint axis (for more details see Motion: PASSIVE_RIGID_BODY).
- prbcon_ax_y_i
- Unit vector in the y direction of the constraint axis (for more details see Motion: PASSIVE_RIGID_BODY).
- prbcon_ax_z_i
- Unit vector in the z direction of the constraint axis (for more details see Motion: PASSIVE_RIGID_BODY).
- prbcon_linlck_c
- This is a vector value that defines which of the linear motions will be locked.
- prbcon_anglck_c
- This is a vector value that defines which of the angular motions will be locked.
- prbcon_linspr_k_c
- Linear spring stiffness coefficient.
- prbcon_linspr_p_c
- Pre-deformation distance with respect to the initial (equilibrium) position.
- prbcon_angspr_k_c
- Torsional spring stiffness coefficient.
- prbcon_angspr_p_c
- Pre-deformation angle with respect to the initial (equilibrium) position.
- prbcon_lindmp_c_c
- Linear damping coefficients along the corresponding constraint axis.
- prbcon_angdmp_c_c
- Torsional damping coefficients around the corresponding constraint axis.
- prbcon_linlim_pls_c
- Allowed upper limit coordinate of the linear motion with respect to the init_CoM.
- prbcon_linlim_mns_c
- Allowed lower limit coordinate of the linear motion with respect to the init_CoM.
- prbcon_anglim_pls_c
- Allowed upper limit angle of the rotational motion with respect to the initial position.
- prbcon_anglim_mns_c
- Allowed lower limit angle of the rotational motion with respect to the initial position.
- prbcon_pt_i
- This command is specified by the new origin of the constraint frame.
- prbcon_ax_hinge_c
- Because the rotations are now moved away from the center of mass, new rotational constraints need to be set in place.
- prbcon_cnstfrc_c
- A constant force applied in constraint frame.
- prbcon_cnsttrq_c
- A constant torque applied in constraint frame (around a X, Y and Z axes).
- prbcon_linvel_ctoi
- Set this command to true to keep constraint frame stationary, set to false to rotate constraint frame with body frame.
- prbcon_linvel_a_c
- Set any element to a positive number to activate the preset time dependent linear velocity for that constraint axis.
- prbcon_linvel_f_c
- Name of a 4-column file (t,u,v,w) for preset time dependent linear velocity applied in constraint frame.
- prbcon_angvel_ctoi
- Set this command to true to keep constraint frame stationary.
- prbcon_angvel_a_c
- Set any element to a positive number to activate the preset time dependent linear velocity for that constraint axis.
- prbcon_angvel_f_c
- Name of a 4-column file ( ) for preset time dependent linear velocity applied in constraint frame.
- 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
- This command is optional
- dr1dof_bod_cgpnt
- This command is optional.
- dr1dof_frw_axpnt
- A reference point on the line passing through the front wheel axle and parallel to Y axis.
- dr1dof_bck_axpnt
- A reference point on the line passing through the rear wheel axle and parallel to Y axis.
- dr1dof_whl_rd
- This command defines the wheel radius.
- dr1dof_vel_init
- This command is optional.
- dr1dof_vel
- This command determines the velocity of the vehicle.
- dr1dof_time_start
- This command is optional.
- dr1dof_time_rampup
- This command is optional.
- dr1dof_time_rampdn
- This command is optional.
- dr1dof_time_end
- This command is optional.
- dr1dof_rd_pth_ply
- This command is optional.
- dr1dof_rd_pth_file
- Relative or absolute path to the file containing the two-columng (X Z) piecewise linear road path (the road path Z must be a function of road path X, i.e. X values must be strictly increasing).
- 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.