Skip to content

Optimize orientation averaging for symmetric particles #278

Open
@myurkin

Description

Is your feature request related to a problem? Please describe.

Automatic orientation averaging in ADDA can be very inefficient, when applied to symmetric shapes. In short, ADDA places the particle in many equivalent orientations, wasting computations and leading to poor accuracy. That has been noted long ago, see e.g. this case, and there are some comments about it in avg_params.dat, but only for the case of axisymmetric particles.

Describe the solution you'd like

The more automatic - the better for the users. But the simplest solution is to provide optimal avg_params.dat (or comments inside this file) for various point group symmetries. These files will have a reduced angular ranges (mainly beta and gamma). It is important to note (for users) that the optimal (the largest) angular reduction will be based on reflection symmetries, and, thus, cause some elements of the Mueller matrix (that must be zero after averaging, like S14) to be non-zero. In other words, such elements must be manually discarded afterwards.

For example, a solution for the cube is to use

max=90
Jmax=Jmax-1
gamma:
max=45
Jmax=Jmax-3
equiv=false

which is approximately 16 times reduction in simulation time (not clear if can be made better, the total order of the cubical symmetry group with reflections is 48).

Alternative (or supplementary) solutions may be related to changing the averaging scheme inside ADDA, so it would be more robust with respect to particle symmetries. For instance, the averaging over gamma can be changed to simple trapezoid rule using some prime number of points.

Metadata

Assignees

No one assigned

    Labels

    accuracyImproves simulation accuracycomp-LogicRelated to internal code logiccomp-UIRelated to user interface (command line, input files)performanceSimulation speed, memory consumptionpri-MediumWorth assigning to a milestone

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions