Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

/home/r0/dav/atlas.dir/atlas3/sources/gkmod/bruhat.h

Go to the documentation of this file.
00001 /*!
00002 \file
00003 \brief Class definition and function declarations for the class BruhatOrder.
00004 */
00005 
00006 /*
00007   This is bruhat.h
00008 
00009   Copyright (C) 2004,2005 Fokko du Cloux
00010   part of the Atlas of Reductive Lie Groups
00011 
00012   See file main.cpp for full copyright notice
00013 */
00014 
00015 #ifndef BRUHAT_H  /* guard against multiple inclusions */
00016 #define BRUHAT_H
00017 
00018 #include "bruhat_fwd.h"
00019 
00020 #include "poset.h"
00021 
00022 namespace atlas {
00023 
00024 /******** type declarations *************************************************/
00025 
00026 /******** function declarations *********************************************/
00027 
00028 /******** type definitions **************************************************/
00029 
00030 namespace bruhat {
00031 
00032 /*!\brief
00033   Intended to represent the Bruhat order on K orbits on G/B, or
00034   on a block of representations.
00035 
00036   [Not seriously used in the present code; I'm not sure whether it is
00037   instantiated.  The classes KGB and Block have manipulators fillBruhat
00038   that would create BruhatOrder classes, but they seem not to be called.
00039   DV 7/21/06]
00040 
00041   [In fact the kgb::KGB and blocks::Block classes do contain members of type
00042   (pointer to) BruhatOrder, and methods fillBruhat that will create instances
00043   of BruhatOrder accessible from those classes, but these methods are never
00044   called. MvL 8 Nov 2006]
00045 
00046   [Now instantiated by the new commands blockorder and kgborder.]
00047 */
00048 class BruhatOrder {
00049 
00050  private:
00051   /*!
00052 \brief Hasse diagram for a Bruhat order.
00053 
00054 Entry \#j lists the numbers of the immediate predecessors of element
00055   \#j in the order.
00056   */
00057   std::vector<set::SetEltList> d_hasse; // probably sparse; avoid |BitMap|s
00058   /*!
00059 \brief Poset relation.
00060 
00061 It is assumed that element \#i can precede element \#j in the poset
00062 only if i < j.
00063   */
00064   poset::Poset d_poset;
00065 
00066  public:
00067 
00068 // constructors and destructors
00069   explicit BruhatOrder(const std::vector<set::SetEltList>& Hasse_diagram)
00070     : d_hasse(Hasse_diagram), d_poset(0) {}
00071 
00072 
00073 // accessors
00074 
00075   size_t size() const { return d_hasse.size(); }
00076 
00077   //!\brief Returns row |x| of the Hasse diagram for the order.
00078 
00079   const set::SetEltList& hasse(size_t x) const {
00080     return d_hasse[x];
00081   }
00082 
00083   /*!
00084 \brief Returns the number of comparable pairs in the order.
00085   */
00086   unsigned long n_comparable() const {
00087     return poset::n_comparable_from_Hasse(d_hasse);
00088   }
00089 
00090   // manipulators
00091   /*!
00092 \brief Returns the full poset relation.
00093    */
00094   const poset::Poset& poset() {
00095     fillPoset(); return d_poset;
00096   }
00097 
00098   private:
00099   void fillPoset();
00100 
00101 }; // class BruhatOrder
00102 
00103 } // namespace bruhat
00104 
00105 } // namespace atlas
00106 
00107 #endif

Generated on Wed Mar 26 16:49:33 2008 for atlas by  doxygen 1.3.9.1