LatticeYangMills
jsonapp.cpp
1 #include "InputOutput/JsonInput/json.hpp"
2 #include "InputOutput/JsonInput/jsoninput.h"
3 #include "InputOutput/JsonInput/jsonitems.h"
4 #include "Apps/app.h"
5 #include "Apps/applist.h"
7 #include <iostream>
8 
9 namespace LatticeIO {
10  namespace JsonInput {
11  void validateAppType(){
12  // check app specification
13  if(jsonFile["App"]["type"].size() == 0){
14  std::cerr << "LatticeQCD Error: no App specified\n";
15  exit(1);
16  }
17  if(jsonFile["App"]["type"].size() != 1){
18  std::cerr << "LatticeQCD Error: wrong App specification\n"
19  "Correct format is:\n"
20  "\"App\" : {\n"
21  " \"type\" : \"appType\", \n"
22  " \"params\" : { (optional)\n"
23  " \"param1\" : param1, \n"
24  " \"param2\" : param2, \n"
25  " ... \n"
26  " }\n"
27  "}\n";
28  exit(1);
29  }
30 
31  if(jsonFile["App"]["type"] == "GFR")
32  validateGFR();
33  else if (jsonFile["App"]["type"] == "FLOW")
34  validateFLOW();
35  else if (jsonFile["App"]["type"] == "PGFG")
36  validatePGFG();
37  else{
38  std::cerr << "LatticeQCD Error: unknown App "
39  << jsonFile["App"]["type"]
40  << "\n";
41  exit(1);
42  }
43  }
44 
45  void validateGFR(){
46 
47  }
48 
49  void validateFLOW(){
50  if( jsonFile["App"]["params"].size() != 2
51  || jsonFile["App"]["params"]["epsilon"].size() != 1
52  || jsonFile["App"]["params"]["tauFinal"].size() != 1){
53  std::cerr << "LatticeQCD Error: wrong \"FLOW\" app specification\n"
54  "Correct format:"
55  "\"App\" : {\n"
56  " \"type\" : \"FLOW\", \n"
57  " \"params\" : { \n"
58  " \"epsilon\" : epsilon, \n"
59  " \"tauFinal\" : tauFinal \n"
60  " }\n"
61  "}\n";
62  exit(1);
63  }
64  }
65 
66  void validatePGFG(){
67  if( jsonFile["App"]["params"].size() != 5
68  || jsonFile["App"]["params"]["startType"].size() != 1
69  || jsonFile["App"]["params"]["MCSteps"].size() != 1
70  || jsonFile["App"]["params"]["thermSteps"].size() != 1
71  || jsonFile["App"]["params"]["SU3eps"].size() != 1
72  || ( jsonFile["App"]["params"]["NConf"].size()
73  + jsonFile["App"]["params"]["NCorr"].size() != 1)
74  ){
75  std::cerr << "LatticeQCD Error: wrong \"PGFG\" app specification\n"
76  "Correct format:"
77  "\"App\" : {\n"
78  " \"type\" : \"PGFG\", \n"
79  " \"params\" : { \n"
80  " \"MCSteps\" : MCSteps, \n"
81  " \"themSteps\" : thermSteps\n"
82  " \"startType\" : startType, \n"
83  " \"NConf\" : NConf, OR \"NCorr\" : NCorr, \n"
84  " \"SU3eps\" : SU3eps \n"
85  " }\n"
86  "}\n";
87  exit(1);
88  }
89  }
90 
91  void registerApp(App*& app){
92  Parallel::createGeometry(latticeSize, subLatticeSize);
93  if(jsonFile["App"]["type"] == "PGFG")
94  registerPGFG(app);
95  else if(jsonFile["App"]["type"] == "FLOW")
96  registerFLOW(app);
97  else if(jsonFile["App"]["type"] == "GFR")
98  registerGFR(app);
99 
100  app->createLattice(subLatticeSize);
101  }
102 
103  void registerPGFG(App*& app){
104  if(jsonFile["App"]["params"]["NConf"].size() == 1)
105  app = new GaugeFieldFactory(
106  jsonFile["App"]["params"]["MCSteps"],
107  jsonFile["App"]["params"]["thermSteps"],
108  jsonFile["App"]["params"]["NConf"],
109  jsonFile["App"]["params"]["SU3eps"],
110  jsonFile["App"]["params"]["startType"]);
111  else
112  app = new GaugeFieldFactory(
113  jsonFile["App"]["params"]["MCSteps"],
114  jsonFile["App"]["params"]["thermSteps"],
115  int(jsonFile["App"]["params"]["MCSteps"]) / int(jsonFile["App"]["params"]["NCorr"]),
116  jsonFile["App"]["params"]["SU3eps"],
117  jsonFile["App"]["params"]["startType"]);
118  }
119 
120  void registerGFR(App*& app){
121  app = new GaugeFieldReader();
122  }
123 
124  void registerFLOW(App*& app){
125  app = new WilsonFlow(
126  jsonFile["App"]["params"]["tauFinal"],
127  jsonFile["App"]["params"]["epsilon"]);
128  }
129  } // end JsonInput
130 } // end LatticeIO
Implementation of the WilsonFlow App class.
Definition: wilsonflow.h:53
Implementation of the GaugeFieldReader App class.
Implementation of the GaugeFieldFactory App class.
Utilities for parallelization.
static void createGeometry(std::array< int, 4 > latticeSize, std::array< int, 4 > subLatticeSize)
creates the parallel gemometry of the lattice
Definition: parallel.cpp:77
Contains the definition of the App prototype.
Main include file for App derived classes.
virtual void createLattice(std::array< int, 4 > latticeSize)
Initializes the GluonField object given a sublattice size.
Definition: app.cpp:41
Prototype for the App class group.
Definition: app.h:59