diff --git a/opm/autodiff/FlowMain.hpp b/opm/autodiff/FlowMain.hpp index 8816046fd..4c450e790 100644 --- a/opm/autodiff/FlowMain.hpp +++ b/opm/autodiff/FlowMain.hpp @@ -56,7 +56,7 @@ #include #include #include - +#include #include #include #include @@ -127,6 +127,7 @@ namespace Opm asImpl().setupOutput(); asImpl().readDeckInput(); asImpl().setupGridAndProps(); + asImpl().runDiagnostics(); asImpl().setupState(); asImpl().distributeData(); asImpl().setupOutputWriter(); @@ -193,8 +194,8 @@ namespace Opm std::unique_ptr fis_solver_; // createSimulator() std::unique_ptr simulator_; - - + // create log file + std::string logFile_; // ------------ Methods ------------ @@ -336,12 +337,22 @@ namespace Opm // eclipse_state_ // May throw if errors are encountered, here configured to be somewhat tolerant. void readDeckInput() - { + { + std::string deck_filename = param_.get("deck_filename"); + // create logFile + using boost::filesystem::path; + path fpath(deck_filename); + std::string baseName; + if (boost::to_upper_copy(path(fpath.extension()).string()) == ".DATA") { + baseName = path(fpath.stem()).string(); + } else { + baseName = path(fpath.filename()).string(); + } + logFile_ = output_dir_ + "/" + baseName + ".PRT"; // Create Parser - std::string logFile = output_dir_ + "/LOGFILE.txt"; ParserPtr parser(new Parser()); { - std::shared_ptr streamLog = std::make_shared(logFile , Log::DefaultMessageTypes); + std::shared_ptr streamLog = std::make_shared(logFile_ , Log::DefaultMessageTypes); std::shared_ptr counterLog = std::make_shared(Log::DefaultMessageTypes); OpmLog::addBackend( "STREAM" , streamLog ); @@ -350,14 +361,13 @@ namespace Opm // Create Deck and EclipseState. try { - std::string deck_filename = param_.get("deck_filename"); ParseMode parseMode({{ ParseMode::PARSE_RANDOM_SLASH , InputError::IGNORE }}); deck_ = parser->parseFile(deck_filename, parseMode); checkDeck(deck_, parser); eclipse_state_.reset(new EclipseState(deck_, parseMode)); } catch (const std::invalid_argument& e) { - std::cerr << "Failed to create valid EclipseState object. See logfile: " << logFile << std::endl; + std::cerr << "Failed to create valid EclipseState object. See logfile: " << logFile_ << std::endl; std::cerr << "Exception caught: " << e.what() << std::endl; throw; } @@ -522,6 +532,20 @@ namespace Opm + // run diagnostics + // Writes to: + // logFile_ + void runDiagnostics() + { + // Run relperm diagnostics + RelpermDiagnostics diagnostic(logFile_); + diagnostic.diagnosis(eclipse_state_, deck_, grid_init_->grid()); + } + + + + + // Setup output writer. // Writes to: // output_writer_