Discrete dipole approximation codes


Discrete dipole approximation codes. This is a list of Discrete Dipole Approximation codes. The "code" here indicates computer code, a particular implementation of the DDA. For theoretical approach see Discrete dipole approximation article.
Most 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 the Mueller matrices, integral cross-sections, internal fields and angle-resolved scattered fields. There are some published comparisons of existing DDA codes.

General-purpose open-source DDA codes

These codes typically use regular grids, conjugate gradient method to solve large systems of linear equations, and FFT-acceleration of the matrix-vector products which uses convolution theorem. Complexity of this approach is almost linear in number of dipoles for both time and memory.
NameAuthorsReferencesLanguageUpdatedFeatures
Draine and FlatauFortran2019 Can also handle periodic particles and efficiently calculate near fields. Uses OpenMP acceleration.
CholiyC++2017 Version of DDSCAT translated to C++ with some further improvements.
Yurkin, Hoekstra, and contributorsC2020 Implements fast and rigorous consideration of a plane substrate, and allows rectangular-cuboid voxels for highly oblate or prolate particles. Can also calculate emission (decay-rate) enhancement of point emitters. Near-fields calculation is not very efficient. Uses Message Passing Interface parallelization and can run on GPU.
McDonaldC2009 Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
KießC++2016Runs on GPU. Algorithms are partly based on ADDA.
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.
Groth, Polimeridis, and WhiteMatlab2019Uses circulant preconditioner for accelerating iterative solvers
Chaumet, Sentenac, and SentenacFortran, GUI in C++ with Qt2021 Idiot-friendly DDA. Uses OpenMP and HDF5. Has a separate version for multi-layered substrate.
Shabaninezhad, Awan, and RamakrishnaMatlab2021 Runs on GPU
Dibo Xu and othersPython2025GPU acceleration using CuPy

Specialized DDA codes

These list include codes that do not qualify for the previous section. The reasons may 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, DDFILMSchmehl, Nebeker, and ZhangFortran2008Rigorous handling of semi-infinite substrate and finite films, but only 2D FFT acceleration is used.
DDMMMackowskiFortran2002Calculates T-matrix, which can then be used to efficiently calculate orientation-averaged scattering properties.
CDAMcMahonMatlab2006
LokeMatlab2014 Rigorous handling of substrate, but no FFT acceleration is used.
DmitrievPython2015Reimplementation of DDA-SI
Vaschillo and BigelowFortran2019 Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1.
Geuquet, Guillaume and HenrardFortran2013 Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used.
T-DDAEdalatpourFortran2015Simulates near-field radiative heat transfer. The computational bottleneck is direct matrix inversion. Uses OpenMP and MPI parallelization.
CDDARosales, Albella, González, Gutiérrez, and Moreno2021Applies to chiral systems
Yibin Jiang, Abhishek Sharma and Leroy CroninPython2023Simulates nanostructures undergoing structural transformation with GPU acceleration.