MPB is a free software package for computing the band structures, or dispersion relations, and electromagnetic modes of periodic dielectric structures, on both serial and parallel computers. MPB is an acronym for MIT Photonic Bands. MPB computes definite-frequency eigenstates, or harmonic modes, of Maxwell's equations in periodic dielectric structures for arbitrary wavevectors, using fully-vectorial and three-dimensional methods. It is applicable to many problems in optics, such as waveguides and resonator systems, and photonic crystals. For example, it can solve for the modes of waveguides with arbitrary cross-sections.

See also our complementary Meep package for time-domain simulations, reflection/transmission spectra, etc.


  • Free software under the GNU GPL.
  • Portable to any Unix-like system such as Linux and macOS.
  • Support for parallel machines with MPI.
  • Fully-vectorial 1d, 2d, 3d calculations. Iterative eigensolver techniques are employed to make large calculations possible.
  • Direct, frequency-domain eigensolver as opposed to indirect methods, e.g. time-domain. This means that you get both eigenvalues (frequencies) and eigenstates (electromagnetic modes) at the same time. See a comparison of time-domain and frequency-domain techniques.
  • Targeted eigensolver. Normally, iterative eigensolvers provide you with the states (photonic bands/modes) with the lowest few frequencies. MPB can alternatively compute the modes whose frequencies are closest to a specified target frequency. This greatly reduces the number of bands that must be computed in guided or resonant mode calculations.
  • Flexible, scriptable user interface based on Scheme. A Python interface is under development.
  • Support for arbitrary, anisotropic dielectricstructures including gyrotropic/magneto-optic materials and non-orthogonal unit cells.
  • Field output in HDF5 format supported by many visualization tools.

To give you some feel for how long these calculations take, let us consider one typical data point. For the 3d band-structure of a diamond lattice of dielectric spheres in air, computing the lowest 10 bands on a 16×16×16 grid at 31 k-points, MPB took 8 seconds on a 2.8 GHz AMD Opteron under Debian with the ATLAS optimized BLAS library. Thus, at each k-point, MPB was minimizing a function with 81920 degrees of freedom in 0.26 seconds on average.


The latest development sources are available on GitHub. The source tarballs are available on the Download page. The release history is described in the Release Notes. The installation instructions can be found in the Installation page.


See the navigation sidebar at left. The Tutorial demonstrates what it is like to use the program.

Please cite MPB in any publication for which you found it useful.

Mailing Lists

The MPB mailing lists and their archives are another source of information about MPB.

Subscribe to the read-only mpb-announce mailing list to receive notifications of updates and releases. Subscribe to the unmoderated mpb-discuss mailing list for discussions about using MPB. Archives are available here. You can also read and post to the list via the newsgroup from Gmane.

Bug Reports and Feature Requests

For bug reports and feature requests, please file an MPB Github issue.


The MPB project is maintained by Simpetus and the open-source community on GitHub. Please see the Acknowledgements for a more complete listing of those to whom we are grateful.

Contacts and Feedback

If you have questions or problems regarding MPB, you are encouraged to query the mailing list.

Professional consulting services as well as free access to MPB in the public cloud via Amazon Web Services (AWS) are provided by Simpetus.