History of recent releases


The idea of writing public release of the code originated when one of us (Piotr Flatau) was visiting Princeton in 1990. The name DDSCAT was coined by us at that time. Our only joint picture is below. It was taken while working on the DDSCAT release 7 at Princeton, July 2007. In that time we were converting the code to FORTRAN90, working on periodic structures and improving the conjugate gradient solver. Bruce Draine, who is an astrophysicist, has been applying DDSCAT to astrophysical problems such as interstellar and interplanetary dust. Early DDSCAT uses by Piotr Flatau were driven by studies of cirrus clouds and hexagonal ice crystals during the NASA project called First ISCCP Regional Experiment. ISCPP stands for International Satellite Cloud Climatology Program which was taking place in early 1990s. The review paper Draine, B.T., & Flatau, P.J., "Discrete dipole approximation for scattering calculations", J. Opt. Soc. Am. A, 11, 1491-1499 (1994) contains basic introduction to DDA.


In the fall of 2011 we worked on the fast near field calculations as well as capabilities to display shapes and results using modern three dimensional graphical software such as Mayavi2 or Paraview. We published paper about this in Optics Express. In February 2012, around Valentine's day, we released version 7.2 which added support for the VTK graphical file format generation and converted DDSCAT to a subroutine. We also worked on improvements to native Windows release and switched from G95 to gfortran in the process (we also use INTEL compiler, particularly for producing more robust code).

In 2013 we released version DDSCAT 7.3. It included 64-bit Windows version, Besides some algorithmic advances we moved towards more complete postprocessing code based on binary output. Downloads include now some codes provided by users. In 2014 we wrote a paper on hexagonal ice scattering which uses 2008 extension to periodic structures. We were able to solve light scattering problem for x=400.

As of June 8, 2012 the number of citations to our JOSA 1994 paper was 1043. Out of 83,990 papers published by J. Opt. Soc. Am A, B, and Applied Optics it was their 15th most referenced paper. Around 2012 many of the users using DDSCAT are working in the field of nano technology. In January 2015 it was the 5th most referenced paper in JOSA.


  • 7.3.0 was released May 26, 2013 (we would like to thank several people including Choliy Vasyl, Jay Foley, Ryan Honeyager who beta tested this release)


  • DDSCAT 7.2.0 was released 2012 February 16
  • DDSCAT 7.2.1 was released 2012 May 14
  • DDSCAT 7.2.2 was released in June of 2012 mostly error corrections
  • DDSCAT 7.2 ("nearfield" and "graphics") was released in February 2012


  • DDSCAT 7.1 was first released 2010.02.07. The latest version is DDSCAT 7.1.0 , dated 2010.03.03: ddscat7.1.0_100303.tgz
  • DDSCAT 7.1 offers a few new target options:
          • FRMFILPBC - to read user-supplied TUC for PBC calculations
          • ANIFILPBC - to read user-supplied TUC with anisotropic materials for PBC calculations
          • SLAB_HOLE - rectangular block with cylindrical hole
          • SLBHOLPBC - periodic array of rectangular blocks with cylindrical holes
          • The distribution of 7.1 includes an "examples" subdirectory with ddscat.par files and selected output files for a number of target options.
  • Bug fixes:
        • 2010.03.03: fixed bug in target.f90 that prevented use of target option FRMFILPBC. Thanks to Andre-Pierre Blanchard-Dionne (Polytechnique Montreal) for reporting this bug on 2010.03.03 .


  • DDSCAT 7.0 was first released 2008.09.03 . The latest version is DDSCAT 7.0.8 , dated 2010.02.04: ddscat7.0.8.tgz
  • DDSCAT 7.0 can calculate scattering by isolated targets, just like DDSCAT 6.1, but has the additional capability of calculating scattering and absorption from targets that are periodic in one or two dimensions.
  • DDSCAT 7.0 is written in Fortran 90, and uses dynamic memory allocation.
  • DDSCAT 7.0 includes support for MPI, OpenMP, and FFT calculations using the Intel Math Kernel Library (MKL).
  • DDSCAT 7.0 is distributed with a simple post-processiong program DDpol.f90 to easily read out dipole polarizations after the scattering problem has been solved by DDSCAT.
  • DDSCAT 7.0 is distributed with a post-processing program DDfield.f90 for near-field calculation of E and B at points within or near the target after the scattering problem has been solved by DDSCAT.

DDSCAT 6.1 was released 2004 September 10.

  • DDSCAT 6.1 introduces two versions of DDSCAT: the "plain" version for new users or users who do not require MPI, FFTW, or netCDF the "full" version, with support for MPI, FFTW, and netCDF for users who require one or more of these features.
  • DDSCAT 6.1 implements an automatic procedure for calculating angular averages for the scattered radiation. User now specifies a parameter ETASCA. The number of scattered directions is proportional to [(3+x)/ETASCA]^2 , where x=2*pi*aeff/lambda is the scattering parameter. The number of scattering angles used therefore depends on the ratio of target size to wavelength.
  • DDSCAT 6.1 includes new target options: ANIREC, for calculating scattering by anisotropic rectangular prisms; CYLCAP, for calculaing scattering by cylinders with hemispherical endcaps.
  • DDSCAT 6.1 now calculates the second moment in addition to the first moment of cos(theta) for the scattered radiation, where theta is the scattering angle.

Bug fixes:

  • 2004.12.29: An error in routine writesca.f was found and corrected. The error affected output to the files waarbbkccc.sca (written when IWRKSC=1 is specified in ddscat.par), causing incorrect values of the Muller matrix elements S_ij to be written for the individual orientations when doing an orientational average over more than one target orientation. The bug did not affect any of the other calculated results. In particular, the orientationally-averaged Muller matrix elements (written to the output files waarbbori.avg) were correct, and the total and scattering cross sections for the individual target orientations were also correct. The bug was in the output routine WRITESCA (file writesca.f ), and consisted simply in printing the wrong variable. Users can download new versions of the complete "plain" distribution ddscat6.1_plain.tgz or the "full" distribution ddscat6.1_full.tgz of DDSCAT 6.1 . The new versions of version.f and writesca.f can be extracted from the gzipped tarfile with the command "tar xvfz ddscat6.1_plain.tgz src/version.f src/writesca.f" or "tar xvfz ddscat6.1_full.tgz src/version.f src/writesca.f" (quotation marks not included).
  • 2005.01.17: The files mpi_bcast_char.f, mpi_bcast_int.f, mpi_bcast_real.f, mpi_bcast_cplx.f, and mpi_bcast_int2.f, which had been inadvertently omitted from ddscat6.1_full.tgz, are now included in ddscat6.1_full.tgz
  • 2006.11.28: An error in routine writesca.f was found and corrected. The error resulted in incorrect values for linear polarization P to be written to files waaarbbkccc.sca waaarbbori.avg . All cross sections and Mueller matrix elements S_{ij} were evaluated and printed correctly; you can recalculate the linear polarization from S_{11} and S_{12} in existing output files by simply taking P= - S_{12}/S_{11}.

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 alternative 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 slab.

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).

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 overlapping) of 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 fixed. This 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 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 than phi=0.

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.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License