7.4 Computation of the exit plane wave function 445
this initial wave by half a slice thickness to obtain φ
(0). The wave amplitude at z = is
then given by
φ() = F
−1
[qF[ pφ
(0)]]. (7.32)
Repeated use of this single step then results in the wave amplitude at multiples of the
slice thickness . The general step is given by
φ
n
= F
−1
[
qF
[
p
n
φ
n−1
]]
, (7.33)
where p
n
is the phase grating term for the nth slice. At the end, the wave function must
be propagated for
half a slice again, as described in equation (7.23). As long as
the slice
thickness is constant, the propagator term q must be computed only twice, once for the
half-slice thickness and once for the whole slice thickness. In principle, each slice could
have a different projected potential V
p
, which is reflected in the use of p
n
. For a perfect
crystal structure with a small unit cell one would typically use a single phase grating term,
but more complex defect arrangements with
a structure which changes along the beam
direction require the use of possibly a large number of different phase grating terms.
There are many implementations of the multi-slice algorithm. The EMS suite of pro-
grams is particularly well suited for simulations that require many different phase grating
terms [Sta87].
†
The C source code accompanying the book Advanced Computing in Elec-
tron
Microscopy
[Kir98]
provides a good starting point for the reader who wishes to write
specialized multi-slice code. A basic multi-slice implementation (multis.f, in Fortran-77)
can be found in [SZ92];
‡
on the website the reader can find an ION-routine ms.pro
which implements the essential components
of the
multis.f program (see examples in
Section 7.4.3).
r
The real-space method. The real-space method [VDC84, CVD84a, CVD84b] assumes
that the value of the wave function in a given point in a slice is influenced only by
the values of a small neighborhood of points in the previous slice. In other words, the
propagator is considered in real-space (hence the name of the method) and is written as a
small convolution kernel. The explicit derivation of this kernel is somewhat complicated
and we refer the reader to the original paper for all details [CVD84b]. If we represent the
real-space propagator by q
RS
, then the general step of the real-space method is given by
φ
n
= q
RS
⊗
[
p
n
φ
n−1
]
; (7.34)
there are no Fourier transforms, and the propagator kernel typically is a small circular
array (15–20 pixels across). The convolution product is carried out entirely in real-space,
using periodic boundary conditions. The Fortran-77 source code of the real-space method
can be downloaded from the
website; it is available as a compressed UNIX archive
realspace.tar.gz.
§
†
An on-line version of EMS is available at http://cimesg1.epfl.ch/CIOL/ems.html.
‡
The multis.f program was written by J.M. Zuo; the source code is listed on pages 311–322 in Electron Micro-
diffraction by Spence and Zuo [SZ92].
§
The author would like to thank Professor D. Van Dyck for permission to distribute the 1990 version of the
real-space source code, written by W. Coene in standard Fortran-77 and modified by M. Op de Beeck.