MieLib is a Python library for the scattering of waves by a sphere (Mie theory) in optics and in acoustics, and for the vector spherical harmonics.
-
mielib.optics: an isotropic sphere, also magnetic, in a magnetic host. Mie coefficients, T-matrix, internal amplitudes and the denominators, whose zeros are the modes of the sphere. -
mielib.acoustics: a fluid sphere, from the Supplemental Material of Phys. Rev. Lett. 123, 183901 (2019). The same functions as in optics. - Cross sections in both physics: scattering, extinction, absorption, backscattering, radiation pressure, the asymmetry parameter, and the part of each multipole.
-
mielib.vsh: the complex vector spherical harmonics$\mathbf{M}$ ,$\mathbf{N}$ ,$\mathbf{L}$ , the harmonic$\mathbf{X}$ of Jackson, and the real harmonics of Bohren & Huffman. -
mielib.special: spherical Bessel, Hankel and Riccati–Bessel functions with their first and second derivatives. -
mielib.coordinates: spherical and cylindrical coordinates, and the components of vector fields in them.
From PyPI:
pip install --upgrade mielib
mielib needs Python 3.12 or later and SciPy 1.18 or later.
import numpy as np
from mielib import optics
# a sphere with the radius 100 nm and eps = 16 + 0.3i in vacuum
wavelength = np.linspace(500e-9, 1100e-9, 300)
k = 2 * np.pi / wavelength # wavenumber in the host
q = optics.cross_sections(k, 100e-9, 16 + 0.3j, norm='geom')
q.sca, q.ext, q.abs # cross sections divided by pi a^2
q.sca_e[1], q.sca_m[1] # the electric and the magnetic dipole parts of q.scaAll the Mie functions take the size parameter optics.mie_a(j, x, eps_rel, mu_rel) and acoustics.mie_a(j, x, rho_rel, beta_rel).
The harmonics take the indices in the order (j, m), for example vsh.N(j, m, rho, theta, phi, superscript=1).
The note Vector spherical harmonics and Mie scattering in optics and acoustics: conventions and explicit formulas gives all the definitions and the formulas that mielib uses. Its notation follows the PhD thesis of I. Toftul, Resonant Metaphotonics: From Optical Manipulation to Chiral Metasurfaces (Australian National University, 2026).
The examples folder has Jupyter notebooks:
- cross_sections.ipynb: the cross sections of a sphere and their multipole parts, in optics and in acoustics.
- fields.ipynb: the fields for a scattering problem.
- harmonics.ipynb: the vector spherical harmonics, and a plane wave from the harmonics.
The changes between the versions are in CHANGELOG.md.
- Search for complex poles of Mie scattering coefficients
If you use mielib, please cite it:
@misc{mielib,
author = {Ivan Toftul},
title = {{MieLib python library}},
journal = {GitHub},
year = {2023},
url = {https://github.com/toftul/mielib},
doi = {10.5281/zenodo.8008648}
}The conventions and the theory are from the thesis:
@phdthesis{Toftul2026thesis,
author = {Ivan Toftul},
title = {{Resonant Metaphotonics: From Optical Manipulation to Chiral Metasurfaces}},
school = {Australian National University},
year = {2026},
url = {https://hdl.handle.net/1885/733812237}
}