Fresnel Scattering
The FresnelScattering
unit of the
scuffem test suite
uses the scufftransmission commandline module
to study the textbook case of Fresnel scattering: the transmission and
reflection of plane waves at a planar dielectric interface of infinite extent
in the transverse dimensions.
More specifically, we consider plane waves incident from below on a dielectric halfspace of permittivity The geometry is 2Dperiodic with a unit cell of dimensions m; the only meshed surface is the planar interface between vacuum () and dielectric (), described by a mesh with 40 interior edges. The incident angle of the plane wave determines the Bloch vector of the scattering problem.
The aspects of scuffem functionality exercised by this test include the following:
Core library (libscuff)

Basic handling of periodic geometries. Parsing of
LATTICE...ENDLATTICE
statements in.scuffgeo
files. Processing of "straddler" basis functions in periodic geometries containing surfaces that extend across unitcell boundaries. (libscuff/PBCSetup.cc
) 
Computation of 2D periodic Green's function via Ewald summation (
GBarVDEwald.cc
) and its acceleration via interpolation table (GBarAccelerator.cc
) 
Assembly of system matrix for 2D Blochperiodic geometries, including acceleration scheme involving separating contributions of innermost 9 cells from contributions of outer ("all but inner" or ABI) cells (
AssembleBEMMatrix.cc
). 
Computation of scattered fields for Blochperiodic geometries (
GetFields.cc
).
libmdinterp support library:
 Instantiation and use of 2D and 3D interpolation
tables (
Interp2D.cc, Interp3D.cc
)
scufftransmission commandline application module:

Computation of transmission and reflection coefficients directly from surface currents (
GetAmplitudes.cc
) 
Computation of transmitted and reflected power via Poyntingvector integration using scattered fields (
GetFlux.cc
)
Exact solution
The situation considered here is that of a plane wave impinging from below on a dielectric halfspace (relative permittivity ) filling the region . (More details on the setup for scufftransmission calculations may be found in the document Computation of reflection and transmission coefficients in scuffem.)
For this case, the transmission and reflection coefficients for the TE and TM polarizations read
where is the incident angle ( for normal incidence), is the index of refraction, and
scuffem solution
The transmission and reflection coefficients for the dielectric
halfspace problem are computed using scufftransmission
as follows:
ARGS="" ARGS="${ARGS} geometry E10HalfSpace_40.scuffgeo" ARGS="${ARGS} Omega 0.1" ARGS="${ARGS} Omega 1.0" ARGS="${ARGS} ThetaMin 0" ARGS="${ARGS} ThetaMax 85" ARGS="${ARGS} ThetaPoints 19" ARGS="${ARGS} ZAbove 1.0" % scufftransmission ${ARGS}
Here the file
E10HalfSpace_40.scuffgeo
describes the scuffem geometry
(it refers to a mesh file named Square_40.msh
)
and the commandline arguments ask for a calculation at
two angular frequencies ( with
rad/sec the default
scuffem unit of angular frequency)
and at 20 incident angles in the range degrees.
Comparison
Running the above command yields the file
E10HalfSpace_40.transmission
.
Plotting in gnuplot yields
a comparison of scufftransmission data (point) to
theoretical predictions (curves):
Here is the gnuplot script that I use to produce this plot: PlotFresnelData.gp.
Unit test
The unit test is performed by running the script tests/Fresnel/TestFresnel.sh.
This runs scufftransmission
to do the calculation described above, with
results written to output file E10HalfSpace_40.transmission.
The CheckSCUFFData
utility is then invoked to compare the content
of this file against the reference file E10HalfSpace_40.transmission.reference
.
(To generate this reference file, run % TestFresnel.sh reference
with
no other arguments.)
The items to be checked in the comparison are defined by the checklist
Fresnel.Checklist
. The unit test passes iff
all data items for all data sets agree within specified tolerances.