ECLFilesComparator::ECLFilesComparator(int file_type, const std::string& basename1, const std::string& basename2, double absTolerance, double relTolerance): file_type(file_type), absTolerance(absTolerance), relTolerance(relTolerance) { std::string file1, file2; if (file_type == ECL_UNIFIED_RESTART_FILE) { file1 = basename1 + ".UNRST"; file2 = basename2 + ".UNRST"; } else if (file_type == ECL_INIT_FILE) { file1 = basename1 + ".INIT"; file2 = basename2 + ".INIT"; } else if (file_type == ECL_RFT_FILE) { file1 = basename1 + ".RFT"; file2 = basename2 + ".RFT"; } else { OPM_THROW(std::invalid_argument, "Unsupported filetype sent to ECLFilesComparator's constructor." << "Only unified restart (.UNRST), initial (.INIT) and .RFT files are supported."); } ecl_file1 = ecl_file_open(file1.c_str(), 0); ecl_file2 = ecl_file_open(file2.c_str(), 0); ecl_grid1 = ecl_grid_load_case(basename1.c_str()); ecl_grid2 = ecl_grid_load_case(basename2.c_str()); if (ecl_file1 == nullptr) { OPM_THROW(std::invalid_argument, "Error opening first file: " << file1); } if (ecl_file2 == nullptr) { OPM_THROW(std::invalid_argument, "Error opening second file: " << file2); } if (ecl_grid1 == nullptr) { OPM_THROW(std::invalid_argument, "Error opening first grid file: " << basename1); } if (ecl_grid2 == nullptr) { OPM_THROW(std::invalid_argument, "Error opening second grid file. " << basename2); } unsigned int numKeywords1 = ecl_file_get_num_distinct_kw(ecl_file1); unsigned int numKeywords2 = ecl_file_get_num_distinct_kw(ecl_file2); keywords1.reserve(numKeywords1); keywords2.reserve(numKeywords2); for (unsigned int i = 0; i < numKeywords1; ++i) { std::string keyword(ecl_file_iget_distinct_kw(ecl_file1, i)); keywords1.push_back(keyword); } for (unsigned int i = 0; i < numKeywords2; ++i) { std::string keyword(ecl_file_iget_distinct_kw(ecl_file2, i)); keywords2.push_back(keyword); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RifEclipseOutputFileTools::findKeywordsAndDataItemCounts(ecl_file_type* ecl_file, QStringList* keywords, std::vector<size_t>* keywordDataItemCounts) { if (!ecl_file || !keywords || !keywordDataItemCounts) return; int numKeywords = ecl_file_get_num_distinct_kw(ecl_file); caf::ProgressInfo info(numKeywords, "Reading Keywords on file"); for (int i = 0; i < numKeywords; i++) { const char* kw = ecl_file_iget_distinct_kw(ecl_file , i); int numKeywordOccurrences = ecl_file_get_num_named_kw(ecl_file, kw); bool validData = true; size_t fileResultValueCount = 0; for (int j = 0; j < numKeywordOccurrences; j++) { fileResultValueCount += ecl_file_iget_named_size(ecl_file, kw, j); ecl_type_enum dataType = ecl_file_iget_named_type(ecl_file, kw, j); if (dataType != ECL_DOUBLE_TYPE && dataType != ECL_FLOAT_TYPE && dataType != ECL_INT_TYPE ) { validData = false; break; } } if (validData) { keywords->append(QString(kw)); keywordDataItemCounts->push_back(fileResultValueCount); } info.setProgress(i); } }
ECLFilesComparator::ECLFilesComparator(eclFileEnum fileType, const std::string& basename1, const std::string& basename2, double absTolerance, double relTolerance): fileType(fileType), absTolerance(absTolerance), relTolerance(relTolerance) { std::string file1, file2; if (fileType == RESTARTFILE) { file1 = basename1 + ".UNRST"; file2 = basename2 + ".UNRST"; } else if (fileType == INITFILE) { file1 = basename1 + ".INIT"; file2 = basename2 + ".INIT"; } ecl_file1 = ecl_file_open(file1.c_str(), 0); ecl_file2 = ecl_file_open(file2.c_str(), 0); ecl_grid1 = ecl_grid_load_case(basename1.c_str()); ecl_grid2 = ecl_grid_load_case(basename2.c_str()); if (ecl_file1 == nullptr) { std::cout << "Tried to open: " << file1 << std::endl; OPM_THROW(std::runtime_error, "Error opening first file."); } if (ecl_file2 == nullptr) { std::cout << "Tried to open: " << file2 << std::endl; OPM_THROW(std::runtime_error, "Error opening second file."); } if (ecl_grid1 == nullptr) { std::cout << "Tried to open: " << basename1 + ".EGRID" << std::endl; OPM_THROW(std::runtime_error, "Error opening first file."); } if (ecl_grid2 == nullptr) { std::cout << "Tried to open: " << basename2 + ".EGRID" << std::endl; OPM_THROW(std::runtime_error, "Error opening second file."); } unsigned int numKeywords1 = ecl_file_get_num_distinct_kw(ecl_file1); unsigned int numKeywords2 = ecl_file_get_num_distinct_kw(ecl_file2); for (unsigned int i = 0; i < numKeywords1; ++i) { std::string keyword(ecl_file_iget_distinct_kw(ecl_file1, i)); keywords1.push_back(keyword); } for (unsigned int i = 0; i < numKeywords2; ++i) { std::string keyword(ecl_file_iget_distinct_kw(ecl_file2, i)); keywords2.push_back(keyword); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RifEclipseOutputFileTools::createReportStepsMetaData(std::vector<ecl_file_type*> ecl_files, std::vector<RifRestartReportStep>* reportSteps) { if (!reportSteps) return; for (auto ecl_file : ecl_files) { if (!ecl_file) continue; int reportStepCount = ecl_file_get_num_named_kw(ecl_file, INTEHEAD_KW); for (int reportStepIndex = 0; reportStepIndex < reportStepCount; reportStepIndex++) { ecl_file_view_type* rst_view = ecl_file_get_global_view(ecl_file); if (!rst_view) continue; ecl_rsthead_type* restart_header = ecl_rsthead_alloc(rst_view, reportStepIndex); if (restart_header) { ecl_file_push_block(ecl_file); { ecl_file_select_block(ecl_file, INTEHEAD_KW, reportStepIndex); RifRestartReportStep reportStep; // Set Date { QDateTime reportDateTime(QDate(restart_header->year, restart_header->month, restart_header->day)); reportStep.dateTime = reportDateTime; } // Find number of keywords withing this report step int numKeywords = ecl_file_get_num_distinct_kw(ecl_file); for (int iKey = 0; iKey < numKeywords; iKey++) { const char* kw = ecl_file_iget_distinct_kw(ecl_file, iKey); int namedKeywordCount = ecl_file_get_num_named_kw(ecl_file, kw); for (int iOcc = 0; iOcc < namedKeywordCount; iOcc++) { ecl_data_type dataType = ecl_file_iget_named_data_type(ecl_file, kw, iOcc); ecl_type_enum dataTypeEmum = ecl_type_get_type(dataType); if (dataTypeEmum != ECL_DOUBLE_TYPE && dataTypeEmum != ECL_FLOAT_TYPE && dataTypeEmum != ECL_INT_TYPE) { continue; } int itemCount = ecl_file_iget_named_size(ecl_file, kw, iOcc); reportStep.m_keywords.appendKeyword(kw, itemCount, iOcc); } } reportSteps->push_back(reportStep); } ecl_file_pop_block(ecl_file); ecl_rsthead_free(restart_header); } } } }