In this tutorial, the capabilities of the VIBES Toolbox for Component Mode Synthesis are demonstrated. Component Mode Synthesis (CMS) is a dynamic substructuring method for modally reduced numerical models. This tutorial demonstrates this method by assembling a building from repeated substructures and assessing its dynamic behavior.

## Load FE models

Start by loading the FE models of the substructures as vibes.MCKModel objects. Each model comprises a mass matrix, a stiffness matrix, the nodes of the FE elements and a DoF-mapping table. Two substructures are defined:

- substructure A: a side part of the building
- substructure B: a mid part of the building

Both substructures comprise two stories and can be combined to create a taller and wider building. The models also come with a set of FE element definitions for the floors and walls, which are used to show the mode shapes as faces of the vibes.ui.Mesh objects.

Plot a mesh of both objects in the 3D viewer to see their shape and orientation. Note that faces are obtained from the field Parameters.Faces in the objects.

## Rotating the models

Looking at the meshes, it appears that the models are oriented incorrectly. We can rotate both models around the corner of the building to place them horizontally using the vibes.MCKModel.rotate command.

Plot the new models in the 3D viewer.

## Duplicating the models

Calling the vibes.MCKModel.move or vibes.MCKModel.rotate methods with an output variable will create a shifted or rotated duplicate of that model, leaving the original unchanged. We will use this syntax to create shifted copies of the two substructures and build the larger building.

Plot the additional models too to preview the whole assembly.

## Hurty/Craig-Bampton reduction

In order to construct the complete building efficiently, we will perform a Hurty/Craig-Bampton model reduction on the two substructure models that make up the assembly. The H/CB method reduces the full-sized system matrices to reduced system matrices comprising boundary DoFs and fixed-interface vibration modes.

The coupling will take place at the boundary DoFs. To find these boundary DoFs, the complete set of DoFs is first passed through the vibes.DoF.uniqueMatch method, which applies the default DoF-matching logic to get the “primal” set of DoFs to retain after coupling. The DoFs that are not unique can be found by taking the set difference of all DoFs and the unique ones, yielding the boundary DoFs. Finally, by taking the “DoF-matched” intersection of all DoFs with these boundary DoFs, the full set of boundary DoFs is found.

Use vibes.DoF.uniqueMatch to find the DoFs that are unique. This applies DoF-matching on 42972 vibes.DoF objects, so may take a while.

As the substructures were copied and then moved, each substructure has the same node numbers as its original. We can use this to our advantage by reducing only substructure A at those nodes that are on the boundaries of A, C, D and F, and do the same for substructure B at the boundaries of B and E.

Reduce the full vibes.MCKModel objects of just A and B to vibes.CMSModel objects using the found boundary DoFs. We will be using a Hurty/Craig-Bampton reduction with 20 internal vibration modes for each substructure. Setting the KeepTransformation property to true allows to later on visualize the fixed-interface vibration modes of the Hurty/Craig-Bampton model. However, it is computationally less efficient to do so, as these matrices may become considerably large.

Use the vibes.CMSModel.spy method to show the structure of the reduced matrices. Notice the diagonal structure of the section of the matrices containing the fixed interface modes.

Let us now inspect the modal basis of the reduced CMS models. Plotting a mesh from a vibes.CMSModel object that has its reduction matrix stored in the ‘T’ field will automatically pass that information onto the mesh object. Press SPACE and CTRL-UP/DOWN to animate the fixed interface mode shapes.

## Duplicating the reduced models

To create the full building from the reduced models, we will duplicate and shift the newly created vibes.CMSModel objects to their respective positions, similar as before.

We can assemble the six reduced substructure models together on their boundary nodes. To prevent double node numbers from showing up when coupling the substructures, we will reset the node numbers for each substructure before coupling. We will set them with offsets of 2000 per substructure, and also reset the names of the nodes to represent the node number.

Also plot the other parts to show the whole assembly.

## Assembling the reduced models

The assembly of the substructures is performed by the vibes.mixin.PhysicalDomain.couple method, which automatically matches the set of corresponding DoFs. Note that this only assembles the system matrices of the substructures, but does not yet give access to the coupled-system response.

The ‘couple’ method returns a vibes.operation.NumericalCouplingOperation object that allows you to inspect the coupling procedure. For instance, you can visualize the result of the automatic DoF-matching procedure in a matrix view.

The faces of the coupled system are simply the faces of all substructures combined.

Using the spy method on the coupled system shows the overlapping of the matrices at the boundary DoFs, while the fixed interface modes are simply concatenated.

Clear 3D viewer

Since the mesh is quite large, automatically scaling the mode shapes will give a distorted image of the actual displacement of the nodes. Instead, we will turn off auto-scaling and scale up every mode by the same amount.

## Solving the assembled vibration modes

The resulting CMS model after assembly consists of just under 3500 DoFs. A modal solution can be computed from the CMS model using vibes.CMSModel.toModalModel.

We would like to constrain the building to the ground. In order to achieve this, we will select all boundary DoFs in the coupled system with a Z-coordinate below 0.1m. These DoFs will be constrained in the computation of the modal solution. Constraints can be provided using the optional parameter ‘ConstrainedDoFs’.

The modal solution we just calculated consists of the same DoF set as the CMS model it was calculated from. In order to obtain a solution that describes the displacements of the complete node set, we like to expand the solution to the original DoFs. For this, we can use the reduction matrix, which is stored in the T field of the vibes.CMSModel class.

Plotting a mesh of this full modal model allows you to visualize mode shapes of the complete, coupled system.

## Calculating FRFs

Now that we have a complete model of the coupled substructures, it is very easy to calculate the frequency response at the boundary DoFs of the system. This can be done by matrix-inversion of the reduced dynamic stiffness.

We will select three of the boundary DoFs as inputs and outputs for our FRF matrix: a Z-direction on floor 1 to an X-direction on a wall on the same side of the building and a Z-direction on the other side of the building.

Plot the generated FRF.

Indicate the channels in the 3D viewer.