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 active_size = active_list_get_active_size( __active_list , block_obs->size ); meas_block_type * meas_block = meas_data_add_block( meas_data , block_obs->obs_key , node_id.report_step , block_obs->size ); int iobs; active_mode_type active_mode = active_list_get_mode( __active_list ); if (active_mode == ALL_ACTIVE) { for (iobs=0; iobs < block_obs->size; iobs++) { const point_obs_type * point_obs = block_obs->point_list[iobs]; double value = point_obs_measure( point_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]; { const point_obs_type * point_obs = block_obs->point_list[iobs]; double value = point_obs_measure( point_obs , state , iobs , node_id); meas_block_iset( meas_block , node_id.iens , point_obs->active_index , value ); } } } } }
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_get_observations(const block_obs_type * block_obs, obs_data_type * obs_data, int report_step , const active_list_type * __active_list) { int i; int active_size = active_list_get_active_size( __active_list , block_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 , block_obs->size , NULL , false ); if (active_mode == ALL_ACTIVE) { for (i=0; i < block_obs->size; i++) { const point_obs_type * point_obs = block_obs->point_list[i]; obs_block_iset(obs_block , i , point_obs->value , point_obs->std ); } } 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->point_list[iobs]; obs_block_iset(obs_block , iobs , point_obs->value , point_obs->std ); } } }