From 49c06f5c7f7fbe4e72c5fa90e3ec299c6f321d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Fri, 18 Jan 2019 16:08:19 +0100 Subject: [PATCH] Dynare++ / sylvester equation solver: print solver method when debugging By the way, simplify copy constructor/assignment. --- dynare++/sylv/cc/SylvParams.cc | 33 +-------------------------------- dynare++/sylv/cc/SylvParams.hh | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 42 deletions(-) diff --git a/dynare++/sylv/cc/SylvParams.cc b/dynare++/sylv/cc/SylvParams.cc index 00da72e7b..623845005 100644 --- a/dynare++/sylv/cc/SylvParams.cc +++ b/dynare++/sylv/cc/SylvParams.cc @@ -15,6 +15,7 @@ SylvParams::print(const std::string &prefix) const void SylvParams::print(std::ostream &fdesc, const std::string &prefix) const { + method.print(fdesc, prefix, "method "); rcondA1.print(fdesc, prefix, "reci. cond1 A "); rcondAI.print(fdesc, prefix, "reci. condInf A "); bs_norm.print(fdesc, prefix, "log10 diag norm "); @@ -47,38 +48,6 @@ SylvParams::print(std::ostream &fdesc, const std::string &prefix) const cpu_time.print(fdesc, prefix, "time (CPU secs) "); } -void -SylvParams::copy(const SylvParams &p) -{ - method = p.method; - convergence_tol = p.convergence_tol; - max_num_iter = p.max_num_iter; - bs_norm = p.bs_norm; - want_check = p.want_check; - converged = p.converged; - iter_last_norm = p.iter_last_norm; - num_iter = p.num_iter; - f_err1 = p.f_err1; - f_errI = p.f_errI; - viv_err1 = p.viv_err1; - viv_errI = p.viv_errI; - ivv_err1 = p.ivv_err1; - ivv_errI = p.ivv_errI; - f_blocks = p.f_blocks; - f_largest = p.f_largest; - f_zeros = p.f_zeros; - f_offdiag = p.f_offdiag; - rcondA1 = p.rcondA1; - rcondAI = p.rcondAI; - eig_min = p.eig_min; - mat_err1 = p.mat_err1; - mat_errI = p.mat_errI; - mat_errF = p.mat_errF; - vec_err1 = p.vec_err1; - vec_errI = p.vec_errI; - cpu_time = p.cpu_time; -} - void SylvParams::setArrayNames(int &num, const char **names) const { diff --git a/dynare++/sylv/cc/SylvParams.hh b/dynare++/sylv/cc/SylvParams.hh index ad0a6a88f..a183697a8 100644 --- a/dynare++/sylv/cc/SylvParams.hh +++ b/dynare++/sylv/cc/SylvParams.hh @@ -182,22 +182,14 @@ public: DoubleParamItem vec_err1; // rel. vector 1 norm of A*X-B*X*kron(C,..,C)-D DoubleParamItem vec_errI; // rel. vector Inf norm of A*X-B*X*kron(C,..,C)-D DoubleParamItem cpu_time; // time of the job in CPU seconds - // note: remember to change copy() if adding/removing member SylvParams(bool wc = false) : method(recurse), convergence_tol(1.e-30), max_num_iter(15), bs_norm(1.3), want_check(wc) { } - SylvParams(const SylvParams &p) - { - copy(p); - } - SylvParams & - operator=(const SylvParams &p) - { - copy(p); return *this; - } + SylvParams(const SylvParams &p) = default; + SylvParams &operator=(const SylvParams &p) = default; ~SylvParams() = default; void print(const std::string &prefix) const; void print(std::ostream &fdesc, const std::string &prefix) const; @@ -209,4 +201,19 @@ private: void copy(const SylvParams &p); }; +inline std::ostream & +operator<<(std::ostream &out, SylvParams::solve_method m) +{ + switch (m) + { + case SylvParams::iter: + out << "iterative"; + break; + case SylvParams::recurse: + out << "recurse (a.k.a. triangular)"; + break; + } + return out; +} + #endif /* SYLV_PARAMS_H */