CHROMA
t_ritz5d_KS.cc
Go to the documentation of this file.
1 
2 #include "chroma.h"
3 
4 using namespace Chroma;
5 
6 // Struct for test parameters
7 //
8 struct Param_t {
9  multi1d<int> nrow;
10  multi1d<int> boundary;
11  multi1d<int> rng_seed;
12  Cfg_t cfg;
13 
14  Real quark_mass;
15  Real rsd_r;
16  Real rsd_a;
17  Real rsd_zero;
19  bool projApsiP;
20  int n_eig;
21  int n_dummy;
22  int max_cg;
23  int max_KS;
24 
25  Real wilson_mass;
26  int approx_order;
27  Real approx_min;
28  Real approx_max;
29 
30 };
31 
32 // Declare routine to read the parameters
33 void readParams(const std::string& filename, Param_t& params)
34 {
35  XMLReader reader(filename);
36 
37  try
38  {
39  // Read Params
40  read(reader, "/params/lattice/nrow", params.nrow);
41  read(reader, "/params/lattice/boundary", params.boundary);
42  read(reader, "/params/RNG/seed", params.rng_seed);
43  read(reader, "/params/quarkMass", params.quark_mass);
44 
45  read(reader, "/params/Cfg", params.cfg);
46 
47  read(reader, "/params/eig/RsdR", params.rsd_r);
48  read(reader, "/params/eig/RsdA", params.rsd_a);
49  read(reader, "/params/eig/RsdZero", params.rsd_zero);
50  read(reader, "/params/eig/gammaFactor", params.gamma_factor);
51  read(reader, "/params/eig/ProjApsiP", params.projApsiP);
52  read(reader, "/params/eig/MaxKS", params.max_KS);
53  read(reader, "/params/eig/MaxCG", params.max_cg);
54  read(reader, "/params/eig/Neig", params.n_eig);
55  read(reader, "/params/eig/Ndummy", params.n_dummy);
56  read(reader, "/params/zolotarev/approxOrder", params.approx_order);
57  read(reader, "/params/zolotarev/approxMin", params.approx_min);
58  read(reader, "/params/zolotarev/approxMax", params.approx_max);
59  read(reader, "/params/zolotarev/wilsonMass", params.wilson_mass);
60 
61  }
62  catch(const std::string& e) {
63  throw e;
64  }
65 }
66 
67 void dumpParams(XMLWriter& writer, Param_t& params)
68 {
69  push(writer, "params");
70  push(writer, "lattice");
71  write(writer, "nrow", params.nrow);
72  write(writer, "boundary", params.boundary);
73  pop(writer); // lattice
74  push(writer, "RNG");
75  write(writer, "seed", params.rng_seed);
76  pop(writer); // RNG
77 
78  write(writer, "quarkMass", params.quark_mass);
79  write(writer, "Cfg", params.cfg);
80 
81  push(writer, "eig");
82  write(writer, "RsdR", params.rsd_r);
83  write(writer, "MaxCG", params.max_cg);
84  write(writer, "Neig", params.n_eig);
85  write(writer, "Ndummy", params.n_dummy);
86  write(writer, "RsdA", params.rsd_a);
87  write(writer, "RsdZero", params.rsd_zero);
88  write(writer, "ProjApsiP", params.projApsiP);
89  write(writer, "gammaParam", params.gamma_factor);
90  pop(writer); // Eig
91 
92  push(writer, "zolotarev");
93  write(writer, "approxOrder", params.approx_order);
94  write(writer, "approxMin", params.approx_min);
95  write(writer, "approxMax", params.approx_max);
96  write(writer, "wilsonMass", params.wilson_mass);
97  pop(writer); // Zolotarev
98 
99  pop(writer); // params
100 }
101 
102 
103 int main(int argc, char **argv)
104 {
105  // Put the machine into a known state
106  Chroma::initialize(&argc, &argv);
107 
108  // Read the parameters
109  Param_t params;
110 
111  try {
113  }
114  catch(const std::string& s) {
115  QDPIO::cerr << "Caught exception " << s << std::endl;
116  exit(1);
117  }
118 
119 
120  // Setup the lattice
121  Layout::setLattSize(params.nrow);
122  Layout::create();
123 
124  // Write out the params
125  XMLFileWriter& xml_out = Chroma::getXMLOutputInstance();
126  push(xml_out, "ritzTest");
127 
128  dumpParams(xml_out, params);
129 
130  // The Gauge Field
131  multi1d<LatticeColorMatrix> u(Nd);
132  XMLReader gauge_file_xml, gauge_xml;
133  gaugeStartup(gauge_file_xml, gauge_xml, u, params.cfg);
134 
135  // Measure the plaquette on the gauge
136  MesPlq(xml_out, "Observables", u);
137  xml_out.flush();
138 
139  //! Wilsoniums;
140 
141  // Create a FermBC
143 
144  // Auxiliary action
146 
147  Handle< FermBC< multi1d<LatticeFermion> > > fbc5(new SimpleFermBC<multi1d<LatticeFermion> >(params.boundary));
148 
149  XMLBufferWriter my_writer;
151  S_w,
152  params.quark_mass,
153  params.approx_order,
154  my_writer);
155 
156  Handle< const ConnectState > connect_state(S.createState(u,
157  Real(params.approx_min),
158  Real(params.approx_max)));
159 
161 
162  // Dump Zolo Info
163  xml_out << my_writer;
164 
165  // Get back 5th dim length
166  int N5 = S.size();
167 
168  int n_dummy = 2;
169  // Try and get lowest eigenvalue of MM
170  multi1d<Real> lambda(params.n_eig+params.n_dummy);
171  multi1d<Real> check_norm(params.n_eig);
172  multi2d<LatticeFermion> psi(params.n_eig+params.n_dummy, N5);
173 
174  int n_renorm = 10;
175  int n_min = 5;
176  bool ProjApsiP = true;
177  int n_CG_count;
178 
179 
180  Real delta_cycle = Real(1);
181  Real gamma_factor = Real(1);
182 
183 
184  XMLBufferWriter eig_spec_xml;
185 
186  for(int i =0; i < params.n_eig+ params.n_dummy; i++) {
187  for(int n=0; n < N5; n++) {
188  gaussian(psi[i][n]);
189  }
190  lambda[i] = Real(1);
191  }
192 
193  int n_KS_count = 0;
194  int n_jacob_count = 0;
195  EigSpecRitzKS(*MM,
196  lambda,
197  psi,
198  params.n_eig,
199  params.n_dummy, // No of dummies
200  n_renorm,
201  n_min,
202  200, // Max iters / KS cycle
203  params.max_KS, // Max no of KS cycles
204  params.gamma_factor, // Gamma factor
205  params.max_cg,
206  params.rsd_r,
207  params.rsd_a,
208  params.rsd_zero,
209  params.projApsiP,
210  n_CG_count,
211  n_KS_count,
212  n_jacob_count,
213  eig_spec_xml);
214 
215  xml_out << eig_spec_xml;
216  write(xml_out, "lambda", lambda);
217 
218  // Check norms
219  for(int i=0; i < params.n_eig; i++) {
220  multi1d<LatticeFermion> Me(N5);
221  multi1d<LatticeFermion> lambda_e(N5);
222  (*MM)(Me, psi[i], PLUS);
223  for(int n =0; n < N5; n++) {
224  lambda_e[n] = lambda[i]*psi[i][n];
225  }
226 
227  multi1d<LatticeFermion> r_norm(N5);
228  for(int n=0; n < N5; n++) {
229  r_norm[n] = Me[n] - lambda_e[n];
230  }
231 
232  check_norm[i] = norm2(r_norm[0]);
233  for(int n=1; n < N5; n++) {
234  check_norm[i] += norm2(r_norm[n]);
235  }
236 
237  check_norm[i] = sqrt(check_norm[i]);
238  }
239  write(xml_out, "check_norm", check_norm);
240 
241  for(int i=0; i < params.n_eig; i++) {
242  check_norm[i] /= fabs(lambda[i]);
243  }
244  write(xml_out, "check_norm_rel", check_norm);
245 
246 
247  // Fix to ev-s of Matrix
248  // Try to get one:
250 
251  multi1d<bool> valid_eig(params.n_eig);
252  int n_valid;
253  int n_jacob;
254 
255  fixMMev2Mev(*M, lambda, psi, params.n_eig, params.rsd_r,
256  params.rsd_a, params.rsd_zero, valid_eig, n_valid, n_jacob);
257 
258 
259 
260  push(xml_out, "eigFix");
261  write(xml_out, "lambda", lambda);
262  write(xml_out, "n_valid", n_valid);
263  write(xml_out, "valid_eig", valid_eig);
264  for(int i=0; i < params.n_eig; i++) {
265  multi1d<LatticeFermion> Me(N5);
266  (*M)(Me, psi[i], PLUS);
267 
268  bool zeroP = toBool( fabs(lambda[i]) < params.rsd_zero );
269  if( zeroP ) {
270  check_norm[i] = norm2(Me[0]);
271  for(int n=1; n < N5; n++) {
272  check_norm[i] += norm2(Me[n]);
273  }
274  check_norm[i] = sqrt(check_norm[i]);
275  }
276  else {
277  multi1d<LatticeFermion> lambda_e(N5);
278  multi1d<LatticeFermion> r_norm(N5);
279 
280  for( int n=0; n < N5; n++) {
281  lambda_e[n] = lambda[i]*psi[i][n];
282  r_norm[n] = Me[n] - lambda_e[n];
283  }
284 
285  check_norm[i] = norm2(r_norm[0]);
286  for( int n=1; n < N5; n++) {
287  check_norm[i] += norm2(r_norm[n]);
288  }
289 
290  check_norm[i] = sqrt(check_norm[i]);
291  }
292 
293  QDPIO::cout << "check_norm["<<i+1<<"] = " << check_norm[i] << std::endl;
294  }
295  write(xml_out, "check_norm", check_norm);
296 
297  for(int i=0; i < params.n_eig; i++) {
298  check_norm[i] /= fabs(lambda[i]);
299  QDPIO::cout << "check_norm_rel["<< i+1 <<"] = " << check_norm[i] << std::endl;
300  }
301  write(xml_out, "check_norm_rel", check_norm);
302  pop(xml_out);
303 
304 
305  for(int i=0; i < params.n_eig;i++ ) {
306  lambda[i] /= (Nd + params.quark_mass);
307  }
308  write(xml_out, "szinLamda", lambda);
309 
310  pop(xml_out);
312 
313  exit(0);
314 }
Primary include file for CHROMA in application codes.
Class for counted reference semantics.
Definition: handle.h:33
Concrete class for all gauge actions with simple boundary conditions.
Definition: simple_fermbc.h:42
5D continued fraction overlap action (Borici,Wenger, Edwards)
OverlapConnectState * createState(const multi1d< LatticeColorMatrix > &u, XMLReader &state_info_xml, const std::string &state_info_path) const
Create OverlapConnectState from XML.
UnprecLinearOperatorArray< T, P, Q > * linOp(Handle< FermState< T, P, Q > > state) const
Produce a linear operator for this action.
Unpreconditioned Wilson fermion action.
virtual DiffLinearOperatorArray< T, P, Q > * lMdagM(Handle< FermState< T, P, Q > > state) const
Produce a linear operator M^dag.M for this action.
Definition: fermact.orig.h:410
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.
void gaugeStartup(XMLReader &gauge_file_xml, XMLReader &gauge_xml, multi1d< LatticeColorMatrix > &u, Cfg_t &cfg)
Initialize the gauge fields.
Params params
unsigned n
Definition: ldumul_w.cc:36
Nd
Definition: meslate.cc:74
Handle< FermBC< LatticeStaggeredFermion, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > reader(XMLReader &xml_in, const std::string &path)
Helper function for the FermionAction readers.
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
gaussian(aux)
void fixMMev2Mev(const LinearOperator< LatticeFermion > &M, multi1d< Real > &lambda, multi1d< LatticeFermion > &ev_psi, const int n_eig, const Real &Rsd_r, const Real &Rsd_a, const Real &zero_cutoff, multi1d< bool > &valid_eig, int &n_valid, int &n_jacob)
Definition: eig_spec.cc:321
void EigSpecRitzKS(const LinearOperator< LatticeFermion > &M, multi1d< Real > &lambda_H, multi1d< LatticeFermion > &psi, int n_eig, int n_dummy, int n_renorm, int n_min, int n_max, int n_max_KS, const Real &gamma_factor, int MaxCG, const Real &Rsd_r, const Real &Rsd_a, const Real &zero_cutoff, const bool ProjApsiP, int &n_cg_tot, int &n_KS, int &n_jacob_tot, XMLWriter &xml_out)
Definition: eig_spec.cc:124
static multi1d< LatticeColorMatrix > u
push(xml_out,"Condensates")
int i
Definition: pbg5p_w.cc:55
void initialize(int *argc, char ***argv)
Chroma initialisation routine.
Definition: chroma_init.cc:114
@ PLUS
Definition: chromabase.h:45
void finalize(void)
Chroma finalization routine.
Definition: chroma_init.cc:308
std::string getXMLInputFileName()
Get input file name.
Definition: chroma_init.cc:88
LatticeFermion psi
Definition: mespbg5p_w.cc:35
pop(xml_out)
void MesPlq(const multi1d< LatticeColorMatrixF3 > &u, multi2d< Double > &plane_plaq, Double &link)
Definition: mesplq.cc:83
XMLFileWriter & getXMLOutputInstance()
Get xml output instance.
Definition: chroma_init.cc:359
multi1d< LatticeFermion > s(Ncb)
::std::string string
Definition: gtest.h:1979
Double r_norm
Definition: pade_trln_w.cc:86
Gauge configuration structure.
Definition: cfgtype_io.h:16
Parameters for running program.
Definition: qpropadd.cc:17
Real approx_min
Definition: t_ritz5d_KS.cc:27
Real gamma_factor
Definition: t_ritz5d_KS.cc:18
Real approx_max
Definition: t_ritz5d_KS.cc:28
int max_KS
Definition: t_ritz5d_KS.cc:23
int n_dummy
Definition: t_ritz5d_KS.cc:21
void readParams(const std::string &filename, Param_t &params)
Definition: t_ritz5d_KS.cc:33
int main(int argc, char **argv)
Definition: t_ritz5d_KS.cc:103
void dumpParams(XMLWriter &writer, Param_t &params)
Definition: t_ritz5d_KS.cc:67