CHROMA
inline_genprop_matelem_da_colorvec_w.cc
Go to the documentation of this file.
1 //
2 /*! \file
3  * \brief Compute the matrix element of LatticeColorVector*M^-1*Gamma*displace*M^-1**LatticeColorVector
4  *
5  * Generalized propagator calculation on a colorstd::vector for meson distribution amplitudes and parton dstribution functions
6  */
7 
8 #include "handle.h"
13 #include "meas/smear/displace.h"
14 #include "meas/glue/mesplq.h"
15 #include "qdp_map_obj.h"
16 #include "util/ferm/key_val_db.h"
18 #include "util/ft/sftmom.h"
19 #include "util/info/proginfo.h"
21 
23 
24 namespace Chroma
25 {
26  /*!
27  * \ingroup hadron
28  *
29  * @{
30  */
31  namespace InlineGenPropMatElemDAColorVecEnv
32  {
33  // Reader for input parameters
34  // Reader for input parameters
35  void read(XMLReader& xml, const std::string& path, Params::Param_t& param)
36  {
37  XMLReader paramtop(xml, path);
38 
39  int version;
40  read(paramtop, "version", version);
41 
42  switch (version)
43  {
44  case 1:
45  read(paramtop, "t_source", param.t_source);
46  read(paramtop, "t_sink", param.t_sink);
47  read(paramtop, "mom_max", param.mom_max);
48  read(paramtop, "boost_dir", param.boost_dir);
49  read(paramtop, "gamma", param.gamma);
50  read(paramtop, "num_vecs", param.num_vecs);
51  read(paramtop, "decay_dir", param.decay_dir);
52  read(paramtop, "mass_label", param.mass_label);
53  read(paramtop, "restrict_plateau", param.restrict_plateau);
54  break ;
55  default :
56  QDPIO::cerr << "Input parameter version " << version << " unsupported." << std::endl;
57  QDP_abort(1);
58  }
59 
60 
61  }
62 
63 
64  // Writer for input parameters
65  void write(XMLWriter& xml, const std::string& path, const Params::Param_t& param)
66  {
67  push(xml, path);
68 
69  int version = 1;
70 
71  write(xml, "version", version);
72  write(xml, "t_source", param.t_source);
73  write(xml, "t_sink", param.t_sink);
74  write(xml, "mom_max", param.mom_max);
75  write(xml, "boost_dir", param.boost_dir);
76  write(xml, "gamma", param.gamma);
77  write(xml, "num_vecs", param.num_vecs);
78  write(xml, "decay_dir", param.decay_dir);
79  write(xml, "mass_label", param.mass_label);
80  write(xml, "restrict_plateau", param.restrict_plateau);
81 
82  pop(xml);
83  }
84 
85  //! Read named objects
86  void read(XMLReader& xml, const std::string& path, Params::NamedObject_t& input)
87  {
88  XMLReader inputtop(xml, path);
89 
90  read(inputtop, "gauge_id", input.gauge_id);
91  read(inputtop, "sm_gauge_id", input.sm_gauge_id);
92  read(inputtop, "source_prop_id", input.source_prop_id);
93  read(inputtop, "sink_prop_id", input.sink_prop_id);
94  read(inputtop, "genprop_op_file", input.genprop_op_file);
95  }
96 
97  //! Write named objects
98  void write(XMLWriter& xml, const std::string& path, const Params::NamedObject_t& input)
99  {
100  push(xml, path);
101 
102  write(xml, "gauge_id", input.gauge_id);
103  write(xml, "sm_gauge_id", input.sm_gauge_id);
104  write(xml, "source_prop_id", input.source_prop_id);
105  write(xml, "sink_prop_id", input.sink_prop_id);
106  write(xml, "genprop_op_file", input.genprop_op_file);
107 
108  pop(xml);
109  }
110 
111  // Writer for input parameters
112  void write(XMLWriter& xml, const std::string& path, const Params& param)
113  {
114  param.writeXML(xml, path);
115  }
116  }
117 
118 
119  namespace InlineGenPropMatElemDAColorVecEnv
120  {
121  // Anonymous namespace for registration
122  namespace
123  {
124  AbsInlineMeasurement* createMeasurement(XMLReader& xml_in,
125  const std::string& path)
126  {
127  return new InlineMeas(Params(xml_in, path));
128  }
129 
130  //! Local registration flag
131  bool registered = false;
132  }
133 
134  const std::string name = "GENPROP_MATELEM_DA_COLORVEC";
135 
136  //! Register all the factories
137  bool registerAll()
138  {
139  bool success = true;
140  if (! registered)
141  {
142  success &= LinkSmearingEnv::registerAll();
143  success &= TheInlineMeasurementFactory::Instance().registerObject(name, createMeasurement);
144  registered = true;
145  }
146  return success;
147  }
148 
149 
150  //! Anonymous namespace
151  /*! Diagnostic stuff */
152  namespace
153  {
154  StandardOutputStream& operator<<(StandardOutputStream& os, const multi1d<int>& d)
155  {
156  if (d.size() > 0)
157  {
158  os << d[0];
159 
160  for(int i=1; i < d.size(); ++i)
161  os << " " << d[i];
162  }
163 
164  return os;
165  }
166  }
167 
168 
169  //----------------------------------------------------------------------------
170  // Param stuff
172  {
173  frequency = 0;
174  param.mom_max = 0;
175  }
176 
177  Params::Params(XMLReader& xml_in, const std::string& path)
178  {
179  try
180  {
181  XMLReader paramtop(xml_in, path);
182 
183  if (paramtop.count("Frequency") == 1)
184  read(paramtop, "Frequency", frequency);
185  else
186  frequency = 1;
187 
188  // Read program parameters
189  read(paramtop, "Param", param);
190 
191  // Read in the output propagator/source configuration info
192  read(paramtop, "NamedObject", named_obj);
193 
194  // Possible alternate XML file pattern
195  if (paramtop.count("xml_file") != 0)
196  {
197  read(paramtop, "xml_file", xml_file);
198  }
199  }
200  catch(const std::string& e)
201  {
202  QDPIO::cerr << __func__ << ": Caught Exception reading XML: " << e << std::endl;
203  QDP_abort(1);
204  }
205  }
206 
207 
208  void
209  Params::writeXML(XMLWriter& xml_out, const std::string& path) const
210  {
211  push(xml_out, path);
212 
213  // Parameters for source construction
214  write(xml_out, "Param", param);
215 
216  // Write out the output propagator/source configuration info
217  write(xml_out, "NamedObject", named_obj);
218 
219  pop(xml_out);
220  }
221 
222 
223  //----------------------------------------------------------------------------
224  //! Generalized propagator operator
226  {
227  int t_slice; /*!< Propagator time slice */
228  int t_source; /*!< Source time slice */
229  int t_sink; /*!< Source time slice */
230  int spin_l; /*!< Source spin index */
231  int spin_r; /*!< Sink spin index */
232  int gamma; /*!< The gamma matrix number - [0,Ns^2) */
233  multi1d<int> displacement; /*!< Displacement dirs of right colorstd::vector */
234  multi1d<int> mom; /*!< D-1 momentum of this operator */
235  std::string mass_label; /*!< A mass label */
236  };
237 
238  //! Generalized propagator operator
240  {
241  multi2d<ComplexD> op; /*!< Colorstd::vector source and sink with momentum projection */
242  };
243 
244 
245  //----------------------------------------------------------------------------
246  //! Holds key and value as temporaries
248  {
251  };
252 
253 
254  //----------------------------------------------------------------------------
255  //! KeyGenPropElementalOperator reader
256  void read(BinaryReader& bin, KeyGenPropElementalOperator_t& param)
257  {
258  read(bin, param.t_slice);
259  read(bin, param.t_source);
260  read(bin, param.t_sink);
261  read(bin, param.spin_l);
262  read(bin, param.spin_r);
263  read(bin, param.gamma);
264  read(bin, param.displacement);
265  read(bin, param.mom);
266  read(bin, param.mass_label, 32);
267  }
268 
269  //! GenPropElementalOperator write
270  void write(BinaryWriter& bin, const KeyGenPropElementalOperator_t& param)
271  {
272  write(bin, param.t_slice);
273  write(bin, param.t_source);
274  write(bin, param.t_sink);
275  write(bin, param.spin_l);
276  write(bin, param.spin_r);
277  write(bin, param.gamma);
278  write(bin, param.displacement);
279  write(bin, param.mom);
280  write(bin, param.mass_label);
281  }
282 
283 
284  //----------------------------------------------------------------------------
285  //! PropElementalOperator reader
286  void read(BinaryReader& bin, ValGenPropElementalOperator_t& param)
287  {
288  int n;
289  read(bin, n); // the size is always written, even if 0
290  param.op.resize(n,n);
291 
292  for(int i=0; i < n; ++i)
293  {
294  for(int j=0; j < n; ++j)
295  {
296  read(bin, param.op(i,j));
297  }
298  }
299  }
300 
301  //! GenPropElementalOperator write
302  void write(BinaryWriter& bin, const ValGenPropElementalOperator_t& param)
303  {
304  int n = param.op.size1(); // all sizes the same
305  write(bin, n);
306  for(int i=0; i < n; ++i)
307  {
308  for(int j=0; j < n; ++j)
309  {
310  write(bin, param.op(i,j));
311  }
312  }
313  }
314 
315 
316  //----------------------------------------------------------------------------
317  //! Normalize just one displacement array
318  multi1d<int> normDisp(const multi1d<int>& orig)
319  {
320  START_CODE();
321 
322  multi1d<int> disp;
323  multi1d<int> empty;
324  multi1d<int> no_disp(1); no_disp[0] = 0;
325 
326  // NOTE: a no-displacement is recorded as a zero-length array
327  // Convert a length one array with no displacement into a no-displacement array
328  if (orig.size() == 1)
329  {
330  if (orig == no_disp)
331  disp = empty;
332  else
333  disp = orig;
334  }
335  else
336  {
337  disp = orig;
338  }
339 
340  END_CODE();
341 
342  return disp;
343  } // void normDisp
344 
345 
346  //-------------------------------------------------------------------------------
347  // Function call
348  void
349  InlineMeas::operator()(unsigned long update_no,
350  XMLWriter& xml_out)
351  {
352  // If xml file not empty, then use alternate
353  if (params.xml_file != "")
354  {
355  std::string xml_file = makeXMLFileName(params.xml_file, update_no);
356 
357  push(xml_out, "GenPropMatElemDAColorVec");
358  write(xml_out, "update_no", update_no);
359  write(xml_out, "xml_file", xml_file);
360  pop(xml_out);
361 
362  XMLFileWriter xml(xml_file);
363  func(update_no, xml);
364  }
365  else
366  {
367  func(update_no, xml_out);
368  }
369  }
370 
371 
372  // Function call
373  void
374  InlineMeas::func(unsigned long update_no,
375  XMLWriter& xml_out)
376  {
377  START_CODE();
378 
379  StopWatch snoop;
380  snoop.reset();
381  snoop.start();
382 
383  StopWatch swiss;
384 
385  push(xml_out, "GenPropMatElemDAColorVec");
386  write(xml_out, "update_no", update_no);
387 
388  QDPIO::cout << name << ": Generalized propagator color-std::vector matrix element" << std::endl;
389 
390  // Test and grab a reference to the gauge field
391  XMLBufferWriter gauge_xml, sm_gauge_xml;
392  XMLReader source_prop_file_xml, source_prop_record_xml;
393  XMLReader sink_prop_file_xml, sink_prop_record_xml;
394  try
395  {
396  TheNamedObjMap::Instance().getData< multi1d<LatticeColorMatrix> >(params.named_obj.gauge_id);
397  TheNamedObjMap::Instance().get(params.named_obj.gauge_id).getRecordXML(gauge_xml);
398 
399  TheNamedObjMap::Instance().getData< multi1d<LatticeColorMatrix> >(params.named_obj.sm_gauge_id);
400  TheNamedObjMap::Instance().get(params.named_obj.sm_gauge_id).getRecordXML(sm_gauge_xml);
401 
403 
405 
406  // Snarf the prop info. This is will throw if the prop_id is not there
407  TheNamedObjMap::Instance().get(params.named_obj.source_prop_id).getFileXML(source_prop_file_xml);
408  TheNamedObjMap::Instance().get(params.named_obj.source_prop_id).getRecordXML(source_prop_record_xml);
409 
410  // Snarf the prop info. This is will throw if the prop_id is not there
411  TheNamedObjMap::Instance().get(params.named_obj.sink_prop_id).getFileXML(sink_prop_file_xml);
412  TheNamedObjMap::Instance().get(params.named_obj.sink_prop_id).getRecordXML(sink_prop_record_xml);
413  }
414  catch( std::bad_cast )
415  {
416  QDPIO::cerr << name << ": caught dynamic cast error" << std::endl;
417  QDP_abort(1);
418  }
419  catch (const std::string& e)
420  {
421  QDPIO::cerr << name << ": std::map call failed: " << e << std::endl;
422  QDP_abort(1);
423  }
424  // Cast should be valid now
425  const multi1d<LatticeColorMatrix>& u =
426  TheNamedObjMap::Instance().getData< multi1d<LatticeColorMatrix> >(params.named_obj.gauge_id);
427 
428  // Cast should be valid now
429  const multi1d<LatticeColorMatrix>& u_smr =
430  TheNamedObjMap::Instance().getData< multi1d<LatticeColorMatrix> >(params.named_obj.sm_gauge_id);
431 
432  QDP::MapObject<KeyPropColorVec_t,LatticeFermion>& source_ferm_map =
434 
435  QDP::MapObject<KeyPropColorVec_t,LatticeFermion>& sink_ferm_map =
437 
438  push(xml_out, "Output_version");
439  write(xml_out, "out_version", 2);
440  pop(xml_out);
441 
442  proginfo(xml_out); // Print out basic program info
443 
444  // Write out the input
445  params.writeXML(xml_out, "Input");
446 
447  // Write out the source header
448  write(xml_out, "Source_prop_file_info", source_prop_file_xml);
449  write(xml_out, "Source_prop_record_info", source_prop_record_xml);
450  write(xml_out, "Sink_prop_file_info", sink_prop_file_xml);
451  write(xml_out, "Sink_prop_record_info", sink_prop_record_xml);
452 
453  // Write out the config info
454  write(xml_out, "Config_info", gauge_xml);
455  write(xml_out, "Smeared_Config_info", sm_gauge_xml);
456 
457  //First calculate some gauge invariant observables just for info.
458  //This is really cheap.
459  MesPlq(xml_out, "Observables", u);
460  MesPlq(xml_out, "Smeared_Observables", u_smr);
461 
462  //
463  // Initialize the slow Fourier transform phases
464  //
465  multi1d<int> origin_offset(Nd);
466  origin_offset = 0;
467  multi1d<int> mom_offset(Nd);
468  mom_offset = 0;
469  SftMom phases(0, origin_offset, mom_offset,false, params.param.decay_dir);
470 
471  //
472  // DB storage
473  //
474  BinaryStoreDB< SerialDBKey<KeyGenPropElementalOperator_t>, SerialDBData<ValGenPropElementalOperator_t> >
475  qdp_db;
476 
477  // Open the file, and write the meta-data and the binary for this operator
478  if (! qdp_db.fileExists(params.named_obj.genprop_op_file))
479  {
480  XMLBufferWriter file_xml;
481 
482  push(file_xml, "DBMetaData");
483  write(file_xml, "id", std::string("genPropElemOp"));
484  write(file_xml, "lattSize", QDP::Layout::lattSize());
485  write(file_xml, "decay_dir", params.param.decay_dir);
486  proginfo(file_xml); // Print out basic program info
487  write(file_xml, "Params", params.param);
488  write(file_xml, "Op_Info", params.param.gamma);
489  write(file_xml, "Source_prop_record_info", source_prop_record_xml);
490  write(file_xml, "Sink_prop_record_info", sink_prop_record_xml);
491  write(file_xml, "Config_info", gauge_xml);
492  pop(file_xml);
493 
494  // NOTE: we always write a metadata, even if the file exists.
495  // Probably should not do this if a file already exists.
496  // Yukky, but add on a bunch of padding.
497  // This is in case a latter task writes another metadata.
498  std::string file_str(file_xml.str());
499  qdp_db.setMaxUserInfoLen(file_str.size());
500 
501  qdp_db.open(params.named_obj.genprop_op_file, O_RDWR | O_CREAT, 0664);
502 
503  qdp_db.insertUserdata(file_str);
504  }
505  else
506  {
507  qdp_db.open(params.named_obj.genprop_op_file, O_RDWR, 0664);
508  }
509 
510 
511  //
512  // Generalized propagatos
513  //
514  QDPIO::cout << "Building generalized propagators" << std::endl;
515 
516  push(xml_out, "ElementalOps");
517 
518  // Loop over all time slices for the source. This is the same
519  // as the subsets for phases
520 
521  const bool restrict_plateau = params.param.restrict_plateau;
522  const int num_vecs = params.param.num_vecs;
523  const int decay_dir = params.param.decay_dir;
524  const int t_source = params.param.t_source;
525  const int t_sink = params.param.t_sink;
526  const int z_dir = params.param.boost_dir ;
527  const int gamma = params.param.gamma ;
528 
529  int Nt = phases.numSubsets();
530  // Define the start and end region for the plateau
531  int t_start;
532  int t_end;
533 
534  if (restrict_plateau)
535  {
536  t_start = t_source;
537  t_end = t_sink;
538 
539  if (t_source > t_sink)
540  {
541  t_end += phases.numSubsets();
542  }
543  }
544  else
545  {
546  t_start = 0;
547  t_end = phases.numSubsets() - 1;
548  }
549 
550  // Loop over momenta
551  for(int p=0; p < params.param.mom_max; ++p)
552  {
553  StopWatch watch;
554  multi1d<int> mom(3); mom=0 ; mom[z_dir]=p;
555  Double phi = (6.28318530717958647696*p)/toDouble(Layout::lattSize()[z_dir]);
556  QDPIO::cout << "Boost Momentum: p = " << p << std::endl;
557 
558  swiss.reset();
559  swiss.start();
560 
561  // Loop over spins
562  for(int spin_r=0; spin_r < Ns; ++spin_r){
563  QDPIO::cout << "spin_r = " << spin_r << std::endl;
564  for(int spin_l=0; spin_l < Ns; ++spin_l){
565  QDPIO::cout << "spin_l = " << spin_l << std::endl;
566  // The keys for the spin and displacements
567  // for this particular elemental operator
568  // No displacement for left colorstd::vector,
569  // only displace right colorstd::vector
570 
571  // Invert the time - make it an independent key
572  multi2d<KeyValGenPropElementalOperator_t> buf(Layout::lattSize()[z_dir],phases.numSubsets());
573  for( int z(0);z<Layout::lattSize()[z_dir];z++){
574  multi1d<int> disp(Nd-1); disp=0 ; disp[z_dir]=z;
575  for(int tt=t_start; tt <= t_end; ++tt){
576  // mod back into a normal interval
577  int t = tt % phases.numSubsets();
578  buf(z,t).key.key().t_slice = t;
579  buf(z,t).key.key().t_source = t_source;
580  buf(z,t).key.key().t_sink = t_sink;
581  buf(z,t).key.key().spin_r = spin_r;
582  buf(z,t).key.key().spin_l = spin_l;
583  buf(z,t).key.key().mass_label = params.param.mass_label;
584  buf(z,t).key.key().mom = mom;
585  buf(z,t).key.key().gamma = gamma;
586  buf(z,t).key.key().displacement = disp;
587  buf(z,t).val.data().op.resize(num_vecs, num_vecs);
588  }
589  }
590  for(int j = 0; j < params.param.num_vecs; ++j){
591  KeyPropColorVec_t key_r;
592  key_r.t_source = t_source;
593  key_r.colorvec_src = j;
594  key_r.spin_src = spin_r;
595 
596  // Displace the right std::vector and multiply by the momentum phase
597 
598  LatticeFermion shift_ferm;
599  LatticeFermion src_ferm; source_ferm_map.get(key_r, src_ferm);
600  for( int z(0);z<Layout::lattSize()[z_dir];z++){
601  multi1d<int> disp(Nd-1); disp=0 ; disp[z_dir]=z;
602  if(z==0)
603  shift_ferm=src_ferm ;
604  else{
605  LatticeFermion tt = shift(shift_ferm,BACKWARD,z_dir);
606  shift_ferm=u_smr[z_dir]*tt;
607  }
608  for(int i = 0; i < params.param.num_vecs; ++i){
609  KeyPropColorVec_t key_l;
610  key_l.t_source = t_sink;
611  key_l.colorvec_src = i;
612  key_l.spin_src = spin_l;
613 
614  watch.reset();
615  watch.start();
616 
617  // Contract over color indices
618  // Do the relevant quark contraction
619  LatticeFermion tt; sink_ferm_map.get(key_l, tt);
620 
621  // I need to rember to fold the Gamma_5 on
622  // the source into the interpolating field
623  LatticeFermion snk=Gamma(Nd*Nd-1)*tt;
624  LatticeComplex lop = localInnerProduct(snk, shift_ferm);
625  LatticeReal foo = phi*Layout::latticeCoordinate(z_dir);
626  LatticeComplex phase = cmplx(cos(foo),sin(foo));
627  // Slow fourier-transform
628  multi1d<ComplexD> op_sum=sumMulti(phase*lop,phases.getSet());
629  watch.stop();
630  for(int tt=t_start; tt <= t_end; ++tt){
631  // mod back into a normal interval
632  int t = tt % phases.numSubsets();
633  buf(z,t).val.data().op(i,j) = op_sum[t];
634  }// loop over time
635  }// loop over left (i)
636  }// loop over displacements
637  }//loop over right (j)
638  QDPIO::cout << "insert: mom= " << mom << std::endl ;
639  for( int z(0);z<Layout::lattSize()[z_dir];z++){
640  for(int tt=t_start; tt <= t_end; ++tt){
641  // mod back into a normal interval
642  int t = tt % phases.numSubsets();
643  qdp_db.insert(buf(z,t).key, buf(z,t).val);
644  } // loop over tt
645  }// loop over z
646  } // end for spin_l
647  } // end for spin_r
648  swiss.stop();
649  QDPIO::cout << "GenProp mom= "<<p
650  << " time= "
651  << swiss.getTimeInSeconds()
652  << " secs" << std::endl;
653  } // loop over momenta
654 
655 
656  pop(xml_out); // ElementalOps
657 
658  // Close the namelist output file XMLDAT
659  pop(xml_out); // GenPropMatElemDAColorVector
660 
661  snoop.stop();
662  QDPIO::cout << name << ": total time = "
663  << snoop.getTimeInSeconds()
664  << " secs" << std::endl;
665 
666  QDPIO::cout << name << ": ran successfully" << std::endl;
667 
668  END_CODE();
669  } // func
670  } // namespace InlineGenPropMatElemDAColorVecEnv
671 
672  /*! @} */ // end of group hadron
673 
674 } // namespace Chroma
Inline measurement factory.
Class for counted reference semantics.
Definition: handle.h:33
void func(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
void operator()(const unsigned long update_no, XMLWriter &xml_out)
Do the measurement.
Serializable value harness.
Definition: key_val_db.h:69
Serializable key harness.
Definition: key_val_db.h:21
Fourier transform phase factor support.
Definition: sftmom.h:35
int numSubsets() const
Number of subsets - length in decay direction.
Definition: sftmom.h:63
const Set & getSet() const
The set to be used in sumMulti.
Definition: sftmom.h:57
static T & Instance()
Definition: singleton.h:432
Parallel transport a lattice field.
void proginfo(XMLWriter &xml)
Print out basic information about this program.
Definition: proginfo.cc:24
std::string makeXMLFileName(std::string xml_file, unsigned long update_no)
Return a xml file name for inline measurements.
Class for counted reference semantics.
Compute the matrix element of LatticeColorVector*M^-1*Gamma*displace*M^-1**LatticeColorVector.
Key for propagator colorstd::vector sources.
Key and values for DB.
unsigned j
Definition: ldumul_w.cc:35
unsigned n
Definition: ldumul_w.cc:36
Make xml file writer.
int z
Definition: meslate.cc:36
int t
Definition: meslate.cc:37
Nd
Definition: meslate.cc:74
LatticeReal phi
Definition: mesq.cc:27
Named object function std::map.
static bool registered
Local registration flag.
multi1d< int > normDisp(const multi1d< int > &orig)
Normalize just one displacement array.
void write(XMLWriter &xml, const std::string &path, const Params::Param_t &param)
void read(XMLReader &xml, const std::string &path, Params::Param_t &param)
QDPSubTypeTrait< typename BinaryReturn< C1, C2, FnLocalInnerProduct >::Type_t >::Type_t localInnerProduct(const QDPSubType< T1, C1 > &l, const QDPType< T2, C2 > &r)
bool registerAll()
Register all the factories.
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
QDP::StandardOutputStream & operator<<(QDP::StandardOutputStream &s, const multi1d< int > &d)
Definition: npr_vertex_w.cc:12
static multi1d< LatticeColorMatrix > u
push(xml_out,"Condensates")
int i
Definition: pbg5p_w.cc:55
pop(xml_out)
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
Definition: mesplq.cc:83
DComplex d
Definition: invbicg.cc:99
START_CODE()
FloatingPoint< double > Double
Definition: gtest.h:7351
::std::string string
Definition: gtest.h:1979
#define BACKWARD
Definition: primitives.h:83
Print out basic info about this program.
Fourier transform phase factor support.
void writeXML(XMLWriter &xml_out, const std::string &path) const