Discrete dipole approximation codes


This article contains list of discrete dipole approximation codes and their applications.
The discrete dipole approximation is a flexible technique for computing scattering and absorption by targets of arbitrary geometry. Given a target of arbitrary geometry, one seeks to calculate its scattering and absorption properties. The DDA can be thought either as rigorous discretization of the volume-integral equation for the electric field or as an approximation of the continuum target by a finite array of polarizable points. The latter points acquire dipole moments in response to the local electric field and interact with one another via their electric fields, so the DDA is also sometimes referred to as the coupled dipole approximation/method. It is closely related to method of moments, digitized Green's function, Green's dyadic method/formulation, or volume integral equation method.

Classification

The compilation contains information about the discrete dipole approximation, relevant links, and their applications. There are reviews
as well as published comparison of existing codes.
All of the codes apply to arbitrary-shaped inhomogeneous nonmagnetic particles and particle systems in free space or homogeneous dielectric host medium. The calculated quantities typically include angle-resolved scattered fields, integral cross-sections, and internal fields. Therefore, the description of the codes below focuses on their unique features, including other computed quantities and computational optimizations/parallelization.

General-purpose open-source DDA codes

All of the following use regular grids, Krylov-subspace iterative methods to solve large system of linear equations, and FFT-acceleration of the matrix-vector products. It results in almost linear computational complexity in number of dipoles for both time and memory. Importantly, the source code is freely available.
NameAuthorsReferencesLanguageUpdatedFeatures
B. T. Draine and P. J. FlatauFortran2019 Can also handle periodic particles and efficiently calculate near fields. Uses OpenMP acceleration.
V. CholiyC++2017 Version of DDSCAT translated to C++ with some further improvements.
M. A. Yurkin, A. G. Hoekstra, and C2018 Implements fast and rigorous consideration of a plane substrate, and allows rectangular-cuboid voxels for highly oblate or prolate particles. Can also calculate emission enhancement of point emitters.Near-fields calculation is not very efficient. Uses Message Passing Interface parallelization and can run on GPU.
J. McDonaldC2009 Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
S. KießC++2016Runs on GPU. Algorithms are partly based on ADDA.
W. E. I. ShaC/C++2019Also calculates near fields and material absorption. Named differently, but the algorithms are very similar to the ones used in the mainstream DDA.

Specialized DDA codes

These list include codes that do not qualify for the previous section. The reasons include the following: source code is not available, FFT acceleration is absent or reduced, the code focuses on specific applications, not allowing easy calculation of standard scattering quantities.
NameAuthorsReferencesLanguageUpdatedFeatures-
DDSURF, DDSUB, DDFILMR. Schmehl, B. M. Nebeker, and H. ZhangFortran2008Rigorous handling of semi-infinite substrate and finite films, but only 2D FFT acceleration is used.-
DDMMD. W. MackowskiFortran2002Calculates T-matrix, which can then be used to efficiently calculate orientation-averaged scattering properties.-
CDAM. D. McMahonMatlab2006-
V. L. Y. LokeMatlab2014 Rigorous handling of substrate, but no FFT acceleration is used.
A. Vaschillo and N. BigelowFortran2019 Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1.
N. Geuquet, S.-O. Guillaume and L. HenrardFortran2013 Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used.-
T-DDAS. EdalatpourFortran2015Simulates near-field radiative heat transfer. The computational bottleneck is direct matrix inversion. Uses OpenMP and MPI parallelization.-

Relevant scattering codes