StatMech
Loading...
Searching...
No Matches
DynamicsMaxDeviation.cpp File Reference

Functions

int main (int argc, char **argv)
 

Variables

namespace filesystem = std::experimental::filesystem
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)
23 {
24 if(argc < 5) {
25 std::cerr << "Usage: 1.This 2.Directory 3.Nmax 4.Nmin 5.Emin 6.Emax (Op1).NdataMax" << std::endl;
26 std::exit(EX_USAGE);
27 }
28 int const Nmax = (argc>=3 ? std::stoi(argv[2]) :16);
29 int const Nmin = (argc>=4 ? std::stoi(argv[3]) :16);
30 double const Emin = (argc>=5 ? std::stod(argv[4]) :0.45);
31 double const Emax = (argc>=6 ? std::stod(argv[5]) :0.55);
32 int const NdataMax = (argc>=7 ? std::stod(argv[6]) :-1);
33
34 std::string const baseDir(argv[1]);
35 std::cout << "# Directory: " << baseDir << "\n";
36 std::string const InDataDir(baseDir+"/RawData");
37 std::vector<std::string> dirList;
38 {
39 std::string str;
40 int dataNo;
41 if(NdataMax>0) dirList.resize(NdataMax);
42 for(const filesystem::directory_entry &entry : filesystem::directory_iterator(InDataDir)) {
43 if ( entry.is_directory() ) {
44 str = entry.path().string();
45 dataNo = std::atoi(str.substr(str.find("_No")+3).c_str());
46 if(NdataMax>0 && dataNo>=NdataMax) continue;
47 debug_print("# dir=" << str << ", dataNo=" << dataNo);
48 if(NdataMax<=0 && dirList.size()<=dataNo) dirList.resize(dataNo+1);
49 dirList.at(dataNo) = str;
50 }
51 }
52 }
53
54 class maxPair {
55 public:
56 Integer_t No;
57 double energy;
58 double stddev;
59 double maxValue;
60 maxPair() : No(-1), energy(NAN), stddev(NAN), maxValue(NAN) {};
61 };
62
63 class maxDeviation {
64 public:
65 Integer_t Ndata;
66 maxPair devT1000;
67 maxPair devT5000;
68 maxPair devT10000;
69 maxPair devTinfty;
70 maxDeviation() : Ndata(-1), devT1000(), devT5000(), devT10000(), devTinfty() {};
71 };
72 std::vector<std::vector<maxDeviation>> Data(Nmax+1);
73 for(size_t n = Nmin;n <= Nmax; ++n) {
74 Data.at(n).resize(dirList.size());
75 }
76
77 #pragma omp parallel for schedule(dynamic, 10)
78 for(size_t sample = 0;sample < dirList.size(); ++sample) {
79 std::string str;
80 std::stringstream ss;
81 Integer_t Ndata;
82 double MCAverage, dtemp;
83
84 std::ifstream InExpValueFs;
85 std::string InExpValueFname;
86 std::vector<std::string> candidateFileNames;
87
88 #pragma omp critical
89 std::cout << "# " << dirList[sample] << std::endl;
90 for(size_t n = Nmin;n <= Nmax; ++n) {
91 bool failFlag = false;
92 std::stringstream buff(""); buff << "_N" << n << ".txt";
93 //-------------------- Load eigen-energies --------------------//
94 candidateFileNames.resize(2);
95 candidateFileNames[0] = dirList[sample] + "/FockStateDynamicsZ" + buff.str();
96 // candidateFileNames[1] = dirList[sample] + "/FockStateDynamicsC" + buff.str(); Not enough precision
97 candidateFileNames[1] = dirList[sample] + "/FockStateDynamics" + buff.str();
98 if( InExpValueFs.is_open() ) { InExpValueFs.close(); InExpValueFs.clear(); }
99 for(auto name : candidateFileNames) {
100 InExpValueFname = name;
101 InExpValueFs.open(InExpValueFname);
102 if( InExpValueFs.is_open() ) break;
103 }
104 if( !InExpValueFs.is_open() ) {
105 #pragma omp critical
106 std::cout << "#Warning (N=" << n << "): Nodata file for '" << dirList[sample] <<"'." << std::endl;
107 continue;
108 }
109 InExpValueFs.exceptions(std::ios::badbit | std::ios::failbit);
110 #pragma omp critical
111 debug_print("InFileName= " << InExpValueFname);
112
113 maxPair T1000, T5000, T10000, Tinfty, rawData;
114 Ndata = 0;
115 try{
116 skip_header(InExpValueFs);
117 for(getline(InExpValueFs, str); !InExpValueFs.eof(); getline(InExpValueFs, str)) {
118 debug_print(" Read line= " << str);
119 ss.str(str); ss.clear(std::stringstream::goodbit);
120 ss >> rawData.No;
121 ss >> rawData.energy;
122 ss >> rawData.stddev;
123 if(rawData.energy-rawData.stddev<Emin || Emax<rawData.energy+rawData.stddev) continue;
124 // if(rawData.energy<Emin || Emax<rawData.energy) continue;
125 ss >> MCAverage;
126 ss >> dtemp; rawData.maxValue = dtemp = std::abs(dtemp-MCAverage);
127 if(isnan(dtemp)) {failFlag=true;} else if( !( T1000.maxValue>dtemp) ) { T1000 = rawData; }
128 ss >> dtemp; rawData.maxValue = dtemp = std::abs(dtemp-MCAverage);
129 if(isnan(dtemp)) {failFlag=true;} else if( !( T5000.maxValue>dtemp) ) { T5000 = rawData; }
130 ss >> dtemp; rawData.maxValue = dtemp = std::abs(dtemp-MCAverage);
131 if(isnan(dtemp)) {failFlag=true;} else if( !(T10000.maxValue>dtemp) ) { T10000 = rawData; }
132 ss >> dtemp; rawData.maxValue = dtemp = std::abs(dtemp-MCAverage);
133 if(isnan(dtemp)) {failFlag=true;} else if( !(Tinfty.maxValue>dtemp) ) { Tinfty = rawData; }
134 Ndata += 1;
135 }
136 } catch(std::exception& e) {
137 if( !InExpValueFs.eof() )
138 std::cerr << "Error(" << InExpValueFs.eof() << InExpValueFs.fail() << InExpValueFs.bad() << "):" << e.what() << std::endl;
139 }
140 InExpValueFs.close(); InExpValueFs.clear();
141 if(failFlag) {
142 #pragma omp critical
143 std::cerr << "#Warning (N=" << n << "): File: " << InExpValueFname << " contains NAN." << std::endl;
144 continue;
145 }
146 if(Ndata==0) {
147 #pragma omp critical
148 std::cerr << "#Warning (N=" << n << "): File: " << InExpValueFname << " contains nodata in range Emin(" << Emin << ") < energy+-stddev < Emax(" << Emax << ")." << std::endl;
149 continue;
150 }
151
152 debug_print("########## Some process ##########");
153 Data.at(n).at(sample).Ndata = Ndata;
154 Data.at(n).at(sample).devT1000 = T1000;
155 Data.at(n).at(sample).devT5000 = T5000;
156 Data.at(n).at(sample).devT10000 = T10000;
157 Data.at(n).at(sample).devTinfty = Tinfty;
158 debug_print("########## (END)Some process ##########\n");
159 }
160 }
161
162
163 std::string OutDir, OutFname;
164 std::ofstream OutFs;
165 {
166 std::stringstream buff("");
167 buff << "/DynamicsMaxDeviation_Emin" << Emin << "_Emax" << Emax;
168 OutDir = baseDir+buff.str();
169 filesystem::create_directories(OutDir);
170 }
171 #pragma omp parallel for
172 for(size_t n = Nmin;n <= Nmax; ++n) {
173 {
174 std::stringstream buff(""); buff << "/DynamicsMaxDeviations_T1000_N" << n << ".txt";
175 std::string OutFname(OutDir + buff.str());
176 std::ofstream OutFs(OutFname); checkIsFileOpen(OutFs, OutFname);
177 OutFs << "# 1.(Sample No.) 2.(StateId) 3.(energy) 4.(stddev) 5.(MaxDeviation)\n\n";
178 OutFs << std::scientific << std::showpos << std::setprecision(6);
179 for(size_t sample = 0;sample < dirList.size(); ++sample) {
180 if(Data.at(n).at(sample).Ndata <= 0) continue;
181 OutFs << sample << " "
182 << Data[n][sample].devT1000.No << " "
183 << Data[n][sample].devT1000.energy << " "
184 << Data[n][sample].devT1000.stddev << " "
185 << Data[n][sample].devT1000.maxValue
186 << std::endl;
187 }
188 OutFs.close();
189 }
190 {
191 std::stringstream buff(""); buff << "/DynamicsMaxDeviations_T5000_N" << n << ".txt";
192 std::string OutFname(OutDir + buff.str());
193 std::ofstream OutFs(OutFname); checkIsFileOpen(OutFs, OutFname);
194 OutFs << "# 1.(Sample No.) 2.(StateId) 3.(energy) 4.(stddev) 5.(MaxDeviation)\n\n";
195 OutFs << std::scientific << std::showpos << std::setprecision(6);
196 for(size_t sample = 0;sample < dirList.size(); ++sample) {
197 if(Data.at(n).at(sample).Ndata <= 0) continue;
198 OutFs << sample << " "
199 << Data[n][sample].devT5000.No << " "
200 << Data[n][sample].devT5000.energy << " "
201 << Data[n][sample].devT5000.stddev << " "
202 << Data[n][sample].devT5000.maxValue
203 << std::endl;
204 }
205 OutFs.close();
206 }
207 {
208 std::stringstream buff(""); buff << "/DynamicsMaxDeviations_T10000_N" << n << ".txt";
209 std::string OutFname(OutDir + buff.str());
210 std::ofstream OutFs(OutFname); checkIsFileOpen(OutFs, OutFname);
211 OutFs << "# 1.(Sample No.) 2.(StateId) 3.(energy) 4.(stddev) 5.(MaxDeviation)\n\n";
212 OutFs << std::scientific << std::showpos << std::setprecision(6);
213 for(size_t sample = 0;sample < dirList.size(); ++sample) {
214 if(Data.at(n).at(sample).Ndata <= 0) continue;
215 OutFs << sample << " "
216 << Data[n][sample].devT10000.No << " "
217 << Data[n][sample].devT10000.energy << " "
218 << Data[n][sample].devT10000.stddev << " "
219 << Data[n][sample].devT10000.maxValue
220 << std::endl;
221 }
222 OutFs.close();
223 }
224 {
225 std::stringstream buff(""); buff << "/DynamicsMaxDeviations_Tinfty_N" << n << ".txt";
226 std::string OutFname(OutDir + buff.str());
227 std::ofstream OutFs(OutFname); checkIsFileOpen(OutFs, OutFname);
228 OutFs << "# 1.(Sample No.) 2.(StateId) 3.(energy) 4.(stddev) 5.(MaxDeviation)\n\n";
229 OutFs << std::scientific << std::showpos << std::setprecision(6);
230 for(size_t sample = 0;sample < dirList.size(); ++sample) {
231 if(Data.at(n).at(sample).Ndata <= 0) continue;
232 OutFs << sample << " "
233 << Data[n][sample].devTinfty.No << " "
234 << Data[n][sample].devTinfty.energy << " "
235 << Data[n][sample].devTinfty.stddev << " "
236 << Data[n][sample].devTinfty.maxValue
237 << std::endl;
238 }
239 OutFs.close();
240 }
241 }
242
243 return EXIT_SUCCESS;
244}
namespace filesystem
Definition DynamicsMaxDeviation.cpp:15
bool checkIsFileOpen(std::ifstream &file, std::string const &filename)
Definition file_util.hpp:22
debug_print("# Determining GPU configuration.")
MKL_INT Integer_t
Definition mytypes.hpp:359
constexpr double Emin
Definition setVariablesForMCAverage.cpp:4
constexpr double Emax
Definition setVariablesForMCAverage.cpp:5
std::stringstream buff("")

Variable Documentation

◆ filesystem

namespace filesystem = std::experimental::filesystem