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