void test_plt_msw( const char * plt_file ) { ecl_rft_file_type * plt = ecl_rft_file_alloc( plt_file ); ecl_rft_node_type * plt_node = ecl_rft_file_iget_node( plt , 11 ); test_assert_true( ecl_rft_node_is_PLT( plt_node )); test_assert_true( ecl_rft_node_is_MSW( plt_node )); test_assert_int_equal( 22 , ecl_rft_node_get_size( plt_node )); ecl_rft_node_inplace_sort_cells( plt_node ); { int i; for (i=1; i < ecl_rft_node_get_size( plt_node ); i++) { const ecl_rft_cell_type * prev_cell = ecl_rft_node_iget_cell( plt_node , i - 1); const ecl_rft_cell_type * this_cell = ecl_rft_node_iget_cell( plt_node , i ); test_assert_true( ecl_rft_cell_get_connection_start( prev_cell ) < ecl_rft_cell_get_connection_start( this_cell )); test_assert_true( ecl_rft_cell_get_connection_end( prev_cell ) < ecl_rft_cell_get_connection_end( this_cell )); } } ecl_rft_file_free( plt ); }
const ecl_rft_cell_type * ecl_rft_node_lookup_ijk( const ecl_rft_node_type * rft_node , int i, int j , int k) { int index = 0; int size = ecl_rft_node_get_size( rft_node ); while (true) { const ecl_rft_cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); if (ecl_rft_cell_ijk_equal( cell , i , j , k )) return cell; index++; if (index == size) /* Could not find it. */ return NULL; } }
// Hardcoded GURBAT values void test_rft( const char * rft_file ) { ecl_rft_file_type * rft = ecl_rft_file_alloc( rft_file ); ecl_rft_node_type * rft_node = ecl_rft_file_iget_node( rft , 0 ); test_assert_true( ecl_rft_node_is_RFT( rft_node )); test_assert_int_equal( 14 , ecl_rft_node_get_size( rft_node )); test_assert_false( ecl_rft_node_is_MSW( rft_node )); test_assert_double_equal( 260.6111 , ecl_rft_node_iget_pressure( rft_node , 0 )); test_assert_double_equal( 0.0581993 , ecl_rft_node_iget_soil( rft_node , 0 )); test_assert_double_equal( 0.9405648 , ecl_rft_node_iget_swat( rft_node , 0 )); test_assert_double_equal( 0.00123579 , ecl_rft_node_iget_sgas( rft_node , 0 )); { int i,j,k; ecl_rft_node_iget_ijk( rft_node , 0 , &i , &j , &k ); test_assert_int_equal( 32 , i ); test_assert_int_equal( 53 , j ); test_assert_int_equal( 0 , k ); ecl_rft_node_iget_ijk( rft_node , 13 , &i , &j , &k ); test_assert_int_equal( 32 , i ); test_assert_int_equal( 54 , j ); test_assert_int_equal( 12 , k ); for (i=0; i < ecl_rft_node_get_size( rft_node ); i++) { const ecl_rft_cell_type * cell1 = ecl_rft_node_iget_cell( rft_node , i ); const ecl_rft_cell_type * cell2 = ecl_rft_node_iget_cell_sorted( rft_node , i ); test_assert_ptr_equal( cell1 , cell2 ); } } ecl_rft_node_inplace_sort_cells( rft_node ); ecl_rft_file_free( rft ); }
// Hardcoded values from a test case with a PLT. void test_plt( const char * plt_file ) { ecl_rft_file_type * plt = ecl_rft_file_alloc( plt_file ); ecl_rft_node_type * plt_node = ecl_rft_file_iget_node( plt , 11 ); test_assert_true( ecl_rft_node_is_PLT( plt_node )); test_assert_false( ecl_rft_node_is_MSW( plt_node )); test_assert_int_equal( 22 , ecl_rft_node_get_size( plt_node )); test_assert_double_equal( 244.284 , ecl_rft_node_iget_pressure( plt_node , 0 )); test_assert_double_equal( 167.473 , ecl_rft_node_iget_orat( plt_node , 0 )); test_assert_double_equal( 41682.2 , ecl_rft_node_iget_grat( plt_node , 0 )); test_assert_double_equal( 0.958927 , ecl_rft_node_iget_wrat( plt_node , 0 )); { int i,j,k; ecl_rft_node_iget_ijk( plt_node , 0 , &i , &j , &k ); test_assert_int_equal( 39 , i ); test_assert_int_equal( 33 , j ); test_assert_int_equal( 16 , k ); ecl_rft_node_iget_ijk( plt_node , 21 , &i , &j , &k ); test_assert_int_equal( 44 , i ); test_assert_int_equal( 34 , j ); test_assert_int_equal( 7 , k ); for (i=0; i < ecl_rft_node_get_size( plt_node ); i++) { const ecl_rft_cell_type * cell1 = ecl_rft_node_iget_cell( plt_node , i ); const ecl_rft_cell_type * cell2 = ecl_rft_node_iget_cell_sorted( plt_node , i ); test_assert_ptr_equal( cell1 , cell2 ); } ecl_rft_node_inplace_sort_cells( plt_node ); } ecl_rft_file_free( plt ); }
void ecl_rft_node_fwrite(const ecl_rft_node_type * rft_node, fortio_type * fortio, ert_ecl_unit_enum unit_set){ ecl_rft_enum type = ecl_rft_node_get_type(rft_node); if (type != RFT) util_abort("%s: sorry - only writing of simple RFT is currently implemented",__func__); { ecl_kw_type * time = ecl_kw_alloc(TIME_KW, 1, ECL_FLOAT_TYPE); ecl_kw_iset_float(time, 0, ecl_rft_node_get_days(rft_node)); ecl_kw_fwrite(time, fortio); ecl_kw_free(time); } { ecl_kw_type * datevalue = ecl_kw_alloc(DATE_KW, 3, ECL_INT_TYPE); time_t date = ecl_rft_node_get_date(rft_node); int day; int month; int year; ecl_util_set_date_values(date , &day , &month , &year); ecl_kw_iset_int(datevalue, 0, day); ecl_kw_iset_int(datevalue, 1, month); ecl_kw_iset_int(datevalue, 2, year); ecl_kw_fwrite(datevalue, fortio); ecl_kw_free(datevalue); } { ecl_kw_type * welletc = ecl_kw_alloc(WELLETC_KW, 16, ECL_CHAR_TYPE); ecl_rft_enum type = ecl_rft_node_get_type(rft_node); ecl_kw_iset_string8(welletc, 1, ecl_rft_node_get_well_name(rft_node)); if(type == PLT) { ecl_kw_iset_string8(welletc, 5, "P"); }else if(type == RFT){ ecl_kw_iset_string8(welletc, 5, "R"); }else if(type == SEGMENT){ ecl_kw_iset_string8(welletc, 5, "S"); } ecl_rft_node_fill_welletc(welletc, unit_set); ecl_kw_fwrite(welletc, fortio); ecl_kw_free(welletc); } { int size_cells = ecl_rft_node_get_size(rft_node); ecl_kw_type * conipos = ecl_kw_alloc(CONIPOS_KW, size_cells, ECL_INT_TYPE); ecl_kw_type * conjpos = ecl_kw_alloc(CONJPOS_KW, size_cells, ECL_INT_TYPE); ecl_kw_type * conkpos = ecl_kw_alloc(CONKPOS_KW, size_cells, ECL_INT_TYPE); ecl_kw_type * hostgrid = ecl_kw_alloc(HOSTGRID_KW, size_cells, ECL_CHAR_TYPE); ecl_kw_type * depth = ecl_kw_alloc(DEPTH_KW, size_cells, ECL_FLOAT_TYPE); ecl_kw_type * pressure = ecl_kw_alloc(PRESSURE_KW, size_cells, ECL_FLOAT_TYPE); ecl_kw_type * swat = ecl_kw_alloc(SWAT_KW, size_cells, ECL_FLOAT_TYPE); ecl_kw_type * sgas = ecl_kw_alloc(SGAS_KW, size_cells, ECL_FLOAT_TYPE); int i; for(i =0;i<size_cells;i++){ const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , i); ecl_kw_iset_int(conipos, i, ecl_rft_cell_get_i(cell)+1); ecl_kw_iset_int(conjpos, i, ecl_rft_cell_get_j(cell)+1); ecl_kw_iset_int(conkpos, i, ecl_rft_cell_get_k(cell)+1); ecl_kw_iset_float(depth, i, ecl_rft_cell_get_depth(cell)); ecl_kw_iset_float(pressure, i, ecl_rft_cell_get_pressure(cell)); ecl_kw_iset_float(swat, i, ecl_rft_cell_get_swat(cell)); ecl_kw_iset_float(sgas, i, ecl_rft_cell_get_sgas(cell)); } ecl_kw_fwrite(conipos, fortio); ecl_kw_fwrite(conjpos, fortio); ecl_kw_fwrite(conkpos, fortio); ecl_kw_fwrite(hostgrid, fortio); ecl_kw_fwrite(depth, fortio); ecl_kw_fwrite(pressure, fortio); ecl_kw_fwrite(swat, fortio); ecl_kw_fwrite(sgas, fortio); ecl_kw_free(conipos); ecl_kw_free(conjpos); ecl_kw_free(conkpos); ecl_kw_free(hostgrid); ecl_kw_free(depth); ecl_kw_free(pressure); ecl_kw_free(swat); ecl_kw_free(sgas); } }