Per-orbit Wigner matrix representation of a group action.

Former-commit-id: 25eaffa683bae1056a07c8e5667365f461388b5e
This commit is contained in:
Marek Nečada 2019-03-03 22:57:54 +00:00
parent b55c0bd8fa
commit fb29736936
2 changed files with 29 additions and 27 deletions

View File

@ -537,8 +537,7 @@ static inline void check_norm_compat(const qpms_vswf_set_spec_t *s)
} }
} }
#if 0 complex double *qpms_orbit_action_matrix(complex double *target,
complex double *qpms_orbit_matrix_action(complex double *target,
const qpms_ss_orbit_type_t *ot, const qpms_vswf_set_spec_t *bspec, const qpms_ss_orbit_type_t *ot, const qpms_vswf_set_spec_t *bspec,
const qpms_finite_group_t *sym, const qpms_gmi_t g) { const qpms_finite_group_t *sym, const qpms_gmi_t g) {
assert(sym); assert(g < sym->order); assert(sym); assert(g < sym->order);
@ -552,12 +551,14 @@ complex double *qpms_orbit_matrix_action(complex double *target,
if (target == NULL) abort(); if (target == NULL) abort();
memset(target, 0, n*n*N*N*sizeof(complex double)); memset(target, 0, n*n*N*N*sizeof(complex double));
complex double tmp[n][n]; // this is the 'per-particle' action complex double tmp[n][n]; // this is the 'per-particle' action
qpms_irot3_uvswfi_dense(tmp[0], bspec, sym->rep3d[g]); qpms_irot3_uvswfi_dense(tmp[0], bspec, sym->rep3d[g]);
for(qpms_gmi_t Col = 0; Col < ot->size; ++Col) { for(qpms_gmi_t Col = 0; Col < ot->size; ++Col) {
// Row is the 'destination' of the symmetry operation, Col is the 'source' // Row is the 'destination' of the symmetry operation, Col is the 'source'
qpms_gmi_t Row = ot->action const qpms_gmi_t Row = ot->action[sym->order * Col + g];
for(size_t row = 0; row < bspec->n; ++row)
#endif for(size_t col = 0; col < bspec->n; ++col)
target[n*n*N*Row + n*Col + n*N*row + col] = tmp[row][col]; //CHECKCONJ
}
return target;
}

View File

@ -244,25 +244,6 @@ typedef struct qpms_ss_orbit_type_t {
qpms_ss_tmi_t *tmatrices; qpms_ss_tmi_t *tmatrices;
} qpms_ss_orbit_type_t; } qpms_ss_orbit_type_t;
/// Construct a "full matrix action" of a point group element for an orbit type.
/** TODO detailed doc */
complex double *qpms_orbit_matrix_action(
/// Target array. If NULL, a new one is allocated.
/** The size of the array is (orbit->size * bspec->n)**2
* (it makes sense to assume all the T-matrices share their spec).
*/
complex double *target,
/// The orbit (type).
const qpms_ss_orbit_type_t *orbit,
/// Base spec of the t-matrices (we don't know it from orbit, as it has
/// only T-matrix indices.
const qpms_vswf_set_spec_t *bspec;
/// The symmetry group used to generate the orbit (must have rep3d filled).
const qpms_finite_group_t *sym,
/// The index of the operation in sym to represent.
const qpms_gmi_t g);
/// Auxillary type used in qpms_scatsys_t that identifies the particle's orbit and its id inside that orbit. /// Auxillary type used in qpms_scatsys_t that identifies the particle's orbit and its id inside that orbit.
typedef struct qpms_ss_particle_orbitinfo { typedef struct qpms_ss_particle_orbitinfo {
qpms_ss_oti_t t; ///< Orbit type. qpms_ss_oti_t t; ///< Orbit type.
@ -326,6 +307,26 @@ 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);
struct qpms_finite_group_t;
/// Constructs a "full matrix action" of a point group element for an orbit type.
/** TODO detailed doc */
complex double *qpms_orbit_action_matrix(
/// Target array. If NULL, a new one is allocated.
/** The size of the array is (orbit->size * bspec->n)**2
* (it makes sense to assume all the T-matrices share their spec).
*/
complex double *target,
/// The orbit (type).
const qpms_ss_orbit_type_t *orbit,
/// Base spec of the t-matrices (we don't know it from orbit, as it has
/// only T-matrix indices.
const qpms_vswf_set_spec_t *bspec,
/// The symmetry group used to generate the orbit (must have rep3d filled).
const struct qpms_finite_group_t *sym,
/// The index of the operation in sym to represent.
const qpms_gmi_t g);
#if 0 #if 0