Slashdot Mirror


Numerically Approximating the Wave Equation?

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?"

5 of 260 comments (clear)

  1. Finite element by badinsults · · Score: 5, Informative

    Your question is rather specific given the crowd here on slashdot. Personally, I think you should ask other professional mathematitians at universities. If your problem is interesting, I'm sure you will have no problem finding someone who will give you advice. I personally only have limited experience in modeling of heat flow, which is somewhat similar to what your problem is. We use a finite element approach, where variables such as porosity, permiability, and composition can be changed for each element. It would likely be computationally expensive to create a functionally variable wave speed, so partioning it so that each element had different velocity paramenters would likely be suitable. As for programs, you might be forced to break out the C (or even FORTRAN) book and create your own. More often than not in specialized physics problems, there are no programs that are specifically applicable to your problem. If there were, you would have already found it.

  2. Many many options by Anonymous Coward · · Score: 5, Informative

    If you're doing an electromagnetics problem in 3D (I *am* a physicist specialising in this field), there are many options. This is a VERY well studied problem.

    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/). 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.

    1. Re:Many many options by Diffraction · · Score: 5, Informative

      FDTD doesn't have to be expensive - in fact the guys at MIT are nice enough to have published their own implementation under GNU GPL (see http://ab-initio.mit.edu/wiki/index.php/Meep). Installs on Linux and has a feature list rivaling commercial packages. We have used it successfully for simulating various nanophotonic structures.

  3. Try J. Comput. Phys. and J. Sci. Comput. by macklin01 · · 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. You should probably also try the Journal of Scientific Computing.

    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, 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

    --
    OpenSource.MathCancer.org: open source comp bio
  4. Re:Best way to get a quick answer. by attonitus · · Score: 5, Informative
    This is a well studied problem. I work on (time homogeneous) Maxwell's equations and we use finite elements successfully with variable coefficients. Peter Monk's book, "Finite Elements for Maxwell's Equations" has some good details. However, this is probably a more complicated problem that you want.

    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.