continuing on permutations - implemented Sn characters

This commit is contained in:
2021-06-04 15:21:35 +02:00
parent 40fe368c31
commit 2a6e79520e
7 changed files with 465 additions and 28 deletions

View File

@@ -137,7 +137,7 @@ public:
bool is_valid() const {return this->size() == this->sum();}
explicit CompressedPartition(const Partition<T> &rhs) : NRVec_from1<T>(rhs.size()) {this->clear(); for(int i=1; i<=rhs.size(); ++i) if(!rhs[i]) break; else (*this)[rhs[i]]++; }
PERM_RANK_TYPE Sn_class_size() const;
int parity() const; //of a permutation with given cycle lengths
};
@@ -158,7 +158,7 @@ public:
PERM_RANK_TYPE Sn_irrep_dim() const;
PERM_RANK_TYPE Un_irrep_dim(const int n) const;
PERM_RANK_TYPE generate_all(void (*callback)(const Partition<T>&), int nparts=0); //nparts <0 means at most to -nparts
int parity() const; //of a permutation with given cycle lengths
};
@@ -173,10 +173,12 @@ public:
int nrows() const {return this->size();}
int ncols() const {return (*this)[1].size();}
bool is_standard() const; //is it filled in standard way (possibly with repeated numbers)
int sum() const; //get back sum of the partition
NRVec_from1<T> yamanouchi() const; //@@@yamanouchi symbol
T sum() const; //get back sum of the partition
T max() const; //get back highest number filled in
NRVec_from1<T> yamanouchi() const; //yamanouchi symbol
T character_contribution(int ncyc=0) const; //contribution of filled tableaux to Sn character
//@@@ ??>young operator as a linear comb of permutations - maybe a class for itself, i.e. element of the Sn group algebra? or maybe as a vector with index being the rank of the permutation(n! length) or as a sparsemat thereof or maybe a list???
//@@@???action of group algebra elements on vectors and matrices
};
template <typename T>
@@ -185,9 +187,33 @@ std::ostream & operator<<(std::ostream &s, const YoungTableaux<T> &x);
extern PERM_RANK_TYPE partitions(int n, int k= -1); //enumerate partitions to k parts; k== -1 for total # of partitions
template <typename T>
extern T Sn_character(const Partition<T> &irrep, const Partition<T> &cclass);
template <typename T>
inline T Sn_character(const CompressedPartition<T> &irrep, const CompressedPartition<T> &cclass)
{
return Sn_character(Partition<T>(irrep),Partition<T>(cclass));
}
//Sn character table
template <typename T>
class Sn_characters {
public:
T n;
NRVec_from1<CompressedPartition<T> > classes;
NRVec_from1<CompressedPartition<T> > irreps; //can be in different order than classes
NRVec_from1<PERM_RANK_TYPE> classsizes;
NRMat_from1<T> chi; //characters
Sn_characters(const int n0); //compute the table
bool is_valid() const; //check internal consistency
};
template <typename T>
extern std::ostream & operator<<(std::ostream &s, const Sn_characters<T> &c);
//@@@Sn character table computation from young - young frame filling - routine for one character of one irrep and another for generation of the whole group table (maybe class for a group table too)
//
}//namespace
#endif