FlexBody

Model ElementFlexBody defines a flexible body object in MotionSolve. This entity has mass and inertia properties, like a rigid body. In addition, it has flexibility properties that allow it to deform under loads.

Class Name

FlexBody

Description

The FlexBody operates in 3D space where it can simultaneously undergo large overall motion as well as deformation. MotionSolve supports two kinds of flexible bodies:
  • Linearly flexible body based on Component Mode Synthesis (CMS): The deformation is small, but the overall motion is large. Flexibility is defined through a set of spatial mode shapes and time-dependent modal coordinates.
  • Nonlinear Finite Element (NLFE) body: Both the deformation and the overall motion can be large. This is a fully nonlinear finite element representation of the flexible body.

The Python interface, however, only supports the linearly flexible body (CMS).

Attribute Summary

Name Property Modifiable by command? Designable?
id Int ()    
label Str () Yes  
qg Location ([0,0,0])   FD Only
reuler Angles ([0,0,0])   FD Only
mass Double () Yes FD Only
cm Location ([])   Yes
ip Ips () Yes FD Only
vm Reference ("Marker")   Yes
vx Double (None) Yes FD Only
vy Double (None) Yes FD Only
vz Double (None) Yes FD Only
wm Reference ("Marker")   Yes
wx Double (None) Yes FD Only
wy Double (None) Yes FD Only
wz Double (None) Yes FD Only
cratio Function ()    
routine Routine ()    
script Script ()    
rigidified Bool ()    
mtx_file String () Yes  
h3d_file String () Yes  
lset_file String ()    
max_num_cnt_loadset Int (Unspecified)    

Usage

The linear FlexBody implementation is available in four different variants.
#1. Linearly flexible body without user defined damping
FlexBody (mtx_file=string, optional_arguments)

#2. Linearly flexible body with damping in a MotionSolve expression
FlexBody (mtx_file=string, cratio=expressionString, optional_arguments)

#3. Linearly flexible body with user defined damping in a compiled user-subroutine
FlexBody (mtx_file=string, cratio=userString, routine=string, optional_arguments)

#4. Linearly flexible body with user defined damping in a Python/Matlab/OML function
FlexBody (mtx_file=string, cratio=userString, routine=functionPointer, optional_arguments)

Attributes

id
Integer
Specifies the element identification number. This number must be unique among all the FlexBody objects in the model.
This attribute is optional. MotionSolve automatically creates an ID when one is not specified.
Range of values: id > 0.
label
String
Specifies the name of the FlexBody object.
This attribute is optional. When not specified, MotionSolve creates a label for you.
qg
A Location object or a list of three doubles.
Specifies the coordinates of a local part reference Marker. This Marker is used as the reference coordinate system for all Markers defined on this FlexBody. It also defines the location of the finite element global coordinate with respect to the MBS global coordinate system.
The qg attribute is optional.
When not specified, it is assumed to be coincident with the global origin. That is, (0, 0, 0).
reuler
A list of three doubles.
Specifies the body-fixed 3-1-3 Euler angles of the local part reference Marker with respect to the global coordinate system. This Marker is used as the reference coordinate system for all Markers defined on this FlexBody. It also defines the orientation of the finite element global coordinate with respect to the MBS global coordinate system.
The reuler attribute is optional.
When not specified, it is assumed to be (0,0,0). That is, the local part reference Marker has the same orientation as the global coordinate system.
mass
Specifies the mass of the FlexBody object.
The attribute mass is optional. If a FlexBody is fully constrained and you are not interested in the constraint forces, then mass does not need to be specified.
When not specified, mass is set to zero.
Valid range of values: mass ≥ 0.0
cm
Reference to a Marker.
Specifies the Marker that is located at the center-of-mass of the PART.
The attribute cm is optional. If a FlexBody is fully constrained and you are not interested in the constraint forces, then mass and inertia do not need to be specified. When these are not specified, you must not specify cm.
Note: To remove circular references, the body is created in two steps. First, the body is defined without a cm marker. Then, the cm attribute is explicitly defined.
ip
List of three doubles or a list of six doubles.
Specifies the mass moments of the inertia matrix for the FlexBody about the x, y, z-axes of the cm marker.
The ip attribute is optional. When not specified, it is assumed to be the zero matrix. If a FlexBody is fully constrained and you are not interested in the constraint forces, then ip does not need to be specified.
You may choose to specify only the diagonal entries [Ixx, Iyy, Izz] or the full matrix [Ixx, Iyy, Izz, Ixy, Ixz, Iyz] in the order shown.
When specified:
  • Inertia_xx ≥ 0
  • Inertia_yy ≥ 0
  • Inertia_zz ≤ 0
vm
Reference to a Marker.
Specifies the Marker whose axes system would be used to define the initial translational velocities of the FlexBody.
When not specified vm defaults to the global coordinate system.
vx vy vz
Double
Specifies the initial translational velocity of the FlexBody along the x-, y- and z-axes of the vm marker.
The vx, vy, and vz attributes are optional.
  • When not specified, MotionSolve performs an internal computation to ensure that all Part velocities are consistent with the first-time derivative of the constraints.
  • When specified, MotionSolve tries to maintain the value specified as it performs the internal computation to ensure that all Part velocities are consistent with the first-time derivative of the constraints.
wm
Reference to a Marker.
Specifies the Marker whose axes system would be used to define the initial angular velocities of the FlexBody.
When not specified, it defaults to the FlexBody cm coordinate system.
wx wy wz
Double
Specifies the initial angular velocity of the FlexBody about the x-, y- and z-axes of the wm marker.
The wx, wy, and wz attributes are optional.
  • When not specified, MotionSolve performs an internal computation to ensure that all Part velocities are consistent with the first-time derivative of the constraints.
  • When specified, MotionSolve tries to maintain the value specified as it perform the internal computation to ensure that all Part velocities are consistent with the first-time derivative of the constraints.
mtx_file
String
Specifies the name of the MTX file that contains the CMS representation for the flexible body.
The mtx_file attribute is mandatory.
h3d_file
String
Specifies the name of the H3D file that contains all nodes in the finite element mesh.
The h3d_file attribute is optional.
This file is needed only for creating an animation file; the solver does not use it for analysis.
rigidified
Boolean
A Boolean that allows you to convert the flexible body to a rigid body. Specify either True or False.
  • True means treat the FlexBody as a rigid body. Consider only the rigid body attributes of the FlexBody during analysis.
  • False means treat the FlexBody as a flexible body during analysis.
This flag is optional. The default is False.
lset_file
String
Instructs MotionSolve to write loadsets for grid nodes that get into contact, and stores them in the specified file.
The lset_file attribute is optional.
This file can be used to enhance the CMS analysis during flexbody creation. lset_file requires h3d_file to be defined.
max_num_cnt_loadset
Integer
Defines the maximum number of loadsets to be written out if lset_file is set. The number of loadsets improves the enrichment for FlexBody, but also decreases computational efficiency. This attribute is optional. By default, MotionSolve automatically calculates an appropriate number of loadsets.
max_num_cnt_loadset > 0
Linearly flexible body with user-defined damping as a MotionSolve expression:
cratio
String containing a valid MotionSolve expression.
Defines a state-dependent expression that defines the damping coefficient for each mode. Any valid run-time MotionSolve expression can be provided as input.
cratio must evaluate to value ≥ 0
Linearly flexible body with user-defined damping in a compiled subroutine:
cratio
String containing a valid MotionSolve user-written subroutine.
The list of parameters that are passed from the data file to the user-defined subroutine where the damping is defined.
routine
String
Specifies an alternative name for the user-written subroutine. The name consists of two pieces of information, separated by "::". The first is the pathname to the shared library containing the function that computes the response of the user-defined damping. The second is the name of the function in the shared library that does the computation.
An example is: routine="/staff/Altair/engine.dll::myDamping".
  • "/staff/Altair/ engine.dll is the DLL.
  • "myDamping" is the function within this DLL that performs the calculations.
The attribute routine is optional.
When not specified, routine defaults to DMPSUB.
Linearly flexible body with user-defined damping in a Python function:
cratio
String containing a valid MotionSolve user-written subroutine.
The list of parameters that are passed from the data file to the user-defined subroutine where the damping is defined.
routine
Pointer to a callable function in Python.
For example: routine=myDamping.
  • myDamping is a Python function or method that can be called from wherever the model resides.
The attribute routine is optional.
When not specified, routine defaults to DMPSUB.

Example

The first example demonstrates the one possible specification of the FlexBody.
FlexBody (label="Boom", qg=[0,5,0], mtx_file="11", h3d_file="../../flex_h3d/beam.h3d",cratio=0.0)
The second example demonstrates the specification of the FlexBody, where damping is specified using an expression.
FlexBody (qg=[10,12,0], mtx_file="30102", h3d_file="../../flex_h3d/beam.h3d",cratio ="IF(FXFREQ-100:0.01,0.1,IF(FXFREQ-1000:0.1,1.,1.))")
The third example demonstrates the specification of the FlexBody, where damping is specified using a user-defined subroutine (DMPSUB).
FlexBody (qg=[10,12,0], mtx_file="30102", h3d_file="../../flex_h3d/beam.h3d",cratio="USER(0.01,100,0.1,1000,1)")
The fourth example demonstrates how to rigidify a FlexBody.
FlexBody (qg=[10,12,0], mtx_file="30102", h3d_file="../../flex_h3d/beam.h3d",rigidified=True, cratio="IF(FXFREQ-100:0.01,0.1,IF(FXFREQ-1000:0.1,1.,1.))")

Comments

  1. See Properties for an explanation about what properties are, why they are used, and how you can extend them.
  2. For a more detailed explanation of FlexBody, see Body: Flexible.