CHROMA
stout_fermstate_params.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief Stout fermstate params
3  */
4 
6 
7 
8 namespace Chroma
9 {
10 
12  {
13  rho.resize(Nd, Nd);
14  smear_in_this_dirP.resize(Nd);
15 
16  n_smear = 0;
17  rho = sm_fact = zero;
18  smear_in_this_dirP = true;
19  }
20 
21 
23  {
24  try
25  {
26  XMLReader paramtop(in, path);
27 
28  rho.resize(Nd, Nd);
29 
30  int version = 1;
31  if( paramtop.count("version") == 1 )
32  read(paramtop, "version", version);
33 
34  read(paramtop, "rho", sm_fact);
35  read(paramtop, "n_smear", n_smear);
36 
37  switch (version)
38  {
39  case 1:
40  {
41  int orthog_dir = Nd;
42 
43  if( paramtop.count("orthog_dir") == 1 ) {
44  read(paramtop, "orthog_dir", orthog_dir);
45  }
46  else {
47  // default value for orthog dir is 3 -- smear in space only
48  QDPIO::cout << "Using Default value: orthog_dir = 3, spatial only smearing" << std::endl;
49  }
50 
51  if (paramtop.count("smear_in_this_dirP") > 0)
52  {
53  QDPIO::cerr << __func__ << ": found a smear_in_this_dirP in version 1. You need version 2 or higher" << std::endl;
54  QDP_abort(1);
55  }
56 
57  smear_in_this_dirP.resize(Nd);
58  smear_in_this_dirP = true;
59 
60  if (orthog_dir >= 0 && orthog_dir < Nd)
61  {
62  smear_in_this_dirP[orthog_dir] = false;
63  }
64  }
65  break;
66 
67  case 2:
68  {
69  read(paramtop, "smear_in_this_dirP", smear_in_this_dirP);
70  }
71  break;
72 
73  default:
74  QDPIO::cerr << __func__ << ": parameter version " << version
75  << " unsupported." << std::endl;
76  QDP_abort(1);
77  }
78  }
79  catch(const std::string& e)
80  {
81  QDPIO::cout << "Failed to read stout action XML:" << e << std::endl;
82  }
83 
84 
85  // Sanity check
86  if (smear_in_this_dirP.size() != Nd)
87  {
88  QDPIO::cerr << __func__ << ": invalid size of smear_in_this_dirP, expecting size=Nd" << std::endl;
89  QDP_abort(1);
90  }
91 
92 
93  // For each (mu,nu) set sm_fact_array(mu,nu)=sm_fact
94  // (Isotropy). Since mu != nu ever, we set those
95  // to zero for safety
96  for(int mu=0; mu < Nd; mu++)
97  {
98  for(int nu=0; nu < Nd; nu++)
99  {
100  if( mu != nu ) {
101  rho[mu][nu] = sm_fact;
102  }
103  else {
104  // Set the rho to 0 if mu==nu
105  rho[mu][nu] = 0;
106  }
107  }
108  }
109 
110  // Zero out any directions that are not smeared
111  for(int mu=0; mu < Nd; mu++)
112  {
113  if( ! smear_in_this_dirP[mu] )
114  {
115  for(int nu=0; nu < Nd; nu++) {
116  rho[mu][nu] = 0;
117  rho[nu][mu] = 0;
118  }
119  }
120  }
121  }
122 
123  void read(XMLReader& xml, const std::string& path, StoutFermStateParams& p)
124  {
125  StoutFermStateParams tmp_p(xml, path);
126  p = tmp_p;
127  }
128 
129  void write(XMLWriter& xml, const std::string& path, const StoutFermStateParams& p)
130  {
131  push(xml, path);
132  int version = 2;
133  write(xml, "version", version);
134  write(xml, "rho", p.sm_fact);
135  write(xml, "n_smear", p.n_smear);
136  write(xml, "smear_in_this_dirP", p.smear_in_this_dirP);
137  pop(xml);
138  }
139 
140 
141 }
142 
int mu
Definition: cool.cc:24
int nu
Definition: cool.cc:25
void read(XMLReader &xml, const std::string &path, AsqtadFermActParams &param)
Read parameters.
void write(XMLWriter &xml, const std::string &path, const AsqtadFermActParams &param)
Writer parameters.
Nd
Definition: meslate.cc:74
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
push(xml_out,"Condensates")
pop(xml_out)
Double zero
Definition: invbicg.cc:106
static QDP_ColorVector * in
::std::string string
Definition: gtest.h:1979
StoutFermStateParams()
Default constructor.