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.