Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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 );
}
Ejemplo n.º 5
0
// 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 );
}
Ejemplo n.º 6
0
// 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 );
}