ecl_rft_file_type * ecl_rft_file_alloc_case( const char * case_input ) { ecl_rft_file_type * ecl_rft_file = NULL; char * file_name = ecl_rft_file_alloc_case_filename( case_input ); if (file_name != NULL) { ecl_rft_file = ecl_rft_file_alloc( file_name ); free( file_name ); } return ecl_rft_file; }
void ecl_rft_file_update(const char * rft_file_name, ecl_rft_node_type ** nodes,int num_nodes, ert_ecl_unit_enum unit_set){ ecl_rft_file_type * rft_file; if(util_file_exists(rft_file_name)){ int node_index; rft_file = ecl_rft_file_alloc( rft_file_name ); for(node_index = 0; node_index < num_nodes; node_index++) { ecl_rft_node_type * new_node = nodes[node_index]; int storage_index = ecl_rft_file_get_node_index_time_rft(rft_file, ecl_rft_node_get_well_name(new_node), ecl_rft_node_get_date(new_node)); if (storage_index == -1) { ecl_rft_file_add_node(rft_file, new_node); } else { vector_iset_owned_ref(rft_file->data, storage_index, new_node,ecl_rft_node_free__); } } }else{ int node_index; rft_file = ecl_rft_file_alloc_empty( rft_file_name ); for(node_index = 0; node_index < num_nodes; node_index++) { ecl_rft_file_add_node(rft_file, nodes[node_index]); } } { bool fmt_file = false; fortio_type * fortio = fortio_open_writer( rft_file_name , fmt_file , ECL_ENDIAN_FLIP ); int node_index; /** The sorting here works directly on the internal node storage rft_file->data; that might in principle ruin the indexing of the ecl_file object - it is therefor absolutely essential that this ecl_rft_file object does not live beyond this function, and also that the ecl_rft_file api functions are avoided for the rest of this function. */ vector_sort(rft_file->data,(vector_cmp_ftype *) ecl_rft_node_cmp); for(node_index=0; node_index < vector_get_size( rft_file->data ); node_index++) { const ecl_rft_node_type *new_node = vector_iget_const(rft_file->data, node_index); ecl_rft_node_fwrite(new_node, fortio, unit_set); } fortio_fclose( fortio ); } ecl_rft_file_free(rft_file); }
void test_rft_read_write(const char * rft_file){ ecl_rft_file_type * rft = ecl_rft_file_alloc( rft_file ); ecl_rft_node_type ** nodes =(ecl_rft_node_type **) malloc(sizeof(ecl_rft_node_type *) * 3); int size = ecl_rft_file_get_size(rft); for(int i =0;i<size;i++){ const ecl_rft_node_type * rft_node = ecl_rft_file_iget_node(rft, i); nodes[i] =rft_node; } ecl_rft_node_type * old_node = ecl_rft_file_iget_node(rft, 0); ecl_rft_node_type * new_node = ecl_rft_node_alloc_new("DUMMY", "R", ecl_rft_node_get_date(old_node), ecl_rft_node_get_days(old_node)); nodes[2]=new_node; test_work_area_type * work_area = test_work_area_alloc("RFT_RW"); ecl_rft_file_update("eclipse.rft", nodes,3, ERT_ECL_METRIC_UNITS); test_work_area_free(work_area); free(nodes); }
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 ); }
// 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 ); }