An open-source plate vibration simulation and analysis framework
M. Ducceschi*, M. Hamilton*, A. Mousseau^, S. Duran*
* NEMUS Lab - University of Bologna
^ LAUM - Laboratoire d'Acoustique de l'Université du Mans
MAGPIE is an open-source framework for simulating the dynamics of elastic plates. The plate equation is derived from the orthotropic Kirchhoff-Love plate theory. It can then effectively simulate the dynamics of moderately thin wooden and composite plates. The geometry is restricted to rectangular, and the thickness is assumed constant. These limitations may be overcome in future releases. MAGPIE can simulate boundary conditions of classic type (free, simply-supported and clamped) and generally elastic boundary support, controlling the flexural displacement and boundary rotation through applied elastic forces and moments.
MAGPIE is a framework allowing both direct and inverse modelling of orthotropic sheet materials, such as wood and composites, displaying orthotropic behaviour. Note that the isotropic case can be recovered as a special case.
** Direct modelling consists of supplying MAGPIE with the appropriate elastic parameters (two Young's moduli, one shear modulus and one Poisson ratio), material parameters (density) and geometric parameters (edge lengths and thickness) plus the values of the elastic boundary constants. The output of the direct modelling can be:
- Eigenvalues and eigenvectors (i.e., modal shapes)
- A time-domain simulation of a struck plate using a simple raised cosine (simulating an impact) or sinusoidal input
** Inverse modelling consists of supplying MAGPIE with a number of measured modal frequencies from an experimental plate, along with the plate's known material and geometric constants (density, edge lengths, thickness) to compute the elastic constants.
Features
The Orthotropic Kirchhoff Model
Discretisation
Braces and static loads
Structure
Direct Modelling
Inverse Modelling
Here is a list of features currently supported by MAGPIE:
- orthotropic wave propagation (includes isotropic as a special case)
- rectangular geometry
- constant thickness
- generally elastic boundary conditions
- possibility of adding ribs (Euler-Bernoulli beams)
- possibility of adding lumped static loads and stiffeners
- frequency domain analysis
- time domain simulation using two input forces: impulse and sines
- arbitrary amount of output points
- stress computation, plus output displacement, velocity and acceleration
- Rayleigh damping
- sound synthesis of displacement, velocity and acceleration at output points
- Inverse modelling to compute the elastic constants from a set of measured experimental frequencies
The vibration of an orthotropic plate can be described via the Kirchhoff-Love model. This dynamical model describes the time evolution of the flexural displacement
Here,
Note that, because of the symmetry of the compliance matrix, one out of five elastic constants is fixed. Usually, one selects
thus leaving the following elastic constants to be specified at the input:
[K_{xL_y},R_{xL_y}]
--------------------- ^
| | |
| | |
[K_{0y},R_{0y}] | | |
| | L_y
| |[K_{L_xy},R_{L_xy}] |
| | |
| | |
--------------------- ˇ
[K_{x0},R_{x0}]
<-------- L_x -------->
The equation must be supplied with appropriate boundary conditions. Here, conditions of elastic type are assumed. Referring to the diagram above, the boundary conditions are:
-
at
$x = 0$ - Balance of Forces:
$$K_{0y} u = -D_1 \left( \partial_x^3 u + \left( \frac{D_4}{D_1} + \nu_{y} \right) \partial_x\partial_y^2 u\right)$$ - Balance of Moments:
$$R_{0y} \partial_x u = D_1 \left(\partial_x^2 u + \nu_y \partial_{yy} u \right)$$
- Balance of Forces:
-
at
$x = L_x$ - Balance of Forces:
$$K_{L_x y} u = D_1 \left( \partial_x^3 u + \left( \frac{D_4}{D_1} + \nu_{y} \right) \partial_x\partial_y^2 u\right)$$ - Balance of Moments:
$$R_{L_x y} \partial_x u = -D_1 \left(\partial_x^2 u + \nu_y \partial_{yy} u \right)$$
- Balance of Forces:
-
at
$y = 0$ - Balance of Forces:
$$K_{x0} u = -D_3 \left( \partial_y^3 u + \left( \frac{D_4}{D_3} + \nu_{x} \right) \partial_y\partial_x^2 u\right)$$ - Balance of Moments:
$$R_{x0} \partial_y u = D_3 \left(\partial_y^2 u + \nu_x \partial_{xx} u \right)$$
- Balance of Forces:
-
at
$y = L_y$ - Balance of Forces:
$$K_{x L_y} u = D_3 \left( \partial_y^3 u + \left( \frac{D_4}{D_3} + \nu_{x} \right) \partial_y\partial_x^2 u\right)$$ - Balance of Moments:
$$R_{x L_y} \partial_y u = -D_3 \left(\partial_y^2 u + \nu_x \partial_{xx} u \right)$$
- Balance of Forces:
Note a clamped edge is recovered by setting
A further condition arises at the corners, namely
Discretisation of the equation of motion is performed on a two-dimensional grid of points. Let
When applied to the grid function
Similar definitions are used for the differences along the
Note that overdots now indicate total time derivatives. Note as well that the spatial indices are integer numbers restricted to the intervals
Boundary conditions follow as a direct discretisation of the continuous conditions above. Thus
-
at
$l = 0$ - Balance of Forces:
$$K_{0y} w_{0,m} = -D_1 \left( \delta_{x\cdot}\delta_{xx} u_{0,m} + \left( \frac{D_4}{D_1} + \nu_{y} \right) \delta_{x\cdot}\delta_{yy} u_{0,m}\right)$$ - Balance of Moments:
$$R_{0y} \delta_{x\cdot} u_{0,m} = D_1 \left(\delta_{xx} u_{0,m} + \nu_y \delta_{yy} u_{0,m} \right)$$
- Balance of Forces:
-
at
$l = N_x$ - Balance of Forces:
$$K_{L_x y} w_{N_x,m} = -D_1 \left( \delta_{x\cdot}\delta_{xx} u_{N_x,m} + \left( \frac{D_4}{D_1} + \nu_{y} \right) \delta_{x\cdot}\delta_{yy} u_{N_x,m}\right)$$ - Balance of Moments:
$$R_{L_x y} \delta_{x\cdot} u_{N_x,m} = D_1 \left(\delta_{xx} u_{N_x,m} + \nu_y \delta_{yy} u_{N_x,m} \right)$$
- Balance of Forces:
-
at
$m = 0$ - Balance of Forces:
$$K_{x0} u_{l,0} = -D_3 \left( \delta_{y\cdot}\delta_{yy} u_{l,0} + \left( \frac{D_4}{D_3} + \nu_{x} \right) \delta_{y\cdot}\delta_{xx} u_{l,0}\right)$$ - Balance of Moments:
$$R_{x0} \delta_{y\cdot} u_{l,0} = D_3 \left(\delta_{yy} u_{l,0} + \nu_x \delta_{xx} u_{l,0} \right)$$
- Balance of Forces:
-
at
$y = L_y$ - Balance of Forces:
$$K_{x L_y} u_{l,N_y} = D_3 \left( \delta_{y\cdot}\delta_{yy} u_{l,N_y} + \left( \frac{D_4}{D_3} + \nu_{x} \right) \delta_{y\cdot}\delta_{xx} u_{l,N_y}\right)$$ - Balance of Moments:
$$R_{x L_y} \delta_{y\cdot} u_{l,N_y} = -D_3 \left(\delta_{yy} u_{l,N_y} + \nu_x \delta_{xx} u_{l,N_y} \right)$$
- Balance of Forces:
with analogous discretisations holding for the boundary conditions along the other edges. An important condition arises at the corners, as:
The semidiscrete system above may be recast in a convenient matrix-vector form. To that end, a state vector
Each coloured strip is composed of
where the matrix
At a generic inner point in the domain
In the above:
The values of the points in shaded "ghost" region must be set according to the numerical boundary conditions above, including the important corner condition. Doing so, one is able to revert the value of the difference operator at each point on the domain using points defined on the plate grid.
The expressions for the resulting coefficients are cumbersome. They appear in the appropriate Matlab functions.
The block form of the matrix is as per the image below. Blocks of the same colour have the same structure. All middle blocks, represented by a shaded blue area, have the same structure.
The diagram above shows the overall structure of the difference operator. Yellow blocks are pentadiagonal, blue blocks are tridiagonal, and red blocks are diagonal.
MAGPIE allows the coupling of the plate structure to stiffening ribs and pointwise loads. The equations are modified as follows:
where
These elements change the vibrational modes and the response of the plate to applied dynamic (i.e. time-dependent) loads.
All source code is found in the src/ directory of the repository.
Direct modelling can be run in both the frequency and the time domains.
For the frequency domain, the simulation parameters are specified in the FreqDomainLauncher.m.
User-editable parameters appear below this line
%-------------------------------------------------------------------------
% CUSTOM PARAMETERS (user can change these)
and up to
% END CUSTOM PARAMETERS
%-------------------------------------------------------------------------
First, global simulation parameters are set
%-- general parameters
fmax = 2000 ; % maximum frequency to be computed
ppw = 20 ; % points per wavelength at maximum frequency. Choose 3 <= ppw
Nmodes = 27 ; % select total number of modes to be computed. If Nmodes = [], all possible modes are computed
%--------------------
Here fmax is the largest frequency to be computed. ppw is the number of points per wavelength at such frequency. The grid spacings in the x and y directions are set using these two parameters as
The number of grid points along x and y is set via such grid spacings, as
with Nmodes is the total number of modes to be computed by the eigenvalue routine. The largest mode number is Nmax = (Nx+1)*(Ny+1), but in most cases one is interested in just a handful of modes given by Nmodes -- note that considerable speedups are so obtained.
Plate parameters, rather self-explanatory, come next:
%--------------------
%-- plate parameters
rho = 390 ; % density [kg / m^3]
nux = 0.39 ; % poisson ratio
Ex = 10.4e9 ; % young's mod along x [Pa]
Ey = 0.994e9 ; % young's mod along y [Pa]
Gxy = 0.526e9 ; % shear mod [Pa]
Lx = 0.4 ; % edge lenght x [m]
Ly = 0.6 ; % edge length y [m]
Lz = 3e-3 ; % thickness [m]
%-- elastic constants around the edges
KRmat = [1e13,1e13; %Kx0 Rx0
1e13, 1e13; % K0y R0y
1e13, 1e13; % KxL RxL
1e13, 1e13] ; % KLy RLy
%--------------------
Note that, in order to simulate an "infinite" stiffness at the boundary, a rather large value must be selected. Usually, this can be set as 1e13.
Next, braces and lumped load parameters must be set:
%--------------------
%-- braces parameters
Nribs = 8 ; % number of braces
Eb = [10e9,10e9,10e9,10e9,10e9,10e9,10e9,10e9].' ; % youngs moduli
Lzb = [3e-3,3e-3,3e-3,3e-3,3e-3,3e-3,3e-3,3e-3].' ; % thicknesses
bb = [3e-2,3e-2,3e-2,3e-2,3e-2,3e-2,3e-2,3e-2].' ; % width cross section
rhob = [400,400,400,400,400,400,400,400].' ; % densities
% rib coordinates along x (start and end) AS A FRACTION OF Lx
x_beam_coord = ...
[0.2,0.8;
0.2,0.8;
0.2,0.8;
0.2,0.8;
0.2,0.8;
0.2,0.8;
0.2,0.8;
0.2,0.8] ;
% rib coordinates along y (start and end) AS A FRACTION OF Ly
y_beam_coord = ...
[0.1,0.2;
0.2,0.3;
0.3,0.4;
0.4,0.5;
0.5,0.6;
0.6,0.7;
0.7,0.8;
0.8,0.9] ;
%--------------------
%--------------------
%-- static loads and stiffeners parameters
Nlump = 3 ; % number of lumped elements
x_lump_coord = [0.12,0.47,0.91].' ; % x coordinates of lumped elements
y_lump_coord = [0.75,0.4,0.38].' ; % y coordinates of lumped elements
Mlump = [0.5,0.01,0.01].' ;
%--------------------
Again, these are rather self-explanatory. Note that the lengths of the rib arrays must be consistent with Nribs. So, the array containing the rib Young's moduli, Eb, must be of length Nribs. All rib parameters are given in SI units (Pa for Young's moduli, m for the thickness and width of the braces' cross sections, and Kg/m^3 for the densities). The ribs' x and y coordinates are specified in two matrices, x_beam_coord and y_beam_coord, of size (Nribs) X 2. Each brace's initial and final x and y coordinates are given as fractions of Lx and Ly. Similar parameters are set for the static loads. Note that Mlump contains the loads' masses (in Kg).
Finally, the plot section completes the set of the user-editable parameters. These include the choice of the colormap and the flag absPlot to plot the absolute value of the modal shapes.
%--------------------
%-- plot parameters parameters
cmap = cmaps(4) ; % select colormap 1 = RedBlue, 2 = GreenPurple, 3 = OrangeGreen, 4 = PurpleOrange
NN = 9 ; % first mode number to be plotted
Nplots = 9 ; % select 3,6 or 9. If another number is selected, it is defaulted to 3. Displayed plots are NN + (0:Nplots - 1)
%--------------------
The file TimeDomainLauncher.m allows setting the parameters for the time domain simulations. Most of these are analogous to the frequency domain case above. The time domain simulation requires setting extra parameters controlling the input/output locations, the forcing type and parameters, and the decay parameters.
The I/O setup is straightforward: the input x_f is a one-by-two vector including the x and y coordinates (again, scaled by the side lengths). The output outMat is similar, but it can contain an arbitrary amount of rows each representing an virtual contact microphone on the plate's surface.
%--------------------
%-- input / output locations
x_f = [0.513,0.678] ; % frac of Lx Ly
outMat = [0.51,0.52; 0.12,0.76] ; % frac of Lx Ly, each row represents an output point
%--------------------
The forcing parameters consist of a flag forceType and a one-by-three vector. Currently, MAGPIE supports two force types: a raised cosine simulating an impulse and a sinusoid. When the raised cosine is selected, the three parameters appearing in the forceParams array correspond to contact duration (in seconds), the largest forcing amplitude (in Newtons) and a noise modulation parameter (this can be useful to give the resulting synthesis a brighter tone). In sinusoidal mode, the three forcing parameters are the sinusoidal input frequency, peak amplitude, and noise modulation.
%--------------------
%-- forcing
forceType = 1 ; % 1 = impulse , 2 = sinusoid
if forceType == 1
forceParams = [0.0007,50,0.5] ; % [time of contact (s), max Amplitude (N), noise modulation]
else
forceParams = [100,50,0.2] ; % [frequency of sine (Hz), max Amplitude (N), noise modulation]
end
%--------------------
The decay-time parameters are expressed via another one-by-three array. Currently, MAGPIE handles a Rayleigh-type decay profile, such that the damping matrix is
where dampVec array.
%--------------------
%-- loss parameters
dampVec = [0.9, 0.4, 500] ; %[t60_0Hz (s),t60_f1 (s), f1 (Hz)] NB you MUST use t60_f1 < t60_0Hz for stability
%--------------------
Finally, there are extra plot parameters compared to the frequency domain. The LivePlot flag allows plotting the animations in real-time. If selected, six plots are updated at a rate corresponding to Refreshrate. Finally, FilmRec allows recording to file the resulting animation.
%--------------------
%-- plot parameters parameters
cmap = cmaps(4) ; % select colormap 1 = RedBlue, 2 = GreenPurple, 3 = OrangeGreen, 4 = PurpleOrange
LivePlot = 1 ; % 1 : live plot on
RefreshRate = 1 ; % 1 = play all frames, 2 = play one out of two frames, etc
absPlot = 0 ; % 1 = plots absolute value (colormap will adjust accordingly)
FilmRec = 0 ; % 1= record video to file
%--------------------
MAGPIE allows the estimation of the elastic constants
%--------------------
%-- plate parameters
rho = 473.9 ;
Lx = 0.223 ;
Ly = 0.114 ;
Lz = 0.003 ;
%-- ballpark values
Ex0 = 10.7e9 ;
Ey0 = 716e6 ;
Gxy0 = 500e6 ;
nux0 = 0.51 ;
%-- elastic constants around the edges
KRmat = [0e13,0e13; %Kx0 Rx0
1e13, 1e13; % K0y R0y
0e13, 0e13; % KxL RxL
0e13, 0e13] ; % KLy RLy
%-- measured experimental frequencies (Hz)
ExpFreqs = [52
98
311
337
398
637] ;
%--------------------
The plate parameters here are drawn from the experimental plate. Of course, the values of the elastic constants are unknown at this stage.
The only requirement here is that the first
Note that the
The rest of the preamble is self-explanatory.
%--------------------
%-- general parameters
fmax = 2000 ; %-- maximum frequency to be computed
ppw = 100 ; % points per wavelength at maximum frequency. Choose 3 <= ppw
Nmeas = 6 ; % total number of modes required
%--------------------
%--------------------
%-- braces parameters
Nribs = 0 ; % number of braces
Eb = [].' ; % youngs moduli
Lzb = [].' ; % thicknesses
bb = [].' ; % width cross section
rhob = [].' ; % densities
% rib coordinates along x (start and end) AS A FRACTION OF Lx
x_beam_coord = ...
[] ;
% rib coordinates along y (start and end) AS A FRACTION OF Ly
y_beam_coord = ...
[] ;
%--------------------
%-- static loads and stiffeners parameters
Nlump = 0 ; % number of lumped elements
x_lump_coord = [].' ; % x coordinates of lumped elements
y_lump_coord = [].' ; % y coordinates of lumped elements
KLump = [].' ;
MLump = [].' ;
%--------------------
%--------------------
%-- plot parameters parameters
cmap = cmaps(1) ; % select colormap 1 = RedBlue, 2 = GreenPurple, 3 = OrangeGreen, 4 = PurpleOrange
absPlot = 0 ;
NN = 1 ; % mode number to plot (plot will display modes between NN and NN + 8)
%--------------------
%--------------------
%-- MAC parameters
MAC_threshold = 0.99 ;
%--------------------
% END CUSTOM PARAMETERS
%-------------------------------------------------------------------------
The only new parameter to set here is MAC_threshold. MAGPIE performs modal identification by computing the MAC (modal assurance criterion). A batch of "training" numerical plates is computed, and the modal shapes are assessed against the reference modal shapes computed using the ballpark elastic constants. When the average MAC across all MAC_threshold, the training plate is excluded. This ensures that the training is operated only on a batch of plates returning consistent modal shapes.




