Skip to content
Snippets Groups Projects
Commit 1ea24af9 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Improved refreshing of iterative solver monitor's state

This will ensure that in verbose mode, the final state of the linear
system solvers is always printed. Previously this was the case only when
refresh rate was equal to 1.
parent 0058a250
No related branches found
No related tags found
No related merge requests found
...@@ -193,7 +193,7 @@ bool tnlBICGStabSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vect ...@@ -193,7 +193,7 @@ bool tnlBICGStabSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vect
this->setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); this->setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) );
} }
//this->setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); //this->setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) );
this->refreshSolverMonitor(); this->refreshSolverMonitor( true );
return this->checkConvergence(); return this->checkConvergence();
}; };
......
...@@ -142,7 +142,7 @@ solve( const Vector& b, Vector& x ) ...@@ -142,7 +142,7 @@ solve( const Vector& b, Vector& x )
this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) );
} }
this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) );
this -> refreshSolverMonitor(); this -> refreshSolverMonitor( true );
return this->checkConvergence(); return this->checkConvergence();
}; };
......
...@@ -289,7 +289,7 @@ bool tnlGMRESSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector& ...@@ -289,7 +289,7 @@ bool tnlGMRESSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector&
//cout << "residue = " << beta / normb << endl; //cout << "residue = " << beta / normb << endl;
} }
this->refreshSolverMonitor(); this->refreshSolverMonitor( true );
return this->checkConvergence(); return this->checkConvergence();
}; };
......
...@@ -154,8 +154,9 @@ bool tnlTFQMRSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector& ...@@ -154,8 +154,9 @@ bool tnlTFQMRSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector&
this -> refreshSolverMonitor(); this -> refreshSolverMonitor();
} }
this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) );
this -> refreshSolverMonitor(); this -> refreshSolverMonitor( true );
if( this -> getResidue() > this -> getConvergenceResidue() ) return false; if( this -> getResidue() > this -> getConvergenceResidue() )
return false;
return true; return true;
}; };
......
...@@ -107,9 +107,10 @@ bool tnlSORSolver< Matrix, Preconditioner > :: solve( const Vector& b, ...@@ -107,9 +107,10 @@ bool tnlSORSolver< Matrix, Preconditioner > :: solve( const Vector& b,
x, x,
this->getOmega() ); this->getOmega() );
this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) ); this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) );
this -> refreshSolverMonitor();
} }
this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) ); this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) );
this -> refreshSolverMonitor(); this -> refreshSolverMonitor( true );
return this->checkConvergence(); return this->checkConvergence();
}; };
......
...@@ -67,7 +67,7 @@ class tnlIterativeSolver ...@@ -67,7 +67,7 @@ class tnlIterativeSolver
bool checkConvergence(); bool checkConvergence();
void refreshSolverMonitor(); void refreshSolverMonitor( bool force = false );
protected: protected:
......
...@@ -44,7 +44,7 @@ class tnlIterativeSolverMonitor : public tnlSolverMonitor< Real, Index > ...@@ -44,7 +44,7 @@ class tnlIterativeSolverMonitor : public tnlSolverMonitor< Real, Index >
void setRefreshRate( const IndexType& refreshRate ); void setRefreshRate( const IndexType& refreshRate );
virtual void refresh(); virtual void refresh( bool force = false );
void resetTimers(); void resetTimers();
......
...@@ -69,9 +69,9 @@ void tnlIterativeSolverMonitor< Real, Index > :: setRefreshRate( const Index& re ...@@ -69,9 +69,9 @@ void tnlIterativeSolverMonitor< Real, Index > :: setRefreshRate( const Index& re
} }
template< typename Real, typename Index> template< typename Real, typename Index>
void tnlIterativeSolverMonitor< Real, Index > :: refresh() void tnlIterativeSolverMonitor< Real, Index > :: refresh( bool force )
{ {
if( this->verbose > 0 && this->getIterations() % this->refreshRate == 0 ) if( this->verbose > 0 && ( force || this->getIterations() % this->refreshRate == 0 ) )
{ {
cout << " ITER:" << setw( 8 ) << this->getIterations() cout << " ITER:" << setw( 8 ) << this->getIterations()
<< " RES:" << setprecision( 5 ) << setw( 12 ) << this -> getResidue() << " RES:" << setprecision( 5 ) << setw( 12 ) << this -> getResidue()
......
...@@ -196,14 +196,14 @@ void tnlIterativeSolver< Real, Index> :: setSolverMonitor( tnlIterativeSolverMon ...@@ -196,14 +196,14 @@ void tnlIterativeSolver< Real, Index> :: setSolverMonitor( tnlIterativeSolverMon
} }
template< typename Real, typename Index > template< typename Real, typename Index >
void tnlIterativeSolver< Real, Index> :: refreshSolverMonitor() void tnlIterativeSolver< Real, Index> :: refreshSolverMonitor( bool force )
{ {
if( this -> solverMonitor ) if( this -> solverMonitor )
{ {
this -> solverMonitor -> setIterations( this -> getIterations() ); this -> solverMonitor -> setIterations( this -> getIterations() );
this -> solverMonitor -> setResidue( this -> getResidue() ); this -> solverMonitor -> setResidue( this -> getResidue() );
this -> solverMonitor -> setRefreshRate( this-> refreshRate ); this -> solverMonitor -> setRefreshRate( this-> refreshRate );
this -> solverMonitor -> refresh(); this -> solverMonitor -> refresh( force );
} }
} }
......
...@@ -23,7 +23,7 @@ class tnlSolverMonitor ...@@ -23,7 +23,7 @@ class tnlSolverMonitor
{ {
public: public:
virtual void refresh() = 0; virtual void refresh( bool force = false ) = 0;
~tnlSolverMonitor() {}; ~tnlSolverMonitor() {};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment