Short Documentation on the Usage of the HOTINT multibody simulation code

 

 

 

 

HOTINT V 0.900 beta

June 2007

 

 

 

DI Dr. Johannes Gerstmayr

 

 

 

 

Linz

AUSTRIA


1         List of contents

 

1      List of contents   2

2      Introduction   5

2.1       History and background information   5

2.2       Instructions for installing HOTINT on a MS-Windows computer 6

2.3       Dependencies  6

3      HOTINT Windows User Interface   7

3.1       Using the graphics window   7

3.2       Mouse control 7

3.3       HOTINT main application window   8

Specific buttons  9

3.4       HOTINT Main Menu   10

3.4.1   File  10

3.4.2   View   10

3.4.3   Edit 10

3.4.4   Add Object 11

3.4.5   System    11

3.4.6   Computation   12

3.4.7   Results  12

4      Add and Edit Objects   14

4.1       Edit Objects  14

4.1.1   General edit fields in all elements (rigid body and connector) 14

4.2       3D Rigid body  15

4.2.1   Rigid body Inertia computation mode  17

4.3       Mass 3D   18

4.4       3D ANCF beam element 19

4.5       Connectors  21

4.6       3D Joints  21

4.6.1   Spherical Joint 22

4.6.2   Revolute Joint 24

4.6.3   Universal Joint 25

4.6.4   Prismatic Joint 26

4.6.5   Rigid Joint 27

4.7       Special Connectors  28

4.7.1   Coordinate Constraint 28

4.7.2   Prescribed Coordinate Constraint 29

4.7.3   Spring Damper Actuator 31

4.7.4   Rotational Spring Damper Actuator 34

4.7.5   Controller 36

4.8       Loads  38

4.8.1   Add Generalized Coordinate Load  38

4.8.2   Add Body Load  39

4.8.3   Add Force Vector 3D   40

4.8.4   Add Moment Vector 3D   41

4.9       Sensors  42

4.9.1   Local Degree of Freedom Sensor 42

4.9.2   Position Sensor 44

4.9.3   Angle Sensor 45

4.9.4   Distance Sensor 46

4.9.5   Deflection Sensor 47

4.9.6   Multiple Sensor 49

4.10    Geometric Elements  50

4.10.1     GeomMesh   51

5      Options Dialogs   53

5.1       Viewing Options  53

5.2       OpenGL Drawing Options  55

5.3       Finite Element Drawing Options  57

5.4       Rigid Body / Joint Options  59

5.4.1   General 59

5.4.2   Rigid Bodies  59

5.4.3   Connectors  60

5.4.4   Sensors  60

5.5       Data Manager 61

5.6       Computation Settings  63

5.6.1   Time Integration Settings  63

5.6.2   Integration Method  64

5.6.3   Static Computation Settings  64

5.6.4   Other Options  64

6      HOTINT File Structure   66

7      Multibody formulation   68

7.1       Solution vector 68

7.2       Main structure of the multibody kernel 68

7.3       The dynamic solver – implicit time integration   69

7.3.1   Index 2 Formulation   70

7.4       The static solver – incremental loading  71

7.5       The Element Concept 71

7.6       Nodes for Direct Connection of Finite Elements  72

7.7       The Concept of Loads  72

7.8       Sensors for Measuring  73

7.9       Geometric Elements for Bodies with Complex Geometry  73

 


2         Introduction

2.1     History and background information

 

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!

 


2.2     Instructions for installing HOTINT on a MS-Windows computer

 

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

 

2.3     Dependencies

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.

 


3         HOTINT Windows User Interface

 

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”.

 

3.1     Using the graphics window

 

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.

 

3.2     Mouse control

 

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).

 


3.3     HOTINT main application window

 

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.


Specific buttons

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

 


3.4     HOTINT Main Menu

3.4.1   File

                                                         Open, Save files. Open recent file. Exit application

3.4.2   View         

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

3.4.3   Edit

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

 

3.4.4   Add Object                

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

 

3.4.5   System             

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

                                                        

3.4.6   Computation

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

 

3.4.7   Results

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

 


4         Add and Edit Objects

4.1     Edit Objects

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.

 

4.1.1   General edit fields in all elements (rigid body and connector)

 

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].

 


4.2     3D Rigid body

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

4.2.1   Rigid body Inertia computation mode

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:

 


4.3     Mass 3D

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


4.4     3D ANCF beam element

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


4.5      Connectors

Connectors are all such elements which connect two or more elements or one element with the ground by implying constraints or forces.

Examples are:

  • coordinate constraint
  • prescribed coordinate constraint
  • spring-damper-actuator (SDActor)
  • spring-damper-rotational-actuator (SDRotActor)
  • hydraulic actuator
  • controller

 

4.6     3D Joints

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.

 


4.6.1   Spherical Joint

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.

 


4.6.1.1     Ground joints

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)

 


4.6.2   Revolute 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

 


4.6.3   Universal Joint

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


4.6.4   Prismatic Joint

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.


4.6.5   Rigid Joint

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.

 

 


4.7      Special Connectors

4.7.1   Coordinate Constraint

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

 


4.7.2   Prescribed Coordinate Constraint

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

 


4.7.3   Spring Damper Actuator

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 …

 


4.7.4   Rotational Spring Damper Actuator

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

 

 


4.7.5   Controller

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


4.8     Loads

Add a load to a rigid or flexible body: generalized coordinate load, body load, force vector, moment vector

4.8.1   Add Generalized Coordinate Load

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:

 

  • constant: the load is constant for all times
  • harmonic: a harmonic load is applied with the frequency and phase defined in parameter fields and the amplitude given by the load value
  • time span: the load is only applied between the time span ton and toff specified in parameter fields
  • time ramp: the load is turned on and off according to a ramp

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

4.8.2   Add Body Load

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

 


4.8.3   Add Force Vector 3D

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

 


4.8.4   Add Moment Vector 3D

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

 


4.9     Sensors

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.

4.9.1   Local Degree of Freedom Sensor

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


4.9.2   Position 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


4.9.3   Angle 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


4.9.4   Distance Sensor

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


4.9.5   Deflection Sensor

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

 


4.9.6   Multiple Sensor

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 + …)


4.10    Geometric Elements

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


4.10.1                    GeomMesh

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.

 

 


5         Options Dialogs

5.1      Viewing Options

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.

 


5.2     OpenGL Drawing Options

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

 


5.3     Finite Element Drawing Options

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.)

 


5.4     Rigid Body / Joint Options

Access: View ® Body/Joint Options

 

 

5.4.1   General

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

5.4.2   Rigid Bodies

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

5.4.3   Connectors

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

5.4.4   Sensors

show  senors                               Checked = show sensors

sensors transparent                  Checked = draw sensors transparent with factor defined in OpenGL options

sensor size                                   Size of sensor local axes

 


5.5     Data Manager

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.

 


5.6     Computation Settings

Access: Computation ® Computation Settings

 

 

 

5.6.1   Time Integration 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.

Newton rel. acc.                           This is the accuracy which is attempted to reach by Newton’s method. The Newton method tries to minimize the norm of the initial residual by the factor Newton rel. acc.

Newton diff. eps.                         This is the differentiation parameter for Newton’s method which is used for the numerical differentiation

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 Newton rel. acc. and to use a small minimum step size

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

5.6.2   Integration Method

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

5.6.3   Static Computation Settings

Do static computation               Checked = do static computation instead of dynamic simulation

(max) increment                          The maximum increment of the static computation

5.6.4   Other Options

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, Newton iteration, Jacobian updates, elapsed and remaining time of computation

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.


6         HOTINT File Structure

 

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:

 

  • Element, Node, Sensor, GeomElement

 

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

 


7         Multibody formulation

 

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:

 

  • The application of implicit time integration algorithms shall be efficient
  • The code shall be capable of structural and solid finite elements
  • The code shall be extendable and open for new elements (e.g. non-mechanical, variable mass, variable topology, etc.)

 

 

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.

7.1     Solution vector

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.

7.2     Main structure of the multibody kernel

There were some main points to be fulfilled with the present multibody kernel:

 

  • The formulation shall be easily accessible and maintainable via C++ functions
  • The formulation shall be easily accessible and maintainable via the Windows user interface.

 

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:

 

  • Elements
  • Nodes
  • Loads
  • Sensors
  • Geometric elements

 

 

Figure: Multibody system core and windows interface.

7.3     The dynamic solver – implicit time integration

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 Newton method.

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, St. Petersburg, Russia, 2004.

 

7.3.1   Index 2 Formulation

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.

 

7.4     The static solver – incremental loading

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.

7.5     The Element Concept

 

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.

 

7.6     Nodes for Direct Connection of Finite Elements

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.

 

7.7     The Concept of Loads

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.

7.8     Sensors for Measuring

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).

7.9     Geometric Elements for Bodies with Complex Geometry

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.