37 const string str_vlevel = params.
get_string(
"verbose_level");
46 err += params.
fetch_int(
"maximum_number_of_iteration", Niter);
47 err += params.
fetch_double(
"convergence_criterion_squared", Stop_cond);
85 std::valarray<double> sigma,
87 int& Nconv,
double& diff)
91 int Nshift = sigma.size();
95 for (
int i = 0; i < Nshift; ++i) {
109 zeta1.resize(Nshift);
110 zeta2.resize(Nshift);
114 for (
int i = 0; i < Nshift; ++i) {
115 p[i].reset(Nin, Nvol, Nex);
116 x[i].reset(Nin, Nvol, Nex);
119 csh2[i] = sigma[i] - sigma[0];
133 for (
int iter = 0; iter <
m_Niter; iter++) {
150 for (
int i = 0; i < Nshift; ++i) {
152 s += sigma[i] *
x[i];
154 double diff1 =
s *
s;
155 diff1 = sqrt(diff1 * snorm);
159 if (diff1 > diff) diff = diff1;
164 for (
int i = 0; i < Nshift; ++i) {
173 int Nshift =
p.size();
177 for (
int i = 0; i < Nshift; ++i) {
191 const std::valarray<double>& sigma)
194 s += sigma[0] *
p[0];
197 double pa_p = s * p[0];
198 double beta = -rr_p / pa_p;
204 double alpha = rr / rr_p;
212 for (
int ish = 1; ish <
Nshift2; ++ish) {
213 double zeta = (alpha_h -
csh2[ish] * beta) /
zeta1[ish]
214 + (1.0 - alpha_h) /
zeta2[ish];
216 double zr = zeta /
zeta1[ish];
217 double beta_s = beta * zr;
218 double alpha_s = alpha * zr * zr;
220 x[ish] -= beta_s * p[ish];
224 pp[ish] = p[ish] * p[ish];
231 for (
int ish = Nshift2 - 1; ish >= 0; --ish) {
void detailed(const char *format,...)
void Register_string(const string &, const string &)
static const std::string class_name
virtual const Field mult(const Field &)=0
multiplies fermion operator to a given field and returns the resultant field.
void solve_init(double &)
void general(const char *format,...)
void Register_int(const string &, const int)
Container of Field-type object.
void set_parameters(const Parameters ¶ms)
void solve_step(double &, const std::valarray< double > &)
std::valarray< double > pp
int square_non_zero(const double v)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Parameters_Shiftsolver_CG()
void paranoiac(const char *format,...)
void crucial(const char *format,...)
void solve(std::valarray< Field > &solution, std::valarray< double > shift, const Field &source, int &Nconv, double &diff)
std::valarray< double > zeta1
std::valarray< double > zeta2
int non_negative(const int v)
void Register_double(const string &, const double)
int fetch_double(const string &key, double &val) const
string get_string(const string &key) const
Bridge::VerboseLevel m_vl
int fetch_int(const string &key, int &val) const
static VerboseLevel set_verbose_level(const std::string &str)
std::valarray< double > csh2