Discrete dipole approximation codes: Difference between revisions

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.
This article contains list of '''discrete dipole approximation codes''' and their applications.
 
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/>
The [[discrete dipole approximation]] (DDA) is a flexible technique for computing scattering and absorption by targets of arbitrary geometry. Given a target of arbitrary geometry, one seeks to calculate its scattering and absorption properties. The DDA can be thought either as rigorous discretization of the [[Electric-field integral equation|volume-integral equation for the electric field]]<ref name=Yurkin2007a/> or as an approximation of the continuum target by a finite array of polarizable points<ref name=Draine1994a/>. The latter points acquire dipole moments in response to the local electric field and interact with one another via their electric fields, so the DDA is also sometimes referred to as the coupled dipole approximation/method. It is closely related to (volumetric) method of moments, digitized Green's function, Green's dyadic method/formulation, or volume integral equation method.
 
== General-purpose open-source DDA codes ==
==Classification==
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/>
The compilation contains information about the [[discrete dipole approximation]], relevant links, and their applications. There are reviews
<ref name=Draine1994a>{{Cite journal
|doi = 10.1364/JOSAA.11.001491
|author1=B. T. Draine |author2=P. J. Flatau
|title = Discrete dipole approximation for scattering calculations
|journal = J. Opt. Soc. Am. A
|volume = 11
|issue = 4
|pages = 1491–1499
|year = 1994
|bibcode = 1994JOSAA..11.1491D |citeseerx = 10.1.1.454.1175
}}</ref>
<ref name=Yurkin2007a>{{Cite journal
|doi = 10.1016/j.jqsrt.2007.01.034
|volume = 106
|issue = 1–3
|pages = 558–589
|author1=M. A. Yurkin |author2=A. G. Hoekstra
|title = The discrete dipole approximation: an overview and recent developments
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2007
|url = http://sites.google.com/site/yurkin/publications/papers/YurkinandHoekstra-2007-Thediscretedipoleapproximation%2Canoverviewandrecentdevelopments.pdf
|bibcode = 2007JQSRT.106..558Y |arxiv = 0704.0038 }}</ref>
as well as published comparison of existing codes.
<ref>{{Cite journal
|doi = 10.1016/j.jqsrt.2007.01.026
|volume = 106
|issue = 1–3
|pages = 417–436
|author1=A. Penttila |author2=E. Zubko |author3=K. Lumme |author4=K. Muinonen |author5=M. A. Yurkin |author6=B. T. Draine |author7=J. Rahola |author8=A. G. Hoekstra |author9=Y. Shkuratov
|title = Comparison between discrete dipole implementations and exact techniques
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2007
|url = http://sites.google.com/site/yurkin/publications/papers/Penttilaetal-2007-Comparisonbetweendiscretedipoleimplementations.pdf
|bibcode = 2007JQSRT.106..417P }}</ref> All of the codes apply to arbitrary-shaped inhomogeneous nonmagnetic particles and particle systems in free space or homogeneous dielectric host medium (handling of substrate is discussed separately). The calculated quantities typically include [[Radar_cross-section|angle-resolved scattered fields]] (or the [[Mueller_calculus#Mueller_matrices|Mueller matrices]]), [[Cross_section_(physics)#Scattering_of_light|integral cross-sections]] (extinction, absorption, and scattering), and internal fields. Therefore, the description of the codes below focuses on their unique features, including other computed quantities and computational optimizations/parallelization.
 
{| class="wikitable" style="text-align:center;"
===General-purpose open-source DDA codes===
|- style="background-color: #efefef; font-weight: bold;"
All of the following use regular grids (cubic or rectangular cuboid), [[Iterative_method#Krylov_subspace_methods|Krylov-subspace iterative methods]] to solve large system of linear equations, and [[Toeplitz_matrix#Discrete_convolution|FFT-acceleration of the matrix-vector products]]. It results in almost linear computational complexity in number of dipoles (discretization voxels) for both time and memory.<ref name=Yurkin2007a/> Importantly, the source code is freely available.
{| class="wikitable"
|- style="background-color: #efefef;"
! Name !! Authors !! References !! Language !! Updated !! Features
|-
| style="background-color: #ffffff;" | [http://ddscat.wikidot.com/ DDSCAT]
| B.style="background-color: T.#ffffff;" | Draine and P. J. Flatau
| style="background-color: #ffffff;" | <ref name=Draine1994adraine1994/>
| style="background-color: #ffffff;" | Fortran
<ref>{{Cite journal
| style="background-color: #ffffff;" | 2019 (v.{{nbsp}}7.3.3)
|doi = 10.1364/JOSAA.25.002693
| 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 = 117
|pages = 2693–27031728–1736
|author1 =B. TE. Draine Bae| author2 =P H. Zhang| author3 = E. JD. FlatauHirleman
|title = Discrete-Application of the discrete dipole approximation for periodic targets:dipoles theoryembedded andin testsfilm
|journal = J. Opt. Soc. Am. A
|year = 2008
|arxivpmid = 0809.033818594631
|bibcode = 2008JOSAA..25.2693D 1728B
}}</ref>
 
| Fortran
<ref name=bigelow2012>{{Cite journal
| 2016 (v.{{nbsp}}7.3.2)
|doi = 10.1021/nn302980u
| Can also handle periodic particles and efficiently calculate [[Electromagnetic_radiation#Near_and_far_fields|near fields]]. Uses [[OpenMP]] acceleration.
|pmid = 22849410
|-
|volume = 6
| [http://space.univ.kiev.ua/Choliy/DDscatcpp/ DDscat.C++]
|issue = 8
| V. Choliy
|pages = 7497–7504
| <ref>{{Cite journal
|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>
 
| C++
 
| 2017 (v.{{nbsp}}7.3.1)
 
| Version of DDSCAT translated to C++ with some further improvements.
<ref name=draine1994> {{cite journal
|-
|doi=10.1364/JOSAA.11.001491
| [https://github.com/adda-team/adda/ ADDA]
|author1=Draine, B.T. |author2=P.J. Flatau
| M. A. Yurkin, A. G. Hoekstra, and [https://github.com/adda-team/adda/graphs/contributors others]
|title=Discrete dipole approximation for scattering calculations
| <ref>{{Cite journal
|journal=J. Opt. Soc. Am. A
|doi = 10.1016/j.jqsrt.2007.01.033
|volume = 10611
|pages=1491–1499
|issue = 1–3
|year=1994
|pages = 546–557
|bibcode = 1994JOSAA..11.1491D
|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
|issue=4
|journal = J. Quant. Spectrosc. Radiat. Transfer
}}</ref>
|year = 2007
 
|url = http://sites.google.com/site/yurkin/publications/papers/Yurkinetal-2007-Thediscretedipoleapproximationforsimulationoflightscattering.pdf
 
|bibcode = 2007JQSRT.106..546Y |arxiv = 0704.0037 }}</ref>
 
<ref>{{Cite journal
<ref name=edalatpour2015>{{Cite journal
|doi = 10.1016/j.jqsrt.2011.01.031
|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 = 1311
|pages = 2234–22471711–1725
|author = V. L. Y. Loke |author2 = P. M. Mengüç |author3 = Timo A. Nieminen
|author1=M. A. Yurkin |author2=A. G. Hoekstra | title = The discrete-dipole-approximation code ADDA: capabilities and known limitations
|title = Discrete dipole approximation with surface interaction: Computational toolbox for MATLAB
|journal = J. Quant. Spectrosc. Radiat. Transfer
|year = 2011
|bibcode = 2011JQSRT.112.1711L
|url = https://sites.google.com/site/yurkin/publications/papers/YurkinandHoekstra-2011-Thediscrete-dipole-approximationcodeADDAcapab.pdf
|bibcode = 2011JQSRT.112.2234Y }}</ref>
 
| C
 
| 2018 (v.{{nbsp}}1.4.0-alpha)
<ref name=mcdonald2009>{{Cite journal
| 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]]).
|-
| [http://www.opendda.org/ OpenDDA]
| J. McDonald
| <ref>{{Cite journal
|doi = 10.1177/1094342008097914
|volume = 23
Line 118 ⟶ 290:
|arxiv = 0908.0863
|bibcode = 2009arXiv0908.0863M
|s2cid = 10285783
}}</ref>
 
<ref>{{Cite thesis
<ref name=mcdonald2007a>{{Cite thesis
|author = J. McDonald
|type = PhD
Line 126 ⟶ 300:
|place = Galway
|year = 2007
|url = httphttps://wwwgithub.opendda.orgcom/drjmcdonald/OpenDDA/assetsblob/docsmain/thesis_JMcD_OpenDDAthesis_phd_OpenDDA_2007.pdf
|deadurl = yes
|archiveurl = https://web.archive.org/web/20110727150256/http://www.opendda.org/assets/docs/thesis_JMcD_OpenDDA.pdf
|archivedate = 2011-07-27
}}</ref>
| C
| 2009 (v.{{nbsp}}0.4.1)
| Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
|-
| [https://github.com/steffen-kiess/dda DDA-GPU]
| S. Kieß
| <ref>{{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 }}</ref>
| C++
| 2016
| Runs on GPU (OpenCL). Algorithms are partly based on ADDA.
|-
| [http://www.zjuisee.zju.edu.cn/weisha/SourceForge/sourceforge.html VIE-FFT]
| W. E. I. Sha
| <ref>{{Cite journal
|doi = 10.1364/OE.19.015908
|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>
| C/C++
| 2019
| 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.
|}
 
<ref name=nebeker1998>{{Cite thesis
===Specialized DDA codes===
These list include codes that do not qualify for the previous section. The reasons include the following: source code is not available (then the update date is approximate), [[FFT]] acceleration is absent or reduced, the code focuses on specific applications, not allowing easy calculation of standard scattering quantities.
{| class="wikitable"
|- style="background-color: #efefef;"
! Name !! Authors !! References !! Language !! Updated !! Features
|-
| DDSURF, DDSUB, DDFILM
| R. Schmehl, B. M. Nebeker, and H. Zhang
| <ref>{{Cite journal
|doi = 10.1364/JOSAA.14.003026
|volume = 14
|issue = 11
|pages = 3026–3036
|author1=R. Schmehl |author2=B. M. Nebeker |author3=E. D. Hirleman
|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
|year = 1997
|bibcode = 1997JOSAA..14.3026S }}</ref>
<ref>{{Cite thesis
|author = B. M. Nebeker
|type = PhD
Line 193 ⟶ 309:
|publisher = Arizona State University
|place = Tempe, AZ, USA
|year = 1998}}</ref>
<ref>{{Cite journal
|doi = 10.1364/JOSAA.25.001728
|volume = 25
|issue = 7
|pages = 1728–1736
|author1 = E. Bae| author2 = H. Zhang| author3 = E. D. Hirleman
|title = Application of the discrete dipole approximation for dipoles embedded in film
|journal = J. Opt. Soc. Am. A
|year = 2008 |bibcode = 2008JOSAA..25.1728B
}}</ref>
 
| Fortran
<ref name=mackowski2002>{{Cite journal
| 2008
| Rigorous handling of semi-infinite substrate and finite films (with arbitrary particle placement), but only 2D [[FFT]] acceleration is used.
|-
| DDMM
| D. W. Mackowski
| <ref>{{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>
|bibcode = 2002JOSAA..19..881M
| Fortran
}}</ref>
| 2002
 
| Calculates [[T-matrix_method|T-matrix]], which can then be used to efficiently calculate orientation-averaged scattering properties.
<ref name=mcmahon2006>{{Cite thesis
|-
| CDA
| M. D. McMahon
| <ref>{{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>
 
| Matlab
 
| 2006
 
|
<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
| [http://code.google.com/p/dda-si/ DDA-SI]
|title=Comparison between discrete dipole implementations and exact techniques
| V. L. Y. Loke
|journal=J. Quant. Spectrosc. Radiat. Transfer
| <ref>{{Cite journal
|publisher=Elsevier BV
|doi = 10.1016/j.jqsrt.2011.03.012
|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 = 1113
|pages = 1711–17252234–2247
|author author1= VM. LA. Y. LokeYurkin |author2 = PA. MG. Mengüç |author3 = Timo A.Hoekstra Nieminen
|title = DiscreteThe discrete-dipole -approximation with surfacecode interactionADDA: Computationalcapabilities toolboxand forknown MATLABlimitations
|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.1711L }}</ref>
|bibcode = 2011JQSRT.112.2234Y
| Matlab
| 2011 (v.{{nbsp}}0.1)
| Rigorous handling of substrate, but no FFT acceleration is used.
|
|-
| [http://faculty.washington.edu/masiello/Masiello_Group_Website/e-DDA.html ''e''-DDA]
| A. Vaschillo and N. Bigelow
| <ref>{{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>
| Fortran
| 2015 (v.{{nbsp}}1.2)
| Simulates electron-energy loss spectroscopy and cathodoluminescence. Built upon DDSCAT 7.1.
|
|-
| [http://perso.fundp.ac.be/~lhenrard/ddeels/ddeels.php DDEELS]
| N. Geuquet, S.-O. Guillaume and L. Henrard
| <ref>{{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>
| Fortran
| 2013 (v.{{nbsp}}2.1)
| Simulates electron-energy loss spectroscopy and cathodoluminescence. Handles substrate through image approximation, but no FFT acceleration is used.
|-
| T-DDA
| S. Edalatpour
| <ref>{{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
}}</ref>
| 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.
|}
 
<ref name=matlab2021>{{Cite journal
==Relevant scattering codes==
|doi = 10.1016/j.jqsrt.2020.107501
* [[Codes for electromagnetic scattering by spheres]]
|volume = 262
* [[Codes for electromagnetic scattering by cylinders]]
|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>
 
==See also==
* [[Computational electromagnetics]]
* [[Light scattering by particles]]
* [[List of atmospheric radiative transfer codes]]
 
==References==
<references/>
 
}}
==External links==
* [http://www.scattport.org/index.php/light-scattering-software/volume-integral List of volume-integral (DDA-type) codes at ScattPort]
 
{{DEFAULTSORT:Discrete dipoleDipole approximation codesApproximation}}
[[Category:Science-relatedComputational listsscience]]
[[Category:Computational scienceElectrodynamics]]
[[Category:Scattering, absorption and radiative transfer codes]]
[[Category:Scattering]]
[[Category:Scattering, absorption and radiative transfer (optics)]]
[[Category:Computational electromagnetics]]