adda-team / adda

ADDA - light scattering simulator based on the discrete dipole approximation
GNU General Public License v3.0
97 stars 57 forks source link

Rapid calculation for many refractive indices #121

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
An interesting idea was proposed to optimize multiple runs of iterative solver 
when only the refractive index is varied.

N.V. Budko and R.F. Remis, “Electromagnetic inversion using a reduced-order 
three-dimensional homogeneous model,” Inv. Probl. 20, S17-S26 (2004).
http://dx.doi.org/10.1088/0266-5611/20/6/S02

This is relevant for:
1) construction of databases of scattering properties of different particles.
2) calculation of absorption/scattering/etc. spectra of particles much smaller 
than the wavelength.

Original issue reported on code.google.com by yurkin on 6 Jan 2011 at 7:33

myurkin commented 2 years ago

Similar algorithms are discussed in: Simoncini V, Szyld DB. Recent computational developments in Krylov subspace methods for linear systems. Num. Lin. Alg. Appl. 2007;14:1–59. doi: 10.1002/nla.499

Most efficient are the algorithms for the Rayleigh case, but they can be applied to a range of refractive indices in full-wavelength case, as well. But there the original matrix is complex symmetric, which complicates the matter. But the relevant algorithms do exist (see above paper).

myurkin commented 1 year ago

Two more ideas are described in Asenchik O.D. Using the method of discrete dipoles to approximate solutions of the problems of light scattering and absorption by particles, Opt. Spectrosc. 122, 294–302 (2017). One is the direct evaluation by "shifting" the inverse of the interaction matrix (using its decomposition in spherical harmonics), another is three-point interpolation using specially designed functional form. Both work fine for tests with Rayleigh particles.

myurkin commented 1 year ago

Konstantin Inzhevatrkin (@inzhevatkin) has implemented a solution to this issue on a development branch: https://github.com/inzhevatkin/adda/tree/Shifted_CG

It is based on the shifted conjugate gradient iterative method. Current capabilities and limitations are discussed at: https://groups.google.com/g/adda-discuss/c/qvZUdZAiWmM