CHROMA
mesQlPOT_w.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief Potential between 2 heavy mesons : Orginos and Savage
3  *
4  * V 3
5  *
6  * Revised by Savage Sept 8 2005 , S=0 states included.
7  *
8  * Revised by Savage March 20 2005 , included the case with vanishing separation.
9  *
10  * Revised by Savage March 18 2005 , d<Nd-2 -> d<Nd-1 for the quark shifting
11  * in amplitude 2. And changed adj(spin..) to spin... in amp2
12  *
13  */
14 
15 #include "barQll_w.h"
16 #include "mesQl_w.h"
17 #include "mesQlPOT_w.h"
18 
19 namespace Chroma
20 {
21  //! Heavy-light meson potential
22  /*!
23  * \ingroup hadron
24  *
25  * This routine is specific to Wilson fermions!
26  *
27  * Construct propagators for two heavy mesons in all combinations of spin up and
28  * spin down light degrees of freedom..
29  * In the heavy quark limit the D and the D* are degenerate.
30  * The heavy quark is inserted in the infinitely heavy quark limit
31  * by a Wilson-Line without spin indices.
32  * We are effectively propagating two spin-1/2 light degrees of freedom.
33  *
34  * \param u gauge field (Read)
35  * \param quark1 quark propagator ( Read )
36  * \param quark2 quark propagator ( Read )
37  * \param src1 cartesian coordinates of one source ( Read )
38  * \param src2 cartesian coordinates of the other source ( Read )
39  * \param phases object holds list of momenta and Fourier phases ( Read )
40  * \param xml xml file object ( Read )
41  * \param xml_group group name for xml data ( Read )
42  *
43  */
44 
45  void QlQlPOT(const multi1d<LatticeColorMatrix>& u,
46  const LatticePropagator& quark1,
47  const LatticePropagator& quark2,
48  const multi1d<int>& src1,
49  const multi1d<int>& src2,
50  const SftMom& phases,
51  XMLWriter& xml,
52  const std::string& xml_group)
53  {
54  START_CODE();
55 
56  if ( Ns != 4 ) /* Code is specific to Ns=4 */
57  return;
58 
59  if (src1[Nd-1] != src2[Nd-1] ){
60  QDPIO::cerr<<"Sources must be at the same time slice\n";
61  return ;
62  }
63 
64  int length = phases.numSubsets() ;
65  int num_mom = phases.numMom();
66 
67  LatticeColorMatrix Qprop1;
68  LatticeColorMatrix Qprop2;
69 
70  HeavyQuarkProp(Qprop1,u,src1,length);
71  HeavyQuarkProp(Qprop2,u,src2,length);
72 
73 
74  LatticeComplex Hq1u , Hq2u ,Hq1d , Hq2d ;
75 
76  // S_proj = (1 + \Sigma_3)*(1 + gamma_4) / 2
77  // = (1 + Gamma(8) - i G(3) - i G(11)) / 2
78 
79  SpinMatrix g_one = 1.0;
80  SpinMatrix S_proj_up =
81  0.5*((g_one + Gamma(8) * g_one) - timesI(Gamma(3) * g_one + Gamma(11) * g_one));
82  SpinMatrix S_proj_down =
83  0.5*((g_one + Gamma(8) * g_one) + timesI(Gamma(3) * g_one + Gamma(11) * g_one));
84  SpinMatrix S_proj_unpol =
85  0.5*((g_one + Gamma(8) * g_one));
86 
87  SpinMatrix cg5 = g_one * Gamma(5);
88  SpinMatrix STcg5 = transpose(cg5);
89 
90  SpinMatrix spinsinglet = g_one*S_proj_unpol*Gamma(5);
91  SpinMatrix STspinsinglet = transpose(spinsinglet);
92 
93 
94  // Single meson states, spin up and down at location 1 and 2
95 
96  Hq1u = trace(Qprop1 * S_proj_up * adj(quark1) ) ;
97  Hq2u = trace(Qprop2 * S_proj_up * adj(quark2) ) ;
98  Hq1d = trace(Qprop1 * S_proj_down * adj(quark1) ) ;
99  Hq2d = trace(Qprop2 * S_proj_down * adj(quark2) ) ;
100 
101  // fourier transform
102  multi2d<DComplex> hsumHq1u , hsumHq2u , hsumHq1d , hsumHq2d ;
103  hsumHq1u = phases.sft(Hq1u);
104  hsumHq2u = phases.sft(Hq2u);
105  hsumHq1d = phases.sft(Hq1d);
106  hsumHq2d = phases.sft(Hq2d);
107 
108  // Make time slices for xml reader
109  multi2d<DComplex> Hq1uprop(num_mom,length) , Hq2uprop(num_mom,length) , Hq1dprop(num_mom,length) , Hq2dprop(num_mom,length) ;
110  multi2d<DComplex> Hq1prop(num_mom,length) , Hq2prop(num_mom,length) ;
111  for(int sink_mom_num=0; sink_mom_num < num_mom; ++sink_mom_num)
112  for(int t = 0; t < length; ++t)
113  {
114  int t_eff = (t - src1[Nd-1] + length) % length;
115  Hq1uprop[sink_mom_num][t_eff] = hsumHq1u[sink_mom_num][t];
116  Hq2uprop[sink_mom_num][t_eff] = hsumHq2u[sink_mom_num][t];
117  Hq1dprop[sink_mom_num][t_eff] = hsumHq1d[sink_mom_num][t];
118  Hq2dprop[sink_mom_num][t_eff] = hsumHq2d[sink_mom_num][t];
119  Hq1prop[sink_mom_num][t_eff] = 0.5000000000 * (hsumHq1u[sink_mom_num][t] + hsumHq1d[sink_mom_num][t]);
120  Hq2prop[sink_mom_num][t_eff] = 0.5000000000 * (hsumHq2u[sink_mom_num][t] + hsumHq2d[sink_mom_num][t]);
121  }
122 
123  QDPIO::cerr<<"Done with single meson correlators \n";
124 
125 
126 
127 
128 
129  LatticePropagator tmp , AdjQuark2Qprop2 ;
130  tmp = adj(quark2)*Qprop2 ;
131  AdjQuark2Qprop2=tmp;
132  for (int d(0);d<Nd-1;d++){
133  int r = src2[d] - src1[d] ;
134  while(r>0){
135  AdjQuark2Qprop2 = shift(tmp,FORWARD,d);
136  tmp = AdjQuark2Qprop2 ;
137  r--;
138  }
139  while(r<0){
140  AdjQuark2Qprop2 = shift(tmp,BACKWARD,d);
141  tmp = AdjQuark2Qprop2 ;
142  r++;
143  }
144  }
145  QDPIO::cerr<<" Done shifting q2 Q2\n";
146 
147  LatticePropagator tmp1,AdjQuark1Qprop2 ;
148  tmp1 = adj(quark1)*Qprop2 ;
149  AdjQuark1Qprop2=tmp1;
150  for (int d(0);d<Nd-1;d++){
151  int r = src2[d] - src1[d] ;
152  while(r>0){
153  AdjQuark1Qprop2 = shift(tmp1,FORWARD,d);
154  tmp1 = AdjQuark1Qprop2 ;
155  r--;
156  }
157  while(r<0){
158  AdjQuark1Qprop2 = shift(tmp1,BACKWARD,d);
159  tmp1 = AdjQuark1Qprop2 ;
160  r++;
161  }
162  }
163  QDPIO::cerr<<" Done shifting q1 Q2\n";
164 
165 
166 
167  // S=1 correlators
168 
169  LatticeComplex A1S1Sp1 , A1S1Sm1 , A2S1Sp1 , A2S1Sm1;
170  A1S1Sp1 = trace(S_proj_up * Qprop1 * adj(quark1)) * trace(S_proj_up * AdjQuark2Qprop2 );
171  A1S1Sm1 = trace(S_proj_down * Qprop1 * adj(quark1)) * trace(S_proj_down * AdjQuark2Qprop2 );
172 
173  A2S1Sp1 = -trace(Qprop1 * AdjQuark1Qprop2 * S_proj_up* adj(quark2) * S_proj_up );
174  A2S1Sm1 = -trace(Qprop1 * AdjQuark1Qprop2 * S_proj_down * adj(quark2) * S_proj_down );
175 
176  // Project S=1 correlators onto zero momentum
177  multi2d<DComplex> hsumA1S1Sp1 , hsumA2S1Sp1 , hsumA1S1Sm1 , hsumA2S1Sm1 ;
178  hsumA1S1Sp1 = phases.sft(A1S1Sp1);
179  hsumA1S1Sm1 = phases.sft(A1S1Sm1);
180  hsumA2S1Sp1 = phases.sft(A2S1Sp1);
181  hsumA2S1Sm1 = phases.sft(A2S1Sm1);
182 
183  // Make time slices for xml reader
184  multi2d<DComplex> A1S1Sp1prop(num_mom,length) , A1S1Sm1prop(num_mom,length) , A2S1Sp1prop(num_mom,length) , A2S1Sm1prop(num_mom,length);
185  multi2d<DComplex> I1S1prop(num_mom,length) , I0S1prop(num_mom,length);
186 
187  for(int sink_mom_num=0; sink_mom_num < num_mom; ++sink_mom_num)
188  for(int t = 0; t < length; ++t)
189  {
190  int t_eff = (t - src1[Nd-1] + length) % length;
191  A1S1Sp1prop[sink_mom_num][t_eff] = hsumA1S1Sp1[sink_mom_num][t];
192  A1S1Sm1prop[sink_mom_num][t_eff] = hsumA1S1Sm1[sink_mom_num][t];
193  A2S1Sp1prop[sink_mom_num][t_eff] = hsumA2S1Sp1[sink_mom_num][t];
194  A2S1Sm1prop[sink_mom_num][t_eff] = hsumA2S1Sm1[sink_mom_num][t];
195  I1S1prop[sink_mom_num][t_eff] = 0.50000000000000 * ( hsumA1S1Sp1[sink_mom_num][t] + hsumA1S1Sm1[sink_mom_num][t]
196  + hsumA2S1Sp1[sink_mom_num][t] + hsumA2S1Sm1[sink_mom_num][t] );
197  I0S1prop[sink_mom_num][t_eff] = 0.50000000000000 * ( hsumA1S1Sp1[sink_mom_num][t] + hsumA1S1Sm1[sink_mom_num][t]
198  - hsumA2S1Sp1[sink_mom_num][t] - hsumA2S1Sm1[sink_mom_num][t] );
199  }
200  QDPIO::cerr<<" Done with S=1 correlators\n";
201 
202 
203 
204  // S=0 correlators
205  LatticeComplex A1S0 , A2S0;
206 
207 
208  LatticePropagator STL2Q2 , STL2 , adjL2;
209  SpinTranspose(AdjQuark2Qprop2 , STL2Q2 ) ;
210  adjL2 = adj(quark2);
211  SpinTranspose(adjL2 , STL2 ) ;
212 
213  A1S0 = trace( traceColor(adj(quark1) * Qprop1) * spinsinglet * traceColor(STL2Q2) * STspinsinglet );
214  A2S0 = -trace( AdjQuark1Qprop2 * spinsinglet * STL2 * Qprop1 * spinsinglet );
215 
216  // Project S=0 correlators onto zero momentum
217  multi2d<DComplex> hsumA1S0 , hsumA2S0;
218  hsumA1S0 = phases.sft(A1S0);
219  hsumA2S0 = phases.sft(A2S0);
220 
221  // Make time slices for xml reader
222  multi2d<DComplex> A1S0prop(num_mom,length) , A2S0prop(num_mom,length) ;
223  multi2d<DComplex> I1S0prop(num_mom,length) , I0S0prop(num_mom,length);
224 
225  for(int sink_mom_num=0; sink_mom_num < num_mom; ++sink_mom_num)
226  for(int t = 0; t < length; ++t)
227  {
228  int t_eff = (t - src1[Nd-1] + length) % length;
229  A1S0prop[sink_mom_num][t_eff] = hsumA1S0[sink_mom_num][t];
230  A2S0prop[sink_mom_num][t_eff] = hsumA2S0[sink_mom_num][t];
231  I1S0prop[sink_mom_num][t_eff] = hsumA1S0[sink_mom_num][t] + hsumA2S0[sink_mom_num][t] ;
232  I0S0prop[sink_mom_num][t_eff] = hsumA1S0[sink_mom_num][t] - hsumA2S0[sink_mom_num][t] ;
233  }
234  QDPIO::cerr<<" Done with S=0 correlators\n";
235 
236 
237 
238 
239  // XMLWriter xml_bar(xml);
240  push(xml, xml_group);
241  write(xml, "Meson1U", Hq1uprop[0]);
242  write(xml, "Meson1D", Hq1dprop[0]);
243  write(xml, "Meson2U", Hq2uprop[0]);
244  write(xml, "Meson2D", Hq2dprop[0]);
245  write(xml, "Meson1", Hq1prop[0]);
246  write(xml, "Meson2", Hq2prop[0]);
247  write(xml, "A1S1Sp1", A1S1Sp1prop[0] );
248  write(xml, "A1S1Sm1", A1S1Sm1prop[0] );
249  write(xml, "A2S1Sp1", A2S1Sp1prop[0] );
250  write(xml, "A2S1Sm1", A2S1Sm1prop[0] );
251  write(xml, "A1S0", A1S0prop[0] );
252  write(xml, "A2S0", A2S0prop[0] );
253  write(xml, "I1S1", I1S1prop[0] );
254  write(xml, "I0S1", I0S1prop[0] );
255  write(xml, "I1S0", I1S0prop[0] );
256  write(xml, "I0S0", I0S0prop[0] );
257  pop(xml);
258 
259  END_CODE();
260  }
261 
262 
263 
264  //! Spin Transpose Function
265  /*!
266  * \ingroup hadron
267  *
268  * This is a dumb way of taking the spin transpose of a propagator,
269  * while leaving all other indices untouched...suggested to
270  * us by Bob Edwards
271  * \param prop input propagator
272  * \param STprop spin transposed propagator
273  *
274  */
275 
276  void SpinTranspose(const LatticePropagator& prop , LatticePropagator& STprop)
277  {
278  for(int j = 0; j < Ns; ++j){
279  for(int i = 0; i < Ns; ++i){
280  pokeSpin(STprop, peekSpin(prop, i, j), j, i);
281  }
282  }
283  }
284 
285 }
Heavy Baryon (Qll) 2-pt function : Orginos and Savage.
Fourier transform phase factor support.
Definition: sftmom.h:35
int numSubsets() const
Number of subsets - length in decay direction.
Definition: sftmom.h:63
multi2d< DComplex > sft(const LatticeComplex &cf) const
Do a sumMulti(cf*phases,getSet())
Definition: sftmom.cc:524
int numMom() const
Number of momenta.
Definition: sftmom.h:60
void write(XMLWriter &xml, const std::string &path, const AsqtadFermActParams &param)
Writer parameters.
void SpinTranspose(const LatticePropagator &prop, LatticePropagator &STprop)
Spin Transpose Function.
Definition: mesQlPOT_w.cc:276
void QlQlPOT(const multi1d< LatticeColorMatrix > &u, const LatticePropagator &quark1, const LatticePropagator &quark2, const multi1d< int > &src1, const multi1d< int > &src2, const SftMom &phases, XMLWriter &xml, const std::string &xml_group)
Heavy-light meson potential.
Definition: mesQlPOT_w.cc:45
void HeavyQuarkProp(LatticeColorMatrix &Qprop, const multi1d< LatticeColorMatrix > &u, const multi1d< int > &src_coord, int length, int bc)
Heavy Quark Propagator.
Definition: barQll_w.cc:149
std::map< std::string, SinkPropContainer_t > prop
unsigned j
Definition: ldumul_w.cc:35
Potential between 2 heavy mesons : Orginos and Savage.
Heavy light meson (Qlbar) 2-pt function : Orginos and Savage.
int t
Definition: meslate.cc:37
Nd
Definition: meslate.cc:74
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
static multi1d< LatticeColorMatrix > u
LatticeFermion tmp
Definition: mespbg5p_w.cc:36
void transpose(multi2d< LatticeColorVector > &dist_rep, const multi2d< LatticeColorVector > &prop_rep)
Take transpose of a matrix in (explicit) spin space.
push(xml_out,"Condensates")
int i
Definition: pbg5p_w.cc:55
pop(xml_out)
DComplex d
Definition: invbicg.cc:99
START_CODE()
::std::string string
Definition: gtest.h:1979
#define FORWARD
Definition: primitives.h:82
#define BACKWARD
Definition: primitives.h:83