introduced permutation group algebra class
This commit is contained in:
parent
387491204c
commit
60fd23b37c
@ -95,7 +95,7 @@ return q;
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
NRPerm<T> NRPerm<T>::operator+(const NRPerm<T> &q) const
|
NRPerm<T> NRPerm<T>::operator&(const NRPerm<T> &q) const
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if(!this->is_valid() || !q.is_valid()) laerror("concatenation of invalid permutation");
|
if(!this->is_valid() || !q.is_valid()) laerror("concatenation of invalid permutation");
|
||||||
@ -108,7 +108,7 @@ return r;
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
NRPerm<T> NRPerm<T>::operator-(const NRPerm<T> &q) const
|
NRPerm<T> NRPerm<T>::operator|(const NRPerm<T> &q) const
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if(!this->is_valid() || !q.is_valid()) laerror("concatenation of invalid permutation");
|
if(!this->is_valid() || !q.is_valid()) laerror("concatenation of invalid permutation");
|
||||||
@ -1940,9 +1940,16 @@ template T Sn_character(const Partition<T> &irrep, const Partition<T> &cclass);
|
|||||||
template std::ostream & operator<<(std::ostream &s, const Sn_characters<T> &x); \
|
template std::ostream & operator<<(std::ostream &s, const Sn_characters<T> &x); \
|
||||||
|
|
||||||
|
|
||||||
|
#define INSTANTIZE2(T,R) \
|
||||||
|
template class WeightPermutation<T,R>; \
|
||||||
|
template class PermutationAlgebra<T,R>; \
|
||||||
|
|
||||||
|
|
||||||
INSTANTIZE(int)
|
INSTANTIZE(int)
|
||||||
INSTANTIZE(unsigned int)
|
INSTANTIZE(unsigned int)
|
||||||
|
|
||||||
|
INSTANTIZE2(int,double)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ template <typename T> class CyclePerm;
|
|||||||
template <typename T> class Partition;
|
template <typename T> class Partition;
|
||||||
template <typename T> class CompressedPartition;
|
template <typename T> class CompressedPartition;
|
||||||
template <typename T> class YoungTableaux;
|
template <typename T> class YoungTableaux;
|
||||||
|
template <typename T, typename R> class WeightPermutation;
|
||||||
|
template <typename T, typename R> class PermutationAlgebra;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class NRPerm : public NRVec_from1<T> {
|
class NRPerm : public NRVec_from1<T> {
|
||||||
@ -56,8 +58,8 @@ public:
|
|||||||
bool is_identity() const;
|
bool is_identity() const;
|
||||||
NRPerm inverse() const;
|
NRPerm inverse() const;
|
||||||
NRPerm reverse() const; //backward order
|
NRPerm reverse() const; //backward order
|
||||||
NRPerm operator+(const NRPerm &rhs) const; //concatenate the permutations this,rhs, renumbering rhs (not commutative)
|
NRPerm operator&(const NRPerm &rhs) const; //concatenate the permutations this,rhs, renumbering rhs (not commutative)
|
||||||
NRPerm operator-(const NRPerm &rhs) const; //concatenate the permutations rhs,this, renumbering rhs (not commutative)
|
NRPerm operator|(const NRPerm &rhs) const; //concatenate the permutations rhs,this, renumbering rhs (not commutative)
|
||||||
NRPerm operator*(const NRPerm &q) const; //q is rhs and applied first, this applied second
|
NRPerm operator*(const NRPerm &q) const; //q is rhs and applied first, this applied second
|
||||||
NRPerm operator*(const CyclePerm<T> &r) const;
|
NRPerm operator*(const CyclePerm<T> &r) const;
|
||||||
NRPerm conjugate_by(const NRPerm &q) const; //q^-1 p q
|
NRPerm conjugate_by(const NRPerm &q) const; //q^-1 p q
|
||||||
@ -76,6 +78,33 @@ public:
|
|||||||
NRPerm pow(const int n) const {return power(*this,n);};
|
NRPerm pow(const int n) const {return power(*this,n);};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T, typename R>
|
||||||
|
class WeightPermutation {
|
||||||
|
public:
|
||||||
|
R weight;
|
||||||
|
NRPerm<T> perm;
|
||||||
|
|
||||||
|
WeightPermutation() : weight(0) {};
|
||||||
|
WeightPermutation(const R w, const NRPerm<T> &p) : weight(w), perm(p) {};
|
||||||
|
WeightPermutation(const NRPerm<T> &p) : perm(p) {weight= p.parity();};
|
||||||
|
void copyonwrite() {perm.copyonwrite();};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T, typename R>
|
||||||
|
class PermutationAlgebra : public NRVec<WeightPermutation<T,R> >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PermutationAlgebra() {};
|
||||||
|
PermutationAlgebra(const YoungTableaux<T> &y);// Young antisymmetrizer TODO@@@
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//TODO@@@ iostream for WeightPermutation and PermutationAlgebra
|
||||||
|
|
||||||
|
//TODO@@@ permutationalgebra for Kucharski style antisymmetrizers
|
||||||
|
|
||||||
|
|
||||||
extern PERM_RANK_TYPE factorial(const int n);
|
extern PERM_RANK_TYPE factorial(const int n);
|
||||||
extern PERM_RANK_TYPE binom(int n, int k);
|
extern PERM_RANK_TYPE binom(int n, int k);
|
||||||
extern PERM_RANK_TYPE longpow(PERM_RANK_TYPE x, int i);
|
extern PERM_RANK_TYPE longpow(PERM_RANK_TYPE x, int i);
|
||||||
|
Loading…
Reference in New Issue
Block a user