MPB is a free and open-source 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 for periodic dielectric structures of lossless, wavelength-independent, anisotropic and 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.

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


  • Free and open-source software under the GNU GPL.
  • Complete scriptability via Python or Scheme APIs.
  • Portable to any Unix-like system such as Linux, macOS, and FreeBSD.
  • Distributed memory parallelism on any system supporting the MPI standard.
  • 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 comparison of time-domain and frequency-domain techniques.
  • Targeted eigensolver. Iterative eigensolvers normally compute states (harmonic 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.
  • Support for arbitrary, anisotropic dielectrics including gyrotropic/magneto-optic materials and non-orthogonal unit cells. Lossy and wavelength-dependent and are not supported.
  • Field output in the HDF5 data format.

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 development repository is on on GitHub. Gzipped tarballs of stable versions are available in Download. The release history is described in NEWS. Installation instructions are in Installation.


See the navigation sidebar at left. In particular, the Introduction and Tutorial are the most important things to review.

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

Mailing Lists

Subscribe to the read-only mpb-announce mailing list to receive notifications of updates and releases. Subscribe to the mpb-discuss mailing list for discussions regarding MPB. The mpb-discuss archives includes all postings since 2006 spanning a large number and variety of discussion topics related to installation, setting up simulations, post-processing output, etc.

Bug Reports and Feature Requests

For bug reports and feature requests, please file a GitHub issue.


The MPB project is maintained by Simpetus and the developer community on GitHub. Acknowledgements provides a complete listing of the project contributors.

Contacts and Feedback

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

Professional consulting services for photonic design and modeling including development of custom, turn-key simulation modules, training, technical support, and access to MPB in the public cloud via Amazon Web Services (AWS) are provided by Simpetus.