Commit 8a310613 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Adding max-solver-iterations to tnlSolverStarter.

parent 97c9009d
Loading
Loading
Loading
Loading
+37 −5
Original line number Diff line number Diff line
@@ -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() )
   {
      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 )
+4 −0
Original line number Diff line number Diff line
@@ -62,6 +62,10 @@ class tnlSolverStarter

   protected:

   template< typename IterativeSolver >
   bool setIterativeSolver( IterativeSolver& solver,
                            const tnlParameterContainer& parameters ) const;

   int verbose;

   int logWidth;