VMPS++
Loading...
Searching...
No Matches
U1.h
Go to the documentation of this file.
1#ifndef U1_H_
2#define U1_H_
3
4//include <array>
5//include <cstddef>
7#include <unordered_set>
9
10#include "DmrgTypedefs.h"
11#include "DmrgExternal.h"
12//include "qarray.h"
13
14namespace Sym{
15
23template<typename Kind, typename Scalar=double>
24class U1
25{
26public:
27 typedef Scalar Scalar_;
28
29 static constexpr size_t Nq=1;
30
31 static constexpr bool HAS_CGC = false;
32 static constexpr bool NON_ABELIAN = false;
33 static constexpr bool ABELIAN = true;
34 static constexpr bool IS_TRIVIAL = false;
35 static constexpr bool IS_MODULAR = false;
36 static constexpr int MOD_N = 1;
37
38 static constexpr bool IS_CHARGE_SU2() { return false; }
39 static constexpr bool IS_SPIN_SU2() { return false; }
40
41 static constexpr bool IS_SPIN_U1() { if constexpr (U1<Kind,Scalar>::kind()[0] == KIND::M) {return true;} return false; }
42
43 static constexpr bool NO_SPIN_SYM() { if (U1<Kind,Scalar>::kind()[0] != KIND::M and U1<Kind,Scalar>::kind()[0] != KIND::Nup and U1<Kind,Scalar>::kind()[0] != KIND::Ndn) {return true;} return false;}
44 static constexpr bool NO_CHARGE_SYM() { if (U1<Kind,Scalar>::kind()[0] != KIND::N and U1<Kind,Scalar>::kind()[0] != KIND::Nup and U1<Kind,Scalar>::kind()[0] != KIND::Ndn) {return true;} return false;}
45
47
48 U1() {};
49
50 inline static constexpr qType qvacuum() { return {0}; }
51
52 inline static constexpr size_t lowest_qs_size = 2; // for compatibility with g++-8
53 inline static constexpr std::array<qType,2> lowest_qs()
54 {
55 return std::array<qType,2>{{ qarray<1>(std::array<int,1>{{-1}}),
56 qarray<1>(std::array<int,1>{{+1}}) }};
57 }
58
59 inline static std::string name() { return "U1"; }
60 inline static constexpr std::array<KIND,Nq> kind() { return {Kind::name}; }
61 inline static constexpr std::array<int,Nq> mod() { return {MOD_N}; }
62
63 inline static qType flip( const qType& q ) { return {-q[0]}; }
64 inline static int degeneracy( const qType& q ) { return 1; }
65
66 inline static int spinorFactor() { return +1; }
67
69
72 static std::vector<qType> reduceSilent( const qType& ql, const qType& qr);
77 static std::vector<qType> reduceSilent( const qType& ql, const qType& qm, const qType& qr);
81 static std::vector<qType> reduceSilent( const std::vector<qType>& ql, const qType& qr);
85 static std::vector<qType> reduceSilent( const std::vector<qType>& ql, const std::vector<qType>& qr, bool UNIQUE = false);
86
87 static vector<tuple<qarray<1>,size_t,qarray<1>,size_t,qarray<1> > > tensorProd ( const std::vector<qType>& ql, const std::vector<qType>& qr );
89
91
97 inline static Scalar coeff_unity();
98 inline static Scalar coeff_dot(const qType& q1);
99 inline static Scalar coeff_rightOrtho(const qType& q1, const qType& q2);
100 inline static Scalar coeff_leftSweep(const qType& q1, const qType& q2);
101
102 inline static double coeff_leftSweep2(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
103 inline static double coeff_leftSweep3(const qType& q1, const qType& q2, const qType& q3) { return 1.; }
104 inline static Scalar coeff_swapPhase(const qType& q1, const qType& q2, const qType& q3);
105 inline static Scalar coeff_adjoint(const qType& q1, const qType& q2, const qType& q3);
106 inline static Scalar coeff_splitAA(const qType& q1, const qType& q2, const qType& q3);
107
108 inline static Scalar coeff_3j(const qType& q1, const qType& q2, const qType& q3,
109 int q1_z, int q2_z, int q3_z);
110 inline static Scalar coeff_CGC(const qType& q1, const qType& q2, const qType& q3,
111 int q1_z, int q2_z, int q3_z);
112
113 inline static Scalar coeff_6j(const qType& q1, const qType& q2, const qType& q3,
114 const qType& q4, const qType& q5, const qType& q6);
115 inline static Scalar coeff_Apair(const qType& q1, const qType& q2, const qType& q3,
116 const qType& q4, const qType& q5, const qType& q6);
117 static Scalar coeff_splitAA(const qType& q1, const qType& q2, const qType& q3,
118 const qType& q4, const qType& q5, const qType& q6);
119 inline static Scalar coeff_prod(const qType& q1, const qType& q2, const qType& q3,
120 const qType& q4, const qType& q5, const qType& q6);
121 static Scalar coeff_MPOprod6(const qType& q1, const qType& q2, const qType& q3,
122 const qType& q4, const qType& q5, const qType& q6);
123 static Scalar coeff_twoSiteGate(const qType& q1, const qType& q2, const qType& q3,
124 const qType& q4, const qType& q5, const qType& q6);
125
126 inline static Scalar coeff_9j(const qType& q1, const qType& q2, const qType& q3,
127 const qType& q4, const qType& q5, const qType& q6,
128 const qType& q7, const qType& q8, const qType& q9);
129 inline static Scalar coeff_tensorProd(const qType& q1, const qType& q2, const qType& q3,
130 const qType& q4, const qType& q5, const qType& q6,
131 const qType& q7, const qType& q8, const qType& q9);
132 inline static Scalar coeff_MPOprod9(const qType& q1, const qType& q2, const qType& q3,
133 const qType& q4, const qType& q5, const qType& q6,
134 const qType& q7, const qType& q8, const qType& q9);
135 inline static Scalar coeff_buildL(const qType& q1, const qType& q2, const qType& q3,
136 const qType& q4, const qType& q5, const qType& q6,
137 const qType& q7, const qType& q8, const qType& q9);
138 inline static Scalar coeff_buildR(const qType& q1, const qType& q2, const qType& q3,
139 const qType& q4, const qType& q5, const qType& q6,
140 const qType& q7, const qType& q8, const qType& q9);
141 inline static Scalar coeff_HPsi(const qType& q1, const qType& q2, const qType& q3,
142 const qType& q4, const qType& q5, const qType& q6,
143 const qType& q7, const qType& q8, const qType& q9);
144 inline static Scalar coeff_AW(const qType& q1, const qType& q2, const qType& q3,
145 const qType& q4, const qType& q5, const qType& q6,
146 const qType& q7, const qType& q8, const qType& q9);
148
153 template<std::size_t M>
154 static bool compare ( const std::array<qType,M>& q1, const std::array<qType,M>& q2 );
155
161 template<std::size_t M>
162 static bool validate( const std::array<qType,M>& qs );
163
164 static bool triangle( const std::array<qType,3>& qs );
165 static bool pair( const std::array<qType,2>& qs );
166
167};
168
169template<typename Kind, typename Scalar>
170std::vector<typename U1<Kind,Scalar>::qType> U1<Kind,Scalar>::
171reduceSilent( const qType& ql, const qType& qr )
172{
173 std::vector<qType> vout;
174 vout.push_back({ql[0]+qr[0]});
175 return vout;
176}
177
178template<typename Kind, typename Scalar>
179std::vector<typename U1<Kind,Scalar>::qType> U1<Kind,Scalar>::
180reduceSilent( const qType& ql, const qType& qm, const qType& qr )
181{
182 std::vector<qType> vout;
183 vout.push_back({ql[0]+qm[0]+qr[0]});
184 return vout;
185}
186
187template<typename Kind, typename Scalar>
188std::vector<typename U1<Kind,Scalar>::qType> U1<Kind,Scalar>::
189reduceSilent( const std::vector<qType>& ql, const qType& qr )
190{
191 std::vector<typename U1<Kind,Scalar>::qType> vout;
192 for (std::size_t q=0; q<ql.size(); q++)
193 {
194 vout.push_back({ql[q][0]+qr[0]});
195 }
196 return vout;
197}
198
199template<typename Kind, typename Scalar>
200std::vector<typename U1<Kind,Scalar>::qType> U1<Kind,Scalar>::
201reduceSilent( const std::vector<qType>& ql, const std::vector<qType>& qr, bool UNIQUE )
202{
203 if (UNIQUE)
204 {
205 std::unordered_set<qType> uniqueControl;
206 std::vector<qType> vout;
207 for (std::size_t q=0; q<ql.size(); q++)
208 for (std::size_t p=0; p<qr.size(); p++)
209 {
210 int i = ql[q][0]+qr[p][0];
211 if( auto it = uniqueControl.find({i}) == uniqueControl.end() ) { uniqueControl.insert({i}); vout.push_back({i}); }
212 }
213 return vout;
214 }
215 else
216 {
217 std::vector<qType> vout;
218
219 for (std::size_t q=0; q<ql.size(); q++)
220 for (std::size_t p=0; p<qr.size(); p++)
221 {
222 vout.push_back({ql[q][0]+qr[p][0]});
223 }
224 return vout;
225 }
226}
227
228template<typename Kind, typename Scalar>
229vector<tuple<qarray<1>,size_t,qarray<1>,size_t,qarray<1> > > U1<Kind,Scalar>::
230tensorProd ( const std::vector<qType>& ql, const std::vector<qType>& qr )
231{
232// std::unordered_map<qarray3<1>,std::size_t> dout;
233// size_t i=0;
234// for (std::size_t q=0; q<ql.size(); q++)
235// for (std::size_t p=0; p<qr.size(); p++)
236// {
237// dout.insert(make_pair(qarray3<1>{ql[q], qr[p], qarray<1>{ql[q][0]+qr[p][0]}}, i));
238// ++i;
239// }
240// return dout;
241
242 vector<tuple<qarray<1>,size_t,qarray<1>,size_t,qarray<1> > > out;
243 for (std::size_t q=0; q<ql.size(); q++)
244 for (std::size_t p=0; p<qr.size(); p++)
245 {
246 out.push_back(make_tuple(ql[q], q, qr[p], p, qarray<1>{ql[q][0]+qr[p][0]}));
247 }
248 return out;
249}
250
251template<typename Kind, typename Scalar>
254{
255 Scalar out = Scalar(1.);
256 return out;
257}
258
259template<typename Kind, typename Scalar>
261coeff_dot(const qType& q1)
262{
263 Scalar out = Scalar(1.);
264 return out;
265}
266
267template<typename Kind, typename Scalar>
269coeff_rightOrtho(const qType& q1, const qType& q2)
270{
271 Scalar out = Scalar(1.);
272 return out;
273}
274
275template<typename Kind, typename Scalar>
277coeff_leftSweep(const qType& q1, const qType& q2)
278{
279 Scalar out = Scalar(1.);
280 return out;
281}
282
283template<typename Kind, typename Scalar>
285coeff_swapPhase(const qType& q1, const qType& q2, const qType& q3)
286{
287 Scalar out = Scalar(1.);
288 return out;
289}
290
291template<typename Kind, typename Scalar>
293coeff_adjoint(const qType& q1, const qType& q2, const qType& q3)
294{
295 Scalar out = Scalar(1.);
296 return out;
297}
298
299template<typename Kind, typename Scalar>
301coeff_splitAA(const qType& q1, const qType& q2, const qType& q3)
302{
303 Scalar out = Scalar(1.);
304 return out;
305}
306
307template<typename Kind, typename Scalar>
309coeff_3j(const qType& q1, const qType& q2, const qType& q3,
310 int q1_z, int q2_z, int q3_z)
311{
312 return Scalar(1.);
313}
314
315template<typename Kind, typename Scalar>
317coeff_CGC(const qType& q1, const qType& q2, const qType& q3,
318 int q1_z, int q2_z, int q3_z)
319{
320 return Scalar(1.);
321}
322
323template<typename Kind, typename Scalar>
325coeff_6j(const qType& q1, const qType& q2, const qType& q3,
326 const qType& q4, const qType& q5, const qType& q6)
327{
328 // std::cout << "q1=" << q1 << " q2=" << q2 << " q3=" << q3 << " q4=" << q4 << " q5=" << q5 << " q6=" << q6 << std::endl;
329 // assert(-q1[0] + q2[0] + q3[0] == 0 and "ERROR in U1-symmetry flow equations (6j symbol).");
330 // assert(-q1[0] + q5[0] + q6[0] == 0 and "ERROR in U1-symmetry flow equations (6j symbol).");
331 // assert(+q4[0] + q2[0] - q6[0] == 0 and "ERROR in U1-symmetry flow equations (6j symbol).");
332 // assert(+q4[0] + q5[0] - q3[0] == 0 and "ERROR in U1-symmetry flow equations (6j symbol).");
333
334 return Scalar(1.);
335}
336
337template<typename Kind, typename Scalar>
339coeff_Apair(const qType& q1, const qType& q2, const qType& q3,
340 const qType& q4, const qType& q5, const qType& q6)
341{
342 Scalar out = Scalar(1.);
343 return out;
344}
345
346template<typename Kind, typename Scalar>
348coeff_splitAA(const qType& q1, const qType& q2, const qType& q3,
349 const qType& q4, const qType& q5, const qType& q6)
350{
351 Scalar out = Scalar(1.);
352 return out;
353}
354
355template<typename Kind, typename Scalar>
357coeff_prod(const qType& q1, const qType& q2, const qType& q3,
358 const qType& q4, const qType& q5, const qType& q6)
359{
360 Scalar out = Scalar(1.);
361 return out;
362}
363
364template<typename Kind, typename Scalar>
366coeff_MPOprod6(const qType& q1, const qType& q2, const qType& q3,
367 const qType& q4, const qType& q5, const qType& q6)
368{
369 Scalar out = Scalar(1.);
370 return out;
371}
372
373template<typename Kind, typename Scalar>
375coeff_twoSiteGate(const qType& q1, const qType& q2, const qType& q3,
376 const qType& q4, const qType& q5, const qType& q6)
377{
378 Scalar out = Scalar(1.);
379 return out;
380}
381
382template<typename Kind, typename Scalar>
384coeff_9j(const qType& q1, const qType& q2, const qType& q3,
385 const qType& q4, const qType& q5, const qType& q6,
386 const qType& q7, const qType& q8, const qType& q9)
387{
388 // std::cout << "q1=" << q1 << " q2=" << q2 << " q3=" << q3 << " q4=" << q4 << " q5=" << q5 << " q6=" << q6 << " q7=" << q7 << " q8=" << q8 << " q9=" << q9 << std::endl;
389 // if (q1[0] + q4[0] - q7[0] != 0) {return 0.;}
390 // if (q2[0] + q5[0] - q8[0] != 0) {return 0.;}
391 // if (q3[0] + q6[0] - q9[0] != 0) {return 0.;}
392 // if (q4[0] + q5[0] - q6[0] != 0) {return 0.;}
393 // if (q7[0] + q8[0] - q9[0] != 0) {return 0.;}
394 return Scalar(1.);
395}
396
397template<typename Kind, typename Scalar>
399coeff_buildR(const qType& q1, const qType& q2, const qType& q3,
400 const qType& q4, const qType& q5, const qType& q6,
401 const qType& q7, const qType& q8, const qType& q9)
402{
403 // std::cout << "q1=" << q1 << " q2=" << q2 << " q3=" << q3 << " q4=" << q4 << " q5=" << q5 << " q6=" << q6 << " q7=" << q7 << " q8=" << q8 << " q9=" << q9 << std::endl;
404 // assert(-q1[0] + q4[0] + q7[0] == 0 and "ERROR in U1-symmetry flow equations (9j-symbol).");
405 // assert(-q2[0] + q5[0] + q8[0] == 0 and "ERROR in U1-symmetry flow equations (9j-symbol).");
406 // assert(-q3[0] + q6[0] + q9[0] == 0 and "ERROR in U1-symmetry flow equations (9j-symbol).");
407 // assert(+q4[0] + q5[0] - q6[0] == 0 and "ERROR in U1-symmetry flow equations (9j-symbol).");
408 // assert(-q7[0] + q8[0] + q9[0] == 0 and "ERROR in U1-symmetry flow equations (9j-symbol).");
409 return Scalar(1.);
410}
411
412template<typename Kind, typename Scalar>
414coeff_buildL(const qType& q1, const qType& q2, const qType& q3,
415 const qType& q4, const qType& q5, const qType& q6,
416 const qType& q7, const qType& q8, const qType& q9)
417{
418 Scalar out = Scalar(1.);
419 return out;
420}
421
422template<typename Kind, typename Scalar>
424coeff_tensorProd(const qType& q1, const qType& q2, const qType& q3,
425 const qType& q4, const qType& q5, const qType& q6,
426 const qType& q7, const qType& q8, const qType& q9)
427{
428 Scalar out = Scalar(1.);
429 return out;
430}
431
432template<typename Kind, typename Scalar>
434coeff_MPOprod9(const qType& q1, const qType& q2, const qType& q3,
435 const qType& q4, const qType& q5, const qType& q6,
436 const qType& q7, const qType& q8, const qType& q9)
437{
438 Scalar out = Scalar(1.);
439 return out;
440}
441
442template<typename Kind, typename Scalar>
444coeff_HPsi(const qType& q1, const qType& q2, const qType& q3,
445 const qType& q4, const qType& q5, const qType& q6,
446 const qType& q7, const qType& q8, const qType& q9)
447{
448 Scalar out = Scalar(1.);
449 return out;
450}
451
452template<typename Kind, typename Scalar>
454coeff_AW(const qType& q1, const qType& q2, const qType& q3,
455 const qType& q4, const qType& q5, const qType& q6,
456 const qType& q7, const qType& q8, const qType& q9)
457{
458 Scalar out = Scalar(1.);
459 return out;
460}
461
462template<typename Kind, typename Scalar>
463template<std::size_t M>
465compare ( const std::array<U1<Kind,Scalar>::qType,M>& q1, const std::array<U1<Kind,Scalar>::qType,M>& q2 )
466{
467 for (std::size_t m=0; m<M; m++)
468 {
469 if (q1[m][0] > q2[m][0]) { return false; }
470 else if (q1[m][0] < q2[m][0]) {return true; }
471 }
472 return false;
473}
474
475template<typename Kind, typename Scalar>
477triangle ( const std::array<U1<Kind,Scalar>::qType,3>& qs )
478{
479 //check the triangle rule for U1 quantum numbers
480 if (qs[0][0] + qs[1][0] == qs[2][0]) {return true;}
481 return false;
482}
483
484template<typename Kind, typename Scalar>
486pair ( const std::array<U1<Kind,Scalar>::qType,2>& qs )
487{
488 //check if two quantum numbers fulfill the flow equations: simply qin = qout
489 if (qs[0] == qs[1]) {return true;}
490 return false;
491}
492
493template<typename Kind, typename Scalar>
494template<std::size_t M>
496validate ( const std::array<U1<Kind,Scalar>::qType,M>& qs )
497{
498 if constexpr( M == 1 ) { return true; }
499 else if constexpr( M == 2 ) { return U1<Kind,Scalar>::pair(qs); }
500 else if constexpr( M==3 ) { return U1<Kind,Scalar>::triangle(qs); }
501 else { cout << "This should not be printed out!" << endl; return true; }
502}
503
504} //end namespace Sym
505
506#ifndef STREAM_OPERATOR_ARR_1_INT
507#define STREAM_OPERATOR_ARR_1_INT
508std::ostream& operator<< (std::ostream& os, const typename Sym::U1<double>::qType &q)
509{
510 os << q[0];
511 return os;
512}
513#endif
514
515#endif
std::ostream & operator<<(std::ostream &os, const typename Sym::U1< double >::qType &q)
Definition: U1.h:508
Definition: U1.h:25
static constexpr std::array< int, Nq > mod()
Definition: U1.h:61
static Scalar coeff_unity()
Definition: U1.h:253
static bool triangle(const std::array< qType, 3 > &qs)
Definition: U1.h:477
static constexpr bool IS_TRIVIAL
Definition: U1.h:34
static Scalar coeff_rightOrtho(const qType &q1, const qType &q2)
Definition: U1.h:269
static Scalar 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: U1.h:424
static Scalar coeff_prod(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U1.h:357
static constexpr bool NO_CHARGE_SYM()
Definition: U1.h:44
static constexpr bool HAS_CGC
Definition: U1.h:31
static std::string name()
Definition: U1.h:59
static bool pair(const std::array< qType, 2 > &qs)
Definition: U1.h:486
static constexpr bool NO_SPIN_SYM()
Definition: U1.h:43
static Scalar coeff_AW(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: U1.h:454
static constexpr bool IS_MODULAR
Definition: U1.h:35
static constexpr bool ABELIAN
Definition: U1.h:33
Scalar Scalar_
Definition: U1.h:27
static constexpr std::array< qType, 2 > lowest_qs()
Definition: U1.h:53
static constexpr bool NON_ABELIAN
Definition: U1.h:32
static Scalar coeff_MPOprod6(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U1.h:366
static constexpr size_t lowest_qs_size
Definition: U1.h:52
static double coeff_leftSweep3(const qType &q1, const qType &q2, const qType &q3)
Definition: U1.h:103
static Scalar coeff_Apair(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U1.h:339
static Scalar coeff_adjoint(const qType &q1, const qType &q2, const qType &q3)
Definition: U1.h:293
static constexpr size_t Nq
Definition: U1.h:29
static Scalar 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: U1.h:399
static int degeneracy(const qType &q)
Definition: U1.h:64
static Scalar coeff_6j(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U1.h:325
static Scalar coeff_3j(const qType &q1, const qType &q2, const qType &q3, int q1_z, int q2_z, int q3_z)
Definition: U1.h:309
static bool validate(const std::array< qType, M > &qs)
static constexpr bool IS_CHARGE_SU2()
Definition: U1.h:38
static bool compare(const std::array< qType, M > &q1, const std::array< qType, M > &q2)
static constexpr std::array< KIND, Nq > kind()
Definition: U1.h:60
static std::vector< qType > reduceSilent(const qType &ql, const qType &qr)
Definition: U1.h:171
static vector< tuple< qarray< 1 >, size_t, qarray< 1 >, size_t, qarray< 1 > > > tensorProd(const std::vector< qType > &ql, const std::vector< qType > &qr)
Definition: U1.h:230
static Scalar 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: U1.h:434
static int spinorFactor()
Definition: U1.h:66
static constexpr qType qvacuum()
Definition: U1.h:50
static Scalar coeff_twoSiteGate(const qType &q1, const qType &q2, const qType &q3, const qType &q4, const qType &q5, const qType &q6)
Definition: U1.h:375
static constexpr bool IS_SPIN_SU2()
Definition: U1.h:39
static Scalar coeff_splitAA(const qType &q1, const qType &q2, const qType &q3)
Definition: U1.h:301
U1()
Definition: U1.h:48
static qType flip(const qType &q)
Definition: U1.h:63
static Scalar coeff_leftSweep(const qType &q1, const qType &q2)
Definition: U1.h:277
static constexpr bool IS_SPIN_U1()
Definition: U1.h:41
static Scalar 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: U1.h:414
static constexpr int MOD_N
Definition: U1.h:36
static Scalar 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: U1.h:444
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)
Definition: U1.h:384
static Scalar coeff_CGC(const qType &q1, const qType &q2, const qType &q3, int q1_z, int q2_z, int q3_z)
Definition: U1.h:317
static Scalar coeff_swapPhase(const qType &q1, const qType &q2, const qType &q3)
Definition: U1.h:285
qarray< Nq > qType
Definition: U1.h:46
static Scalar coeff_dot(const qType &q1)
Definition: U1.h:261
static double coeff_leftSweep2(const qType &q1, const qType &q2, const qType &q3)
Definition: U1.h:102
Definition: qarray.h:26