GEWtool
Guided elastodynamic wave dispersion in anisotropic layered plates and cylinders.
Install / Use
/learn @dakiefer/GEWtoolREADME
GEWtool 
Compute guided elastic wave (GEW) dispersion in MATLAB.
GEWtool (pronounce /ɡɛv tuːl/, as in good elder vibe tool) is an advanced system to compute and postprocess guided elastic waves (GEWs) in plates and cylinders. It is simple to use yet provides full access to the computational results as well as the underlying code. You are welcome to contribute to this open-source project.
Features:
- multi-layered plates, tubes and rods
- anisotropy, piezoelectricity, dissipation
- super fast, guarantees to find all solutions
- compute real frequencies, complex wavenumbers, or ZGV points
- choose polarization (Lamb/SH/coupled) and parity (S/A)
Code repository: https://github.com/dakiefer/GEWtool
[!WARNING] v2.0 introduces the following backward-incompatibilities:
- directory structure updated: you will need to re-run
install.mafter updating to v2.0.- postprocessing functions: now only require the
GEWdatobject returned by the solver, e.g.,cex = energyVelAxial(dat);instead ofcex = energyVelAxial(gew,dat);rotateEuler()changed from extrinsic to intrinsic rotations! This only affects you if you do several rotations in a row. Reverse the order of the rotation sequence in your old scripts to get the same results as previously. Seehelp rotateEulerfor more information.- changed coordinate system
- plate: ex-ey-ez system: ex is propagation direction, ez is normal to the plate surface (previously, this was ey)
- cylinder: ex-ephi-er system: ex is propagation direction, er is the radial direction
[!NOTE] Coming soon:
- Leaky waves
Contact me if you have questions: daniel.kiefer@espci.fr
Example: Lamb waves
mat = MaterialIsotropic('steel'); % load from database (or create your own)
h = 1e-3; % thickness in m
N = 22; % number of nodes (dictates accuracy)
k = linspace(1e-2, 12, 100)/h; % wavenumbers to solve for
plate = Plate(mat, h, N); % create waveguide description
gews = plate.LambSA; tic; % choose S+A Lamb waves (assembles matrices)
dat = computeW(gews, k, 6); toc; % solve and save 6 modes (argument optional)
plot(dat); % plot dispersion curves
output:
> Elapsed time is 0.136516 seconds.

The result can be explored interactively using the purpose-built graphical user interface GEWinspector:
GEWinspector(dat) % opens interactive window

All data is available for postprocessing and visualization in the returned object dat. For example, you can plot the laser-ultrasonic excitability of the waves (product of tangential and normal displacements ux·uz):
k = linspace(1e-2, 12, 200)/h; % use more wavenumbers
gew = plate.Lamb; % choose all Lamb waves this time
dat = computeW(gew, k, 7); % compute
exc = excitabilityLUS(dat, 'top'); % vx*uz at top surface
% (value of 1 at 100x median)
exc = 20*log10(exc); % in decibel
scatter(dat.k(:)/1e3, dat.w(:)/2/pi/1e6, 15, exc(:), 'filled'), ylim([0, 6]);
colormap(flipud(colormap)); cb = colorbar; caxis([-50, 0]);
xlabel('wavenumber k in rad/mm'), ylabel('frequency f in MHz')
title('laser-ultrasonic excitability in dB')

Installation
Add GEWtool and the relevant subfolders to the Matlab path and save it for future sessions. To achieve this:
- change to the
GEWtoolfolder (e.g., by navigating or usingcd) - execute
install
Enjoy!
Getting started
To get started, explore the examples directory.
You can also display help for all functions and classes, e.g., by typing help Plate. The most important ones are
- Material representation:
Material,MaterialIsotropic,MaterialPiezoelectric - Waveguides:
Plate,Cylinder,CylinderCircumferential - Solvers:
computeW,computeK,computeZGV - Graphical user interface:
GEWinspector
Known limitations
- Circumferential waves: post-processing is not fully supported. While group velocity is working, energy velocity cannot be computed at the moment.
Mathematical and physical background
GEWtool implements the Spectral Element Method (SEM) (higher-order Finite Elements) to solve the waveguide problem, i.e., the boundary value problem that describes wave propagation in the structure. Such an approach is commonly qualified as 'semi-analytical'. Contrary to classical root-finding of the characteristic equation, this method does not miss solutions. Moreover, unlike Finite Elements, the Spectral Elements lead to small but dense matrices.
Solusions are computed with machine precision provided you have set the number of nodes N sufficiently high. The higher you go in frequency-thickness, the higher N should be. As a rule of thumb: half of the obtained modes will be accurate. The figure below shows the convergence with respect to the Rayleigh-Lamb root of the S1 mode at 5.6 rad/mm in an aluminum plate (solution close to 5 MHz mm). This root has been computed with numerical precision using Matlab's fzero() function. A Spectral Collocation Method (SCM) is shown in comparison as well as the classical linear Finite Elements Method (FEM) that is also implemented in GEWtool. When using SEM, GEWtool attains 10 digits accuracy with N = 13 (matrices of size 26x26) in this case.

The computational time does not only depend on the matrix size but also on the algorithm chosen to solve the eigenvalue problem. A comparison between a direct algorithm (eig) and a subspace method (eigs) is depicted in the figure below. GEWtool automatically chooses the appropriate algorithm to use (heuristically with a fixed threshold). This way, the computation will be fast even when you are modeling waveguides with hundreds of layers, which results in large matrices.

For more information on the waveguide problem and the numerical methods, refer to the literature cited in the sections below.
Dependencies
GEWtool depends on the functions barylag, collocD , lglnodes and lgwt created by Greg von Winckel. They are bundled together with their license files in the resourcesAndDeps directory. You may also find them on
Greg von Winckel, MATLAB Central File Exchange, https://fr.mathworks.com/matlabcentral/profile/authors/869721.
The function computeZGVDirect depends on the MultiParEig toolbox by Bor Plestenjak and Andrej Muhič:
Bor Plestenjak (2022). MultiParEig (https://www.mathworks.com/matlabcentral/fileexchange/47844-multipareig), MATLAB Central File Exchange.
The function legendUnq by Adam Danz is used in the example scripts:
Adam Danz (2024). legendUnq (https://www.mathworks.com/matlabcentral/fileexchange/67646-legendunq), MATLAB Central File Exchange.
Citing GEWtool
If this code is useful to you, please cite it as (always indicating the DOI):
D. A. Kiefer (2023). GEWtool. https://doi.org/10.5281/zenodo.10114243 (https://github.com/dakiefer/GEWtool)
Please also cite the related publication(s) as relevant, e.g.,
[1] D. A. Kiefer, S. Mezil, and C. Prada, “Beating resonance patterns and extreme power flux skewing in anisotropic elastic plates,” Science Advances, vol. 9, no. 51, p. eadk6846, Dec. 2023, doi: 10.1126/sciadv.adk6846.
[2] D. A. Kiefer, S. Mezil, and C. Prada, “Extreme wave skewing and dispersion spectra of anisotropic elastic plates,” Phys. Rev. Res., vol. 7, no. 1, p. L012043, Feb. 2025, doi: 10.1103/PhysRevResearch.7.L012043.
[3] D. A. Kiefer, G. Watzl, K. Burgholzer, M. Ryzy, and C. Grünsteidl, “Electroelastic guided wave dispersion in piezoelectric plates: Spectral methods and laser-ultrasound experiments,” Journal of Applied Physics, vol. 137, no. 11, p. 114502, Mar. 2025, doi: 10.1063/5.0250494.
[4] H. Gravenkamp, B. Plestenjak, and D. A. Kiefer, “Notes on osculations and mode tracing in semi-analytical waveguide modeling,” Ultrasonics, vol. 135, p. 107112, Jul. 2023, doi: 10.1016/j.ultras.2023.107112.
[5] D. A. Kiefer, B. Plestenjak, H. Gravenkamp, and C. Prada, “Computing zero-group-velocity points in anisotropic elastic waveguides: Globally and locally convergent methods,” The Journal of the Acoustical Society of America, vol. 153, no. 2, pp. 1386–1398, Feb. 2023, doi: [10.1121/10.
