diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.cpp b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.cpp index 9a371b300..da5b2ae59 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.cpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.cpp @@ -244,61 +244,65 @@ namespace Opm vtkWriter_->writeTimeStep( timer, localState, localWellState, false ); } - // collect all solutions to I/O rank - const bool isIORank = parallelOutput_->collectToIORank( localState, localWellState ); - - if( isIORank ) + if( parallelOutput_ ) { - const SimulatorState& state = parallelOutput_->globalReservoirState(); - const WellState& wellState = parallelOutput_->globalWellState(); - //std::cout << "number of wells" << wellState.bhp().size() << std::endl; - // Matlab output - if( matlabWriter_ ) { - matlabWriter_->writeTimeStep( timer, state, wellState, substep ); - } - // ECL output - if ( eclWriter_ ) { - eclWriter_->writeTimeStep(timer, state, wellState, substep ); - } + // collect all solutions to I/O rank + const bool isIORank = parallelOutput_->collectToIORank( localState, localWellState ); - // write backup file - if( backupfile_ ) + if( isIORank ) { - int reportStep = timer.reportStepNum(); - int currentTimeStep = timer.currentStepNum(); - if( (reportStep == currentTimeStep || // true for SimulatorTimer - currentTimeStep == 0 || // true for AdaptiveSimulatorTimer at reportStep - timer.done() ) // true for AdaptiveSimulatorTimer at reportStep - && lastBackupReportStep_ != reportStep ) // only backup report step once + const SimulatorState& state = parallelOutput_->globalReservoirState(); + const WellState& wellState = parallelOutput_->globalWellState(); + //std::cout << "number of wells" << wellState.bhp().size() << std::endl; + + // Matlab output + if( matlabWriter_ ) { + matlabWriter_->writeTimeStep( timer, state, wellState, substep ); + } + // ECL output + if ( eclWriter_ ) { + eclWriter_->writeTimeStep(timer, state, wellState, substep ); + } + + // write backup file + if( backupfile_ ) { - // store report step - lastBackupReportStep_ = reportStep; - // write resport step number - backupfile_.write( (const char *) &reportStep, sizeof(int) ); - - try { - const BlackoilState& boState = dynamic_cast< const BlackoilState& > (state); - backupfile_ << boState; - - const WellStateFullyImplicitBlackoil& boWellState = static_cast< const WellStateFullyImplicitBlackoil& > (wellState); - backupfile_ << boWellState; - } - catch ( const std::bad_cast& e ) + int reportStep = timer.reportStepNum(); + int currentTimeStep = timer.currentStepNum(); + if( (reportStep == currentTimeStep || // true for SimulatorTimer + currentTimeStep == 0 || // true for AdaptiveSimulatorTimer at reportStep + timer.done() ) // true for AdaptiveSimulatorTimer at reportStep + && lastBackupReportStep_ != reportStep ) // only backup report step once { + // store report step + lastBackupReportStep_ = reportStep; + // write resport step number + backupfile_.write( (const char *) &reportStep, sizeof(int) ); - } + try { + const BlackoilState& boState = dynamic_cast< const BlackoilState& > (state); + backupfile_ << boState; - /* - const WellStateFullyImplicitBlackoil* boWellState = - dynamic_cast< const WellStateFullyImplicitBlackoil* > (&wellState); - if( boWellState ) { - backupfile_ << (*boWellState); + const WellStateFullyImplicitBlackoil& boWellState = static_cast< const WellStateFullyImplicitBlackoil& > (wellState); + backupfile_ << boWellState; + } + catch ( const std::bad_cast& e ) + { + + } + + /* + const WellStateFullyImplicitBlackoil* boWellState = + dynamic_cast< const WellStateFullyImplicitBlackoil* > (&wellState); + if( boWellState ) { + backupfile_ << (*boWellState); + } + else + OPM_THROW(std::logic_error,"cast to WellStateFullyImplicitBlackoil failed"); + */ + backupfile_ << std::flush; } - else - OPM_THROW(std::logic_error,"cast to WellStateFullyImplicitBlackoil failed"); - */ - backupfile_ << std::flush; } } } diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp index e5789fcce..c21fde881 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp @@ -215,10 +215,10 @@ namespace Opm const int desiredReportStep); protected: + const bool output_; std::unique_ptr< ParallelDebugOutputInterface > parallelOutput_; // Parameters for output. - const bool output_; const std::string outputDir_; const int output_interval_; @@ -243,8 +243,8 @@ namespace Opm const parameter::ParameterGroup& param, Opm::EclipseStateConstPtr eclipseState, const Opm::PhaseUsage &phaseUsage ) - : parallelOutput_( new ParallelDebugOutput< Grid >( grid, eclipseState, phaseUsage.num_phases ) ), - output_( param.getDefault("output", true) ), + : output_( param.getDefault("output", true) ), + parallelOutput_( output_ ? new ParallelDebugOutput< Grid >( grid, eclipseState, phaseUsage.num_phases ) : 0 ), outputDir_( output_ ? param.getDefault("output_dir", std::string("output")) : "." ), output_interval_( output_ ? param.getDefault("output_interval", 1): 0 ), lastBackupReportStep_( -1 ),