コード例 #1
0
ファイル: data_ranking.c プロジェクト: alfbr/ResInsight
static void data_ranking_init(data_ranking_type * ranking ,
                              enkf_fs_type * fs ,
                              enkf_config_node_type * config_node,
                              const char * key_index ,
                              int step ,
                              state_enum state ) {

    enkf_node_type * enkf_node = enkf_node_alloc( config_node );
    int iens;
    for (iens = 0; iens < ranking->ens_size; iens++) {

        double value;
        node_id_type node_id = {.report_step = step ,
                                .iens = iens ,
                                .state = state
                               };

        if (enkf_node_user_get( enkf_node , fs , key_index , node_id , &value)) {
            double_vector_iset( ranking->data_ensemble , iens , value );
            bool_vector_iset( ranking->valid , iens , true );
        }
    }

    if (ranking->sort_increasing)
        ranking->sort_permutation = double_vector_alloc_sort_perm( ranking->data_ensemble );
    else
        ranking->sort_permutation = double_vector_alloc_rsort_perm( ranking->data_ensemble );

    enkf_node_free( enkf_node );
}
コード例 #2
0
ファイル: misfit_ranking.c プロジェクト: blattms/ert
misfit_ranking_type *  misfit_ranking_alloc(const misfit_ensemble_type * misfit_ensemble , const stringlist_type * sort_keys , const int_vector_type * steps, const char * ranking_key) {
  const int ens_size = misfit_ensemble_get_ens_size( misfit_ensemble );
  int iens;
  misfit_ranking_type * ranking = misfit_ranking_alloc_empty(ens_size);
  
  for (iens = 0; iens < ens_size; iens++) {
    const misfit_member_type * misfit_member = misfit_ensemble_iget_member( misfit_ensemble , iens );  /* Lookup in the master ensemble. */
    
    {
      double iens_valid = true;
      double total = 0;
      hash_type * obs_hash = hash_alloc();
      for (int ikey = 0; ikey < stringlist_get_size( sort_keys ); ikey++) {
        const char * obs_key        = stringlist_iget( sort_keys , ikey );
        if (misfit_member_has_ts( misfit_member , obs_key )) {
          misfit_ts_type * ts = misfit_member_get_ts( misfit_member , obs_key );
          double value        = misfit_ts_eval( ts , steps );  /* Sum up the misfit for this key - and these timesteps. */
          hash_insert_double( obs_hash , obs_key , value);
          total += value;
        } else
          iens_valid = true;
      }
      if (iens_valid) 
        misfit_ranking_iset( ranking , iens , obs_hash , total );
      else
        misfit_ranking_iset_invalid( ranking , iens );
    }
  }
  ranking->sort_permutation = double_vector_alloc_sort_perm( ranking->total );

  return ranking;
}