Exemple #1
0
int enkf_config_node_load_obs( const enkf_config_node_type * config_node , enkf_obs_type * enkf_obs ,const char * key_index , int obs_count , time_t * _sim_time , double * _y , double * _std) {
  ert_impl_type impl_type = enkf_config_node_get_impl_type(config_node);
  int num_obs = 0;
  int iobs;

  for (iobs = 0; iobs < stringlist_get_size( config_node->obs_keys ); iobs++) {
    obs_vector_type * obs_vector = enkf_obs_get_vector( enkf_obs , stringlist_iget( config_node->obs_keys , iobs));
    
    int report_step = -1;
    while (true) {
      report_step = obs_vector_get_next_active_step( obs_vector , report_step);
      if (report_step == -1) break;
      {
        bool valid;
        double value , std1;

        /**
           The user index used when calling the user_get function on the
           gen_obs data type is different depending on whether is called with a
           data context user_key (as here) or with a observation context
           user_key (as when plotting an observation plot). See more
           documentation of the function gen_obs_user_get_data_index(). 
        */

        if (impl_type == GEN_DATA)
          gen_obs_user_get_with_data_index( obs_vector_iget_node( obs_vector , report_step ) , key_index , &value , &std1 , &valid);
        else
          obs_vector_user_get( obs_vector , key_index , report_step , &value , &std1 , &valid);
        
        if (valid) {
          if (obs_count > 0) {
            _sim_time[num_obs] = enkf_obs_iget_obs_time( enkf_obs , report_step );
            _y[num_obs]        = value;
            _std[num_obs]      = std1;
          }
          num_obs++;
        }
      }
    }
  }

  /* Sorting the observations in time order. */
  if (obs_count > 0) {
    double_vector_type * y        = double_vector_alloc_shared_wrapper( 0 , 0 , _y        , obs_count );
    double_vector_type * std      = double_vector_alloc_shared_wrapper( 0 , 0 , _std      , obs_count );
    time_t_vector_type * sim_time = time_t_vector_alloc_shared_wrapper( 0 , 0 , _sim_time , obs_count );
    int * sort_perm               = time_t_vector_alloc_sort_perm( sim_time );
    
    time_t_vector_permute( sim_time , sort_perm );
    double_vector_permute( y        , sort_perm );
    double_vector_permute( std      , sort_perm );
    
    free( sort_perm );
    double_vector_free( y );
    double_vector_free( std );
    time_t_vector_free( sim_time );
  }
  return num_obs;
}
Exemple #2
0
void test_gendata( enkf_main_type * enkf_main , const char * obs_key , int report_step ) {
    enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main );

    obs_vector_type * obs_vector = enkf_obs_get_vector( enkf_obs , obs_key);

    {
        enkf_plot_gendata_type * gen_data = enkf_plot_gendata_alloc_from_obs_vector( obs_vector );

        enkf_fs_type * fs = enkf_main_get_fs( enkf_main );
        gen_obs_type * gen_obs = obs_vector_iget_node( obs_vector , report_step );

        {

            double  value;
            double  std;
            bool valid;
            gen_obs_user_get_with_data_index(gen_obs , "0" , &value , &std , &valid );
            test_assert_double_equal( 0.143841 , value );
            test_assert_double_equal( 0.0300 ,  std );
            test_assert_true( valid );

        }

        enkf_plot_gendata_load(gen_data, fs, report_step, FORECAST, NULL);

        test_assert_int_equal( enkf_main_get_ensemble_size( enkf_main ) , enkf_plot_gendata_get_size( gen_data ));

        {
            enkf_plot_genvector_type * vector = enkf_plot_gendata_iget( gen_data , 24);
            test_assert_true( enkf_plot_genvector_is_instance( vector ));
            test_assert_double_equal(  0.675537 , enkf_plot_genvector_iget( vector , 0 ));
            test_assert_double_equal( 0.682635 , enkf_plot_genvector_iget( vector , 1 ));
            test_assert_double_equal( 0.616371 , enkf_plot_genvector_iget( vector , 2 ));


        }

        {
            enkf_plot_genvector_type * vector = enkf_plot_gendata_iget( gen_data , 9 );
            test_assert_true( enkf_plot_genvector_is_instance( vector ));
            test_assert_double_equal( -0.515033 , enkf_plot_genvector_iget( vector , 0 ));
            test_assert_double_equal( -0.507350 , enkf_plot_genvector_iget( vector , 1 ));
            test_assert_double_equal( -0.541030 , enkf_plot_genvector_iget( vector , 2 ));
        }


        enkf_plot_gendata_free( gen_data );
    }


}