3.2 Dynamic Substructuring of two substructures

In this tutorial, the structural dynamics of structure A and structure B will be coupled using Frequency Based Substructuring. The two separate structures have collocated DoFs on their interface. The nodal description of the interface is obtained with the Virtual Point Transformation.

Load the substructure FRFs

  1. Load the FRFs of the two separate structures A and B. These will be coupled using dynamic substructuring.
  2. Load the FRFs of the assembled structure. These FRFs are obtained by a (virtual) measurement of the structures A and B coupled together. These FRFs will serve as validation FRFs.
% Load the FRFs of the two separate structures A and B.
YA  = vibes.load('VIBES,Examples,Datasets','mat','Benchmark','YAqm.FRFMatrix.mat');
YB  = vibes.load('VIBES,Examples,Datasets','mat','Benchmark','YBqm.FRFMatrix.mat');

% Load the FRFs of the assembled structure.
YAB = vibes.load('VIBES,Examples,Datasets','mat','Benchmark','YAB.FRFMatrix.mat');

Frequency Based Substructuring: the easy way

Both FRFMatrix objects contain Channel and RefChannels information. The toolbox will automatically match the right degrees of freedom, resulting in fully coupled substructures. This means that both compatibility and equilibrium conditions are met. The default operation returns the DoFs of the dual assembly, meaning that the coupling DoFs appear twice.

YAB_DS = couple(YA,YB);

Verify the results. Compare the coupled FRFs with the ones of the validation measurement.

Select the channel DoFs. Use DoF matching to find the same response channels in the substructured dataset. Use a small tolerance on the positions (10 mm) to cope with slight offsets.

[i_AB, i_DS] = match(YAB.Channels,YAB_DS.Channels,'Position',0.01);
i = 1;

% Select the RefChannel DoFs. In this case, refer to the name of the
% impact.
ch_j = {'Name','Ref. Impact 101'};

% Plot the validation FRF and substructured FRF
vibes.figure('Dynamic Substructuring'); clf
YAB.plot(i_AB(i),ch_j,'PlotType','log','Style','2b','Label','Validation'), hold on
YAB_DS.plot(i_DS(i),ch_j,'PlotType','log','Style','2r','Label','DS')

ylim([1e-4 1e2])
legend show

Plotting the validation and substructured FRFs

For reference, show the FRF that has been plotted in the 3D Viewer.

fn_geoAB = vibes.fullfile('VIBES,Examples,geometry','subsAB.mat');

% Open the 3D viewer and display the geometry
V = vibes.figure3d(); V.clf; V.skyMode();
V.addGeometry(fn_geoAB);

% Plot the channels
YAB.Channels(i_AB(i)).plot();
YAB.RefChannels.select(ch_j{:}).plot();

V.view(0)
V.zoom(2)

Displaying the geometry in the 3D viewer

Frequency Based Substructuring: LM-FBS with more control

Using additional options of the couple command, one is able to control the compatibility and equilibrium conditions of FBS. The available options include:

  • 'Compatibility' to define the compatibility DoFs
  • 'Equilibrium' to define the equilibrium DoFs
  • 'OutputDoFs' to select dual or primal output format
  • 'Symmetrize' to perform symmetrization of the matrices before coupling
% FBS coupling with control over the coupling conditions:
[YAB_DS2, Info] = couple(YA,YB, ...
    'Compatibility',{'Quantity','Rot','Grouping',1}, ...
    'Equilibrium',{'Unit','N','Grouping',1}, ...
    'OutputDoFs','primal');

The compatibility (Bc) and equilibrium (Be) Boolean matrices that are used for the assembly are returned in the additional output structure:

disp(Info)

Coupling with a compliant Interface

The couple method allows to couple with a compliant interface. The stiffness can be specified in various ways. In this tutorial we will use a frequency-dependent function.

% We begin by defining stiffness k and damping c for the 6 coupling DoFs.
k_int = [2e8 2e8 2e8, 20000 20000 20000].';
c_int = [1000 1000 1000, 10 10 10].';

% Implement the frequency dependence in the form of a function handle.
stiffnessFcn = @(freq) k_int + 2j*pi*freq*c_int;

% Use the InterfaceStiffness property/value pair.
[Yu,Opts] = couple(YA,YB,'InterfaceStiffness',stiffnessFcn);

% Plot the uncoupled, coupled and flexibly coupled systems for comparison.
vibes.figure('Flexible coupling comparison'); hold on
YA.plot(1,1,'Label','Uncoupled')
YAB.plot(1,1,'Label','Coupled')
Yu.plot(1,1,'Label','Flexible coupling')

% Notice how the flexible coupling resembles the rigid coupling at lower
% frequencies, but behaves more like the uncoupled system at higher
% frequencies.

Plotting uncoupled, coupled and flexibly coupled systems

Frequency Based Substructuring: Manual use of LM-FBS

It is also possible to define the compatibility (Bc) and equilibrium (Be) matrices yourself; hereby one has full freedom to apply FBS. Obviously, you are free to develop your own (de-)coupling routines, leveraging the mathematics functions of the VIBES Toolbox.

% Define Boolean matrices yourself using the vibes.math.bmatrix function
Bc = [-vibes.math.bmatrix(YA.nChannels,1:6), vibes.math.bmatrix(YB.nChannels,1:6)];
Be = [-vibes.math.bmatrix(YA.nRefChannels,1:6), vibes.math.bmatrix(YB.nRefChannels,1:6)];

% Perform LM-FBS using the vibes.math.lmfbs function
YAB_DS.Data = vibes.math.lmfbs({YA.Data,YB.Data},Bc,Be);

Save the coupled structures in the repository

One can now store the substructured result, for instance in the export repository.

YAB_DS.save('VIBES,Examples,Export','YAB_DS');

    Contact us for more VIBES

    Contact our support team or call us on +31 85 744 09 70

    ×