Short
Documentation on the Usage of the HOTINT multibody simulation code
HOTINT V 0.900 beta
June
2007
DI Dr. Johannes Gerstmayr
2.1 History and background information
2.2 Instructions for installing HOTINT
on a MS-Windows computer
3 HOTINT
Windows User Interface
3.3 HOTINT main application window
4.1.1 General edit fields in all elements (rigid
body and connector)
4.2.1 Rigid body Inertia computation mode
4.7.2 Prescribed Coordinate Constraint
4.7.4 Rotational Spring Damper Actuator
4.8.1 Add Generalized Coordinate Load
4.9.1 Local Degree of Freedom Sensor
5.3 Finite Element Drawing Options
5.4 Rigid Body / Joint Options
5.6.1 Time Integration Settings
5.6.3 Static Computation Settings
7.2 Main structure of the multibody
kernel
7.3 The dynamic solver – implicit time
integration
7.4 The static solver – incremental
loading
7.6 Nodes for Direct Connection of
Finite Elements
7.9 Geometric Elements for Bodies with
Complex Geometry
The code HOTINT is a research multibody code which
evolved during the development of improved algorithms for flexible multibody
system, the testing of new elements and time integration methods. The solution
methods for the code have been developed since the diploma thesis of the main
developer (1997). At that time, the base classes for solving static problems
have been written. Later on, time integration methods have been developed for
the accurate solution of large-scale flexible and discontinuous multibody
systems within several research projects. The actual multibody code has its
origin in October 2004, when a general purpose kernel for elements has been
combined with a time integration library based on the developments so far. The
code grew fast and it is worth mentioning that most of the multibody core has
been developed during night-work. While the theoretical foundation of such as
the higher order time integration (currently not available) or the ANCF beam
and plate elements have been funded by research grants of the FWF and the
Austrian Academy of Sciences, the code itself (multibody code and the windows
interface) has been developed in privately funded night and weekend work.
From the research point of view, the code has
been used to derive and test flexible beam and plate elements based on the
absolute nodal coordinate formulation. Later on, the floating frame of
reference concept has been included as well as the component mode synthesis
method.
The code grew fast and in its current state,
the code has about 120.000 lines (this is quite short due to the object oriented structure). The
code consists mainly of the multibody kernel, the solver and linear algebra
kernel, and the graphics and user interface.
At the present state, only a small part of the
multibody kernel is accessible via the windows user interface. The main
flexible elements, special joints and some of the time integration capabilities
are not yet available. However, a rapid extension is expected during the next
months, thus a regular update is recommended.
At the moment is not guaranteed that the
structure of the multibody system files (.mbs) or the solution files is preserved
within later versions!
You need a program like Winzip in order to
extract the files of the .zip file and copy it to a folder of your choice, e.g.
“c:/program files/HOTINT”. The .zip file contains important subfolders such as
“output” for storing output variables, and “examples” that contain some
multibody models, which should not be erased.
A desktop link to Hotint.exe should be created
manually by selecting the program in the Windows-explorer and dragging it with
“Shift+Ctrl” to the desktop, the windows taskbar or the start menu.
The program is started by double-clicking on
Hotint.exe
Some parts of the code call Matlab functions
which have been tested with Matlab R6.5.2. At the moment, only the eigen-value
solver is called for solving the static and dynamic eigen-modes in the component
mode synthesis (currently not available in windows version) and the Matlab plot
function is called for plotting the results of sensors.
The Program starts with an empty multibody
model. The best way to experience the capabilities of HOTINT is to load one of
the examples included in the subfolder “examples”.
The 3D graphics window is used to visualize the
multibody model by user-defined representation of the bodies, joints and
forces. The graphical representation might be a simplification of the
parameters used to perform the dynamical simulation.
Rotation: Press the right mouse button and
move up/downwards and left/right to rotate the model.
Zooming: Use the scroll wheel to zoom in /
out or press the right mouse button and “Shift” and move up/downwards.
Zoom selection: Use “Shift” and the left mouse
button and select a rectangle to be zoomed into.
Moving: Press the left mouse button to move
the model on the screen.
Perspective: Press the right mouse button,
“Shift” and “Ctrl” and move up/downwards to change the distance of the camera
to the object in order to change its perspective (the closer you zoom, the more
distorted it gets).

The main HOTINT
window is used to load, save and edit models, start the computation, modify
computation parameters and viewing settings. After a computation the results
can be either plotted or animated.

The
‘Computation Output’ window is used to print important messages, show computation
results, the computation state, computation background information (e.g. number
of Newton iterations), error and warning messages.
The following buttons are available in the main view in HOTINT:
/
Start/Pause computation of multibody
system
Open viewing options dialog
Open the recently opened
multibody system file
Enable/Disable
rotation of model – for planar examples
Zoom whole model
Show x-y plane
Show x-z plane
Show y-z plane
Show User defined
view 1 (see viewing options)
Choose / hide axes
position
Automatic rotation
Save single image,
directory is specified in record frames dialog
Open the record
frames dialog in order to capture a series of
images for an animation
Open,
Save files. Open recent file. Exit application
X-Y / X-Z / Y-Z View
X-Y plane, etc.
Default View1 Select
the default viewing orientation, chosen from the viewing options
Show data manager Open
dialog in order to view the results of the computation and to start an
animation of the results
Show output window Show
the output window which reports important information errors during the
computation and modeling
Viewing options Open
the viewing options dialog: configure redrawing, animation settings, grid
(raster), standard view
OpenGL options Set the options for OpenGL 3D
graphics: define lights positions and intensities, transparency, shading model
and lighting
FE drawing options Dialog
mainly to change settings for finite elements: Contour-iso plots, color/grey
mode, shrinking factor, stress-type, tiling, resolution, line thickness
Body / joint options Used
to configure the user-input and drawing of bodies and joints: Rotation input
mode, show body number, body frame, body transparency.
Show joints, joint transparent and joint number
Edit Element Properties Edit
the properties of all elements: rigid bodies, flexible bodies (finite
elements), connectors
Delete Element Delete
a body / connector. Note that if a body is deleted, all dependent constraints
are deleted as well. All body numbers are reordered. The body numbers in
connectors, sensors and GeomElements are reordered
Edit Sensor Edit
a sensor
Delete Sensor Delete
a sensor. All sensor number larger than the deleted sensor are reordered. All
sensor numbers used in elements (e.g. in a controller) are NOT corrected. This
might be changed in future versions
Edit GeomElement Edit
a geometric element
Delete GeomElement Delete
a geometric element. All geometric
element numbers used in elements are reordered accordingly
Edit Node Edit
the properties of a node
Delete Node Delete
a node
Add Body Add
rigid or flexible body (beam, finite element)
Add Connector
®
2D Joint Add a 2D joint
(position, angle joint)
®
3D Joint Add a 3D joint
(spherical, revolute, universal, prismatic, rotational, sliding, etc.)
®
Special Connector Add a special connection element.
Connectors are all such elements which connect two or more elements or one
element with the ground by implying constraints or forces: coordinate
constraint, prescribed coordinate, spring-damper-actuator (SDActor),
spring-damper-rotational-actuator (SDRotActor), hydraulic actuator, controller
Add Load Add
a load to a rigid or flexible body: generalized coordinate load, body load,
force vector, moment vector
Add Node Add
a node for finite elements
Add Sensor Add
a sensor in order to measure quantities of the computation: DOF sensor,
position sensor, angle sensor, distance sensor, deflection sensor, multiple
sensor
Add GeomElement Add
a geometric element to a body (preferably to rigid bodies): mesh, mesh imported
from STL file, cylinder, sphere, cube
Show System Properties Show
some of the properties of the actual multibody system (number of elements,
number of coordinates, constraints, etc.)
Verify System Check
some of the system properties such as if all element, constraint, sensor and geometric
element references are valid. Check if constraint and sensors are only attached
to valid bodies, etc.
Assemble System Assign
global degrees of freedom to local (element) degrees of freedom and resort
constraints such that the resulting system of equations has a small band-width.
Compute Initial Vector Call
all elements to write the element initial conditions to the global vector of
unknowns as starting conditions for the time integration or the static solver
Reset Simulation The
call to this function is necessary to set the system back to its initial state
when it was built. This function is called every time an element is added,
removed or changed. The function includes:
· Restore
to initial vector stored in elements
· Reset starting
time to t=0
· Remove
all output from data manager
· Assemble
the system
· Fit
the model onto the screen
Start Simulation Run
the simulation from the starting time till the end time using the settings
defined in the Computation Settings
Stop Simulation Terminate
the simulation
Pause Pause
the computation which can be continued later
Load Initial Vector Load
a solution vector, which defines the initial conditions of the system, from a
file. This vector can be smaller than the actual vector of initial unknowns,
e.g. only initial positions can be loaded, while the initial velocities are
used from the initial conditions define in the element
Store Solution Vector Store
the solution at the actual time instance into a file
Print CPU Statistics Prints
the approximate usage of CPU power for single parts of the multibody simulation
(mass matrix, elastic forces, residual, linear solver, Jacobian, etc.)
Computation Settings Open
a dialog to manipulate the settings for the time integration (step size,
method, tolerances, etc.) and the settings for writing the results of sensors
Plot Sensor Load
the file output of a sensor into MATLAB and plot the results versus time
Sensor Watch Open
a small window that shows the actual value of a sensor
Enable Output Enable
output written into the output window. The output can be deactivated in order
to reduce the computation time for writing into the edit window. This might be
especially advantageous for very long simulations
Show Static Output Show
the output in a separate window which does not update and can be used to
analyze the output during the computation
After an
element, sensor, GeomElement or node has been added, it can be modified in the
same way as when added the first time. Therefore, only the function for adding
an object is described in the following.
Element_number This
is the internal number of the element. Bodies and connectors are treated
internally as an element and thus get its own consecutively ordered element
number.
Element_info This
info shows the information about the internal degrees of freedom used
representing second order ordinary differential equations (ODEs), first order
ODEs and algebraic equations (AE).
Element_name The
name is stored for each element. A default name is chosen according to the
elements properties. The name does not need to be unique, but can help to
identify an element for editing purposes.
RGB_color The
color defines the red, green and blue part of the color. The values must be in
the range [0…1].
Add Object ®
Add Body ® Rigid3D

A rigid
body undergoing spatial motion needs a mass and a symmetric inertia tensor in
order to describe its dynamics. The mass and inertia terms can be either edited
directly by values or on basis of a rectangular shaped block with
XYZ-dimensions or by computation from the GeomElement geometry which can be
attached to each rigid body. The next time the element is edit, the inertia
values are updated.
Note that a
Rigid3D body leads to 7 second order differential equations and one algebraic
equation. The structure of the vector of generalized coordinates (i.e. unknowns)
is:
![]()
where px, py, pz
is the position of the center of mass, b1, b2, b3, b4 are the
Euler parameters, a dot above the symbol means the time derivative and l is the Lagrange multiplier for the constraint
added for the Euler parameters. These coordinates are e.g. accessible via the
Local_DOF_sensor.
For general
element information see Section 4.1.1.
Use_alternative_shape Checked
= the element is drawn according to the alternative representation given by the
Geom_elements.
Geom_elements Reference
numbers of GeomElements that define the alternative shape of the body. The
GeomElements can be used to both define a realistic shape of the body and to
compute the mass and inertia terms for a general 3D body.
Density density
= ratio representing mass per volume. The density always needs to be specified
in order that the element performs properly. E.g. the volume is defined by the
mass divided by the density. The mass and inertia terms can be auto-computed
via the density
Mass Represents
the total mass of the body. This value can be auto-computed from the shape of
the body
Moment_of_inertia Represents
the diagonal entries of the tensor of inertias. These values can be
auto-computed from the shape of the body
Product_moment_of_inertia Represents
the off-diagonal entries of the tensor of inertias. These values can be
auto-computed from the shape of the body
Body_dimensions The
X,Y and Z extension of the rectangular block (cube) that defines the body. The
dimensions are given for the body frame, which allows to treat arbitrary blocks
in space using the initial rotation of the body.
Initial_position Initial
position of the center point of the body
Initial_velocity Initial
velocity of the center point of the body
Initial_Euler_angles / Initial_angles_XYZ /
Initial_Euler_parameters:
Initial_Euler_angles The
values that define the initial rotations of the rigid body by 3 rotations rot1,
rot2 and rot3. The body is rotated first by an angle rot3 with respect to the
Z-axis, then by an angle rot2 w.r.t. the X-axis and finally by an angle rot1
w.r.t. the Z-axis. When moving the mouse pointer across the edit fields, the
tooltips show whether degrees or radiant are used. The rotation matrix of the
body is A_z(rot1)*A_x(rot2)*A_z(rot3)
Initial_angles_XYZ The
values that define the initial rotations of the rigid body by 3 rotations rot1,
rot2 and rot3. The body is rotated first by an angle rot3 with respect to the
Z-axis, then by an angle rot2 w.r.t. the Y-axis and finally by an angle rot1
w.r.t. the X-axis. When moving the mouse pointer across the edit fields, the
tooltips show whether degrees or radiant are used
Initial_Euler_parameters These
values define the initial rotation of the rigid body by means of 4 redundant
values. For more information on Euler parameters or quaternions, see standard
literature in kinematics or multibody system dynamics
Initial_angular_velocity Initial
angular velocity of the body
Inertia_from_dimension Compute
mass and inertia terms from the body dimensions representing a rectangular
block with XYZ-extensions. The mass moment of inertia terms are computed for
the center of mass of the rectangular block.
Inertia_from_GeomElem Compute
mass and inertia terms from the GeomElement. E.g. the STL mesh that can be
imported from other CAD programs can be used to compute mass and inertia terms
for complex-shaped bodies. This only works for bodies that have one GeomElement
Use_inertia_values This
option uses the entered mass and inertia values independent of the shape of the
body.
After the
rigid body has been added, the values are initialized. If the flag ‘Inertia_from_dimension’
is activated, the mass and moment of inertias are computed from the geometry
according to a rectangular block with body dimensions and density. The edit
dialog for the above example gives:

Add Object ®
Add Body ® Mass3D

A 3D mass
is used to add a point mass to the multibody system. The mass only has a
position but no rotation. A point mass can be used to model planets and stars,
granular material or to add mass at specific points of the model.
The
dynamics of the mass is influenced only by the mass. The radius needs to be
specified for drawing purposes and for the calculation of the volume (the
volume results according to the size of the sphere). The volume is needed e.g.
in the case of body loads. The density is ignored and automatically computed
from the mass and radius.
For general
element information see Section 4.1.1 and the Rigid 3D body.
Density The
density is automatically computed. This field is inherited from the general 3D
body and will show you the density when opening the edit dialog of the mass
Mass The
mass defines the mass used in the computation
Radius The
radius is used to compute the volume and thus it influences the body loads
Draw_resolution The
number of flat quads that are used to approximate the sphere in longitude and
altitude direction
Add Object ®
Add Body ® ANCFBeam

The ANCF
beam element is a spatial beam element according to the absolute nodal
coordinate formulation. It is recommended to look into the scientific
literature to get more information about this element. The element will only
show good performance in the case of the ‘Elastic_line_model’, otherwise the
element shows considerable locking for the case of Poisson ratio unequal zero,
or for very thin elements.
It is
recommended to use the ANCF beam element with caution, it needs to improved in
future versions of the code.
For general
element information see Section 4.1.1 and the Rigid 3D body.
Density Density
of the beam
Youngs_modulus Young’s
modulus, defines the stiffness of the material. In the elastic line model this
parameter is only used for the drawing of stresses.
Possion_ratio The
Poisson ratio defines the ratio between elongation and thickness change
Beam_dimensions A
vector containing the size in X, Y and Z-direction, which is assumed to be
length, height and width
Node_number1 The
number of an existing node for the first node (X = -L/2). Nodes need to be
added separately. Two adjacent elements can share a node (=rigid connection)
Node_number2 The
number of an existing node for the second node (X = L/2). Nodes need to be
added separately. Two adjacent elements can share a node (=rigid connection)
Node_masses Node
mass that is attached to nodes 1 and 2
Elastic_line_model Checked
= the elastic forces are computed according to an elastic line model of Schwab
and Meijaard (see literature)
Unchecked = the elastic forces are computed from the deformation field using
nonlinear Green strain and second Piola Kirchhoff stress tensor. Usually leads
to locking for thin elements or Poisson ratio unequal zero
Axial_stiffness The
axial stiffness EA (gives a force)
Bending_stiffness The
bending stiffness EI
Shear_stiffness The
shear stiffness GA
Torsional_stiffness The
torsional stiffness GJ
Node’i’_r’j’ The
initial nodal position at node i. For j=’x’, ‘y’, ‘z’, it represents the initial
nodal slope, which is the position differentiated with respect to j
Node’i’_v’j’ The
initial nodal velocity at node i. For j=’x’, ‘y’, ‘z’, it represents the
initial nodal slope velocity, which is the velocity differentiated with respect
to j
Connectors
are all such elements which connect two or more elements or one element with
the ground by implying constraints or forces.
Examples
are:
Add Object®Add
Connector®Add 3D Joint
The 3D
Joint can be selected from a list of possible 3D joints. In the case of a
ground joint, only one body is constrained to the ground.

Add Object®Add
Connector®Add 3D Joint®SphericalJoint

A spherical
joint constrains the absolute position of body-point in the case of a ground
joint or the relative position between two points in the case of a body-body
joint. No rotations are constrained.
The
spherical joint leads to three constraints.
For general
element information see Section 4.1.1.
Constraint_element_numbers The
element numbers of the bodies to be constrained. Only body numbers are valid,
which provide a transformation between local body coordinates and global
coordinates. In the case of a ground joint, only one element number needs to be
provided, in the case of a body-body joint, two element numbers need to be
entered
Local_joint_pos_body1 The
local position in body-fixed coordinates of the point to be constrained in the
first body.
Local_joint_pos_body2 The
local position in body-fixed coordinates of the point to be constrained in the
second body.
Draw_size This
is the size used to draw the joint. It does not influence the computation
Draw_resolution Number
of flat elements used to approximate the drawing of the element.
In the case
of ground joints, there is only 1 element number to be specified. Furthermore,
a local joint pos of the body and a global joint pos at the ground need to be
specified. In revolute, prismatic or rigid joints, the rotation axis is fixed
in space and defined in global coordinates, as well. All other specifications
of ground joints are according to the definitions of the body-body joint.
As an
example, the edit dialog for the spherical ground joint has the form:

The two
edit fields that are different from the body-body joint:
Local_joint_pos_body The
local position in body-fixed coordinates of the point to be constrained in the
body
Global_joint_pos The
global position of the point to be constrained (for ground joint)
Add Object®Add
Connector®Add 3D Joint®RevoluteJoint

The
revolute joint leads to five constraints.
For general
element information see Section 4.1.1 and for specific information see also the spherical
joint.
Global_joint_axis The
axis of rotation of the revolute joint in global
coordinates in the initial configuration. The global axis is transformed into
local body coordinates after initialization.
Draw_axis_length The
drawn axis length of the revolute joint. This value does not influence the
computation
Add Object®Add
Connector®Add 3D Joint®UniversalJoint

The
universal joint leads to four constraints.
For general
element information see Section 4.1.1 and for specific information see also the spherical
joint.
Global_joint_axis1 The
first axis of free rotation of the universal joint in global coordinates in the initial configuration. The global axis is
transformed into local body coordinates after initialization.
Global_joint_axis2 The
second axis of free rotation of the universal joint in global coordinates in the initial configuration. The global axis is
transformed into local body coordinates after initialization.
Draw_sphere_radius A
parameter to set the size of a sphere that represents the joint. This value
does not influence the computation
Add Object®Add
Connector®Add 3D Joint®PrismaticJoint

The prismatic
joint allows the relative movement of two bodies along a specified (local)
axis. The local position of the two points of the bodies is only influencing
the behaviour if the bodies are deformable, for rigid bodies, the local points
only specify the position where the joint axes are drawn.
The
prismatic joint leads to five constraints.
For general
element information see Section 4.1.1 and for specific information see also the spherical
joint.
Local_sliding_axis1 The
sliding axis of free motion, defined in local body coordinates of body 1. The
sliding axis is corotated with body 1. Note that the rotation of the two bodies
of the joint is always the same, therefore it is no limitation that the sliding
axis can be only specified in local coordinates of body 1.
Add Object®Add
Connector®Add 3D Joint®RigidJoint

The rigid
joint fully constrains the relative translation and rotation of two bodies at
the specified local positions in body 1 and 2. This joint can have various
applications, especially for attaching a rigid body to a deformable body.
The
prismatic joint leads to six constraints.
For general
element information see Section 4.1.1 and for specific information (e.d. the local joint
position) see the spherical joint.
Add Object®Add
Connector®Special Connectors®CoordConstraint

A
coordinate constraint is utilized to arbitrarily constrain two coordinates of
the multibody system. Note that a position level constraint is automatically
transformed to a velocity level constraint (which forces constant velocity). If
the constrained coordinate has an initial velocity, a constant velocity is
applied according to this initial velocity. The coordinate constraint can only
be drawn represented by a sphere drawn at the reference point (usually the
center of mass) of the respective body.
The
CoordConstraint leads to one constraint equation.
For general
element information see Section 4.1.1 and for specific information see also the spherical
joint.
Element_coordinate1 The
local coordinate number of element 1 which is constrained
Element_coordinate2 The
local coordinate number of element 2 which is constrained
Add Object®Add
Connector®Special Connectors®PrescribedCoordConstraint

A
prescribed coordinate constraint is utilized to prescribe the coordinate of one
element of the multibody system. Note that a position level constraint is
automatically transformed to a velocity level constraint (which forces constant
velocity). The prescribed coordinate constraint can only be drawn represented
by a sphere drawn at the reference point (usually the center of mass) of the
respective body.
The
PrescribedCoordConstraint leads to one constraint equation.
For general
element information see Section 4.1.1 and for specific information see also the spherical
joint.
Element_coordinate1 The
local coordinate number of element which is prescribed
Position_level/Velocity_level Select
if the constraint is applied to the position or the velocities. Note that the
position level constraints are transformed to velocity level in the dynamic simulation.
However, for static analysis, only position_level constraints can be used
Function_type Select
the function type of the prescribed coordinate from:
0 = no function (constant)
1 = polynomial
2 = piecewise constant
3 = piecewise linear
4 = piecewise quadratic
5 = harmonic
Function_data The
function data according to the function type:
type 1: the polynomial coefficients
in each row, starting with the x0 coefficient in row 1, x1
coefficient in row 2, etc.
type 2: prescribed values for each
time, in each row: comma-separated time and value
type 3: prescribed values for each
time, which are afterwards linearly interpolated, in each row: comma-separated
time and value
type 4: prescribed values of the
position and velocity for each time. Position values are quadratic interpolated
and velocities linear. In each row: comma-separated time, position and velocity
type 5: a sum of harmonic functions
(e.g. resulting from a Fourier series approximation), in each row: frequency,
phase and amplitude
Add Object®Add
Connector®Special Connectors®SpringDamperActor

A
SpringDamperActuator element can be used for various applications. It can be either
or combined used for a linear spring between two points of two body, for the
damping or for the actuation of the relative motion of two bodies. The SpringDamperActuator
can also be used between a body and ground. Several nonlinear models are
available for the spring force. The force of the Connector consists of a spring
force, a damper force and an actuator force. The actuator force also can be
controlled by an external controller (in this case damping and spring forces
are inactive).
The SpringDamperActuator
leads to no constraint equation.
For general
element information see Section 4.1.1 and for specific connector information see also the
spherical joint.
Draw_windings The
number of windings drawn to represent a linear spring
Draw_damper_size Draw
size of the damper by a cylinder between the two points of the damper
Spring_stiffness Linear
spring stiffness k. The spring force for the spring is k*(actual_length –
initial_length)
Spring_initial_length The
initial length of the spring, see also spring_stiffness. Set the
spring_initial_length equal to the distance of the two end points of the spring
in order to have zero spring force at the initial configuration
Damping The
linear damping force, proportional to the relative velocity between the two
points projected into the line between the two points of the SpringDamperActuator
Actuator_force The
constant force acting between the two bodies. Tension is positive, compression
is negative
Local_joint_pos_body1 The
local position of the SpringDamperActuator in body 1
Local_joint_pos_body2 The
local position of the SpringDamperActuator in body 2 (if not groundjoint)
SpringDamperActuator mode
Linear-nonlinear Checked
= the stiffness is nonlinear according to the nonlinear stiffness terms (or
linear if they are zero). The damping is linear
Tension_only Checked
= only tension forces are applied at the spring. This is interesting in
applications e.g. with ropes that have no compression stiffness. The damping is
linear
Clearance Checked
= the spring has a region of extension / compression where no spring-force is
active. The extension / compression value is offset by the values given in the
field ‘Clearance_range’ in order to compute the linear/nonlinear spring force.
The damping is still linear and has no clearance
Controlled The
actuator force is computed from the values given by a controller element. The
controller element number must be provided in ‘Controller_elem_num’. Spring and
damper forces are set to zero in this mode.
Nonlinear_stiffness The
parameters for quadratic (k2) and cubic (k3) dependence
of the spring force F on the elongation x of the spring:
F = k×x+ k2×x2×Sgn(x) + k3×x3.
The quadratic part is multiplied by the Sign function of the elongation x
Clearance_range Range of
the clearance. The clearance is described by the range between the lowest
negative value of the elongation and the highest positive value of the
elongation in between the spring force is zero. Outside, the elongation is
offset by the positive (negative) range r+ (r-) for
positive (negative) elongation,
xe = x – r+(-),
such that the spring force gives
F = k×xe+ k2×xe2×Sgn(xe) + k3×xe3
Controller_elem_num Element number of
the controller that provides the actuator force
Stiffness_curve A list
of parameters that define the relation of spring force to elongation x. The
force and elongation values are comma-separated, in each row there is a pair of
spring force and elongation which are linearly interpolated:
f1, x1
f2, x2
f3, x3 …
Damper_curve A list of
parameters that define the relation of damper force to elongation velocity
dx/dt. The force and elongation velocity values are comma-separated, in each
row there is a pair of damper force and elongation velocity which are linearly
interpolated:
f1, v1
f2, v2
f3, v3 …
Add Object®Add
Connector®Special Connectors®RotSpringDamperActor

The
RotationalSpringDamperActuator is very similar to the Spring Damper Actuator
element. Only the differences to this element are provided in the following.
The
RotationalSpringDamperActuator is intended to add spring moment, damper moment
and actuator torque around a specified axis either for one body connected to
the ground or relative between two bodies.
Positive
angles follow the right-hand-rule of rotations.
The
RotationalSpringDamperActuator leads to no constraint equation.
For most of
the element definitions see the SpringDamperActuator element of the previous
section.
Draw_windings The
number of windings drawn to represent the torsional spring
Draw_axis_radius Draw
size of the axis of the RotationalSpringDamperActuator element
Spring_stiffness Linear
spring stiffness k. The spring moment for the torsional spring is
k*(actual_angle – initial_angle)
Spring_angle_offset The
offset of the spring angle with respect to the initial angle between the
bodies. If this angle is chosen to be zero, the spring will return zero moment
in the initial configuration. The angle can be entered either in radiant or in
degree, depending to the options set in Rigid body / joint options
Damping The
linear damping moment, proportional to the relative angular velocity between
the two bodies
Actuator_torque The
constant moment acting between the two bodies
Global_rotation_axis The
global axis of rotation of the RotationalSpringDamperActuator in the initial
configuration. The axis is transformed into local body coordinates during the
initialization
Add Object®Add
Connector®Special Connectors®Controller

The
Controller element is able to provide a controller force or torque which can be
used in SpringDamperActuator elements. The Controller element uses measured
sensor outputs and applies this values to a controller output value.
The
Controller leads to no constraint equation. The controller adds one ordinary differential
equation for every integrator (integrator not yet implemented).
For general
element information see Section 4.1.1 and for specific connector information see also the
spherical joint.
Sensor_numbers A
vector of sensor numbers (comma-separated) that provide the numbers of the
sensors used in the controller element
Sensor_offsets A
vector of offsets (comma-separated) according to the sensor numbers that
provides the offset added to every sensor output
Sensor_factors A
vector of factors (comma-separated) according to the sensor numbers that provides
the factor multiplied with the according sensor output (minus the sensor offset)
Sensor_options A
vector of options (comma-separated) according to the sensor numbers. The
following options are possible:
option = 0: use sensor output
option = 1: sensor output is integrated
Ctrl_limit_func_type The
function type for the limit function
0 = no function (constant)
1 = polynomial
2 = piecewise constant
3 = piecewise linear
4 = piecewise quadratic
5 = harmonic
Ctrl_limit_func_data The
function data of the limit function needs to be set according to the function
type:
type 1: the polynomial coefficients
in each row, starting with the x0 coefficient in row 1, x1
coefficient in row 2, etc.
type 2: prescribed values for each
time, in each row: comma-separated time and value
type 3: prescribed values for each
time, which are afterwards linearly interpolated, in each row: comma-separated
time and value
type 4: prescribed values of the
position and velocity for each time. Position values are quadratic interpolated
and velocities linear. In each row: comma-separated time, position and velocity
type 5: a sum of harmonic functions
(e.g. resulting from a Fourier series approximation), in each row: frequency,
phase and amplitude
Add a load
to a rigid or flexible body: generalized coordinate load, body load, force
vector, moment vector
Add Object®Add
Load®GC Load®Chose Element

A load is
directly linked to a body. When adding a load, an element number of a valid
body is chosen. The loads can be edited afterwards within the body edit dialog.
Force_info The
information about the type of the load
Generalized_coordinate The
number of the local body generalized coordinate where the load is applied to
Load_value The
size of the load applied
Time_dependency The
load can have time-dependency. The following types are possible:
Harmonic Frequency
and phase (radiant) of the harmonic load
Time_span The
load is only applied between the time span ton and toff
specified in field 1 and field 2
Time_ramp The
load is turned on and off according to a ramp. The four parameter fields are t1on,
t1off, t2on and t2off. The ramp is zero until
t1on, then linearly increased till t1off, where the load
reaches the Load_value. The force is decreased linearly between t2on
and t2off, after t2off the load is zero
Add Object®Add
Load®BodyLoad

For general
load information (Force_info, time_depedency) see the generalized coordinate
load.
Direction The
direction of the body load:
1 = global X direction
2 = global Y direction
3 = global Z direction
Load_value The
load value is integrated over the volume of the body and applied to the body in
the specified direction. For the case of a rigid body, a force of size
Load_value = density*gravity
constant
applies a force according to the gravitational force
Add Object®Add
Load®Force Vector 3D

For general
load information (Force_info, time_depedency) see the generalized coordinate
load.
Force_vector A
3D vector that defines the size and the direction of the force
Position The
position where the force is applied
Add Object®Add
Load®Moment Vector 3D

For general
load information (Force_info, time_depedency) see the generalized coordinate
load.
Moment_vector A
3D vector that defines the size and the direction of the applied torque
Position The
position where the torque is applied. For the case of rigid bodies the position
does not influence the applied moment
Add Object®Add
Sensor

A sensor is
used to measure specific quantities of the computation. The advantage of the
sensor is the easy access to certain quantities like position, velocity, angle
or angular velocity at a certain local point of the body.
Add Object®Add
Sensor®Local_DOF_Sensor

Sensor_type The
type of the sensor
Sensor_number The
internal number of the sensor (sensors are consecutively numbered, beginning
with 1)
Sensor_name The
sensor name can be used to identify the sensor later on. A name is suggested
for the sensor at startup according to the type. The sensor name is also used
to generate the name for the output file of the sensor which is
S‘sensor_number’-‘sensor_name’.txt
Use_aux_elements Checked
= the sensor measures auxiliary elements (currently not available in this
version)
Visible Checked
= the sensor is drawn if ‘Draw sensors’ is activated in Body / joint options
dialog
Draw_parameters The
parameters to draw the sensor. The sensor is represented by a sphere of radius
and resolution specified in the two fields. The drawing of sensors of this type
might be especially interesting for nodal sensors (currently not available).
The sensor is alternatively drawn by a coordinate cross which can be specified
in the Body / joint options dialog
Write_results_general The
sensor output is written into a general file ‘sol.txt’ in the output directory.
The output directory is specified in the Computation settings dialog
Write_results_own_file The
sensor output is written into a specific file according to the sensor name:
S‘sensor_number’-‘sensor_name’.txt
The file is written in the output directory. The output directory is specified in
the Computation settings dialog
Output_precision The
number of digits used to for the numbers in the output file. The precision set
here does not influence the accuracy of the computation (which might be
considerably lower). Internally the double format is used, which means that we
can have about 16 - 17 digits of calculation accuracy.
Output_factor The
output can be multiplied by a factor (e.g. in order make a unit conversion or
to adjust the sign of the output)
Output_offset Additionally
to the factor, an offset can be added to the output (e.g. subtract initial
position)
Element_number The
element number that is measured by the sensor
Local_DOF The
local DOF number in the body that is measured by the sensor
Add Object®Add
Sensor®Position_Sensor

A position
sensor measures the actual (global) position or velocity of a local point of
the body. Only the x, y or z-component of the body can be measured.
For general
sensor input information (type, name, number, draw parameters, write results,
output precision, factor, offset, etc.) see the Local_DOF_sensor.
Local_pos The
local (body) position of the sensor
Position / Velocity Check
the according type of the sensor
x/y/z-component Check
the according coordinate to be measured by the sensor
Add Object®Add
Sensor®Angle_Sensor

An angle
sensor measures the actual (global) angle or angular velocity with respect to a
global or a body-fixed axis. The angle is usually normalized to the range [–Pi
..+Pi].
For general
sensor input information (type, name, number, draw parameters, write results,
output precision, factor, offset, etc.) see the Local_DOF_sensor.
Local_pos The
local (body) position of the sensor
Angle_of_rotation Checked
= the angle of rotation with respect to a chosen axis is measured with respect
to the initial orientation at the specific point
Angular_velocity Checked
= the angular velocity with respect to a chosen axis is measured
Rotation_axis A
vector that defines the axis of rotation, global or local X, Y and Z-component
Body_fixed_axis Checked
= the rotation axis is defined in body fixed coordinates and thus corotated
with the body.
Unchecked = the rotation axis is fixed in space, the angle or angular velocity
is measured with respect to one global axis for the whole simulation
Add Object®Add
Sensor®Distance_Sensor

The
distance sensor measures the distance of two points of two bodies or at the
same body. The distance is define by two element numbers and two local
positions at these bodies. The distance is always positive.
For general
sensor input information (type, name, number, draw parameters, write results,
output precision, factor, offset, etc.) see the Local_DOF_sensor.
Element_number1 The
element number of the first body
Element_number2 The
element number of the second body
Local_pos1 The
local position at the first body
Local_pos2 The
local position at the second body
Add Object®Add
Sensor®Deflection_Sensor

The deflection
sensor measures the deflection of a line defined by point1 and point2 of two
bodies or at the same body. The deflection is defined by a third point and is
equal to the shortest distance of the third point to the line defined by point
1 and 2. The sign of the deflection is defined by a normal vector. The sign of
the deflection is positive if the cross-product of vector point1-point2 and
vector point1-point3 times the normal is positive, otherwise the deflection is
negative.
For general
sensor input information (type, name, number, draw parameters, write results,
output precision, factor, offset, etc.) see the Local_DOF_sensor.
Element_number1 The
element number of the first body
Element_number2 The
element number of the second body
Element_number3 The
element number of the third body
Local_pos1 The
local position at the first body, starting point of line where deflection is
measured
Local_pos2 The
local position at the second body, end point of line where deflection is
measured
Local_pos3 The
local position at the third body, point which defines the deflection from the
line defined by pos1 and pos2
Normal_vector The
normal vector for the definition of the sign of the deflection in global
coordinates
Add Object®Add
Sensor®Deflection_Sensor

The
multiple sensor takes the result of several sensors (S1, S2,
…), manipulates the results and returns a new sensor value. This might be
interesting for controllers that use sensor values or for averaging results at
different points of the multibody system.
For general
sensor input information (type, name, number, draw parameters, write results,
output precision, factor, offset, etc.) see the Local_DOF_sensor.
Sub_sensors A
comma-separated list of sensors which are used to compute the output of the
multiple sensor. The sensor number must be valid and not equal to the multiple
sensor
The sensor
values S1, S2, S3, … of sub-sensors are manipulated in various ways, that are:
Average The
average of all sensors is computed
Sum The
sum of all sensors is computed
Difference The
difference between the first sensor and all remaining sensors is computed:
output = S1 – (S2
+ S3 + …)
Mult The
multiplication of all sensors is computed:
output = S1 * S2
* S3 …
Div The
division between the first sensor and all remaining sensors is computed:
output = S1 / (S2
* S3 * …)
Norm The
norm of all sensor values is computed:
output = sqrt(S12
+ S22 + S32 + …)
Add Object®Add
GeomElement

A geometric
element (abbreviated as GeomElement) is used to represent the geometric
properties of a rigid body. The geometric representation is used both for
graphical purposes as well as for the calculation of mass, mass moment of
inertia and for the calculation of contact. The geometric element is moved and
corotated with the rigid body where the geometric element is attached to.
The
following geometric elements are available: mesh, mesh imported from STL file,
cylinder, sphere, cube
Add Object®Add
GeomElement®GeomMesh
Add Object®Add
GeomElement®GeomMeshSTL

The
GeomMesh object is used to define the surface and volume of a body by means of
a (flat) triangular mesh. The mesh is defined by a list of triangles, which are
represented by triples of point numbers, and a list of points which contain
triples of coordinates (X,Y,Z) of the mesh points. The GeomMesh must be closed
and all normals need to point outwards (according to STL definition), otherwise
the volume, mass and inertia terms cannot be computed correctly.
The
GeomMesh can be defined by hand, or be imported from an external CAD, meshing
or finite element code. The open source software Netgen has been tested and
used to import GeomMeshes for bodies. In Netgen, either STEP geometries can be
imported or the built-in constructive solid geometry language can be used to define
a body. The geometry must be meshed (mesh surface) and afterwards the mesh must
be exported as a .STL format. It is necessary to check the STL-mesh and make
all surface triangles look outwards (with STL-doctor).
GeomElement_type The
type of the geometric element
Element_name The
name to identify the geometric element
Element_number The
number of the element where the GeomElement is attached to. Choose 0, if the
object is used for the background (e.g. representing some fixed geometrical
background of the multibody system).
Color The
color defines the red, green and blue part of the color. The values must be in
the range [0…1]. Use -1 for the red component in order that the color is inherited
from the body that uses the geometric element
Transparency The
transparency of the geometric element. Use -1, in order that the transparency
is inherited from the body that uses the geometric element
Smooth_drawing Activate
this flag in order that the mesh is approximated with certain roundness due to
the OpenGL graphics. The surface is split into flat/round regions that are
enclosed by edges. The edges are defined by the edge_angle
Draw_edge_angle This
angle is used to define the minimum angle between two triangles (= angle
between the normals of the triangles) that define an edge
Transform_scale A
vector that scales the geometric mesh in X, Y and Z-direction respectively
Transform_rotation A
vector that defines the rotation of the geometric mesh with respect to the X, Y and Z-axis, order Z-rotation,
Y-rotation, X-rotation
Transform_position A
vector that is added to the position of the geometric mesh. The total
transformation of a mesh point is in the order:
scale ® rotate ® move
Triangles A
list of triangles. Each row contains one triangle defined by three
comma-separated point numbers. The point numbers are indices that refer to a
point defined in the point list. The normal of each triangle must point outside
of the volume. The normal of a triangle is defined by the normal of the three
point vectors p1, p2 and p3 (‘x’ represents
the cross-product):
n = (p2 – p1) x (p3 – p1)
Points A
list of points (point vectors). Each row contains the comma-separated X, Y and
Z-coordinates of the point.
Access: View ® Viewing Options

Viewing options allow changing some of the
parameters for visualizing the multibody model:
redraw Change
the delay till the next redraw of the model during the simulation in order to
speed up the simulation
animation Your
animation will run faster if you draw e.g. only every 10 or 50 frames of the
stored computation steps
animate from beginning Pressing
the animation button will always move to the beginning of the simulation
draw origin Draw
the origin (0,0,0) ad the orientation of the global coordinate system
origin size Length of the drawn axis of the
origin.
OpenGL window size For
screen shots and animation, this lets you adjust the size of the visualization
screen in pixels. Best results are obtained if you chose standard resolutions
such as 640x480, 800x600, etc.
draw texts in front of bodies This
option will draw texts much closer to the viewer such that they will be visible
even if they were hidden in reality by an object. However, due to distortion,
the texts might appear at slightly different positions.
grid Chose a grid type (orientation), the
grid size (length = width), grid step and a grid reference point in order to
show a grid for determining positions of the selected model
standard views The
selection of these parameters allows you to define a standard rotation with
respect to the global axis 1, 2 and 3 (= x,y,z) by certain angles. The standard
view is x-horizontal and y-vertical, z points out of the x/y plane.
Access: View ® OpenGL Drawing Options

The OpenGL
graphics includes some settings in order to customize the drawing. Yet it is
not possible to choose the surface property of a single body, but the material
is set for all bodies to the same values, like shininess, transparency, specular
color. Sometimes a specific lighting model improves the visibility of an object
or the understanding of its geometric complexity. Otherwise the default values
can be kept.
There are
two independent light sources included, it is possible to activate only one or
both lights.
enable light Enable
the light source
include light position Include
light position in the computation of the intensity. If not checked, objects
that are farer away from the light will have the same lighting conditions as
near objects
ambient Percentage
of ambient light, the intensity of the light is independent of the direction of
the light
diffuse Percentage
of diffuse light, the brightness is dependent on the position and orientation
of the surface with respect to the light source
specular light Percentage
of specular light, creates highlight on surfaces like polished metal or
mirror-like surfaces.
transparency The
percentage defines the transparency of the material where 0% is not transparent
and 100% is fully transparent. Note that the transparency is dependent on the
order of the objects which are currently not sorted in HOTINT. This can cause
strange transparency effects in meshed objects.
shininess This
factor defines the radius of shininess of the specular light, 100%=small radius,
0%= very large radius
specular color intensity Defines
the amount of specular color reflected by the material
immediate apply If
this is activated, all changes in the dialog are immediately applied to the
graphics window
smooth shade model Use
this to activate smooth shading, which improves the drawing of round surfaces.
Otherwise, flat shading is activated (piecewise flat polygons)
enable lighting If
not activated, the brightness is not depending on the position of the light
with respect to the surface
Access: View ® Finite Element Drawing Options

maximum value If
activated, the maximum value of the contour plot is limited to this value
minimum value If
activated, the minimum value of the contour plot is limited to this value
color tiling The
number of different colors in the contour iso-plot. The maximum is 32 different
colors, a larger value leads to a continuous color
invert colors The
color bar is inverted
grey mode Only
black to white colors are used
nonlinear scale A
nonlinear scale of colors is used. This can be interesting for Mises comparison
plots e.g. with edge singularities
shrinking factor The
size of the finite elements is multiplied with this factor. Use a value of 1
for displaying the original size and e.g. 0.9 in order to display a reduced
view of the elements
show mesh Shows
the mesh outlines
show solution Shows
the mesh surface
Chladni ISO-lines Not
available in this release
draw flat elements Checked
= draw plate elements as flat polygons, Unchecked = draw plate elements with
specified thickness
elem line thickness Line
thickness for element outline
axis tiling Tiling
specifies the number of quadrangles to draw a curved beam or plate element in
axial direction
axis resolution Resolution
specifies the number of quadrangles used to draw the contour solution of a beam
or plate element in axial direction
cross-section resolution Resolution
specifies the number of quadrangles used to draw the contour solution of a beam
or plate element within the transverse direction (discretization of the
cross-section)
solid FE resolution Resolution
(tiling) used to approximate one solid finite element (triangle, quadrangle,
hexahedral, tetrahedral, etc.)
Access: View ® Body/Joint Options

use degrees instead of rad. Checked
= use degrees (0° - 360°) instead of radiant (0 - 2p) for the input of angles and
angular velocities. The stored values are always in radiant.
rotation input Select
input mode for spatial rotations: Euler angles = rotation about Z-X-Z,
RotationXYZ = rotation about X-Y-Z, Euler parameters = direct input of 4 Euler
parameters
show body numbers Checked
= display element number of the body
show body local frame Checked
= draw local frame of body
local frame size Drawing
size of local body frame
bodies transparent Checked
= draw bodies transparent with factor defined in OpenGL options
draw bodies smooth Interpolate
GeomElement meshes with increased smoothness
show body outline Checked
= draw the outline (edges) of a body or GeomElement
show body faces Checked
= draw the surface of a body or GeomElement ® if ‘show body outline’ and
‘show body faces’ is unchecked, the bodies are not drawn
show connectors Checked
= draw connectors
show
connector numbers Checked = display element
number of the connector
connectors transparent Checked
= draw connectors transparent with factor defined in OpenGL options
show
senors Checked = show
sensors
sensors transparent Checked
= draw sensors transparent with factor defined in OpenGL options
sensor size Size
of sensor local axes
Access: View ® Show Data Manager

The Data Manager is used to draw the solution
at certain time instants where the data has been stored internally. The data is
stored in internal memory which should not substantially exceed the available
main memory of your computer, otherwise slow performance or program crash could
result. The sliding bar can be used to view certain stored data units, which is
designed to analyze the solution even during computation. It is preferably to
set the redraw time of the model view very high (®Viewing options ®
Redraw) in order to be able to smoothly animate the solution during a long
computation. The analysis of the solution during the computation can help you
to detect model input or convergence errors at an early stage or allows you to
run your simulation infinitely (set end time e.g. to 10e6) and to stop the simulation
at the point of your consideration.
The button ‘Run animation’ starts the animation
either from the beginning (data unit 1) if Display Options®Animate from
beginning is set, or otherwise from the current position of the slider bar.
There are two data formats: The .txt format
which stores data in pure text (space-separated data):
line 1: Version
identifier
line 2: checksums, first value = size of data,
second value = checksum
line 3: number of available data units
line 4: first line of data unit: time, size of
data, number1, number2, ….
The .dat format uses windows serialize
functions and can not be edited.
Data unit Actual
data unit drawn
time Actual
time instant drawn
delay Delay
used between frames when running animations
Run animation Start
animation
Load from a file Load
a stored solution for animation. Note that only the stored solution that
belongs to the same multibody model can be loaded.
Save to a file Save
the data units into a file. You can choose to save in .txt format which saves
the data of each time point in one line (row), or in .dat format. The dat format
is considerably faster and smaller in size.
Save special Save
selected data units into a file: specify first data unit, last data unit and
the increment between stored data units. The data can be stored in .txt, .dat
and also as .sol file. Choosing the same number for the first and last data
unit allows to use this solution as a .sol solution which can be used as an
initial vector for a further computation.

Access: Computation ® Computation Settings

(max) step size Step
size used for integration with constant step size. For automatic step size
control, this is the maximum step size
start time Initial
time of the simulation. Usually an integration is started at t=0. For the
continuation of a computation it might be interesting to use different values
end time Time
where integration stops. In the case of constant step size, it is advantageous
if this value is a multiple of the step size.
automatic step size control Checked
= automatic step size control is active which tries to select the step size
between max step size and minimum step size such that the absolute error
tolerance is reached in every step
absolute error tol. Absolute
error tolerance for the automatic step size control in every step. This is not
the global error of the integration. If the tolerances are very tight, it can
be necessary to decrease the values of the
initial step size Initial
step size used for the automatic step size selection
minimum step size Minimum
step size used for the automatic step size selection
Implicit trapezoidal Checked
= Use the implicit trapezoidal integration method with second order accuracy.
This should be the most accurate and very stable method, with low damping, for
constraints, discontinuities, etc.
Implicit Euler Checked
= Use the implicit Euler method with first order accuracy. This method is
usually the most stable method, but adds large damping for large step sizes and
therefore has low accuracy.
Implicit midpoint Checked
= Use the implicit midpoint rule with second order accuracy. This method has
same accuracy as the trapezoidal rule, for smooth problems it is energy
conserving. For discontinuities, especially contact and highly nonlinear
constraints it is not preferable to use the implicit midpoint rule
Do static computation Checked
= do static computation instead of dynamic simulation
(max) increment The
maximum increment of the static computation
Computation info every Write
the computation information in the output window every …. seconds of the
computation time. The computation information includes the current step, time,
Store data every Store
the data in the data manager every .... seconds of the computation time
Store in data manager Checked
= store data in data manager
Write system matrices Checked
= write system matrices (mass matrix M and stiffness matrix K) to a file in the
output directory which can be read in MATLAB with the command ‘loadMK.m’ that
reads the data files ‘Mdat.dat’ and ‘Kdat.dat’
Write solution every The
sensor values are written every …. seconds of the simulation time
Write solution files Checked
= the solution is written to the defined output files. For determining the
performance, it might be advantageous to deactivate all solution output
Always overwrite files Checked
= in every computation (after Computation®Reset Simulation) the output
files are cleared, otherwise the solution is appended
Output directory Specify
the output directory where all output is written. You can select the directory
with the Button ‘…’ on the right side of the Edit field.
In this
chapter, the file structure for saving multibody system models is described.
The multibody system is saved in an editable test (‘.txt’) format which allows
the editing and creation of such files manually or automatically with external
programs. However, one needs to be cautious when creating such files, because
errors might lead to unexpected results!
The best
way to find out the file structure is to open an example file.
Between
identifiers and values there can be as many spaces / tabs as desired by the
user. However, line breaks need to be set according to the specification.
The file
generally starts with a header and the version number of HOTINT which was used
to create the file.
Actual header:
HOTINT_data_file_version
0.900
After the
header, the following identifiers are possible:
The
definition of an Element is the following:
Element: ‘ElementIdentifier’
{
‘Element_data’
Load: ‘LoadIdentifier’
{
‘Load_data’
}
Load: ‘LoadIdentifier’
{
‘Load_data’
}
}
Be careful
in the usage of opening and closing braces ‘{ … }’ which are necessary for the
parser to understand the file structure.
The
‘ElementIdentifier’ is the type name of a body or connector according to the
names in HOTINT (see Add body/connector):
Bodies:
Mass3D,
Rigid3D, ANCFBeam
Joints:
SphericalJoint,
RevoluteJoint, UniversalJoint, PrismaticJoint, RigidJoint
Special Connectors:
CoordConstraint,
PrescribedCoordConstraint, SpringDamperActor,
RotSpringDamperActor,
Controller
The
‘Element_data’ has one property of the element per line, e.g.
Element_name= RevoluteJoint
for a
scalar quantity,
RGB_color= [0.2, 0.8, 0.2]
for a
vector quantity and
Function_data= [1, 0, 0
2.5, 0, 1.1
3., 1.2, 0]
for a
matrix entry (note that there is no separator at the end of a line).
Loads
Loads are
defined within the elements. Possible load type names are
GCLoad,
BodyLoad, ForceVector2D, Moment2D, ForceVector3D,
MomentVector3D
There may
be as many loads per element as desired by the user.
Additionally,
the following identifiers are valid:
Nodes
There are
no different type names of nodes, thus only the identifier ‘Node’ is necessary
to start the definition of a node.
Sensors
The
following sensor type names are possible:
Local_DOF_Sensor,
Position_Sensor, Angle_Sensor,
Distance_Sensor,
Deflection_Sensor, Multiple_Sensor,
Local_DOF_Acceleration_Sensor
GeomElements
The
following geometric element type names are possible:
GeomMesh,
GeomCylinder, GeomSphere, GeomCube
The present code is based on a redundant
coordinate formulation for the modeling of the motion and deformation of
bodies. This means that e.g. every rigid body has its own six degrees of
freedom (DOF), no matter how this body is constrained by other bodies or even
if it is fixed to the ground. The main reason for this formulation is the
simple extensibility of the code regarding the development of new elements, constraints,
forces, etc. . The numerical efficiency is gained by adapted solvers for the
sparse structure of the system equations, which leads to a similar effort as in
recursive and minimal coordinate approaches.
Several main points
have been focused in the multibody kernel:
Some things you should
know:
Dimensions: dimensions are chosen by user, but
should use standard international units: kg/m/s.
Numbering: All lists, arrays or other
ordering numbers start with 1 if not specified differently.
Elements: Bodies and connectors are
elements. If you search for bodies or connectors (e.g. for editing) in the
HOTINT program, you should look for elements.
The multibody system and solver always have two
solution vectors. One containing either the initial vector or the actual
solution (this is the solution vector) and another one that is used for the
graphics drawing which is called drawing solution vector. The latter vector is
utilized to independently draw the solution of a certain computed time instant
during the computation (e.g. if the computation lasts very long or is of indefinite
length).
The solution vector is split into a “position
level” (not necessarily a real position) and “velocity level” part for the case
of the second order differential variables. Assume that there are n second
order differential equation variables, then the solution vector will contain
first n position level coordinates
and after that n velocity level
coordinates. The local coordinates of a body (e.g. accessible via the sensor)
are ordered in a similar way. The local second order differential variables of
a body contain first m position level
coordinates and after that another m
velocity level coordinates.
There were some main points to be fulfilled
with the present multibody kernel:
In the current implementation there is one base
multibody system object which contains all information about the system. On top
of this structure, there is a dynamic and static solver class, i.e. an implicit
time integration method and a incremental nonlinear solver. The solver requires
the multibody system to provide residuals and derivatives of the differential
and algebraic equations based on assumed values.
The multibody system consists of the following
components:

Figure: Multibody system core and windows
interface.
The numerical time-integration tool included in
HOTINT is designed to compute the numerical solution of mixed first and second
order differential equations (ODE) and
differential-algebraic equations (DAEs) up to
an index of 3. The numerical solution is obtained by using implicit Runge-Kutta
(IRK) schemes like Gauss, Radau and Lobatto formulas. The code is developed for
an arbitrary number of stages, so far 20 stages have been tested resulting in
the conclusion that computing with as much as 10 stages can improve the speed
of the numerical simulation before the machine precision is limiting the
convergence of the underlying
Different IRK schemes are defined by tableaus
of coefficients which are defined by means of ASCII-Files (file
‘tableaus.txt’). These files are automatically generated by means of built in
functions of the code Mathematica 5.0. While it is known that multi-step
solvers can integrate DAEs of index 2 (e.g.\ BDF), it has been found out that
the inability to restart the multi-step method quickly after a discontinuous
step makes it unattractive for discontinuous problems. Furthermore, the order
of multi-step methods is limited by a comparatively low upper bound, while it
is possible to show that an order of 20 for the integration is possible and can
even be most efficient.
It shall be mentioned that in the special case,
where a high accuracy of the solution of the DAE is needed, e.g. for
sensitivity analysis or optimization methods, the
very high order of IRK methods is very
advantageous.
For the present case of the freeware HOTINT
code, only low order IRK formulas are available, while the higher order methods
will be available in future versions.
For a
description of the methods see the paper (download via homepage of J.
Gerstmayr):
J. Gerstmayr, M. Stangl.
High-Order Implicit Runge-Kutta Methods for Discontinuous Multibody Systems,
In: Proceedings of the XXXII Summer School APM’ 2004, June 24- July 1, Editor
D.A. Indeitsev, pp. 162-169,
In the
present implementation, only the index 2 formulation can be chosen. The index 2
multibody formalism transforms all constraints to the velocity level. This
leads to a highly stable and efficient formalism (the velocity level can be
solved much easier than the position level).
The time
integration algorithm forces the constraint conditions at the velocity level in
each time step (at the integration points of each time step). The integration
over the velocity does not exactly give the fulfillment of the position level
constraint, thus a small drift occurs. The drift becomes considerably smaller
with smaller step size and can be usually ignored.
Recommendations: Do not select
too large time steps. If you have fast rotating bodies, it is important to
guarantee sufficient time steps during each rotation of the bodies., It is usually
sufficient to use between 20 and 100 steps per one rotation in order to get
sufficient accuracy and small drift.
Future implementations: Stabilization techniques are
already included in HOTINT, but they need to be built into the general
framework. The stabilization as well as the error control of the drift will be
available in future versions of HOTINT.

Figure: Scheme of the dynamic solver.
The nonlinear solver sets all velocities and
acceleration terms to zero. The solver tries to find a static solution (if
possible) starting with the initial configuration. All loads are increased
linearly between the virtual time 0 and 1, in order to achieve convergence for
very nonlinear problems. The (virtual) time step (=load increment) can be
theoretically set to 1, but then the load is applied in one step and the
nonlinear problem needs to be solved at once. The static solver tries to
decrease the load increment as far as necessary in order to achieve
convergence, however, it is advantageous to specify a certain load increment
which can help the solver to speed up the computation and avoid failed steps.
The static solver does not work for kinematical
systems (statically underdetermined systems). Small rotational or translational
springs can be added in order to transform the system to a statically
determined system.
Elements: Bodies and connectors are
elements. In fact, an element only needs to provide a set of differential and
algebraic equations and it can add forces to other elements. A rigid body modeled
with Euler parameters includes one constraint for the four Euler parameters and
a hydraulic actor includes a differential equation for the pressure build-up
equations. Therefore, bodies and connectors are treated within the same
framework. Even forces or sensors could be elements, however, there would be
too much overhead in treating just everything as an element.

Figure: Element class structure.
Sometimes it is more efficient no connect two
elements without the application of constraints. E.g. in the case of nodal
finite elements it is advantageous if the connected elements share nodal
coordinates. Therefore, it is possible in HOTINT to define nodes, which can be
afterwards used to assign nodal coordinates to elements.
A node is defined only for a certain number of
coordinates (degrees of freedom – DOF), e.g. for a 2D position node DOF = 2,
for a 3D position node DOF = 3, for a node using position and gradient, the DOF
= 12 per node. Additionally, the nodal position in the reference configuration
can be assigned to the node. This position can be later on used to find nodes
or to automatically determine the nodal number depending on the nodal
coordinate.
The nodes are consecutively ordered starting
with the nodal number 1. The elements can afterwards refer to this number. When
editing nodes, the available nodal numbers are shown.
Loads are
used to add forces at the right hand side of the second order differential
equations that describe the dynamics of a body. Loads are directly linked to
bodies and they do not have own generalized coordinates (unknowns). However,
loads can depend on the body coordinates or body deformation (e.g. in the case
of pressure).
The loads
can have a time-dependency which is evaluated in every step of the computation.
Loads can only be applied to bodies that
provide according information of the work of external linear, angular or
integrated loads.
Sensors are used to measure certain quantities
of the multibody system at the current state of the computation. The output of
a sensor is usually written to output files at certain time steps (See
Computation Settings dialog). The solution file ‘sol.txt’ contains the output
of all sensors, each sensor in a row, versus the time (first row). Apart from
output and controllers, sensors do not influence the computation.
While local_DOF_sensors can be used to measure
the coordinates of any element (e.g. of a constraint), the position, angle,
distance and deflection sensors can only be applied to elements of the type
body.
Note that local second order differential
variables of a body contain first [1 … m]
position level coordinates and another [m+1
… 2m] velocity level coordinates.
Sensors can not have own generalized coordinates
(unknowns).
Geometric elements are used to represent a
realistic shape of complex bodies in the multibody simulation. Usually, a
geometric element is either used to define objects in the background or it is
attached to a (rigid) body.
Geometric elements can be either defined with
geometric primitives or by triangular meshes (see the Section about GeomMesh).
The only influence to the computation by GeomElements is present by the
automatic computation of mass, volume and inertia from the GeomElements.
Usually, the complexity of GeomElements does not influence the computational
time (CPU time), except for the drawing and loading/saving of multibody models.
In the case of big GeomMesh models, it is recommended that the redrawing time
is set to a high value, e.g. set the redrawing to every 20 seconds.