Discrete dipole approximation codes
From Wikipedia, the free encyclopedia
This is a list of software packages for calculating scattering and absorption of light using Discrete dipole approximation (DDA).
Most of the software applies 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 packages 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 |