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.| Name | Authors | References | Language | Updated | Features |
| Draine and Flatau | Fortran | 2019 | Can also handle periodic particles and efficiently calculate near fields. Uses OpenMP acceleration. | ||
| Choliy | C++ | 2017 | Version of DDSCAT translated to C++ with some further improvements. | ||
| Yurkin, Hoekstra, and contributors | C | 2020 | 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. | ||
| McDonald | C | 2009 | Uses both OpenMP and MPI parallelization. Focuses on computational efficiency. | ||
| Kieß | C++ | 2016 | Runs on GPU. Algorithms are partly based on ADDA. | ||
| Sha | C/C++ | 2019 | Also 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 White | Matlab | 2019 | Uses circulant preconditioner for accelerating iterative solvers | ||
| Chaumet, Sentenac, and Sentenac | Fortran, GUI in C++ with Qt | 2021 | Idiot-friendly DDA. Uses OpenMP and HDF5. Has a separate version for multi-layered substrate. | ||
| Shabaninezhad, Awan, and Ramakrishna | Matlab | 2021 | Runs on GPU | ||
| Dibo Xu and others | Python | 2025 | GPU 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.| Name | Authors | References | Language | Updated | Features |
| DDSURF, DDSUB, DDFILM | Schmehl, Nebeker, and Zhang | Fortran | 2008 | Rigorous handling of semi-infinite substrate and finite films, but only 2D FFT acceleration is used. | |
| DDMM | Mackowski | Fortran | 2002 | Calculates T-matrix, which can then be used to efficiently calculate orientation-averaged scattering properties. | |
| CDA | McMahon | Matlab | 2006 | ||
| Loke | Matlab | 2014 | Rigorous handling of substrate, but no FFT acceleration is used. | ||
| Dmitriev | Python | 2015 | Reimplementation of DDA-SI | ||
| Vaschillo and Bigelow | Fortran | 2019 | Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1. | ||
| Geuquet, Guillaume and Henrard | Fortran | 2013 | Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used. | ||
| T-DDA | Edalatpour | Fortran | 2015 | Simulates near-field radiative heat transfer. The computational bottleneck is direct matrix inversion. Uses OpenMP and MPI parallelization. | |
| CDDA | Rosales, Albella, González, Gutiérrez, and Moreno | 2021 | Applies to chiral systems | ||
| Yibin Jiang, Abhishek Sharma and Leroy Cronin | Python | 2023 | Simulates nanostructures undergoing structural transformation with GPU acceleration. |