Electromagnetic Scattering by Particles and Surfaces
T-Matrix Codes for Computing Electromagnetic Scattering by Nonspherical and Aggregated Particles

This webpage is dedicated to the creator of the T-matrix method, Peter Waterman. It provides free public access to T-matrix codes for the computation of electromagnetic scattering by homogeneous, rotationally symmetric nonspherical particles in fixed and random orientations, a superposition T-matrix code for randomly oriented two-sphere clusters with touching or separated components, and superposition T-matrix codes for multi-sphere clusters in fixed and random orientations. All codes are written in Fortran-77. Each code is extensively documented and provides all necessary references to relevant publications.
The double-precision and extended-precision versions of the regular T-matrix codes are essentially identical. The extended-precision versions are a factor of 5-8 slower than their double-precision equivalents, but allow computations for larger (a factor of 2-3) particles. The extended-precision codes have a more detailed documentation of all the subroutines used.
The regular T-matrix codes are applicable to rotationally symmetric particles with equivalent-sphere size parameters exceeding 100. At present, the T-matrix method is the fastest exact technique for the computation of nonspherical scattering based on a direct solution of Maxwell's equations. The T-matrix codes are orders of magnitude faster than those based on the DDA, VIEF, and FDTD techniques.
The regular T-matrix codes for randomly oriented particles are based on the analytical orientation averaging procedure described in the paper M. I. Mishchenko, J. Opt. Soc. Am. A 8, 871-882 (1991). This efficient procedure makes the codes 1 to 2 orders of magnitude faster than T-matrix codes based on the standard numerical averaging approach. The superposition bisphere and multi-sphere T-matrix codes are based on similar analytical approaches and are described in the papers M. I. Mishchenko and D. W. Mackowski, Opt. Lett., vol. 19, 1604-1606 (1994) and D. W. Mackowski and M. I. Mishchenko, J. Opt. Soc. Amer. A., vol. 13, 2266-2278 (1996). In application to bispheres, the multi-sphere T-matrix code is slower than the bisphere code. However, it can be applied to clusters with a number of components larger than 2.

A general review of the Waterman's T-matrix method can be found in the paper M. I. Mishchenko, L. D. Travis, and D. W. Mackowski, T-matrix computations of light scattering by nonspherical particles: A review, J. Quant. Spectrosc. Radiat. Transfer, 55, 535-575 (1996).
A detailed user guide to the regular random-orientation T-matrix codes was also published as Capabilities and limitations of a current FORTRAN implementation of the T-matrix method for randomly oriented, rotationally symmetric scatterers, [J. Quant. Spectrosc. Radiat. Transfer, 60, 309-324 (1998)] .
A user guide to the T-matrix codes for nonspherical particles in a fixed orientation was published as Calculation of the amplitude matrix for a nonspherical particle in a fixed orientation [Appl. Opt., 39, 1026-1031 (2000)].
A comprehensive account of light scattering, including a detailed description of the T-matrix codes, can be found in the book Scattering, Absorption, and Emission of Light by Small Particles, Cambridge University Press, Cambridge (2002).
The users of the codes are encouraged to visit this page on a regular basis for information on latest developments, warnings, and/or errors found.
To retrieve a code, right-click on the code name and use the "Save As..." option from the menu.
New LAPACK-based T-matrix codes
These codes are based on the LAPACK version of the LU-factorization procedure, contain no proprietary components, and are equivalent to the old NAG-based codes in terms of efficiency and performance. We thank Cory Davis (University of Edinburgh) for pointing out the possibility of replacing the proprietary NAG matrix inversion routine by the public-domain LAPACK equivalent. The extended-precision codes require a FORTRAN compiler supporting REAL*16 and COMPLEX*32 variables, e.g., Intel Fortran Compiler version 12.1.2 for Linux or Visual Fortran Intel(R) 64 Compiler XE version 13.0.1 for WINDOWS-7(x64).
- Extended-precision T-matrix code for randomly oriented nonspherical particles: tmq.lp.f, lpq.f, and tmq.par.f
- Extended-precision T-matrix code for nonspherical particles in a fixed orientation: amplq.lp.f, lpq.f, and amplq.par.f
- Double-precision T-matrix code for randomly oriented nonspherical particles: tmd.lp.f, lpd.f, and tmd.par.f
- Double precision T-matrix code for nonspherical particles in a fixed orientation: ampld.lp.f, lpd.f, and ampld.par.f
Old Gauss-elimination- and NAG-based T-matrix codes
- Extended-precision T-matrix code for randomly oriented nonspherical particles: tmq.new.f and tmq.par.f
- Extended-precision T-matrix code for nonspherical particles in a fixed orientation: amplq.new.f and amplq.par.f
- Double-precision T-matrix code for randomly oriented nonspherical particles: tmd.new.f and tmd.par.f
- Double-precision T-matrix code for nonspherical particles in a fixed orientation: ampld.new.f and ampld.par.f
Superposition T-matrix codes
- Double-precision superposition T-matrix code for randomly oriented two-sphere clusters with externally touching or separated components: bisphere.f
- New parallelized double-precision T-matrix Fortran code for multi-sphere clusters with separated, externally touching, and/or nested components. Download the PDF of the corresponding JQSRT papers serving as user guides.
Double-precision Lorenz-Mie scattering code for polydisperse spherical particles: spher.f
Codes for the computation of the coefficients for the generalized Chebyshev shape by interpolating the values given in Table 1 of Chuang and Beard (1990): modified_double_precision_drop.f, modified_extended_precision_drop.f, developed by Dr. Hidde Leijnse
PDF documents linked on these scattering pages may be viewed using Adobe's free Acrobat Reader.
Michael Mishchenko
Publications On-Line |
Books |
T-Matrix Database
Codes: T-Matrix |
Bidirectional Reflectance |
Lorenz-Mie