Discrete dipole approximation codes. This is a list of Discrete Dipole Approximation (DDA) codes. The "code" here indicates computer code, a particular implementation of the DDA (many of them are open-source). 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 (extinction, absorption, and scattering), internal fields and angle-resolved scattered fields (phase function). There are some published comparisons of existing DDA codes. [1]
These codes typically use regular grids (cubical or rectangular cuboid), 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. [2]
| Name | Authors | References | Language | Updated | Features |
|---|---|---|---|---|---|
| DDSCAT | Draine and Flatau | [3] | Fortran | 2019 (v. 7.3.3) | Can also handle periodic particles and efficiently calculate near fields. Uses OpenMP acceleration. |
| DDscat.C++ | Choliy | [4] | C++ | 2017 (v. 7.3.1) | Version of DDSCAT translated to C++ with some further improvements. |
| ADDA | Yurkin, Hoekstra, and contributors | [5] [6] | C | 2020 (v. 1.4.0) | 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 (MPI) parallelization and can run on GPU (OpenCL). |
| OpenDDA | McDonald | [7] [8] | C | 2009 (v. 0.4.1) | Uses both OpenMP and MPI parallelization. Focuses on computational efficiency. |
| DDA-GPU | Kieß | [9] | C++ | 2016 | Runs on GPU (OpenCL). Algorithms are partly based on ADDA. |
| VIE-FFT | Sha | [10] | 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. |
| VoxScatter | Groth, Polimeridis, and White | [11] | Matlab | 2019 | Uses circulant preconditioner for accelerating iterative solvers |
| IF-DDA | Chaumet, Sentenac, and Sentenac | [12] | Fortran, GUI in C++ with Qt | 2021 (v. 0.9.19) | Idiot-friendly DDA. Uses OpenMP and HDF5. Has a separate version (IF-DDAM) for multi-layered substrate. |
| MPDDA | Shabaninezhad, Awan, and Ramakrishna | [13] | Matlab | 2021 (v. 1.0) | Runs on GPU (using Matlab capabilities) |
| CPDDA | Dibo Xu and others | [14] | Python | 2025 | GPU acceleration using CuPy |
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 | [15] [16] [17] | Fortran | 2008 | Rigorous handling of semi-infinite substrate and finite films (with arbitrary particle placement), but only 2D FFT acceleration is used. |
| DDMM | Mackowski | [18] | Fortran | 2002 | Calculates T-matrix, which can then be used to efficiently calculate orientation-averaged scattering properties. |
| CDA | McMahon | [19] | Matlab | 2006 | |
| DDA-SI | Loke | [20] | Matlab | 2014 (v. 0.2) | Rigorous handling of substrate, but no FFT acceleration is used. |
| PyDDA | Dmitriev | Python | 2015 | Reimplementation of DDA-SI | |
| e-DDA | Vaschillo and Bigelow | [21] | Fortran | 2019 (v. 2.0) | Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1. |
| DDEELS | Geuquet, Guillaume and Henrard | [22] | Fortran | 2013 (v. 2.1) | Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used. |
| T-DDA | Edalatpour | [23] | Fortran | 2015 | Simulates near-field radiative heat transfer. The computational bottleneck is direct matrix inversion (no FFT acceleration is used). Uses OpenMP and MPI parallelization. |
| CDDA | Rosales, Albella, González, Gutiérrez, and Moreno | [24] | 2021 | Applies to chiral systems (solves coupled equations for electric and magnetic fields) | |
| PyDScat | Yibin Jiang, Abhishek Sharma and Leroy Cronin | [25] | Python | 2023 | Simulates nanostructures undergoing structural transformation with GPU acceleration. |