matrix* Weyl_root_orbit(entry* v) { lie_Index i,j,r=Lierank(grp),s=Ssrank(grp); entry* x=mkintarray(r); matrix* orbit, *result; entry** m; lie_Index dc=Detcartan(); mulvecmatelm(v,Cartan()->elm,x,s,r); orbit=Weyl_orbit(x,NULL); result=mkmatrix(orbit->nrows,s); m=result->elm; mulmatmatelm(orbit->elm,Icartan()->elm,m,orbit->nrows,s,s); freemem(orbit); for (i=0; i<result->nrows; ++i) for (j=0; j<s; ++j) m[i][j]/=dc; return result; }
matrix* Icartan(void) { if (simpgroup(grp)) return simp_icart(Liecomp(grp,0)); { matrix* result=mat_null(Lierank(grp),Ssrank(grp)); entry** m=result->elm; _index k,t=0; entry det=Detcartan(); /* product of determinants of simple factors */ for (k=0; k<grp->g.ncomp; ++k) { simpgrp* g=Liecomp(grp,k); _index i,j,r=g->lierank; entry** a=simp_icart(g)->elm; entry f=det/simp_detcart(g); /* multiplication factor */ for (i=0; i<r; ++i) for (j=0; j<r; ++j) m[t+i][t+j]=f*a[i][j]; t+=r; } return result; } }