Beispiel #1
0
void obs_vector_load_from_SUMMARY_OBSERVATION(obs_vector_type * obs_vector , const conf_instance_type * conf_instance , time_map_type * obs_time ,  ensemble_config_type * ensemble_config) {
  if(!conf_instance_is_of_class(conf_instance, "SUMMARY_OBSERVATION"))
    util_abort("%s: internal error. expected \"SUMMARY_OBSERVATION\" instance, got \"%s\".\n",
               __func__, conf_instance_get_class_name_ref(conf_instance) );

  {
    double       obs_value       = conf_instance_get_item_value_double(conf_instance, "VALUE" );
    double       obs_error       = conf_instance_get_item_value_double(conf_instance, "ERROR" );
    double       min_error       = conf_instance_get_item_value_double(conf_instance, "ERROR_MIN");
    const char * error_mode      = conf_instance_get_item_value_ref(   conf_instance, "ERROR_MODE");
    const char * sum_key         = conf_instance_get_item_value_ref(   conf_instance, "KEY"   );
    const char * obs_key         = conf_instance_get_name_ref(conf_instance);
    int          obs_restart_nr  = __conf_instance_get_restart_nr(conf_instance , obs_key , obs_time , false);

    if (obs_restart_nr == 0) {
      int day,month,year;
      time_t start_time = time_map_iget( obs_time , 0 );
      util_set_date_values_utc( start_time , &day , &month , &year);

      fprintf(stderr,"** ERROR: It is unfortunately not possible to use summary observations from the\n");
      fprintf(stderr,"          start of the simulation. Problem with observation:%s at %02d/%02d/%4d\n",obs_key , day,month,year);
      exit(1);
    }
    {
      if (strcmp( error_mode , "REL") == 0)
        obs_error *= obs_value;
      else if (strcmp( error_mode , "RELMIN") == 0)
        obs_error  = util_double_max( min_error , obs_error * obs_value );

      obs_vector_add_summary_obs( obs_vector , obs_restart_nr , sum_key , obs_key , obs_value , obs_error , NULL , 0);
    }
  }
}
Beispiel #2
0
void thread_test() {
  time_map_type * time_map = time_map_alloc( );
  
  {
    int pool_size = 1000;
    thread_pool_type * tp = thread_pool_alloc( pool_size/2 , true );
    
    thread_pool_add_job( tp , update_time_map , time_map );
  
    thread_pool_join(tp);
    thread_pool_free(tp);
  }
  {
    int i;
    for (i=0; i < MAP_SIZE; i++) 
      test_assert_true( time_map_iget( time_map , i ) == i );
  }
  time_map_free( time_map );
}