CHROMA
syssolver_quda_multigrid_clover_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  SysSolverQUDAMULTIGRIDCloverParams::SysSolverQUDAMULTIGRIDCloverParams(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, "CloverParams", CloverParams);
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  read(paramtop, "SubspaceID", SaveSubspaceID);
98 
99  if( paramtop.count("ThresholdCount") == 1 ) {
100  read(paramtop, "ThresholdCount", ThresholdCount);
101  }
102  else {
103  ThresholdCount = 2*MaxIter + 1;
104  }
105 
106  if( paramtop.count("Pipeline") > 0 ) {
107  read(paramtop, "Pipeline", Pipeline);
108  }
109  else {
110  Pipeline=1;
111  }
112 
113  if( paramtop.count("MULTIGRIDParams") > 0 ) {
114  MULTIGRIDParams = new MULTIGRIDSolverParams(paramtop, "./MULTIGRIDParams");
115  MULTIGRIDParamsP = true;
116  }
117  else {
118  MULTIGRIDParamsP = false;
119  }
120 
121  if ( paramtop.count("BackupSolverParam") > 0 ) {
122  // If user specified a backup solver, let's read it
123  backup_invP = true;
124  backup_inv_param = readXMLGroup(paramtop, "./BackupSolverParam", "invType");
125  }
126  else {
127  // No backup
128  backup_invP = false;
129  backup_inv_param.xml = "";
130  }
131 
132  if ( paramtop.count("DumpOnFail") > 0 ) {
133  read(paramtop, "DumpOnFail", dump_on_failP);
134  }
135  else {
136  dump_on_failP = false;
137  }
138 
139  if ( paramtop.count("SolutionCheckP") > 0 ) {
140  read(paramtop, "SolutionCheckP", SolutionCheckP);
141  }
142  else {
143  SolutionCheckP = true; // default solution check is on
144  }
145 
146  }
147 
148  void read(XMLReader& xml, const std::string& path,
150  {
152  p = tmp;
153  }
154 
155  void write(XMLWriter& xml, const std::string& path,
157  push(xml, path);
158  write(xml, "MaxIter", p.MaxIter);
159  write(xml, "RsdTarget", p.RsdTarget);
160  write(xml, "CloverParams", p.CloverParams);
161  write(xml, "AntiPeriodicT", p.AntiPeriodicT);
162  write(xml, "Delta", p.Delta);
163  write(xml, "SolverType", p.solverType);
164  write(xml, "Verbose", p.verboseP);
165  write(xml, "AsymmetricLinop", p.asymmetricP);
166  write(xml, "CudaPrecision", p.cudaPrecision);
167  write(xml, "CudaReconstruct", p.cudaReconstruct);
168  write(xml, "CudaSloppyPrecision", p.cudaSloppyPrecision);
169  write(xml, "CudaSloppyReconstruct", p.cudaSloppyReconstruct);
170  write(xml, "AxialGaugeFix", p.axialGaugeP);
171  write(xml, "SilentFail", p.SilentFailP);
172  write(xml, "RsdToleranceFactor", p.RsdToleranceFactor);
173 
174  write(xml, "AutotuneDslash", p.tuneDslashP);
175 
176  //Write the MG persistence params.
177  write(xml, "SubspaceID", p.SaveSubspaceID);
178  write(xml, "ThresholdCount", p.ThresholdCount);
179  write(xml, "Pipeline", p.Pipeline);
180 
181  if( p.MULTIGRIDParamsP ) {
182  write(xml, "MULTIGRIDParams", *(p.MULTIGRIDParams));
183  }
184 
185  write(xml, "DumpOnFail", p.dump_on_failP);
186  write(xml, "SolutionCheckP", p.SolutionCheckP);
187 
188  if( p.backup_invP ) {
189  // Need to dump out the XML for the back up solver here...
190  // Turn XML into an std::istringstream
191  std::istringstream is( p.backup_inv_param.xml);
192  XMLReader tmp_reader(is);
193  // I wonder if this method works....
194  write(xml, "BackupSolverParam", tmp_reader);
195  }
196  pop(xml);
197 
198  }
199 
200 
201 
202 }
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 write(XMLWriter &xml, const std::string &path, const SysSolverQUDAMULTIGRIDCloverParams &p)
void read(XMLReader &xml, const std::string &path, SysSolverQUDAMULTIGRIDCloverParams &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.