void * enkf_main_std_scale_correlated_obs_JOB(void * self, const stringlist_type * args) { if (stringlist_get_size(args) > 0) { enkf_main_type * enkf_main = enkf_main_safe_cast( self ); int ensemble_size = enkf_main_get_ensemble_size(enkf_main); enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); enkf_obs_type * obs = enkf_main_get_obs( enkf_main ); int_vector_type * realizations = int_vector_alloc(1, 0); local_obsdata_type * obsdata = local_obsdata_alloc( "OBS-JOB" ); int_vector_init_range(realizations, 0, ensemble_size, 1); for (int iarg = 0; iarg < stringlist_get_size(args); iarg++) { const char * arg_key = stringlist_iget( args , iarg ); stringlist_type * key_list = enkf_obs_alloc_matching_keylist(obs, arg_key); for (int iobs=0; iobs < stringlist_get_size( key_list ); iobs++) { const char * obs_key = stringlist_iget( key_list , iobs); const obs_vector_type * obs_vector = enkf_obs_get_vector(obs, obs_key); local_obsdata_add_node( obsdata , obs_vector_alloc_local_node(obs_vector) ); } stringlist_free( key_list ); } if (local_obsdata_get_size(obsdata) > 0) enkf_obs_scale_correlated_std(obs, fs, realizations, obsdata ); local_obsdata_free( obsdata ); } return NULL; }
local_ministep_type * local_ministep_alloc(const char * name, analysis_module_type* analysis_module) { local_ministep_type * ministep = util_malloc( sizeof * ministep ); ministep->name = util_alloc_string_copy( name ); char* obsdata_name = "OBSDATA_"; char* result = malloc(strlen(obsdata_name)+strlen(name)+1); strcpy(result, obsdata_name); strcat(result, name); ministep->observations = local_obsdata_alloc(result); ministep->datasets = hash_alloc(); ministep->analysis_module = analysis_module; UTIL_TYPE_ID_INIT( ministep , LOCAL_MINISTEP_TYPE_ID); return ministep; }
int main(int argc , char ** argv) { local_obsdata_type * obsdata; obsdata = local_obsdata_alloc( "KEY"); test_assert_true( local_obsdata_is_instance( obsdata )); test_assert_int_equal( 0 , local_obsdata_get_size( obsdata )); test_assert_string_equal( "KEY" , local_obsdata_get_name( obsdata )); { local_obsdata_node_type * obsnode = local_obsdata_node_alloc( "KEY" ); test_assert_true( local_obsdata_add_node( obsdata , obsnode ) ); test_assert_false( local_obsdata_add_node( obsdata , obsnode ) ); test_assert_int_equal( 1 , local_obsdata_get_size( obsdata )); test_assert_ptr_equal( obsnode , local_obsdata_iget( obsdata , 0)); } local_obsdata_free( obsdata ); test_wrapper(); exit(0); }
void testS( ert_test_context_type * test_context ) { { enkf_main_type * enkf_main = ert_test_context_get_main( test_context ); enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); int_vector_type * active_list = int_vector_alloc(0,0); obs_data_type * obs_data = obs_data_alloc(1.0); local_obsdata_type * obs_set = local_obsdata_alloc( "KEY" ); bool_vector_type * ens_mask; meas_data_type * meas_data; for (int i= 0; i < enkf_main_get_ensemble_size( enkf_main); i++) int_vector_append( active_list , i ); ens_mask = int_vector_alloc_mask( active_list); obs_data = obs_data_alloc(1.0); meas_data = meas_data_alloc( ens_mask ); enkf_obs_add_local_nodes_with_data( enkf_obs , obs_set , fs , ens_mask ); enkf_obs_get_obs_and_measure_data( enkf_obs , fs , obs_set, FORECAST , active_list , meas_data , obs_data); { FILE * stream = util_fopen("analysis/Smatrix" , "r"); matrix_type * S = meas_data_allocS( meas_data ); matrix_type * S0 = matrix_fread_alloc( stream ); test_assert_true( matrix_equal( S0 , S )); matrix_free( S ); matrix_free( S0 ); fclose( stream ); } int_vector_free( active_list ); meas_data_free( meas_data ); obs_data_free( obs_data ); local_obsdata_free( obs_set ); bool_vector_free( ens_mask ); } }
local_obsdata_type * local_obsdata_alloc_wrapper( local_obsdata_node_type * node ) { local_obsdata_type * data = local_obsdata_alloc( local_obsdata_node_get_key( node )); local_obsdata_add_node( data , node ); return data; }