Skip to content
Snippets Groups Projects
Commit 8a310613 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Adding max-solver-iterations to tnlSolverStarter.

parent 97c9009d
No related branches found
No related tags found
No related merge requests found
...@@ -87,6 +87,8 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem, ...@@ -87,6 +87,8 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem,
solver. setSolverMonitor( odeSolverMonitor ); solver. setSolverMonitor( odeSolverMonitor );
else else
solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() ); solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() );
if( ! setIterativeSolver( solver, parameters ) )
return false;
return setExplicitTimeDiscretisation( problem, parameters, solver ); return setExplicitTimeDiscretisation( problem, parameters, solver );
} }
...@@ -103,7 +105,8 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem, ...@@ -103,7 +105,8 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem,
solver. setSolverMonitor( odeSolverMonitor ); solver. setSolverMonitor( odeSolverMonitor );
else else
solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() ); solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() );
if( ! setIterativeSolver( solver, parameters ) )
return false;
return setExplicitTimeDiscretisation( problem, parameters, solver ); return setExplicitTimeDiscretisation( problem, parameters, solver );
} }
...@@ -166,6 +169,17 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem, ...@@ -166,6 +169,17 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem,
return false; return false;
} }
template< typename IterativeSolver >
bool tnlSolverStarter :: setIterativeSolver( IterativeSolver& solver,
const tnlParameterContainer& parameters ) const
{
int maxSolverIterations( 0 );
if( parameters.GetParameter< int >( "max-solver-iterations", maxSolverIterations ) )
solver. setMaxIterationsNumber( maxSolverIterations );
return true;
}
template< typename Problem, template< typename Problem,
template < typename > class DiscreteSolver > template < typename > class DiscreteSolver >
bool tnlSolverStarter :: setExplicitTimeDiscretisation( Problem& problem, bool tnlSolverStarter :: setExplicitTimeDiscretisation( Problem& problem,
...@@ -252,7 +266,8 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem, ...@@ -252,7 +266,8 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
if( verbose ) if( verbose )
writeProlog( cout, parameters, problem ); writeProlog( cout, parameters, problem );
tnlString logFileName; tnlString logFileName;
if( parameters. GetParameter< tnlString >( "log-file", logFileName ) ) bool haveLogFile = parameters. GetParameter< tnlString >( "log-file", logFileName );
if( haveLogFile )
{ {
fstream logFile; fstream logFile;
logFile. open( logFileName. getString(), ios :: out ); logFile. open( logFileName. getString(), ios :: out );
...@@ -285,8 +300,25 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem, ...@@ -285,8 +300,25 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
/**** /****
* Start the solver * Start the solver
*/ */
bool returnCode( true );
if( ! solver. solve() ) if( ! solver. solve() )
return false; {
returnCode = false;
if( verbose )
cerr << endl << "The solver did not converge. " << endl;
fstream logFile;
logFile. open( logFileName. getString(), ios :: out | ios :: app );
if( ! logFile )
{
cerr << "Unable to open the log file " << logFileName << "." << endl;
return false;
}
else
{
logFile << "The solver did not converge. " << endl;
logFile. close();
}
}
/**** /****
* Stop timers * Stop timers
...@@ -301,7 +333,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem, ...@@ -301,7 +333,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
*/ */
if( verbose ) if( verbose )
writeEpilog( cout ); writeEpilog( cout );
if( parameters. GetParameter< tnlString >( "log-file", logFileName ) ) if( haveLogFile )
{ {
fstream logFile; fstream logFile;
logFile. open( logFileName. getString(), ios :: out | ios :: app ); logFile. open( logFileName. getString(), ios :: out | ios :: app );
...@@ -316,7 +348,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem, ...@@ -316,7 +348,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
logFile. close(); logFile. close();
} }
} }
return true; return returnCode;
} }
bool tnlSolverStarter :: writeEpilog( ostream& str ) bool tnlSolverStarter :: writeEpilog( ostream& str )
......
...@@ -62,6 +62,10 @@ class tnlSolverStarter ...@@ -62,6 +62,10 @@ class tnlSolverStarter
protected: protected:
template< typename IterativeSolver >
bool setIterativeSolver( IterativeSolver& solver,
const tnlParameterContainer& parameters ) const;
int verbose; int verbose;
int logWidth; int logWidth;
......
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