Content deleted Content added
Added free to read link in citations with OAbot #oabot |
m v2.05 - Fix errors for CW project (Heading start with three "=" and later with level two - Unbalanced quotes in ref name or illegal character or empty name.) |
||
(14 intermediate revisions by 10 users not shown) | |||
Line 1:
'''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_calculus#Mueller_matrices|Mueller matrices]], [[Cross_section_(physics)#Scattering_of_light|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.<ref name=penttila2007/>
== 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|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.<ref name=Yurkin2007a/>
{| class="wikitable" style="text-align:center;"
|- style="background-color: #efefef; font-weight: bold;"
! Name !! Authors !! References !! Language !! Updated !! Features
|-
| style="background-color: #ffffff;" | [http://ddscat.wikidot.com/ DDSCAT]
|
| style="background-color: #ffffff;" | <ref name=
| style="background-color: #ffffff;" | Fortran
| style="background-color: #ffffff;" | 2019 (v.{{nbsp}}7.3.3)
| style="background-color: #ffffff;" | Can also handle periodic particles and efficiently calculate [[Electromagnetic_radiation#Near_and_far_fields|near fields]]. Uses [[OpenMP]] acceleration.
|-
| style="background-color: #eeeeee;" | [http://space.univ.kiev.ua/Choliy/DDscatcpp/ DDscat.C++]
| style="background-color: #eeeeee;" | Choliy
| style="background-color: #eeeeee;" | <ref name=choily2013/>
| style="background-color: #eeeeee;" | C++
| style="background-color: #eeeeee;" | 2017 (v.{{nbsp}}7.3.1)
| style="background-color: #eeeeee;" | Version of DDSCAT translated to C++ with some further improvements.
|-
| style="background-color: #ffffff;" | [https://github.com/adda-team/adda/ ADDA]
| style="background-color: #ffffff;" | Yurkin, Hoekstra, and contributors
| style="background-color: #ffffff;" | <ref name=yurkin2007b/><ref name=yurkin2011/>
| style="background-color: #ffffff;" | C
| style="background-color: #ffffff;" | 2020 (v.{{nbsp}}1.4.0)
| style="background-color: #ffffff;" | Implements fast and rigorous consideration of a plane substrate, and allows rectangular-cuboid voxels for highly oblate or prolate particles. Can also calculate [[Purcell_effect|emission (decay-rate) enhancement]] of point emitters. [[Electromagnetic_radiation#Near_and_far_fields|Near-fields]] calculation is not very efficient. Uses [[Message Passing Interface]] (MPI) parallelization and can run on GPU ([[OpenCL]]).
|-
| style="background-color: #eeeeee;" | [https://github.com/drjmcdonald/OpenDDA/ OpenDDA]
| style="background-color: #eeeeee;" | McDonald
| style="background-color: #eeeeee;" | <ref name=mcdonald2009/><ref name=mcdonald2007a/>
| style="background-color: #eeeeee;" | C
| style="background-color: #eeeeee;" | 2009 (v.{{nbsp}}0.4.1)
| style="background-color: #eeeeee;" | Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
|-
| style="background-color: #ffffff;" | [https://github.com/steffen-kiess/dda DDA-GPU]
| style="background-color: #ffffff;" | Kieß
| style="background-color: #ffffff;" | <ref name=zimmermann2012/>
| style="background-color: #ffffff;" | C++
| style="background-color: #ffffff;" | 2016
| style="background-color: #ffffff;" | Runs on GPU (OpenCL). Algorithms are partly based on ADDA.
|-
| style="background-color: #eeeeee;" | [https://github.com/Sha-Group/VIE_FFT VIE-FFT]
| style="background-color: #eeeeee;" | Sha
| style="background-color: #eeeeee;" | <ref name=sha2011/>
| style="background-color: #eeeeee;" | C/C++
| style="background-color: #eeeeee;" | 2019
| style="background-color: #eeeeee;" | Also calculates [[Electromagnetic_radiation#Near_and_far_fields|near fields]] and material absorption. Named differently, but the algorithms are very similar to the ones used in the mainstream DDA.
|-
| style="background-color: #ffffff;" | [https://github.com/samuelpgroth/VoxScatter VoxScatter ]
| style="background-color: #ffffff;" | Groth, Polimeridis, and White
| style="background-color: #ffffff;" | <ref name=groth2020/>
| style="background-color: #ffffff;" | Matlab
| style="background-color: #ffffff;" | 2019
| style="background-color: #ffffff;" | Uses circulant preconditioner for accelerating iterative solvers
|-
| style="background-color: #eeeeee;" | [https://www.fresnel.fr/spip/spip.php?article2735 IF-DDA]
| style="background-color: #eeeeee;" | Chaumet, Sentenac, and Sentenac
| style="background-color: #eeeeee;" | <ref name=chaumet2021/>
| style="background-color: #eeeeee;" | Fortran, GUI in C++ with Qt
| style="background-color: #eeeeee;" | 2021 (v.{{nbsp}}0.9.19)
| style="background-color: #eeeeee;" | Idiot-friendly DDA. Uses OpenMP and HDF5. Has a separate version (IF-DDAM) for multi-layered substrate.
|-
| style="background-color: #ffffff;" | [https://github.com/MasoudShabani/MPDDA-1.0 MPDDA]
| style="background-color: #ffffff;" | Shabaninezhad, Awan, and Ramakrishna
| style="background-color: #ffffff;" | <ref name=matlab2021/>
| style="background-color: #ffffff;" | Matlab
| style="background-color: #ffffff;" | 2021 (v.{{nbsp}}1.0)
| style="background-color: #ffffff;" | Runs on GPU (using Matlab capabilities)
|-
| style="background-color: #ffffff;" | [https://gitlab.com/dmcxu1/cpdda CPDDA]
| style="background-color: #ffffff;" | Dibo Xu and others
| style="background-color: #ffffff;" | <ref name="Xu2025" />
| style="background-color: #ffffff;" | Python
| style="background-color: #ffffff;" | 2025
| style="background-color: #ffffff;" | 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, [[Fast Fourier transform|FFT]] acceleration is absent or reduced, the code focuses on specific applications not allowing easy calculation of standard scattering quantities.
{| class="wikitable" style="text-align:center;"
|- style="background-color: #f2f2f2; font-weight: bold;"
! Name !! Authors !! References !! Language !! Updated !! Features
|-
| style="background-color: #ffffff;" | DDSURF, DDSUB, DDFILM
| style="background-color: #ffffff;" | Schmehl, Nebeker, and Zhang
| style="background-color: #ffffff;" | <ref name=schmehl1997/><ref name=nebeker1998/><ref name=bae2008/>
| style="background-color: #ffffff;" | Fortran
| style="background-color: #ffffff;" | 2008
| style="background-color: #ffffff;" | Rigorous handling of semi-infinite substrate and finite films (with arbitrary particle placement), but only 2D [[Fast Fourier transform|FFT]] acceleration is used.
|-
| style="background-color: #eeeeee;" | DDMM
| style="background-color: #eeeeee;" | Mackowski
| style="background-color: #eeeeee;" | <ref name=mackowski2002/>
| style="background-color: #eeeeee;" | Fortran
| style="background-color: #eeeeee;" | 2002
| style="background-color: #eeeeee;" | Calculates [[T-matrix_method|T-matrix]], which can then be used to efficiently calculate orientation-averaged scattering properties.
|-
| style="background-color: #ffffff;" | CDA
| style="background-color: #ffffff;" | McMahon
| style="background-color: #ffffff;" | <ref name=mcmahon2006/>
| style="background-color: #ffffff;" | Matlab
| style="background-color: #ffffff;" | 2006
| style="background-color: #ffffff;" |
|-
| style="background-color: #eeeeee;" | [http://code.google.com/p/dda-si/ DDA-SI]
| style="background-color: #eeeeee;" | Loke
| style="background-color: #eeeeee;" | <ref name=loke2011/>
| style="background-color: #eeeeee;" | Matlab
| style="background-color: #eeeeee;" | 2014 (v.{{nbsp}}0.2)
| style="background-color: #eeeeee;" | Rigorous handling of substrate, but no FFT acceleration is used.
|-
| style="background-color: #ffffff;" | [https://github.com/kitchenknif/PyDDA PyDDA]
| style="background-color: #ffffff;" | Dmitriev
| style="background-color: #ffffff;" |
| style="background-color: #ffffff;" | Python
| style="background-color: #ffffff;" | 2015
| style="background-color: #ffffff;" | Reimplementation of DDA-SI
|-
| style="background-color: #eeeeee;" | [http://faculty.washington.edu/masiello/codes/e-dda/ ''e''-DDA]
| style="background-color: #eeeeee;" | Vaschillo and Bigelow
| style="background-color: #eeeeee;" | <ref name=bigelow2012/>
| style="background-color: #eeeeee;" | Fortran
| style="background-color: #eeeeee;" | 2019 (v.{{nbsp}}2.0)
| style="background-color: #eeeeee;" | Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1.
|-
| style="background-color: #ffffff;" | [https://perso.unamur.be/~lhenrard/ddeels/ddeels.php DDEELS]
| style="background-color: #ffffff;" | Geuquet, Guillaume and Henrard
| style="background-color: #ffffff;" | <ref name=geuquet2010/>
| style="background-color: #ffffff;" | Fortran
| style="background-color: #ffffff;" | 2013 (v.{{nbsp}}2.1)
| style="background-color: #ffffff;" | Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used.
|-
| style="background-color: #eeeeee;" | T-DDA
| style="background-color: #eeeeee;" | Edalatpour
| style="background-color: #eeeeee;" | <ref name=edalatpour2015/>
| style="background-color: #eeeeee;" | Fortran
| style="background-color: #eeeeee;" | 2015
| style="background-color: #eeeeee;" | Simulates near-field radiative heat transfer. The computational bottleneck is direct matrix inversion (no FFT acceleration is used). Uses OpenMP and MPI parallelization.
|-
| style="background-color: #ffffff;" | CDDA
| style="background-color: #ffffff;" | Rosales, Albella, González, Gutiérrez, and Moreno
| style="background-color: #ffffff;" | <ref name=cdda2021/>
| style="background-color: #ffffff;" |
| style="background-color: #ffffff;" | 2021
| style="background-color: #ffffff;" | Applies to chiral systems (solves coupled equations for electric and magnetic fields)
|-
| style="background-color: #eeeeee;" | [https://github.com/croningp/RD-DDA PyDScat]
| style="background-color: #eeeeee;" | Yibin Jiang, Abhishek Sharma and Leroy Cronin
| style="background-color: #eeeeee;" | <ref>{{cite journal | doi=10.1021/acs.jpclett.3c00395 | title=An Accelerated Method for Investigating Spectral Properties of Dynamically Evolving Nanostructures | year=2023 | last1=Jiang | first1=Yibin | last2=Sharma | first2=Abhishek | last3=Cronin | first3=Leroy | journal=The Journal of Physical Chemistry Letters | volume=14 | issue=16 | pages=3929–3938 | pmid=37078273 | pmc=10150391 }}</ref>
| style="background-color: #eeeeee;" | Python
| style="background-color: #eeeeee;" | 2023
| style="background-color: #eeeeee;" | Simulates nanostructures undergoing structural transformation with GPU acceleration.
|}
==Gallery of shapes==
<gallery>
File:Shape periodic2d.png|Scattering by periodic structures such as slabs, gratings, of periodic cubes placed on a surface, can be solved in the discrete dipole approximation.
File:Shape_1d_cylinder.png|Scattering by infinite object (such as cylinder) can be solved in the discrete dipole approximation.
</gallery>
==See also==
*[[Computational electromagnetics]]
*[[Mie theory]]
*[[Finite-difference time-___domain method]]
*[[Method of moments (electromagnetics)]]
==References==
{{reflist|refs=
<ref name=bae2008>{{Cite journal
|doi = 10.1364/JOSAA.25.001728
|volume = 25
|issue =
|pages =
|author1 =
|title =
|journal = J. Opt. Soc. Am. A
|year = 2008
|
|bibcode = 2008JOSAA..25.
}}</ref> <ref name=bigelow2012>{{Cite journal
|doi = 10.1021/nn302980u
|pmid = 22849410
|volume = 6
|issue = 8
|pages = 7497–7504
|author1 = N. W. Bigelow |author2 = A. Vaschillo |author3 = V. Iberi |author4 = J. P. Camden| author5 = D. J. Masiello
|title = Characterization of the electron- and photon-driven plasmonic excitations of metal nanorods
|journal = ACS Nano
|year = 2012
}}</ref>
<ref name=choily2013>{{Cite journal
|volume = 3
|pages = 66–70
Line 74 ⟶ 208:
|year = 2013
|url = http://aasp.kiev.ua/index.php?text=v3-066-070-Choliy
|bibcode = 2013AASP....3...66C
}}</ref> <ref name=draine1994> {{cite journal
|doi=10.1364/JOSAA.11.001491
|author1=Draine, B.T. |author2=P.J. Flatau
|title=Discrete dipole approximation for scattering calculations
|journal=J. Opt. Soc. Am. A
|volume
|pages=1491–1499
|year=1994
|bibcode = 1994JOSAA..11.1491D
|issue=4
}}</ref>
<ref name=edalatpour2015>{{Cite journal
|doi = 10.1103/PhysRevE.91.063307
|pmid = 26172822
|volume = 91
|issue = 6
|pages = 063307
|author1 = S. Edalatpour |author2 = M. Čuma |author3 = T. Trueax |author4 = R. Backman |author5 = M. Francoeur
|title = Convergence analysis of the thermal discrete dipole approximation
|journal = Phys. Rev. E
|year = 2015
|bibcode = 2015PhRvE..91f3307E
|arxiv = 1502.02186
|s2cid = 21556373
}}</ref>
<ref name=geuquet2010>{{Cite journal
|doi = 10.1016/j.ultramic.2010.01.013
|volume = 110
|issue = 8
|pages = 1075–1080
|author1 = N. Geuquet |author2 = L. Henrard
|title = EELS and optical response of a noble metal nanoparticle in the frame of a discrete dipole approximation
|journal = Ultramicroscopy
|year= 2010
}}</ref>
<ref name=groth2020>{{Cite journal
|title=Accelerating the discrete dipole approximation via circulant preconditioning
|author1=S. P. Groth |author2=A.G. Polimeridis |author3=J.K. White
|journal=J. Quant. Spectrosc. Radiat. Transfer
|volume=240
|article-number=106689
|year=2020|doi=10.1016/j.jqsrt.2019.106689
|bibcode=2020JQSRT.24006689G
|s2cid=209969404 }}
</ref>
<ref name=loke2011>{{Cite journal
|doi = 10.1016/j.jqsrt.2011.03.012
|volume = 112
|issue =
|pages =
|author = V. L. Y. Loke |author2 = P. M. Mengüç |author3 = Timo A. Nieminen
|title = Discrete dipole approximation with surface interaction: Computational toolbox for MATLAB
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2011
|bibcode = 2011JQSRT.112.1711L
<ref name=mcdonald2009>{{Cite journal
|doi = 10.1177/1094342008097914
|volume = 23
Line 118 ⟶ 290:
|arxiv = 0908.0863
|bibcode = 2009arXiv0908.0863M
|s2cid = 10285783
}}</ref>
<ref name=mcdonald2007a>{{Cite thesis
|author = J. McDonald
|type = PhD
Line 126 ⟶ 300:
|place = Galway
|year = 2007
|url =
}}</ref>
<ref name=nebeker1998>{{Cite thesis
|author = B. M. Nebeker
|type = PhD
Line 193 ⟶ 309:
|publisher = Arizona State University
|place = Tempe, AZ, USA
|year = 1998
}}</ref>
<ref name=mackowski2002>{{Cite journal
|doi = 10.1364/JOSAA.19.000881
|volume = 19
Line 219 ⟶ 321:
|journal = J. Opt. Soc. Am. A
|year = 2002
|pmid = 11999964
|bibcode = 2002JOSAA..19..881M
}}</ref>
<ref name=mcmahon2006>{{Cite thesis
|author = M. D. McMahon
|type = PhD
Line 235 ⟶ 334:
|url = http://etd.library.vanderbilt.edu/ETD-db/available/etd-09012006-153819/unrestricted/MatthewMcMahonDissertation.pdf
}}</ref>
<ref name=penttila2007>{{cite journal
| last1=Penttilä | first1=Antti | last2=Zubko | first2=Evgenij | last3=Lumme | first3=Kari | last4=Muinonen | first4=Karri | last5=Yurkin | first5=Maxim A. | last6=Draine | first6=Bruce | last7=Rahola | first7=Jussi | last8=Hoekstra | first8=Alfons G. | last9=Shkuratov | first9=Yuri |display-authors=5
|title=Comparison between discrete dipole implementations and exact techniques
|journal=J. Quant. Spectrosc. Radiat. Transfer
|publisher=Elsevier BV
|volume=106
|issue=1–3
|year=2007
|doi=10.1016/j.jqsrt.2007.01.026
|pages=417–436
|url = https://scattering.ru/papers/Penttila%20et%20al.%20-%202007%20-%20Comparison%20between%20discrete%20dipole%20implementations.pdf
|bibcode=2007JQSRT.106..417P
}}</ref>
<ref name=schmehl1997>{{cite journal
|last1=Schmehl | first1=Roland | last2=Nebeker | first2=Brent M. | last3=Hirleman | first3=E. Dan
|title=Discrete-dipole approximation for scattering by features on surfaces by means of a two-dimensional fast Fourier transform technique
|journal=J. Opt. Soc. Am. A
| publisher=The Optical Society
| volume=14
| issue=11
| date=1997-11-01
| doi=10.1364/josaa.14.003026
| pages=3026–3036
| bibcode=1997JOSAA..14.3026S
}}</ref>
<ref name=sha2011>{{Cite journal
|doi = 10.1364/OE.19.015908 |doi-access = free
|pmid = 21934954
|volume = 19
|issue = 17
|pages = 15908–15918
|author1=W. E. I. Sha |author2=W. C. H. Choy |author3=Y. P. Chen |author4=W. C. Chew
|title = Optical design of organic solar cell with hybrid plasmonic system
|journal = Opt. Express
|year = 2011
|bibcode = 2011OExpr..1915908S
}}</ref>
<ref name=zimmermann2012>{{Cite journal
|doi = 10.2351/1.4719936
|volume = 24
|issue = 4
|pages = 042010
|author1=M. Zimmermann |author2=A. Tausendfreund |author3=S. Patzelt |author4=G. Goch |author5=S. Kieß |author6=M. Z. Shaikh |author7=M. Gregoire |author8=S. Simon
|title = In-process measuring procedure for sub-100 nm structures
|journal = J. Laser Appl.
|year = 2012
|bibcode = 2012JLasA..24d2010Z
|doi-access=free}}</ref>
<ref name=Yurkin2007a>{{cite journal
|title=The discrete dipole approximation: an overview and recent developments
|author1=M. A. Yurkin |author2=A. G. Hoekstra
|arxiv=0704.0038
|journal= J. Quant. Spectrosc. Radiat. Transfer
|year=2007
|doi=10.1016/j.jqsrt.2007.01.034
|pages=558–589
|volume=106
|issue=1–3
|url=https://scattering.ru/papers/Yurkin%20and%20Hoekstra%20-%202007%20-%20The%20discrete%20dipole%20approximation%20an%20overview%20and.pdf
|bibcode = 2007JQSRT.106..558Y
|s2cid=119572857
}}</ref>
<ref name=yurkin2007b>{{Cite journal
|doi = 10.1016/j.jqsrt.2007.01.033
|volume = 106
|issue = 1–3
|pages = 546–557
|author1=M. A. Yurkin |author2=V. P. Maltsev |author3=A. G. Hoekstra
|title = The discrete dipole approximation for simulation of light scattering by particles much larger than the wavelength
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2007
|url = https://scattering.ru/papers/Yurkin%20et%20al.%20-%202007%20-%20The%20discrete%20dipole%20approximation%20for%20simulation%20o.pdf
|bibcode = 2007JQSRT.106..546Y
|arxiv = 0704.0037
|s2cid = 119574693
}}</ref>
<ref name=yurkin2011>{{Cite journal
|doi = 10.1016/j.jqsrt.2011.01.031
|volume = 112
|issue =
|pages =
|
|title =
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2011
|url = https://scattering.ru/papers/Yurkin%20and%20Hoekstra%20-%202011%20-%20The%20discrete-dipole-approximation%20code%20ADDA%20capab.pdf
|bibcode = 2011JQSRT.112.2234Y
}}</ref>
<ref name=matlab2021>{{Cite journal
|doi = 10.1016/j.jqsrt.2020.107501
|volume = 262
|article-number = 107501
|author1 = M. Shabaninezhad |author2 = M. G. Awan |author3 = G. Ramakrishna
|title = MATLAB package for discrete dipole approximation by graphics processing unit: Fast Fourier Transform and Biconjugate Gradient
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2021
|bibcode = 2021JQSRT.26207501S
|s2cid = 233839571
}}</ref>
<ref name=chaumet2021>{{Cite journal
|doi = 10.1364/JOSAA.432685 |doi-access = free
|volume = 38
|issue = 12
|pages = 1841–1852
|author1 = P. C. Chaumet |author2 = D. Sentenac |author3 = G. Maire |author4 = T. Zhang |author5 = A. Sentenac
|title = IFDDA, an easy-to-use code for simulating the field scattered by 3D inhomogeneous objects in a stratified medium: tutorial
|journal = J. Opt. Soc. Am. A
|year = 2021
|bibcode = 2021JOSAA..38.1841C
}}</ref>
<ref name=cdda2021>{{Cite journal
|doi = 10.1364/OE.434061 |doi-access = free
|volume = 29
|issue = 19
|pages = 30020–30034
|author1 = S. A. Rosales |author2 = P. Albella |author3 = F. González |author4 = Y. Gutierrez |author5 = F. Moreno
|title = CDDA: extension and analysis of the discrete dipole approximation for chiral systems
|journal = Opt. Express
|year = 2021
|pmid = 34614734
|bibcode = 2021OExpr..2930020R
|hdl = 10902/24774
|hdl-access = free
}}</ref>
<ref name="Xu2025">{{cite journal |last1=Xu |first1=D. |last2=Tuersun |first2=P. |last3=Li |first3=S. |last4=Wang |first4=M. |last5=Jiang |first5=L. |year=2025 |title=CPDDA: A Python Package for Discrete Dipole Approximation Accelerated by CuPy |journal=Nanomaterials |volume=15 |issue=7 |pages=500 |doi=10.3390/nano15070500 |pmid=40214545 |pmc=11990789 |doi-access=free }}</ref>
}}
{{DEFAULTSORT:Discrete
[[Category:
[[Category:
[[Category:Scattering]]
[[Category:Scattering, absorption and radiative transfer (optics)]]
[[Category:Computational electromagnetics]]
|