Ejemplo n.º 1
0
Archivo: weyl.c Proyecto: nhatcher/lie
void w_refl(entry* lambda, lie_Index wi)
{ if (type_of(grp)==SIMPGRP) simp_w_refl(lambda,wi,&grp->s);
  else if (simpgroup(grp)) simp_w_refl(lambda,wi,Liecomp(grp,0));
  else
  { lie_Index i,d,offset=0;
    for (i=0; wi>=(d=Liecomp(grp,i)->lierank); ++i) { offset+=d; wi-=d; }
    simp_w_refl(lambda+offset,wi,Liecomp(grp,i));
  }
}
Ejemplo n.º 2
0
Archivo: weyl.c Proyecto: nhatcher/lie
void Wrtaction(entry* alpha, vector* word)
{ lie_Index i; entry* w=word->compon;
  for (i=0; i<word->ncomp; ++i) if(w[i]!=0)
    { lie_Index wi=w[i]-1;
      if (type_of(grp)==SIMPGRP) simp_rt_refl(alpha,wi,&grp->s);
      else if (simpgroup(grp)) simp_rt_refl(alpha,wi,Liecomp(grp,0));
      else
      { lie_Index j,d,offset=0;
	for (j=0; wi>=(d=Liecomp(grp,j)->lierank); ++j)
          { offset+=d; wi-=d; }
	simp_rt_refl(alpha+offset,wi,Liecomp(grp,j));
      }
    }
}
Ejemplo n.º 3
0
Archivo: grpdata.c Proyecto: d4g33z/lie
matrix* Cartan(void)
{ if (type_of(grp)==SIMPGRP) return simp_Cartan(&grp->s);
  if (simpgroup(grp)) return simp_Cartan(Liecomp(grp,0));
  { _index i,j, t=0;
    matrix* cartan=mat_null(Ssrank(grp),Lierank(grp));
    for (i=0; i<grp->g.ncomp; ++i)
    { _index r=Liecomp(grp,i)->lierank;
      entry** c=simp_Cartan(Liecomp(grp,i))->elm;
      for (j=0; j<r; ++j) copyrow(c[j],&cartan->elm[t+j][t],r);
      t+=r;
    }
    return cartan;
  }
}
Ejemplo n.º 4
0
Archivo: grpdata.c Proyecto: d4g33z/lie
matrix* Posroots(object grp)
{ if (type_of(grp)==SIMPGRP) return simp_proots(&grp->s);
  if (simpgroup(grp)) return simp_proots(Liecomp(grp,0));
  { _index i,j,t1=0,t2=0;
    matrix* result=mat_null(Numproots(grp),Ssrank(grp));
    entry** m=result->elm;
    for (i=0; i<grp->g.ncomp; ++i)
    { matrix* posr=simp_proots(Liecomp(grp,i));
      _index r=Liecomp(grp,i)->lierank;
      for (j=0; j<posr->nrows; ++j) copyrow(posr->elm[j],&m[t1+j][t2],r);
      t1+=posr->nrows; t2+=r;
    }
    return result;
  }
}
Ejemplo n.º 5
0
Archivo: grpdata.c Proyecto: d4g33z/lie
vector* Exponents(object grp)
{ if (type_of(grp)==SIMPGRP)
    { simp_exponents(&grp->s); return grp->s.exponents; }
  if (simpgroup(grp))
    { simp_exponents(Liecomp(grp,0)); return Liecomp(grp,0)->exponents; }
  { _index i,t=0; vector* v=mkvector(Lierank(grp)); entry* e=v->compon;
    { for (i=0; i<grp->g.ncomp; ++i)
      { simpgrp* g=Liecomp(grp,i); _index r=g->lierank; 
	copyrow(simp_exponents(g),&e[t],r); t+=r;
      }
      for (i=0; i<grp->g.toraldim; ++i) e[t+i]=0;
    }
    return v;
  }
}
Ejemplo n.º 6
0
Archivo: grpdata.c Proyecto: d4g33z/lie
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;
  }
}
Ejemplo n.º 7
0
local poly* vdecomp_irr(entry* lambda)
{   if (type_of(grp)==SIMPGRP) return simp_vdecomp_irr(lambda,&grp->s);
    if (simpgroup(grp)) return simp_vdecomp_irr(lambda,Liecomp(grp,0));
    {   poly* result;
        lie_Index i;

        {   lie_Index td=grp->g.toraldim;
            lambda+=Ssrank(grp);
            result=mkpoly(1,td);
            copyrow(lambda,*result->elm,td);
            *result->coef=one;
        }
        for (i=grp->g.ncomp-1; i>=0; --i)
            /* traverse simple components in reverse order */
        {   simpgrp* g=Liecomp(grp,i);
            lambda-=g->lierank;
            result= Disjunct_mul_pol_pol(simp_vdecomp_irr(lambda,g),result);
        }
        return result;
    }
}