adda
adda copied to clipboard
Reuse orientations
Reuse calculated internal fields from one orientation for the similar ones
to speed up orientation averaging, as described by Okada.
Original issue reported on code.google.com by yurkin
on 24 Dec 2008 at 7:46
Similar ideas can be used for size averaging or calculating a spectrum of
wavelengths (see issue 35).
#35
Original comment by yurkin
on 6 Jan 2011 at 7:40
In general, this can be optimized by block-iterative methods.
Another related idea is to use Compressive Sensing, which employs a more efficient basis for incident and scattered angles (instead of plane waves). A nice overview is given in L. Carin, D. Liu, W. Lin, and B. Guo, “Compressive sensing for multi-static scattering analysis,” J. Comput. Phys. 228, 3464–3477 (2009).
But it also seems analogous to the usage of the spherical-harmonics basis (#138) and T-matrix computation (#103). Right now it is not clear, which approach can be more efficient.
Konstantin Inzhevatrkin (@inzhevatkin) has implemented a preliminary solution to this issue on a development branch: https://github.com/inzhevatkin/adda/tree/Bicg_block
It uses block conjugate gradient iterative solver (applicable to any variations of the incident fields, including particle orientations). Several tests show acceleration up to 2-3 times, but a convenient way to use the code (specify orientations) need to be devised.
The first known implementation of the block DDA seems to be: https://github.com/nmoteki/block-DDA . However, it has no documentation except for the related publication (also contains only a few sentences, block of 4 incident beams is used): Moteki N., Adachi K., Ohata S., Yoshida A., Harigaya T., Koike M., and Kondo Y. Anthropogenic iron oxide aerosols enhance atmospheric heating, Nat. Commun. 8, 15329 (2017).
There is also a library of various block-iterative methods by the same author (with documentation) - https://github.com/nmoteki/block-Krylov-linear-solvers