Английская Википедия:Discrete dipole approximation

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Файл:Shape DDA1.svg
In the discrete dipole approximation, a larger object is approximated in terms of discrete radiating electric dipoles.

Discrete dipole approximation (DDA), also known as coupled dipole approximation,[1] is a method for computing scattering of radiation by particles of arbitrary shape and by periodic structures. Given a target of arbitrary geometry, one seeks to calculate its scattering and absorption properties by an approximation of the continuum target by a finite array of small polarizable dipoles. This technique is used in a variety of applications including nanophotonics, radar scattering, aerosol physics and astrophysics.

Basic concepts

The basic idea of the DDA was introduced in 1964 by DeVoe[2] who applied it to study the optical properties of molecular aggregates; retardation effects were not included, so DeVoe's treatment was limited to aggregates that were small compared with the wavelength. The DDA, including retardation effects, was proposed in 1973 by Purcell and Pennypacker[3] who used it to study interstellar dust grains. Simply stated, the DDA is an approximation of the continuum target by a finite array of polarizable points. The points acquire dipole moments in response to the local electric field. The dipoles interact with one another via their electric fields, so the DDA is also sometimes referred to as the coupled dipole approximation.[1][4]

Nature provides the physical inspiration for the DDA - in 1909 Lorentz[5] showed that the dielectric properties of a substance could be directly related to the polarizabilities of the individual atoms of which it was composed, with a particularly simple and exact relationship, the Clausius-Mossotti relation (or Lorentz-Lorenz), when the atoms are located on a cubical lattice. We may expect that, just as a continuum representation of a solid is appropriate on length scales that are large compared with the interatomic spacing, an array of polarizable points can accurately approximate the response of a continuum target on length scales that are large compared with the interdipole separation.

For a finite array of point dipoles the scattering problem may be solved exactly, so the only approximation that is present in the DDA is the replacement of the continuum target by an array of N-point dipoles. The replacement requires specification of both the geometry (location of the dipoles) and the dipole polarizabilities. For monochromatic incident waves the self-consistent solution for the oscillating dipole moments may be found; from these the absorption and scattering cross sections are computed. If DDA solutions are obtained for two independent polarizations of the incident wave, then the complete amplitude scattering matrix can be determined. Alternatively, the DDA can be derived from volume integral equation for the electric field.[6] This highlights that the approximation of point dipoles is equivalent to that of discretizing the integral equation, and thus decreases with decreasing dipole size.

With the recognition that the polarizabilities may be tensors, the DDA can readily be applied to anisotropic materials. The extension of the DDA to treat materials with nonzero magnetic susceptibility is also straightforward, although for most applications magnetic effects are negligible.

There are several reviews of DDA method. Шаблон:RШаблон:RШаблон:RШаблон:R


Extensions

The method was improved by Draine, Flatau, and Goodman who applied fast Fourier transform to calculate convolution problem arising in the DDA which allowed to calculate scattering by large targets. They distributed discrete dipole approximation open source code DDSCAT.[7][8] There are now several DDA implementations,[6] extensions to periodic targets[9] and particles placed on or near a plane substrate.[10][11] and comparisons with exact technique were published.[12] Other aspects such as the validity criteria of the discrete dipole approximation[13] was published. The DDA was also extended to employ rectangular or cuboid dipoles [14] which is more efficient for highly oblate or prolate particles.

Numerical advances

Numerical advances include studies of iterative techniquesШаблон:R, advances in preconditioning of linear system of equations arising in DDA setupШаблон:R, techniques to accelerate convolution calculationsШаблон:RШаблон:R and faster evaluations of Fast Fourier Transforms arising in DDA problem solvers. Another group of numerical advances includes implementations using graphical processing unitsШаблон:R.

Discrete dipole approximation codes

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.[12]

General-purpose open-source DDA codes

These codes typically use regular grids (cubical or rectangular cuboid), conjugate gradient method to solve large system 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.[6]

Name Authors References Language Updated Features
DDSCAT Draine and Flatau [7] Fortran 2019 (v.Шаблон:Nbsp7.3.3) Can also handle periodic particles and efficiently calculate near fields. Uses OpenMP acceleration.
DDscat.C++ Choliy [15] C++ 2017 (v.Шаблон:Nbsp7.3.1) Version of DDSCAT translated to C++ with some further improvements.
ADDA Yurkin, Hoekstra, and contributors [16][17] C 2020 (v.Шаблон:Nbsp1.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 [18][19] C 2009 (v.Шаблон:Nbsp0.4.1) Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
DDA-GPU Kieß [20] C++ 2016 Runs on GPU (OpenCL). Algorithms are partly based on ADDA.
VIE-FFT Sha [21] 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 [22] Matlab 2019 Uses circulant preconditioner for accelerating iterative solvers
IF-DDA Chaumet, Sentenac, and Sentenac [23] Fortran, GUI in C++ with Qt 2021 (v.Шаблон:Nbsp0.9.19) Idiot-friendly DDA. Uses OpenMP and HDF5. Has a separate version (IF-DDAM) for multi-layered substrate.
MPDDA Shabaninezhad, Awan, and Ramakrishna [24] Matlab 2021 (v.Шаблон:Nbsp1.0) Runs on GPU (using Matlab capabilities)

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 [10][25][26] Fortran 2008 Rigorous handling of semi-infinite substrate and finite films (with arbitrary particle placement), but only 2D FFT acceleration is used.
DDMM Mackowski [27] Fortran 2002 Calculates T-matrix, which can then be used to efficiently calculate orientation-averaged scattering properties.
CDA McMahon [28] Matlab 2006
DDA-SI Loke [29] Matlab 2014 (v.Шаблон:Nbsp0.2) Rigorous handling of substrate, but no FFT acceleration is used.
PyDDA Dmitriev Python 2015 Reimplementation of DDA-SI
e-DDA Vaschillo and Bigelow [30] Fortran 2019 (v.Шаблон:Nbsp2.0) Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1.
DDEELS Geuquet, Guillaume and Henrard [31] Fortran 2013 (v.Шаблон:Nbsp2.1) Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used.
T-DDA Edalatpour [32] 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 [33] 2021 Applies to chiral systems (solves coupled equations for electric and magnetic fields)
PyDScat Yibin Jiang, Abhishek Sharma and Leroy Cronin [34] Python 2023 Simulates nanostructures undergoing structural transformation with GPU acceleration.

Gallery of shapes

See also

References

Шаблон:Reflist

  1. 1,0 1,1 Ошибка цитирования Неверный тег <ref>; для сносок singham1986 не указан текст
  2. Ошибка цитирования Неверный тег <ref>; для сносок devoe1964 не указан текст
  3. Ошибка цитирования Неверный тег <ref>; для сносок purcell1973 не указан текст
  4. Ошибка цитирования Неверный тег <ref>; для сносок singham1987 не указан текст
  5. Ошибка цитирования Неверный тег <ref>; для сносок lorentz1909 не указан текст
  6. 6,0 6,1 6,2 Ошибка цитирования Неверный тег <ref>; для сносок Yurkin2007a не указан текст
  7. 7,0 7,1 Ошибка цитирования Неверный тег <ref>; для сносок draine1994 не указан текст
  8. Ошибка цитирования Неверный тег <ref>; для сносок draine2008 не указан текст
  9. Ошибка цитирования Неверный тег <ref>; для сносок chaumet2003 не указан текст
  10. 10,0 10,1 Ошибка цитирования Неверный тег <ref>; для сносок schmehl1997 не указан текст
  11. Ошибка цитирования Неверный тег <ref>; для сносок yurkin2015 не указан текст
  12. 12,0 12,1 Ошибка цитирования Неверный тег <ref>; для сносок penttila2007 не указан текст
  13. Ошибка цитирования Неверный тег <ref>; для сносок zubko2010 не указан текст
  14. Ошибка цитирования Неверный тег <ref>; для сносок smunev2015 не указан текст
  15. Ошибка цитирования Неверный тег <ref>; для сносок choily2013 не указан текст
  16. Ошибка цитирования Неверный тег <ref>; для сносок yurkin2007b не указан текст
  17. Ошибка цитирования Неверный тег <ref>; для сносок yurkin2011 не указан текст
  18. Ошибка цитирования Неверный тег <ref>; для сносок mcdonald2009 не указан текст
  19. Ошибка цитирования Неверный тег <ref>; для сносок mcdonald2007a не указан текст
  20. Ошибка цитирования Неверный тег <ref>; для сносок zimmermann2012 не указан текст
  21. Ошибка цитирования Неверный тег <ref>; для сносок sha2011 не указан текст
  22. Ошибка цитирования Неверный тег <ref>; для сносок groth2020 не указан текст
  23. Ошибка цитирования Неверный тег <ref>; для сносок chaumet2021 не указан текст
  24. Ошибка цитирования Неверный тег <ref>; для сносок matlab2021 не указан текст
  25. Ошибка цитирования Неверный тег <ref>; для сносок nebeker1998 не указан текст
  26. Ошибка цитирования Неверный тег <ref>; для сносок bae2008 не указан текст
  27. Ошибка цитирования Неверный тег <ref>; для сносок mackowski2002 не указан текст
  28. Ошибка цитирования Неверный тег <ref>; для сносок mcmahon2006 не указан текст
  29. Ошибка цитирования Неверный тег <ref>; для сносок loke2011 не указан текст
  30. Ошибка цитирования Неверный тег <ref>; для сносок bigelow2012 не указан текст
  31. Ошибка цитирования Неверный тег <ref>; для сносок geuquet2010 не указан текст
  32. Ошибка цитирования Неверный тег <ref>; для сносок edalatpour2015 не указан текст
  33. Ошибка цитирования Неверный тег <ref>; для сносок cdda2021 не указан текст
  34. Шаблон:Cite journal