61 {
63
66 double gE, EnergyRange, dtemp;
67
68 if( !Initialize(argc, argv, Nargs_common) ) {
69 std::cerr << "Error: Initialization failed." << std::endl;
70 std::exit(EX_USAGE);
71 }
73
74
75 debug_print(
"# Checking for the directory structure.");
76 std::ofstream OutFs;
77
78
79
80
81
82#ifdef GPU
83 magma_init();
84 magma_queue_t queue = NULL;
85 magma_int_t dev = 0;
86 magma_getdevice( &dev );
87 magma_queue_create( dev, &queue );
88#else
90#endif
91
92
93 debug_print(
"# Calculating translation-invariant sectors.");
95
96
97
100 std::vector<double> eigenEnergy(dim_max);
101 std::vector<double> EXPvalue(dim_max);
102
103
104 double start, t_int, end, temp_t;
105 double T_diag=0, T_post=0, T_pre=0;
106 init_genrand(SEED);
109 std::cout << "(init_genrand): time=" << std::fixed << (end-start) << std::endl;
110
111
112
113
115 end = start;
117
119 {
120 std::stringstream
buff;
121 buff <<
"/RawData/Sample_No" << repetition;
122 outDirName +=
buff.str();
123 outDirName = std::regex_replace(outDirName, std::regex("//"), "/");
124 filesystem::create_directories(outDirName);
125 }
126
127 int sign = (Gaussian()>0 ? +1: -1);
129 debug_print(
"# (rep,n)=(" << repetition <<
"," << n <<
")");
130 dim_sub =
Sector.at(n).dim();
131
132
134 {
135 eigenEnergy.resize(dim_sub);
136 for(
Integer_t j = 0;j < dim_sub; ++j) eigenEnergy[j] = Gaussian()/sqrt((
double)n);
137 std::sort(eigenEnergy.begin(), eigenEnergy.end());
138 EnergyRange = eigenEnergy[dim_sub-1] - eigenEnergy[0];
139 gE = eigenEnergy[0];
140 for(
Integer_t j = 0;j < dim_sub; ++j) eigenEnergy[j] = (eigenEnergy[j]-gE)/EnergyRange;
141 EXPvalue.resize(dim_sub);
143 EXPvalue[j] = sign*4*(eigenEnergy[j]-0.5)*(eigenEnergy[j]-0.5);
144 dtemp = (eigenEnergy[j]*EnergyRange + gE)*sqrt((double)n);
145 EXPvalue[j] += Gaussian()/sqrt(dim_sub*0.1*std::exp( -dtemp*dtemp/2.0 ));
146 }
147 }
149
151 {
153 std::stringstream
buff(
"");
154 buff <<
"/EigenExpValue" << PRECISION <<
"_N" << n <<
".txt";
155 std::string filename(outDirName); filename +=
buff.str();
157 OutFs << std::right << std::showpos << std::scientific << std::setprecision(6);
158 OutFs << "# OpRange= " << 1.0 << "\n"
159 << "# 1.(Normalized energy) 2.(Energy) 3.(Exp value)" << "\n\n";
160 for(size_t j = 0;j < dim_sub; ++j) {
161 OutFs << eigenEnergy[j] << " "
162 << eigenEnergy[j]*EnergyRange + gE << " "
163 << EXPvalue[j] << std::endl;
164 }
165 OutFs.close();
166 }
168 }
169 if(repetition%10 == 9) {
171 std::cerr << "(total=" << std::setw(6) << repetition+1
172 << "): timeINT=" << std::setprecision(6) << std::setw(8) << (end-t_int)
173 << ", timeTOT=" << std::setprecision(6) << std::setw(8) << (end-start)
174 << ", T_construct=" << std::setprecision(6) << std::setw(10) << T_pre << "(" << std::setprecision(1) << 100*T_pre /(end-start) << "%)"
175 << ", T_diag=" << std::setprecision(6) << std::setw(8) << T_diag << "(" << std::setprecision(1) << 100*T_diag/(end-start) << "%)"
176 << ", T_process=" << std::setprecision(6) << std::setw(8) << T_post << "(" << std::setprecision(1) << 100*T_post/(end-start) << "%)"
177 << std::endl;
178 }
179 }
180
181 Finalize(argc, argv);
182 #ifdef GPU
183 magma_finalize();
184 #endif
185 return 0;
186}
double getETtime()
Definition EnergySpectrum.c:14
std::vector< TransSector > Sector(n_max+1)
bool checkIsFileOpen(std::ifstream &file, std::string const &filename)
Definition file_util.hpp:22
debug_print("# Determining GPU configuration.")
GPUconfig GPUconf(dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1), 0, queue)
MKL_INT Integer_t
Definition mytypes.hpp:359
baseDirName
Definition setVariablesForEnsemble.cpp:50
Integer_t const repMin
Definition setVariablesForEnsemble.cpp:31
Integer_t const n_min
Definition setVariablesForEnsemble.cpp:28
Integer_t const repMax
Definition setVariablesForEnsemble.cpp:32
Integer_t const n_max
Definition setVariablesForEnsemble.cpp:27
std::stringstream buff("")