VMPS++
Loading...
Searching...
No Matches
U0.h
Go to the documentation of this file.
1#ifndef U0_H_
2#define U0_H_
3
5#include <cstddef>
7
8#include "DmrgTypedefs.h"
9//include "symmetry/qarray.h"
10
12const std::array<qarray<0>,1> qloc1dummy {qarray<0>{}};
13const std::array<qarray<0>,2> qloc2dummy {qarray<0>{}, qarray<0>{}};
14const std::array<qarray<0>,3> qloc3dummy {qarray<0>{}, qarray<0>{}, qarray<0>{}};
15const std::array<qarray<0>,4> qloc4dummy {qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}};
16const std::array<qarray<0>,8> qloc8dummy {qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}, qarray<0>{}};
17const std::array<string,0> labeldummy{};
18
19namespace Sym{
20
27 class U0
28 {
29 public:
31
32 U0() {};
33
34 static std::string name() { return "noSymmetry"; }
35
36 static constexpr bool HAS_CGC = false;
37 static constexpr std::size_t Nq=0;
38 static constexpr bool NON_ABELIAN = false;
39 static constexpr bool ABELIAN = true;
40 static constexpr bool IS_TRIVIAL = true;
41 static constexpr bool IS_MODULAR = false;
42 static constexpr int MOD_N = 0;
43
44 static constexpr bool IS_CHARGE_SU2() { return false; }
45 static constexpr bool IS_SPIN_SU2() { return false; }
46
47 static constexpr bool IS_SPIN_U1() { return false; }
48
49 static constexpr bool NO_SPIN_SYM() { return true; }
50 static constexpr bool NO_CHARGE_SYM() { return true; }
51
52 inline static constexpr std::array<KIND,Nq> kind() { return {}; }
53 inline static constexpr std::array<int,Nq> mod() { return {}; }
54
55 inline static constexpr qType qvacuum() {return {};}
56 inline static constexpr std::array<qType,1> lowest_qs() { return std::array<qType,1> {{ qarray<0>(std::array<int,0>{{}}) }}; }
57
58 inline static qType flip( const qType& q ) { return {}; }
59 inline static int degeneracy( const qType& q ) { return 1; }
60
61 inline static int spinorFactor() { return +1; }
62
63 inline static std::vector<qType> reduceSilent( const qType& ql, const qType& qr) { return {{}}; }
64 inline static std::vector<qType> reduceSilent( const qType& ql, const qType& qm, const qType& qr) { return {{}}; }
65 inline static std::vector<qType> reduceSilent( const std::vector<qType>& ql, const qType& qr) { return {{}}; }
66 inline static std::vector<qType> reduceSilent( const std::vector<qType>& ql, const std::vector<qType>& qr, bool UNIQUE = false) { return {{}}; }
67
68 inline static vector<tuple<qarray<0>,size_t,qarray<0>,size_t,qarray<0> > > tensorProd ( const std::vector<qType>& ql, const std::vector<qType>& qr )
69 {
70 vector<tuple<qarray<0>,size_t,qarray<0>,size_t,qarray<0> > > out;
71 for (std::size_t q=0; q<ql.size(); q++)
72 for (std::size_t p=0; p<qr.size(); p++)
73 {
74 out.push_back(make_tuple(qvacuum(),q,qvacuum(),p,qvacuum()));
75 }
76 return out;
77 };
78
79 template<std::size_t M>
80 static bool compare ( const std::array<qType,M>& q1, const std::array<qType,M>& q2 )
81 {
82 return false;
83 }
84
85 inline static double coeff_unity() { return 1.; }
86 inline static double coeff_dot(const qType& q1) { return 1.; }
87 inline static double coeff_rightOrtho(const qType& q1, const qType& q2) { return 1.; }
88 inline static double coeff_leftSweep(const qType& q1, const qType& q2) { return 1.; }
89
90 inline static double coeff_leftSweep2(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
91 inline static double coeff_leftSweep3(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
92 inline static double coeff_swapPhase(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
93 inline static double coeff_adjoint(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
94 inline static double coeff_splitAA(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
95
96 inline static double coeff_6j(const qType& q1, const qType& q2, const qType& q3,
97 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
98 inline static double coeff_Apair(const qType& q1, const qType& q2, const qType& q3,
99 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
100 inline static double coeff_splitAA(const qType& q1, const qType& q2, const qType& q3,
101 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
102 inline static double coeff_prod(const qType& q1, const qType& q2, const qType& q3,
103 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
104 inline static double coeff_MPOprod6(const qType& q1, const qType& q2, const qType& q3,
105 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
106 inline static double coeff_twoSiteGate(const qType& q1, const qType& q2, const qType& q3,
107 const qType& q4, const qType& q5, const qType& q6) { return 1.; }
108
109 inline static double coeff_9j(const qType& q1, const qType& q2, const qType& q3,
110 const qType& q4, const qType& q5, const qType& q6,
111 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
112 inline static double coeff_tensorProd(const qType& q1, const qType& q2, const qType& q3,
113 const qType& q4, const qType& q5, const qType& q6,
114 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
115 inline static double coeff_MPOprod9(const qType& q1, const qType& q2, const qType& q3,
116 const qType& q4, const qType& q5, const qType& q6,
117 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
118 inline static double coeff_buildL(const qType& q1, const qType& q2, const qType& q3,
119 const qType& q4, const qType& q5, const qType& q6,
120 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
121 inline static double coeff_buildR(const qType& q1, const qType& q2, const qType& q3,
122 const qType& q4, const qType& q5, const qType& q6,
123 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
124 inline static double coeff_HPsi(const qType& q1, const qType& q2, const qType& q3,
125 const qType& q4, const qType& q5, const qType& q6,
126 const qType& q7, const qType& q8, const qType& q9) { return 1.; }
127
128 inline static bool triangle( const std::array<qType,3>& qs ) { return true; }
129 inline static bool pair( const std::array<qType,2>& qs ) { return true; }
130
131 template<std::size_t M> inline static bool validate( const std::array<qType,M>& qs ) { return true; }
132 };
133
134} //end namespace Sym
135#endif
136
const std::array< qarray< 0 >, 1 > qloc1dummy
Definition: U0.h:12
const std::array< string, 0 > labeldummy
Definition: U0.h:17
const std::array< qarray< 0 >, 8 > qloc8dummy
Definition: U0.h:16
const std::array< qarray< 0 >, 3 > qloc3dummy
Definition: U0.h:14
const std::array< qarray< 0 >, 2 > qloc2dummy
Definition: U0.h:13
const std::array< qarray< 0 >, 4 > qloc4dummy
Definition: U0.h:15
Definition: U0.h:28
static constexpr bool HAS_CGC
Definition: U0.h:36
static std::string name()
Definition: U0.h:34
static double coeff_HPsi(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)
Definition: U0.h:124
static double coeff_MPOprod9(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)
Definition: U0.h:115
static bool pair(const std::array< qType, 2 > &qs)
Definition: U0.h:129
static constexpr bool IS_SPIN_U1()
Definition: U0.h:47
static constexpr std::array< KIND, Nq > kind()
Definition: U0.h:52
static double coeff_Apair(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:98
static vector< tuple< qarray< 0 >, size_t, qarray< 0 >, size_t, qarray< 0 > > > tensorProd(const std::vector< qType > &ql, const std::vector< qType > &qr)
Definition: U0.h:68
static double coeff_twoSiteGate(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:106
static constexpr std::array< int, Nq > mod()
Definition: U0.h:53
static double coeff_leftSweep2(const qType &q1, const qType &q2, const qType &q3)
Definition: U0.h:90
static std::vector< qType > reduceSilent(const std::vector< qType > &ql, const std::vector< qType > &qr, bool UNIQUE=false)
Definition: U0.h:66
static int degeneracy(const qType &q)
Definition: U0.h:59
static constexpr bool IS_MODULAR
Definition: U0.h:41
static double coeff_6j(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:96
static std::vector< qType > reduceSilent(const qType &ql, const qType &qm, const qType &qr)
Definition: U0.h:64
static bool triangle(const std::array< qType, 3 > &qs)
Definition: U0.h:128
static constexpr bool IS_CHARGE_SU2()
Definition: U0.h:44
static constexpr bool NO_CHARGE_SYM()
Definition: U0.h:50
static double coeff_unity()
Definition: U0.h:85
static constexpr bool IS_TRIVIAL
Definition: U0.h:40
static double coeff_MPOprod6(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:104
static constexpr qType qvacuum()
Definition: U0.h:55
static double coeff_splitAA(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:100
static double coeff_adjoint(const qType &q1, const qType &q2, const qType &q3)
Definition: U0.h:93
static bool validate(const std::array< qType, M > &qs)
Definition: U0.h:131
static double coeff_rightOrtho(const qType &q1, const qType &q2)
Definition: U0.h:87
static double coeff_buildL(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)
Definition: U0.h:118
static double coeff_prod(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U0.h:102
static double coeff_buildR(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)
Definition: U0.h:121
static double coeff_swapPhase(const qType &q1, const qType &q2, const qType &q3)
Definition: U0.h:92
static constexpr std::size_t Nq
Definition: U0.h:37
static bool compare(const std::array< qType, M > &q1, const std::array< qType, M > &q2)
Definition: U0.h:80
static int spinorFactor()
Definition: U0.h:61
qarray< 0 > qType
Definition: U0.h:30
static double coeff_leftSweep(const qType &q1, const qType &q2)
Definition: U0.h:88
static constexpr int MOD_N
Definition: U0.h:42
static std::vector< qType > reduceSilent(const qType &ql, const qType &qr)
Definition: U0.h:63
U0()
Definition: U0.h:32
static constexpr bool ABELIAN
Definition: U0.h:39
static double coeff_dot(const qType &q1)
Definition: U0.h:86
static constexpr bool NON_ABELIAN
Definition: U0.h:38
static double coeff_leftSweep3(const qType &q1, const qType &q2, const qType &q3)
Definition: U0.h:91
static std::vector< qType > reduceSilent(const std::vector< qType > &ql, const qType &qr)
Definition: U0.h:65
static constexpr bool IS_SPIN_SU2()
Definition: U0.h:45
static double coeff_splitAA(const qType &q1, const qType &q2, const qType &q3)
Definition: U0.h:94
static constexpr std::array< qType, 1 > lowest_qs()
Definition: U0.h:56
static constexpr bool NO_SPIN_SYM()
Definition: U0.h:49
static double coeff_tensorProd(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)
Definition: U0.h:112
static qType flip(const qType &q)
Definition: U0.h:58
static double 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)
Definition: U0.h:109
Definition: qarray.h:26