#ifndef GROUP_INCLUDED #define GROUP_INCLUDED #include "include.h" /* NMULTIPLETS is the number of multiplets defined for lattice symmetries ORDER_GROUP is the order of the lattice symmetry group */ #if HINDEX==1 # define NMULTIPLETS 4 # define ORDER_GROUP 2 #elif HINDEX==2 # define NMULTIPLETS 19 # define ORDER_GROUP 8 #endif typedef unsigned int latype; /* element of the lattice symmetry group */ /* Structure to hold a subgroup of the lattice rotation group. Elements of the subgroup are assumed to be sorted. The elements of latlist cannot be changed */ typedef struct {latype e[ORDER_GROUP]; int length;} latlist; #define TRIVIAL_GROUP 0 /* Which group is the trivial group */ #define FULL_GROUP 1 /* Which group is the full lattice group */ /* from file: group.c */ const int subgroup[NMULTIPLETS]; /* subgroup of the lattice symmetry group associated with given multiplet */ #if HINDEX==1 const latlist latgroups[2]; /* List containing lattice symmetry groups */ const int permutations[1]; /* permutations of HINDEX objects */ #elif HINDEX==2 const latlist latgroups[7]; /* List containing lattice symmetry groups */ const int permutations[4]; /* permutations of HINDEX objects */ #endif const int multiplet[NMULTIPLETS][ORDER_GROUP]; /* a multiplet (with length order) */ latype latorder(int *); /* Helicity indices into canonical form using all lattice symmetries. */ int isinvariantvector(int *, latlist *); /*is vector invariant under subgroup? */ int fisinvariantvector(element *, latlist *); /*is vector invariant under subgroup? */ #endif