Calculating Acoustic Modes in MatlabThis is a page to download code for calculating acoustic modes used for simulating acoustic propagation over long ranges in deep water. Other hints for using this code and benchmarks can also be found here.
Codes for Acoustic Propagation
Table of Contents
MotivationRegarding acoustic modes, there were two issues that nagged at me for years. The first is that it always seemed to me that solving the second order differential equation for modes (either acoustic or internal wave) should be quite easy in Matlab as an eigenvalue problem. The second is that no simple code was readily available to find the acoustic modes. (One readily-available suite of matlab scripts solves for the modes using Chebyshev polynomials; it seems to work quite well as measured by both speed and accuracy.) In any case, after a weekend of fussing around with the problem and consulting the Computational Ocean Acoustics book of Jensen et al., I developed this code below. In the end it was rather simple, but the devil is in the details, of course. The code for calculating modes using Chebyshev polynomials (due to M. Dzieciuch) can be downloaded from the Ocean Acoustics Library: http://oalib.hlsresearch.com/
DownloadsThe amodes.m script is stand alone. It is designed to be a drop in replacement for chebmode.m.
Computational ApproachThe integration technique implemented to solve the second order differential equation for the modes is Numerov's Method, following the hint in Jensen et al. Computational Ocean Acoustics.Link to Google Books: http://books.google.com/books?id=QHtx4zYPbzMC . The method is implemented by discretizing the differential equation and setting up an eigenvalue problem. The matlab routine "eigs.m" is then used to solve for the desired number of eigenfunctions/eigenvalues.
CommentsWhile I amused myself in implementing this code, I have found it to be rather slow compared to the Chebyshev polynomial approach. The main problem is that the sound speed profile has to be discretized to at least 1 to 5 m, so that the eigenvalues/eigenfunctions have to be solved using a 5000X5000 to 1000X1000 sized matrix for a depth of 5000 m. Still, its not too bad, and a grid size of 5-m seems to be sufficient to reproduce the Chebyshev polynomal modes, while taking just a little longer (1.5 times as long?).So at the moment, it is just an educational code. It may be that this code can be more readily adapted to include the effects of the sea floor. Certainly, it can likely be adapted to solve for internal wave modes, using buoyancy rather than sound speed. I am still a little puzzled as to how to implement the boundary conditions with this approach. I will have to work on sorting that out, particularly for internal wave modes which have a non-zero surface boundary condition.
-- Brian Dushaw - 09 Feb 2009 Copyright © 2008-2015 by the contributing authors. All material on this collaboration platform is the property of the contributing authors. |