CHROMA
su2extract.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief Extract an unnormalized SU(2) matrix from a GL(3,C) matrix
3  */
4 
5 #include "chromabase.h"
7 
8 namespace Chroma
9 {
10 
11  //! Su2_extract: r_0,r_1,r_2,r_3 <- source(su2_index) [SU(N) field] under a subset
12  /*!
13  * \ingroup gauge
14  *
15  * Extract components r_k proportional to SU(2) submatrix su2_index
16  * from the "SU(Nc)" matrix V. The SU(2) matrix is parametrized in the
17  * sigma matrix basis.
18  *
19  * There are Nc*(Nc-1)/2 unique SU(2) submatrices in an SU(Nc) matrix.
20  * The user does not need to know exactly which one is which, just that
21  * they are unique.
22  *
23  * Arguments:
24  *
25  * \param r su(2) matrix represented in the O(4) rep. - an array of LatticeReal
26  * \param source extract the su2 matrix from this su(n) gauge field
27  * \param su2_index int lying in [0, Nc*(Nc-1)/2)
28  * \param s subset for operations (Read)
29  */
30 
31  template<typename S>
32  inline
33  void
34  su2Extract_t(multi1d<LatticeReal>& r,
35  const LatticeColorMatrix& source,
36  int su2_index,
37  const S& s)
38  {
39  START_CODE();
40 
41  if (r.size() != 4)
42  {
43  QDPIO::cerr << "su2Extract: return result invalid size" << std::endl;
44  QDP_abort(1);
45  }
46 
47  /* Determine the SU(N) indices corresponding to the SU(2) indices */
48  /* of the SU(2) subgroup $3 */
49  int i1, i2;
50  int found = 0;
51  int del_i = 0;
52  int index = -1;
53 
54  while ( del_i < (Nc-1) && found == 0 )
55  {
56  del_i++;
57  for ( i1 = 0; i1 < (Nc-del_i); i1++ )
58  {
59  index++;
60  if ( index == su2_index )
61  {
62  found = 1;
63  break;
64  }
65  }
66  }
67  i2 = i1 + del_i;
68 
69  if ( found == 0 )
70  {
71  QDPIO::cerr << __func__ << ": trouble with SU2 subgroup index" << std::endl;
72  QDP_abort(1);
73  }
74 
75  /* Compute the b(k) of A_SU(2) = b0 + i sum_k bk sigma_k */
76  r[0][s] = real(peekColor(source,i1,i1)) + real(peekColor(source,i2,i2));
77  r[1][s] = imag(peekColor(source,i1,i2)) + imag(peekColor(source,i2,i1));
78  r[2][s] = real(peekColor(source,i1,i2)) - real(peekColor(source,i2,i1));
79  r[3][s] = imag(peekColor(source,i1,i1)) - imag(peekColor(source,i2,i2));
80 
81  END_CODE();
82  }
83 
84 
85  void
86  su2Extract(multi1d<LatticeReal>& r,
87  const LatticeColorMatrix& source,
88  int su2_index,
89  const Subset& s)
90  {
91  su2Extract_t(r, source, su2_index, s);
92  }
93 
94 
95 } // end namespace Chroma
Primary include file for CHROMA library code.
int su2_index
Definition: cool.cc:27
void su2Extract_t(multi1d< LatticeReal > &r, const LatticeColorMatrix &source, int su2_index, const S &s)
Su2_extract: r_0,r_1,r_2,r_3 <- source(su2_index) [SU(N) field] under a subset.
Definition: su2extract.cc:34
void su2Extract(multi1d< LatticeReal > &r, const LatticeColorMatrix &source, int su2_index, const Subset &s)
Su2_extract: r_0,r_1,r_2,r_3 <- source(su2_index) [SU(N) field] under a subset.
Definition: su2extract.cc:86
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
START_CODE()
multi1d< LatticeFermion > s(Ncb)
Extract an unnormalized SU(2) matrix from a GL(3,C) matrix.
#define index(c)