Xped
Loading...
Searching...
No Matches
Xped::Sym::SUN< N_, Kind, Scalar_ > Class Template Reference

#include <SUN.hpp>

Inheritance diagram for Xped::Sym::SUN< N_, Kind, Scalar_ >:
Collaboration diagram for Xped::Sym::SUN< N_, Kind, Scalar_ >:

Public Types

typedef Scalar_ Scalar
 
typedef SymBase< SUN< N, Kind, Scalar > > Base
 
typedef clebsch::weight qType
 
- Public Types inherited from Xped::Sym::SymBase< Derived >
typedef SymTraits< Derived >::qType qType
 
typedef SymTraits< Derived >::Scalar Scalar
 

Public Member Functions

 SUN ()=default
 
std::size_t multiplicity (const qType &q1, const qType &q2, const qType &q3)
 
template<typename PlainLib >
PlainLib::template TType< Scalar_, 4 > CGC (const qType &q1, const qType &q2, const qType &q3, mpi::XpedWorld &world)
 

Static Public Member Functions

static constexpr bool IS_CHARGE_SU2 ()
 
static constexpr bool IS_SPIN_SU2 ()
 
static constexpr bool IS_SPIN_U1 ()
 
static constexpr bool NO_SPIN_SYM ()
 
static constexpr bool NO_CHARGE_SYM ()
 
static std::string name ()
 
static constexpr std::array< KIND, Nqkind ()
 
static constexpr qType qvacuum ()
 
static qType conj (const qType &q)
 
static int degeneracy (const qType &q)
 
static qType random_q ()
 
static std::vector< qTypebasis_combine (const qType &ql, const qType &qr)
 
static bool triangle (const qType &q1, const qType &q2, const qType &q3)
 
static Scalar coeff_dot (const qType &q1)
 
static Scalar coeff_FS (const qType &q1)
 
template<typename PlainLib >
static PlainLib::template TType< Scalar_, 2 > one_j_tensor (const qType &q1, mpi::XpedWorld &world=mpi::getUniverse())
 
static Scalar coeff_rightOrtho (const qType &q1, const qType &q2)
 
static Scalar coeff_3j (const qType &q1, const qType &q2, const qType &q3, int q1_z, int q2_z, int q3_z)
 
static Scalar coeff_turn (const qType &ql, const qType &qr, const qType &qf)
 
template<typename PlainLib >
static PlainLib::template TType< Scalar_, 3 > CGC (const qType &q1, const qType &q2, const qType &q3, const std::size_t, mpi::XpedWorld &world=mpi::getUniverse())
 
static Scalar coeff_6j (const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
 
static Scalar coeff_9j (const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6, const qType &q7, const qType &q8, const qType &q9)
 
static Scalar coeff_recouple (const qType &q1, const qType &q2, const qType &q3, const qType &Q, const qType &Q12, const qType &Q23)
 
static Scalar coeff_swap (const qType &ql, const qType &qr, const qType &qf)
 
- Static Public Member Functions inherited from Xped::Sym::SymBase< Derived >
static std::vector< qTypereduceSilent (const qType &ql, const qType &qr)
 
static std::vector< qTypereduceSilent (const std::vector< qType > &ql, const qType &qr)
 
static std::set< qTypereduceSilent (const std::vector< qType > &ql, const std::vector< qType > &qr)
 
static std::vector< qTypereduceSilent (const qType &ql, const qType &qm, const qType &qr)
 
static std::set< qTypereduceSilent (const std::set< qType > &ql, const std::vector< qType > &qr)
 
static std::set< qTypereduceSilent (const std::unordered_set< qType > &ql, const std::vector< qType > &qr)
 
static Scalar coeff_FS (const qType &q)
 
static Scalar coeff_turn (const qType &ql, const qType &qr, const qType &qf)
 
template<std::size_t M>
static bool compare (const std::array< qType, M > &q1, const std::array< qType, M > &q2)
 
static bool compare (const qType &q1, const qType &q2)
 
static bool triangle (const qType &q1, const qType &q2, const qType &q3)
 

Static Public Attributes

static constexpr std::size_t N = N_
 
static constexpr std::size_t Nq = 1
 
static constexpr std::array< bool, NqHAS_MULTIPLICITIES = {true}
 
static constexpr std::array< bool, NqNON_ABELIAN = {true}
 
static constexpr std::array< bool, NqABELIAN = {false}
 
static constexpr std::array< bool, NqIS_TRIVIAL = {false}
 
static constexpr std::array< bool, NqIS_MODULAR = {false}
 
static constexpr std::array< bool, NqIS_FERMIONIC = {(Kind::name == KIND::FT)}
 
static constexpr std::array< bool, NqIS_BOSONIC = {(Kind::name == KIND::T)}
 
static constexpr std::array< bool, NqIS_SPIN = {(Kind::name == KIND::S)}
 
static constexpr std::array< int, NqMOD_N = {1}
 
static constexpr bool ANY_HAS_MULTIPLICITIES = HAS_MULTIPLICITIES[0]
 
static constexpr bool ANY_NON_ABELIAN = NON_ABELIAN[0]
 
static constexpr bool ANY_ABELIAN = ABELIAN[0]
 
static constexpr bool ANY_IS_TRIVIAL = IS_TRIVIAL[0]
 
static constexpr bool ANY_IS_MODULAR = IS_MODULAR[0]
 
static constexpr bool ANY_IS_FERMIONIC = IS_FERMIONIC[0]
 
static constexpr bool ANY_IS_BOSONIC = IS_BOSONIC[0]
 
static constexpr bool ANY_IS_SPIN = IS_SPIN[0]
 
static constexpr bool ALL_HAS_MULTIPLICITIES = HAS_MULTIPLICITIES[0]
 
static constexpr bool ALL_NON_ABELIAN = NON_ABELIAN[0]
 
static constexpr bool ALL_ABELIAN = ABELIAN[0]
 
static constexpr bool ALL_IS_TRIVIAL = IS_TRIVIAL[0]
 
static constexpr bool ALL_IS_MODULAR = IS_MODULAR[0]
 
static constexpr bool ALL_IS_FERMIONIC = IS_FERMIONIC[0]
 
static constexpr bool ALL_IS_BOSONIC = IS_BOSONIC[0]
 
static constexpr bool ALL_IS_SPIN = IS_SPIN[0]
 

Detailed Description

template<std::size_t N_, typename Kind, typename Scalar_ = double>
class Xped::Sym::SUN< N_, Kind, Scalar_ >

Class for handling a general SU(N) symmetry of a Hamiltonian without explicitly store the Clebsch-Gordon coefficients but with computing \((3n)j\)-symbols.

\describe_Scalar

Note
This uses an implementation of Arne Alex (https://homepages.physik.uni-muenchen.de/~vondelft/Papers/ClebschGordan/ClebschGordan.cpp)

Member Typedef Documentation

◆ Base

template<std::size_t N_, typename Kind , typename Scalar_ = double>
typedef SymBase<SUN<N, Kind, Scalar> > Xped::Sym::SUN< N_, Kind, Scalar_ >::Base

◆ qType

template<std::size_t N_, typename Kind , typename Scalar_ = double>
typedef clebsch::weight Xped::Sym::SUN< N_, Kind, Scalar_ >::qType

◆ Scalar

template<std::size_t N_, typename Kind , typename Scalar_ = double>
typedef Scalar_ Xped::Sym::SUN< N_, Kind, Scalar_ >::Scalar

Constructor & Destructor Documentation

◆ SUN()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
Xped::Sym::SUN< N_, Kind, Scalar_ >::SUN ( )
default

Member Function Documentation

◆ basis_combine()

template<std::size_t N, typename Kind , typename Scalar_ >
std::vector< typename SUN< N, Kind, Scalar_ >::qType > Xped::Sym::SUN< N, Kind, Scalar_ >::basis_combine ( const qType ql,
const qType qr 
)
static

Calculate the irreps of the tensor product of ql and qr.

◆ CGC() [1/2]

template<std::size_t N, typename Kind , typename Scalar_ >
template<typename PlainLib >
PlainLib::template TType< Scalar_, 3 > Xped::Sym::SUN< N, Kind, Scalar_ >::CGC ( const qType q1,
const qType q2,
const qType q3,
const std::size_t  multiplicity,
mpi::XpedWorld world = mpi::getUniverse() 
)
static

◆ CGC() [2/2]

template<std::size_t N_, typename Kind , typename Scalar_ = double>
template<typename PlainLib >
PlainLib::template TType< Scalar_, 4 > Xped::Sym::SUN< N_, Kind, Scalar_ >::CGC ( const qType q1,
const qType q2,
const qType q3,
mpi::XpedWorld world 
)

◆ coeff_3j()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_3j ( const qType q1,
const qType q2,
const qType q3,
int  q1_z,
int  q2_z,
int  q3_z 
)
static

◆ coeff_6j()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_6j ( const qType q1,
const qType q2,
const qType q3,
const qType q4,
const qType q5,
const qType q6 
)
static
Here is the caller graph for this function:

◆ coeff_9j()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_9j ( const qType q1,
const qType q2,
const qType q3,
const qType q4,
const qType q5,
const qType q6,
const qType q7,
const qType q8,
const qType q9 
)
static

◆ coeff_dot()

template<std::size_t N, typename Kind , typename Scalar_ >
Scalar_ Xped::Sym::SUN< N, Kind, Scalar_ >::coeff_dot ( const qType q1)
static

Various coeffecients, all resulting from contractions or traces of the Clebsch-Gordon coefficients.

◆ coeff_FS()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_FS ( const qType q1)
static

◆ coeff_recouple()

template<std::size_t N, typename Kind , typename Scalar_ >
PlainInterface::TType< Scalar, 4 > Xped::Sym::SUN< N, Kind, Scalar_ >::coeff_recouple ( const qType q1,
const qType q2,
const qType q3,
const qType Q,
const qType Q12,
const qType Q23 
)
inlinestatic
Here is the call graph for this function:

◆ coeff_rightOrtho()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_rightOrtho ( const qType q1,
const qType q2 
)
inlinestatic

◆ coeff_swap()

template<std::size_t N, typename Kind , typename Scalar_ >
PlainInterface::TType< Scalar, 2 > Xped::Sym::SUN< N, Kind, Scalar_ >::coeff_swap ( const qType ql,
const qType qr,
const qType qf 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ coeff_turn()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static Scalar Xped::Sym::SUN< N_, Kind, Scalar_ >::coeff_turn ( const qType ql,
const qType qr,
const qType qf 
)
inlinestatic
Here is the call graph for this function:

◆ conj()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static qType Xped::Sym::SUN< N_, Kind, Scalar_ >::conj ( const qType q)
inlinestatic

◆ degeneracy()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static int Xped::Sym::SUN< N_, Kind, Scalar_ >::degeneracy ( const qType q)
inlinestatic

◆ IS_CHARGE_SU2()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_CHARGE_SU2 ( )
inlinestaticconstexpr

◆ IS_SPIN_SU2()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_SPIN_SU2 ( )
inlinestaticconstexpr

◆ IS_SPIN_U1()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_SPIN_U1 ( )
inlinestaticconstexpr

◆ kind()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr std::array< KIND, Nq > Xped::Sym::SUN< N_, Kind, Scalar_ >::kind ( )
inlinestaticconstexpr

◆ multiplicity()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
std::size_t Xped::Sym::SUN< N_, Kind, Scalar_ >::multiplicity ( const qType q1,
const qType q2,
const qType q3 
)
inline

◆ name()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static std::string Xped::Sym::SUN< N_, Kind, Scalar_ >::name ( )
inlinestatic

◆ NO_CHARGE_SYM()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::NO_CHARGE_SYM ( )
inlinestaticconstexpr

◆ NO_SPIN_SYM()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::NO_SPIN_SYM ( )
inlinestaticconstexpr

◆ one_j_tensor()

template<std::size_t N, typename Kind , typename Scalar_ >
template<typename PlainLib >
PlainLib::template TType< Scalar_, 2 > Xped::Sym::SUN< N, Kind, Scalar_ >::one_j_tensor ( const qType q1,
mpi::XpedWorld world = mpi::getUniverse() 
)
static

◆ qvacuum()

template<std::size_t N_, typename Kind , typename Scalar_ = double>
static constexpr qType Xped::Sym::SUN< N_, Kind, Scalar_ >::qvacuum ( )
inlinestaticconstexpr

◆ random_q()

template<std::size_t N, typename Kind , typename Scalar_ >
SUN< N, Kind, Scalar_ >::qType Xped::Sym::SUN< N, Kind, Scalar_ >::random_q
static
Here is the call graph for this function:

◆ triangle()

template<std::size_t N, typename Kind , typename Scalar_ >
bool Xped::Sym::SUN< N, Kind, Scalar_ >::triangle ( const qType q1,
const qType q2,
const qType q3 
)
static
Here is the caller graph for this function:

Member Data Documentation

◆ ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::ABELIAN = {false}
staticconstexpr

◆ ALL_ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_ABELIAN = ABELIAN[0]
staticconstexpr

◆ ALL_HAS_MULTIPLICITIES

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_HAS_MULTIPLICITIES = HAS_MULTIPLICITIES[0]
staticconstexpr

◆ ALL_IS_BOSONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_IS_BOSONIC = IS_BOSONIC[0]
staticconstexpr

◆ ALL_IS_FERMIONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_IS_FERMIONIC = IS_FERMIONIC[0]
staticconstexpr

◆ ALL_IS_MODULAR

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_IS_MODULAR = IS_MODULAR[0]
staticconstexpr

◆ ALL_IS_SPIN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_IS_SPIN = IS_SPIN[0]
staticconstexpr

◆ ALL_IS_TRIVIAL

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_IS_TRIVIAL = IS_TRIVIAL[0]
staticconstexpr

◆ ALL_NON_ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ALL_NON_ABELIAN = NON_ABELIAN[0]
staticconstexpr

◆ ANY_ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_ABELIAN = ABELIAN[0]
staticconstexpr

◆ ANY_HAS_MULTIPLICITIES

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_HAS_MULTIPLICITIES = HAS_MULTIPLICITIES[0]
staticconstexpr

◆ ANY_IS_BOSONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_IS_BOSONIC = IS_BOSONIC[0]
staticconstexpr

◆ ANY_IS_FERMIONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_IS_FERMIONIC = IS_FERMIONIC[0]
staticconstexpr

◆ ANY_IS_MODULAR

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_IS_MODULAR = IS_MODULAR[0]
staticconstexpr

◆ ANY_IS_SPIN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_IS_SPIN = IS_SPIN[0]
staticconstexpr

◆ ANY_IS_TRIVIAL

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_IS_TRIVIAL = IS_TRIVIAL[0]
staticconstexpr

◆ ANY_NON_ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr bool Xped::Sym::SUN< N_, Kind, Scalar_ >::ANY_NON_ABELIAN = NON_ABELIAN[0]
staticconstexpr

◆ HAS_MULTIPLICITIES

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::HAS_MULTIPLICITIES = {true}
staticconstexpr

◆ IS_BOSONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_BOSONIC = {(Kind::name == KIND::T)}
staticconstexpr

◆ IS_FERMIONIC

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_FERMIONIC = {(Kind::name == KIND::FT)}
staticconstexpr

◆ IS_MODULAR

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_MODULAR = {false}
staticconstexpr

◆ IS_SPIN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_SPIN = {(Kind::name == KIND::S)}
staticconstexpr

◆ IS_TRIVIAL

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::IS_TRIVIAL = {false}
staticconstexpr

◆ MOD_N

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<int, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::MOD_N = {1}
staticconstexpr

◆ N

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::size_t Xped::Sym::SUN< N_, Kind, Scalar_ >::N = N_
staticconstexpr

◆ NON_ABELIAN

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::array<bool, Nq> Xped::Sym::SUN< N_, Kind, Scalar_ >::NON_ABELIAN = {true}
staticconstexpr

◆ Nq

template<std::size_t N_, typename Kind , typename Scalar_ = double>
constexpr std::size_t Xped::Sym::SUN< N_, Kind, Scalar_ >::Nq = 1
staticconstexpr

The documentation for this class was generated from the following files: