示例#1
0
void test_create_from_field(ecl_grid_type * grid) {
  field_config_type * field_config = field_config_alloc_empty( "PRESSURE" , grid , NULL );
  block_obs_type * block_obs = block_obs_alloc( "ObsKey" , field_config , grid );
  
  test_assert_true( block_obs_is_instance( block_obs ));
  test_assert_int_equal(0 , block_obs_get_size( block_obs ));
  block_obs_append_field_obs( block_obs , 10 , 12 , 8  , 100 , 25);
  test_assert_int_equal(1 , block_obs_get_size( block_obs ));
  block_obs_append_field_obs( block_obs , 10 , 12 , 9  , 100 , 25);
  test_assert_int_equal(2 , block_obs_get_size( block_obs ));
  block_obs_free( block_obs );
  field_config_free( field_config );
}
示例#2
0
void test_create_from_summary(ecl_grid_type * grid) {
  container_config_type * container_config = container_config_alloc( "Container");
  block_obs_type * block_obs = block_obs_alloc( "ObsKey" , container_config , grid );
  
  test_assert_true( block_obs_is_instance( block_obs ));
  test_assert_int_equal(0 , block_obs_get_size( block_obs ));

  
  block_obs_append_summary_obs( block_obs , 10 , 12 , 8  , "BPR:111,13,9" , 100 , 25);
  test_assert_int_equal(1 , block_obs_get_size( block_obs ));
  block_obs_append_summary_obs( block_obs , 10 , 12 , 9  , "BPR:11,13,10" , 100 , 25);
  test_assert_int_equal(2 , block_obs_get_size( block_obs ));
  block_obs_free( block_obs );

  container_config_free( container_config );
}
示例#3
0
文件: block_obs.c 项目: jokva/ert
void block_obs_measure(const block_obs_type * block_obs, const void * state , node_id_type node_id , meas_data_type * meas_data , const active_list_type * __active_list) {
    block_obs_assert_data( block_obs , state );
    {
        int obs_size    = block_obs_get_size( block_obs );
        int active_size = active_list_get_active_size( __active_list , obs_size );
        meas_block_type * meas_block = meas_data_add_block( meas_data , block_obs->obs_key , node_id.report_step , obs_size );
        int iobs;

        active_mode_type active_mode = active_list_get_mode( __active_list );
        if (active_mode == ALL_ACTIVE) {
            for (iobs=0; iobs < obs_size; iobs++) {
                double value = block_obs_iget_data( block_obs , state , iobs , node_id );
                meas_block_iset( meas_block , node_id.iens , iobs , value );
            }
        } else if (active_mode == PARTLY_ACTIVE) {
            const int   * active_list    = active_list_get_active( __active_list );
            for (int i =0 ; i < active_size; i++) {
                iobs = active_list[i];
                {
                    double value = block_obs_iget_data( block_obs , state , iobs , node_id);
                    meas_block_iset( meas_block , node_id.iens , i , value );
                }
            }
        }
    }
}
示例#4
0
文件: block_obs.c 项目: jokva/ert
double block_obs_chi2(const block_obs_type * block_obs, const void * state, node_id_type node_id) {
    double sum_chi2 = 0;
    int obs_size = block_obs_get_size( block_obs );
    block_obs_assert_data(block_obs, state);

    for (int i=0; i < obs_size; i++) {
        const point_obs_type * point_obs = block_obs_iget_point_const( block_obs , i );
        double sim_value = point_obs_iget_data( point_obs , state , i, node_id );
        double x = (sim_value - point_obs->value) / point_obs->std;
        sum_chi2 += x*x;
    }
    return sum_chi2;
}
示例#5
0
文件: block_obs.c 项目: jokva/ert
void block_obs_update_std_scale(block_obs_type * block_obs, double scale_factor, const active_list_type * active_list) {
    int obs_size = block_obs_get_size( block_obs );
    if (active_list_get_mode( active_list ) == ALL_ACTIVE) {
        for (int i = 0; i < obs_size; i++) {
            point_obs_type * point_observation = block_obs_iget_point( block_obs , i );
            point_observation->std_scaling = scale_factor;
        }
    } else {
        const int * active_index = active_list_get_active( active_list );
        int size = active_list_get_active_size( active_list , obs_size );
        for (int i=0; i < size; i++) {
            int obs_index = active_index[i];
            point_obs_type * point_observation = block_obs_iget_point( block_obs , obs_index );
            point_observation->std_scaling = scale_factor;
        }
    }
}
示例#6
0
文件: block_obs.c 项目: jokva/ert
void block_obs_user_get(const block_obs_type * block_obs , const char * index_key , double *value , double * std, bool * valid) {
    int      i,j,k;

    *valid = false;
    if (field_config_parse_user_key__( index_key , &i , &j , &k)) {
        int obs_size = block_obs_get_size( block_obs );
        int active_index = ecl_grid_get_active_index3(block_obs->grid , i,j,k);
        int l = 0;
        /* iterating through all the cells the observation is observing. */

        while (!(*valid) && l < obs_size) {
            const point_obs_type * point_obs = block_obs_iget_point_const( block_obs , l);
            if (point_obs->active_index == active_index) {
                *value = point_obs->value;
                *std   = point_obs->std;
                *valid = true;
            }
            l++;
        }
    }
}
示例#7
0
文件: block_obs.c 项目: jokva/ert
void block_obs_get_observations(const block_obs_type * block_obs,  obs_data_type * obs_data, enkf_fs_type * fs,  int report_step , const active_list_type * __active_list) {
    int i;
    int obs_size                 = block_obs_get_size( block_obs );
    int active_size              = active_list_get_active_size( __active_list , obs_size);
    active_mode_type active_mode = active_list_get_mode( __active_list );
    obs_block_type * obs_block   = obs_data_add_block( obs_data , block_obs->obs_key , obs_size , NULL , false );

    if (active_mode == ALL_ACTIVE) {
        for (i=0; i < obs_size; i++) {
            const point_obs_type * point_obs = block_obs_iget_point_const( block_obs , i );
            obs_block_iset(obs_block , i , point_obs->value , point_obs->std * point_obs->std_scaling );
        }
    } else if (active_mode == PARTLY_ACTIVE) {
        const int   * active_list    = active_list_get_active( __active_list );
        for (i =0 ; i < active_size; i++) {
            int iobs = active_list[i];
            const point_obs_type * point_obs = block_obs_iget_point_const( block_obs , i );
            obs_block_iset(obs_block , iobs , point_obs->value , point_obs->std * point_obs->std_scaling );
        }
    }
}