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 ); }
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 ); }
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 ); } } } } }
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; }
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; } } }
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++; } } }
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 ); } } }