Dynare++ / sylvester equation solver: print solver method when debugging

By the way, simplify copy constructor/assignment.
time-shift
Sébastien Villemot 2019-01-18 16:08:19 +01:00
parent 0c3f61f106
commit 49c06f5c7f
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 18 additions and 42 deletions

View File

@ -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
{

View File

@ -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 */