diff --git a/coxeter.c b/coxeter.c index 7d8b9a7..10a9e96 100644 --- a/coxeter.c +++ b/coxeter.c @@ -144,6 +144,38 @@ int coxeter_order(semisimple_type_t type) return order; } +int coxeter_hyperplanes(semisimple_type_t type) +{ + int hyperplanes = 0; + for(int i = 0; i < type.n; i++) { + if(type.factors[i].series == 'A') // rank*(rank+1)/2 + hyperplanes += (type.factors[i].rank * (type.factors[i].rank + 1)) / 2; + else if(type.factors[i].series == 'B' || type.factors[i].series == 'C') // rank * rank + hyperplanes += type.factors[i].rank * type.factors[i].rank; + else if(type.factors[i].series == 'D') // rank * (rank - 1) + hyperplanes += type.factors[i].rank * (type.factors[i].rank - 1); + else if(type.factors[i].series == 'E') { + if(type.factors[i].rank == 6) + hyperplanes += 36; + else if(type.factors[i].rank == 7) + hyperplanes += 63; + else if(type.factors[i].rank == 8) + hyperplanes += 120; + else + ERROR(1, "A Coxeter group of type %c%d does not exist or is not implemented!\n", type.factors[i].series, type.factors[i].rank); + } else if(type.factors[i].series == 'F') { + ERROR(type.factors[i].rank != 4, "A Coxeter group of type %c%d does not exist or is not implemented!\n", type.factors[i].series, type.factors[i].rank); + hyperplanes += 24; + } else if(type.factors[i].series == 'G') { + ERROR(type.factors[i].rank != 2, "A Coxeter group of type %c%d does not exist or is not implemented!\n", type.factors[i].series, type.factors[i].rank); + hyperplanes += 6; + } else { + ERROR(1, "A Coxeter group of type %c%d does not exist or is not implemented!\n", type.factors[i].series, type.factors[i].rank); + } + } + return hyperplanes; +} + static void generate_starting_vector(int rank, gsl_matrix *schlaefli, gsl_vector *result) { gsl_matrix *schlaefliLU = gsl_matrix_alloc(rank, rank); @@ -179,7 +211,6 @@ void generate_coxeter_graph(semisimple_type_t type, int *result) queue_t queue; int current; - for(int i = 0; i < rank; i++) generators[i] = gsl_matrix_view_array(generators_data + i*rank*rank, rank, rank).matrix; for(int i = 0; i < order; i++) diff --git a/coxeter.h b/coxeter.h index 36d08c7..babe2e9 100644 --- a/coxeter.h +++ b/coxeter.h @@ -13,6 +13,7 @@ typedef struct { void generate_coxeter_graph(semisimple_type_t type, int *result); int coxeter_order(semisimple_type_t type); +int coxeter_hyperplanes(semisimple_type_t type); int coxeter_rank(semisimple_type_t type); #endif diff --git a/generate.c b/generate.c index 7679630..cf90399 100644 --- a/generate.c +++ b/generate.c @@ -52,10 +52,7 @@ int main(int argc, const char *argv[]) // print stuff - int hyperplane_count = 0; - for(int i = 0; i < order; i++) - if(graph[i].is_hyperplane_reflection) - hyperplane_count++; + int hyperplane_count = coxeter_hyperplanes(type); fprintf(stderr, "Rank: %d\t\tOrder: %d\t\tHyperplanes: %d\n", rank, order, hyperplane_count); fprintf(stderr, "\n"); diff --git a/thickenings.c b/thickenings.c index c6a0d8b..8398f21 100644 --- a/thickenings.c +++ b/thickenings.c @@ -12,6 +12,12 @@ char *alphabetize(int *word, int len, const char *alphabet, char *buffer) { + if(len == 0) { + buffer[0] = '1'; + buffer[1] = 0; + return buffer; + } + int i = 0; for(i = 0; i < len; i++) buffer[i] = alphabet[word[i]];