void enkf_main_init_case_from_existing(const enkf_main_type * enkf_main, enkf_fs_type * source_case_fs, int source_report_step, state_enum source_state, enkf_fs_type * target_case_fs ) { stringlist_type * param_list = ensemble_config_alloc_keylist_from_var_type( enkf_main_get_ensemble_config(enkf_main) , PARAMETER ); /* Select only paramters - will fail for GEN_DATA of type DYNAMIC_STATE. */ int target_report_step = 0; state_enum target_state = ANALYZED; bool_vector_type * iactive = bool_vector_alloc( 0 , true ); enkf_main_copy_ensemble(enkf_main, source_case_fs, source_report_step, source_state, target_case_fs, target_report_step, target_state , iactive, NULL, param_list); enkf_fs_fsync(target_case_fs); bool_vector_free(iactive); stringlist_free(param_list); }
void enkf_tui_init(enkf_main_type * enkf_main, bool all_members , bool all_parameters , bool interval ) { const int prompt_len = 35; const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); int ens_size = enkf_main_get_ensemble_size( enkf_main ); int iens1, iens2; init_mode_enum init_mode = INIT_FORCE; bool iens_valid = false; /* iens2 should be interpreted as __inclusive__ */ if ( all_members ) { iens1 = 0; iens2 = ens_size - 1; iens_valid = true; } else { if( interval ) { char * iens1char = util_scanf_int_with_limits_return_char("First ensemble member in interval" , prompt_len , 0 , ens_size - 1); if (strlen(iens1char)) { util_sscanf_int(iens1char , &iens1); char * iens2char = util_scanf_int_with_limits_return_char("Second ensemble member in interval" , prompt_len , iens1 , ens_size - 1); if (strlen(iens2char)) { util_sscanf_int(iens2char , &iens2); iens_valid = true; } free(iens2char); } free(iens1char); } else { char * iens1char = util_scanf_int_with_limits_return_char("Initialize ensemble member" , prompt_len , 0 , ens_size - 1); if (strlen(iens1char)) { util_sscanf_int(iens1char , &iens1); iens2 = iens1; iens_valid = true; } free(iens1char); } } if (iens_valid) { stringlist_type * param_list = NULL; if (all_parameters) param_list = ensemble_config_alloc_keylist_from_var_type( ensemble_config , PARAMETER ); else { const enkf_config_node_type * config_node = NULL; param_list = stringlist_alloc_new(); config_node = enkf_tui_util_scanf_key(ensemble_config , prompt_len , INVALID , INVALID_VAR); if( config_node != NULL ) stringlist_append_copy( param_list , enkf_config_node_get_key(config_node)); } if (param_list != NULL) { enkf_main_initialize_from_scratch(enkf_main , param_list , iens1 , iens2 , init_mode); stringlist_free( param_list ); } } }
static bool enkf_main_case_is_initialized__( const enkf_main_type * enkf_main , enkf_fs_type * fs , bool_vector_type * __mask) { stringlist_type * parameter_keys = ensemble_config_alloc_keylist_from_var_type( enkf_main->ensemble_config , PARAMETER ); bool_vector_type * mask; bool initialized = true; int ikey = 0; if (__mask != NULL) mask = __mask; else mask = bool_vector_alloc(0 , true ); while ((ikey < stringlist_get_size( parameter_keys )) && (initialized)) { const enkf_config_node_type * config_node = ensemble_config_get_node( enkf_main->ensemble_config , stringlist_iget( parameter_keys , ikey) ); int iens = 0; do { if (bool_vector_safe_iget( mask , iens)) { node_id_type node_id = {.report_step = 0 , .iens = iens , .state = ANALYZED }; initialized = enkf_config_node_has_node( config_node , fs , node_id); } iens++; } while ((iens < enkf_main->ens_size) && (initialized)); ikey++; } stringlist_free( parameter_keys ); if (__mask == NULL) bool_vector_free( mask ); return initialized; } bool enkf_main_case_is_initialized( const enkf_main_type * enkf_main , const char * case_name , bool_vector_type * __mask) { enkf_fs_type * fs = enkf_main_mount_alt_fs(enkf_main , case_name , false ); if (fs) { bool initialized = enkf_main_case_is_initialized__(enkf_main , fs , __mask); enkf_fs_decref( fs ); return initialized; } else return false; }
static void enkf_tui_fs_copy_ensemble__( enkf_main_type * enkf_main, const char * source_case, const char * target_case, int report_step_from, state_enum state_from, int report_step_to, state_enum state_to, bool only_parameters) { msg_type * msg = msg_alloc("Copying: " , false); ensemble_config_type * config = enkf_main_get_ensemble_config(enkf_main); int ens_size = enkf_main_get_ensemble_size(enkf_main); char * ranking_key; const int * ranking_permutation = NULL; int * identity_permutation; ranking_table_type * ranking_table = enkf_main_get_ranking_table( enkf_main ); if (ranking_table_get_size( ranking_table ) > 0) { util_printf_prompt("Name of ranking to resort by (or blank)" , 50 , '=' , "=> "); ranking_key = util_alloc_stdin_line(); if (ranking_table_has_ranking( ranking_table , ranking_key )) ranking_permutation = ranking_table_get_permutation( ranking_table , ranking_key ); else { fprintf(stderr," Sorry: ranking:%s does not exist \n", ranking_key ); return; } } identity_permutation = util_calloc( ens_size , sizeof * identity_permutation ); { int iens; for (iens =0; iens < ens_size; iens++) identity_permutation[iens] = iens; } if (ranking_permutation == NULL) ranking_permutation = identity_permutation; { /* If the current target_case does not exist it is automatically created by the select_write_dir function */ enkf_fs_type * src_fs = enkf_main_mount_alt_fs( enkf_main , source_case , false ); enkf_fs_type * target_fs = enkf_main_mount_alt_fs( enkf_main , target_case , true ); stringlist_type * nodes = ensemble_config_alloc_keylist_from_var_type(config, PARAMETER); { int num_nodes = stringlist_get_size(nodes); msg_show(msg); for(int i = 0; i < num_nodes; i++) { const char * key = stringlist_iget(nodes, i); enkf_config_node_type * config_node = ensemble_config_get_node(config , key); msg_update(msg , key); enkf_node_copy_ensemble(config_node, src_fs , target_fs , report_step_from, state_from, report_step_to , state_to , ens_size , ranking_permutation); } } enkf_fs_decref( src_fs ); enkf_fs_decref( target_fs ); msg_free(msg , true); stringlist_free(nodes); } free( identity_permutation ); }
void enkf_tui_init(enkf_main_type * enkf_main, bool all_members , bool all_parameters , bool interval ) { const int prompt_len = 35; const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); int ens_size = enkf_main_get_ensemble_size( enkf_main ); int iens1, iens2; bool iens_valid = false; /* iens2 should be interpreted as __inclusive__ */ if ( all_members ) { iens1 = 0; iens2 = ens_size - 1; iens_valid = true; } else { if( interval ) { char * iens1char = util_scanf_int_with_limits_return_char("First ensemble member in interval" , prompt_len , 0 , ens_size - 1); if (strlen(iens1char)) { util_sscanf_int(iens1char , &iens1); char * iens2char = util_scanf_int_with_limits_return_char("Second ensemble member in interval" , prompt_len , iens1 , ens_size - 1); if (strlen(iens2char)) { util_sscanf_int(iens2char , &iens2); iens_valid = true; } free(iens2char); } free(iens1char); } else { char * iens1char = util_scanf_int_with_limits_return_char("Initialize ensemble member" , prompt_len , 0 , ens_size - 1); if (strlen(iens1char)) { util_sscanf_int(iens1char , &iens1); iens2 = iens1; iens_valid = true; } free(iens1char); } } if (iens_valid) { stringlist_type * param_list = NULL; if (all_parameters) param_list = ensemble_config_alloc_keylist_from_var_type( ensemble_config , PARAMETER ); else { const enkf_config_node_type * config_node = NULL; param_list = stringlist_alloc_new(); config_node = enkf_tui_util_scanf_key(ensemble_config , prompt_len , INVALID , INVALID_VAR); if( config_node != NULL ) stringlist_append_copy( param_list , enkf_config_node_get_key(config_node)); } if (param_list != NULL) { enkf_fs_type * init_fs = enkf_main_tui_get_fs( enkf_main ); bool_vector_type * iens_mask = bool_vector_alloc( ens_size , false ); path_fmt_type * runpath_fmt = model_config_get_runpath_fmt(enkf_main_get_model_config(enkf_main)); subst_list_type * subst_list = enkf_main_get_data_kw(enkf_main); int iter = 0; bool_vector_iset_block( iens_mask , iens1 , iens2 - iens1 + 1, true ); { ert_run_context_type * run_context = ert_run_context_alloc_INIT_ONLY(init_fs, INIT_CONDITIONAL, iens_mask, runpath_fmt, subst_list , iter ); enkf_main_initialize_from_scratch(enkf_main , param_list , run_context); ert_run_context_free(run_context); } stringlist_free( param_list ); bool_vector_free( iens_mask ); } } }