[Back to B.T. Draine's home page.]
Scattering and Absorption of Light by Small Particles
The Discrete Dipole Approximation for Scattering and Absorption of Light
by Irregular Particles
DDSCAT, a Fortran code for calculating scattering and absorption
of light by irregular particles, has been jointly developed by
Bruce T. Draine (Dept. of Astrophysical Sciences, Princeton University)
and Piotr J. Flatau (Scripps Institution of Oceanography, UCSD);
the current version is DDSCAT.6.0 .
This code is publicly available (see below).
If you choose to use it, please send email
"registering" as a user; registered
users of DDSCAT will be notified when updates to the code are made.
User Guide for DDSCAT.6.0
An extensive User Guide is available: "User Guide to the Discrete
Dipole Approximation Code DDSCAT.6.0", by B.T. Draine and
Piotr J. Flatau. A copy of this document (postscript or pdf)
can be obtained from
and can be cited as
Draine, B.T., and Flatau, P.J. 2003, "User Guide to the Discrete
Dipole Approximation Code DDSCAT.6.0",
The following files are of interest:
Downloading the DDSCAT Code
Unix users will find it most convenient to download
Non-unix users can use
to download the code (*.FOR files),
documentation (UserGuide.ps), and sample parameter files (ddscat.par and
ddscat.6.0.tgz: gzipped tarfile containing complete source code and
documentation for DDSCAT.6.0
History of recent releases:
DDSCAT.5a9 was released 1998 December 23. It fixes a bug in DDSCAT.5a8,
which resulted in incorrect evaluation of elements of the Mueller scattering
matrix (other than S_11, which was correct) for scattering planes other
A new version of orient.f was released 1999 March 16. Orientational
averages are now evaluated as described in the UserGuide; prior to this
date averaging over cos(Theta) was evaluated by dividing the range of
cos(Theta) into NTHETA equal intervals, evaluating the scattering
at the midpoint of each interval, and taking the mean. With the new
version of orient.f, Simpson's rule is now used for the quadrature when
an odd value of NTHETA is specified by the user.
DDSCAT.5a10 was released 2000 August 9. It provides a new target option --
NSPHER -- to create targets consisting of the unions of N spheres (possibly
arbitrary sizes and locations. It also uses a more recent version of the
LAPACK code used by subroutine PRINAXIS.
- A new target option -- PRISM3 -- to generate a triangular prism
was added to DDSCAT.5a10 on 2002.02.12
- Bug fixes:
2001.04.21: Bug in subroutine tarnsp.f (used by NSPHER option) has been
bug would not have affected most prior calculations with option NSPHER except
in special case where first sphere extends further in +y direction in target
coordinates than any of the other N-1 spheres.
2003.06.06: Bug in routine rotate.f has been fixed.
Prior to this fix, the routine miscalculated the initial target orientation
when target axis A1 in the "Target Frame" had A1(3) < 0 and/or
(A1(2)*A2(3)-A1(3)*A2(2)) < 0 . Under these circumstances, the routine
rotated the target to orientation angles (PHI + constant) and (BETA + constant)
instead of PHI and BETA. This should not have had any effect on orientational
averaging if the user specified appropriate ranges for the angles PHI and
BETA. Note also that many of the target options (e.g., ELLIPS) provide
axes A1 and A2 for which this bug did not apply.
DDSCAT.6.0 was released 2003 September 2.
- DDSCAT.6.0 provides support for MPI (Message Passing Interface),
enabling parallel calculations for different target orientations;
- DDSCAT.6.0 provides support for FFTW (Fastest Fourier Transform in the West), as an
to the GPFA (Generalized Prime Factor Algorithm) code in DDSCAT.5a;
- DDSCAT.6.0 allows the user to select which elements of the Mueller scattering
matrix are to be printed out;
- DDSCAT.6.0 provides a new target option -- LYRSLB -- to generate a layered
- Bug fixes:
2003.10.30: Corrected typo in routine writenet.f
(used for writing netCDF output file dd.cdf)
2004.02.25: Corrected typo in routine tarprsm.f (Note: version of tarprsm.f
in DDSCAT.5a10 release was correct).
Draine (2000) has published benchmark calculations for scattering
by tetrahedral targets.
Two target refractive indices have been considered:
m=1.33+0.01i and m=1.70+0.10i .
Scattering was calculated for one target orientation and two incident
In each case solutions were iterated until the DDA equations were satisfied
with a fractional error < 1.e-5 .
CPU times are reported below for a 600 MHz Pentium III system running
Red Hat Linux 6.2, using the Portland Group pgf77 compiler.
CPU time (s) on 600 MHz Pentium III System
For users wishing to repeat one or more of
these calculations using DDSCAT.5a10
(which may be useful to reassure you that DDSCAT.5a10 is
working properly on your computer), sample ddscat.par files are available
Please consult the DDSCAT UserGuide (see above) for an explanation of the
parameters in the ddscat.par file.
ddscat.par file for m = 1.33+0.01i, N = 4030 dipole tetrahedron, x = 5.
ddscat.par file for m = 1.33+0.01i, N = 13426 dipole tetrahedron, x = 5, 10
ddscat.par file for m = 1.33+0.01i, N = 31598 dipole tetrahedron, x = 5, 10, 15
ddscat.par file for m = 1.33+0.01i, N = 61432 dipole tetrahedron, x = 5, 10, 15
ddscat.par file for m = 1.33+0.01i, N = 105832 dipole tetrahedron, x = 5, 10, 15
m1.33_0.01 refractive index table for m = 1.33+0.01i
ddscat.par file for m = 1.70+0.10i, N = 13426 dipole tetrahedron, x = 5
ddscat.par file for m = 1.70+0.01i, N = 31598 dipole tetrahedron, x = 5, 10
ddscat.par file for m = 1.70+0.10i, N = 61432 dipole tetrahedron, x = 5, 10
ddscat.par file for m = 1.70+0.10i, N = 105832 dipole tetrahedron, x = 5, 10
m1.70_0.10 refractive index table for m = 1.70+0.10i
For additional information on other techniques for
numerical calculation of electromagnetic scattering by finite targets,
see also the
SCATTERLIB library of light scattering codes maintained by Piotr Flatau.
Back to B.T. Draine's home page.