Numerically Approximating the Wave Equation? 260
ObsessiveMathsFreak writes "I'm an applied mathematician who has recently needed to obtain good numerical approximations to the classic second-order wave equation, preferably in three space dimensions. A lot of googling has not revealed much on what I had assumed would be a well-studied problem. Most of the standard numerical methods, finite difference/finite element methods, don't seem to work very well in the case of variable wave speed at different points in the domain, which is exactly the case that I need. Are any in this community working on numerically solving wave equation problems? What numerical methods do you use, and which programs do you find best suited to the task? How do you deal with stability issues, boundary/initial values, and other pitfalls? Are there different methods for electromagnetic wave problems? Finally, when the numbers have all been crunched, how do you visualize your hard-earned data?"
More information is needed (Score:5, Informative)
The question you have posed is so unspecific, it would be impossible to fully answer it without writing a text book. There are many good ones, for example, Waves in Layered Media by L. M. Brekhovskikh.
usenet (Score:4, Informative)
Don't seem to work very well? (Score:4, Informative)
In what ways does it not work well for you? It doesn't converge, takes too long to converge? What is the problem?
A numerical algorithm would give you the assumptions that guarantee convergence and you should be able to figure out under what conditions it would "not work well". Just look up the assumptions and see what assumption your variable wave speed violates to not give you convergence.
Information is scarce (Score:3, Informative)
I can tell you that the internet is lacking for stuff even as simple as that, and it's hard to find a good textbook. You might have better luck with a text book, since your need is more focused than the course I took.
Finite element (Score:5, Informative)
Many many options (Score:5, Informative)
If your problem domain is not too many wavelengths big (i.e. near-field), you want a FDTD solver. There are many commercial packages available but most are expensive (just google for FDTD). FDTD is quite simple in concept but there are various details to get right to make a general purpose solver (e.g. boundary conditions). There are a number of hardware-based solvers on the market utilising GPUs for electromagnetics calculations. If you only need a single-frequency (eigenmode) solution, then Finite Element Method might be for you (e.g. see http://people.web.psi.ch/geus/pyfemax/ [web.psi.ch]). If you have extreme aspect ratios you need to model (i.e. interaction between widely spaced components), then the Boundary Element Method might suit (but it's harder to understand and implement).
If you're rolling your own solution, Python makes an excellent "glue language" to tie solvers together and visualise results with VTK (www.vtk.org) and add configuration GUIs.
Feynman invented Monte Carlo? Me don't think so (Score:2, Informative)
see: Wikipedia [wikipedia.org]
People to contact who might know (Score:1, Informative)
Finite Element Methods - CLAWPACK (Score:2, Informative)
Hm, a PDE. (Score:3, Informative)
When it comes to display, the programs I've written always dumped the formated output to a text file. I then used gnuplot (http://www.gnuplot.info/) to view the data of interest. It can also dump the graph to a ps for inclusion in a paper is desired.
Hope that was helpful.
Try J. Comput. Phys. and J. Sci. Comput. (Score:5, Informative)
This isn't my area, but my Ph.D. is in applied and computational math, and I've spent a great deal of time solving first-order hyperbolic problems where characteristics cross. (In my context, level set methods where the zero contours can split and/or merge.)
For a hyperbolic problem like this, you'll want to be careful. Since the waves have variable propagation speeds, there's a possibility for shock formation. (characteristics can cross) Think of Burger's equation as a nice, tangible first-order analog. In such a case, it will be important to choose a numerical method that satisfies some kind of entropy condition to handle the shock. Similar things have been encountered in level set methods, where you solve an equation of the form ft + V |grad(f)| = 0, where V is the variable speed of an interface that's represented as the zero contour of f.
Since second-order wave equations are so important in physics, you may want to check out the Journal of Computational Physics [sciencedirect.com]. You should probably also try the Journal of Scientific Computing [springerlink.com].
As for visualization, you'll probably want to check out the "industry standards" Matlab and Mathematica. You could plot the time evolution of level surfaces of your wave equation, for instance. As for other softare, I'd generally advise pulling together what you can find at netlib [netlib.org], although more cutting-edge stuff may require you to roll your own C/C++ or FORTRAN. But any of that stuff will be faster than running in Matlab or Mathematica, and it will take a whole lot less memory.
Best of luck, and have fun! :-) -- Paul
XMDS, open source PDE modeling package might do it (Score:4, Informative)
Quote from the home page:
Re:Information is scarce (Score:5, Informative)
And if the problem is significantly complex or you need more general solution, try a Greens function.
Re:Monte Carlo? (Score:3, Informative)
Monte Carlo is useful when you have some finite input for a question (whose answer you can easily calculate given the input) and you need some kind of idea about what the output usually is: throw in random inputs until you think you have an idea. Then prove it.
This is different: he wants to know how to calculate the answer to his problem, because it's not easy. Making random guesses won't help. Grid methods will, but they will cost a hell of a lot of memory and computation. Maybe pestering the computational fluid dynamics community would be a good idea?
Re:Many many options (Score:5, Informative)
Re:usenet (Score:2, Informative)
Re:usenet (Score:2, Informative)
(Google cache [72.14.205.104] of Mr Johnson's cv)
Re:Best way to get a quick answer. (Score:5, Informative)
I don't have any good references to hand, but for the plain old wave equation (time inhomogeneous and homogeneous) you could try looking at discontinuous Galerkin methods. Depending on the inhomogeneity in your coefficients, you might be able to use a Godunov scheme. Your local friendly applied mathematics professor specialising in numerical methods for PDEs should be able to tell you more.
If you're interested in contemporary research, there are plenty of conferences on this kind of stuff. Here's a recent one [waves2007.org].
To Elaborate on the Submission (Score:5, Informative)
I work on sonar/seismic/radar inversion problems. Essentially the problem of mapping terrain or subterrain by measuring scattered sound or radio signals, e.g. with synthetic aperture radar [wikipedia.org]. One thing I seriously lack at the moment is a good wave simulation that I can simply play around with to get a feel for both wave mechanics itself and for the equations and techniques of the field.
Analytical, asymptotic and ray tracing methods to approximate the wave equation are all very well, but at some point I feel I need to see a full solution, or a good approximation to one. I also need a method of simulating emitted sonar and radar pulses, their interaction with "obstacles" or features they encounter, and the returned or scattered signals from this interaction. I need a way of doing this with highly irregular scattering obstacles, both in terms of geometry and wave speed.
What I would most like to get is a model of wave propagation in a simulated 3D domain with highly irregular boundaries and speeds, something that would defy most analytical approaches. My goal is to try and simulate actual subterranean features via fractals and other techniques, and use the numerical wave equation simulation to get a good simulation of what real life returned signals would look like. I need a good simulation because, as you would expect, the inversion algorithms that map out the terrain from the returned signals, can be very sensitive to variations in the signals they receive.
I'll be working in the unsteady case as I have reservations about transforming to the Helmholtz equation, not least of which is the necessity of taking the fourier transform of the source signal. I'm trying to get as exact a solution as possible.
The ones I have tried suffer from the problems related to the CFL condition [wikipedia.org]. To sum it up -if c*dt/dx is not exactly equal to one, problems arise. Greater than one and the method is unstable(horribleness). Equal to one and things are peachy. Unfortunately, less than one and the method, though stable, seems to suffer from either a numerical or some other more subtle type of instability. I'm not a numerical analysit, nor do I have time to probe further. This rules out these methods as c will be variable in any practical problem I use the code on. I'm also worried about other types of potential pitfalls; caustics, shocks, infinities, etc.
Which is exactly why I don't want to use those methods, or any method that requires me to nurse or otherwise "prep" the method before use. I intend to throw multiple simulated terrains at the method and I'd like it to perform well across all ranges. I was hoping that in this day and age such a solution existed, but I'm aware I may be asking for the impossible.
I posted the question because I was tired of unsuccessfully Googling and unwilling to waste more time playing lucky dip with tedious textbook monographs. The reason I've posted this question on Slashdot is because the comments on many a science story suggest that a lot of professional scientists do post comments here. I'm holding out that the question may catch the eye of a meteorologist or radio modeling specialist who has worked on such a problem, and who has precisely the right technique, program and visualization method I'm looking for. Here's hoping.
There's been a lot of good suggestions so
Try using a commercial FDTD solver with dieletrics (Score:2, Informative)
Exploration Geophysics (Score:3, Informative)
Search for "wave equation" or "finite difference" here [seg.org] at the search site of the Society of Exploration Geophysics. [seg.org]
Meshless methods (Score:2, Informative)
As a matter of fact, I *am* an applied mathematician, and I do work in this field.
I am just a beginner, though. Here are is a solution of the shallow water wave equations in a circular tub:
http://platinum.linux.pl/~jordi/movies/sw-solution .ogg [linux.pl]
(Ogg Theora. If you can't play it, get VLC or any other free software player.)
The method I used is a very flexible meshless method that is a relatively modern alternative to finite element methods. Btw, finite volumes are much more popular for fluid dynamical problems, but the other big two methods (finite elements and differences) are also widely used. The meshless method I used (of which there are also many available) is radial basis functions, what looks to me like a thriving area of modern research. Pros is that you avoid all the mesh generation that takes about 80% of the computational time with finite elements and you manage to keep the flexibility of meshes by allowing finer detail at problematic sites (just put more basis functions where the problems could happen). Cons is that you get ugly matrices, but if you play your method right, you can arrange it so that you only have to factorise the ugly matrix once and then just do forward and back substitutions at each iteration. I did unsymmetric collocation for my matrices, since experience seems to show that the extra work required to make the matrices symmetric yields only very small dividends. There are also ways of coupling this method with domain decomposition in order to get smaller matrices. This is in fact my thesis work. :-) If you're interested in more details and seeing my C++ source, contact me at jordigh@gmail.com
As for visualisation software, I indirectly used VTK [wikipedia.org] through Octaviz [sourceforge.net], a visualisation addon for Octave. The movies I generated with mplayer's encoder, mencoder.
HTH :-)
Re:To Elaborate on the Submission (Score:2, Informative)
While OpenFOAM is usually used for fluid dynamics, I get the impression that if it can be done in three dimensions with PDEs and the Finite Volume method, it can be done with OpenFOAM.
I suggest you access their forums and ask what the denizens think of your problem.
http://openfoam.cfd-online.com/cgi-bin/forum/show
Will take you to a fairly recent posting from the forum, from which you can navigate using the menu on the left of the screen to other postings, to search the site, or to register. (Can't post a query until you register.)
If you want to read about OpenFOAM, just go to
http://www.opencfd.co.uk/openfoam/ [opencfd.co.uk]
"The OpenFOAM (Open Field Operation and Manipulation) CFD Toolbox can simulate anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, to solid dynamics, electromagnetics and the pricing of financial options. OpenFOAM is produced by OpenCFD Ltd, is freely available and open source, licensed under the GNU General Public Licence."
Hope you can do C++.
Regards, Non.