QPMS Electromagnetic multiple scattering library and toolkit.
qpms_ss_orbit_type_t Struct Reference

Structure describing a particle's "orbit type" under symmetry group actions in a system. More...

#include <scatsystem.h>

Collaboration diagram for qpms_ss_orbit_type_t:
[legend]

## Data Fields

qpms_ss_orbit_pi_t size
Size of the orbit (a divisor of the group order), i.e. number of particles on the orbit.

size_t bspecn

qpms_ss_orbit_pi_taction
Action of the group elements onto the elements in this orbit. More...

qpms_ss_tmi_ttmatrices
T-matrix IDs of the particles on this orbit (type). More...

size_t * irbase_sizes
Sizes of the per-orbit irrep bases. More...

size_t * irbase_cumsizes
Cumulative sums of irbase_sizes.

size_t * irbase_offsets
TODO doc.

complex double * irbases
Per-orbit irreducible representation orthonormal bases. More...

size_t instance_count
TODO doc.

qpms_ss_pi_t p_offset
Cumulative sum of the preceding ot->siza * ot->instance_count;.

## Detailed Description

Structure describing a particle's "orbit type" under symmetry group actions in a system.

Each particle has its orbit with respect to a symmetry group of the system in which the particle lies, i.e. a set of particles onto which the group operations map the original particle.

(TODO DOC improve the following explanation:) Typically, there will be only a small number of different (T-matrix, particle stabiliser) pairs in the system. We can group the particles accordingly, into the same "orbit types" that will allow to do certain operations only once for each "orbit type", saving memory and (perhaps) time.

Each particle will then have assigned:

1. an orbit type,
2. an ID inside that orbit.

TODO DOC how the process of assigning the particle IDs actually work, orbit type (non-)uniqueness.

Memory is managed by qpms_scatspec_t; qpms_ss_orbit_type_t does not own anything.

## ◆ action

 qpms_ss_orbit_pi_t* qpms_ss_orbit_type_t::action

Action of the group elements onto the elements in this orbit.

Its size is sym->order * this.size and its values lie between 0 and this.size − 1.

Action of the group element g onto the pi-th particle is given by action[g + pi*sym->order].

## ◆ bspecn

 size_t qpms_ss_orbit_type_t::bspecn

Individual particle's coefficient vector length. The same as ss->tm[this.tmatrices[0]]->spec->n.

## ◆ irbase_sizes

 size_t* qpms_ss_orbit_type_t::irbase_sizes

Sizes of the per-orbit irrep bases.

The order of the irreps corresponds to the order in ss->sym->irreps. The size of this array is (obviously) ss->sym->nirreps.

TODO different type? TODO doc.

## ◆ irbases

 complex double* qpms_ss_orbit_type_t::irbases

Per-orbit irreducible representation orthonormal bases.

This also defines the unitary operator that transforms the orbital excitation coefficients in the symmetry-adapted basis.

The size is (this->size * this->tmatrices[0].spec->n)**2.

TODO doc.

## ◆ tmatrices

 qpms_ss_tmi_t* qpms_ss_orbit_type_t::tmatrices

T-matrix IDs of the particles on this orbit (type).

We save all the tmi's of the particles on the orbit here to make the number of array lookups and pointer dereferences constant.

The size of this array is size.

The documentation for this struct was generated from the following file: