The ElasticMatrix Toolbox uses the partial-wave method [1,3,4] to model elastic wave propagation in multi-layered anisotropic media up to transverse-isotropic symmetry when the wave propagation is along a plane of symmetry.
Download from github, or MATLAB file exchange:
.
View the documentation online: https://dannyramasawmy.github.io/ElasticMatrix/
To add the ElasticMatrix Toolbox source-code and all the examples:
addpath(genpath('<folderpath>/ElasticMatrix'))
To add the ElasticMatrix Toolbox source-code without examples:
addpath('<folderpath>/ElasticMatrix/src-pw')
The source code is found in the src-pw
folder.
ElasticMatrix has been tested with MATLAB2016a and above and should run on most personal laptops and desktop machines.
-
To view the html documentation in MATLAB:
help (or press F1) -> Supplemental Software -> ElasticMatrix Toolbox
-
./examples
folder contains example scripts demonstrating some of the capabilities of the code. -
./examples_mlx
folder contains example scripts in the MATLAB live script style. -
./documentation
folder contains a reference list for the mathematical background.
Some of the code functionality includes:
- Plotting slowness profiles.
- Plotting reflection and transmission coefficients.
- Calculating dispersion curves for simple plate structures.
- Plotting displacement and stress fields.
- Calculating the directivity of Fabry-Perot ultrasound sensors, see [1].
- Dispersion curves are tracing incorrectly? Please try the "coarse" dispersion curve method.
Danny Ramasawmy
dannyramasawmy+elasticmatrix@gmail.com
or
Bradley Treeby
Ben Cox
The file tree for the ElasticMatrix Toolbox is shown below. Files/folders marked with an asterisk (*) are not included when using download in git and are only included if the repository is cloned. Files marked with a double asterisk are not pushed to the public repository, please contact the author if these are required.
Tree compiled: 2019-11-11
.
├── data
│ └── disperseTitaniumPlateData.txt
│ ├── disperseTeflonPlateData.txt
│
├── documentation
│ ├── 2019-07-19-BUG_coding_standard.md*
│ ├── example_template_file.m*
│ ├── functionTemplateFile.m*
│ ├── html
│ │ ├── ElasticMatrix.html
| │ ├── example_dispersion_curve_PVDF_plate.html
│ │ ├── example_dispersion_curve_teflon_plate.html
│ │ ├── example_dispersion_curve_titanium_plate.html
│ │ ├── example_elasticmatrix_class.html
│ │ ├── example_extra_functions.html
│ │ ├── example_fabry_perot_directivity.html
│ │ ├── example_interface_parameters.html
│ │ ├── example_medium_class.html
│ │ ├── example_periodic_media.html
│ │ ├── example_plot_field_parameters.html
│ │ ├── example_plot_field_parameters_movie.html
│ │ ├── example_reflection_and_transmission.html
│ │ ├── example_slowness_profiles.html
│ │ ├── helptoc.xml
│ │ └── images
│ │ ├── elastic_matrix_banner.JPG
│ │ ├── ElasticMatrix - class diagram.png
│ │ └── sfg_example.JPG
│ └── references.txt
│
├── examples
│ ├── example_dispersion_curve_PVDF_plate.m
│ ├── example_dispersion_curve_teflon_plate.m
│ ├── example_dispersion_curve_tissue_plate.m
│ ├── example_dispersion_curve_titanium_plate.m
│ ├── example_elasticmatrix_class.m
│ ├── example_extra_functions.m
│ ├── example_fabry_perot_directivity.m
│ ├── example_fabry_perot_frequency_response.m
│ ├── example_interface_parameters.m
│ ├── example_medium_class.m
│ ├── example_periodic_media.m
│ ├── example_plot_field_parameters.m
│ ├── example_plot_field_parameters_movie.m
│ ├── example_reflection_and_transmission.m
│ └── example_slowness_profiles.m
│
├── examples_mlx
| ├── example_dispersion_curve_PVDF_plate.mlx
│ ├── example_dispersion_curve_teflon_plate.mlx
│ ├── example_dispersion_curve_titanium_plate.mlx
│ ├── example_elasticmatrix_class.mlx
│ ├── example_extra_functions.mlx
│ ├── example_fabry_perot_directivity.mlx
│ ├── example_interface_parameters.mlx
│ ├── example_medium_class.mlx
│ ├── example_periodic_media.mlx
│ ├── example_plot_field_parameters.mlx
│ ├── example_plot_field_parameters_movie.mlx
│ ├── example_reflection_and_transmission.mlx
│ └── example_slowness_profiles.mlx
│
├── src-pw
│ ├── calculateReflectionTransmissionAnalytic.m
│ ├── cls.m
│ ├── @ElasticMatrix
│ │ ├── calculateDispersionCurvesCoarse.m
│ │ ├── calculateDispersionCurves.m
│ │ ├── calculateField.m
│ │ ├── calculateFieldMatrixAnisotropic.m
│ │ ├── calculate.m
│ │ ├── calculateMatrixModelKf.m
│ │ ├── calculateMatrixModel.m
│ │ ├── disp.m
│ │ ├── ElasticMatrix.m
│ │ ├── getPartialWaveAmplitudes.m
│ │ ├── plotDispersionCurves.m
│ │ ├── plotField.m
│ │ ├── plotInterfaceParameters.m
│ │ ├── plotRTCoefficients.m
│ │ ├── save.m
│ │ ├── setAngle.m
│ │ ├── setFilename.m
│ │ ├── setFrequency.m
│ │ ├── setMedium.m
│ │ ├── setPhasespeed.m
│ │ └── setWavenumber.m
│ ├── @FabryPerotSensor
│ │ ├── calculateDirectivity.m
│ │ ├── disp.m
│ │ ├── FabryPerotSensor.m
│ │ ├── getDirectivity.m
│ │ ├── plotDirectivity.m
│ │ ├── setMirrorLocations.m
│ │ ├── setSpotDiameter.m
│ │ └── setSpotType.m
│ ├── findClosest.m
│ ├── findClosestMinimum.m
│ ├── findZeroCrossing.m
│ ├── materialList.m
│ ├── @Medium
| │ ├── availableMaterials.m
│ │ ├── calculateAlphaCoefficients.m
│ │ ├── calculateSlowness.m
│ │ ├── disp.m
│ │ ├── getAcousticProperties.m
│ │ ├── lameConversion.m
│ │ ├── Medium.m
│ │ ├── mtimes.m
│ │ ├── plotSlowness.m
│ │ ├── plus.m
│ │ ├── setDensity.m
│ │ ├── setName.m
│ │ ├── setStiffnessMatrix.m
│ │ ├── setThickness.m
│ │ ├── soundSpeedDensityConversion.m
│ │ ├── state.m
│ │ └── times.m
│ ├── normMe.m
│ ├── printLineBreaks.m
│ └── sfg.m
│
├── testing*
│ ├── run_all_tests_and_examples.m*
│ ├── test_comparison_with_GMM.m*
│ ├── test_elasticmatrix_class.m*
│ ├── test_fabry_perot_directivity.m*
│ ├── test_fabry_perot_frequency_response.m*
│ ├── test_fabryperotsensor_class.m*
│ ├── test_main_functions.m*
│ ├── test_medium_class.m*
│ ├── test_n_layers_vs_calculation_time.m*
│ └── test_partial_wave_amplitudes.m*
│
├── testing_data**
│ ├── Beard1999FrequencyResponseFabryPerotData.mat**
│ ├── glassEtalonFabryPerotDirectivityData.mat**
│ └── gmmIsotropicModelData.mat**
│
├── info.xml
├── LICENSE.txt
└── README.md
[1] Ramasawmy, Danny R., et al. "ElasticMatrix: A MATLAB Toolbox for Anisotropic Elastic Wave Propagation in Layered Media.", (2019).
[2] Ramasawmy, Danny R., et al. "Analysis of the Directivity of Glass Etalon Fabry-Pérot Ultrasound Sensors." IEEE transactions on ultrasonics, ferroelectrics, and frequency control, (2019).
[3] Lowe, Michael JS. "Matrix techniques for modeling ultrasonic waves in multilayered media." IEEE transactions on ultrasonics, ferroelectrics, and frequency control, (1995).
[4] Nayfeh, Adnan H. "The general problem of elastic wave propagation in multilayered anisotropic media." The Journal of the Acoustical Society of America (1991).
[5] Pavlakovic, Brian, et al. "Disperse: A general purpose program for creating dispersion curves." Review of progress in quantitative nondestructive evaluation. Springer, Boston, (1997).
[6] Rose, Joseph L. "Ultrasonic guided waves in solid media." Cambridge university press, (2014).
[7] Cheeke, J. David N. "Fundamentals and applications of ultrasonic waves." CRC press, (2016).
[8] Beard, P. "Transduction mechanisms of the Fabry-Perot polymer film sensing concept for wideband ultrasound detection" IEEE transactions on ultrasonics, ferroelectrics, and frequency control, (1999).
[9] Cox, Benjamin T., and Paul C. Beard. "The frequency-dependent directivity of a planar Fabry-Perot polymer film ultrasound sensor." IEEE transactions on ultrasonics, ferroelectrics, and frequency control, (2007).