Commit 35f782b3 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Fixed the SolverMonitor bug.

parent 970d0d30
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ class PDESolver : public Object
      using IndexType = Index;
      using SolverMonitorType = IterativeSolverMonitor< RealType, IndexType >;
      
      
      PDESolver();

      static void configSetup( Config::ConfigDescription& config,
@@ -47,6 +48,8 @@ class PDESolver : public Object
      
      void setTotalTimer( Timer& totalTimer );
      
      void setSolverMonitor( SolverMonitorType& solverMonitor );
      
      SolverMonitorType& getSolverMonitor();

      bool writeEpilog( Logger& logger ) const;      
@@ -55,8 +58,6 @@ class PDESolver : public Object

      Timer *ioTimer, *computeTimer, *totalTimer;
      
      SolverMonitorType solverMonitor;
      
      SolverMonitorType *solverMonitorPointer;
};
 
+11 −6
Original line number Diff line number Diff line
@@ -21,7 +21,8 @@ template< typename Real,
PDESolver< Real, Index >::PDESolver()   
: ioTimer( 0 ),
  computeTimer( 0 ),
  solverMonitorPointer( &this->solverMonitor )
  totalTimer( 0 ),
  solverMonitorPointer( 0 )
{
}
   
@@ -41,14 +42,18 @@ PDESolver< Real, Index >::
setup( const Config::ParameterContainer& parameters,
       const String& prefix )
{
   /****
    * Set-up solver monitor and launch the main loop.
    */
   this->solverMonitorPointer->setVerbose( parameters.getParameter< int >( "verbose" ) );
   this->solverMonitorPointer->setTimer( *this->totalTimer );
   return true;
}

template< typename Real,
          typename Index >
void
PDESolver< Real, Index >::
setSolverMonitor( typename PDESolver< Real, Index >::SolverMonitorType& solverMonitor )
{
   this->solverMonitorPointer = &solverMonitor;
}

template< typename Real,
          typename Index >
typename PDESolver< Real, Index >::SolverMonitorType&
+0 −2
Original line number Diff line number Diff line
@@ -55,8 +55,6 @@ TimeDependentPDESolver< Problem, DiscreteSolver, TimeStepper >::
setup( const Config::ParameterContainer& parameters,
       const String& prefix )
{
   if( this->problem->getSolverMonitor() )
      this->solverMonitorPointer = ( SolverMonitorType* ) this->problem->getSolverMonitor();
   
   BaseType::setup( parameters, prefix );
   
+14 −3
Original line number Diff line number Diff line
@@ -383,6 +383,10 @@ bool SolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
   this->totalTimer.reset();
   this->totalTimer.start();
   
   using SolverMonitorType = IterativeSolverMonitor< typename Problem::RealType,
                                                     typename Problem::IndexType >;
   SolverMonitorType solverMonitor, *solverMonitorPointer( &solverMonitor );
 
   /****
    * Open the log file
    */
@@ -398,6 +402,16 @@ bool SolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
    */
   //PDE::TimeDependentPDESolver< Problem, TimeStepper > solver;
   typename PDE::PDESolverTypeResolver< Problem, DiscreteSolver, TimeStepper >::SolverType solver;
   solver.setComputeTimer( this->computeTimer );
   solver.setIoTimer( this->ioTimer );
   solver.setTotalTimer( this->totalTimer );

   if( problem.getSolverMonitor() )
      solverMonitorPointer = ( SolverMonitorType* ) problem.getSolverMonitor();
   solverMonitorPointer->setVerbose( parameters.getParameter< int >( "verbose" ) );
   solverMonitorPointer->setTimer( this->totalTimer );
   solver.setSolverMonitor( *solverMonitorPointer );
   
   // catching exceptions ala gtest:
   // https://github.com/google/googletest/blob/59c795ce08be0c8b225bc894f8da6c7954ea5c14/googletest/src/gtest.cc#L2409-L2431
   const int catch_exceptions = parameters.getParameter< bool >( "catch-exceptions" );
@@ -443,9 +457,6 @@ bool SolverStarter< ConfigTag > :: runPDESolver( Problem& problem,
    */
   this->computeTimer.reset();
   this->ioTimer.reset();
   solver.setComputeTimer( this->computeTimer );
   solver.setIoTimer( this->ioTimer );
   solver.setTotalTimer( this->totalTimer );
   
   /****
    * Create solver monitor thread