75 #ifndef EIGEN_ITERATION_CONTROLLER_H
76 #define EIGEN_ITERATION_CONTROLLER_H
95 double m_resminreach, m_resadd;
105 m_resminreach = 1E50; m_resadd = 0.0;
112 void operator ++(
int) {
m_nit++; m_written =
false; m_resadd +=
m_res; }
113 void operator ++() { (*this)++; }
115 bool first() {
return m_nit == 0; }
118 int noiseLevel()
const {
return m_noise; }
119 void setNoiseLevel(
int n) {
m_noise = n; }
122 double maxResidual()
const {
return m_resmax; }
123 void setMaxResidual(
double r) {
m_resmax = r; }
125 double residual()
const {
return m_res; }
128 void setCallback(
void (*t)(
const IterationController&))
133 size_t iteration()
const {
return m_nit; }
134 void setIteration(
size_t i) {
m_nit = i; }
136 size_t maxIterarions()
const {
return m_maxiter; }
137 void setMaxIterations(
size_t i) {
m_maxiter = i; }
139 double rhsNorm()
const {
return m_rhsn; }
140 void setRhsNorm(
double r) {
m_rhsn = r; }
143 bool converged(
double nr)
145 m_res = internal::abs(nr);
146 m_resminreach = (std::min)(m_resminreach,
m_res);
149 template<
typename VectorType>
bool converged(
const VectorType &v)
150 {
return converged(v.squaredNorm()); }
152 bool finished(
double nr)
154 if (m_callback) m_callback(*
this);
162 template <
typename VectorType>
163 bool finished(
const MatrixBase<VectorType> &v)
164 {
return finished(
double(v.squaredNorm())); }
170 #endif // EIGEN_ITERATION_CONTROLLER_H