Discrete dipole approximation: Difference between revisions

Content deleted Content added
Line 40:
===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.<ref name=Yurkin2007a/>
 
{| class="wikitable"
{|- class="wikitable" style="backgroundtext-coloralign: #efefefcenter;"
|- style="background-color: #efefef; font-weight: bold;"
! Name !! Authors !! References !! Language !! Updated !! Features
|-
| [http://ddscat.wikidot.com/ DDSCAT]
| Draine and Flatau
| <ref name=draine1994/>
| Fortran
| 2019 (v.{{nbsp}}7.3.3)
| Can also handle periodic particles and efficiently calculate [[Electromagnetic_radiation#Near_and_far_fields|near fields]]. Uses [[OpenMP]] acceleration.
|-
| [http://space.univ.kiev.ua/Choliy/DDscatcpp/ DDscat.C++]
| Choliy
| <ref name=choily2013/>
| C++
| 2017 (v.{{nbsp}}7.3.1)
| Version of DDSCAT translated to C++ with some further improvements.
|-
| [https://github.com/adda-team/adda/ ADDA]
| Yurkin, Hoekstra, and contributors
| <ref name=yurkin2007b/><ref name=yurkin2011/>
| C
| 2020 (v.{{nbsp}}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 [[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]]).
|-
| [https://github.com/drjmcdonald/OpenDDA/ OpenDDA]
| McDonald
| <ref name=mcdonald2009/><ref name=mcdonald2007a/>
| C
| 2009 (v.{{nbsp}}0.4.1)
| Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
|-
| style="background-color: #ffffff;" | [http://ddscat.wikidot.com/ DDSCAT]
| [https://github.com/steffen-kiess/dda DDA-GPU]
| style="background-color: #ffffff;" | Draine and Flatau
| Kieß
| style="background-color: #ffffff;" | <ref name=zimmermann2012draine1994/>
| style="background-color: #ffffff;" | Fortran
| C++
| style="background-color: #ffffff;" | 2019 (v.{{nbsp}}7.3.3)
| 2016
| style="background-color: #ffffff;" | Can also handle periodic particles and efficiently calculate [[Electromagnetic_radiation#Near_and_far_fields|near fields]]. Uses [[OpenMP]] acceleration.
| Runs on GPU (OpenCL). Algorithms are partly based on ADDA.
|-
| style="background-color: #eeeeee;" | [http://space.univ.kiev.ua/Choliy/DDscatcpp/ DDscat.C++]
| [https://github.com/Sha-Group/VIE_FFT VIE-FFT]
| style="background-color: #eeeeee;" | Choliy
| Sha
| style="background-color: #eeeeee;" | <ref name=sha2011choily2013/>
| style="background-color: #eeeeee;" | C++
| C/C++
| style="background-color: #eeeeee;" | 2017 (v.{{nbsp}}7.3.1)
| 2019
| style="background-color: #eeeeee;" | Version of DDSCAT translated to C++ with some further improvements.
| 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/samuelpgrothadda-team/adda/VoxScatter VoxScatter ADDA]
| style="background-color: #ffffff;" | Yurkin, Hoekstra, and contributors
| Groth, Polimeridis, and White
| style="background-color: #ffffff;" | <ref name=yurkin2007b/><ref name=yurkin2011/>
| <ref name=groth2020/>
| style="background-color: #ffffff;" | C
| Matlab
| style="background-color: #ffffff;" | 2020 (v.{{nbsp}}1.4.0)
| 2019
| 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]]).
| Uses circulant preconditioner for accelerating iterative solvers
|-
| style="background-color: #eeeeee;" | [https://github.com/drjmcdonald/OpenDDA/ OpenDDA]
| [https://www.fresnel.fr/spip/spip.php?article2735 IF-DDA]
| style="background-color: #eeeeee;" | McDonald
| Chaumet, Sentenac, and Sentenac
| style="background-color: #eeeeee;" | <ref name=mcdonald2009/><ref name=mcdonald2007a/>
| <ref name=chaumet2021/>
| style="background-color: #eeeeee;" | C
| Fortran, GUI in C++ with Qt
| 2021style="background-color: #eeeeee;" | 2009 (v.{{nbsp}}0.94.191)
| style="background-color: #eeeeee;" | Uses both OpenMP and MPI parallelization. Focuses on computational efficiency.
| 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/MPDDAsteffen-1.0kiess/dda MPDDADDA-GPU]
| style="background-color: #ffffff;" | Kieß
| Shabaninezhad, Awan, and Ramakrishna
| style="background-color: #ffffff;" | <ref name=matlab2021zimmermann2012/>
| style="background-color: #ffffff;" | C++
| Matlab
| style="background-color: #ffffff;" | 2016
| 2021 (v.{{nbsp}}1.0)
| style="background-color: #ffffff;" | Runs on GPU (OpenCL). Algorithms are partly based on ADDA.
| Runs on GPU (using Matlab capabilities)
|-
| 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)
|}