Per-orbit Wigner matrix representation of a group action.
Former-commit-id: 25eaffa683bae1056a07c8e5667365f461388b5e
This commit is contained in:
parent
b55c0bd8fa
commit
fb29736936
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue