From 6f66ddc8450e737f2525cbf85198007270ab0904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ne=C4=8Dada?= Date: Tue, 12 Mar 2019 21:22:31 +0200 Subject: [PATCH] Additional symmetries Former-commit-id: dce9d43c0bfbce7166e6365f40591fbf5f9b4873 --- qpms/symmetries.py | 75 ++++- tests/generate_groupcode.py | 3 +- tests/staticgroups.c | 596 ++++++++++++++++++++++++------------ tests/staticgroups.h | 4 + 4 files changed, 478 insertions(+), 200 deletions(-) diff --git a/qpms/symmetries.py b/qpms/symmetries.py index 67fbb6f..d8cffc3 100644 --- a/qpms/symmetries.py +++ b/qpms/symmetries.py @@ -53,7 +53,7 @@ class SVWFPointGroupInfo: # only for point groups, coz in svwf_rep() I use I_tyt self.svwf_rep_gen_func = svwf_rep_gen_func self.irreps = dict() for irrepname, irrepgens in irrepgens_dict.items(): - is1d = isinstance(irrepgens[0], int) + is1d = isinstance(irrepgens[0], (int,float,complex)) irrepdim = 1 if is1d else irrepgens[0].shape[0] self.irreps[irrepname] = generate_grouprep(self.permgroup, 1 if is1d else np.eye(irrepdim), @@ -495,6 +495,24 @@ point_group_info = { # representation info of some useful point groups qpms.IRot3.identity(), ) ), + 'C2' : SVWFPointGroupInfo('C2', + # permutation group generators + (Permutation(0,1), # 180 deg rotation around z axis + ), + # dictionary with irrep generators + { + # Bradley, Cracknell p. 57; + 'A': (1,), + 'B': (-1,), + }, + # function that generates a tuple with svwf representation generators + lambda lMax : (qpms.zrotN_tyty(2, lMax),), + # quaternion rep generators + rep3d_gens = ( + qpms.IRot3.zrotN(2), + ) + + ), 'C2v' : SVWFPointGroupInfo('C2v', # permutation group generators (Permutation(0,1, size=4)(2,3), # x -> - x mirror operation (i.e. yz mirror plane) @@ -546,6 +564,24 @@ point_group_info = { # representation info of some useful point groups qpms.IRot3.zflip(), ) ), + 'C4' : SVWFPointGroupInfo('C4', + # permutation group generators + (Permutation(0,1,2,3, size=4),), #C4 rotation + # dictionary with irrep generators + { + # Bradley, Cracknell p. 58 + 'A': (1,), + 'B': (-1,), + '1E': (-1j,), + '2E': (1j,), + }, + # function that generates a tuple with svwf representation generators + lambda lMax : (qpms.zrotN_tyty(4, lMax), ), + # quaternion rep generators + rep3d_gens = ( + qpms.IRot3.zrotN(4), + ) + ), 'C4v' : SVWFPointGroupInfo('C4v', # permutation group generators (Permutation(0,1,2,3, size=4), #C4 rotation @@ -621,4 +657,41 @@ point_group_info = { # representation info of some useful point groups qpms.IRot3.zflip(), ) ), + 'x_and_z_flip': SVWFPointGroupInfo( + 'x_and_z_flip', + ( + Permutation(0,1, size=4), # x -> -x mirror op + Permutation(2,3, size=4), # z -> -z mirror op + ), + { + "P'": (1, 1), + "R'": (-1, 1), + "P''": (-1,-1), + "R''": (1, -1), + }, + lambda lMax : (qpms.xflip_tyty(lMax), qpms.zflip_tyty(lMax)), + rep3d_gens = ( + qpms.IRot3.xflip(), + qpms.IRot3.zflip(), + ) + + ), + 'y_and_z_flip': SVWFPointGroupInfo( + 'y_and_z_flip', + ( + Permutation(0,1, size=4), # y -> -y mirror op + Permutation(2,3, size=4), # z -> -z mirror op + ), + { + "P'": (1, 1), + "R'": (-1, 1), + "P''": (-1,-1), + "R''": (1, -1), + }, + lambda lMax : (qpms.yflip_tyty(lMax), qpms.zflip_tyty(lMax)), + rep3d_gens = ( + qpms.IRot3.yflip(), + qpms.IRot3.zflip(), + ) + ), } diff --git a/tests/generate_groupcode.py b/tests/generate_groupcode.py index b69e675..846e765 100755 --- a/tests/generate_groupcode.py +++ b/tests/generate_groupcode.py @@ -2,7 +2,8 @@ from qpms.symmetries import point_group_info codestring = "#include \n" -for name, info in point_group_info.items(): +for name in sorted(point_group_info.keys()): + info = point_group_info[name] codestring += 'const qpms_finite_group_t QPMS_FINITE_GROUP_%s = ' %name codestring += info.generate_c_source() codestring += ";\n\n" diff --git a/tests/staticgroups.c b/tests/staticgroups.c index d9240e2..3040539 100644 --- a/tests/staticgroups.c +++ b/tests/staticgroups.c @@ -1,4 +1,42 @@ -#include "staticgroups.h" +#include +const qpms_finite_group_t QPMS_FINITE_GROUP_C2 = { + "C2", // name + 2, // order + 0, // idi + (qpms_gmi_t[]) { // mt + 0, 1, + 1, 0, + }, + (qpms_gmi_t[]) { // invi + 0, 1 + }, + (qpms_gmi_t[]) {1}, // gens + 1, // ngens + (qpms_permutation_t[]){ // permrep + "(1)", + "(0 1)", + }, + NULL, // elemlabels + 2, // permrep_nelem + (qpms_irot3_t[]) { // rep3d + {{1.0+0.0*I, 0.0+0.0*I}, 1}, + {{6.123233995736766e-17+1.0*I, 0.0+0.0*I}, 1}, + }, + 2, // nirreps + (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "B", //name + (complex double []) {1, -1} // m + }, + { + 1, // dim + "A", //name + (complex double []) {1, 1} // m + }, + } // end of irreps +}; + const qpms_finite_group_t QPMS_FINITE_GROUP_C2v = { "C2v", // name 4, // order @@ -35,6 +73,11 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_C2v = { "A1", //name (complex double []) {1, 1, 1, 1} // m }, + { + 1, // dim + "A2", //name + (complex double []) {1, -1, 1, -1} // m + }, { 1, // dim "B2", //name @@ -45,10 +88,241 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_C2v = { "B1", //name (complex double []) {1, 1, -1, -1} // m }, + } // end of irreps +}; + +const qpms_finite_group_t QPMS_FINITE_GROUP_C4 = { + "C4", // name + 4, // order + 0, // idi + (qpms_gmi_t[]) { // mt + 0, 1, 2, 3, + 1, 2, 3, 0, + 2, 3, 0, 1, + 3, 0, 1, 2, + }, + (qpms_gmi_t[]) { // invi + 0, 3, 2, 1 + }, + (qpms_gmi_t[]) {1}, // gens + 1, // ngens + (qpms_permutation_t[]){ // permrep + "(3)", + "(0 1 2 3)", + "(0 2)(1 3)", + "(0 3 2 1)", + }, + NULL, // elemlabels + 4, // permrep_nelem + (qpms_irot3_t[]) { // rep3d + {{1.0+0.0*I, 0.0+0.0*I}, 1}, + {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1}, + {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1}, + {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1}, + }, + 4, // nirreps + (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "B", //name + (complex double []) {1, -1, 1, -1} // m + }, + { + 1, // dim + "2E", //name + (complex double []) {1, 1j, (-1+0j), (-0-1j)} // m + }, + { + 1, // dim + "A", //name + (complex double []) {1, 1, 1, 1} // m + }, + { + 1, // dim + "1E", //name + (complex double []) {1, -1j, (-1+0j), 1j} // m + }, + } // end of irreps +}; + +const qpms_finite_group_t QPMS_FINITE_GROUP_C4v = { + "C4v", // name + 8, // order + 0, // idi + (qpms_gmi_t[]) { // mt + 0, 1, 2, 3, 4, 5, 6, 7, + 1, 2, 3, 0, 7, 4, 5, 6, + 2, 3, 0, 1, 6, 7, 4, 5, + 3, 0, 1, 2, 5, 6, 7, 4, + 4, 5, 6, 7, 0, 1, 2, 3, + 5, 6, 7, 4, 3, 0, 1, 2, + 6, 7, 4, 5, 2, 3, 0, 1, + 7, 4, 5, 6, 1, 2, 3, 0, + }, + (qpms_gmi_t[]) { // invi + 0, 3, 2, 1, 4, 5, 6, 7 + }, + (qpms_gmi_t[]) {1, 7}, // gens + 2, // ngens + (qpms_permutation_t[]){ // permrep + "(3)", + "(0 1 2 3)", + "(0 2)(1 3)", + "(0 3 2 1)", + "(3)(0 2)", + "(0 3)(1 2)", + "(1 3)", + "(0 1)(2 3)", + }, + NULL, // elemlabels + 4, // permrep_nelem + (qpms_irot3_t[]) { // rep3d + {{1.0+0.0*I, 0.0+0.0*I}, 1}, + {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1}, + {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1}, + {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1}, + {{0.0+0.0*I, 0.7071067811865477-0.7071067811865474*I}, -1}, + {{0.0+0.0*I, 1.0+2.220446049250313e-16*I}, -1}, + {{0.0+0.0*I, 0.7071067811865475+0.7071067811865476*I}, -1}, + {{0.0+0.0*I, 0.0+1.0*I}, -1}, + }, + 5, // nirreps + (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "A1", //name + (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m + }, { 1, // dim "A2", //name - (complex double []) {1, -1, 1, -1} // m + (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m + }, + { + 2, // dim + "E", //name + (complex double []) { + // (3) + 1.0, 0.0, + 0.0, 1.0, + // (0 1 2 3) + 0.0, -1.0, + 1.0, 0.0, + // (0 2)(1 3) + -1.0, 0.0, + 0.0, -1.0, + // (0 3 2 1) + 0.0, 1.0, + -1.0, 0.0, + // (3)(0 2) + 0.0, 1.0, + 1.0, 0.0, + // (0 3)(1 2) + 1.0, 0.0, + 0.0, -1.0, + // (1 3) + 0.0, -1.0, + -1.0, 0.0, + // (0 1)(2 3) + -1.0, 0.0, + 0.0, 1.0, + } + }, + { + 1, // dim + "B2", //name + (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m + }, + { + 1, // dim + "B1", //name + (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m + }, + } // end of irreps +}; + +const qpms_finite_group_t QPMS_FINITE_GROUP_D2h = { + "D2h", // name + 8, // order + 0, // idi + (qpms_gmi_t[]) { // mt + 0, 1, 2, 3, 4, 5, 6, 7, + 1, 0, 3, 2, 5, 4, 7, 6, + 2, 3, 0, 1, 6, 7, 4, 5, + 3, 2, 1, 0, 7, 6, 5, 4, + 4, 5, 6, 7, 0, 1, 2, 3, + 5, 4, 7, 6, 1, 0, 3, 2, + 6, 7, 4, 5, 2, 3, 0, 1, + 7, 6, 5, 4, 3, 2, 1, 0, + }, + (qpms_gmi_t[]) { // invi + 0, 1, 2, 3, 4, 5, 6, 7 + }, + (qpms_gmi_t[]) {1, 3, 7}, // gens + 3, // ngens + (qpms_permutation_t[]){ // permrep + "(5)", + "(5)(0 1)(2 3)", + "(5)(0 2)(1 3)", + "(5)(0 3)(1 2)", + "(0 3)(1 2)(4 5)", + "(0 2)(1 3)(4 5)", + "(0 1)(2 3)(4 5)", + "(4 5)", + }, + NULL, // elemlabels + 6, // permrep_nelem + (qpms_irot3_t[]) { // rep3d + {{1.0+0.0*I, 0.0+0.0*I}, 1}, + {{0.0+0.0*I, 0.0+1.0*I}, -1}, + {{0.0+1.0*I, 0.0+0.0*I}, 1}, + {{0.0+0.0*I, 1.0+0.0*I}, -1}, + {{0.0+0.0*I, 0.0+1.0*I}, 1}, + {{-1.0+0.0*I, 0.0+0.0*I}, -1}, + {{0.0+0.0*I, -1.0+0.0*I}, 1}, + {{0.0+1.0*I, 0.0+0.0*I}, -1}, + }, + 8, // nirreps + (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "A2\'", //name + (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m + }, + { + 1, // dim + "B1\'", //name + (complex double []) {1, 1, -1, -1, -1, -1, 1, 1} // m + }, + { + 1, // dim + "A2\'\'", //name + (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m + }, + { + 1, // dim + "B2\'", //name + (complex double []) {1, -1, -1, 1, 1, -1, -1, 1} // m + }, + { + 1, // dim + "A1\'", //name + (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m + }, + { + 1, // dim + "A1\'\'", //name + (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m + }, + { + 1, // dim + "B2\'\'", //name + (complex double []) {1, 1, -1, -1, 1, 1, -1, -1} // m + }, + { + 1, // dim + "B1\'\'", //name + (complex double []) {1, -1, -1, 1, -1, 1, 1, -1} // m }, } // end of irreps }; @@ -108,6 +382,11 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D3h = { }, 6, // nirreps (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "A2\'", //name + (complex double []) {1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1} // m + }, { 2, // dim "E\'", //name @@ -150,6 +429,21 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D3h = { 0.0, 0.9999999999999996, } }, + { + 1, // dim + "A2\'\'", //name + (complex double []) {1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1} // m + }, + { + 1, // dim + "A1\'", //name + (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m + }, + { + 1, // dim + "A1\'\'", //name + (complex double []) {1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1} // m + }, { 2, // dim "E\'\'", //name @@ -192,26 +486,6 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D3h = { 0.0, -0.9999999999999996, } }, - { - 1, // dim - "A2\'", //name - (complex double []) {1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1} // m - }, - { - 1, // dim - "A1\'\'", //name - (complex double []) {1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1} // m - }, - { - 1, // dim - "A1\'", //name - (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m - }, - { - 1, // dim - "A2\'\'", //name - (complex double []) {1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1} // m - }, } // end of irreps }; @@ -284,8 +558,13 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D4h = { (struct qpms_finite_group_irrep_t[]) { // irreps { 1, // dim - "B1\'\'", //name - (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} // m + "A2\'", //name + (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1} // m + }, + { + 1, // dim + "B1\'", //name + (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1} // m }, { 2, // dim @@ -341,6 +620,36 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D4h = { 0.0, 1.0, } }, + { + 1, // dim + "A2\'\'", //name + (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} // m + }, + { + 1, // dim + "B2\'", //name + (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1} // m + }, + { + 1, // dim + "A1\'", //name + (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m + }, + { + 1, // dim + "A1\'\'", //name + (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1} // m + }, + { + 1, // dim + "B2\'\'", //name + (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1} // m + }, + { + 1, // dim + "B1\'\'", //name + (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1} // m + }, { 2, // dim "E\'\'", //name @@ -395,41 +704,6 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_D4h = { 0.0, -1.0, } }, - { - 1, // dim - "B1\'", //name - (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1} // m - }, - { - 1, // dim - "A2\'\'", //name - (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1} // m - }, - { - 1, // dim - "B2\'", //name - (complex double []) {1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1} // m - }, - { - 1, // dim - "A1\'\'", //name - (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1} // m - }, - { - 1, // dim - "A2\'", //name - (complex double []) {1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1} // m - }, - { - 1, // dim - "B2\'\'", //name - (complex double []) {1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1} // m - }, - { - 1, // dim - "A1\'", //name - (complex double []) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} // m - }, } // end of irreps }; @@ -463,184 +737,110 @@ const qpms_finite_group_t QPMS_FINITE_GROUP_trivial_g = { } // end of irreps }; -const qpms_finite_group_t QPMS_FINITE_GROUP_C4v = { - "C4v", // name - 8, // order +const qpms_finite_group_t QPMS_FINITE_GROUP_x_and_z_flip = { + "x_and_z_flip", // name + 4, // order 0, // idi (qpms_gmi_t[]) { // mt - 0, 1, 2, 3, 4, 5, 6, 7, - 1, 2, 3, 0, 7, 4, 5, 6, - 2, 3, 0, 1, 6, 7, 4, 5, - 3, 0, 1, 2, 5, 6, 7, 4, - 4, 5, 6, 7, 0, 1, 2, 3, - 5, 6, 7, 4, 3, 0, 1, 2, - 6, 7, 4, 5, 2, 3, 0, 1, - 7, 4, 5, 6, 1, 2, 3, 0, + 0, 1, 2, 3, + 1, 0, 3, 2, + 2, 3, 0, 1, + 3, 2, 1, 0, }, (qpms_gmi_t[]) { // invi - 0, 3, 2, 1, 4, 5, 6, 7 + 0, 1, 2, 3 }, - (qpms_gmi_t[]) {1, 7}, // gens + (qpms_gmi_t[]) {1, 3}, // gens 2, // ngens (qpms_permutation_t[]){ // permrep "(3)", - "(0 1 2 3)", - "(0 2)(1 3)", - "(0 3 2 1)", - "(3)(0 2)", - "(0 3)(1 2)", - "(1 3)", + "(3)(0 1)", "(0 1)(2 3)", + "(2 3)", }, NULL, // elemlabels 4, // permrep_nelem (qpms_irot3_t[]) { // rep3d {{1.0+0.0*I, 0.0+0.0*I}, 1}, - {{0.7071067811865476+0.7071067811865475*I, 0.0+0.0*I}, 1}, - {{2.220446049250313e-16+1.0*I, 0.0+0.0*I}, 1}, - {{-0.7071067811865474+0.7071067811865477*I, 0.0+0.0*I}, 1}, - {{0.0+0.0*I, 0.7071067811865477-0.7071067811865474*I}, -1}, - {{0.0+0.0*I, 1.0+2.220446049250313e-16*I}, -1}, - {{0.0+0.0*I, 0.7071067811865475+0.7071067811865476*I}, -1}, {{0.0+0.0*I, 0.0+1.0*I}, -1}, - }, - 5, // nirreps - (struct qpms_finite_group_irrep_t[]) { // irreps - { - 2, // dim - "E", //name - (complex double []) { - // (3) - 1.0, 0.0, - 0.0, 1.0, - // (0 1 2 3) - 0.0, -1.0, - 1.0, 0.0, - // (0 2)(1 3) - -1.0, 0.0, - 0.0, -1.0, - // (0 3 2 1) - 0.0, 1.0, - -1.0, 0.0, - // (3)(0 2) - 0.0, 1.0, - 1.0, 0.0, - // (0 3)(1 2) - 1.0, 0.0, - 0.0, -1.0, - // (1 3) - 0.0, -1.0, - -1.0, 0.0, - // (0 1)(2 3) - -1.0, 0.0, - 0.0, 1.0, - } - }, - { - 1, // dim - "A1", //name - (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m - }, - { - 1, // dim - "B2", //name - (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m - }, - { - 1, // dim - "B1", //name - (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m - }, - { - 1, // dim - "A2", //name - (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m - }, - } // end of irreps -}; - -const qpms_finite_group_t QPMS_FINITE_GROUP_D2h = { - "D2h", // name - 8, // order - 0, // idi - (qpms_gmi_t[]) { // mt - 0, 1, 2, 3, 4, 5, 6, 7, - 1, 0, 3, 2, 5, 4, 7, 6, - 2, 3, 0, 1, 6, 7, 4, 5, - 3, 2, 1, 0, 7, 6, 5, 4, - 4, 5, 6, 7, 0, 1, 2, 3, - 5, 4, 7, 6, 1, 0, 3, 2, - 6, 7, 4, 5, 2, 3, 0, 1, - 7, 6, 5, 4, 3, 2, 1, 0, - }, - (qpms_gmi_t[]) { // invi - 0, 1, 2, 3, 4, 5, 6, 7 - }, - (qpms_gmi_t[]) {1, 3, 7}, // gens - 3, // ngens - (qpms_permutation_t[]){ // permrep - "(5)", - "(5)(0 1)(2 3)", - "(5)(0 2)(1 3)", - "(5)(0 3)(1 2)", - "(0 3)(1 2)(4 5)", - "(0 2)(1 3)(4 5)", - "(0 1)(2 3)(4 5)", - "(4 5)", - }, - NULL, // elemlabels - 6, // permrep_nelem - (qpms_irot3_t[]) { // rep3d - {{1.0+0.0*I, 0.0+0.0*I}, 1}, - {{0.0+0.0*I, 0.0+1.0*I}, -1}, - {{0.0+1.0*I, 0.0+0.0*I}, 1}, - {{0.0+0.0*I, 1.0+0.0*I}, -1}, - {{0.0+0.0*I, 0.0+1.0*I}, 1}, - {{-1.0+0.0*I, 0.0+0.0*I}, -1}, {{0.0+0.0*I, -1.0+0.0*I}, 1}, {{0.0+1.0*I, 0.0+0.0*I}, -1}, }, - 8, // nirreps + 4, // nirreps (struct qpms_finite_group_irrep_t[]) { // irreps { 1, // dim - "B1\'\'", //name - (complex double []) {1, -1, -1, 1, -1, 1, 1, -1} // m + "P\'\'", //name + (complex double []) {1, -1, 1, -1} // m }, { 1, // dim - "A2\'\'", //name - (complex double []) {1, 1, 1, 1, -1, -1, -1, -1} // m + "P\'", //name + (complex double []) {1, 1, 1, 1} // m }, { 1, // dim - "B1\'", //name - (complex double []) {1, 1, -1, -1, -1, -1, 1, 1} // m + "R\'\'", //name + (complex double []) {1, 1, -1, -1} // m }, { 1, // dim - "A2\'", //name - (complex double []) {1, -1, 1, -1, -1, 1, -1, 1} // m + "R\'", //name + (complex double []) {1, -1, -1, 1} // m + }, + } // end of irreps +}; + +const qpms_finite_group_t QPMS_FINITE_GROUP_y_and_z_flip = { + "y_and_z_flip", // name + 4, // order + 0, // idi + (qpms_gmi_t[]) { // mt + 0, 1, 2, 3, + 1, 0, 3, 2, + 2, 3, 0, 1, + 3, 2, 1, 0, + }, + (qpms_gmi_t[]) { // invi + 0, 1, 2, 3 + }, + (qpms_gmi_t[]) {1, 3}, // gens + 2, // ngens + (qpms_permutation_t[]){ // permrep + "(3)", + "(3)(0 1)", + "(0 1)(2 3)", + "(2 3)", + }, + NULL, // elemlabels + 4, // permrep_nelem + (qpms_irot3_t[]) { // rep3d + {{1.0+0.0*I, 0.0+0.0*I}, 1}, + {{0.0+0.0*I, 1.0+0.0*I}, -1}, + {{0.0+0.0*I, 0.0+1.0*I}, 1}, + {{0.0+1.0*I, 0.0+0.0*I}, -1}, + }, + 4, // nirreps + (struct qpms_finite_group_irrep_t[]) { // irreps + { + 1, // dim + "P\'\'", //name + (complex double []) {1, -1, 1, -1} // m }, { 1, // dim - "A1\'\'", //name - (complex double []) {1, -1, 1, -1, 1, -1, 1, -1} // m + "P\'", //name + (complex double []) {1, 1, 1, 1} // m }, { 1, // dim - "B2\'", //name - (complex double []) {1, -1, -1, 1, 1, -1, -1, 1} // m + "R\'\'", //name + (complex double []) {1, 1, -1, -1} // m }, { 1, // dim - "B2\'\'", //name - (complex double []) {1, 1, -1, -1, 1, 1, -1, -1} // m - }, - { - 1, // dim - "A1\'", //name - (complex double []) {1, 1, 1, 1, 1, 1, 1, 1} // m + "R\'", //name + (complex double []) {1, -1, -1, 1} // m }, } // end of irreps }; diff --git a/tests/staticgroups.h b/tests/staticgroups.h index aac2f18..b6ac2bb 100644 --- a/tests/staticgroups.h +++ b/tests/staticgroups.h @@ -1,10 +1,14 @@ #ifndef STATICGROUPS_H #define STATICGROUPS_H #include +extern const qpms_finite_group_t QPMS_FINITE_GROUP_C2; extern const qpms_finite_group_t QPMS_FINITE_GROUP_C2v; extern const qpms_finite_group_t QPMS_FINITE_GROUP_trivial_g; +extern const qpms_finite_group_t QPMS_FINITE_GROUP_C4; extern const qpms_finite_group_t QPMS_FINITE_GROUP_C4v; extern const qpms_finite_group_t QPMS_FINITE_GROUP_D3h; extern const qpms_finite_group_t QPMS_FINITE_GROUP_D2h; extern const qpms_finite_group_t QPMS_FINITE_GROUP_D4h; +extern const qpms_finite_group_t QPMS_FINITE_GROUP_x_and_z_flip; +extern const qpms_finite_group_t QPMS_FINITE_GROUP_y_and_z_flip; #endif