Writing down some plans on abstract t-matrices / particles.

Former-commit-id: 83722142c0b53f995c61f53a3c58320491b27843
This commit is contained in:
Marek Nečada 2019-03-02 04:42:34 +00:00
parent ebba5a0ed6
commit e8c2250e60
2 changed files with 53 additions and 0 deletions

View File

@ -4,6 +4,22 @@
* Right now, the instances of qpms_finite_group_t are created at compilation time * Right now, the instances of qpms_finite_group_t are created at compilation time
* from source code generated by Python script TODO (output groups.c) * from source code generated by Python script TODO (output groups.c)
* and they are not to be constructed dynamically. * and they are not to be constructed dynamically.
*
* In the end, I might want to have a special type for 3D point groups
* or more specifically, for the closed subgroups of O(3), see
* https://en.wikipedia.org/wiki/Point_groups_in_three_dimensions.
* They consist of the seven infinite series of axial groups
* (characterized by the series index, the axis direction,
* and the index \a n of the \a n-fold rotational symmetry)
* and the seven remaining point groups + the finite groups.
* All off them have a quite limited number of generators
* (max. 4?; CHECKME).
* The goal is to have some representation that would enable to
* 1. fully describe the symmetries of abstract T-matrices/nanoparticles,
* 2. quickly determine e.g. whether one is a subgroup of another,
* 3. have all the irreps,
* 4. have all in C and without excessive external dependencies,
* etc.
*/ */
#ifndef QPMS_GROUPS_H #ifndef QPMS_GROUPS_H
#define QPMS_GROUPS_H #define QPMS_GROUPS_H

View File

@ -301,4 +301,41 @@ qpms_errno_t qpms_scatsys_dump(qpms_scatsys_t *ss, char *path);
/// NOT IMPLEMENTED Reads a qpms_scatsys_t structure from a file. /// NOT IMPLEMENTED Reads a qpms_scatsys_t structure from a file.
qpms_scatsys_t *qpms_scatsys_load(char *path); qpms_scatsys_t *qpms_scatsys_load(char *path);
#if 0
// Abstract types that describe T-matrix/particle/scatsystem symmetries
// To be implemented later. See also the thoughts in the beginning of groups.h.
typedef *char qpms_tmatrix_id_t; ///< Maybe I want some usual integer type instead.
///Abstract T-matrix type draft.
/**
* TODO.
*/
typedef struct qpms_abstract_tmatrix_t{
qpms_tmatrix_id_t id;
/// Generators of the discrete point group under which T-matrix is invariant.
qpms_irot3_t *invar_gens;
/// Length of invar_gens.
qpms_gmi_t invar_gens_size;
} qpms_abstract_tmatrix_t;
typedef struct qpms_abstract_particle_t{
} qpms_abstract_particle_t;
/// An abstract particle, defined by its position and abstract T-matrix.
typedef struct qpms_abstract_particle_t {
cart3_t pos; ///< Particle position in cartesian coordinates.
const qpms_abstract_tmatrix_t *tmatrix; ///< T-matrix; not owned by this.
} qpms_abstract_particle_t;
/** This is just an alias, as the same index can be used for
* abstract T-matrices as well.
*/
typedef qpms_particle_tid_t qpms_abstract_particle_tid_t;
#endif // 0
#endif //QPMS_SCATSYSTEM_H #endif //QPMS_SCATSYSTEM_H