Skip to content

Mie Scattering

The MieScattering unit of the scuff-em test suite uses the scuff-scatter command-line module to study the textbook problem of Mie scattering: the scattering of plane waves from a sphere.

More specifically, we consider a circularly-polarized plane wave incident from below on a sphere of radius m and made of gold, described by the dielectric function and we compute + scattered and total fields at points outside and inside the sphere, + induced electric and magnetic dipole moments + power, force, and torque (PFT) imparted to the sphere.

The aspects of scuff-em functionality exercised by this test include the following:

Core library (libscuff)

Basic setup of scattering problems for compact geometries:

  • Parsing of .scuffgeo files (,
  • Analysis of surface meshes to identify RWG basis functions (
  • Assembly of system matrix ([], SurfaceSurfaceInteractions)
  • Evaluation of matrix elements of RWG basis functions (
  • Evaluation, caching, and reuse of singular contributions to integrals: [], []
  • Assembly of RHS vector ([])


  • Computation of scattered fields ([])
  • Computation of induced dipole moments ([])
  • Computation of PFT via displaced-surface-integral algorithm ([])
  • Computation of PFT via energy-momentum transfer algorithm ([])

libhmat support library:

  • Basic handling of dense matrices and vectors
  • Calls to LAPACK routines for solving linear systems

libmatprop support library:

  • Parsing of MATERIAL...ENDMATERIAL sections in .scuffgeo files
  • Support for frequency-dependent permittivities defined by user-specified functions

libincfield support library:

  • Plane waves

scuff-scatter command-line application module:

  • Core functionality

Exact solution

The theory of Mie scattering is presented in any number of textbooks, such as Bohren and Huffman, Absorption and Scattering of Light by Small Particles,, and is reviewed in this memo distributed with the scuff-em documentation. For a sphere irradiated by an incident field consisting of a linear combination of incoming spherical waves, the scattered fields {inside,outside} the sphere are linear combinations of {regular, outgoing} spherical waves, where the scattered-field expansion coefficients are related to the incident-field coefficients according to $$ b^{\in,out}_{P,\ell,m} =

The situation considered here is that of a right-circularly-polarized plane wave of unit amplitude impinging from below the sphere, in which case the incident-field expansion coefficients read


scuff-em solution

ARGS="${ARGS} --geometry    GoldSphere_501.scuffgeo"
ARGS="${ARGS} --OmegaFile   0.1"
ARGS="${ARGS} --Omega       1.0"
ARGS="${ARGS} --ThetaMin    0"
ARGS="${ARGS} --ThetaMax    85"
ARGS="${ARGS} --ThetaPoints 19"
ARGS="${ARGS} --ZAbove      1.0"
 % scuff-scatter ${ARGS}


Unit test

The unit test is performed by running the script tests/Mie/ This runs scuff-scatter with the command-line arguments discussed above, producing output files with names like GoldSphere_501.DSIPFT, then runs CheckSCUFFData to compare the content of these files against reference files with names like GoldSphere_501.DSIPFT.reference. (The reference files are included in the scuff-em source distribution, but may be regenerated by running % --reference. The items to be checked in the comparison are defined in the checklist file Mie.Checklist. The unit test passes iff all data items for all data sets agree within specified tolerances.