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,
solver. setSolverMonitor( odeSolverMonitor );
else
solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() );
if( ! setIterativeSolver( solver, parameters ) )
return false;
return setExplicitTimeDiscretisation( problem, parameters, solver );
}
......@@ -103,7 +105,8 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem,
solver. setSolverMonitor( odeSolverMonitor );
else
solver. setSolverMonitor( * ( tnlODESolverMonitor< typename Problem :: RealType, typename Problem :: IndexType >* ) problem. getSolverMonitor() );
if( ! setIterativeSolver( solver, parameters ) )
return false;
return setExplicitTimeDiscretisation( problem, parameters, solver );
}
......@@ -166,6 +169,17 @@ bool tnlSolverStarter :: setDiscreteSolver( Problem& problem,
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 > class DiscreteSolver >
bool tnlSolverStarter :: setExplicitTimeDiscretisation( Problem& problem,
......@@ -252,7 +266,8 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
if( verbose )
writeProlog( cout, parameters, problem );
tnlString logFileName;
if( parameters. GetParameter< tnlString >( "log-file", logFileName ) )
bool haveLogFile = parameters. GetParameter< tnlString >( "log-file", logFileName );
if( haveLogFile )
{
fstream logFile;
logFile. open( logFileName. getString(), ios :: out );
......@@ -285,8 +300,25 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
/****
* Start the solver
*/
bool returnCode( true );
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
......@@ -301,7 +333,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
*/
if( verbose )
writeEpilog( cout );
if( parameters. GetParameter< tnlString >( "log-file", logFileName ) )
if( haveLogFile )
{
fstream logFile;
logFile. open( logFileName. getString(), ios :: out | ios :: app );
......@@ -316,7 +348,7 @@ bool tnlSolverStarter :: runPDESolver( Problem& problem,
logFile. close();
}
}
return true;
return returnCode;
}
bool tnlSolverStarter :: writeEpilog( ostream& str )
......
......@@ -62,6 +62,10 @@ class tnlSolverStarter
protected:
template< typename IterativeSolver >
bool setIterativeSolver( IterativeSolver& solver,
const tnlParameterContainer& parameters ) const;
int verbose;
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