QPMS
Electromagnetic multiple scattering library and toolkit.
Data Fields
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:
Collaboration graph
[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.

Field Documentation

◆ 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: