Guy on Simulink

Simulink & Model-Based Design

Modeling flexible bodies using the Reduced Order Flexible Solid block

Today I am happy to welcome guest blogger David Balbuena. If you are getting started using the Reduced Order Flexible Solid block from Simscape Multibody, I strongly recommend that you go through David's MATLAB Central contribution. Whether you are importing your reduced-order model from the Partial Differential Equation Toolbox or any other third-party finite-element analysis software, this should help you avoid common mistakes and get you running quickly.

In this post, I am introducing a MATLAB Central submission to help you validate your workflow for generating the data required by the Reduced Order Flexible Solid block.

Before diving in, let’s review the evolution of flexible bodies in Simscape Multibody.

Evolution of Flexible Bodies in Simscape Multibody

Prior to R2018b, Simscape Multibody did not include built-in blocks to model flexible bodies. In those days, you had to use a series of rigid bodies connected by springs and dampers, as Guy demonstrated in a previous post. Since then, we've added lots of new capabilities for modeling flexible bodies! Here's a quick summary:

Release Block Description Image
R2018b General Flexible Beam Flexible beams with a constant cross-section General Flexible Beam
R2019b Reduced Order Flexible Solid You can start with the CAD geometry of your component, generate a finite-element mesh, apply the Craig-Bampton FEA substructuring method, and generate a reduced-order model Cylinder Mesh
R2020a Flexible Beams with standard cross sections Standard flexible beams added to the library Flexible Beam Library

Now you can easily build and simulate cool stuff like this flexible four bar mechanism:

Flexible Four-bar mechanism

Reduced Order Flexible Body

The Reduced Order Flexible Solid block is different from the other flexible beams because it can use data generated from FEA software. It requires a reduced-order model (ROM), which you can get by taking the CAD geometry of your component, generating a finite-element mesh, applying the Craig-Bampton FEA substructuring method, and then generating a reduced-order model.

The nature of this block comes with a challenge: since it uses data from a third-party software, it is impossible for us (MathWorks) to check that the data you provide actually represents what you intend.

Once you have the ROM, you can enter the data generated in the Simscape Multibody block along with the CAD part:

ROM Block Parameters

The ROM data primarily consists of 3 matrices

  • A matrix of Interface Frame Origins
  • Stiffness Matrix
  • Mass Matrix

The documentation lists out requirements for the ROM. It is important to keep those in mind if you need to manipulate the ROM data. One thing to be aware of is this line in the documentation:

The degrees of freedom for node i must be retained in the order Ui = [Txi, Tyi, Tzi, Rxi, Ryi, Rzi]

It's also important to note that the boundary nodes in the reduced-order model must be in the same order as the corresponding interface frames on the block. If your third-party software generates the interface frames in a different order, you will need to reorder the stiffness and mass matrices to account for that difference.

So, let's say you generated your ROM data, and you need to change the ordering of your frames. Assuming you have only 2 frames, and no dynamic modes, then your $U$ vector becomes:

DOF Vector

And your origins matrix will match that ordering:

origins matrix

With that ordering comes a natural structure on your stiffness and mass matrices. In this case you can think about the stiffness matrix (K) as a 2x2 partitioned matrix:

Partitioned stiffness matrix

The mass matrix will have the same structure.

With the pictures above in mind, now we can swap the two frames. That is equivalent to swapping the first 6 rows with the last 6 rows of $U$. For the origins matrix you can simply swap the rows:

Modified Origins

To correctly modify the stiffness and mass matrices, you need to permute the rows AND columns. Below is a visualization for the change you have to make to the stiffness matrix. The first partition is highlighted for clarity.

Visualize the permutation

You would need to do the same thing for the mass matrix. This ensures that changing the ordering of your frames maintains the correct degrees of freedom for each frame.


When importing the ROM, the Reduced Order Flexible Body block does some validation of the matrices you provide. If it detects something suspicious, the following warning will be thrown:

Wrong data error

The provided reduced-order model data (mass matrix, stiffness matrix, interface frame origins) do not appear to correctly characterize the rigid-body properties of the flexible body. Check that the provided data is correct and consistent. Resolve this issue in order to remove the warning.

If you are getting the warning above, keep reading, because the following steps will help you validate your ROM generation process. To do that, I like to use a simple shape because with a simple shape it is easy to see how the settings you choose in your FEA software translate into Simscape Multibody.

File Exchange Setup

I decided to use a simple system with a known solution: a cantilever beam with a circular cross section. You can go to your FEA software of choice and generate a ROM for a cylinder with these properties:

  • Radius: r = 0.05 m
  • Length: L = 1 m
  • Density: ρ = 2700 kg/m^3
  • Young's Modulus: E = 70 GPa
  • Poisson ratio: 0.33
  • 2 interface frames, one at each end

Here is a picture of such a cylinder meshed using the Partial Differential Equation Toolbox. You should see something similar if you implement this cylinder in a different FEA software.

Cylinder mesh

For a beam with those properties, you can calculate by hand how it should respond to different loading conditions. The following sections walk through some basic tests I typically run:


If you apply a force $F$ along the axis of the beam, you should get a steady state deformation of

$$\Delta L = \frac{F \cdot L}{A \cdot E}$$

where $A$ is the cross-sectional area of the beam, $E$ is the Young's Modulus, $L$ is the length of the beam.


If you load the beam in torsion with some torque $T$, you should get a steady state twist angle of

$$\theta = \frac{T \cdot L}{G \cdot I_P}$$

where $G$ is the shear modulus, $I_p$ is the polar moment of inertia.


If you apply a pulse to the end of the beam in a direction perpendicular to the axis of the beam, you should get a response that oscillates at the first natural frequency of the beam

$$\omega_1 = 1.87510^2 \sqrt{\frac{E \cdot I }{\rho \cdot A}} = 447.6 \frac{rad}{s}$$

where $I$ is the moment of inertia, $\rho$ is density, $A$ is cross sectional area, $E$ is Young's Modulus.

Validating ROM Results

Now we know how the beam should respond. In my MATLAB Central submission, there is a model that replicates the loading conditions above and compares the simulated response to the analytical solution we calculated:

Model used to test loading conditions

All you have to do is enter your ROM data in the model. The default data provided was generated using the reduce function in the Partial Differential Equation Toolbox. If you are interested in how I did that, the submission contains the code I wrote to do it. The Simulink model provided compares the ROM response to a Flexible Cylindrical Beam. The links on the model canvas will open up plots so you can explore the results:

MATLAB Results Plot

See the README file for more details on how the model is setup.

Now it's your turn

Here are a few more resources to get you started:

Try out the Reduced Order Flexible Solid block and let us know what you think in the comments below.

  • print


댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.