//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- 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); } }
void RegressionTest::printResultsForKeyword(const std::string& keyword) const { std::cout << "Deviation results for keyword " << keyword << " of type " << ecl_util_get_type_name(ecl_file_iget_named_type(ecl_file1, keyword.c_str(), 0)) << ":\n"; const double absDeviationAverage = average(absDeviation); const double relDeviationAverage = average(relDeviation); std::cout << "Average absolute deviation = " << absDeviationAverage << std::endl; std::cout << "Median absolute deviation = " << median(absDeviation) << std::endl; std::cout << "Average relative deviation = " << relDeviationAverage << std::endl; std::cout << "Median relative deviation = " << median(relDeviation) << "\n\n"; }
void RegressionTest::resultsForKeyword(const std::string keyword) { keywordValidForComparing(keyword); const unsigned int occurrences1 = ecl_file_get_num_named_kw(ecl_file1, keyword.c_str()); const unsigned int occurrences2 = ecl_file_get_num_named_kw(ecl_file2, keyword.c_str()); if (!onlyLastOccurrence && occurrences1 != occurrences2) { OPM_THROW(std::runtime_error, "For keyword " << keyword << ":" << "\nKeyword occurrences in first file: " << occurrences1 << "\nKeyword occurrences in second file: " << occurrences2 << "\nThe number of occurrences differ."); } // Assuming keyword type is constant for every occurrence: const ecl_type_enum kw_type = ecl_file_iget_named_type(ecl_file1, keyword.c_str(), 0); switch(kw_type) { case ECL_DOUBLE_TYPE: case ECL_FLOAT_TYPE: std::cout << "Comparing " << keyword << "..."; if (onlyLastOccurrence) { doubleComparisonForOccurrence(keyword, occurrences1 - 1, occurrences2 - 1); } else { for (unsigned int occurrence = 0; occurrence < occurrences1; ++occurrence) { doubleComparisonForOccurrence(keyword, occurrence, occurrence); } } std::cout << "done." << std::endl; printResultsForKeyword(keyword); absDeviation.clear(); relDeviation.clear(); return; case ECL_INT_TYPE: std::cout << "Comparing " << keyword << "..."; if (onlyLastOccurrence) { intComparisonForOccurrence(keyword, occurrences1 - 1, occurrences2 - 1); } else { for (unsigned int occurrence = 0; occurrence < occurrences1; ++occurrence) { intComparisonForOccurrence(keyword, occurrence, occurrence); } } break; case ECL_CHAR_TYPE: std::cout << "Comparing " << keyword << "..."; if (onlyLastOccurrence) { charComparisonForOccurrence(keyword, occurrences1 - 1, occurrences2 - 1); } else { for (unsigned int occurrence = 0; occurrence < occurrences1; ++occurrence) { charComparisonForOccurrence(keyword, occurrence, occurrence); } } break; case ECL_BOOL_TYPE: std::cout << "Comparing " << keyword << "..."; if (onlyLastOccurrence) { boolComparisonForOccurrence(keyword, occurrences1 - 1, occurrences2 - 1); } else { for (unsigned int occurrence = 0; occurrence < occurrences1; ++occurrence) { boolComparisonForOccurrence(keyword, occurrence, occurrence); } } break; case ECL_MESS_TYPE: std::cout << "\nKeyword " << keyword << " is of type " << ecl_util_get_type_name(kw_type) << ", which is not supported in regression test." << "\n\n"; return; default: std::cout << "\nKeyword " << keyword << "has undefined type." << std::endl; return; } std::cout << "done." << std::endl; }
void ECLFilesComparator::printKeywords() const { std::cout << "\nKeywords in the first file:\n"; for (const auto& it : keywords1) { std::cout << std::setw(15) << std::left << it << " of type " << ecl_util_get_type_name(ecl_file_iget_named_type(ecl_file1, it.c_str(), 0)) << std::endl; } std::cout << "\nKeywords in second file:\n"; for (const auto& it : keywords2) { std::cout << std::setw(15) << std::left << it << " of type " << ecl_util_get_type_name(ecl_file_iget_named_type(ecl_file2, it.c_str(), 0)) << std::endl; } }