#############################################################################
##
#F                             CHEVIE library
##
#Y  Copyright 1992--1993,  Lehrstuhl D f"ur Mathematik,    RWTH Aachen,   and
#Y                         IWR   der   Universit"at    Heidelberg,   Germany.
##
##########################################################################
############################################################################ 
## 
#A {\sc V.~Ennola}, On the characters of the finite unitary groups, 
#A {\em Ann.\ Acad.\ Sci.\ Fenn.\ Ser.~A~I} {\bf 323} (1963), 1--36. 
## 
##  
#B {\sc V.~Ennola}, On the conjugacy classes of the finite unitary groups, 
#B {\em Ann.\ Acad.\ Sci.\ Fenn.\ Ser.~A~I} {\bf 313} (1962), 1--14.  
## 
lprint(`**************************************************************************`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`*                   Generic Character Table of GU_2(q)                   *`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`**************************************************************************`);

# 1) benoetigte parameter

uU:='uU':vV:='vV':kK:='kK':lL:='lL':GEWY1:='GEWY1':GEWZ2:='GEWZ2':q:='q':


# 2) die charakterwerte

`GU2`:=array(-2..4,-1..5,[

[`GU_2(q)`,`A1302`,q*(q+1)^2*(q-1),4,4,4,5],

[
[` `],
[` `],
[` `,[1,0],[`A_1`,[1,1]]],
[` `,[1,1],[`A_1`,[2  ]]],
[` `,[2,0],[`A_0`,[1  ]]],
[` `,[3,0],[`A_0`,[1  ]]]
],

[` `,
                   1,
                   1,
                   (q-1)*(q+1),
                   q*(q-1),
                   q*(q+1)],

[[` `,[1,0],[`A_1`,[2  ]]],
                   1,
                   GEWY1^(2*uU*kK),
                   GEWY1^(2*uU*kK),
                   GEWY1^(uU*kK+uU*lL),
                   GEWY1^(-uU*kK)],

[[` `,[1,1],[`A_1`,[1,1]]],
                   q,
                   q*GEWY1^(2*uU*kK),
                   0,
                   -GEWY1^(uU*kK+uU*lL),
                   GEWY1^(-uU*kK)],

[[` `,[2,0],[`A_0`,[1  ]]],
                   q-1,
                   (q-1)*GEWY1^(uU*kK+vV*kK),
                   -GEWY1^(uU*kK+vV*kK),
                   -GEWY1^(uU*kK+vV*lL)-GEWY1^(uU*lL+vV*kK),
                   0],

[[` `,[3,0],[`A_0`,[1  ]]],
                   q+1,
                   (q+1)*GEWY1^(uU*kK),
                   GEWY1^(uU*kK),
                   0,
                   GEWZ2^(uU*kK)+GEWZ2^(-uU*kK*q)]

]):

Klassen.`GU2`.Parameter := array(-1..4,[
[[],[]],
[[],[]],
[[kK=1..q+1],[]],
[[kK=1..q+1],[]],
[[kK=1..q+1, lL=1..q+1],[[kK,q+1],[lL,q+1],[kK-lL,q+1]]],
[[kK=1..q^2-1],[[kK,q-1]]]
]):

Char.`GU2`.Parameter := array(-2..4,[
[[],[]],
[[],[]],
[[],[]],
[[uU=1..q+1],[]],
[[uU=1..q+1],[]],
[[uU=1..q+1, vV=1..q+1],[[uU,q+1],[vV,q+1],[uU-vV,q+1]]],
[[uU=1..q^2-1],[[uU,q-1]]]
]):

# 3) summationsprozeduren

# a) klassensummen


Klassen.A1302.Summe.1:=proc(tt)
   nesum(tt,kK=0..q);
end:

Klassen.A1302.Summe.2:=proc(tt)
   nesum(tt,kK=0..q);
end:

Klassen.A1302.Summe.3:=proc(tt)
   local s1, s2;
   s1:=eesubs(lL=kK,tt);
   s2:=nesum(tt, lL=0..q);
   s1:=linkomb(1,s2,-1,s1);
   s2:=nesum(s1, kK=0..q);
   linkomb(1/2,s2);
end:

Klassen.A1302.Summe.4:=proc(tt)
   local s1, s2, rh;
   s1:=eesubs(kK=(q-1)*rh, tt);
   s1:=nesum(s1, rh=0..q);
   s2:=nesum(tt, kK=0..q^2-2);
   linkomb(1/2,s2,-1/2,s1);
end:



# b) charaktersummen


Char.A1302.Summe.1:=proc(tt)
   nesum(tt,uU=0..q);
end:
 
Char.A1302.Summe.2:=proc(tt)
   nesum(tt,uU=0..q);
end:
 
Char.A1302.Summe.3:=proc(tt)
   local s1, s2;
   s1:=eesubs(vV=uU,tt);
   s2:=nesum(tt, vV=0..q);
   s1:=linkomb(1,s2,-1,s1);
   s2:=nesum(s1, uU=0..q);
   linkomb(1/2,s2);
end:
 
Char.A1302.Summe.4:=proc(tt)
   local s1, s2, rh;
   s1:=eesubs(uU=(q-1)*rh, tt);
   s1:=nesum(s1, rh=0..q);
   s2:=nesum(tt, uU=0..q^2-2);
   linkomb(1/2,s2,-1/2,s1);
end:

# 4) konvertierungen

parameterA1302:=proc(a,char,class)
   subs(kK=kK.class,lL=lL.class,uU=uU.char,vV=vV.char,a);
end:


setCongruenceA1302:=proc()
  NULL;
end:
unsetCongruenceA1302:=proc()
  NULL;
end:

# 5) Informationen: 
Information.`A1302`:=TEXT( 
`- Information about the generic character table of $GU_2(q)$.`, 
``, 
`- CHEVIE-name of the table: ``GU2```, 
``, 
`- The table was first computed in:`, 
`  {\\sc V.~Ennola}, On the characters of the finite unitary groups,`,
`  {\\em Ann.\\ Acad.\\ Sci.\\ Fenn.\\ Ser.~A~I} {\\bf 323} (1963), 1--36.`,
``, 
``, 
`- See also:`, 
`  {\\sc V.~Ennola}, On the conjugacy classes of the finite unitary groups,`,
`  {\\em Ann.\\ Acad.\\ Sci.\\ Fenn.\\ Ser.~A~I} {\\bf 313} (1962), 1--14.`,
``
): 
g:=GU2:
print(`g := GU2`);
