CHROMA
syssolver_quda_nef_params.cc
Go to the documentation of this file.
2 #include "chromabase.h"
3 #include "io/xml_group_reader.h"
4 #include "chroma_config.h"
5 
6 
7 
8 using namespace QDP;
9 
10 namespace Chroma {
11 
12  SysSolverQUDANEFParams::SysSolverQUDANEFParams(XMLReader& xml,
13  const std::string& path)
14  {
15  XMLReader paramtop(xml, path);
16 
17  read(paramtop, "MaxIter", MaxIter);
18  read(paramtop, "RsdTarget", RsdTarget);
19  read(paramtop, "NEFParams", NEFParams);
20  read(paramtop, "AntiPeriodicT", AntiPeriodicT);
21 
22  read(paramtop, "Delta", Delta);
23 
24 
25  read(paramtop, "SolverType", solverType);
26 
27  if ( paramtop.count("Verbose") > 0 ) {
28  read(paramtop, "Verbose", verboseP);
29  }
30  else {
31  verboseP = false;
32  }
33  if ( paramtop.count("AsymmetricLinop") > 0 ) {
34  read(paramtop, "AsymmetricLinop", asymmetricP);
35  }
36  else {
37  asymmetricP = false; // Symmetric is default
38  }
39 
40  if( paramtop.count("CudaPrecision") > 0 ) {
41  read(paramtop, "CudaPrecision", cudaPrecision);
42  }
43  else {
44  cudaPrecision = DEFAULT;
45  }
46 
47  if( paramtop.count("CudaSloppyPrecision") > 0 ) {
48  read(paramtop, "CudaSloppyPrecision", cudaSloppyPrecision);
49  }
50  else {
51  cudaSloppyPrecision = DEFAULT;
52  }
53 
54  if( paramtop.count("CudaReconstruct") > 0 ) {
55  read(paramtop, "CudaReconstruct", cudaReconstruct);
56  }
57  else {
58  cudaReconstruct = RECONS_12;
59  }
60 
61  if( paramtop.count("CudaSloppyReconstruct") > 0 ) {
62  read(paramtop, "CudaSloppyReconstruct", cudaSloppyReconstruct);
63  }
64  else {
65  cudaSloppyReconstruct = RECONS_12;
66  }
67 
68  if( paramtop.count("AxialGaugeFix") > 0 ) {
69  read(paramtop, "AxialGaugeFix", axialGaugeP);
70  }
71  else {
72  axialGaugeP = false;
73  }
74 
75  if( paramtop.count("SilentFail") > 0) {
76  read(paramtop, "SilentFail", SilentFailP);
77  }
78  else {
79  SilentFailP = false;
80  }
81 
82  if( paramtop.count("RsdToleranceFactor") > 0 ) {
83  read(paramtop, "RsdToleranceFactor", RsdToleranceFactor);
84  }
85  else {
86  RsdToleranceFactor = Real(10); // Tolerate an order of magnitude difference by default.
87  }
88 
89  if( paramtop.count("AutotuneDslash") > 0 ) {
90  read(paramtop, "AutotuneDslash", tuneDslashP);
91  }
92  else {
93  tuneDslashP = false;
94  }
95  QDPIO::cout << "tuneDslasP = " << tuneDslashP << std::endl;
96 
97 
98  if( paramtop.count("GCRInnerParams") > 0 ) {
99  innerParams = new GCRInnerSolverParams(paramtop, "./GCRInnerParams");
100  innerParamsP = true;
101  }
102  else {
103  innerParamsP = false;
104  }
105 
106  if ( paramtop.count("BackupSolverParam") > 0 ) {
107  // If user specified a backup solver, let's read it
108  backup_invP = true;
109  backup_inv_param = readXMLGroup(paramtop, "./BackupSolverParam", "invType");
110  }
111  else {
112  // No backup
113  backup_invP = false;
114  backup_inv_param.xml = "";
115  }
116 
117  if ( paramtop.count("DumpOnFail") > 0 ) {
118  read(paramtop, "DumpOnFail", dump_on_failP);
119  }
120  else {
121  dump_on_failP = false;
122  }
123 
124  if ( paramtop.count("DoCGNR") > 0 ) {
125  read(paramtop, "DoCGNR", cgnrP);
126  }
127  else {
128  cgnrP = false ; // Do CGNE by default
129  }
130 
131  if( paramtop.count("Pipeline") > 0 ) {
132  read(paramtop, "Pipeline", Pipeline);
133  }
134  else {
135  Pipeline = 1;
136  }
137  }
138 
139  void read(XMLReader& xml, const std::string& path,
141  {
142  SysSolverQUDANEFParams tmp(xml, path);
143  p = tmp;
144  }
145 
146  void write(XMLWriter& xml, const std::string& path,
147  const SysSolverQUDANEFParams& p) {
148  push(xml, path);
149  write(xml, "MaxIter", p.MaxIter);
150  write(xml, "RsdTarget", p.RsdTarget);
151  write(xml, "NEFParams", p.NEFParams);
152  write(xml, "AntiPeriodicT", p.AntiPeriodicT);
153  write(xml, "Delta", p.Delta);
154  write(xml, "SolverType", p.solverType);
155  write(xml, "Verbose", p.verboseP);
156  write(xml, "AsymmetricLinop", p.asymmetricP);
157  write(xml, "CudaPrecision", p.cudaPrecision);
158  write(xml, "CudaReconstruct", p.cudaReconstruct);
159  write(xml, "CudaSloppyPrecision", p.cudaSloppyPrecision);
160  write(xml, "CudaSloppyReconstruct", p.cudaSloppyReconstruct);
161  write(xml, "AxialGaugeFix", p.axialGaugeP);
162  write(xml, "SilentFail", p.SilentFailP);
163  write(xml, "RsdToleranceFactor", p.RsdToleranceFactor);
164 
165  write(xml, "AutotuneDslash", p.tuneDslashP);
166  if( p.innerParamsP ) {
167  write(xml, "GCRInnerParams", *(p.innerParams));
168  }
169 
170  write(xml, "DumpOnFail", p.dump_on_failP);
171  write(xml, "DoCGNR", p.cgnrP );
172  write(xml, "Pipeline", p.Pipeline);
173  if( p.backup_invP ) {
174  // Need to dump out the XML for the back up solver here...
175  // Turn XML into an std::istringstream
176  std::istringstream is( p.backup_inv_param.xml);
177  XMLReader tmp_reader(is);
178  // I wonder if this method works....
179  write(xml, "BackupSolverParam", tmp_reader);
180  }
181  pop(xml);
182 
183  }
184 
185 
186 
187 }
Primary include file for CHROMA library code.
GroupXML_t readXMLGroup(XMLReader &xml_in, const std::string &path, const std::string &type_name)
Read group and return as a std::string.
Double tmp
Definition: meslate.cc:60
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
void read(XMLReader &xml, const std::string &path, SysSolverQUDANEFParams &p)
void write(XMLWriter &xml, const std::string &path, const SysSolverQUDANEFParams &p)
@ RECONS_12
Definition: enum_quda_io.h:80
::std::string string
Definition: gtest.h:1979
push(xml_out,"Cooled_Topology")
pop(xml_out)
Read an XML group as a std::string.