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