atlas  0.6
lietype.h
Go to the documentation of this file.
1 
5 /*
6  This is lietype.h
7 
8  Copyright (C) 2004,2005 Fokko du Cloux
9  part of the Atlas of Lie Groups and Representations
10 
11  For license information see the LICENSE file
12 */
13 
14 #ifndef LIETYPE_H /* guard against multiple inclusions */
15 #define LIETYPE_H
16 
17 
18 #include <stdexcept>
19 
20 #include "../Atlas.h"
21 
22 #include "permutations.h" // needed in the |Layout| structure
23 
24 namespace atlas {
25 
26 namespace lietype {
27 
28 // type declaration
29 struct Layout;
30 
31 
32 /******** constant declarations **********************************************/
37  const char* const typeLetters = "ABCDEFGT";
38 
74  const char* const innerClassLetters = "Ccesu";
75 
76 
77 
78 struct SimpleLieType : public std::pair<TypeLetter,size_t>
79 { // there are no additional data members
80  typedef std::pair<TypeLetter,size_t> base;
81  SimpleLieType(TypeLetter t,size_t rank) : base(t,rank) {}
82  TypeLetter type() const { return base::first; }
83  TypeLetter& type() { return base::first; }
84  size_t rank() const { return base::second; }
85  size_t& rank() { return base::second; }
86  size_t semisimple_rank() const { return type()=='T' ? 0 : rank(); }
87  int Cartan_entry(size_t i,size_t j) const;
88  int_Matrix Cartan_matrix() const;
90 };
91 
92 struct LieType : public std::vector<SimpleLieType>
93 { // there are no additional data members
94  typedef std::vector<SimpleLieType> base;
95  LieType() : base() {}
96  LieType(const base& b) : base(b) {}
97 
98  size_t rank() const;
99  size_t semisimple_rank() const;
100  int Cartan_entry(size_t i,size_t j) const;
101  int_Matrix Cartan_matrix() const;
103  int_VectorList Smith_basis(CoeffList& invf) const;
104 };
105 
106 // the follwing rather empty definition serves mainly to make |InnerClassType|
107 // a genuine member of |namespace lietype| for argument-dependent lookup
108 struct InnerClassType : public std::vector<TypeLetter>
109 { // there are no additional data members
110  typedef std::vector<TypeLetter> base;
111  InnerClassType() : base() {}
112 };
113 
114 /* the |Layout| structure collects a |LieType| and an |InnerClassType|, as
115  specified by the user. However dualizing may create Lie types with
116  non-standard node labelings (for $G_2$, $F_4$), and in such cases an
117  involution of the diagram needs to be indicated, whence the |d_perm| field.
118  This is ultimately used (only) to correctly associate a real form name
119  (recognised in standard diagram labelling) from a special representative
120  grading of the real form (only one bit set), in |output::printType|;
121  |d_perm| maps standard (Bourbaki) diagram numbers to simple root indices.
122 */
123 struct Layout
124 {
127  Permutation d_perm; // of diagram wrt usual order in |d_type|
128 
129 // constructors and destructors
130 
131 Layout() : d_type(), d_inner(), d_perm() {} // needed in atlas
132 
133  /* In the old Fokko interface, the Lie type is first provided,
134  and the inner class type is later added; defaults identity permutation */
135  Layout(const LieType& lt)
136  :d_type(lt),d_inner(),d_perm(lt.rank(),1) {}
137 
138  /* The inner class can also be added right away, permutation defaults id */
139  Layout(const LieType& lt, const InnerClassType ict)
140  :d_type(lt),d_inner(ict),d_perm(lt.rank(),1) {}
141 
142 
143 }; // |struct Layout|
144 
145 
146 
147 /******** function declarations **********************************************/
148 
149  bool checkRank(const TypeLetter&, size_t);
150 
151  // involution (permutation) matrix for possibly renumbered Dynkin diagram
153 
154  // permutation matrix for |ict| in simply connected |lt|, Bourbaki order
156  const InnerClassType& ict);
157 
159 
161 
162  Layout dual(const Layout& lo);
163 
164 }
165 
166 }
167 
168 #endif
int Cartan_entry(size_t i, size_t j) const
Definition: lietype.cpp:133
TypeLetter & type()
Definition: lietype.h:83
char TypeLetter
Definition: Atlas.h:198
Definition: lietype.h:92
InnerClassType d_inner
Definition: lietype.h:126
const char *const typeLetters
Definition: lietype.h:37
Layout(const LieType &lt, const InnerClassType ict)
Definition: lietype.h:139
Layout()
Definition: lietype.h:131
int_Matrix transpose_Cartan_matrix() const
Definition: lietype.cpp:180
std::vector< SimpleLieType > base
Definition: lietype.h:94
LieType()
Definition: lietype.h:95
Definition: lietype.h:108
std::vector< int_Vector > int_VectorList
Definition: Atlas.h:151
TypeLetter type() const
Definition: lietype.h:82
size_t & rank()
Definition: lietype.h:85
size_t semisimple_rank() const
Definition: lietype.h:86
Definition: lietype.h:123
const char *const innerClassLetters
Definition: lietype.h:74
LieType dual_type(LieType lt)
Definition: lietype.cpp:289
Layout(const LieType &lt)
Definition: lietype.h:135
bool checkRank(const TypeLetter &x, size_t l)
Definition: lietype.cpp:435
WeightInvolution involution(const Layout &lo)
Definition: lietype.cpp:463
Permutation d_perm
Definition: lietype.h:127
InnerClassType()
Definition: lietype.h:111
Layout dual(const Layout &lo)
Definition: lietype.cpp:386
LieType d_type
Definition: lietype.h:125
Definition: lietype.h:78
std::pair< TypeLetter, size_t > base
Definition: lietype.h:80
Definition: Atlas.h:38
LieType(const base &b)
Definition: lietype.h:96
SimpleLieType(TypeLetter t, size_t rank)
Definition: lietype.h:81
int_Matrix Cartan_matrix() const
Definition: lietype.cpp:170
matrix::PID_Matrix< C > Smith_basis(const matrix::PID_Matrix< C > &M, std::vector< C > &diagonal)
Definition: matreduc.cpp:386
size_t rank() const
Definition: lietype.h:84
std::vector< TypeLetter > base
Definition: lietype.h:110
std::vector< LatticeCoeff > CoeffList
Definition: Atlas.h:168