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 |
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;. | |
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:
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 pi-th 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 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.
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.
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.