# 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 (`RWGGeometry.cc`

,`RWGSurface.cc`

) - Analysis of surface meshes to identify RWG basis functions (
`InitEdgeList.cc`

) - Assembly of system matrix ([
`AssembleBEMMatrix.cc`

],`SurfaceSurfaceInteractions`

) - Evaluation of matrix elements of RWG basis functions (
`GCMatrixElements.cc`

) - Evaluation, caching, and reuse of singular contributions to integrals: [
`TaylorDuffy.cc`

], [`FIBBICache.cc`

] - Assembly of RHS vector ([
`AssembleRHSVector.cc`

])

Postprocessing:

- Computation of scattered fields ([
`GetFields.cc`

]) - Computation of induced dipole moments ([
`GetDipoleMoments.cc`

]) - Computation of PFT via displaced-surface-integral algorithm ([
`DSIPFT.cc`

]) - Computation of PFT via energy-momentum transfer algorithm ([
`EMTPFT.cc`

])

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

The

## scuff-em solution

ARGS="" 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}

## Comparison

## Unit test

The unit test is performed by running the script `tests/Mie/TestMie.sh.`

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
`% TestMie.sh --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.