-
Notifications
You must be signed in to change notification settings - Fork 57
Features
ADDA is an open-source parallel implementation of the discrete dipole approximation, capable to simulate light scattering by particles of arbitrary shape and composition in a wide range of particle sizes. The following list of features corresponds to the latest stable version.
- Parallel implementation
- Arbitrary particle shape and composition
- Full control over scattering geometry/environment
- A wide variety of calculated quantities
- Fast and accurate
- Easy to use
- Reliable
- Actively developed
Distinctive feature of ADDA is the ability to run a single DDA simulation in parallel on a cluster or supercomputer, using MPI. Computational grid of 1024×1024×1024 dipoles (1 Gdipole) and even larger can be used.
- Very large particle sizes can be handled. For instance, light scattering by a sphere with size parameter 320 (diameter equal to 100 wavelengths) can be accurately simulated (see Largest Simulations).
- Very fine discretization can be used when high accuracy or extra reliability is required.
- Simple sequential execution is also possible, as well as running on a multi-core processor.
- Another option is to use OpenCL version of ADDA to effectively employ modern GPUs.
- 16 predefined particle shapes from a sphere to a red blood cell and two touching ellipsoids.
- Homogeneous axisymmetric shape can be specified by an arbitrary contour in xz-plane.
- Arbitrary 3D geometry can be specified by a shape file. Apart from its own format ADDA understands the format of DDSCAT. Also converters from common 3D shape formats are available.
- Any representation of the particle shape can be automatically refined, replacing each dipole by a cube n×n×n of smaller dipoles.
- Particle can be highly inhomogeneous, consisting of up to 255 homogeneous domains with different refractive indices.
- Refractive index of each domain can be anisotropic, specified by a diagonal tensor.
- Spherical granules can be automatically added to any of the particle domains (randomly uniformly distributed).
- Outer medium can be either vacuum or non-absorbing homogeneous one.
- The particle can also be placed near a plane substrate.
- Orientation of the particle and/or direction of the incident beam can be varied.
- Orientation averaging is possible (performed by an efficient algorithm based on Romberg integration).
- Incident beam can be a plane wave, a (tightly-focused) Gaussian beam, field of a point dipole, or arbitrary one read from file.
- Scattering, absorption, and extinction cross sections.
- Asymmetry parameter (or vector).
- Angle-resolved amplitude and Mueller matrices. The latter can be automatically integrated over azimuthal angle.
- Radiation forces – both total and for each single dipole.
- Electric fields in and near the particle.
- Emission (decay-rate) enhancements for point emitters near the particle (radiative and non-radiative parts).
- A large linear system is solved by an iterative solver. Matrix-vector product is computed using FFT-convolution method, based on the regular spacing of dipoles. Thus, simulation time is an order of number of dipoles (even for particles near substrate).
- By default FFTW3 package is used to perform FFT, which automatically adapts to a particular hardware. A fall-back FFT implementation, not requiring any separate package installation, is also available.
- Seven Krylov-subspace-type iterative solvers are available, four of them directly employ the complex-symmetric structure of the interaction matrix.
- Modern DDA formulations, namely filtered coupled dipoles and integration of Green's tensor, are available. They may grossly outperform standard formulations (e.g., lattice dispersion relation) in certain cases.
- Rectangular-cuboid dipoles can be used, greatly accelerating computations for particles with one or two dimensions much smaller than the wavelength.
- Overall, the code is highly optimized both for speed and memory consumption. This was exemplified by comparison with other DDA codes.
- A special sparse mode is efficient for very porous particles.
- A standalone GUI for beginning users.
- Powerful command line interface.
- Internal help system (
-h [...]
command line option). - A lot of information in the wiki pages and manual.
- Active discussion group to help users.
- Checkpoint system to break and then continue long simulations.
- Simulation results are saved into separate directory with automatically generated unique name. Thus, multiple parallel runs can be easily performed.
- Many of the internally-used quantities can be saved to file to be further used by other programs. This includes particle shape, position of granules, values of incident beam and dipole polarizations at every dipole.
- Easy to compile on almost any platform using extensive instructions.
- Ready-to-use executables for 64-bit Windows.
- Tested and trusted by the community. By end of 2016 it was used in more than 200 journal papers from 29 countries. By 2023 there are more than 400 papers.
- Tested by comparison with other methods and codes.
- New releases are tested against the previous ones by automatic testing suites.
- Open development process, including issue tracker and availability of the current source, allows pre-release testing.
- Although ADDA is already a mature package, there are large plans for further development.
- Development process is ongoing albeit irregular. The goal is to make at least one release per year.
- Number of contributors is slowly increasing due to the open nature of GitHub platform. Some have contributed only to development branches or forks, that have not yet been incorporated into the master branch.
- New contributors are welcome! In particular, there are extensive instructions, how to make simple changes to the code (e.g. adding new predefined shape).
Home (Getting started)
Frequently asked questions
Features
Tutorial
Comparison with other codes
Largest simulations
Compiling ADDA
Installing FFTW3
Installing MPI
Using OpenCL
Installing clFFT
Installing clBLAS
Using sparse mode
Installing MinGW
Using MSYS2
Papers that use ADDA
Awards
References
Links
Acknowledgements
Instruction for committers
Code design & structure
Style guide
Using VS Code
Using Eclipse
Early development history
Adding new ...