diff --git a/src/solvers/linear/krylov/tnlBICGStabSolver_impl.h b/src/solvers/linear/krylov/tnlBICGStabSolver_impl.h index 4919d56bd612cee98420efcaa2136d0a4b9202f2..8532424ef49bdc2633f91e3aa36cd39cdc8f9177 100644 --- a/src/solvers/linear/krylov/tnlBICGStabSolver_impl.h +++ b/src/solvers/linear/krylov/tnlBICGStabSolver_impl.h @@ -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->refreshSolverMonitor(); + this->refreshSolverMonitor( true ); return this->checkConvergence(); }; diff --git a/src/solvers/linear/krylov/tnlCGSolver_impl.h b/src/solvers/linear/krylov/tnlCGSolver_impl.h index ae599af1bbb4e6e51307bee5b9cf6d7df1a92efd..86bea9efd293ee7a9db34950d983bfbf70343f42 100644 --- a/src/solvers/linear/krylov/tnlCGSolver_impl.h +++ b/src/solvers/linear/krylov/tnlCGSolver_impl.h @@ -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 -> refreshSolverMonitor(); + this -> refreshSolverMonitor( true ); return this->checkConvergence(); }; diff --git a/src/solvers/linear/krylov/tnlGMRESSolver_impl.h b/src/solvers/linear/krylov/tnlGMRESSolver_impl.h index 13582c94a8bfba630dd6d368a8a6fb3491f7dc38..8d738b1b74ac7a494c54a1a67d935a374087427b 100644 --- a/src/solvers/linear/krylov/tnlGMRESSolver_impl.h +++ b/src/solvers/linear/krylov/tnlGMRESSolver_impl.h @@ -289,7 +289,7 @@ bool tnlGMRESSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector& //cout << "residue = " << beta / normb << endl; } - this->refreshSolverMonitor(); + this->refreshSolverMonitor( true ); return this->checkConvergence(); }; diff --git a/src/solvers/linear/krylov/tnlTFQMRSolver_impl.h b/src/solvers/linear/krylov/tnlTFQMRSolver_impl.h index b9f5fefea64720287e51b7b1d2ed7cbaf60c8144..52adc5f30d3da28fef6624d821e3056f93f1ce3d 100644 --- a/src/solvers/linear/krylov/tnlTFQMRSolver_impl.h +++ b/src/solvers/linear/krylov/tnlTFQMRSolver_impl.h @@ -154,8 +154,9 @@ bool tnlTFQMRSolver< Matrix, Preconditioner > :: solve( const Vector& b, Vector& this -> refreshSolverMonitor(); } this -> setResidue( ResidueGetter :: getResidue( *matrix, b, x, bNorm ) ); - this -> refreshSolverMonitor(); - if( this -> getResidue() > this -> getConvergenceResidue() ) return false; + this -> refreshSolverMonitor( true ); + if( this -> getResidue() > this -> getConvergenceResidue() ) + return false; return true; }; diff --git a/src/solvers/linear/stationary/tnlSORSolver_impl.h b/src/solvers/linear/stationary/tnlSORSolver_impl.h index 419e190d55462ec8da4eb0d40b18f1f4c032e285..273bf9e81a3165525d851e641182e28e605cc4a2 100644 --- a/src/solvers/linear/stationary/tnlSORSolver_impl.h +++ b/src/solvers/linear/stationary/tnlSORSolver_impl.h @@ -107,9 +107,10 @@ bool tnlSORSolver< Matrix, Preconditioner > :: solve( const Vector& b, x, this->getOmega() ); this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) ); + this -> refreshSolverMonitor(); } this -> setResidue( ResidueGetter :: getResidue( *matrix, x, b, bNorm ) ); - this -> refreshSolverMonitor(); + this -> refreshSolverMonitor( true ); return this->checkConvergence(); }; diff --git a/src/solvers/tnlIterativeSolver.h b/src/solvers/tnlIterativeSolver.h index d79ab4bd59f863c044a32fecb9e44ba540485782..8c05287d8d31cbbfffcfd186d550484da9618466 100644 --- a/src/solvers/tnlIterativeSolver.h +++ b/src/solvers/tnlIterativeSolver.h @@ -67,7 +67,7 @@ class tnlIterativeSolver bool checkConvergence(); - void refreshSolverMonitor(); + void refreshSolverMonitor( bool force = false ); protected: diff --git a/src/solvers/tnlIterativeSolverMonitor.h b/src/solvers/tnlIterativeSolverMonitor.h index b4c949ee78ffc3bd2db38b99e07075983f9738f8..5cca8ed68ac8bcc9afe365b8837ff92ecdd94537 100644 --- a/src/solvers/tnlIterativeSolverMonitor.h +++ b/src/solvers/tnlIterativeSolverMonitor.h @@ -44,7 +44,7 @@ class tnlIterativeSolverMonitor : public tnlSolverMonitor< Real, Index > void setRefreshRate( const IndexType& refreshRate ); - virtual void refresh(); + virtual void refresh( bool force = false ); void resetTimers(); diff --git a/src/solvers/tnlIterativeSolverMonitor_impl.h b/src/solvers/tnlIterativeSolverMonitor_impl.h index 1db4c8048b0749e63588ea2e39a43ae22bc0d737..7f65f9e596b3cbdc1d8101c3f35c33f6d011c5e7 100644 --- a/src/solvers/tnlIterativeSolverMonitor_impl.h +++ b/src/solvers/tnlIterativeSolverMonitor_impl.h @@ -69,9 +69,9 @@ void tnlIterativeSolverMonitor< Real, Index > :: setRefreshRate( const Index& re } 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() << " RES:" << setprecision( 5 ) << setw( 12 ) << this -> getResidue() diff --git a/src/solvers/tnlIterativeSolver_impl.h b/src/solvers/tnlIterativeSolver_impl.h index 012a6da17141a62ba10514632a00daeab0bc6902..090998dda368e5a53a296e812cc373d2b1590aa6 100644 --- a/src/solvers/tnlIterativeSolver_impl.h +++ b/src/solvers/tnlIterativeSolver_impl.h @@ -196,14 +196,14 @@ void tnlIterativeSolver< Real, Index> :: setSolverMonitor( tnlIterativeSolverMon } template< typename Real, typename Index > -void tnlIterativeSolver< Real, Index> :: refreshSolverMonitor() +void tnlIterativeSolver< Real, Index> :: refreshSolverMonitor( bool force ) { if( this -> solverMonitor ) { this -> solverMonitor -> setIterations( this -> getIterations() ); this -> solverMonitor -> setResidue( this -> getResidue() ); this -> solverMonitor -> setRefreshRate( this-> refreshRate ); - this -> solverMonitor -> refresh(); + this -> solverMonitor -> refresh( force ); } } diff --git a/src/solvers/tnlSolverMonitor.h b/src/solvers/tnlSolverMonitor.h index df946e3643cdba6110c841ae8caa253fc06909e5..b6263a27b03e39ce1c2afa5a0fc23fd681bf5d35 100644 --- a/src/solvers/tnlSolverMonitor.h +++ b/src/solvers/tnlSolverMonitor.h @@ -23,7 +23,7 @@ class tnlSolverMonitor { public: - virtual void refresh() = 0; + virtual void refresh( bool force = false ) = 0; ~tnlSolverMonitor() {};