QPMS
Electromagnetic multiple scattering library and toolkit.

Structure describing a particle's "orbit type" under symmetry group actions in a system. More...
#include <scatsystem.h>
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_t *  action 
Action of the group elements onto the elements in this orbit. More...  
qpms_ss_tmi_t *  tmatrices 
Tmatrix IDs of the particles on this orbit (type). More...  
size_t *  irbase_sizes 
Sizes of the perorbit irrep bases. More...  
size_t *  irbase_cumsizes 
Cumulative sums of irbase_sizes.  
size_t *  irbase_offsets 
TODO doc.  
complex double *  irbases 
Perorbit 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;.  
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 (Tmatrix, 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:
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.
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 pith particle is given by action[g + pi*sym>order].
size_t qpms_ss_orbit_type_t::bspecn 
Individual particle's coefficient vector length. The same as ss>tm[this.tmatrices[0]]>spec>n.
size_t* qpms_ss_orbit_type_t::irbase_sizes 
Sizes of the perorbit 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.
complex double* qpms_ss_orbit_type_t::irbases 
Perorbit irreducible representation orthonormal bases.
This also defines the unitary operator that transforms the orbital excitation coefficients in the symmetryadapted basis.
The size is (this>size * this>tmatrices[0].spec>n)**2.
TODO doc.
qpms_ss_tmi_t* qpms_ss_orbit_type_t::tmatrices 
Tmatrix 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.