#include #include #include #include "weyl.h" static char* alphabetize(weylgroup_element_t *e, char *str) { if(e->wordlength == 0) sprintf(str, "1"); else { for(int j = 0; j < e->wordlength; j++) str[j] = e->word[j] + 'a'; str[e->wordlength] = 0; } return str; } static int apply_reflection(double *in, double *out, int rank, int reflection) { memcpy(out, in, rank*sizeof(double)); out[reflection] *= -1; if(reflection != 0) out[reflection-1] += in[reflection]; if(reflection != rank-1) out[reflection+1] += in[reflection]; } int main(int argc, char *argv[]) { semisimple_type_t type; simple_type_t simple; doublequotient_t *dq; double *vector; char buf[1000]; type.n = 1; type.factors = &simple; simple.series = 'A'; simple.rank = 3; dq = weyl_generate_bruhat(type, 0, 0); int order = weyl_order(type); int rank = weyl_rank(type); weylgroup_element_t *group = dq->group; vector = malloc(weyl_order(type)*weyl_rank(type)*sizeof(double)); for(int i = 0; i < rank; i++) { vector[i] = 1.0; } for(int i = 0; i < order; i++) { printf("%s %.2f %.2f %.2f\n", alphabetize(&group[i], buf), 1.0/4.0*(3*vector[3*i] + 2*vector[3*i+1] + 1*vector[3*i+2]), 1.0/4.0*(2*vector[3*i] + 4*vector[3*i+1] + 2*vector[3*i+2]), 1.0/4.0*(1*vector[3*i] + 2*vector[3*i+1] + 3*vector[3*i+2])); for(int j = 0; j < rank; j++) if(group[i].left[j]->wordlength > group[i].wordlength) apply_reflection(&vector[3*i], &vector[3*group[i].left[j]->index], rank, j); } weyl_destroy_bruhat(dq); free(vector); return 0; }