scufftransmission is a tool within the
scuffem code suite for computing the
transmission and reflection coefficients of thin films, metamaterial
arrays, and similar structures.
To use scufftransmission, you will first
create a
scuffem geometry file describing an extended
scattering geometry. Then you will run
scufftransmission from the command line
with options specifying the frequencies and the incident angles
at which you want to assess the transmission properties of your structure.
You will get back a data file reporting the transmitted and reflected
flux, for both parallel and perpendicular polarizations, at the
frequencies and incident angles you requested.
1. What scufftransmission Actually Does
The actual calculation that scufftransmission performs
is depicted schematically in this figure:
Your geometry is illuminated from below with a plane wave at a given frequency
and incident angle. The incident wavevector lies in the xz plane.
We consider two distinct polarizations for the plane wave:
 perpendicular polarization, in which case the E field
points in the y direction and the H field lies in
the xz plane; and
 parallel polarization, in which case the H field
points in the y direction and the E field lies in
the xz plane.
(At normal incidence, i.e. Θ=0, the perpendicular polarization
has E and H pointing in the y and x directions,
respectively, while the parallel polarization
has E and H pointing in the x and y directions,
respectively.)
For each polarization at each frequency and each incident angle,
scufftransmission solves the scattering
problem and computes the transmitted and reflected power flux
(power per unit area) by integrating
the Poynting vector over the unit cell. More specifically,
 the transmitted flux is obtained by integrating the
+z component of the Poynting vector over the plane of the
unit cell at height z=
ZAbove , while
 the reflected flux is obtained by integrating the
z component of the Poynting vector over the plane of the
unit cell at height z=
ZBelow .
Here ZAbove and ZBelow are values you specify
on the command line based on a knowledge of the extents of your structure
in the z direction.
The quantities reported in the scufftransmission
output file are the transmitted and reflected flux, for each polarization,
normalized by the incident flux, so that if your geometry were
transparent the transmitted and reflected flux ratios would be 1 and 0,
respectively, at all frequencies, incident angles, and polarizations.
2. scufftransmission CommandLine Options
The following table summarizes all commandline options
currently available in scufftransmission.
As is true for all programs in the
scuffem suite, commandline
options may be specified in a text file catted to standard
input; see here
for an example of how this works.
Note that, if you find yourself needing more flexibility than
can be achieved with these commandline options, then you have
probably graduated from using prefab commandline programs
to writing your own applications using the
c++,
python,
or
matlab
interfaces to libscuff.
Option 
Description 
Options controlling the scattering geometry

geometry MyGeometry.scuffgeo 
Specifies the
geometry file
describing the scattering geometry.
This option is always mandatory.

Options specifying the frequency

Omega xx 
Specifies the angular frequency of the
scattering problem, in units of
3•10^{14} rad/s (=c / 1 μm).
The value specified for Omega
may be a
complex number.
You may request computations at more than one frequency
by using the Omega option more than once,
i.e. you may say
Omega 1e2 Omega 1e1 Omega 1 Omega 10
(However, for more than a few frequencies it is more
convenient to use the OmegaFile
option discussed below.)

OmegaFile xx 
Specifies the name of a file containing a list
of frequencies at which to do computations.
The file should contain one frequency per line; blank
lines and comments (lines beginning with # )
are ignored.

Options specifying the range of incident angles

Theta xx 

ThetaMin xx 
ThetaMax xx 
ThetaPoints nn 

The first option here specifies a single incident
angle at which to calculate transmission and reflection.
The second set of options requests that the
angle of incidence be scanned from ThetaMin
to ThetaMax , taking a total of ThetaPoints.
Theta values are specified in degrees, not radians,
so the full range of incident angles is covered by saying
ThetaMin 0 ThetaMax 90 .
If none of these options are specified, the default is
to do calculations at the single incident angle of 0
degrees (i.e. normal incidence), equivalent to saying
Theta 0.

Options controlling the computation of transmitted and
reflected power

 Specifies the Z coordinate at which the
upwarddirected Poynting vector is evaluated to obtain the
transmitted flux. (See the figure above.)
The transmitted flux is calculated by integrating the
upwarddirected Poynting vector over the area of the unit
cell at Z=ZAbove.

 Specifies the Z coordinate at which the integral of the
downwarddirected Poynting vector is evaluated to obtain the
reflected flux. (See the figure above.)
The reflected flux is calculated by integrating the
downwarddirected Poynting vector over the area of the unit
cell at Z=ZBelow.

Cache options

Cache MyCache.cache 

ReadCache InCache1.cache 
ReadCache InCache2.cache 
WriteCache OutCache.cache 

Specifies the names of
cache files for geometric data.
The ReadCache option allows you to specify a
file from which geometric data will be preloaded before
the calculation begins. This option may be specified
any number of times. If the specified file does not exist,
the option is silently ignored.
The WriteCache option allows you to specify
a file to which geometric data will be written after the
calculation has completed. The resulting cache file will
contain any data that were preloaded from ReadCache
files, plus any data that were newly generated during the
course of the scufftransmission run.
The Cache XX option is equivalent to saying
ReadCache XX WriteCache XX.
For more information on geometric data caching in
scuffem,
see
here.
For examples of how caching is used in practical
scufftransmission runs,
see
this example
or
this example.

Other options


Requests that output be written to the file MyFile.dat.
If this option is not specified, the output is written to
a file named Geometry.transmission, where
Geometry.scuffgeo was the geometry file you
specified with the geometry option.

2. scufftransmission Output File
scufftransmission generates an output
file containing transmission and reflection data versus
frequency and incident angle.
If you did not specify a name for this file using the
OutFile commandline option, it will be written
by default to a file named Geometry.transmission,
where Geometry.scuffgeo was the file you specified with
the geometry option.
while the latter will contain information on the total fields.
Each line of the .transmission file
corresponds to a single frequency and a single incident angle.
There will be 6 numbers on each line, separated by spaces, as follows:
Omega Theta tPerp rPerp tPar rPar

where Omega is the angular frequency in units of
3•10^{14} rad/s (=c / 1 μm),
Theta is the incident angle in degrees,
tPerp and rPerp are the squared magnitudes of the
transmission and reflection coefficients for perpendicular
polarization, and tPar and rPar are the squared
magnitudes of the transmission and reflection magnitudes for
parallel polarization.
(As noted above, the t and r numbers here are
calculated as the ratio of the transmitted/reflected power
to the incident power.)
4. scufftransmission Examples
Here are some examples of calculations you can do with
scufftransmission. Input files and
commandline runscripts for all these examples are included
in the share/scuffem/examples subdirectory of
the scuffem installation.
3a. Transmission coefficients of a dielectric thin film
Among the simplest possible scattering geometries is a thin
dielectric film. If the film has thickness T and
relative dielectric constant ε^{r}
(which for simplicity we take to be independent of frequency)
then it is straightforward to work out that the reflection and
transmission coefficients, at normal incidence, depend on
the frequency according to
We will now attempt to reproduce this behavior using
scufftransmission.
(The input files for this example may be found in the
share/scuffem/examples/ThinFilm subdirectory
of the scuffem installation.)
To create a
scuffem extended geometry
for this configuration we need only mesh the upper and lower
surfaces of the film, and then only within the
unit cell of the lattice, which we will choose here to be a
square lattice with lattice vectors
L_{1}=(1μm, 0), L_{2}=(0, 1μm).
Then our entire mesh consists of two meshed squares, displaced
from one another by a distance of 1 μm; the .scuffgeo
file and a picture of the unitcell geometry look like this.
(The blue wire frame in the figure is not actually part of the geometry,
but serves only to indicate the extents of the unit cell in the
x and y directions, as well as the upper and lower
surfaces over which we will integrate the Poynting vector to compute
the transmitted and reflected flux.)
The unit cell geometry 
The geometry file: ThinFilm_58.scuffgeo 

LATTICE
VECTOR 1 0
VECTOR 0 1
ENDLATTICE
REGION Exterior MATERIAL Vacuum
REGION ThinFilm MATERIAL CONST_EPS_100
REGION UpperHalfSpace MATERIAL Vacuum
SURFACE LowerFilmSurface
MESHFILE Square_58.msh
REGIONS Exterior ThinFilm
ENDSURFACE
SURFACE UpperFilmSurface
MESHFILE Square_58.msh
DISPLACED 0 0 1
REGIONS ThinFilm UpperHalfSpace
ENDSURFACE

We'll run scufftransmission on this geometry
to investigate its transmission properties over a range of frequencies.
(We'll list the angular frequencies we want in a file named
OmegaList ; this file contains one angular frequency per line,
specified in units of c / 1 μm = 3 •10^{14} rad/s.)
Notice that we don't specify any arguments governing the incident angle;
this means that we'll be doing calculations at normal incidence only.
scufftransmission geometry ThinFilm_58.scuffgeo OmegaFile OmegaList cache ThinFilm.cache
(Since we're only doing a single run with this geometry, we don't really
need to specify a Cache file; caching is only useful for
reusing data on a given geometry across multiple runs, as explained
here.)
This produces a file named ThinFilm.transmission. (We could
also have used the OutFile option to specify a different
output filename.) Plotting the third and fourth columns of this data
file vs. the first yields the behavior of the transmission and
reflection coefficients as a function of frequency:
Notice that we get excellent agreement with theory even up to fairly
high frequencies despite the relative coarseness of the mesh.
3b. Extraordinary optical transmission through a perforated
thin film
In this example we'll consider the transmission properties of
a thin gold film perforated with circular holes. We'll design
our geometry following that studied by MartinMoreno et al.
in
Physical Review Letters 86 1114 (2001).
The unitcell mesh, the .scuffgeo file, and an
graphical representation of the innermost 25 cells of the
lattice are indicated in the table below. (The files for
this example can be found in the
share/scuffem/examples/PerforatedThinFilm
subdirectory of the scuffem
distribution.)
The unit cell geometry 
The innermost 25 cells of the full geometry 


The .scuffgeo file: PFT_794.scuffgeo 
LATTICE
VECTOR 0.75 0
VECTOR 0.0 0.75
ENDLATTICE
OBJECT UnitCellMesh
MESHFILE PFT_794.msh
MATERIAL Gold
ENDOBJECT

3c. Transmission through a square array of nanospheres
