static void file_map_fprintf_kw_list(const file_map_type * file_map , FILE * stream) { int i; for (i=0; i < vector_get_size( file_map->kw_list ); i++) { const ecl_file_kw_type * file_kw = vector_iget_const( file_map->kw_list , i ); fprintf(stream , "%-8s %7d:%s\n", ecl_file_kw_get_header( file_kw ) , ecl_file_kw_get_size( file_kw ) , ecl_util_get_type_name( ecl_file_kw_get_type( file_kw ))); } }
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"; }
static char * fscanf_alloc_grdecl_data( const char * header , bool strict , ecl_type_enum ecl_type , int * kw_size , FILE * stream ) { char newline = '\n'; bool atEOF = false; int init_size = 32; int buffer_size = 64; int data_index = 0; int sizeof_ctype = ecl_util_get_sizeof_ctype( ecl_type ); int data_size = init_size; char * buffer = util_calloc( (buffer_size + 1) , sizeof * buffer ); char * data = util_calloc( sizeof_ctype * data_size , sizeof * data ); while (true) { if (fscanf(stream , "%32s" , buffer) == 1) { if (strcmp(buffer , ECL_COMMENT_STRING) == 0) { // We have read a comment marker - just read up to the end of line. char c; while (true) { c = fgetc( stream ); if (c == newline) break; if (c == EOF) { atEOF = true; break; } } } else if (strcmp(buffer , ECL_DATA_TERMINATION) == 0) break; else { // We have read a valid input string; scan numerical input values from it. // The multiplier algorithm will fail hard if there are spaces on either side // of the '*'. int multiplier; void * value_ptr = NULL; bool char_input = false; if (ecl_type == ECL_INT_TYPE) { int value; if (sscanf(buffer , "%d*%d" , &multiplier , &value) == 2) {} else if (sscanf( buffer , "%d" , &value) == 1) multiplier = 1; else { char_input = true; if (strict) util_abort("%s: Malformed content:\"%s\" when reading keyword:%s \n",__func__ , buffer , header); } value_ptr = &value; } else if (ecl_type == ECL_FLOAT_TYPE) { float value; if (sscanf(buffer , "%d*%g" , &multiplier , &value) == 2) {} else if (sscanf( buffer , "%g" , &value) == 1) multiplier = 1; else { char_input = true; if (strict) util_abort("%s: Malformed content:\"%s\" when reading keyword:%s \n",__func__ , buffer , header); } value_ptr = &value; } else if (ecl_type == ECL_DOUBLE_TYPE) { double value; if (sscanf(buffer , "%d*%lg" , &multiplier , &value) == 2) {} else if (sscanf( buffer , "%lg" , &value) == 1) multiplier = 1; else { char_input = true; if (strict) util_abort("%s: Malformed content:\"%s\" when reading keyword:%s \n",__func__ , buffer , header); } value_ptr = &value; } else util_abort("%s: sorry type:%s not supported \n",__func__ , ecl_util_get_type_name(ecl_type)); if (char_input) fprintf(stderr,"Warning: character string: \'%s\' ignored when reading keyword:%s \n",buffer , header); else { if (data_index + multiplier >= data_size) { data_size = 2*(data_index + multiplier); data = util_realloc( data , sizeof_ctype * data_size * sizeof * data); } iset_range( data , data_index , sizeof_ctype , value_ptr , multiplier ); data_index += multiplier; } } if (atEOF) break; } else break; } free( buffer ); *kw_size = data_index; data = util_realloc( data , sizeof_ctype * data_index * sizeof * data ); return data; }
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; }
rms_type_enum rms_util_convert_ecl_type(ecl_type_enum ecl_type) { rms_type_enum rms_type = rms_int_type; /* Shut up the compiler */ switch (ecl_type) { case(ECL_INT_TYPE): rms_type = rms_int_type; break; case(ECL_FLOAT_TYPE): rms_type = rms_float_type; break; case(ECL_DOUBLE_TYPE): rms_type = rms_double_type; break; default: util_abort("%s: Conversion ecl_type -> rms_type not supported for ecl_type:%s \n",__func__ , ecl_util_get_type_name(ecl_type)); } return rms_type; }