CHROMA
su3over.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief Do one SU(2) subgroup microcanonical overrelaxation update of SU(Nc)
3  */
4 
5 #include "chromabase.h"
8 #include "util/gauge/sunfill.h"
9 
10 namespace Chroma
11 {
12 
13  //! Do one SU(2) subgroup microcanonical overrelaxation update of SU(Nc) matrix
14  /*!
15  * \ingroup heatbath
16  *
17  * Do one SU(2) subgroup microcanonical overrelaxation update of SU(Nc)
18  * matrix U keeping action tr(U*W) constant.
19  *
20  * \param u field to be updated ( Modify )
21  * \param w "staple" field in the action ( Read )
22  * \param su2_index SU(2) subgroup index ( Read )
23  * \param sub Subset for operations ( Read )
24  */
25 
26  void su3over(LatticeColorMatrix& u,
27  const LatticeColorMatrix& w,
28  int su2_index,
29  const Subset& sub)
30  {
31  START_CODE();
32 
33  /* V = U*W */
34  LatticeColorMatrix v;
35  v[sub] = u * w;
36 
37  /* Extract components r_k proportional to SU(2) submatrix su2_index */
38  /* from the "SU(Nc)" matrix V. The SU(2) matrix is parametrized in the */
39  /* sigma matrix basis. */
40  multi1d<LatticeReal> r(4);
41  su2Extract(r, v, su2_index, sub);
42 
43  /*
44  * Now project onto SU(2)
45  */
46  LatticeReal r_l;
47  r_l[sub] = sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2] + r[3]*r[3]);
48 
49  // Normalize
50  LatticeBoolean lbtmp;
51  lbtmp[sub] = r_l > fuzz;
52  LatticeReal lftmp;
53  lftmp[sub] = 1.0 / where(lbtmp, r_l, LatticeReal(1));
54 
55  // Fill (r[0]/r_l, -r[1]/r_l, -r[2]/r_l, -r[3]/r_l) for r_l > fuzz
56  // and (1,0,0,0) for sites with r_l < fuzz
57  multi1d<LatticeReal> a(4);
58  a[0][sub] = where(lbtmp, r[0] * lftmp, LatticeReal(1));
59  a[1][sub] = where(lbtmp, -(r[1] * lftmp), LatticeReal(0));
60  a[2][sub] = where(lbtmp, -(r[2] * lftmp), LatticeReal(0));
61  a[3][sub] = where(lbtmp, -(r[3] * lftmp), LatticeReal(0));
62 
63  /* Microcanonical updating matrix is the square of this */
64  r[0][sub] = a[0]*a[0] - a[1]*a[1] - a[2]*a[2] - a[3]*a[3];
65 
66  a[0][sub] *= 2;
67  r[1][sub] = a[0]*a[1];
68  r[2][sub] = a[0]*a[2];
69  r[3][sub] = a[0]*a[3];
70 
71  /*
72  * Now fill an SU(3) matrix V with the SU(2) submatrix su2_index
73  * paramtrized by a_k in the sigma matrix basis.
74  */
75  sunFill(v, r, su2_index, sub);
76 
77  // U = V*U
78  LatticeColorMatrix tmp;
79  tmp[sub] = v * u;
80  u[sub] = tmp;
81 
82  END_CODE();
83  }
84 
85 } // end namespace Chroma
Primary include file for CHROMA library code.
int su2_index
Definition: cool.cc:27
void sunFill(LatticeColorMatrix &dest, const multi1d< LatticeReal > &r, int su2_index, const Subset &s)
Fill a dest(su2_index) <- r_0,r_1,r_2,r_3 under a subset.
Definition: sunfill.cc:33
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
void su3over(LatticeColorMatrix &u, const LatticeColorMatrix &w, int su2_index, const Subset &sub)
Do one SU(2) subgroup microcanonical overrelaxation update of SU(Nc) matrix.
Definition: su3over.cc:26
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
static multi1d< LatticeColorMatrix > u
LatticeFermion tmp
Definition: mespbg5p_w.cc:36
Complex a
Definition: invbicg.cc:95
START_CODE()
Extract an unnormalized SU(2) matrix from a GL(3,C) matrix.
Do one SU(2) subgroup microcanonical overrelaxation update of SU(Nc)
Fill an SU(Nc) matrix with an SU(2) submatrix.