40 #ifdef USE_TESTMANAGER_AUTOREGISTER
55 namespace Test_Eigensolver {
58 const std::string filename_input =
"test_Eigensolver_Chebyshev.yaml";
59 const std::string filename_output =
"stdout";
61 class Parameters_Test_Eigensolver :
public Parameters {
63 Parameters_Test_Eigensolver()
65 Register_string(
"gauge_config_type_input",
"NULL");
66 Register_string(
"config_filename_input",
"NULL");
68 Register_string(
"verbose_level",
"NULL");
70 Register_double(
"expected_result", 0.0);
78 #ifdef USE_TESTMANAGER_AUTOREGISTER
81 "Eigensolver.Solve_Chebyshev",
95 Parameters *params_test =
new Parameters_Test_Eigensolver;
114 params_manager.
read_params(filename_input, params_all);
116 const string str_gconf_read = params_test->
get_string(
"gauge_config_type_input");
117 const string readfile = params_test->
get_string(
"config_filename_input");
118 const string str_vlevel = params_test->
get_string(
"verbose_level");
120 const double expected_result = params_test->
get_double(
"expected_result");
123 const string str_gmset_type = params_clover->
get_string(
"gamma_matrix_type");
124 const string str_proj_type = params_proj->
get_string(
"projection_type");
125 const string str_smear_type = params_smear->
get_string(
"smear_type");
126 const string str_sortfield_type = params_irlanczos->
get_string(
"eigensolver_mode");
127 const int Nk = params_irlanczos->
get_int(
"number_of_wanted_eigenvectors");
128 const int Np = params_irlanczos->
get_int(
"number_of_working_eigenvectors");
129 const int Niter_eigen = params_irlanczos->
get_int(
"maximum_number_of_iteration");
130 const double Enorm_eigen = params_irlanczos->
get_double(
"convergence_criterion_squared");
131 const double Vthreshold = params_irlanczos->
get_double(
"threshold_value");
136 vout.
general(vl,
" gconf_read = %s\n", str_gconf_read.c_str());
137 vout.
general(vl,
" readfile = %s\n", readfile.c_str());
138 vout.
general(vl,
" vlevel = %s\n", str_vlevel.c_str());
139 vout.
general(vl,
" gmset_type = %s\n", str_gmset_type.c_str());
140 vout.
general(vl,
" proj_type = %s\n", str_proj_type.c_str());
141 vout.
general(vl,
" smear_type = %s\n", str_smear_type.c_str());
142 vout.
general(vl,
" sortfield_type = %s\n", str_sortfield_type.c_str());
151 vout.
crucial(vl,
"Test_Eigensolver: Input parameters have not been set.\n");
162 Projection *proj = Projection::New(str_proj_type);
164 Smear *smear = Smear::New(str_smear_type, proj);
176 Fopr *fopr = fopr_smear;
182 double Vthreshold_ch = fopr_ch->
mult(Vthreshold * Vthreshold);
183 vout.
general(vl,
"Vthreshold_ch = %12.6f\n", Vthreshold_ch);
186 SortField *sort = SortField::New(str_sortfield_type);
189 eigen->
set_parameters(Nk, Np, Niter_eigen, Enorm_eigen, Vthreshold_ch);
195 valarray<double> TDa(Nm);
196 valarray<Field> vk(Nm);
200 int NFvol = b2.
nvol();
202 for (
int k = 0; k < Nm; ++k) {
203 vk[k].reset(NFin, NFvol, NFex);
208 eigen->
solve(TDa, vk, Nsbt, Nconv, (
Field)b2);
214 v.
reset(NFin, NFvol, NFex);
219 for (
int i = 0; i < Nsbt + 1; ++i) {
220 v = fopr->
mult(vk[i]);
222 double vnum = vk[i] * v;
223 double vden = vk[i] * vk[i];
224 double veig = vnum / vden;
231 vout.
general(vl,
"Eigenvalues: %4d %20.14f %10.4e %10.4e\n", i, TDa[i], vv, vden - 1.0);
253 delete params_clover;
256 delete params_dr_smear;
257 delete params_irlanczos;