diff --git a/opm/autodiff/FlowMainEbos.hpp b/opm/autodiff/FlowMainEbos.hpp index 730b5ffbb..e0a5c30be 100755 --- a/opm/autodiff/FlowMainEbos.hpp +++ b/opm/autodiff/FlowMainEbos.hpp @@ -63,6 +63,15 @@ namespace Opm // The FlowMain class is the ebos based black-oil simulator. class FlowMainEbos { + enum FileOutputValue{ + //! \brief No output to files. + OUTPUT_NONE = 0, + //! \brief Output only to log files, no eclipse output. + OUTPUT_LOG_ONLY = 1, + //! \brief Output to all files. + OUTPUT_ALL = 3 + }; + public: typedef TTAG(EclFlowProblem) TypeTag; typedef typename GET_PROP(TypeTag, MaterialLaw)::EclMaterialLawManager MaterialLawManager; @@ -231,7 +240,26 @@ namespace Opm // Throws std::runtime_error if failed to create (if requested) output dir. void setupOutput() { - output_to_files_ = output_cout_ && param_.getDefault("output", true); + const std::string output = param_.getDefault("output", std::string("all")); + static std::map string2OutputEnum = + { {"none", OUTPUT_NONE }, + {"false", OUTPUT_LOG_ONLY }, + {"log", OUTPUT_LOG_ONLY }, + {"all" , OUTPUT_ALL }, + {"true" , OUTPUT_ALL }}; + auto converted = string2OutputEnum.find(output); + if ( converted != string2OutputEnum.end() ) + { + output_ = string2OutputEnum[output]; + } + else + { + std::cerr << "Value " << output << + " passed to option output was invalid. Using \"all\" instead." + << std::endl; + } + + output_to_files_ = output_cout_ && output_ > OUTPUT_NONE; // Setup output directory. auto& ioConfig = eclState().getIOConfig(); @@ -281,15 +309,25 @@ namespace Opm logFileStream << ".PRT"; debugFileStream << ".DEBUG"; - std::string debugFile = debugFileStream.str(); logFile_ = logFileStream.str(); - std::shared_ptr prtLog = std::make_shared(logFile_ , Log::NoDebugMessageTypes, false, output_cout_); + if( output_ > OUTPUT_NONE) + { + std::shared_ptr prtLog = std::make_shared(logFile_ , Log::NoDebugMessageTypes, false, output_cout_); + OpmLog::addBackend( "ECLIPSEPRTLOG" , prtLog ); + prtLog->setMessageLimiter(std::make_shared()); + prtLog->setMessageFormatter(std::make_shared(false)); + } + + if( output_ >= OUTPUT_LOG_ONLY && !param_.getDefault("no_debug_log", false) ) + { + std::string debugFile = debugFileStream.str(); + std::shared_ptr debugLog = std::make_shared(debugFile, Log::DefaultMessageTypes, false, output_cout_); + OpmLog::addBackend( "DEBUGLOG" , debugLog); + } + std::shared_ptr streamLog = std::make_shared(std::cout, Log::StdoutMessageTypes); - OpmLog::addBackend( "ECLIPSEPRTLOG" , prtLog ); OpmLog::addBackend( "STREAMLOG", streamLog); - std::shared_ptr debugLog = std::make_shared(debugFile, Log::DefaultMessageTypes, false, output_cout_); - OpmLog::addBackend( "DEBUGLOG" , debugLog); const auto& msgLimits = eclState().getSchedule().getMessageLimits(); const std::map limits = {{Log::MessageType::Note, msgLimits.getCommentPrintLimit(0)}, {Log::MessageType::Info, msgLimits.getMessagePrintLimit(0)}, @@ -297,8 +335,6 @@ namespace Opm {Log::MessageType::Error, msgLimits.getErrorPrintLimit(0)}, {Log::MessageType::Problem, msgLimits.getProblemPrintLimit(0)}, {Log::MessageType::Bug, msgLimits.getBugPrintLimit(0)}}; - prtLog->setMessageLimiter(std::make_shared()); - prtLog->setMessageFormatter(std::make_shared(false)); streamLog->setMessageLimiter(std::make_shared(10, limits)); streamLog->setMessageFormatter(std::make_shared(true)); @@ -548,7 +584,7 @@ namespace Opm void writeInit() { - bool output = param_.getDefault("output", true); + bool output = ( output_ > OUTPUT_LOG_ONLY ); bool output_ecl = param_.getDefault("output_ecl", true); if( output && output_ecl && grid().comm().rank() == 0 ) { @@ -881,6 +917,7 @@ namespace Opm std::unique_ptr ebosSimulator_; int mpi_rank_ = 0; bool output_cout_ = false; + FileOutputValue output_ = OUTPUT_ALL; bool must_distribute_ = false; ParameterGroup param_; bool output_to_files_ = false; diff --git a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp index b58eb30c5..23afbe832 100644 --- a/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp +++ b/opm/autodiff/SimulatorFullyImplicitBlackoilOutput.hpp @@ -338,7 +338,12 @@ namespace Opm const Opm::EclipseState& eclipseState, std::unique_ptr&& eclIO, const Opm::PhaseUsage &phaseUsage) - : output_( param.getDefault("output", true) ), + : output_( [ ¶m ] () -> bool { + // If output parameter is true or all, then we do output + const std::string outputString = param.getDefault("output", std::string("all")); + return ( outputString == "all" || outputString == "true" ); + }() + ), parallelOutput_( output_ ? new ParallelDebugOutput< Grid >( grid, eclipseState, phaseUsage.num_phases, phaseUsage ) : 0 ), outputDir_( eclipseState.getIOConfig().getOutputDir() ), restart_double_si_( output_ ? param.getDefault("restart_double_si", false) : false ),