From 2e86198d406e43d6c47453221932e5903cf9c597 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 11 Jan 2016 13:18:31 +0100 Subject: [PATCH 001/664] Update README.md Updated tested platforms --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 84d690d5bb..0e4137db44 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,7 @@ Octave : [http://www.gnu.org/software/octave/](http://www.gnu.org/software/octav Ensembles/ert : [https://github.com/Ensembles/ert](https://github.com/Ensembles/ert) ### Supported Platforms -ResInsight is designed cross-platform from the start. Efforts have been made to ensure that code will compile and run on Linux and Windows platforms. Tested platforms are currently 64 bit RHEL5, RHEL6 and Windows 7. - -There has been attempts to make ResInsight build and run on OSX as well, but the tweaks needed (submitted by Roland Kaufmann) is not yet incorporated. +ResInsight is designed cross-platform from the start. Efforts have been made to ensure that code will compile and run on Linux and Windows platforms. Tested platforms are currently 64 bit RHEL6 and Windows 7. ### Documentation From 6e52a4101aaa95b0b2fa643f97684b6c4a413965 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 11 Jan 2016 13:40:58 +0100 Subject: [PATCH 002/664] Updated to 1.6.1-dev after relase of 1.6.0 --- ResInsightVersion.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ResInsightVersion.cmake b/ResInsightVersion.cmake index 02f067d341..b29d6092c0 100644 --- a/ResInsightVersion.cmake +++ b/ResInsightVersion.cmake @@ -1,8 +1,8 @@ set(CMAKE_MAJOR_VERSION 1) set(CMAKE_MINOR_VERSION 6) -set(CMAKE_PATCH_VERSION 0) -#set(DEV_VERSION "-RC") +set(CMAKE_PATCH_VERSION 1) +set(DEV_VERSION "-dev") # https://github.com/CRAVA/crava/tree/master/libs/nrlib From 362dd50e9bddf6acab497175af1766fff4038da1 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 19 Apr 2016 14:48:14 +0200 Subject: [PATCH 003/664] Updated internal ERT Copied ERT from https://github.com/Ensembles/ert/commit/614a4295ad1aa4e7687c95e1ecdb92f76e5f0c87 --- ThirdParty/Ert/devel/CMakeLists.txt | 71 +- ThirdParty/Ert/devel/Doxyfile | 1265 --- ThirdParty/Ert/devel/cmake/Tests/test_blas.c | 17 - ThirdParty/Ert/devel/cmake/Tests/test_isreg.c | 8 - ThirdParty/Ert/devel/cmake/Tests/test_mkdir.c | 7 - .../Ert/devel/cmake/Tests/test_mode_t.c | 6 + .../devel/cmake/config/ert_build_config.h.in | 18 - .../Ert/devel/cmake/ert_api_check.cmake | 74 + .../Ert/devel/cmake/ert_build_check.cmake | 75 + ThirdParty/Ert/devel/cmake/ert_check.cmake | 198 - ThirdParty/Ert/devel/cmake/ert_find.cmake | 92 - .../Ert/devel/cmake/ert_lib_check.cmake | 30 + ThirdParty/Ert/devel/cmake/python.cmake2 | 18 +- .../Ert/devel/debian/python-ert.ecl.install | 1 + ThirdParty/Ert/devel/docs/CMakeLists.txt | 2 +- .../code/python/examples/eclipse/index.rst | 2 + .../docs/code/python/examples/ert/index.rst | 3 + .../docs/code/python/examples/geo/index.rst | 2 + .../devel/docs/code/python/examples/index.rst | 10 + .../Ert/devel/docs/code/python/index.rst | 11 +- .../docs/code/python/introduction/index.rst | 701 +- .../code/python/packages/config/index.rst | 3 + .../code/python/packages/eclipse/index.rst | 1260 +++ .../docs/code/python/packages/enkf/index.rst | 2 + .../code/python/packages/geometry/index.rst | 2 + .../devel/docs/code/python/packages/index.rst | 20 + .../docs/code/python/packages/util/index.rst | 2 + .../docs/code/python/packages/well/index.rst | 2 + ThirdParty/Ert/devel/docs/conf.py.in | 2 +- ThirdParty/Ert/devel/docs/tips.txt | 2 +- ThirdParty/Ert/devel/docs/user/index.rst | 1 + .../Ert/devel/docs/user/keywords/index.rst | 269 +- .../devel/docs/user/localization/index.rst | 140 +- .../devel/docs/user/magic_strings/index.rst | 30 + .../Ert/devel/docs/user/workflows/index.rst | 26 +- .../Ert/devel/libanalysis/src/CMakeLists.txt | 2 +- .../include/ert/config/config_content.h | 1 + .../include/ert/config/config_parser.h | 2 +- .../include/ert/config/config_schema_item.h | 51 +- .../Ert/devel/libconfig/src/CMakeLists.txt | 2 +- .../Ert/devel/libconfig/src/config_content.c | 8 + .../Ert/devel/libconfig/src/config_parser.c | 28 +- .../devel/libconfig/src/config_schema_item.c | 11 +- .../libconfig/tests/config_append_test.c | 4 +- .../Ert/devel/libconfig/tests/config_argc.c | 6 +- .../libconfig/tests/config_content_item.c | 2 +- .../Ert/devel/libconfig/tests/config_define.c | 9 +- .../libconfig/tests/config_include_test.c | 2 +- .../devel/libconfig/tests/config_node_test.c | 2 +- .../devel/libconfig/tests/config_typeFail.c | 2 +- .../Ert/devel/libconfig/tests/config_typeOK.c | 2 +- .../devel/libecl/applications/CMakeLists.txt | 33 +- .../Ert/devel/libecl/applications/ecl_pack.c | 2 +- .../devel/libecl/applications/ecl_quantile.c | 2 +- .../devel/libecl/applications/ecl_unpack.c | 18 +- .../Ert/devel/libecl/applications/ens_plot.c | 1988 ---- .../Ert/devel/libecl/applications/grid_info.c | 39 +- .../devel/libecl/applications/summary2csv.c | 112 - .../devel/libecl/applications/view_summary.c | 18 +- .../devel/libecl/include/ert/ecl/ecl_grid.h | 4 + .../Ert/devel/libecl/include/ert/ecl/ecl_kw.h | 3 +- .../libecl/include/ert/ecl/ecl_rft_file.h | 1 - .../libecl/include/ert/ecl/ecl_rsthead.h | 6 + .../devel/libecl/include/ert/ecl/ecl_sum.h | 2 +- .../libecl/include/ert/ecl/ecl_sum_data.h | 2 +- .../libecl/include/ert/ecl/ecl_sum_vector.h | 6 + .../devel/libecl/include/ert/ecl/ecl_util.h | 1 - .../libecl/include/ert/ecl/smspec_node.h | 11 +- .../Ert/devel/libecl/src/CMakeLists.txt | 2 +- ThirdParty/Ert/devel/libecl/src/ecl_file.c | 10 - ThirdParty/Ert/devel/libecl/src/ecl_grid.c | 91 +- ThirdParty/Ert/devel/libecl/src/ecl_kw.c | 67 +- .../Ert/devel/libecl/src/ecl_rft_cell.c | 1 + .../Ert/devel/libecl/src/ecl_rft_node.c | 30 +- ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c | 51 +- ThirdParty/Ert/devel/libecl/src/ecl_smspec.c | 12 + ThirdParty/Ert/devel/libecl/src/ecl_sum.c | 48 +- .../Ert/devel/libecl/src/ecl_sum_data.c | 2 +- .../Ert/devel/libecl/src/ecl_sum_vector.c | 9 +- ThirdParty/Ert/devel/libecl/src/ecl_util.c | 429 +- ThirdParty/Ert/devel/libecl/src/smspec_node.c | 93 +- .../Ert/devel/libecl/tests/ecl_fortio.c | 1 + .../Ert/devel/libecl/tests/ecl_grid_corner.c | 1 + ThirdParty/Ert/devel/libecl/tests/ecl_layer.c | 1 + .../Ert/devel/libecl/tests/ecl_rsthead.c | 52 +- ThirdParty/Ert/devel/libecl/tests/tests.cmake | 27 +- .../libecl_well/applications/segment_info.c | 1 - .../Ert/devel/libecl_well/src/CMakeLists.txt | 2 +- .../devel/libeclxx/include/ert/ecl/EclKW.hpp | 27 +- .../devel/libeclxx/include/ert/ecl/FortIO.hpp | 10 +- .../devel/libeclxx/include/ert/ecl/Smspec.hpp | 51 + .../Ert/devel/libeclxx/src/CMakeLists.txt | 10 +- ThirdParty/Ert/devel/libeclxx/src/EclKW.cpp | 21 +- ThirdParty/Ert/devel/libeclxx/src/FortIO.cpp | 20 +- ThirdParty/Ert/devel/libeclxx/src/Smspec.cpp | 77 + .../Ert/devel/libeclxx/tests/CMakeLists.txt | 4 + .../Ert/devel/libeclxx/tests/eclxx_fortio.cpp | 48 +- .../Ert/devel/libeclxx/tests/eclxx_smspec.cpp | 86 + .../applications/ert_tui/CMakeLists.txt | 7 +- .../libenkf/applications/ert_tui/SConstruct | 65 - .../applications/ert_tui/enkf_tui_QC.c | 240 - .../applications/ert_tui/enkf_tui_analysis.c | 116 +- .../applications/ert_tui/enkf_tui_export.c | 20 +- .../applications/ert_tui/enkf_tui_fs.c | 24 +- .../applications/ert_tui/enkf_tui_help.c | 164 +- .../applications/ert_tui/enkf_tui_init.c | 4 +- .../applications/ert_tui/enkf_tui_main.c | 4 - .../applications/ert_tui/enkf_tui_plot.c | 1340 --- .../applications/ert_tui/enkf_tui_plot.h | 44 - .../applications/ert_tui/enkf_tui_plot_rft.c | 667 -- .../applications/ert_tui/enkf_tui_plot_rft.h | 37 - .../applications/ert_tui/enkf_tui_plot_util.c | 120 - .../applications/ert_tui/enkf_tui_plot_util.h | 39 - .../applications/ert_tui/enkf_tui_ranking.c | 8 +- .../applications/ert_tui/enkf_tui_run.c | 157 +- .../applications/ert_tui/enkf_tui_simple.c | 20 +- .../applications/ert_tui/enkf_tui_table.c | 3 +- .../applications/ert_tui/enkf_tui_workflow.c | 1 - .../applications/ert_tui/ert_tui_jobs.c | 62 - .../libenkf/applications/ert_tui/install.py | 42 - .../devel/libenkf/applications/ert_tui/main.c | 2 +- .../applications/ert_tui/timestamp.cmake | 4 - .../libenkf/applications/xml/doc/ERT.txt | 108 - .../libenkf/applications/xml/src/tree1.c | 112 - .../libenkf/applications/xml/src/xpath1.c | 211 - .../applications/xml/tests/enkf_config.xml | 127 - .../applications/xml/tests/site-config.xml | 89 - .../libenkf/applications/xml/xsd/action.xsd | 12 - .../applications/xml/xsd/basetypes.xsd | 34 - .../libenkf/applications/xml/xsd/dbase.xsd | 21 - .../libenkf/applications/xml/xsd/eclipse.xsd | 63 - .../libenkf/applications/xml/xsd/ensemble.xsd | 210 - .../libenkf/applications/xml/xsd/ert.xsd | 39 - .../libenkf/applications/xml/xsd/log.xsd | 14 - .../applications/xml/xsd/obsconfig.xsd | 179 - .../applications/xml/xsd/observations.xsd | 23 - .../libenkf/applications/xml/xsd/plot.xsd | 45 - .../applications/xml/xsd/queuesystem.xsd | 68 - .../applications/xml/xsd/simulations.xsd | 64 - .../libenkf/applications/xml/xsd/system.xsd | 51 - .../libenkf/applications/xml/xsd/update.xsd | 47 - .../include/ert/enkf/block_fs_driver.h | 1 + .../libenkf/include/ert/enkf/config_keys.h | 26 +- .../libenkf/include/ert/enkf/custom_kw.h | 5 +- .../include/ert/enkf/custom_kw_config.h | 2 + .../libenkf/include/ert/enkf/ecl_static_kw.h | 55 - .../include/ert/enkf/ecl_static_kw_config.h | 35 - .../include/ert/enkf/enkf_config_node.h | 2 + .../devel/libenkf/include/ert/enkf/enkf_fs.h | 2 - .../libenkf/include/ert/enkf/enkf_macros.h | 33 +- .../libenkf/include/ert/enkf/enkf_main.h | 61 +- .../libenkf/include/ert/enkf/enkf_node.h | 79 +- .../libenkf/include/ert/enkf/enkf_sched.h | 45 - .../libenkf/include/ert/enkf/enkf_state.h | 12 +- .../libenkf/include/ert/enkf/enkf_types.h | 4 +- .../include/ert/enkf/ensemble_config.h | 5 +- .../libenkf/include/ert/enkf/ert_report.h | 41 - .../include/ert/enkf/ert_report_list.h | 56 - .../include/ert/enkf/ert_run_context.h | 15 +- .../devel/libenkf/include/ert/enkf/field.h | 2 +- .../include/ert/enkf/forward_load_context.h | 59 + .../libenkf/include/ert/enkf/fs_driver.h | 24 +- .../devel/libenkf/include/ert/enkf/fs_types.h | 3 +- .../devel/libenkf/include/ert/enkf/gen_data.h | 5 +- .../include/ert/enkf/gen_data_config.h | 4 +- .../libenkf/include/ert/enkf/hook_manager.h | 62 + .../libenkf/include/ert/enkf/hook_workflow.h | 52 + .../libenkf/include/ert/enkf/local_config.h | 4 +- .../include/ert/enkf/local_obsdata_node.h | 6 +- .../libenkf/include/ert/enkf/member_config.h | 60 +- .../libenkf/include/ert/enkf/model_config.h | 6 +- .../libenkf/include/ert/enkf/plain_driver.h | 1 + .../libenkf/include/ert/enkf/plot_config.h | 25 - .../libenkf/include/ert/enkf/qc_module.h | 51 - .../devel/libenkf/include/ert/enkf/run_arg.h | 12 +- .../libenkf/include/ert/enkf/run_arg_type.h | 25 + .../libenkf/include/ert/enkf/runpath_list.h | 1 - .../include/ert/enkf/summary_key_set.h | 2 +- .../Ert/devel/libenkf/src/CMakeLists.txt | 330 +- ThirdParty/Ert/devel/libenkf/src/SConscript | 51 - .../Ert/devel/libenkf/src/block_fs_driver.c | 15 +- ThirdParty/Ert/devel/libenkf/src/custom_kw.c | 37 +- .../Ert/devel/libenkf/src/custom_kw_config.c | 63 +- .../devel/libenkf/src/custom_kw_config_set.c | 2 +- ThirdParty/Ert/devel/libenkf/src/ecl_config.c | 61 +- .../Ert/devel/libenkf/src/ecl_static_kw.c | 134 - .../Ert/devel/libenkf/src/enkf_config_node.c | 8 +- ThirdParty/Ert/devel/libenkf/src/enkf_fs.c | 79 +- ThirdParty/Ert/devel/libenkf/src/enkf_main.c | 777 +- .../Ert/devel/libenkf/src/enkf_main_jobs.c | 132 +- .../devel/libenkf/src/enkf_main_manage_fs.c | 201 +- ThirdParty/Ert/devel/libenkf/src/enkf_node.c | 138 +- ThirdParty/Ert/devel/libenkf/src/enkf_obs.c | 112 +- .../Ert/devel/libenkf/src/enkf_plot_data.c | 50 +- .../Ert/devel/libenkf/src/enkf_plot_tvector.c | 60 +- ThirdParty/Ert/devel/libenkf/src/enkf_sched.c | 438 - ThirdParty/Ert/devel/libenkf/src/enkf_state.c | 799 +- ThirdParty/Ert/devel/libenkf/src/enkf_types.c | 9 +- .../Ert/devel/libenkf/src/ensemble_config.c | 34 +- ThirdParty/Ert/devel/libenkf/src/ert_log.c | 1 + ThirdParty/Ert/devel/libenkf/src/ert_report.c | 195 - .../Ert/devel/libenkf/src/ert_report_list.c | 339 - .../Ert/devel/libenkf/src/ert_run_context.c | 58 +- .../Ert/devel/libenkf/src/ert_workflow_list.c | 2 +- ThirdParty/Ert/devel/libenkf/src/field.c | 238 +- .../Ert/devel/libenkf/src/field_config.c | 17 +- .../Ert/devel/libenkf/src/field_trans.c | 49 +- .../devel/libenkf/src/forward_load_context.c | 269 + ThirdParty/Ert/devel/libenkf/src/fs_driver.c | 93 +- ThirdParty/Ert/devel/libenkf/src/fs_types.c | 18 +- ThirdParty/Ert/devel/libenkf/src/gen_data.c | 34 +- .../Ert/devel/libenkf/src/gen_data_config.c | 98 +- ThirdParty/Ert/devel/libenkf/src/gen_kw.c | 14 +- .../Ert/devel/libenkf/src/hook_manager.c | 245 + .../Ert/devel/libenkf/src/hook_workflow.c | 99 + .../Ert/devel/libenkf/src/local_config.c | 35 +- .../devel/libenkf/src/local_obsdata_node.c | 28 +- ThirdParty/Ert/devel/libenkf/src/meas_data.c | 17 +- .../Ert/devel/libenkf/src/member_config.c | 59 +- .../Ert/devel/libenkf/src/model_config.c | 65 +- ThirdParty/Ert/devel/libenkf/src/obs_vector.c | 21 +- .../Ert/devel/libenkf/src/plain_driver.c | 7 + .../Ert/devel/libenkf/src/plot_config.c | 267 +- ThirdParty/Ert/devel/libenkf/src/qc_module.c | 195 - ThirdParty/Ert/devel/libenkf/src/run_arg.c | 11 +- .../Ert/devel/libenkf/src/runpath_list.c | 34 +- .../Ert/devel/libenkf/src/site_config.c | 8 +- ThirdParty/Ert/devel/libenkf/src/summary.c | 11 +- .../Ert/devel/libenkf/src/summary_key_set.c | 6 +- .../Ert/devel/libenkf/tests/CMakeLists.txt | 33 +- .../config/forward/ert/config_GEN_KW_true | 1 - .../config/forward/ert/config_GEN_PARAM_true | 1 - .../libenkf/tests/enkf_analysis_config.c | 2 +- .../tests/enkf_analysis_enkf_update_job.c | 71 - .../libenkf/tests/enkf_analysis_update_job.c | 2 +- .../Ert/devel/libenkf/tests/enkf_ecl_config.c | 40 +- .../libenkf/tests/enkf_ecl_config_config.c | 2 +- .../libenkf/tests/enkf_ensemble_GEN_PARAM.c | 2 +- .../libenkf/tests/enkf_ensemble_config.c | 3 + .../tests/enkf_export_inactive_cells.c | 3 +- .../libenkf/tests/enkf_forward_init_FIELD.c | 22 +- .../libenkf/tests/enkf_forward_init_GEN_KW.c | 81 +- .../tests/enkf_forward_init_GEN_PARAM.c | 8 +- .../libenkf/tests/enkf_forward_init_SURFACE.c | 14 +- .../tests/enkf_forward_init_transform.c | 6 +- .../libenkf/tests/enkf_forward_load_context.c | 132 + ThirdParty/Ert/devel/libenkf/tests/enkf_fs.c | 3 + .../libenkf/tests/enkf_fs_invalidate_cache.c | 106 - .../libenkf/tests/enkf_gen_data_config.c | 108 +- .../tests/enkf_gen_data_config_parse.c | 4 +- .../devel/libenkf/tests/enkf_gen_obs_load.c | 34 +- .../libenkf/tests/enkf_hook_manager_test.c | 49 + .../devel/libenkf/tests/enkf_iter_config.c | 2 +- .../devel/libenkf/tests/enkf_local_obsdata.c | 4 +- .../libenkf/tests/enkf_local_obsdata_node.c | 51 +- .../Ert/devel/libenkf/tests/enkf_meas_data.c | 3 + .../devel/libenkf/tests/enkf_plot_gen_kw_fs.c | 14 +- .../devel/libenkf/tests/enkf_qc_module_test.c | 49 - .../devel/libenkf/tests/enkf_report_list.c | 49 - .../Ert/devel/libenkf/tests/enkf_run_arg.c | 3 + .../devel/libenkf/tests/enkf_runpath_list.c | 13 +- .../libenkf/tests/enkf_select_case_job_test.c | 55 - .../devel/libenkf/tests/enkf_site_config.c | 2 +- .../tests/enkf_state_manual_load_test.c | 51 +- .../tests/enkf_state_report_step_compatible.c | 3 +- .../tests/enkf_state_skip_summary_load_test.c | 6 +- .../Ert/devel/libenkf/tests/enkf_time_map.c | 3 + .../libenkf/tests/enkf_workflow_job_test.c | 4 +- .../Ert/devel/libenkf/tests/gen_kw_test.c | 3 + .../Ert/devel/libert_util/CMakeLists.txt | 4 - .../libert_util/applications/CMakeLists.txt | 11 - .../applications/block_fs/CMakeLists.txt | 18 - .../libert_util/applications/block_fs/bcp.c | 85 - .../applications/block_fs/bfs_extract.c | 100 - .../applications/block_fs/block_fs_test.c | 221 - .../libert_util/applications/block_fs/bls.c | 78 - .../libert_util/applications/block_fs/brm.c | 73 - .../libert_util/applications/block_fs/brot.c | 41 - .../devel/libert_util/applications/ens_tar.c | 81 - .../devel/libert_util/applications/eol-fix.c | 49 - .../libert_util/applications/file_open.c | 50 - .../libert_util/applications/grane_fix.c | 57 - .../applications/grdecl_to_ascii.c | 61 - .../libert_util/applications/latex_test.c | 17 - .../libert_util/applications/matrix_test.c | 67 - .../devel/libert_util/applications/mem_free.c | 35 - .../libert_util/applications/parser_test.c | 41 - .../devel/libert_util/applications/replace.c | 36 - .../libert_util/applications/template_test.c | 48 - .../template_test_data/result1.txt | 2 - .../template_test_data/result2.txt | 14 - .../template_test_data/result3.txt | 8 - .../template_test_data/template1.txt | 2 - .../template_test_data/template2.txt | 6 - .../template_test_data/template3.txt | 4 - .../libert_util/applications/util-test.c | 66 - .../applications/util_contains_test.c | 44 - .../applications/util_fmove_test.c | 111 - .../include/ert/util/CMakeLists.txt | 6 + .../libert_util/include/ert/util/buffer.h | 4 +- .../include/ert/util/build_config.h.in | 62 + .../include/ert/util/ert_api_config.h.in | 20 + .../libert_util/include/ert/util/latex.h | 52 - .../libert_util/include/ert/util/matrix.h | 4 +- .../libert_util/include/ert/util/stringlist.h | 3 +- .../libert_util/include/ert/util/test_util.h | 17 +- .../include/ert/util/test_util_abort.h | 40 + .../include/ert/util/test_work_area.h | 6 +- .../include/ert/util/thread_pool.h | 23 +- .../include/ert/util/thread_pool_posix.h | 35 - .../devel/libert_util/include/ert/util/util.h | 93 +- .../libert_util/include/ert/util/vector.h | 1 - .../Ert/devel/libert_util/src/CMakeLists.txt | 72 +- .../Ert/devel/libert_util/src/block_fs.c | 2 +- ThirdParty/Ert/devel/libert_util/src/buffer.c | 3 +- .../Ert/devel/libert_util/src/buffer_zlib.c | 2 +- ThirdParty/Ert/devel/libert_util/src/latex.c | 401 - ThirdParty/Ert/devel/libert_util/src/log.c | 4 + ThirdParty/Ert/devel/libert_util/src/matrix.c | 5 +- ThirdParty/Ert/devel/libert_util/src/mzran.c | 9 +- .../Ert/devel/libert_util/src/path_fmt.c | 2 +- .../Ert/devel/libert_util/src/stringlist.c | 7 +- .../Ert/devel/libert_util/src/template.c | 14 +- .../Ert/devel/libert_util/src/test_util.c | 32 +- .../devel/libert_util/src/test_work_area.c | 132 +- .../Ert/devel/libert_util/src/thread_pool.c | 4 +- .../devel/libert_util/src/thread_pool_posix.c | 3 + ThirdParty/Ert/devel/libert_util/src/util.c | 139 +- .../devel/libert_util/src/util_abort_gnu.c | 69 +- .../devel/libert_util/src/util_abort_test.c | 21 - .../Ert/devel/libert_util/src/util_chdir.c | 21 +- .../Ert/devel/libert_util/src/util_env.c | 5 +- .../Ert/devel/libert_util/src/util_fork.c | 264 - .../Ert/devel/libert_util/src/util_getuid.c | 2 +- .../Ert/devel/libert_util/src/util_lfs.c | 25 +- .../Ert/devel/libert_util/src/util_path.c | 28 +- .../Ert/devel/libert_util/src/util_spawn.c | 119 + .../Ert/devel/libert_util/src/util_symlink.c | 9 +- .../devel/libert_util/tests/CMakeLists.txt | 67 +- .../devel/libert_util/tests/data/latex_OK.tex | 12 - .../tests/ert_util_abort_gnu_tests.c | 4 + .../libert_util/tests/ert_util_addr2line.c | 7 +- .../libert_util/tests/ert_util_block_fs.c | 2 + .../libert_util/tests/ert_util_copy_file.c | 1 - .../libert_util/tests/ert_util_latex_test.c | 101 - .../tests/ert_util_matrix_lapack.c | 92 + .../devel/libert_util/tests/ert_util_ping.c | 1 + .../libert_util/tests/ert_util_realpath.c | 38 +- .../devel/libert_util/tests/ert_util_spawn.c | 156 + .../libert_util/tests/ert_util_sscan_test.c | 3 + .../tests/ert_util_struct_vector.c | 1 + .../tests/ert_util_type_vector_test.c | 1 + .../libert_util/tests/ert_util_work_area.c | 4 +- .../Ert/devel/libert_utilxx/CMakeLists.txt | 13 + .../include/ert/util/ert_unique_ptr.hpp | 23 + .../devel/libert_utilxx/tests/CMakeLists.txt | 3 + .../tests/ert_util_unique_ptr.cpp | 31 + .../devel/libgeometry/applications/SConstruct | 29 - .../include/ert/geometry/geo_pointset.h | 42 +- .../include/ert/geometry/geo_surface.h | 36 +- .../Ert/devel/libgeometry/src/CMakeLists.txt | 2 +- .../Ert/devel/libgeometry/src/geo_pointset.c | 149 +- .../Ert/devel/libgeometry/src/geo_surface.c | 237 +- .../include/ert/job_queue/job_queue.h | 1 + .../include/ert/job_queue/job_queue_manager.h | 3 + .../include/ert/job_queue/queue_driver.h | 20 - .../Ert/devel/libjob_queue/src/CMakeLists.txt | 2 +- .../Ert/devel/libjob_queue/src/ext_job.c | 29 +- .../devel/libjob_queue/src/forward_model.c | 7 +- .../Ert/devel/libjob_queue/src/job_list.c | 1 - .../Ert/devel/libjob_queue/src/job_node.c | 36 +- .../Ert/devel/libjob_queue/src/job_queue.c | 26 +- .../libjob_queue/src/job_queue_manager.c | 11 + .../Ert/devel/libjob_queue/src/local_driver.c | 46 +- ThirdParty/Ert/devel/libjob_queue/src/lsb.c | 26 +- .../Ert/devel/libjob_queue/src/lsf_driver.c | 17 +- .../Ert/devel/libjob_queue/src/queue_driver.c | 7 - .../Ert/devel/libjob_queue/src/rsh_driver.c | 10 +- .../devel/libjob_queue/src/torque_driver.c | 7 +- .../Ert/devel/libjob_queue/src/workflow.c | 2 +- .../Ert/devel/libjob_queue/src/workflow_job.c | 14 +- .../devel/libjob_queue/tests/CMakeLists.txt | 15 +- .../tests/data/qsub_emulators/qdel | 4 +- .../tests/data/qsub_emulators/qsub | 4 +- .../devel/libjob_queue/tests/job_list_test.c | 3 + .../tests/job_lsf_parse_bsub_stdout.c | 4 +- .../devel/libjob_queue/tests/job_node_test.c | 3 + .../tests/job_queue_stress_task.c | 1 + .../tests/job_queue_stress_test.c | 76 +- .../libjob_queue/tests/job_status_test.c | 56 +- .../libjob_queue/tests/job_torque_test.c | 3 +- .../libjob_queue/tests/job_workflow_test.c | 4 +- ThirdParty/Ert/devel/libplot/CMakeLists.txt | 26 - .../Ert/devel/libplot/include/ert/plot/plot.h | 94 - .../libplot/include/ert/plot/plot_const.h | 137 - .../libplot/include/ert/plot/plot_dataset.h | 138 - .../libplot/include/ert/plot/plot_driver.h | 128 - .../libplot/include/ert/plot/plot_range.h | 113 - .../libplot/include/ert/plot/plot_summary.h | 35 - .../libplot/include/ert/plot/plot_text.h | 50 - .../libplot/include/ert/plot/plplot_driver.h | 37 - .../libplot/include/ert/plot/text_driver.h | 28 - .../Ert/devel/libplot/src/CMakeLists.txt | 18 - .../Ert/devel/libplot/src/PLPLOT_README | 53 - .../Ert/devel/libplot/src/errorbar_test.c | 117 - ThirdParty/Ert/devel/libplot/src/plot.c | 470 - .../Ert/devel/libplot/src/plot_canvas_test.c | 157 - .../Ert/devel/libplot/src/plot_dataset.c | 462 - .../Ert/devel/libplot/src/plot_driver.c | 267 - ThirdParty/Ert/devel/libplot/src/plot_range.c | 352 - .../Ert/devel/libplot/src/plot_summary.c | 79 - ThirdParty/Ert/devel/libplot/src/plot_test.c | 93 - ThirdParty/Ert/devel/libplot/src/plot_text.c | 91 - .../Ert/devel/libplot/src/plplot_driver.c | 430 - ThirdParty/Ert/devel/libplot/src/simple.c | 57 - .../Ert/devel/libplot/src/summary_plot.c | 95 - .../Ert/devel/libplot/src/summary_plot_live.c | 728 -- ThirdParty/Ert/devel/libplot/src/test.c | 104 - .../Ert/devel/libplot/src/text_driver.c | 197 - .../Ert/devel/libplot/tests/CMakeLists.txt | 11 - .../Ert/devel/libplot/tests/plot_plplot.c | 94 - .../Ert/devel/libplot/tests/plot_range.c | 315 - .../Ert/devel/libplot/tests/plot_text.c | 80 - .../Ert/devel/librms/src/CMakeLists.txt | 2 +- .../Ert/devel/libsched/src/CMakeLists.txt | 2 +- ThirdParty/Ert/devel/main/Glade/test/AUTHORS | 1 - ThirdParty/Ert/devel/main/Glade/test/COPYING | 1 - ThirdParty/Ert/devel/main/Glade/test/INSTALL | 1 - .../Ert/devel/main/Glade/test/Makefile.am | 31 - .../Ert/devel/main/Glade/test/Makefile.in | 610 -- ThirdParty/Ert/devel/main/Glade/test/README | 4 - .../Ert/devel/main/Glade/test/aclocal.m4 | 1557 ---- .../Ert/devel/main/Glade/test/autogen.sh | 159 - .../Ert/devel/main/Glade/test/configure | 8090 ----------------- .../Ert/devel/main/Glade/test/configure.in | 31 - ThirdParty/Ert/devel/main/Glade/test/depcomp | 1 - .../Ert/devel/main/Glade/test/gui_config.h.in | 73 - .../Ert/devel/main/Glade/test/install-sh | 1 - ThirdParty/Ert/devel/main/Glade/test/missing | 1 - .../Ert/devel/main/Glade/test/mkinstalldirs | 111 - .../Glade/test/pixmaps/wizard-128x128.png | Bin 19543 -> 0 bytes .../main/Glade/test/pixmaps/wizard-64x64.png | Bin 5647 -> 0 bytes .../devel/main/Glade/test/po/Makefile.in.in | 254 - .../Ert/devel/main/Glade/test/po/POTFILES.in | 6 - .../Ert/devel/main/Glade/test/src/Makefile.am | 36 - .../Ert/devel/main/Glade/test/src/Makefile.in | 452 - .../Ert/devel/main/Glade/test/src/callbacks.c | 1005 -- .../Ert/devel/main/Glade/test/src/callbacks.h | 223 - .../src/custom-cell-renderer-progressbar.c | 356 - .../src/custom-cell-renderer-progressbar.h | 61 - .../Ert/devel/main/Glade/test/src/enkf_config | 239 - .../devel/main/Glade/test/src/enkf_setup.c | 163 - .../devel/main/Glade/test/src/enkf_setup.h | 39 - .../Ert/devel/main/Glade/test/src/interface.c | 3617 -------- .../Ert/devel/main/Glade/test/src/interface.h | 26 - .../Ert/devel/main/Glade/test/src/main.c | 547 -- .../Ert/devel/main/Glade/test/src/main.h | 76 - .../Ert/devel/main/Glade/test/src/support.c | 164 - .../Ert/devel/main/Glade/test/src/support.h | 85 - .../Ert/devel/main/Glade/test/stamp-h.in | 1 - .../Ert/devel/main/Glade/test/test.glade | 7071 -------------- .../Ert/devel/main/Glade/test/test.gladep | 10 - .../devel/python/python/ert/CMakeLists.txt | 6 +- .../Ert/devel/python/python/ert/__init__.py | 24 +- .../python/python/ert/config/__init__.py | 8 +- .../python/ert/config/config_content.py | 107 +- .../python/python/ert/config/config_error.py | 25 +- .../python/python/ert/config/config_parser.py | 71 +- .../python/ert/config/content_type_enum.py | 7 +- .../python/ert/config/unrecognized_enum.py | 11 +- .../python/python/ert/cwrap/CMakeLists.txt | 2 + .../devel/python/python/ert/cwrap/__init__.py | 3 + .../python/python/ert/cwrap/basecclass.py | 27 + .../python/python/ert/cwrap/basecenum.py | 3 +- .../python/python/ert/cwrap/basecvalue.py | 8 + .../devel/python/python/ert/cwrap/cfile.py | 50 +- .../Ert/devel/python/python/ert/cwrap/clib.py | 38 +- .../devel/python/python/ert/cwrap/cwrap.py | 53 +- .../python/python/ert/cwrap/metacwrap.py | 46 + .../python/python/ert/cwrap/prototype.py | 147 + .../python/python/ert/ecl/CMakeLists.txt | 2 + .../devel/python/python/ert/ecl/__init__.py | 16 +- .../Ert/devel/python/python/ert/ecl/ecl.py | 13 +- .../devel/python/python/ert/ecl/ecl_cmp.py | 170 + .../devel/python/python/ert/ecl/ecl_file.py | 193 +- .../devel/python/python/ert/ecl/ecl_grav.py | 62 +- .../python/python/ert/ecl/ecl_grav_calc.py | 22 +- .../devel/python/python/ert/ecl/ecl_grid.py | 498 +- .../python/python/ert/ecl/ecl_init_file.py | 12 +- .../Ert/devel/python/python/ert/ecl/ecl_kw.py | 516 +- .../devel/python/python/ert/ecl/ecl_region.py | 403 +- .../python/python/ert/ecl/ecl_restart_file.py | 120 +- .../devel/python/python/ert/ecl/ecl_rft.py | 371 +- .../python/python/ert/ecl/ecl_rft_cell.py | 140 +- .../python/python/ert/ecl/ecl_smspec_node.py | 66 +- .../python/python/ert/ecl/ecl_subsidence.py | 35 +- .../devel/python/python/ert/ecl/ecl_sum.py | 361 +- .../python/ert/ecl/ecl_sum_keyword_vector.py | 37 +- .../python/python/ert/ecl/ecl_sum_tstep.py | 53 +- .../python/python/ert/ecl/ecl_sum_vector.py | 10 +- .../devel/python/python/ert/ecl/ecl_util.py | 68 +- .../Ert/devel/python/python/ert/ecl/fortio.py | 100 +- .../python/python/ert/enkf/CMakeLists.txt | 5 +- .../devel/python/python/ert/enkf/__init__.py | 44 +- .../python/ert/enkf/config/CMakeLists.txt | 12 + .../python/python/ert/enkf/config/__init__.py | 12 + .../enkf/{data => config}/custom_kw_config.py | 34 +- .../enkf/{data => config}/enkf_config_node.py | 5 +- .../ert/enkf/{data => config}/field_config.py | 16 +- .../enkf/{data => config}/gen_data_config.py | 19 +- .../enkf/{data => config}/gen_kw_config.py | 0 .../enkf/{data => config}/summary_config.py | 0 .../python/ert/enkf/custom_kw_config_set.py | 2 +- .../python/ert/enkf/data/CMakeLists.txt | 8 +- .../python/python/ert/enkf/data/__init__.py | 23 +- .../python/python/ert/enkf/data/custom_kw.py | 26 +- .../python/python/ert/enkf/data/enkf_node.py | 60 +- .../python/python/ert/enkf/data/field.py | 24 +- .../python/python/ert/enkf/data/gen_kw.py | 2 +- .../python/python/ert/enkf/ecl_config.py | 5 +- .../devel/python/python/ert/enkf/enkf_fs.py | 7 +- .../python/python/ert/enkf/enkf_fs_manager.py | 24 +- .../devel/python/python/ert/enkf/enkf_main.py | 80 +- .../python/ert/enkf/enkf_simulation_runner.py | 23 +- .../python/python/ert/enkf/enkf_state.py | 12 + .../python/python/ert/enkf/ensemble_config.py | 14 +- .../python/ert/enkf/enums/CMakeLists.txt | 1 + .../python/python/ert/enkf/enums/__init__.py | 4 +- .../ert/enkf/enums/hook_runtime_enum.py} | 24 +- .../python/python/ert/enkf/ert_run_context.py | 31 +- .../ert/enkf/export/custom_kw_collector.py | 2 +- .../export/gen_data_observation_collector.py | 47 +- .../python/ert/enkf/forward_load_context.py | 51 + .../python/python/ert/enkf/hook_manager.py | 51 + .../python/python/ert/enkf/hook_workflow.py | 25 + .../python/python/ert/enkf/key_manager.py | 26 +- .../python/python/ert/enkf/local_config.py | 25 +- .../python/python/ert/enkf/local_ministep.py | 4 +- .../python/python/ert/enkf/local_obsdata.py | 26 +- .../python/ert/enkf/local_obsdata_node.py | 19 +- .../devel/python/python/ert/enkf/meas_data.py | 10 +- .../python/python/ert/enkf/model_config.py | 22 +- .../ert/enkf/observations/obs_vector.py | 2 +- .../ert/enkf/plot/ensemble_gen_kw_fetcher.py | 4 +- .../python/python/ert/enkf/plot_config.py | 55 - .../ert/enkf/plot_data/ensemble_plot_data.py | 2 +- .../enkf/plot_data/ensemble_plot_gen_data.py | 2 +- .../enkf/plot_data/ensemble_plot_gen_kw.py | 2 +- .../python/ert/enkf/post_simulation_hook.py | 39 - .../devel/python/python/ert/enkf/run_arg.py | 30 +- .../python/python/ert/enkf/runpath_list.py | 12 +- .../python/python/ert/enkf/summary_key_set.py | 4 +- .../python/ert/ert_lib_info_build.py.in | 2 + ...stall.py.in => ert_lib_info_install.py.in} | 2 + .../python/ert/ert_lib_path_build.py.in | 1 - .../python/python/ert/geo/CMakeLists.txt | 1 + .../devel/python/python/ert/geo/__init__.py | 11 +- .../devel/python/python/ert/geo/cpolyline.py | 62 +- .../python/ert/geo/cpolyline_collection.py | 51 +- .../devel/python/python/ert/geo/surface.py | 217 + .../python/python/ert/job_queue/ert_plugin.py | 26 +- .../python/python/ert/job_queue/ert_script.py | 20 +- .../python/python/ert/job_queue/ext_job.py | 24 +- .../python/ert/job_queue/job_queue_manager.py | 49 +- .../ert/job_queue/job_status_type_enum.py | 13 +- .../python/python/ert/job_queue/queue.py | 12 +- .../python/python/ert/server/CMakeLists.txt | 11 +- .../python/python/ert/server/__init__.py | 7 +- .../python/python/ert/server/ert_client.py | 93 - .../python/python/ert/server/ert_server.py | 283 - .../python/python/ert/server/ert_socket.py | 117 - .../python/python/ert/server/ertrpcclient.py | 228 + .../python/python/ert/server/ertrpcserver.py | 339 + .../python/python/ert/server/run_context.py | 89 - .../python/ert/server/simulation_context.py | 79 + .../python/python/ert/test/CMakeLists.txt | 2 + .../devel/python/python/ert/test/__init__.py | 1 + .../python/ert/test/ecl_mock/CMakeLists.txt | 7 + .../python/ert/test/ecl_mock/__init__.py | 1 + .../python/ert/test/ecl_mock/ecl_sum_mock.py | 29 + .../python/ert/test/ert_test_context.py | 2 + .../python/ert/test/extended_testcase.py | 27 +- .../devel/python/python/ert/test/temp_area.py | 78 + .../devel/python/python/ert/test/test_area.py | 112 +- .../python/python/ert/util/CMakeLists.txt | 3 +- .../devel/python/python/ert/util/__init__.py | 21 +- .../devel/python/python/ert/util/arg_pack.py | 56 +- .../python/python/ert/util/bool_vector.py | 124 +- .../devel/python/python/ert/util/buffer.py | 22 +- .../devel/python/python/ert/util/cstring.py | 42 + .../python/python/ert/util/cthread_pool.py | 76 +- .../Ert/devel/python/python/ert/util/ctime.py | 31 +- .../python/python/ert/util/double_vector.py | 102 +- .../python/ert/util/enums/llsq_result_enum.py | 6 +- .../ert/util/enums/rng_alg_type_enum.py | 6 +- .../ert/util/enums/rng_init_mode_enum.py | 6 +- .../ert/util/enums/ui_return_status_enum.py | 6 +- .../Ert/devel/python/python/ert/util/hash.py | 92 +- .../python/ert/util/install_abort_signals.py | 17 +- .../python/python/ert/util/int_vector.py | 113 +- .../Ert/devel/python/python/ert/util/latex.py | 83 - .../Ert/devel/python/python/ert/util/log.py | 30 +- .../python/python/ert/util/lookup_table.py | 100 +- .../devel/python/python/ert/util/matrix.py | 102 +- .../python/python/ert/util/path_format.py | 19 + .../Ert/devel/python/python/ert/util/rng.py | 57 +- .../Ert/devel/python/python/ert/util/stat.py | 83 +- .../python/python/ert/util/stringlist.py | 113 +- .../python/ert/util/substitution_list.py | 47 +- .../python/python/ert/util/time_vector.py | 171 +- .../devel/python/python/ert/util/ui_return.py | 59 +- .../devel/python/python/ert/util/util_func.py | 79 +- .../python/python/ert/util/vector_template.py | 145 +- .../devel/python/python/ert/util/version.py | 86 +- .../python/python/ert_gui/CMakeLists.txt | 3 +- .../devel/python/python/ert_gui/ert_splash.py | 2 +- .../devel/python/python/ert_gui/ertplot.py | 91 + .../devel/python/python/ert_gui/gert_main.py | 12 +- .../ert_gui/ide/keywords/CMakeLists.txt | 1 - .../ert_gui/ide/keywords/ert_keywords.py | 2 - .../ert_gui/ide/keywords/report_keywords.py | 91 - .../devel/python/python/ert_gui/ide_test.py | 64 - .../models/connectors/export/export_model.py | 21 +- .../models/connectors/init/case_list.py | 2 +- .../models/connectors/run/base_run_model.py | 7 +- .../connectors/run/ensemble_experiment.py | 4 +- .../connectors/run/ensemble_smoother.py | 13 +- .../run/iterated_analysis_module_model.py | 4 + .../run/iterated_ensemble_smoother.py | 9 +- .../devel/python/python/ert_gui/newconfig.py | 9 - .../python/python/ert_gui/pages/run_dialog.py | 2 + .../python/ert_gui/plottery/CMakeLists.txt | 4 + .../python/ert_gui/plottery/__init__.py | 5 +- .../python/ert_gui/plottery/plot_config.py | 293 +- .../ert_gui/plottery/plot_config_factory.py | 45 + .../ert_gui/plottery/plot_config_history.py | 46 + .../python/ert_gui/plottery/plot_context.py | 65 +- .../ert_gui/plottery/plot_data_gatherer.py | 55 +- .../python/ert_gui/plottery/plot_limits.py | 105 + .../python/ert_gui/plottery/plot_style.py | 112 + .../ert_gui/plottery/plots/CMakeLists.txt | 4 +- .../python/ert_gui/plottery/plots/__init__.py | 15 +- .../python/ert_gui/plottery/plots/ccsp.py | 220 + .../ert_gui/plottery/plots/distribution.py | 77 + .../python/ert_gui/plottery/plots/ensemble.py | 32 +- .../ert_gui/plottery/plots/gaussian_kde.py | 24 +- .../ert_gui/plottery/plots/histogram.py | 142 +- .../python/ert_gui/plottery/plots/history.py | 33 + .../ert_gui/plottery/plots/observations.py | 5 +- .../python/ert_gui/plottery/plots/overview.py | 54 - .../ert_gui/plottery/plots/plot_tools.py | 65 +- .../python/ert_gui/plottery/plots/refcase.py | 10 +- .../ert_gui/plottery/plots/statistics.py | 87 +- .../python/ert_gui/shell/CMakeLists.txt | 9 +- .../python/python/ert_gui/shell/__init__.py | 35 +- .../python/ert_gui/shell/analysis_module.py | 86 +- .../python/python/ert_gui/shell/cases.py | 125 +- .../python/ert_gui/shell/custom_kw_keys.py | 64 +- .../python/python/ert_gui/shell/debug.py | 47 +- .../ert_gui/shell/ert_shell_collection.py | 19 + .../python/ert_gui/shell/ert_shell_context.py | 20 + .../python/python/ert_gui/shell/ertshell.py | 66 +- .../python/python/ert_gui/shell/export.py | 66 + .../python/ert_gui/shell/gen_data_keys.py | 106 +- .../python/ert_gui/shell/gen_kw_keys.py | 102 +- .../ert_gui/shell/libshell/CMakeLists.txt | 12 + .../python/ert_gui/shell/libshell/__init__.py | 6 + .../shell/libshell/shell_collection.py | 171 + .../ert_gui/shell/libshell/shell_context.py | 23 + .../ert_gui/shell/libshell/shell_function.py | 62 + .../shell/libshell/shell_path_tools.py | 26 + .../ert_gui/shell/libshell/shell_property.py | 90 + .../ert_gui/shell/libshell/shell_tools.py | 133 + .../python/ert_gui/shell/observations.py | 62 +- .../python/ert_gui/shell/plot_settings.py | 188 +- .../python/python/ert_gui/shell/plugins.py | 65 +- .../python/python/ert_gui/shell/results.py | 26 +- .../python/python/ert_gui/shell/server.py | 105 + .../python/ert_gui/shell/shell_context.py | 34 - .../python/ert_gui/shell/shell_function.py | 158 - .../python/python/ert_gui/shell/shell_plot.py | 352 +- .../python/ert_gui/shell/shell_tools.py | 84 - .../python/ert_gui/shell/simulations.py | 29 +- .../python/python/ert_gui/shell/smoother.py | 122 +- .../python/python/ert_gui/shell/storage.py | 89 + .../python/ert_gui/shell/summary_keys.py | 163 +- .../python/python/ert_gui/shell/workflows.py | 29 +- .../ert_gui/simulation/simulation_panel.py | 2 +- .../load_results_realisations_model.py | 2 +- .../python/ert_gui/tools/plot/CMakeLists.txt | 3 +- .../python/ert_gui/tools/plot/__init__.py | 4 +- .../ert_gui/tools/plot/color_chooser.py | 71 +- .../tools/plot/customize/CMakeLists.txt | 12 + .../ert_gui/tools/plot/customize/__init__.py | 6 + .../plot/customize/customization_view.py | 121 + .../plot/customize/customize_plot_dialog.py | 241 + .../customize/default_customization_view.py | 69 + .../customize/limits_customization_view.py | 251 + .../statistics_customization_view.py | 109 + .../customize/style_customization_view.py | 76 + .../tools/plot/customize_plot_widget.py | 70 - .../python/ert_gui/tools/plot/plot_widget.py | 103 +- .../python/ert_gui/tools/plot/plot_window.py | 179 +- .../ert_gui/tools/plot/style_chooser.py | 151 + .../python/ert_gui/viewer/CMakeLists.txt | 18 - .../python/python/ert_gui/viewer/__init__.py | 12 - .../python/python/ert_gui/viewer/bounds.py | 75 - .../python/python/ert_gui/viewer/camera.py | 123 - .../python/ert_gui/viewer/opengl_tools.py | 11 - .../python/ert_gui/viewer/polyline_drawer.py | 32 - .../python/ert_gui/viewer/shader_program.py | 139 - .../python/ert_gui/viewer/shader_source.py | 75 - .../ert_gui/viewer/slice_settings_widget.py | 60 - .../python/ert_gui/viewer/slice_viewer.py | 260 - .../ert_gui/viewer/slice_viewer_widget.py | 306 - .../python/python/ert_gui/viewer/texture.py | 165 - .../python/ert_gui/viewer/unity_quaternion.py | 50 - .../ert_gui/viewer/vertex_buffer_object.py | 91 - .../python/ert_gui/widgets/CMakeLists.txt | 2 + .../ert_gui/widgets/clearable_line_edit.py | 97 + .../ert_gui/widgets/custom_date_edit.py | 54 + .../python/ert_gui/widgets/helped_widget.py | 14 +- .../python/tests/core/cwrap/CMakeLists.txt | 4 + .../tests/core/cwrap/test_basecclass.py | 7 + .../tests/core/cwrap/test_basecvalue.py | 15 +- .../python/tests/core/cwrap/test_cfile.py | 30 + .../python/tests/core/cwrap/test_cwrap.py | 20 +- .../python/tests/core/cwrap/test_metawrap.py | 118 + .../python/tests/core/ecl/CMakeLists.txt | 21 +- .../python/tests/core/ecl/test_deprecation.py | 194 +- .../python/tests/core/ecl/test_ecl_cmp.py | 68 + .../python/tests/core/ecl/test_ecl_file.py | 22 +- .../tests/core/ecl/test_ecl_init_file.py | 6 + .../core/ecl/{test_kw.py => test_ecl_kw.py} | 217 +- .../tests/core/ecl/test_ecl_kw_statoil.py | 112 + .../tests/core/ecl/test_ecl_restart_file.py | 34 +- .../python/tests/core/ecl/test_ecl_util.py | 8 +- .../devel/python/tests/core/ecl/test_grid.py | 13 + .../tests/core/ecl/test_grid_statoil.py | 22 + .../python/tests/core/ecl/test_legacy_ecl.py | 15 +- .../devel/python/tests/core/ecl/test_rft.py | 87 +- .../python/tests/core/ecl/test_rft_cell.py | 6 +- .../python/tests/core/ecl/test_rft_statoil.py | 135 + .../devel/python/tests/core/ecl/test_sum.py | 447 +- .../python/tests/core/ecl/test_sum_statoil.py | 426 + .../python/tests/core/geometry/CMakeLists.txt | 6 +- .../tests/core/geometry/test_surface.py | 151 + .../python/tests/core/util/CMakeLists.txt | 9 +- .../python/tests/core/util/test_arg_pack.py | 34 +- .../python/tests/core/util/test_cstring.py | 19 + .../tests/core/util/test_cthread_pool.py | 47 +- .../python/tests/core/util/test_ctime.py | 24 +- .../devel/python/tests/core/util/test_hash.py | 11 +- .../python/tests/core/util/test_latex.py | 60 - .../tests/core/util/test_lookup_table.py | 32 +- .../python/tests/core/util/test_spawn.py | 59 + .../devel/python/tests/core/util/test_stat.py | 20 +- .../tests/core/util/test_string_list.py | 29 + .../tests/core/util/test_substitution_list.py | 3 +- .../python/tests/core/util/test_ui_return.py | 53 +- .../python/tests/core/util/test_vectors.py | 302 +- .../python/tests/core/util/test_version.py | 112 +- .../python/tests/core/util/test_work_area.py | 45 +- .../python/tests/ert/config/test_config.py | 39 +- .../python/tests/ert/enkf/CMakeLists.txt | 8 +- .../tests/ert/enkf/data/test_custom_kw.py | 29 +- .../ert/enkf/data/test_custom_kw_config.py | 18 +- .../tests/ert/enkf/data/test_gen_data.py | 2 - .../ert/enkf/data/test_gen_data_config.py | 31 +- .../python/tests/ert/enkf/data/test_gen_kw.py | 3 +- .../tests/ert/enkf/export/CMakeLists.txt | 14 +- .../tests/ert/enkf/export/test_export_join.py | 47 +- .../enkf/export/test_gen_data_collector.py | 22 +- .../test_gen_data_observation_collector.py | 4 +- .../ert/enkf/export/test_gen_kw_collector.py | 29 +- .../ert/enkf/export/test_misfit_collector.py | 17 +- .../ert/enkf/export/test_summary_collector.py | 27 +- .../test_summary_observation_collector.py | 29 +- .../ert/enkf/test_custom_kw_config_set.py | 2 +- .../devel/python/tests/ert/enkf/test_enkf.py | 5 +- .../python/tests/ert/enkf/test_enkf_obs.py | 36 +- .../tests/ert/enkf/test_field_export.py | 69 + .../ert/enkf/test_forward_load_context.py | 9 + .../tests/ert/enkf/test_hook_workflow.py | 9 + .../tests/ert/enkf/test_local_config.py | 54 +- .../tests/ert/enkf/test_local_obsdata_node.py | 10 +- .../tests/ert/enkf/test_runpath_list.py | 40 +- .../python/tests/ert/job_queue/CMakeLists.txt | 4 +- .../tests/ert/job_queue/test_ext_job.py | 77 + .../tests/ert/job_queue/test_workflow_job.py | 3 +- .../tests/ert/job_queue/workflow_common.py | 1 - .../python/tests/ert/server/CMakeLists.txt | 10 +- .../devel/python/tests/ert/server/__init__.py | 43 + .../tests/ert/server/test_rpc_service.py | 186 + .../tests/ert/server/test_rpc_storage.py | 124 + .../python/tests/ert/server/test_server.py | 100 - .../ert/server/test_simulation_context.py | 93 + .../python/tests/ert/server/test_socket.py | 132 - .../Ert/devel/python/tests/gui/CMakeLists.txt | 1 + .../python/tests/gui/ertshell/CMakeLists.txt | 20 +- .../gui/ertshell/ert_shell_test_context.py | 8 +- .../gui/ertshell/test_ertshell_analysis.py | 6 +- .../gui/ertshell/test_ertshell_context.py | 5 +- .../ertshell/test_ertshell_observations.py | 3 + .../ertshell/test_ertshell_plot_settings.py | 60 + .../gui/ertshell/test_ertshell_server.py | 23 + .../gui/ertshell/test_ertshell_smoother.py | 28 +- .../gui/ertshell/test_shell_collection.py | 97 + .../tests/gui/ertshell/test_shell_function.py | 148 + .../tests/gui/ertshell/test_shell_property.py | 317 + .../python/tests/gui/ide/test_ert_keywords.py | 12 - .../python/tests/gui/plottery/CMakeLists.txt | 12 + .../tests/gui/plottery/__init__.py} | 0 .../gui/plottery/test_plot_config_history.py | 44 + .../tests/gui/plottery/test_plot_limits.py | 124 + .../tests/gui/plottery/test_plot_style.py | 162 + .../python/tests/share/test_synthesizer.py | 4 + ThirdParty/Ert/devel/redhat/ert.ecl.spec | 5 +- .../help/config/keywords/enkf_sched_file.html | 1 - .../help/config/keywords/keep_runpath.html | 1 - .../gui/help/config/keywords/keywords.txt | 6 - .../help/config/keywords/report_context.html | 1 - .../config/keywords/report_group_list.html | 1 - .../gui/help/config/keywords/report_list.html | 1 - .../gui/help/config/keywords/report_path.html | 1 - .../config/keywords/report_search_path.html | 1 - .../config/keywords/report_well_list.html | 1 - .../Ert/devel/share/gui/img/calendar.png | Bin 0 -> 705 bytes .../Ert/devel/share/gui/img/page_copy.png | Bin 0 -> 593 bytes ThirdParty/Ert/devel/share/gui/img/redo.png | Bin 0 -> 1288 bytes .../devel/share/gui/img/remove_favorite.png | Bin 0 -> 661 bytes ThirdParty/Ert/devel/share/gui/img/undo.png | Bin 0 -> 1307 bytes ThirdParty/Ert/devel/share/gui/img/update.png | Bin 0 -> 814 bytes .../share/lib/synthesizer/oil_simulator.py | 188 +- .../scripts/export_misfit_data.py | 4 +- .../jobs/internal-gui/scripts/mda_es.py | 19 +- .../scripts/update_runpath_list.py | 6 +- .../jobs/internal/config/ANALYSIS_ENKF_UPDATE | 5 - .../jobs/internal/config/ANALYSIS_UPDATE | 6 - .../jobs/internal/config/CREATE_REPORTS | 2 - .../jobs/internal/config/RUN_ASSIMILATION | 6 - .../jobs/internal/config/RUN_SMOOTHER | 2 +- .../test-data/local/config/simple_config | 12 - .../test-data/local/custom_kw/mini_config | 1 - .../local/custom_kw/mini_fail_config | 1 - .../local/geometry/surface/long_ascii.irap | 650 ++ .../local/geometry/surface/short_ascii.irap | 614 ++ .../local/geometry/surface/valid2_ascii.irap | 650 ++ .../local/geometry/surface/valid_ascii.irap | 650 ++ .../local/geometry/surface/valid_binary.irap | Bin 0 -> 16216 bytes .../geometry/surface/valid_small_ascii.irap | 104 + .../Ert/devel/test-data/local/snake_oil/SEED | 1 + .../local/snake_oil/jobs/SNAKE_OIL_DIFF | 4 + .../local/snake_oil/jobs/SNAKE_OIL_NPV | 4 + .../local/snake_oil/jobs/SNAKE_OIL_SIMULATOR | 4 + .../local/snake_oil/jobs/snake_oil_diff.py | 24 + .../local/snake_oil/jobs/snake_oil_npv.py | 103 + .../snake_oil/jobs/snake_oil_simulator.py | 200 + .../snake_oil/observations/observations.txt | 56 + .../snake_oil/observations/wpr_diff_obs.txt | 4 + .../parameters/snake_oil_parameters.txt | 11 + .../snake_oil/refcase/SNAKE_OIL_FIELD.SMSPEC | Bin 0 -> 1584 bytes .../snake_oil/refcase/SNAKE_OIL_FIELD.UNSMRY | Bin 0 -> 503200 bytes .../snake_oil/refcase/refcase_readme.txt | 1 + .../local/snake_oil/refcase/seed.txt | 1 + .../snake_oil/refcase/snake_oil_params.txt | 10 + .../local/snake_oil/refcase/time_map.txt | 2000 ++++ .../test-data/local/snake_oil/snake_oil.ert | 39 + .../storage/snake_oil/ensemble/current_case | 1 + .../0199/files/SNAKE_OIL_GPR_DIFF_active | Bin 0 -> 2005 bytes .../0199/files/SNAKE_OIL_OPR_DIFF_active | Bin 0 -> 2005 bytes .../0199/files/SNAKE_OIL_WPR_DIFF_active | Bin 0 -> 2005 bytes .../default_0/Ensemble/mod_0/ANALYZED.data_0} | 0 .../default_0/Ensemble/mod_0/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_0/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_0/FORECAST.data_0 | Bin 0 -> 107136 bytes .../default_0/Ensemble/mod_0/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_0/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_0/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_0/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_0/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_0/STATIC.data_0} | 0 .../default_0/Ensemble/mod_0/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_0/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_1/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_1/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_1/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_1/FORECAST.data_0 | Bin 0 -> 106560 bytes .../default_0/Ensemble/mod_1/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_1/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_1/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_1/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_1/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_1/STATIC.data_0 | 0 .../default_0/Ensemble/mod_1/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_1/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_10/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_10/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_10/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_10/FORECAST.data_0 | Bin 0 -> 101824 bytes .../default_0/Ensemble/mod_10/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_10/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_10/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_10/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_10/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_10/STATIC.data_0 | 0 .../default_0/Ensemble/mod_10/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_10/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_11/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_11/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_11/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_11/FORECAST.data_0 | Bin 0 -> 100480 bytes .../default_0/Ensemble/mod_11/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_11/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_11/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_11/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_11/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_11/STATIC.data_0 | 0 .../default_0/Ensemble/mod_11/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_11/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_12/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_12/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_12/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_12/FORECAST.data_0 | Bin 0 -> 108224 bytes .../default_0/Ensemble/mod_12/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_12/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_12/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_12/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_12/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_12/STATIC.data_0 | 0 .../default_0/Ensemble/mod_12/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_12/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_13/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_13/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_13/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_13/FORECAST.data_0 | Bin 0 -> 107712 bytes .../default_0/Ensemble/mod_13/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_13/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_13/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_13/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_13/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_13/STATIC.data_0 | 0 .../default_0/Ensemble/mod_13/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_13/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_14/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_14/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_14/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_14/FORECAST.data_0 | Bin 0 -> 104128 bytes .../default_0/Ensemble/mod_14/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_14/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_14/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_14/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_14/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_14/STATIC.data_0 | 0 .../default_0/Ensemble/mod_14/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_14/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_15/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_15/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_15/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_15/FORECAST.data_0 | Bin 0 -> 107776 bytes .../default_0/Ensemble/mod_15/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_15/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_15/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_15/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_15/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_15/STATIC.data_0 | 0 .../default_0/Ensemble/mod_15/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_15/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_16/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_16/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_16/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_16/FORECAST.data_0 | Bin 0 -> 108224 bytes .../default_0/Ensemble/mod_16/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_16/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_16/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_16/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_16/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_16/STATIC.data_0 | 0 .../default_0/Ensemble/mod_16/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_16/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_17/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_17/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_17/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_17/FORECAST.data_0 | Bin 0 -> 108288 bytes .../default_0/Ensemble/mod_17/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_17/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_17/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_17/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_17/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_17/STATIC.data_0 | 0 .../default_0/Ensemble/mod_17/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_17/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_18/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_18/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_18/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_18/FORECAST.data_0 | Bin 0 -> 102656 bytes .../default_0/Ensemble/mod_18/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_18/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_18/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_18/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_18/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_18/STATIC.data_0 | 0 .../default_0/Ensemble/mod_18/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_18/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_19/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_19/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_19/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_19/FORECAST.data_0 | Bin 0 -> 107648 bytes .../default_0/Ensemble/mod_19/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_19/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_19/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_19/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_19/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_19/STATIC.data_0 | 0 .../default_0/Ensemble/mod_19/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_19/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_2/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_2/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_2/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_2/FORECAST.data_0 | Bin 0 -> 107520 bytes .../default_0/Ensemble/mod_2/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_2/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_2/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_2/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_2/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_2/STATIC.data_0 | 0 .../default_0/Ensemble/mod_2/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_2/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_20/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_20/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_20/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_20/FORECAST.data_0 | Bin 0 -> 106112 bytes .../default_0/Ensemble/mod_20/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_20/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_20/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_20/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_20/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_20/STATIC.data_0 | 0 .../default_0/Ensemble/mod_20/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_20/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_21/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_21/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_21/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_21/FORECAST.data_0 | Bin 0 -> 108160 bytes .../default_0/Ensemble/mod_21/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_21/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_21/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_21/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_21/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_21/STATIC.data_0 | 0 .../default_0/Ensemble/mod_21/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_21/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_22/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_22/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_22/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_22/FORECAST.data_0 | Bin 0 -> 106752 bytes .../default_0/Ensemble/mod_22/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_22/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_22/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_22/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_22/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_22/STATIC.data_0 | 0 .../default_0/Ensemble/mod_22/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_22/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_23/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_23/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_23/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_23/FORECAST.data_0 | Bin 0 -> 108224 bytes .../default_0/Ensemble/mod_23/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_23/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_23/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_23/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_23/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_23/STATIC.data_0 | 0 .../default_0/Ensemble/mod_23/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_23/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_24/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_24/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_24/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_24/FORECAST.data_0 | Bin 0 -> 108032 bytes .../default_0/Ensemble/mod_24/FORECAST.index | Bin 0 -> 1745 bytes .../default_0/Ensemble/mod_24/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_24/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_24/PARAMETER.index | Bin 0 -> 73 bytes .../default_0/Ensemble/mod_24/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_24/STATIC.data_0 | 0 .../default_0/Ensemble/mod_24/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_24/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_25/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_25/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_25/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_25/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_25/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_25/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_25/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_25/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_25/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_25/STATIC.data_0 | 0 .../default_0/Ensemble/mod_25/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_25/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_26/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_26/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_26/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_26/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_26/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_26/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_26/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_26/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_26/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_26/STATIC.data_0 | 0 .../default_0/Ensemble/mod_26/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_26/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_27/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_27/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_27/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_27/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_27/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_27/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_27/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_27/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_27/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_27/STATIC.data_0 | 0 .../default_0/Ensemble/mod_27/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_27/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_28/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_28/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_28/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_28/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_28/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_28/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_28/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_28/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_28/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_28/STATIC.data_0 | 0 .../default_0/Ensemble/mod_28/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_28/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_29/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_29/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_29/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_29/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_29/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_29/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_29/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_29/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_29/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_29/STATIC.data_0 | 0 .../default_0/Ensemble/mod_29/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_29/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_3/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_3/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_3/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_3/FORECAST.data_0 | Bin 0 -> 105216 bytes .../default_0/Ensemble/mod_3/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_3/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_3/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_3/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_3/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_3/STATIC.data_0 | 0 .../default_0/Ensemble/mod_3/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_3/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_30/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_30/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_30/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_30/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_30/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_30/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_30/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_30/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_30/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_30/STATIC.data_0 | 0 .../default_0/Ensemble/mod_30/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_30/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_31/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_31/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_31/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_31/FORECAST.data_0 | 0 .../default_0/Ensemble/mod_31/FORECAST.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_31/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_31/PARAMETER.data_0 | 0 .../default_0/Ensemble/mod_31/PARAMETER.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_31/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_31/STATIC.data_0 | 0 .../default_0/Ensemble/mod_31/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_31/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_4/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_4/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_4/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_4/FORECAST.data_0 | Bin 0 -> 106944 bytes .../default_0/Ensemble/mod_4/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_4/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_4/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_4/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_4/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_4/STATIC.data_0 | 0 .../default_0/Ensemble/mod_4/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_4/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_5/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_5/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_5/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_5/FORECAST.data_0 | Bin 0 -> 103296 bytes .../default_0/Ensemble/mod_5/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_5/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_5/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_5/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_5/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_5/STATIC.data_0 | 0 .../default_0/Ensemble/mod_5/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_5/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_6/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_6/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_6/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_6/FORECAST.data_0 | Bin 0 -> 107456 bytes .../default_0/Ensemble/mod_6/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_6/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_6/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_6/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_6/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_6/STATIC.data_0 | 0 .../default_0/Ensemble/mod_6/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_6/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_7/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_7/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_7/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_7/FORECAST.data_0 | Bin 0 -> 102144 bytes .../default_0/Ensemble/mod_7/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_7/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_7/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_7/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_7/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_7/STATIC.data_0 | 0 .../default_0/Ensemble/mod_7/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_7/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_8/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_8/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_8/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_8/FORECAST.data_0 | Bin 0 -> 106688 bytes .../default_0/Ensemble/mod_8/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_8/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_8/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_8/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_8/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_8/STATIC.data_0 | 0 .../default_0/Ensemble/mod_8/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_8/STATIC.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_9/ANALYZED.data_0 | 0 .../default_0/Ensemble/mod_9/ANALYZED.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_9/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_9/FORECAST.data_0 | Bin 0 -> 106880 bytes .../default_0/Ensemble/mod_9/FORECAST.index | Bin 0 -> 1702 bytes .../default_0/Ensemble/mod_9/FORECAST.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_9/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_0/Ensemble/mod_9/PARAMETER.index | Bin 0 -> 72 bytes .../default_0/Ensemble/mod_9/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_0/Ensemble/mod_9/STATIC.data_0 | 0 .../default_0/Ensemble/mod_9/STATIC.index | Bin 0 -> 24 bytes .../default_0/Ensemble/mod_9/STATIC.mnt | Bin 0 -> 8 bytes .../ensemble/default_0/Index/INDEX.data_0 | 0 .../ensemble/default_0/Index/INDEX.index | Bin 0 -> 24 bytes .../ensemble/default_0/Index/INDEX.mnt | Bin 0 -> 8 bytes .../snake_oil/ensemble/default_0/ert_fstab | Bin 0 -> 207 bytes .../ensemble/default_0/files/case_config | Bin 0 -> 4 bytes .../default_0/files/custom_kw_config_set | Bin 0 -> 53 bytes .../ensemble/default_0/files/state-map | Bin 0 -> 108 bytes .../ensemble/default_0/files/summary-key-set | Bin 0 -> 463 bytes .../ensemble/default_0/files/time-map | Bin 0 -> 1620 bytes .../default_1/Ensemble/mod_0/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_0/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_0/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_0/FORECAST.data_0 | Bin 0 -> 106560 bytes .../default_1/Ensemble/mod_0/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_0/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_0/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_0/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_0/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_0/STATIC.data_0 | 0 .../default_1/Ensemble/mod_0/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_0/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_1/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_1/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_1/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_1/FORECAST.data_0 | Bin 0 -> 106496 bytes .../default_1/Ensemble/mod_1/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_1/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_1/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_1/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_1/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_1/STATIC.data_0 | 0 .../default_1/Ensemble/mod_1/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_1/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_10/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_10/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_10/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_10/FORECAST.data_0 | Bin 0 -> 107008 bytes .../default_1/Ensemble/mod_10/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_10/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_10/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_10/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_10/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_10/STATIC.data_0 | 0 .../default_1/Ensemble/mod_10/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_10/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_11/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_11/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_11/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_11/FORECAST.data_0 | Bin 0 -> 107072 bytes .../default_1/Ensemble/mod_11/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_11/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_11/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_11/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_11/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_11/STATIC.data_0 | 0 .../default_1/Ensemble/mod_11/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_11/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_12/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_12/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_12/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_12/FORECAST.data_0 | Bin 0 -> 104320 bytes .../default_1/Ensemble/mod_12/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_12/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_12/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_12/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_12/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_12/STATIC.data_0 | 0 .../default_1/Ensemble/mod_12/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_12/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_13/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_13/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_13/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_13/FORECAST.data_0 | Bin 0 -> 105152 bytes .../default_1/Ensemble/mod_13/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_13/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_13/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_13/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_13/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_13/STATIC.data_0 | 0 .../default_1/Ensemble/mod_13/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_13/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_14/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_14/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_14/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_14/FORECAST.data_0 | Bin 0 -> 106688 bytes .../default_1/Ensemble/mod_14/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_14/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_14/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_14/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_14/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_14/STATIC.data_0 | 0 .../default_1/Ensemble/mod_14/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_14/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_15/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_15/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_15/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_15/FORECAST.data_0 | Bin 0 -> 101120 bytes .../default_1/Ensemble/mod_15/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_15/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_15/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_15/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_15/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_15/STATIC.data_0 | 0 .../default_1/Ensemble/mod_15/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_15/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_16/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_16/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_16/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_16/FORECAST.data_0 | Bin 0 -> 103360 bytes .../default_1/Ensemble/mod_16/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_16/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_16/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_16/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_16/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_16/STATIC.data_0 | 0 .../default_1/Ensemble/mod_16/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_16/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_17/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_17/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_17/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_17/FORECAST.data_0 | Bin 0 -> 108096 bytes .../default_1/Ensemble/mod_17/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_17/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_17/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_17/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_17/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_17/STATIC.data_0 | 0 .../default_1/Ensemble/mod_17/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_17/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_18/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_18/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_18/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_18/FORECAST.data_0 | Bin 0 -> 103680 bytes .../default_1/Ensemble/mod_18/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_18/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_18/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_18/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_18/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_18/STATIC.data_0 | 0 .../default_1/Ensemble/mod_18/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_18/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_19/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_19/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_19/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_19/FORECAST.data_0 | Bin 0 -> 107712 bytes .../default_1/Ensemble/mod_19/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_19/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_19/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_19/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_19/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_19/STATIC.data_0 | 0 .../default_1/Ensemble/mod_19/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_19/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_2/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_2/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_2/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_2/FORECAST.data_0 | Bin 0 -> 107200 bytes .../default_1/Ensemble/mod_2/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_2/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_2/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_2/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_2/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_2/STATIC.data_0 | 0 .../default_1/Ensemble/mod_2/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_2/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_20/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_20/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_20/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_20/FORECAST.data_0 | Bin 0 -> 108160 bytes .../default_1/Ensemble/mod_20/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_20/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_20/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_20/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_20/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_20/STATIC.data_0 | 0 .../default_1/Ensemble/mod_20/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_20/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_21/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_21/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_21/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_21/FORECAST.data_0 | Bin 0 -> 108352 bytes .../default_1/Ensemble/mod_21/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_21/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_21/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_21/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_21/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_21/STATIC.data_0 | 0 .../default_1/Ensemble/mod_21/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_21/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_22/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_22/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_22/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_22/FORECAST.data_0 | Bin 0 -> 108352 bytes .../default_1/Ensemble/mod_22/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_22/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_22/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_22/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_22/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_22/STATIC.data_0 | 0 .../default_1/Ensemble/mod_22/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_22/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_23/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_23/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_23/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_23/FORECAST.data_0 | Bin 0 -> 102528 bytes .../default_1/Ensemble/mod_23/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_23/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_23/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_23/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_23/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_23/STATIC.data_0 | 0 .../default_1/Ensemble/mod_23/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_23/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_24/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_24/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_24/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_24/FORECAST.data_0 | Bin 0 -> 101056 bytes .../default_1/Ensemble/mod_24/FORECAST.index | Bin 0 -> 1745 bytes .../default_1/Ensemble/mod_24/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_24/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_24/PARAMETER.index | Bin 0 -> 73 bytes .../default_1/Ensemble/mod_24/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_24/STATIC.data_0 | 0 .../default_1/Ensemble/mod_24/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_24/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_25/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_25/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_25/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_25/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_25/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_25/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_25/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_25/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_25/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_25/STATIC.data_0 | 0 .../default_1/Ensemble/mod_25/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_25/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_26/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_26/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_26/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_26/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_26/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_26/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_26/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_26/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_26/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_26/STATIC.data_0 | 0 .../default_1/Ensemble/mod_26/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_26/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_27/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_27/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_27/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_27/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_27/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_27/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_27/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_27/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_27/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_27/STATIC.data_0 | 0 .../default_1/Ensemble/mod_27/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_27/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_28/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_28/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_28/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_28/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_28/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_28/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_28/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_28/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_28/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_28/STATIC.data_0 | 0 .../default_1/Ensemble/mod_28/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_28/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_29/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_29/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_29/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_29/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_29/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_29/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_29/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_29/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_29/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_29/STATIC.data_0 | 0 .../default_1/Ensemble/mod_29/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_29/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_3/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_3/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_3/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_3/FORECAST.data_0 | Bin 0 -> 106944 bytes .../default_1/Ensemble/mod_3/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_3/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_3/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_3/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_3/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_3/STATIC.data_0 | 0 .../default_1/Ensemble/mod_3/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_3/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_30/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_30/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_30/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_30/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_30/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_30/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_30/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_30/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_30/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_30/STATIC.data_0 | 0 .../default_1/Ensemble/mod_30/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_30/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_31/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_31/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_31/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_31/FORECAST.data_0 | 0 .../default_1/Ensemble/mod_31/FORECAST.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_31/FORECAST.mnt | Bin 0 -> 8 bytes .../Ensemble/mod_31/PARAMETER.data_0 | 0 .../default_1/Ensemble/mod_31/PARAMETER.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_31/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_31/STATIC.data_0 | 0 .../default_1/Ensemble/mod_31/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_31/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_4/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_4/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_4/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_4/FORECAST.data_0 | Bin 0 -> 103040 bytes .../default_1/Ensemble/mod_4/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_4/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_4/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_4/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_4/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_4/STATIC.data_0 | 0 .../default_1/Ensemble/mod_4/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_4/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_5/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_5/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_5/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_5/FORECAST.data_0 | Bin 0 -> 105216 bytes .../default_1/Ensemble/mod_5/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_5/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_5/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_5/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_5/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_5/STATIC.data_0 | 0 .../default_1/Ensemble/mod_5/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_5/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_6/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_6/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_6/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_6/FORECAST.data_0 | Bin 0 -> 106688 bytes .../default_1/Ensemble/mod_6/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_6/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_6/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_6/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_6/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_6/STATIC.data_0 | 0 .../default_1/Ensemble/mod_6/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_6/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_7/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_7/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_7/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_7/FORECAST.data_0 | Bin 0 -> 105728 bytes .../default_1/Ensemble/mod_7/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_7/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_7/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_7/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_7/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_7/STATIC.data_0 | 0 .../default_1/Ensemble/mod_7/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_7/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_8/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_8/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_8/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_8/FORECAST.data_0 | Bin 0 -> 106496 bytes .../default_1/Ensemble/mod_8/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_8/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_8/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_8/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_8/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_8/STATIC.data_0 | 0 .../default_1/Ensemble/mod_8/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_8/STATIC.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_9/ANALYZED.data_0 | 0 .../default_1/Ensemble/mod_9/ANALYZED.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_9/ANALYZED.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_9/FORECAST.data_0 | Bin 0 -> 106240 bytes .../default_1/Ensemble/mod_9/FORECAST.index | Bin 0 -> 1702 bytes .../default_1/Ensemble/mod_9/FORECAST.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_9/PARAMETER.data_0 | Bin 0 -> 192 bytes .../default_1/Ensemble/mod_9/PARAMETER.index | Bin 0 -> 72 bytes .../default_1/Ensemble/mod_9/PARAMETER.mnt | Bin 0 -> 8 bytes .../default_1/Ensemble/mod_9/STATIC.data_0 | 0 .../default_1/Ensemble/mod_9/STATIC.index | Bin 0 -> 24 bytes .../default_1/Ensemble/mod_9/STATIC.mnt | Bin 0 -> 8 bytes .../ensemble/default_1/Index/INDEX.data_0 | 0 .../ensemble/default_1/Index/INDEX.index | Bin 0 -> 24 bytes .../ensemble/default_1/Index/INDEX.mnt | Bin 0 -> 8 bytes .../snake_oil/ensemble/default_1/ert_fstab | Bin 0 -> 207 bytes .../ensemble/default_1/files/case_config | Bin 0 -> 4 bytes .../default_1/files/custom_kw_config_set | Bin 0 -> 53 bytes .../ensemble/default_1/files/state-map | Bin 0 -> 108 bytes .../ensemble/default_1/files/summary-key-set | Bin 0 -> 463 bytes .../ensemble/default_1/files/time-map | Bin 0 -> 1620 bytes .../snake_oil/templates/seed_template.txt | 1 + .../templates/snake_oil_template.txt | 10 + .../test-data/local/snake_oil_no_data/SEED | 1 + .../snake_oil_no_data/jobs/SNAKE_OIL_DIFF | 4 + .../snake_oil_no_data/jobs/SNAKE_OIL_NPV | 4 + .../jobs/SNAKE_OIL_SIMULATOR | 4 + .../snake_oil_no_data/jobs/snake_oil_diff.py | 24 + .../snake_oil_no_data/jobs/snake_oil_npv.py | 103 + .../jobs/snake_oil_simulator.py | 185 + .../observations/observations.txt | 56 + .../observations/wpr_diff_obs.txt | 4 + .../parameters/snake_oil_parameters.txt | 11 + .../refcase/SNAKE_OIL_FIELD.SMSPEC | Bin 0 -> 1416 bytes .../refcase/SNAKE_OIL_FIELD.UNSMRY | Bin 0 -> 455200 bytes .../refcase/refcase_readme.txt | 1 + .../local/snake_oil_no_data/refcase/seed.txt | 1 + .../refcase/snake_oil_params.txt | 10 + .../snake_oil_no_data/refcase/time_map.txt | 2000 ++++ .../local/snake_oil_no_data/snake_oil.ert | 39 + .../snake_oil_no_data/snake_oil_GEO_ID.ert | 39 + .../templates/seed_template.txt | 1 + .../templates/snake_oil_template.txt | 10 + 1680 files changed, 29312 insertions(+), 56057 deletions(-) delete mode 100644 ThirdParty/Ert/devel/Doxyfile delete mode 100644 ThirdParty/Ert/devel/cmake/Tests/test_blas.c delete mode 100644 ThirdParty/Ert/devel/cmake/Tests/test_isreg.c delete mode 100644 ThirdParty/Ert/devel/cmake/Tests/test_mkdir.c create mode 100644 ThirdParty/Ert/devel/cmake/Tests/test_mode_t.c delete mode 100644 ThirdParty/Ert/devel/cmake/config/ert_build_config.h.in create mode 100644 ThirdParty/Ert/devel/cmake/ert_api_check.cmake create mode 100644 ThirdParty/Ert/devel/cmake/ert_build_check.cmake delete mode 100644 ThirdParty/Ert/devel/cmake/ert_check.cmake delete mode 100644 ThirdParty/Ert/devel/cmake/ert_find.cmake create mode 100644 ThirdParty/Ert/devel/cmake/ert_lib_check.cmake create mode 100644 ThirdParty/Ert/devel/debian/python-ert.ecl.install create mode 100644 ThirdParty/Ert/devel/docs/code/python/examples/eclipse/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/examples/ert/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/examples/geo/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/examples/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/config/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/eclipse/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/enkf/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/geometry/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/util/index.rst create mode 100644 ThirdParty/Ert/devel/docs/code/python/packages/well/index.rst create mode 100644 ThirdParty/Ert/devel/docs/user/magic_strings/index.rst delete mode 100644 ThirdParty/Ert/devel/libecl/applications/ens_plot.c delete mode 100644 ThirdParty/Ert/devel/libecl/applications/summary2csv.c create mode 100644 ThirdParty/Ert/devel/libeclxx/include/ert/ecl/Smspec.hpp create mode 100644 ThirdParty/Ert/devel/libeclxx/src/Smspec.cpp create mode 100644 ThirdParty/Ert/devel/libeclxx/tests/eclxx_smspec.cpp delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/SConstruct delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_QC.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.h delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_rft.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_rft.h delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.h delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/ert_tui_jobs.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/install.py delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_tui/timestamp.cmake delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/doc/ERT.txt delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/src/tree1.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/src/xpath1.c delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/tests/enkf_config.xml delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/tests/site-config.xml delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/action.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/basetypes.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/dbase.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/eclipse.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/ensemble.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/ert.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/log.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/obsconfig.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/observations.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/plot.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/queuesystem.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/simulations.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/system.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/applications/xml/xsd/update.xsd delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/ecl_static_kw.h delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/ecl_static_kw_config.h delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_sched.h delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/ert_report.h delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/ert_report_list.h create mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/forward_load_context.h create mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/hook_manager.h create mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/hook_workflow.h delete mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/qc_module.h create mode 100644 ThirdParty/Ert/devel/libenkf/include/ert/enkf/run_arg_type.h delete mode 100644 ThirdParty/Ert/devel/libenkf/src/SConscript delete mode 100644 ThirdParty/Ert/devel/libenkf/src/ecl_static_kw.c delete mode 100644 ThirdParty/Ert/devel/libenkf/src/enkf_sched.c delete mode 100644 ThirdParty/Ert/devel/libenkf/src/ert_report.c delete mode 100644 ThirdParty/Ert/devel/libenkf/src/ert_report_list.c create mode 100644 ThirdParty/Ert/devel/libenkf/src/forward_load_context.c create mode 100644 ThirdParty/Ert/devel/libenkf/src/hook_manager.c create mode 100644 ThirdParty/Ert/devel/libenkf/src/hook_workflow.c delete mode 100644 ThirdParty/Ert/devel/libenkf/src/qc_module.c delete mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_analysis_enkf_update_job.c create mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_forward_load_context.c delete mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_fs_invalidate_cache.c create mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_hook_manager_test.c delete mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_qc_module_test.c delete mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_report_list.c delete mode 100644 ThirdParty/Ert/devel/libenkf/tests/enkf_select_case_job_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/bcp.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/bfs_extract.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/block_fs_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/bls.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/brm.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/block_fs/brot.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/ens_tar.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/eol-fix.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/file_open.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/grane_fix.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/grdecl_to_ascii.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/latex_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/matrix_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/mem_free.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/parser_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/replace.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/result1.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/result2.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/result3.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/template1.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/template2.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/template_test_data/template3.txt delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/util-test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/util_contains_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/applications/util_fmove_test.c create mode 100644 ThirdParty/Ert/devel/libert_util/include/ert/util/build_config.h.in create mode 100644 ThirdParty/Ert/devel/libert_util/include/ert/util/ert_api_config.h.in delete mode 100644 ThirdParty/Ert/devel/libert_util/include/ert/util/latex.h create mode 100644 ThirdParty/Ert/devel/libert_util/include/ert/util/test_util_abort.h delete mode 100644 ThirdParty/Ert/devel/libert_util/include/ert/util/thread_pool_posix.h delete mode 100644 ThirdParty/Ert/devel/libert_util/src/latex.c delete mode 100644 ThirdParty/Ert/devel/libert_util/src/util_abort_test.c delete mode 100644 ThirdParty/Ert/devel/libert_util/src/util_fork.c create mode 100644 ThirdParty/Ert/devel/libert_util/src/util_spawn.c delete mode 100644 ThirdParty/Ert/devel/libert_util/tests/data/latex_OK.tex delete mode 100644 ThirdParty/Ert/devel/libert_util/tests/ert_util_latex_test.c create mode 100644 ThirdParty/Ert/devel/libert_util/tests/ert_util_matrix_lapack.c create mode 100644 ThirdParty/Ert/devel/libert_util/tests/ert_util_spawn.c create mode 100644 ThirdParty/Ert/devel/libert_utilxx/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/libert_utilxx/include/ert/util/ert_unique_ptr.hpp create mode 100644 ThirdParty/Ert/devel/libert_utilxx/tests/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/libert_utilxx/tests/ert_util_unique_ptr.cpp delete mode 100644 ThirdParty/Ert/devel/libgeometry/applications/SConstruct delete mode 100644 ThirdParty/Ert/devel/libplot/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_const.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_dataset.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_driver.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_range.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_summary.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plot_text.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/plplot_driver.h delete mode 100644 ThirdParty/Ert/devel/libplot/include/ert/plot/text_driver.h delete mode 100644 ThirdParty/Ert/devel/libplot/src/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/libplot/src/PLPLOT_README delete mode 100644 ThirdParty/Ert/devel/libplot/src/errorbar_test.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_canvas_test.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_dataset.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_driver.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_range.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_summary.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_test.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plot_text.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/plplot_driver.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/simple.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/summary_plot.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/summary_plot_live.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/test.c delete mode 100644 ThirdParty/Ert/devel/libplot/src/text_driver.c delete mode 100644 ThirdParty/Ert/devel/libplot/tests/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/libplot/tests/plot_plplot.c delete mode 100644 ThirdParty/Ert/devel/libplot/tests/plot_range.c delete mode 100644 ThirdParty/Ert/devel/libplot/tests/plot_text.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/AUTHORS delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/COPYING delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/INSTALL delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/Makefile.am delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/Makefile.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/README delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/aclocal.m4 delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/autogen.sh delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/configure delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/configure.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/depcomp delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/gui_config.h.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/install-sh delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/missing delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/mkinstalldirs delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/pixmaps/wizard-128x128.png delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/pixmaps/wizard-64x64.png delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/po/Makefile.in.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/po/POTFILES.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/Makefile.am delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/Makefile.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/callbacks.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/callbacks.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/custom-cell-renderer-progressbar.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/custom-cell-renderer-progressbar.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/enkf_config delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/enkf_setup.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/enkf_setup.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/interface.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/interface.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/main.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/main.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/support.c delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/src/support.h delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/stamp-h.in delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/test.glade delete mode 100644 ThirdParty/Ert/devel/main/Glade/test/test.gladep create mode 100644 ThirdParty/Ert/devel/python/python/ert/cwrap/metacwrap.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/cwrap/prototype.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/ecl/ecl_cmp.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/config/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/config/__init__.py rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/custom_kw_config.py (73%) rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/enkf_config_node.py (95%) rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/field_config.py (85%) rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/gen_data_config.py (83%) rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/gen_kw_config.py (100%) rename ThirdParty/Ert/devel/python/python/ert/enkf/{data => config}/summary_config.py (100%) rename ThirdParty/Ert/devel/python/{tests/ert/enkf/test_run_arg.py => python/ert/enkf/enums/hook_runtime_enum.py} (50%) create mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/forward_load_context.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/hook_manager.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/hook_workflow.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/post_simulation_hook.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/ert_lib_info_build.py.in rename ThirdParty/Ert/devel/python/python/ert/{ert_lib_path_install.py.in => ert_lib_info_install.py.in} (61%) delete mode 100644 ThirdParty/Ert/devel/python/python/ert/ert_lib_path_build.py.in create mode 100644 ThirdParty/Ert/devel/python/python/ert/geo/surface.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/server/ert_client.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/server/ert_server.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/server/ert_socket.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/server/ertrpcclient.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/server/ertrpcserver.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/server/run_context.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/server/simulation_context.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/test/ecl_mock/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/python/python/ert/test/ecl_mock/__init__.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/test/ecl_mock/ecl_sum_mock.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/test/temp_area.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/util/cstring.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/util/latex.py create mode 100644 ThirdParty/Ert/devel/python/python/ert/util/path_format.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/ertplot.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/ide/keywords/report_keywords.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/ide_test.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plot_config_factory.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plot_config_history.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plot_limits.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plot_style.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plots/ccsp.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plots/distribution.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plots/history.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/plottery/plots/overview.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/ert_shell_collection.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/ert_shell_context.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/export.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/__init__.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_collection.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_context.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_function.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_path_tools.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_property.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/libshell/shell_tools.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/server.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/shell_context.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/shell_function.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/shell_tools.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/shell/storage.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/CMakeLists.txt create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/__init__.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/customization_view.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/customize_plot_dialog.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/default_customization_view.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/limits_customization_view.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/statistics_customization_view.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize/style_customization_view.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/customize_plot_widget.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/tools/plot/style_chooser.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/__init__.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/bounds.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/camera.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/opengl_tools.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/polyline_drawer.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/shader_program.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/shader_source.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/slice_settings_widget.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/slice_viewer.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/slice_viewer_widget.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/texture.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/unity_quaternion.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/viewer/vertex_buffer_object.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/widgets/clearable_line_edit.py create mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/widgets/custom_date_edit.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/cwrap/test_cfile.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/cwrap/test_metawrap.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/ecl/test_ecl_cmp.py rename ThirdParty/Ert/devel/python/tests/core/ecl/{test_kw.py => test_ecl_kw.py} (53%) create mode 100644 ThirdParty/Ert/devel/python/tests/core/ecl/test_ecl_kw_statoil.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/ecl/test_rft_statoil.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/ecl/test_sum_statoil.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/geometry/test_surface.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/util/test_cstring.py delete mode 100644 ThirdParty/Ert/devel/python/tests/core/util/test_latex.py create mode 100644 ThirdParty/Ert/devel/python/tests/core/util/test_spawn.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/enkf/test_field_export.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/enkf/test_forward_load_context.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/enkf/test_hook_workflow.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/job_queue/test_ext_job.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/server/test_rpc_service.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/server/test_rpc_storage.py delete mode 100644 ThirdParty/Ert/devel/python/tests/ert/server/test_server.py create mode 100644 ThirdParty/Ert/devel/python/tests/ert/server/test_simulation_context.py delete mode 100644 ThirdParty/Ert/devel/python/tests/ert/server/test_socket.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/ertshell/test_ertshell_plot_settings.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/ertshell/test_ertshell_server.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/ertshell/test_shell_collection.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/ertshell/test_shell_function.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/ertshell/test_shell_property.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/plottery/CMakeLists.txt rename ThirdParty/Ert/devel/{main/Glade/test/ChangeLog => python/tests/gui/plottery/__init__.py} (100%) create mode 100644 ThirdParty/Ert/devel/python/tests/gui/plottery/test_plot_config_history.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/plottery/test_plot_limits.py create mode 100644 ThirdParty/Ert/devel/python/tests/gui/plottery/test_plot_style.py delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/enkf_sched_file.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/keep_runpath.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_context.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_group_list.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_list.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_path.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_search_path.html delete mode 100644 ThirdParty/Ert/devel/share/gui/help/config/keywords/report_well_list.html create mode 100644 ThirdParty/Ert/devel/share/gui/img/calendar.png create mode 100644 ThirdParty/Ert/devel/share/gui/img/page_copy.png create mode 100644 ThirdParty/Ert/devel/share/gui/img/redo.png create mode 100644 ThirdParty/Ert/devel/share/gui/img/remove_favorite.png create mode 100644 ThirdParty/Ert/devel/share/gui/img/undo.png create mode 100644 ThirdParty/Ert/devel/share/gui/img/update.png delete mode 100644 ThirdParty/Ert/devel/share/workflows/jobs/internal/config/ANALYSIS_ENKF_UPDATE delete mode 100644 ThirdParty/Ert/devel/share/workflows/jobs/internal/config/ANALYSIS_UPDATE delete mode 100644 ThirdParty/Ert/devel/share/workflows/jobs/internal/config/CREATE_REPORTS delete mode 100644 ThirdParty/Ert/devel/share/workflows/jobs/internal/config/RUN_ASSIMILATION create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/long_ascii.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/short_ascii.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/valid2_ascii.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/valid_ascii.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/valid_binary.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/geometry/surface/valid_small_ascii.irap create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/SEED create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/SNAKE_OIL_DIFF create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/SNAKE_OIL_NPV create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/SNAKE_OIL_SIMULATOR create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/snake_oil_diff.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/snake_oil_npv.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/jobs/snake_oil_simulator.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/observations/observations.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/observations/wpr_diff_obs.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/parameters/snake_oil_parameters.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/SNAKE_OIL_FIELD.SMSPEC create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/SNAKE_OIL_FIELD.UNSMRY create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/refcase_readme.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/seed.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/snake_oil_params.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/refcase/time_map.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/snake_oil.ert create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/current_case create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/0199/files/SNAKE_OIL_GPR_DIFF_active create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/0199/files/SNAKE_OIL_OPR_DIFF_active create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/0199/files/SNAKE_OIL_WPR_DIFF_active rename ThirdParty/Ert/devel/{main/Glade/test/NEWS => test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/ANALYZED.data_0} (100%) create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/PARAMETER.mnt rename ThirdParty/Ert/devel/{main/Glade/test/po/ChangeLog => test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/STATIC.data_0} (100%) create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_0/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_1/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_10/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_11/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_12/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_13/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_14/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_15/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_16/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_17/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_18/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_19/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_2/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_20/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_21/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_22/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_23/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_24/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_25/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_26/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_27/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_28/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_29/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_3/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_30/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_31/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_4/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_5/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_6/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_7/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_8/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Ensemble/mod_9/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Index/INDEX.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Index/INDEX.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/Index/INDEX.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/ert_fstab create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/files/case_config create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/files/custom_kw_config_set create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/files/state-map create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/files/summary-key-set create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_0/files/time-map create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_0/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_1/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_10/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_11/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_12/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_13/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_14/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_15/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_16/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_17/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_18/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_19/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_2/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_20/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_21/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_22/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_23/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_24/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_25/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_26/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_27/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_28/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_29/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_3/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_30/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_31/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_4/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_5/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_6/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_7/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_8/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/ANALYZED.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/ANALYZED.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/ANALYZED.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/FORECAST.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/FORECAST.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/FORECAST.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/PARAMETER.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/PARAMETER.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/PARAMETER.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/STATIC.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/STATIC.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Ensemble/mod_9/STATIC.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Index/INDEX.data_0 create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Index/INDEX.index create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/Index/INDEX.mnt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/ert_fstab create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/files/case_config create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/files/custom_kw_config_set create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/files/state-map create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/files/summary-key-set create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/storage/snake_oil/ensemble/default_1/files/time-map create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/templates/seed_template.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil/templates/snake_oil_template.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/SEED create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/SNAKE_OIL_DIFF create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/SNAKE_OIL_NPV create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/SNAKE_OIL_SIMULATOR create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/snake_oil_diff.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/snake_oil_npv.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/jobs/snake_oil_simulator.py create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/observations/observations.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/observations/wpr_diff_obs.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/parameters/snake_oil_parameters.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/SNAKE_OIL_FIELD.SMSPEC create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/SNAKE_OIL_FIELD.UNSMRY create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/refcase_readme.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/seed.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/snake_oil_params.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/refcase/time_map.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/snake_oil.ert create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/snake_oil_GEO_ID.ert create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/templates/seed_template.txt create mode 100644 ThirdParty/Ert/devel/test-data/local/snake_oil_no_data/templates/snake_oil_template.txt diff --git a/ThirdParty/Ert/devel/CMakeLists.txt b/ThirdParty/Ert/devel/CMakeLists.txt index b435f95919..cafe80afe2 100644 --- a/ThirdParty/Ert/devel/CMakeLists.txt +++ b/ThirdParty/Ert/devel/CMakeLists.txt @@ -7,8 +7,8 @@ endif() #----------------------------------------------------------------- -set( ERT_VERSION_MAJOR 1 ) -set( ERT_VERSION_MINOR 10 ) +set( ERT_VERSION_MAJOR 2 ) +set( ERT_VERSION_MINOR 0 ) set( ERT_VERSION_MICRO git ) # If the micro version is not integer, that should be interpreted as a @@ -18,7 +18,6 @@ set( ERT_VERSION_MICRO git ) option( BUILD_ERT "Build the full ERT application - Linux only" OFF) -option( BUILD_ENS_PLOT "Build small Eclipse plotting program - no" OFF) option( BUILD_TESTS "Should the tests be built" OFF) option( BUILD_APPLICATIONS "Should we build small utility applications" OFF) option( BUILD_ECL_SUMMARY "Build the commandline application ecl_summary" OFF) @@ -28,7 +27,7 @@ option( INSTALL_ERT "Should anything be installed when issuing make inst option( ERT_BUILD_GUI "Should the pyQt based gui be compiled and installed" OFF ) option( ERT_USE_OPENMP "Use OpenMP - currently only in EclGrid" OFF) option( ERT_DOC "Build ERT documantation" OFF) -option( ERT_BUILD_CXX "Build (some) CXX wrappers" ON) +option( ERT_BUILD_CXX "Build some CXX wrappers" ON) include( CheckFunctionExists ) include( CheckTypeSize ) @@ -37,15 +36,15 @@ ENABLE_TESTING() if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(ERT_LINUX TRUE ) add_definitions( -DERT_LINUX ) + set( ERT_BINARY_POSTFIX .${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} ) elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(ERT_LINUX TRUE ) set(ERT_MAC TRUE) add_definitions( -DERT_LINUX ) + set( ERT_BINARY_POSTFIX .${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} ) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Windows") set(ERT_WINDOWS TRUE) add_definitions( -DERT_WINDOWS ) -# This symbol must be defined to support large (> 2GB) files on windows. - add_definitions( -DWINDOWS_LFS ) endif() if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) @@ -65,9 +64,7 @@ endif() if (MSVC) add_definitions( "/W3 /D_CRT_SECURE_NO_WARNINGS /wd4996" ) - add_definitions( -DCOMPILER_MSVC ) -elseif (CMAKE_COMPILER_IS_GNUCC) - add_definitions( -DCOMPILER_GCC ) +else() set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" ) endif() @@ -84,28 +81,29 @@ if (ERT_USE_OPENMP) endif() -include(cmake/ert_find.cmake) -include(cmake/ert_check.cmake) -include(cmake/Modules/UseMultiArch.cmake) -include(cmake/ert_link.cmake) +#----------------------------------------------------------------- +# Checking based on compiling. Some of the code generates warnings, so we just cut down to bare-bone compiler flags. -#----------------------------------------------------------------- -# Should we build the block_fs filesystem; this is used extensively -# by the ert application; but if you are only building the support -# eclipse related support libraries you can safely leave this at the -# default OFF value. +set( CMAKE_C_FLAGS_main ${CMAKE_C_FLAGS} ) +set( CMAKE_CXX_FLAGS_main ${CMAKE_CXX_FLAGS} ) -if (BUILD_ERT) - set( ERT_BUILD_BLOCK_FS ON) -else() - if (WITH_PTHREAD) - set( ERT_BUILD_BLOCK_FS OFF CACHE BOOL "Build the block_fs filesystem. Used by ERT application") - else() - set( ERT_BUILD_BLOCK_FS OFF) - endif() +if (NOT ERT_WINDOWS) + set( CMAKE_C_FLAGS "-std=gnu99" ) + set( CMAKE_CXX_FLAGS "-std=c++0x") endif() +set( ERT_EXTERNAL_UTIL_LIBS "" ) +include(cmake/ert_build_check.cmake) +include(cmake/ert_api_check.cmake) +include(cmake/ert_lib_check.cmake) + +set( CMAKE_C_FLAGS ${CMAKE_C_FLAGS_main} ) +set( CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_main} ) + +include(cmake/Modules/UseMultiArch.cmake) +include(cmake/ert_link.cmake) + #----------------------------------------------------------------- set(INSTALL_GROUP "" CACHE STRING "Group to install as - blank to install as current group") @@ -129,7 +127,6 @@ if (MSVC) add_definitions( -D__func__="\\"????\\"") endif() - if (ERT_LINUX) set( NEED_LIBM TRUE ) set( LINK_STATIC FALSE ) @@ -139,10 +136,6 @@ else() set( LINK_STATIC TRUE ) endif() - -configure_file( ${PROJECT_SOURCE_DIR}/cmake/config/ert_build_config.h.in - ${PROJECT_BINARY_DIR}/ert_build_config.h ) - include_directories( ${PROJECT_SOURCE_DIR}/libert_util/include ) include_directories( ${PROJECT_BINARY_DIR}/libert_util/include ) if (MSVC) @@ -154,21 +147,15 @@ add_subdirectory( libert_util ) include_directories( ${PROJECT_SOURCE_DIR}/libgeometry/include ) add_subdirectory( libgeometry ) -if (BUILD_ERT OR BUILD_ENS_PLOT) - include_directories( ${PROJECT_SOURCE_DIR}/libplot/include ) - add_subdirectory( libplot ) -endif() - include_directories( ${PROJECT_SOURCE_DIR}/libecl/include ) add_subdirectory( libecl ) if (ERT_BUILD_CXX) - if (HAVE_CXX_SHARED_PTR) - include_directories( ${PROJECT_SOURCE_DIR}/libeclxx/include ) - add_subdirectory( libeclxx ) - else() - message(STATUS "Skipping CXX support - missing Cxx11 features.") - endif() + include_directories( ${PROJECT_SOURCE_DIR}/libert_utilxx/include ) + include_directories( ${PROJECT_SOURCE_DIR}/libeclxx/include ) + + add_subdirectory( libert_utilxx ) + add_subdirectory( libeclxx ) endif() include_directories( ${PROJECT_SOURCE_DIR}/libecl_well/include ) diff --git a/ThirdParty/Ert/devel/Doxyfile b/ThirdParty/Ert/devel/Doxyfile deleted file mode 100644 index 83eb8d1735..0000000000 --- a/ThirdParty/Ert/devel/Doxyfile +++ /dev/null @@ -1,1265 +0,0 @@ -###################################################################### -# -# Doxyfile for StatoilHydro enkf prototype. -# -# $Id$ -# -###################################################################### - -# Doxyfile 1.5.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = enkf - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = apps build doc ext old Scripts Testcases libenkf/src/sqlite3.h libenkf/src/sqlite3.c - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = pdflatex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen will always -# show the root nodes and its direct children regardless of this setting. - -DOT_GRAPH_MAX_NODES = 50 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/ThirdParty/Ert/devel/cmake/Tests/test_blas.c b/ThirdParty/Ert/devel/cmake/Tests/test_blas.c deleted file mode 100644 index 89ad8bc88e..0000000000 --- a/ThirdParty/Ert/devel/cmake/Tests/test_blas.c +++ /dev/null @@ -1,17 +0,0 @@ -#include - -void dgemv_(char * , int * , int * , double * , double * , int * , const double * , int * , double * , double * , int * ); - - -/* - This test is only to check if seperate linking with BLAS is - necessary; on the RedHat linux computers only explicit linking with - lapack is sufficient, whereas in other cases also blas must be - linked in specifically. -*/ - - -int main(int argc , char ** argv) { - /* Wildly invalid input - but the signature is satisfies so it should compile. */ - dgemv_( "A" , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL); -} diff --git a/ThirdParty/Ert/devel/cmake/Tests/test_isreg.c b/ThirdParty/Ert/devel/cmake/Tests/test_isreg.c deleted file mode 100644 index c04eb26800..0000000000 --- a/ThirdParty/Ert/devel/cmake/Tests/test_isreg.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include - -int main(int argc, char ** argv) { - struct stat stat_buffer; - return S_ISREG(stat_buffer.st_mode); -} diff --git a/ThirdParty/Ert/devel/cmake/Tests/test_mkdir.c b/ThirdParty/Ert/devel/cmake/Tests/test_mkdir.c deleted file mode 100644 index babbfe4b92..0000000000 --- a/ThirdParty/Ert/devel/cmake/Tests/test_mkdir.c +++ /dev/null @@ -1,7 +0,0 @@ -#include -#include -#include - -int main(int argc, char ** argv) { - mkdir("/tmp/path" , 0); -} diff --git a/ThirdParty/Ert/devel/cmake/Tests/test_mode_t.c b/ThirdParty/Ert/devel/cmake/Tests/test_mode_t.c new file mode 100644 index 0000000000..b502411b83 --- /dev/null +++ b/ThirdParty/Ert/devel/cmake/Tests/test_mode_t.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char ** argv) { + mode_t new_mode = S_IWGRP; + chmod( "/tmp" , new_mode ); +} diff --git a/ThirdParty/Ert/devel/cmake/config/ert_build_config.h.in b/ThirdParty/Ert/devel/cmake/config/ert_build_config.h.in deleted file mode 100644 index 88df980d5e..0000000000 --- a/ThirdParty/Ert/devel/cmake/config/ert_build_config.h.in +++ /dev/null @@ -1,18 +0,0 @@ -#cmakedefine HAVE_PTHREAD 1 -#cmakedefine HAVE_EXECINFO 1 -#cmakedefine HAVE_FORK 1 -#cmakedefine HAVE_ZLIB 1 -#cmakedefine HAVE_LSF 1 -#cmakedefine HAVE_REALPATH 1 -#cmakedefine HAVE_SYMLINK 1 -#cmakedefine HAVE_READLINKAT 1 -#cmakedefine HAVE_GETUID 1 -#cmakedefine HAVE_LOCALTIME_R 1 -#cmakedefine HAVE_LOCKF 1 -#cmakedefine HAVE_SETENV 1 -#cmakedefine HAVE_GLOB 1 -#cmakedefine MKDIR_POSIX 1 -#cmakedefine HAVE_FNMATCH 1 -#cmakedefine NEED_BLAS 1 -#cmakedefine HAVE_OPENMP 1 -#cmakedefine HAVE_FTRUNCATE 1 diff --git a/ThirdParty/Ert/devel/cmake/ert_api_check.cmake b/ThirdParty/Ert/devel/cmake/ert_api_check.cmake new file mode 100644 index 0000000000..972ae76eb5 --- /dev/null +++ b/ThirdParty/Ert/devel/cmake/ert_api_check.cmake @@ -0,0 +1,74 @@ +# This file contains feature checks which affect the API of the final +# product; i.e. if the test for zlib fails the function +# buffer_fwrite_compressed() will not be available in the final +# installation. +# +# The results of these tests will be assembled in the +# ert/util/ert_api_config.h header; all the symbols in that header will +# have a ERT_ prefix. The generated header is part of the api and can be +# included by other header files in the ert source. + +find_library( BLAS_LIBRARY NAMES blas) +if (BLAS_LIBRARY) + set(ERT_HAVE_BLAS ON) +endif() + +find_library( LAPACK_LIBRARY NAMES lapack) +if (LAPACK_LIBRARY) + set(ERT_HAVE_LAPACK ON) +endif() + +#----------------------------------------------------------------- + +find_library( ZLIB_LIBRARY NAMES z ) +find_path( ZLIB_HEADER zlib.h /usr/include ) +if (ZLIB_LIBRARY AND ZLIB_HEADER) + set( ERT_HAVE_ZLIB ON ) +else() + message("ZLib not found - zlib support will not be included." ) +endif() + +#----------------------------------------------------------------- + +try_compile( ERT_HAVE_ISFINITE ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_isfinite.c ) +find_path( ERT_HAVE_GETOPT getopt.h /usr/include ) +find_path( ERT_HAVE_UNISTD unistd.h /usr/include ) + +check_function_exists( posix_spawn ERT_HAVE_SPAWN ) +check_function_exists( opendir ERT_HAVE_OPENDIR ) +check_function_exists( symlink ERT_HAVE_SYMLINK ) +check_function_exists( readlinkat ERT_HAVE_READLINKAT ) +check_function_exists( glob ERT_HAVE_GLOB ) +check_function_exists( getuid ERT_HAVE_GETUID ) +check_function_exists( regexec ERT_HAVE_REGEXP ) +check_function_exists( lockf ERT_HAVE_LOCKF ) + + +check_type_size(time_t SIZE_OF_TIME_T) +if (${SIZE_OF_TIME_T} EQUAL 8) + try_run( RUN_RESULT COMPILE_RESULT ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_mktime_before1970.c ) + if (${COMPILE_RESULT}) + if (${RUN_RESULT} EQUAL 0) + set( ERT_TIME_T_64BIT_ACCEPT_PRE1970 ON ) + endif() + endif() +endif() + + +if (ERT_WINDOWS) + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + set( ERT_WINDOWS_LFS ON ) + endif() +endif() + + +if (HAVE_PTHREAD) + set( ERT_HAVE_THREAD_POOL ON ) +endif() + + +find_program(PING_PATH NAMES ping) +if (PING_PATH) + set( ERT_HAVE_PING ON ) + add_definitions( -DPING_CMD="${PING_PATH}" ) +endif() \ No newline at end of file diff --git a/ThirdParty/Ert/devel/cmake/ert_build_check.cmake b/ThirdParty/Ert/devel/cmake/ert_build_check.cmake new file mode 100644 index 0000000000..b9a27620cb --- /dev/null +++ b/ThirdParty/Ert/devel/cmake/ert_build_check.cmake @@ -0,0 +1,75 @@ +# This file contains checks which are used to implement portable +# utility functions. The results of these check are assembled in the +# generated header "ert/util/build_config.h" - that header is NOT part +# of the public api and it should only be included from source files +# as part of the compilation. +# +# Check which affect the final api are implemented in the +# ert_api_check.cmake file. + +find_library( PTHREAD_LIBRARY NAMES pthread ) +if (PTHREAD_LIBRARY) + set( HAVE_PTHREAD ON ) + set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} pthread) +endif() + +if (UNIX) + set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m ) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} m ) +endif(UNIX) + + +check_function_exists( localtime_r HAVE_LOCALTIME_R ) +check_function_exists( realpath HAVE_REALPATH ) +check_function_exists( usleep HAVE__USLEEP ) +check_function_exists( fnmatch HAVE_FNMATCH ) +check_function_exists( ftruncate HAVE_FTRUNCATE ) +check_function_exists( round HAVE_ROUND ) +check_function_exists( GetTempPath HAVE_WINDOWS_GET_TEMP_PATH ) +check_function_exists( fork HAVE_FORK ) +check_function_exists( getpwuid HAVE_GETPWUID ) +check_function_exists( fsync HAVE_FSYNC ) +check_function_exists( setenv HAVE_POSIX_SETENV ) +check_function_exists( chmod HAVE_CHMOD ) +check_function_exists( pthread_timedjoin_np HAVE_TIMEDJOIN) +check_function_exists( pthread_yield_np HAVE_YIELD_NP) +check_function_exists( pthread_yield HAVE_YIELD) +check_function_exists( fseeko HAVE_FSEEKO ) + + +check_function_exists( _mkdir HAVE_WINDOWS_MKDIR) +if (NOT HAVE_WINDOWS_MKDIR) + check_function_exists( mkdir HAVE_POSIX_MKDIR) +endif() + + +check_function_exists( _chdir HAVE_WINDOWS_CHDIR) +if (NOT HAVE_WINDOWS_CHDIR) + check_function_exists( chdir HAVE_POSIX_CHDIR) +endif() + +check_function_exists( _getcwd HAVE_WINDOWS_GETCWD) +if (NOT HAVE_WINDOWS_GETCWD) + check_function_exists( getcwd HAVE_POSIX_GETCWD) +endif() + + +include(CheckSymbolExists) +check_symbol_exists(_tzname time.h HAVE_WINDOWS_TZNAME) +check_symbol_exists( tzname time.h HAVE_TZNAME) + +find_path( HAVE_EXECINFO execinfo.h /usr/include ) + +try_compile( HAVE_VA_COPY ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_va_copy.c ) +try_compile( HAVE_SIGBUS ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_have_sigbus.c ) +try_compile( HAVE_PID_T ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_pid_t.c ) +try_compile( HAVE_MODE_T ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_mode_t.c ) + + +set( BUILD_CXX ON ) +try_compile( HAVE_CXX_SHARED_PTR ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_shared_ptr.cpp ) +if (NOT HAVE_CXX_SHARED_PTR) + set( BUILD_CXX OFF ) +endif() + + diff --git a/ThirdParty/Ert/devel/cmake/ert_check.cmake b/ThirdParty/Ert/devel/cmake/ert_check.cmake deleted file mode 100644 index 24c03a1543..0000000000 --- a/ThirdParty/Ert/devel/cmake/ert_check.cmake +++ /dev/null @@ -1,198 +0,0 @@ -include(CheckSymbolExists) - -check_function_exists( fseeko HAVE_FSEEKO ) -if (HAVE_HFSEEKO) - add_definitions( -DHAVE_FSEEKO ) -endif() - -check_function_exists( regexec HAVE_REGEXP ) -if (HAVE_REGEXP) - add_definitions( -DHAVE_REGEXP ) -endif() - -check_function_exists( realpath HAVE_REALPATH ) -if (HAVE_REALPATH) - add_definitions( -DHAVE_REALPATH ) -endif() - -check_function_exists( chmod HAVE_CHMOD ) -check_type_size( mode_t SIZE_MODE_T ) -if (HAVE_CHMOD AND HAVE_SIZE_MODE_T) - add_definitions( -DHAVE_CHMOD_AND_MODE_T ) -endif() - -check_function_exists( fork HAVE_FORK ) -if (HAVE_FORK) - add_definitions( -DHAVE_FORK ) -endif() - -check_function_exists( round HAVE_ROUND ) -if (HAVE_ROUND) - add_definitions( -DHAVE_ROUND ) -endif() - -check_function_exists( ftruncate HAVE_FTRUNCATE ) -if (HAVE_FTRUNCATE) - add_definitions( -DHAVE_FTRUNCATE ) -endif() - -check_function_exists( readlinkat HAVE_READLINKAT ) -if (HAVE_READLINKAT) - add_definitions( -DHAVE_READLINKAT ) -endif() - -check_function_exists( symlink HAVE_SYMLINK ) -if (HAVE_SYMLINK) - add_definitions( -DHAVE_SYMLINK ) -endif() - -check_function_exists( getuid HAVE_GETUID ) -if (HAVE_GETUID) - add_definitions( -DHAVE_GETUID ) -endif() - -check_function_exists( _chdir HAVE_WINDOWS_CHDIR) -if (HAVE_WINDOWS_CHDIR) - add_definitions( -DHAVE_WINDOWS_CHDIR) -else() - check_function_exists( chdir HAVE_CHDIR) - if (HAVE_CHDIR) - add_definitions( -DHAVE_CHDIR) - else() - message(FATAL_ERROR "Could not find chdir() / _chdir() functions") - endif() -endif() - -check_function_exists( localtime_r HAVE_LOCALTIME_R ) -if (HAVE_LOCALTIME_R) - add_definitions( -DHAVE_LOCALTIME_R ) -endif() - -check_function_exists( lockf HAVE_LOCKF ) -if (HAVE_LOCKF) - add_definitions( -DHAVE_LOCKF ) -endif() - - -check_function_exists( glob HAVE_GLOB ) -if (HAVE_GLOB) - add_definitions( -DHAVE_GLOB ) -endif() - -check_function_exists( fnmatch HAVE_FNMATCH ) -if (HAVE_FNMATCH) - add_definitions( -DHAVE_FNMATCH ) -endif() - -check_function_exists( fsync HAVE_FSYNC ) -if (HAVE_FSYNC) - add_definitions( -DHAVE_FSYNC ) -endif() - -check_function_exists( setenv HAVE_SETENV ) -if (HAVE_SETENV) - add_definitions( -DPOSIX_SETENV ) -endif() - -check_function_exists( opendir HAVE_OPENDIR ) -if (HAVE_OPENDIR) - add_definitions( -DHAVE_OPENDIR ) -endif() - -check_function_exists( getpwuid HAVE_GETPWUID ) -if (HAVE_GETPWUID) - add_definitions( -DHAVE_GETPWUID ) -endif() - -# The usleep() check uses the symbol HAVE__USLEEP with double -# underscore to avoid conflict with plplot which defines the -# HAVE_USLEEP symbol. -check_function_exists( usleep HAVE__USLEEP ) -if (HAVE__USLEEP) - add_definitions( -DHAVE__USLEEP ) -endif() - -check_symbol_exists(_tzname time.h HAVE_WINDOWS_TZNAME) -if (HAVE_WINDOWS_TZNAME) - add_definitions(-DHAVE_WINDOWS_TZNAME) -else() - check_symbol_exists(tzname time.h HAVE_TZNAME) - if (HAVE_TZNAME) - add_definitions(-DHAVE_TZNAME) - else() - message(FATAL_ERROR "Could not find tzname global variable") - endif() -endif() - -check_function_exists(pthread_yield_np HAVE_YIELD_NP) -if (HAVE_YIELD_NP) - add_definitions(-DHAVE_YIELD_NP) -endif() - -check_function_exists(pthread_yield HAVE_YIELD) -if (HAVE_YIELD) - add_definitions(-DHAVE_YIELD) -endif() - - -check_function_exists(pthread_timedjoin_np HAVE_TIMEDJOIN) -if (HAVE_TIMEDJOIN) - add_definitions(-DHAVE_TIMEDJOIN) -endif() - -# Checking based on compiling. Some of the code generates warnings, so we just cut down to bare-bone compiler flags. - -set( CMAKE_C_FLAGS_main ${CMAKE_C_FLAGS} ) -set( CMAKE_CXX_FLAGS_main ${CMAKE_CXX_FLAGS} ) - -if (NOT ERT_WINDOWS) - set( CMAKE_C_FLAGS "-std=gnu99" ) - set( CMAKE_CXX_FLAGS "-std=c++0x") -endif() - -try_compile( HAVE_ISFINITE ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_isfinite.c ) -if (HAVE_ISFINITE) - add_definitions( -DHAVE_ISFINITE ) -endif() - -try_compile( MKDIR_POSIX ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_mkdir.c ) -if (MKDIR_POSIX) - add_definitions( -DMKDIR_POSIX ) -endif() - -try_compile( HAVE_PID_T ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_pid_t.c ) -if (HAVE_PID_T) - add_definitions( -DHAVE_PID_T ) -endif() - -try_compile( HAVE_VA_COPY ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_va_copy.c ) -if (HAVE_VA_COPY) - add_definitions( -DHAVE_VA_COPY ) -endif() - - -try_compile( ISREG_POSIX ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_isreg.c ) -if (ISREG_POSIX) - add_definitions( -DHAVE_ISREG ) -endif() - -try_compile( HAVE_SIGBUS ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_have_sigbus.c ) -if (HAVE_SIGBUS) - add_definitions( -DHAVE_SIGBUS ) -endif() - -try_compile( HAVE_CXX_SHARED_PTR ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_shared_ptr.cpp ) - -check_type_size(time_t SIZE_OF_TIME_T) -if (${SIZE_OF_TIME_T} EQUAL 8) - try_run( RUN_RESULT COMPILE_RESULT ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_mktime_before1970.c ) - if (${COMPILE_RESULT}) - if (${RUN_RESULT} EQUAL 0) - add_definitions( -DTIME_T_64BIT_ACCEPT_PRE1970 ) - endif() - endif() -endif() - -set( CMAKE_C_FLAGS ${CMAKE_C_FLAGS_main} ) -set( CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_main} ) - diff --git a/ThirdParty/Ert/devel/cmake/ert_find.cmake b/ThirdParty/Ert/devel/cmake/ert_find.cmake deleted file mode 100644 index c4d448d6df..0000000000 --- a/ThirdParty/Ert/devel/cmake/ert_find.cmake +++ /dev/null @@ -1,92 +0,0 @@ -set(NEED_LIBDL OFF) -find_library( DL_LIBRARY NAMES dl ) -find_path( DLFUNC_HEADER dlfcn.h ) -if (DL_LIBRARY AND DLFUNC_HEADER) - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} dl) - - check_function_exists( dladdr HAVE_DLADDR ) - if (HAVE_DLADDR) - add_definitions( -DHAVE_DLADDR ) - set(NEED_LIBDL ON) - endif() -endif() -#----------------------------------------------------------------- -find_library( ZLIB_LIBRARY NAMES z ) -find_path( ZLIB_HEADER zlib.h /usr/include ) - -if (ZLIB_LIBRARY AND ZLIB_HEADER) - option(WITH_ZLIB "Include support for zlib functions compress()/uncompress()" ON) - if (WITH_ZLIB) - add_definitions( -DWITH_ZLIB ) - endif() -else() - set( WITH_ZLIB FALSE ) - message("ZLib not found - zlib support will not be included." ) -endif() -#----------------------------------------------------------------- -find_library( PTHREAD_LIBRARY NAMES pthread ) -if (PTHREAD_LIBRARY) - option( WITH_PTHREAD "Include support for pthreads" ON ) - if (WITH_PTHREAD) - add_definitions( -DWITH_PTHREAD ) - endif() - set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} pthread) -else() - set( WITH_PTHREAD FALSE ) - message("pthread library not found - pthread support will not be included") -endif() -#----------------------------------------------------------------- -find_library( LAPACK_LIBRARY NAMES lapack) -if (LAPACK_LIBRARY) - set(CMAKE_REQUIRED_LIBS LAPACK_LIBRARY) - try_compile( BLAS0 ${CMAKE_BINARY_DIR} ${PROJECT_SOURCE_DIR}/cmake/Tests/test_blas.c ) - if (BLAS0) - set(NEED_BLAS OFF) - else() - set(NEED_BLAS ON) - find_library( BLAS_LIBRARY NAMES blas) - endif() - option(WITH_LAPACK "Build LAPACK enabled code" ON) - if (WITH_LAPACK) - add_definitions( -DWITH_LAPACK ) - endif() -else() - set( WITH_LAPACK OFF) - message("LAPACK library not found - LAPACK support will not be included") -endif() -#----------------------------------------------------------------- -find_program(LATEX_PATH NAMES pdflatex) -if (LATEX_PATH) - option( WITH_LATEX "Build small class for compiling LaTeX files" ON) - if (WITH_LATEX) - set( WITH_LATEX ON) - add_definitions( -DWITH_LATEX ) - endif() -else() - set( WITH_LATEX OFF ) -endif() -#-----------------------------------------------------------------f -find_program(PING_PATH NAMES ping) -#----------------------------------------------------------------- -find_path( EXECINFO_HEADER execinfo.h /usr/include ) -if (EXECINFO_HEADER) - add_definitions( -DHAVE_EXECINFO ) -endif() -#----------------------------------------------------------------- -find_path( GETOPT_HEADER getopt.h /usr/include ) -if (GETOPT_HEADER) - add_definitions( -DHAVE_GETOPT ) -endif() -#----------------------------------------------------------------- -find_path( UNISTD_HEADER unistd.h /usr/include ) -if (UNISTD_HEADER) - add_definitions( -DHAVE_UNISTD ) -endif() - -if (ERT_WINDOWS) - find_library( SHLWAPI_LIBRARY NAMES Shlwapi ) -endif() - -if (UNIX) - set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m) -endif(UNIX) diff --git a/ThirdParty/Ert/devel/cmake/ert_lib_check.cmake b/ThirdParty/Ert/devel/cmake/ert_lib_check.cmake new file mode 100644 index 0000000000..2aa4c851f7 --- /dev/null +++ b/ThirdParty/Ert/devel/cmake/ert_lib_check.cmake @@ -0,0 +1,30 @@ +# This file contains various checks which will append to the list +# $ERT_EXTERNAL_UTIL_LIBS which should contain all the external library +# dependencies. Observe that all library dependencies go transitively +# through the ert_util library. + +if (ERT_HAVE_LAPACK) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} ${LAPACK_LIBRARY} ${BLAS_LIBRARY}) + set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LAPACK_LIBRARY} ${BLAS_LIBRARY}) +endif() + + +if (ERT_WINDOWS) + find_library( SHLWAPI_LIBRARY NAMES Shlwapi ) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} Shlwapi ) +endif() + + +if (ERT_HAVE_ZLIB) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} ${ZLIB_LIBRARY} ) +endif() + +if (HAVE_PTHREAD) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} ${PTHREAD_LIBRARY} ) +endif() + +find_library( DL_LIBRARY NAMES dl ) +find_path( DLFUNC_HEADER dlfcn.h ) +if (DL_LIBRARY AND DLFUNC_HEADER) + set( ERT_EXTERNAL_UTIL_LIBS ${ERT_EXTERNAL_UTIL_LIBS} ${DL_LIBRARY} ) +endif() \ No newline at end of file diff --git a/ThirdParty/Ert/devel/cmake/python.cmake2 b/ThirdParty/Ert/devel/cmake/python.cmake2 index 414b9bbd9d..740fe86618 100644 --- a/ThirdParty/Ert/devel/cmake/python.cmake2 +++ b/ThirdParty/Ert/devel/cmake/python.cmake2 @@ -6,8 +6,18 @@ function(add_python_package target package_path source_files install_package) set(build_files "") foreach (file ${source_files} ) - set( source_file ${CMAKE_CURRENT_SOURCE_DIR}/${file} ) - set( build_file ${PROJECT_BINARY_DIR}/${package_path}/${file} ) + string(SUBSTRING ${file} 0 1 first_char) + string(SUBSTRING ${file} 1 1 second_char) + if (first_char STREQUAL "/" OR second_char STREQUAL ":") + set( source_file ${file} ) + set( build_file ${file} ) + file(RELATIVE_PATH file ${CMAKE_CURRENT_BINARY_DIR} ${file}) + set(dependent_target) + else() + set( source_file ${CMAKE_CURRENT_SOURCE_DIR}/${file} ) + set( build_file ${PROJECT_BINARY_DIR}/${package_path}/${file} ) + set(dependent_target DEPENDS ${source_file}) + endif() if("$ENV{DESTDIR}" STREQUAL "") set( install_file ${CMAKE_INSTALL_PREFIX}/${package_path}/${file} ) else() @@ -18,7 +28,7 @@ function(add_python_package target package_path source_files install_package) OUTPUT ${build_file} COMMAND ${PYTHON_EXECUTABLE} ARGS ${PROJECT_SOURCE_DIR}/cmake/cmake_pyc2 ${source_file} ${build_file} - DEPENDS ${source_file} ) + ${dependent_target}) list(APPEND build_files ${build_file} ) @@ -30,4 +40,4 @@ function(add_python_package target package_path source_files install_package) endforeach() add_custom_target( ${target} ALL DEPENDS ${build_files}) -endfunction() \ No newline at end of file +endfunction() diff --git a/ThirdParty/Ert/devel/debian/python-ert.ecl.install b/ThirdParty/Ert/devel/debian/python-ert.ecl.install new file mode 100644 index 0000000000..b6b27fc029 --- /dev/null +++ b/ThirdParty/Ert/devel/debian/python-ert.ecl.install @@ -0,0 +1 @@ +usr/lib/python2.7/* diff --git a/ThirdParty/Ert/devel/docs/CMakeLists.txt b/ThirdParty/Ert/devel/docs/CMakeLists.txt index 109259a876..6b5e7ac4ea 100644 --- a/ThirdParty/Ert/devel/docs/CMakeLists.txt +++ b/ThirdParty/Ert/devel/docs/CMakeLists.txt @@ -17,7 +17,7 @@ configure_file(index.rst.in ${PROJECT_BINARY_DIR}/tmp_doc/index.rst) configure_file(conf.py.in ${PROJECT_BINARY_DIR}/conf.py) add_custom_target(doc_out ALL - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/run-sphinx.py ${PROJECT_BINARY_DIR}/conf.py ${PROJECT_BINARY_DIR}/python ${PROJECT_BINARY_DIR}/tmp_doc + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/run-sphinx.py ${PROJECT_BINARY_DIR}/conf.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} ${PROJECT_BINARY_DIR}/tmp_doc DEPENDS enkf ) INSTALL( DIRECTORY ${PROJECT_BINARY_DIR}/tmp_doc/_build/ DESTINATION ${CMAKE_INSTALL_PREFIX}/documentation ) diff --git a/ThirdParty/Ert/devel/docs/code/python/examples/eclipse/index.rst b/ThirdParty/Ert/devel/docs/code/python/examples/eclipse/index.rst new file mode 100644 index 0000000000..7f52759f77 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/examples/eclipse/index.rst @@ -0,0 +1,2 @@ +Working with Eclipse files +========================== diff --git a/ThirdParty/Ert/devel/docs/code/python/examples/ert/index.rst b/ThirdParty/Ert/devel/docs/code/python/examples/ert/index.rst new file mode 100644 index 0000000000..f7a37bfe3d --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/examples/ert/index.rst @@ -0,0 +1,3 @@ +Working with full ert cases +=========================== + diff --git a/ThirdParty/Ert/devel/docs/code/python/examples/geo/index.rst b/ThirdParty/Ert/devel/docs/code/python/examples/geo/index.rst new file mode 100644 index 0000000000..4ef7710afe --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/examples/geo/index.rst @@ -0,0 +1,2 @@ +Working with geometric objects +============================== diff --git a/ThirdParty/Ert/devel/docs/code/python/examples/index.rst b/ThirdParty/Ert/devel/docs/code/python/examples/index.rst new file mode 100644 index 0000000000..d5f7978c2f --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/examples/index.rst @@ -0,0 +1,10 @@ +.. _example: + +Examples +======== +.. toctree:: + :maxdepth: 1 + + Eclipse results + Geometric objects + Full ert cases diff --git a/ThirdParty/Ert/devel/docs/code/python/index.rst b/ThirdParty/Ert/devel/docs/code/python/index.rst index 786c08ae7e..80e9b8d0f0 100644 --- a/ThirdParty/Ert/devel/docs/code/python/index.rst +++ b/ThirdParty/Ert/devel/docs/code/python/index.rst @@ -1,10 +1,13 @@ +.. _python_documentation: + Python documentation ==================== .. toctree:: - :maxdepth: 1 + :maxdepth: 2 introduction/index - eclipse/index - ../../API/python/ert - ../../API/python/ert_gui + Overview of ert Python + examples/index + ert package - autogenerated API documentation <../../API/python/ert> + ert_gui package - autogenerated API documentation <../../API/python/ert_gui> diff --git a/ThirdParty/Ert/devel/docs/code/python/introduction/index.rst b/ThirdParty/Ert/devel/docs/code/python/introduction/index.rst index 06307a123e..7dbeb721f1 100644 --- a/ThirdParty/Ert/devel/docs/code/python/introduction/index.rst +++ b/ThirdParty/Ert/devel/docs/code/python/introduction/index.rst @@ -1,4 +1,703 @@ Simple introduction to Python ============================= -An introduction to Python +.. contents:: + :depth: 2 + :local: + +Python is a object oriented scripting language. The language is used +in a wide range of a applications. Beeing a interpreted scripting +language it is not blazingly fast in itself, but it is quite easy to +extend with compiled code written in e.g. C, that is how we are making +large parts of the ERT functionality available in Python. The Python +language has good documentation, including tutorials on +http://www.python.org, however some language concepts which will be +much used in the documentation will be briefly explained here. The +rest of this section will focus on the following little example which +contains the class defintion of a circle object. + +.. code-block:: python + :linenos: + + import math + + class Circle(object): + + def __init__( self , x0 , y0 , r): + "Create a new circle with radius r centered at (x0,y0)." + self.x0 = x0 + self.y0 = y0 + self.r = r + + def move(self, new_x , new_y): + "Move the position of the circle to (new_x,new_y)." + self.x0 = new_x + self.y0 = new_y + + + # Observe that here we have three different ways to get the area + # of the circle: The normal method getArea( ), the class method + # calculateArea( ) and finally the area property. Having three + # different methods in this way should *not* be interpreted as a + # best practice in any way - it is mainly to illustrate the + # concepts of class methods and properties. + + def getArea( self ): + "Calculate the area of the circle." + return math.pi*self.r * self.r + + def calculateArea(cls , radius): + "Calculate the area of *a* circle with radius 'radius'." + return math.pi * radius * radius + + @property + def area( self ): + "Calculate the area of the circle." + return math.pi*self.r * self.r + + def distance( self , other ): + "Calculate the distance between two circles." + if isinstance( other , Circle ): + dx = self.x0 - other.x0 + dy = self.y0 - other.y0 + return math.sqrt( dx*dx + dy*dy) + else: + raise TypeError("Second argument must be Circle instance.") + + + + + # Create two circles + circle1 = Circle( 2,2,3 ) + circle2 = Circle( 5,5,7 ) + + # Calculate the area of the circles, and the distance between them + print "Area of circle1:%10.3f" % circle1.getArea( ) + print "Area of circle2:%10.3f" % circle2.getArea( ) + print "Distance between circles: %10.3f" % circle1.distance( circle2 ) + + # Move one of the circles and calculate new distance + circle1.move( 3,3 ) + print "Distance between circles: %10.3f" % circle1.distance( circle2 ) + + +Notation +-------- + +Whitespace matters +.................. + +In Python whitespace, or more precisely indentation level, matters - +the logical codeblocks are defined by the indentation level. Observe +for instance the if test on line 39. If the if test evaluates to True +the codeblock in lines 40-42 is executed, otherwise the statement on +line 44 is executed. Aport from the indentation level additional +whitespace in the code, including blank lines, is ignored. + + +Comments +........ + +Comments in Python are prefixed with :code:`#`; everything from a +:code:`#` to the end of the current line is disregarded as a comment: + +.. code:: python + + # The following function will add to numbers and return the summary + def add_numbers(a,b): + return a+b + + +Documentation strings +..................... + + +It is possible to add documentation strings right after the +:code:`def` statement, in the example above we have documentation +strings on lines 6,12,25,29,34 and 38. These documentation strings +will be picked up by the Python documentation tool :code:`pydoc`. In +the example below we use :code:`pydoc` to print the documentation of +the area method: + +.. code:: bash + + bash% pydoc XXX.Circle.getArea + Calculate the area of the circle. + +Where XXX should be the name of the module containing the Circle +class. Most of the modules and classes in the ert package have +reasonably good documentation strings. + + + +Functions +--------- + +Functions are declared with the keyword :code:`def` and the name of +the function. Functions take ordinary named arguments, but can in +addition have optional arguments. If an argument is optional the +default value must be specified in the statement defining the +function. In the function below the a gross price is calculated based +on a net price and a vat rate, the vat rate is given as an optional +variable: + +.. code:: python + + def gross_price( net_price , vat_rate = 0.25): + return net_price * (1 + vat_rate) + + total = gross_price( 100 ) + total_taxfree = gross_price( 100 , vat_rate = 0.0 ) + +Optional arguments with suitable defaults is used quite a lot in the +ert. The ERT python code is mainly based on classes, it is not +required to use classes in the the code you write yourself - but ample +use of functions is highly recommended to aid readiblity and +maintainence. + + + +Object oriented programming - classes +------------------------------------- + +Python is an *object oriented* language. An object is a composite +variable which consists of normal variables (often called members) and +functions to operate on the members (often called) methods. When +programming we *implement a Class*, and the class can viewed as a +recipee for how to create an object. The process of creating an object +is often called instantiation, and an object of a particular type is +called an instance. The normal way to create a new object is just to +"call" the class name with the required arguments, i.e. + +.. code:: python + + circle = Circle(0,0,5) + +Will create a new :code:`Circle` object located in position (0,0) with +radius 5. + +Members +....... + +In Python the class members are not declared anywhere, but +automagically comes into life when assigned to. In the +:code:`__init__()` method on line 5 we create the member variables +:code:`x0,y0` and :code:`r` by assignment. The Python language does +not have any built in notion of public and private, all members and +methods are public by construction, and can be accessed outside the +class, if we have a :code:`Circle` instance we can both read and the +radius attribute directly: + +.. code:: python + + circle = Circle(0,0,5) + print("The radius of the circle is %g " % circle.r) + + # Enlarge the circle + circle.r *= 2.0 + print("The radius of the circle is %g " % circle.r) + +Directly accessing a member variable in this form is considered bad +form - see the discussion of the :code:`move()` implementation +further down for a better alternative. + +Methods +....... + +Methods are functions defined as part of a class definition; the +methods represent the "handles" to the outside world - which can be +used to query and manipulate the state of the object. The method +:code:`move()` in the :code:`Circle` class is used to move the circle +to a new location: + +.. code:: python + + circle = Circle(0,0,5) + circle.move(2 , 2) + + # Since the members are not protected, you can move the circle + # without going through the move() method: + + circle.x0 = 2 + circle.y0 = 2 + + # Directly assigning to the member variable in this way is + # considered *very bad form*. + +In addition to the :code:`move` method The :code:`Circle` class has +the ordinary methods :code:`distance()` and :code:`getArea()`. The +:code:`distance()` and :code:`getArea()` methods perform a +calculation, but do not change the state of the object. The +:code:`__init__()` method is quite ordinary, but it is invoked +automatically by the Python runtime system when a new object is +instantiated, and normally not invoked explicitly. + +In the implementation all normal methods should have the *class +instance* as the first argument, the variable name *self* is usually +used for this class instance variable. + + + +Properties +.......... + +Properties are methods without arguments which can be called without +the empty :code:`( )`. Consider the :code:`area` property in +:code:`Circle` example: + +.. code:: python + + circle = Circle( 10 ) + + print("method call: The area of the circle is: %g" % circle.getArea( )) + print("property : The area of the circle is: %g" % circle.area) + +The example in :code:`Circle` class is a *read/get* property - it is +also possible to implement *write/set* properties. In the :code:`ert` +Python package we have deprecated the use of properties in the favor +of traditional methods with :code:`( )`- but there are still some +properties, in particular in the :code:`ert.ecl` package. + + +Classmethods +............ + +A normal method requires that you first create an instance of an +object, and then afterwards you can can use the methods of the +object. For instance you must have a :code:`Circle` instance available +before you can call the :code:`getArea()` method. However there are +situations where you would like to make functionality available with a +particular class, without really requring a class instance - then a +*class method* can be used. Se for instance the :code:`calculateArea` +method of :code:`Circle` class. Since a class method is implemented +without a class instance, the implementation *can not make use of +members in the class*. The class methods are called with the class +name as prefix, or *if* you have a circle instance you can use that +prefix: + + +.. code:: python + + # Call the calculateArea class method: + print("Area of circle with radius:10 m = %g m*m " % Circle.calculateArea( 10 )) + + + # If we have class instance we can use that to call a class method; since + # the class method does not have access to the members of the class we must + # pass the radius explicitly: + c = Circle( 10 ) + print("Area of circle : %g" % c.calculateArea( c.r )) + + +Special functions / operators +............................. + +When implementing a Python class you can implement various *special +methods* which will integrate your class into Python language, the +special methods all have names like :code:`__xxx__`. Let us assume we +are creating a class for a mathematical vector, for a vector you +typically want to query how long it is, set and get individual +elements and you might be interested in adding two vectors: + +.. code-block:: python + :linenos: + + class Vector(object): + + def __init__(self, size, initial_value = 0): + self.data = [ initial_value ] * size + + + def __len__(self): + return len(self.data) + + + def __iadd__(self , other): + if isinstance(other , Vector): + if len(self) == len(other): + for index,value in enumerate(other): + self[index] += value + else: + raise ValueError("The two vectors must be equally long") + else: + raise TypeError("__iadd__() function requires two vectors") + + return self + + + def __add__(self , other): + copy = Vector( len(self) ) + for index,value in enumerate(self): + copy[index] = value + copy += other + return copy + + + def __getitem__(self, index): + if 0 <= index < len(self): + return self.data[index] + else: + raise IndexError("Invalid index:%d" % index) + + + def __setitem__(self, index,value): + if 0 <= index < len(self): + self.data[index] = value + else: + raise IndexError("Invalid index:%d" % index) + + +The important point with this example is the methods :code:`__len__`, +:code:`__getitem__` and :code:`__setitem__`. The :code:`__len__` +method is bound to the :code:`len( )` operator and :code:`__getitem__` +and :code:`__setitem__` are bound to the :code:`[]` operator [1]_: + + +.. code:: python + + # Create a new vector of length 10; initialized to zero. + v = Vector(10) + + # Check the length + print("The length of the vector is:%d" % len(v)) + + # Set the elements to 0,1,2,3,... + for i in range(len(v)): + v[i] = i + + # Check that the elements are correctly set + for i in range(len(v)): + if not v[i] == i: + raise Exception("operator[] not corectly implemented") + + # When getitem is implemented we can loop over the whole vector + sum = 0 + for elm in v: + sum += elm + + # Create a new vector + v2 = Vector(10) + for i in range(len(v2)): + v2[i] = i + + # This will call the __add__() method + v3 = v + v2 + + # This will call the __iadd__() method + v3 += v2 + + +For this example we have only implemented the :code:`__add__` and +:code:`__iadd__` methods to add to vectors, in addition there are +similar functions :code:`__sub__`, :code:`__mul__` and :code:`__div__` +for subtraction, multiplaction and divition. Observe the difference +between the :code:`__add__` and :code:`__iadd__` - the first creates a +new copy whereas the second updates a vector *in place*. + +For the ert classes we have tried to implement the special methods +where it makes sense, depending on the class that typically includes +:code:`__len__`, :code:`__getitem__`, :code:`__setitem__`, +:code:`__contains__` and the arithmetic operators. + + + +Error handling - exceptipons +----------------------------- + +Python uses a mechanism called *exceptions* to signal error +conditions. When an exception is raised the "current location" in the +program will return back (stack unwind) all the way back to a +statement handling the exception, or the program will exit if the +exception is not handled. The advantage of exceptions as a way to +handle errors is that it is not necessary to clutter the code with +error handling conditions "all over the place". Exceptions is the way +to handle error conditions in many programming languages. + +.. code-block:: python + :linenos: + + #!/usr/bin/env python + import math + + def call_sqrt(x): + y = math.sqrt(x) + print "The square root of %g is %g" % (x , y) + + + y = call_sqrt( -1 ) + +In this example we try to calculate the square root of -1, that is +invalid and Python will raise an exception: + +.. code:: bash + + Traceback (most recent call last): + File "/path/to/file.py" line 9 in + call_sqrt(-1) + File "/path/to/file.py" line 5 in call_sqrt + y = math.sqrt(x) + ValueError: math domain error + +What happens here is the following: + +1. In the internal function :code:`sqrt` which is called on line 5 + the invalid input argument is detected an exception is *raised*. + +2. The exception will propagate backwards in the call stack, first to + to the line 5, and then back to call on line 9 and finally the + program will print an error message and terminate. + +The error messages from an exception can be a bit challenging to read, +but by looking at it we can see where the error happens, and we get a +*hint* of what is wrong - in this case the hint "math domain error" +should give us a clue of what the problem is. There is some logic to +the type of the exception, in this case the exception raised will be +:code:`ValueError`- the value -1 is an invalid argument to the +:code:`sqrt` function. + +If we don't *handle* the exception the program will eventuelly exit +with an error message, but if this error does not signal a fatal +error, but rather something which might very well happen, we might +wish to *catch* the exception with a :code:`try` :code:`except` +construction: + +.. code-block:: python + :linenos: + + #!/usr/bin/env python + import math + + def call_sqrt(x): + try: + y = math.sqrt(x) + print "The square root of %g is %g" % (x , y) + except ValueError: + print "Oh no - you can not do sqrt( %g )" % x + + + call_sqrt( 16 ) + call_sqrt( -1 ) + call_sqrt( 9 ) + +When we run this program the :code:`try: except:` block will *catch* +the :code:`ValueError` exception and instead print a friendly error +message: + +.. code:: bash + + The square root of 16 is 4 + Oh no - you can not do sqrt( -1 ) + The square root of 9 is 3 + +The ert code uses exceptions to signal error conditions, if you get an +exception in your ert based code you can *assume* that there is a +something wrong in your code. On the other hand you might get a really +*hard crash* with an error message looking like[2]_: + + +.. code:: bash + + Abort called from: float_vector_iset (/home/joaho/jenkins/workspace/ERT-deploy-upstream-branch/build/libert_util/src/float_vector.c:615) + float_vector_iset: Sorry - can NOT set negative indices. called with index:-1 + + + -------------------------------------------------------------------------------- + #00 ???(..) in /path/devel/libert_util/src/util_abort_gnu.c:154 + #01 util_abort__(..) in /path/devel/libert_util/src/util_abort_gnu.c:263 + #02 float_vector_iset(..) in /path/build/libert_util/src/float_vector.c:615 + #03 ecl_smspec_fread_alloc(..) in /path/devel/libecl/src/ecl_smspec.c:1078 + #04 ???(..) in /path/devel/libecl/src/ecl_sum.c:198 + #05 ecl_sum_fread_alloc_case__(..) in /path/devel/libecl/src/ecl_sum.c:227 + #06 ffi_call_unix64(..) in /tmp/Python-2.7.6/Modules/_ctypes/libffi/src/x86/unix64.S:79 + #07 ffi_call(..) in /tmp/Python-2.7.6/Modules/_ctypes/libffi/src/x86/ffi64.c:524 + #08 _ctypes_callproc(..) in /tmp/Python-2.7.6/Modules/_ctypes/callproc.c:857 + #09 ???(..) in /tmp/Python-2.7.6/Modules/_ctypes/_ctypes.c:3940 + #10 PyObject_Call(..) in ??? + #11 PyEval_EvalFrameEx(..) in ??? + #12 PyEval_EvalCodeEx(..) in ??? + -------------------------------------------------------------------------------- + +These hard crashes can unfortunately *not* be handled by the +:code:`try: except:` construction in Python. There might be a bug in +your code; but that it results in such a brutal traceback is certainly +a bug in the ert code - please report it! + + + +Organizing python code in modules and packages +---------------------------------------------- + +Python code is written in files and stored in directories; this is the +foundation for modules and packages. + + +Modules +....... + +Python code is written in files, one file of Python code is called a +module, and can be imported into other Python code. In the small +example below we create a module which contains a class :code:`C`, a +function :code:`add` and a scalar variable :code:`var`. The whole +thing is saved in a file called :code:`module.py`: + +.. code:: python + + class C(object): + + def __init__(self , arg ): + self.arg = arg + + def calc( self , v ): + return ... + + + def add(a, b): + return a+b + + + var = "Bjarne" + + +This module now contains three *symbols*: :code:`C`, :code:`add` and +:code:`var` which can be reused from another context. To be able to +use the symbols from the module we must *import* the module, there are +several minor variations over the import statement, the exact import +statement used determines which name the symbols should be given in +the importing scope. + + +Import all symbols under the module namespace +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +.. code:: python + + import module + + c = module.C( 10 ) + print "Variable is:%s" % module.var + print "Adding 10,20:%g" % module.add(10,20) + +I.e. all the symbols from module.py have become available, but we must +prefix them with :code:`module` to use them. + + +Import all the symbols from module into the current namespace +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +.. code:: python + + from module import * + + c = C( 10 ) + print "Variable is:%s" % var + print "Adding 10,20:%g" % add(10,20) + +Again all the symbols from :code:`module.py` are available, but now +they have been imported all the way into the current namespace and can +be accessed without the module prefix. + + +Selectively importing some symbols +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +.. code:: python + + from module import C + import module.add + + c = C( 10 ) + print "Adding 10,20:%g" % module.add(10,20) + +We have imported the :code:`C` and :code:`add` symbols; the :code:`C` +symbol has been imported all the way into the current namespace, +whereas the :code:`add` symbol is available under the module +namespace. The :code:`var` symbol has not been imported, and if we try +to access that, using either :code:`var` or :code:`module.var` will we +get an error. + + +Import and rename +,,,,,,,,,,,,,,,,, + +.. code:: python + + import module as myModule + + c = myModule.C( 10 ) + print "Adding 10,20:%g" % myModule.add(10,20) + + +Here we have imported all of module, but we access it internally as +myModule. + + +Packages +........ + +Modules are just ordinary Python files, in the same way packages are +just ordinary directories, with the *special file* :code:`__init__.py` +in them; the :code:`__init__.py` file can be empty - but it must exist +in the directory for Python to treat the directory as a *package*. The +files and directories contained in the package directory will then be +modules and subpackages. In the ert distribution the package, +subpackage and module looks like this: + +.. code:: + + ert/ <-- Top level package / directory. + ert/__init__.py <-- Magic file signalling that 'ert' is a package. + ert/ecl/ <-- ecl is subpackage. + ert/ecl/__init__.py <-- Magic file signalling that 'ecl' is a package. + ert/ecl/ecl_grid.py <-- Normal module in the ecl package. + ert/ecl/ecl_sum.py <-- Normal module in the ecl package. + +All of ert Python is organized as a Python package. The top level +package ert has nearly no content, but contains subpackages ert.ecl, +ert.job_queue and so on ert.util. Each of the subpackages contain many +modules, as the module ert.ecl.ecl_grid which implements functionality +to work with ECLIPSE grids. Each of the modules typically implement +one or a few related classes, like the class EclGrid which is +implemented in the ert.ecl.ecl_grid module. + +The :code:`__init__.py` file must be present for Python to realize +that a certainl directory should be interpreted as a *package*; the +file can be empty, but it can also be used for e.g. initialization. In +the case of :code:`ert` we import symbols from modules to the +subpackage, so that we can import class symbols as: + +.. code:: python + + from ert.ecl import EclGrid, EclSum + + + +Getting started with ert Python +------------------------------- + +If the ert python package and the necessary shared libraries have all +been correctly installed at your site, the following script should +work: + +.. code:: python + + #!/usr/bin/env python + import ert + + print "Python: the ert package has been sucessfuly loaded" + + +If this works as intended you are ready to actually start working on +your actual problem. Hopefully the example section will have something +you can start from. + + + +.. [1] A vector designed for high performance numerical operations + would never be implemented this way; performance aside a class + implementing this functionality should also have much more + error checking. + +.. [2] Observe that the error message will typically point to a file + like :code:`/tmp/ert_abort_dump_xxx_20160101-026343.log` - the + content of that file will resemble the backtrace listed here. + diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/config/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/config/index.rst new file mode 100644 index 0000000000..26927006a2 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/config/index.rst @@ -0,0 +1,3 @@ +The ert.config package +====================== + diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/eclipse/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/eclipse/index.rst new file mode 100644 index 0000000000..2d6b93d97b --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/eclipse/index.rst @@ -0,0 +1,1260 @@ +The ert.ecl package +=================== + +.. contents:: + :depth: 2 + :local: + +The :code:`ert.ecl` package for working with Eclipse files is quite +extensive. There is some quite limited support for reading +:code:`grdecl` formatted input files, but mainly the package is +devoted to loading and interpreting the binary output files from +Eclipse. This includes :code:`INIT, GRID/EGRID, RFT`, summary and +restart files. + +.. _structure_binary_files +Structure of Eclipse binary files +--------------------------------- + +The binary files from ECLIPSE are built up with a common structure. +They consist of a collection of keywords [1]_, where each keyword has a +header and a block of data. The header consist of three fields: + +1. Name - this is a string with the name of the keyword. The name is + not unique in one file. + +2. The size of the keyword, i.e. the number of data elements. + +3. The data-type of the keyword - the different datatypes are 'INTE' + for integer date, 'REAL' for floating point numbers in single + precision (i.e. float), 'DOUB' for floating point numbers in double + precision, 'LOGI' for boolean variables [2]_ and 'CHAR' for character variables. + +Following the header comes blocks of data. Normally the files are +unformatted, so it is impossible to inspect them directly. But by +converting them, e.g. with the ert utility :code:`convert.x`, to +formatted one can take a look: + +.. code:: bash + + bash% convert.x ECLIPSE.INIT + converting ECLIPSE.INIT -> ECLIPSE.FINIT + +Looking at the formatted file ECLIPSE.FINIT, we can e.g. look at the +PORV keyword from the INIT file: + +.. code:: bash + + 'PORV ' 30000 'REAL' + 0.334572E+5 0.334561E+5 0.337613E+5 0.329863E+5 + 0.3377042+5 0.330056E+5 0.319002E+5 0.323340E+5 + 0.340970E+5 0.3410972+5 0.342097E+5 0.338722E+5 + .... + +Here we see that the name of keyword is 'PORV', and it consists of +30000 elements of type REAL. At least all the file types summary +(BASE.SMSPEC / BASE.UNSMRY / BASE.Snnnn), restart (BASE.UNRST / +BASE.Xnnnn), grid (BASE.EGRID / BASE.GRID), rft (BASE.RFT) and init +(BASE.INIT) consist of collections of such keywords. In the +:code:`ert.ecl` code the classes :code:`EclKW` and :code:`Ecl3DKW` are +designed to work with *one* such keyword. + + +FortIO - work with binary Eclipse IO +------------------------------------ + +The binary files created by ECLIPSE are created according to a Fortran +IO convention, which is a bit special, when writing e.g. a block of +1000 bytes of data to disk the Fortran IO system will surround the +block with a header and a tail denoting the size of the +block. I.e. for the Fortran code: + +.. code:: bash + + integer array(100) + write(unit) array + +What actually hits the disk looks like this: + +.. code:: bash + + | 400 | array ...... | 400 | + +The header and tail is a 4 byte integer, which value is the number of +bytes in the immediately following record. In addition the ECLIPSE +files are ususally(?) written in the "the other" endianness. The +:code:`FortIO` class should handle these matters transparently. For +normal use of the library it should not be necessary to explicitly use +the :code:`FortIO` class. + +The :code:`FortIO` class has quite good embedded documentation, and +you are advised to use :code:`pydoc ert.ecl.FortIO` or browse the API +documentation at :ref:`python_documentation` for further details. + + +EclKW/Ecl3DKW - work with one keyword +------------------------------------- + +The :code:`EclKW` class represents one keyword [1]_ from an Eclipse +result file. The :code:`EclKW` class is essentially a vector of data, +along with header with the size and type of data, and the name of the +vector. Mostly you will get :code:`EclKW` instances by querying a +:code:`EclFile` instance - but you can also instantiate +:code:`EclKW` instances manually. The :code:`Ecl3DKW` class is for +keywords which represent 3D properties like e.g. PRESSURE and PORO, +this class requires a grid instance, and is documented with the +:code:`EclGrid` documentation. + + +Special methods - container +........................... + +The :code:`EclKW` class implements the :code:`__getitem__()` and +:code:`__setitem__()` methods which are used to implement access using +the :code:`[ ]` notation, and the :code:`__len__()` method which gives +the size of the :code:`EclKW` instance. In the example below we load +an INIT file and extract the PERMX and PORO keywords, we then +forcefully set permeability to zero for all elements where the +porosity is below a limit: + +.. code:: python + + from ert.ecl import EclFile,EclGrid + poro_limit = 0.05 + + grid = EclGrid("CASE.EGRID") + init_file = EclFile("CASE.INIT") + permx = init_file["PERMX][0] + poro = init_file["PORO"][0] + + for index,value in enumerate(poro): + if value < poro_limit: + permx[index] = 0 + + # Save the updated permx to a new grdecl input file: + with open("permx.grdecl" , "w") as fileH: + grid.write_grdecl( permx , fileH ) + +In addition to the :code:`EclKW` class this example uses the classes +:code:`EclGrid` and :code:`EclFile` - see the documentation of them +below. Furthermore this example demonstrates an important point: even +though the :code:`EclKW` class is an important "workhorse" - we mostly +get it from an :code:`EclFile` instance and do not instantiate it +directly. + +For more details type :code:`pydoc ert.ecl.EclKW` or browse the API +documentation at :ref:`python_documentation`. + + +Special methods - arithmetic +............................ + +The :code:`EclKW` class implements all the arithmetic operators, +meaning that :code:`EclKW` instances can be added, multiplied and +shifted. In the example below we load all INIT files with a matching +filename pattern and then calculate the mean and standard deviation of +the permeability: + +.. code:: python + + import glob + import math + from ert.ecl import EclFile, EclTypeEnum + + initfile_pattern = "/path/to/files/real*/CASE-*.INIT" + + kw_list = [] + for init_file in glob.glob(initfile_pattern): + ecl_file = EclFile(init_file) + kw_list.append( ecl_file["PERMX"][0] ) + + mean = EclKW.create("AVG-PERMX" , len(kw_list[0]) , EclTypeEnum.ECL_FLOAT_TYPE) + std = EclKW.create("STD-PERMX" , len(kw_list[0]) , EclTypeEnum.ECL_FLOAT_TYPE) + + # Here we do normal arithmetic calculations with the EclKW instances + for kw in kw_list: + mean += kw + std += kw * kw + + mean /= len(kw_list) + std /= len(kw_list) + std -= mean * mean + + # The sqrt() function can not be implemented in the object, so here + # we must do it more explicitly. + std.apply( math.sqrt ) + +Observe that for the arithmetic operations you can also call the +inplace methods (*without* leading 'i') :code:`add()`, :code:`mul()`, +:code:`sub` and :code:`div()` directly - in this form the methods also +accept a *mask* parameter as an :code:`EclRegion` instance which can +limit the operation to only a subset of the elements. + + +EclFile - an arbitrary binary Eclipse file +------------------------------------------ + +The :code:`EclFile` class loads an arbitrary binary Eclipse file, and +creates an index of all the keywords in the file. The main reason for +opening an Eclipse file with an :code:`EclFile` instance is to look up +keywords in the file as :code:`EclKW` instances. The :code:`EclFile` +is general and can be used to open any file, but in addition there are +specialized classes :code:`EclInitFile` and :code:`EclRestartFile` +which can be used to open :code:`INIT` and restart files respectively; +these are documented along with the :code:`Ecl3DKW` class after the +:code:`EclGrid` documentation. + + +Special method __contains__() +............................. + +The :code:`EclFile` class implements the :code:`__contains__` method +which is typically used to check if a file contains a certain +keyword. The following example is a small script which will load an +Eclipse binary file given as a command line argument, and check if the +file contains keywords also given on the command line: + +.. code:: bash + + bash% scan_file.py ECLIPSE.UNRST SWAT SGAS SOIL + +Will open the file :code:`ECLIPSE.UNRST` and check if it contains the +keywords :code:`SWAT`, :code:`SGAS` and :code:`SOIL`: + +.. code:: python + + #!/usr/bin/env python + import sys + from ert.ecl import EclFile + + + # Open the file, EclFile will raise the IOError exception + # if the open fails. + try: + file = EclFile( sys.argv[1] ) + except IOError: + sys.exit("Could not open file: %s" % sys.argv[1]) + + # Go through the keywords from the command line + # and check if they are in the file + for kw in sys.argv[2:]: + if kw in file: + print("Found %s in %s" % (kw , file.getFilename())) + else: + print("Missing %s in %s" % (kw , file.getFilename())) + + +Special method __getitem__() +............................ + +The :code:`__getitem__()` method is used to get an :code:`EclKW` +instance from a file through the :code:`[]` operator. The argument to +the :code:`[]` operator can either be an integer to get a keywords by +plain index order, or a keyword name. + +.. code:: python + + from ert.ecl import EclFile + + file = EclFile("CASE.UNRST") + first_kw = file[0] + + swat_kw = file["SWAT"] + +Observe that when :code:`[]` is used with a keyword *name* the return +value is a *list* of keywords - there can potentially be *many* +keywords with the same name in a file. + +Restart specials +................ + +The :code:`EclFile` class has many specialized methods for to perform +queries on the time direction of restart files. These methods should +be moved to :code:`EclRestartFile` class, and are documented there. + + +For more details type :code:`pydoc ert.ecl.EclFile` or browse the API +documentation at :ref:`python_documentation`. + + +EclGrid - load a grid +--------------------- + +The :code:`EclGrid` class is used to load an Eclipse Grid, the main +way to load a grid is from a :code:`EGRID` or :code:`GRID` file, but +as an alternative it is also possible to create a grid from a .grdecl +formatted *input* file [3]_, or a simple rectangualar grid can be +*created* without an input file. In most cases the :code:`EclGrid` +instance will be created as simple as: + +.. code:: python + + from ert.ecl import EclGrid + + grid = EclGrid("ECLIPSE.EGRID") + + + +Active/inactive cells - index types +................................... + +For a typical reservoir model a large fraction of the cells are not +active; i.e. they are ignored in the flow calculations. The +bookkeeping of active/inactive cells is managed by grid. As a user of +the :code:`ert.ecl` Python package you must have some understanding of +these issues. Consider a 2D 3x3 grid model where only five of the +cells are active: + +.. code:: + + + +---------+---------+---------+ + |1 (0,2) |1 (1,2) |0 (2,2) | + | 6g | 7g | 8g | + | 3a | 4a | - | + +---------+---------+---------+ + |0 (0,1) |1 (1,1) |1 (2,1) | + | 3g | 4g | 5g | + | - | 1a | 2a | + +---------+---------+---------+ + |0 (0,0) |1 (1,0) |0 (2,0) | + | 0g | 1g | 2g | + | - | 0a | - | + +---------+---------+---------+ + +The 0 or 1 in the upper left corner of each cell indicates whether the +cell is active(1) or inactive(0) [4]_. When working with the +:code:`EclGrid` there are generally *three* different ways to refer to +a specific cell - these are: + + 1. A triplet of :code:`(i,j,k)` values - in the example above + indicated with the :code:`(i,j)`. + + 2. A *global index* in the range :code:`[0..nx*ny*nz)` which uniquely + identifies a cell. This is indicated as the number with a trailing + 'g' in the example above. + + 3. An *active index* in the range :code:`[0..nactive)` which + uniquely identifies an *active* cell. In the figure above the + active indices are the integers with a trailing 'a'. + +All the methods on the :code:`EclGrid` object which evaluate +properties for a particular cell can take the cell coordinate in any +of the three formats above. In addition there are conversion functions +between the three. Observe that all the indexing methods assume that +the indices are zero offset, i.e. starting at 0, this is in contrast +to Eclipse itself and many other post processing applications which +assume that indices start at 1. + +In the restart and init files most of the properties are stored as +vectors of length *nactive*, i.e. the indexing with active indices is +the most natural. In the example below we load a grid and a init file, +and then we print the (i,j,k) values for all the cells with +:code:`PERMX` below a limit: + +.. code:: python + + from ert.ecl import EclGrid,EclFile + + permx_limit = 1e-2 + grid = EclGrid( "CASE.EGRID" ) + init = EclFile( "CASE.INIT" ) + + permx_kw = init["PERMX"][0] + + for ai in range(len(permx_kw)): + if permx_kw[ai] < permx_limit: + ijk = grid.get_ijk( active_index = ai) + print("permx[%d,%d,%d] < %g" % (ijk[0], ijk[1], ijk[2], permx_limit)) + +In the case of dynamic properties like :code:`PRESSURE` and +:code:`SWAT` it does not make sense to ask what the value is in the +inactive cells - it has not been calculated. For properties the input +files typically have :code:`nx*ny*nz` elements - so here it is/might +be possible to get hold of a valid value also for the inactive +cells. When working interchangebly with properties defined over all +cells or only the active cells it is very important to think straight. + + +Ecl3DKW - a grid aware EclKW class +.................................. + +The :code:`Ecl3DKW` class is derived from the :code:`EclKW` class, but +the instance has a :code:`EclGrid` and optionally a default value +associated to it. The purpose of this is to be able to use +:code:`(i,j,k)` as index when looking up values. When :code:`(i,j,k)` +is used to identify the cell the, :code:`Ecl3DKW` class can +transparently handle the active/inactive cells issue - returning a +default value in the case of undefined inactive cells. + +When the :code:`[]` argument is a single integer the :code:`Ecl3DKW` +class can not know whether the index supplied is an active or a global +index, and it will be a simple index lookup - which properties are +determined by the length of the underlying data. + +The :code:`Ecl3DKW` class is mainly convenience compared to the pure +:code:`EclKW` class - for performance reasons it should probably not +be used if you wish to run through all the cells. + + +Using the grid object +..................... + +The :code:`EclGrid` object has a long range of methods for extracting +grid properties: + + 1. Many different methods for working with cell data like position, + depth, size and location of cell corners. + + 2. Methods doing the reverse mapping :code:`(x,y,z) -> (i,j,k)`. + + 3. *Some* functionality for working with LGRs, coarse groups and + fractured grid. + + 4. Methods for exporting a :code:`EclKW` defined over + :code:`nactive` elements to a :code:`grdecl` formatted file with + :code:`nx*ny*nz` elements. + +In addition the :code:`EclGrid` is used as an input for the +:code:`Ecl3DKW` properties and also for the :code:`EclRegion` +class. For further details please type :code:`pydoc ert.ecl.EclGrid` +or browse the API documentation at :ref:`python_documentation`. + +EclInitFile and EclRestartFile - grid aware files +------------------------------------------------- + +For restart and init files you can optionally choose to use +:code:`EclInitFile` and :code:`EclRestartFile` classes instead of the +basic :code:`EclFile` class. These two derived classes have a grid +attached, and will return a :code:`Ecl3DKW` instance instead of a +:code:`EclKW` instance for keywords with either :code:`nx*ny*nz` or +:code:`nactive` elements. + +In the example below we have a list of :code:`(i,j,k)` triplets and we +look up the permeability values for these cells without going through +the :code:`(i,j,k) -> active_index` transformation: + +.. code:: python + + from ert.ecl import EclGrid,EclInitFile + + grid = EclGrid( "CASE.EGRID" ) + init = EclInitFile( "CASE.INIT" ) + + cell_list = [(1,2,3), (1,4,5), (2,2,7)] + # The permx_kw will now be a Ecl3DKW instance + + permx_kw = init["PERMX"][0] + for ijk in cell_list: + print("permx : %g" % permx_kw[ijk]) + + +Time queries in EclRestartFile +.............................. + +The :code:`EclRestartFile` class has many methods for queries on the +temporal content of a restart file [5]_. + +Classmethods +,,,,,,,,,,,, + +Several of the methods giving temporal information on restart files +are *classmethods* - which means that an be invoked *without* creating +the :code:`EclRestartFile` instance first: + + +EclRestartFile.file_report_list +******************************* + +The classmethod :code:`file_report_list` will scan through a file and +identify all the report steps in the file. In the example below we +print a list of all the report steps which can be found in a restart +file. + +.. code:: python + + from ert.ecl import EclRestartFile + + report_list = EclRestartFile.file_report_list("ECLIPSE.UNRST") + + print("The file: %s contains the following report steps: ") + print( ", ".join(report_list)) + + +EclRestartFile.contains_report_step +*********************************** + +The classmethod :code:`contains_report_step` will check if the file +*filename* contains the report_step *report_step*: + + + if EclRestartFile.contains_report_step( "ECLIPSE.UNRST" , 100): + print("The file has a section for report step=100") + else: + print("No - the file does not have report_step = 100") + + +EclRestartFile.contains_sim_time +******************************** + +The classmethod :code:`contains_report_step` will check if the file +*filename* has a result block for a particular date, the date should +be given as a normal Python :code:`datetime`: + +.. code:: python + + from ert.ecl import EclRestartFile + import datetime + + sim_time = datetime.datetime( 2010 , 6 , 15 ) + if EclRestartFile.contains_sim_time( "ECLIPSE.UNRST" , sim_time ): + print("The file has a section date: %s" % sim_time) + else: + print("No - the file does not have data at: %s" % sim_time) + + + +EclRegion - a method to select cells +------------------------------------ + +The purpose of the :code:`EclRegion` class is to build up a set of set +cells in a *region* [6]_ based on various selection criteria. That +selection is then typically used to update a set of cells in a +:code:`EclKW` instance, either as a :code:`mask=region` parameter in +one of the arithmetic operators or by directly looping through the +index set. + +In the example below we load the PORO and PERMX fields from +:code:`grdecl` input files, select different regions based on the +values and create a SATNUM keyword. The rather arbitrary rule we +apply is: + + 1. For cells with PORO < 0.01 we assign SATNUM = 1 + 2. For cells with PORO > 0.01 and PERMX < 200 we assign SATNUM = 2 + 3. For cells with PORO > 0.01 and PERMX > 200 we assign SATNUM = 3 + + +.. code:: python + + from ert.ecl import EclGrid, EclRegion, EclKW, EclTypeEnum + + grid = EclGrid( "CASE.EGRID" ) + + with open("poro.grdecl") as f: + poro = EclKW.read_grdecl( f , "PORO") + + with open("permx.grdecl") as f: + permx = EclKW.read_grdecl( f , "PERMX") + + # Create an initially empty region, and select all the cells where + # PORO is below 0.01 + reg1 = EclRegion( grid , False ) + reg1.select_less( poro , 0.01 ) + + + # Create an initially empty region, and select all the cells where + # PORO is above 0.01. Then we select all the cells where PERMX is + # above 200. Since the flag intersect is True this second selection + # is only among the already selected cells. + reg2 = EclRegion( grid , False ) + reg2.select_more( poro , 0.01 ) + reg2.select_more( permx , 200 , intersect = True ) + + + # Create a region where all cells are initially selected, + # then subtract the regions reg1 and reg2. + reg3 = EclRegion( grid , True ) + reg3 -= (reg1 + reg2) + + + # Create a new satnum keyword and use the assign() method with a + # mask parameter. + satnum = EclKW.create( "SATNUM" , grid.getGlobalSize() , EclTypeEnum.ECL_INT_TYPE) + satnum.assign( 1, mask = reg1 ) + satnum.assign( 2, mask = reg2 ) + satnum.assign( 3, mask = reg3 ) + + with open("satnum.grdecl" , "w") as f: + satnum.write_grdecl( f ) + + +EclRegion - selectors +..................... + +A region can be constructed in many different ways: + + 1. Based on slices of :code:`i,j,k` values. + 2. Inside or outside a polygon; or alternatively "above" or "below" a + line. + 3. Based on comparing a :code:`EclKW` instance with a scalar value. + 4. Based on comparing two :code:`EclKW` instances. + 5. Based on cell geometry - i.e. size, depth or thickness. + +Observe the following: + + 1. For each :code:`select_xxx` method there is a corresponding + :code:`deselect_xxx` method. + + 2. By default all cells are eligible for selection, but if you pass + the :code:`intersect = True` flag to the :code:`select_xxx` method + the selection algorithm will only consider the already selected + cells. + + +EclRegion - special methods +........................... + +The :code:`EclRegion` class implements the special methods required to +view the regions as set; i.e. you can add and subtract regions and +form the union and intersection of regions. + +.. code:: python + + reg1 = ... + reg2 = ... + + + # Region reg3 will be the union reg1 and reg2, i.e. the cells + # selected in reg3 is the set of all cells selected in either reg1 + # or reg2. + reg3 = reg1 | reg2 + reg3 = reg1 + reg2 + + # Region reg3 will be set of cells which are *only* selected in reg1. + reg3 = reg1 - reg2 + + # Region reg3 will be the set of cells which are selected in *both* + # reg1 and reg2. + reg3 = reg1 & reg2 + +For further details, specially of the various select methods, please +type :code:`pydoc ert.ecl.EclRegion` or browse the API documentation +at :ref:`python_documentation`. + +RFT +--- + +The support for RFT files in :code:`ert.ecl` is split among the three +classes :code:`EclRFTFile`, :code:`EclRFT` and :code:`EclRFTCell`. The +:code:`EclRFTFile` class is used to load an ECLIPSE RFT file. The RFT +files will generally contain results for several wells, and several +times, the :code:`EclRFTFile` class will load them all - and then +supplies an interface to query for individual RFT results based on +wellname and/or date; the individual RFT results will be in the form +of :code:`EclRFT` instances. + +.. code:: python + + from ert.ecl import EclRFTFile + + # Load the RFT file + rft_file = EclRFTFile("ECLIPSE.RFT") + + # Extract the RFT results for well 'OP-X' at date 2010-01-15; + # will return None if no such RFT exists - should probably raise an + # exception. + rft = rft_file.get("OP-X" , datetime.date(2010,1,15)) + +In addition to the main method: :code:`EclRFTFile.get()` the +:code:`EclRFTFile` class has utility methods to list all the well and +date values present in the RFT file, the number of wells and so on. + + +EclRFT +...... +From the :code:`EclRFTFile.get()` method we get a :code:`EclRFT` +instance. Observe that one RFT file can contain a lump of different +data RFT types: + + RFT: This is old-fashioned RFT which contains measurements of + saturations for each of the completed cells. + + PLT: This contains production and flow rates for each phase in + each cell. + + SEGMENT: Not implemented. + +The :code:`EclRFT` object has some metadata describing which type +of data it represents, and there is some special functionality related +to MSW wells; but the main purpose of the :code:`EclRFT` class is to +serve as container holding a list of :code:`EclRFTCell` instances - +one for each perforated cell in the RFT. The :code:`EclRFT` class has +implemented the :code:`__getitem__()` method, so the following code +will loop identify an RFT from a file and then loop through all the +cells for that RFT. + +.. code:: python + + from ert.ecl import EclRFTFile + rft_file = EclRFTFile("ECLIPSE.RFT") + rft = rft_file.get("OP-X" , datetime.date(2010,1,15)) + + for cell in rft: + print("Looking at cell: (%d,%d,%d) depth:%g pressure:%g" % ( + cell.get_i() , cell.get_j() , cell.get_k() , cell.depth , cell.pressure)) + +Depending on whether this is RFT or a PLT the exact type of the cell +object will be either :code:`EclRFTCell` or :code:`EclPLTCell`, the +:code:`EclPLTCell` has many extra properties not in the +:code:`EclRFTCell` class. For more detail use :code:`pydoc` to look at +the classes :code:`ert.ecl.EclRFTFile`, :code:`ert.ecl.EclRFT`, +:code:`ert.EclRFTCell` or :code:`ert.ecl.EclPLTCell` - or the API +documentation at :ref:`python_documentation`. + +EclSum - working with summary files +----------------------------------- + +Summary files are loaded with the :code:`EclSum` class. The +:code:`EclSum` class is a quite complete implementation for working +with Eclipse summary data, but it should also be said the +:code:`EclSum` class is one of the oldest classes in the +:code:`ert.ecl` package and the api could have been cleaner. + + +Creating a :code:`EclSum` instance +.................................. + +In more than 99% of the cases the assumption is that we want to create +a :code:`EclSum` instance by loading read-only summary results from +disk, however it is also possible to assemble a :code:`EclSum` +instance using the api - that is not covered in this documentation. + +The summary results from ECLIPSE come in two different types of files; +the :code:`ECLIPSE.SMSEPEC` file is a *header file* with all the +properties of the variables, and the :code:`ECLIPSE.UNSMRY` (or +alternatively :code:`ECLIPSE.S0000, ECLIPSE.S0001, ECLIPSE.S0002, +...`) file contains the actual values. Creating a :code:`EclSum` +instance from this is as simple as: + +.. code:: python + + from ert.ecl import EclSum + + ecl_sum = EclSum("ECLIPSE") + +As is clear from the example the :code:`EclSum` instance is created +based only on the basename of the simulation, you can optionally have +an extension like :code:`ecl_sum = EclSum("ECLIPSE.UNSMRY")` - but +that is *mostly* [7]_ ignored. + +If your case is restarted from an another case the :code:`EclSum` +cconstructor will by default try to locate the historical case, and +load the summary results from that as well. Alternatively you can pass +the argument :code:`include_restart = False` to the :code:`EclSum` +constructor. The loading of historical case will fail with an error +message if: + + 1. The case can not be found in the filesystem. + + 2. The :code:`SMSPEC` is not 100% identical to the current + :code:`SMSPEC` setion; this will typically fail if you have modified + the :code:`SUMMARY` section of the ECLIPSE deck between the two + simulations. + + +About summary keys +.................. + +The header file :code:`CASE.SMSPEC` has all the information *about* +the summary data. The :code:`CASE.SMSPEC` file consists of several +:code:`EclKW` instances, where the three most important one are: +:code:`KEYWORDS` which contains the variable names like +:code:`FOPT`, :code:`WGOR` and :code:`BPR`, the :code:`WGNAMES` vector +which contains names of groups and wells, and :code:`NUMS` which +contain extra numbers to characterize the variables. A small +:code:`SMSPEC` file could look like this: + +.. code:: + + KEYWORDS WGNAMES NUMS | PARAM index Corresponding ERT key + ------------------------------------------------+-------------------------------------------------- + WGOR OP_1 0 | 0 WGOR:OP_1 + FOPT +-+-+-+- 0 | 1 FOPT + WWCT OP_1 0 | 2 WWCT:OP_1 + WIR OP_1 0 | 3 WIR:OP_1 + WGOR WI_1 0 | 4 WWCT:OP_1 + WWCT W1_1 0 | 5 WWCT:WI_1 + BPR +-+-+- 12675 | 6 BPR:12675, BPR:i,j,k + RPR +-+-+- 1 | 7 RPR:1 + FOPT +-+-+- 0 | 8 FOPT + GGPR NORTH 0 | 9 GGPR:NORTH + COPR OP_1 5628 | 10 COPR:OP_1:56286, COPR:OP_1:i,j,k + RXF +-+-+- 32768*R1(R2 + 10) | 11 RXF:2-3 + SOFX OP_1 12675 | 12 SOFX:OP_1:12675, SOFX:OP_1:i,j,jk + ------------------------------------------------+-------------------------------------------------- + +As indicated above the ERT library combines elements from the +:code:`KEYWORDS`, :code:`WGNAMES` and :code:`NUMS` vectors to create a +unique combined key. When referring to a 'key' in the rest of the +documentation, we mean one of these combined keys. Observe the +following about the smspec index: + + + - For LGR's even more vectors are needed; ERT supports the LGR + information contained in the ordinary summary files, but not the + high temporal frequency results which are in a separate file. + + - The KEYWORDS array is always relevant; which of the other vectors + is consulted depends on the type of variable, for e.g. WWCT the + well name is fetched from the WGNAMES vector, whereas the NUMS + vector is ignored. On the other hand the WGNAMES vector is ignored + (explictly by using the dummy well +-+-+-) for BPR but the cell + coordinate is read off from the NUMS vector. + + - For the properties defined in the grid like BPR and COPR both the + key based directly on the NUMS value and the key based on + tranforming the NUMS value to i,j,k are present. This is not the + case for local grid properties, where only the i,j,k variety is + used. For these keys the offset of :code:`(i,j,k)` is *one-based* + , which is slightly untypical for the :code:`ert` code. + + - All well variables are present for all wells - that means the + summary file contains oil production rate :code:`WOPR` for an + injector, and injection rate :code:`WIR` for an oil producer. + + - The column *PARAM index* denotes the index this key will have in + the :code:`PARAMS` *storage* vectors in the :code:`UNSMRY` or + :code:`.Snnnn` files. + + - Nearly all variable types are supported by ERT - those which are + missing are: *Network variables* and *Aquifer variables*. + + + +About the time direction +........................ + +As we can see from the table in "About summary keys" section the +variables in the SMSPEC file have a unique index, i.e. for the example +above we can see that the water cut in well 'OP_1' - +i.e. :code:`WWCT:OP_1` is stored as element nr 2 in the :code:`PARAMS` +vectors; so to actually get the water cut in well 'OP_1' we look up +the value of the PARAMS keyword at index 2. By default the SUMMARY +data will be created and stored for every timestep of the simulator, +i.e. the raw time resolution is directly given by the simulators +performance, in ECLIPSE parlance these are called ministeps. When the +:code:`EclSum` class loads a summary all the ECLIPSE ministeps are +stacked together in one long vector, observe that e.g. when the +keyword RPTONLY is used in the ECLIPSE data file there can be "holes" +in the ministep sequence. + +The ert.ecl summary implementation works with four different concepts +of time: + +time_index +,,,,,,,,,,, + +This is a plain index in the range :code:`[0,..num_timestep)`. Observe +that :code:`num_timesteps` is the number of timesteps loaded, and not +the total number of timesteps simulated. There can be holes in the +ministep sequence, but there will never be holes in this range. It is +closely coupled to the simulator timestep and what the user of ECLIPSE +has chosen to store, so no further meaning should be attached to these +indices. Ultimately all lookups will be based on :code:`time_index`; in the C +code it is therefor often denoted :code:`internal_index`. + +ministep +,,,,,,,,, + +Each simulator timestep corresponds to one ministep, but an arbitrary +summary dataset need not contain all ministeps. In the case of a +restarted simulation the first ministeps might be missing completely, +and there can also be holes in the series. Each block of summary data +is tagged with a MINISTEP number by ECLIPSE. The ministep indices are +arbitrary properties of the simulation, and are not exported by the +:code:`ert.ecl` API. + + +report_step +,,,,,,,,,,,, + +This is the ECLIPSE report step, there are functions to convert +between report step and index, and you can use report step as time +value when querying for values. + + +True time +,,,,,,,,,, + +It is possible to query the summary object for values interpolated to +"true" time; the true time can eiether be specified in days since +simulation start, or as python datetime.date() instance. + +Some methods +............. + + +__contains__ +,,,,,,,,,,,, + +The :code:`__contains__` method implements :code:`in` support. If you +are uncertain whether the summary contains a key or not, you should +use this function to check. In the example below a list of keys is +read from the commandline, and we check whether they are in the +summary or not: + +.. code:: python + + import sys + from ert.ecl import EclSum + sum = ecl.EclSum("ECLIPSE") + + for key in sys.argv[1:] + if key in sum: + print "Key:%s exists" % key + else: + print "Key:%s does NOT exist" % key + + +keys( pattern = None ) +,,,,,,,,,,,,,,,,,,,,,, + +This method will generate a list of keys witch match :code:`pattern`, +or all keys if :code:`pattern == None`. The pattern is a shell-type +wildcard expression, and the final matching is done with the stdlib +function fnmatch(), and not regular expressions. So to get a list of +all keys corresponding to block pressures, and all historical group +variables for the group "NORTH" we can use the :code:`keys()` function as: + +.. code:: python + + from ert.ecl import EclSum + sum = ecl.EclSum("ECLIPSE") + + matching = sum.keys( "BPR:*" ) + sum.keys( "G*H:NORTH" ) + + +iget_report( index ) +,,,,,,,,,,,,,,,,,,,, + +The iget_report() method will convert a time index (as one gets from +e.g. first_gt()) and return the report step which contains this +index. For instance if you have loaded a unified summary file with the +following keywords: + +.. code:: bash + + SEQHDR <--------. + MINISTEP 0 | + PARAMS | + MINISTEP 1 | Report step 1 + PARAMS | + MINISTEP 2 | + PARAMS | + SEQHDR <---------+ + MINISTEP 3 | + PARAMS | Report step 2 + MINISTEP 4 | + PARAMS | + + +The plain index will be counting ministeps, as given by the numbering +0..4. If we call iget_report(2) we will get one, because it is Report +step 1 which contains ministep 2. + +get_unit( key ) +,,,,,,,,,,,,,,, + +Will return the unit, i.e. :code:`SM3` for the summary variable key. Methods +to get the value at one point in time + +iget( key , index ) +,,,,,,,,,,,,,,,,,,, + + +This function will return the value corresponding to key at 'time' +given by index. + + +get_interp( key , days = None , date = None ) +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + + +This method will return the summary value correponding to key +(e.g. :code:`WWCT:A6-H`) interpolated to simulation date or simulation +days days - one-and-only-one of the two optional parameters must be +supplied. The date parameter is a normal python +:code:`datetime.date()` or :code:`datetime.datetime()` instance: + +.. code:: python + + import datetime + import ert.ecl.ecl as ecl + sum = ecl.EclSum( case ) + + print "FWCT after 1000 days: %g" % sum.get_interp( "FWCT" , days = 1000 ) + print "Total oil production at 10.10.2010: %g" % sum.get_interp( "FOPT" , date = datetime.date( 2010 , 10 , 10) ) + + +If the supplied time argument falls outside the time range where you +have simulation data the function will return :code:`None`. Observe +that for rate-like variables the :code:`get_interp()` will return +step-like results if you have finer time-resolution than the +simulation results. It might be tempting to interpolate the values, +but that would be wrong. If you want interpolated values at many +points in time you can use the method :code:`get_interp_vector()` +below: + + +get_interp_vector( key , days_list = None , date_list = None ) +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +This method will return a Python list of summary values corresponding +to :code:`key`, interpolated to the time points given by either days_list or +date_list. In the example below we fetch the total oil production +every 6 months: + +.. code:: python + + import datetime + import ert.ecl.ecl as ecl + sum = EclSum( "ECLIPSE" ) + + # Building up the list of dates: + date = sum.start_date + date_list = [] + while date < sum.end_date: + date_list.append( date ) + if date.month < 7: + date = datetime.date( date.year , 7 , 1) + else: + date = datetime.date( date.year + 1 , 1 , 1) + + # Get the values + FOPT_vector = sum.get_interp_vector( "FOPT" , date_list = date_list ) + + # Print the results + for (date , FOPT) in zip(date_list , FOPT_vector): + print "%s %g" % (date , FOPT) + + +Methods to get a vector of the complete time series +................................................... + + +get_vector( key , report_only = False) +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +The get_vector function will return a EclSumVector instance +corresponding to key. The __getitem__ function is also +implemented in terms of the get_vector function, i.e. the same +behaviour can be achieved with the [] operator: import ert.ecl as ecl + +.. code:: python + + sum = ecl.EclSum( "/path/simuluation/BASE" ) + wwct = ecl.get_vector("WWCT:C-1") + wopr = ecl["WOPR:C-1"] + + +If the summary variable key does not exist in the case the exception +KeyError will be raised. By default EclSumVector will have full +temporal resolution; but if the optional argument report_only is set +to True the vector will only contain data from the report times. This +option is not available when the [] operator is used. Properties + +length +,,,,,, + +The length property is the number of data-points in the summary instance; this corresponds to the number of timesteps in the ECLIPSE simulation; alternatively you can use Python builtin function len(). +start_date / end_date + +The start_date and end_date properties are the starting date and +ending date of the simulation respectively. The return value is an +instance of Python datetime.date(): ... start_date = sum.start_date +end_date = sum.end_date + +print "Simulation started.............: %s" % start_date +print "Simulation ended...............: %s" % end_date +print "The simulation spans %s days...: %s" % (end_date - start_date).days + +start_time / end_time +,,,,,,,,,,,,,,,,,,,,, + +This is similar to the start_date, end_date properties, but the return +value is a Python datetime.datetime() instance instead. Only relevant +if you need sub-days time resolution. (Sub-days time resolution is +probably quite bug infested.) first_report / last_report The report +steps are the numbering ECLIPSE gives to the DATES keywords. The +properties first_report and last_report return the first and last +report steps in the current summary instance. + +first_gt(key , limit) / first_lt(key , limit) +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +These two functions will return the index of the first "time" where +the summary vector corresponding to key goes above (first_gt()) or +falls below a limit (first_lt). If the limit is not reached the +function will return -1; if the -1 is used as index in a subsequent +call to an EclSum method, it will fail hard. + +.. code:: python + + gt_index = sum.first_gt( "WWCT:OP_3" , 0.30) + if gt_index < 0: + print "The water cut in well OP_3 never exceeds 0.30" + else: + print "WWCT:OP_3 exceeds 0.30 after %g days." % sum.iget_days( gt_index ) + + lt_index = sum.first_lt("RPR:2" , 210) + if lt_index < 0: + print "The pressure in region 2 never falls below 210 BARS" + else: + print "RPR:2 below 210 bars at : %s" % sum.iget_time(lt_index).date() + +numpy_value( key ) +,,,,,,,,,,,,,,,,,, + +This method will return a numpy vector with all the values for the key +key. The numpy vector type can then be used e.g. to plot or do other +manipulations. + + +numpy_days +,,,,,,,,,, + +This property will return a numpy vector with the number of simulation +days. mpl_dates This property is a numpy vector of "time-values" in +matplotlib format. Suitable when plotting with matplotlib. In the +example below we fetch two vectors, and the simulation days from a +summary, and then print it all to the screen: + +.. code:: python + from ert.ecl import EclSum + + sum = EclSum( "/path/ECLIPSE.DATA" ) + days = sum.days + wwct = sum.numpy_value("WWCT:OP_1") + wopr = sum.numpy_value("WOPR:OP_1") + + for (d , w , o) in zip( days , wwct , wopr): + print "%5.0f %5.3f %8.1f" % (d,w,o) + + +Special functions/operators + +[] : get The [] operator is mapped to the get_vector() method and will +return the EclSumVector corresponding to the key entered, i.e. the +EclSum instance will behave much like a dictionary. I.e. to get a +EclSumVector corresponding to field oil production rate you can do: +sum = ecl.EclSum( "ECLIPSE" ) fopr = sum["FOPR"] If you give a key +which does not exist in the summary the KeyError exception will be +raised. + +EclSumVector +............ + +The EclSumVector class is a small convenience class to work with only +one summary vector. It is not necessary to use the EclSumVector +class - everything can be accessed directly from the EclSum +class. Many of the methods and properties of the EclSumVector are very +similar or actually identical to methods in the EclSum class: + +The methods/properties which access the timeseries are the same. Many +of the methods which take key input argument in the EclSum case +obviously take no key argument in the case of EclSumVector; if there +are no arguments left these methods will typically be converted to +read-only properties. + +Constructor + +EclSumVector( parent , key , report_only ) The default constructor +EclSumVector() will create a new EclSumVector instance, but the +intentition is that the EclSumVector instances should be constructed +via the EclSum parent instance, and not explicitly by the user. +Methods + +The EclSumVector class has all the same methods as the EclSum class; +with the obvious exceptions of has_key() and keys(). The key argument +present in the methods ... is removed in the EclSumVector incarnation. +Properties + +Special functions/operators + +[] : get + +The EclSumVector implements the __getitem__() method to support +iteration and the [] operator. The __getitem__ method supports +negative indices and partly slicing. When slicing the returned value +will not be reduced EclSumVector instance, but rather a plain Python +list with the correct set of elements. The elements returned from the +__getitem__ method are EclSumNode instances. + +.. code:: python + + from ert.ecl import EclSum + + eclsum = EclSum( "ECLIPSE" ) + wwct = eclsum["WWCT:OP-5"] + + print "First value element: " wwct[0].value + print "Last value : " wwct[-1].value + print "List of every third: " wwct[0::3] + + +EclSumNode +.......... + +The EclSumNode class is very small, more like a C struct. It contains +11the value, along with time in different units for one summary vector +at one point in time; the content of the EclSumNode is plain field +variables; no properties or anything fancy. The EclSumNode has the +following fields: + + value : The actual value + report_step : The report step + mini_step : The ministep + days : Days since simulation start + date : The simulation date + mpl_date : A date format suitable for matplotlib + +When iterating over a EclSumVector the return values will be in the +form EclSumNode instances. The EclSumNode instances are created on +demand by a EclSumVector instance. The example below show how the +EclSumNode instances arise when iterating over the content of a +EclSumVector: + +.. code:: python + + wwct = ecl_sum["WWCT:C-1A"] + for node in wwct: + print "Days:%g value:%g" % (node.days , node.value) + + +.. [1] Observe that the word *keyword* here means one block of + information, as the :code:`PORV` from the + :ref:`structure_binary_files`, which is generally *not* the + same as one keyword from the input file. + + +.. [2] In binary files Boolean True and False is represented by the + integer values -1 and 0 respectively; whereas the characters + 'T' and 'F' are used in ASCII formatted files. + + +.. [3] Observe that the reservoir simulator will typically + *deactivate* cells. The :code:`EGRID/GRID` output files are + created *after* cells have been deactivated, hence the + distribution of active/inactive cells in a grid created from + the input files will generally *not* agree with the result + arrays found in the restart files. + +.. [4] This corresponds to the :code:`ACTNUM` property used internally + by Eclipse to denote active/inactive status. + +.. [5] The methods are currently implemented in the base class + :code:`EclFile` - but they should be moved to the + :code:`EclRestartFile` class. + +.. [6] Observe that the set of cells need *not* form a singly + connected set. + +.. [7] Since the summary files can be both formatted and unformatted, + and also both unified and non-unified there can potentially be + several datasets with the same basename present in the + directory. The :code:`EclSum` loader will by default use the + latest version, but by supplying an extension you can control + which files should be loaded; i.e. when calling as + :code:`EclSum("ECLIPSE.A0056")` the loader will *only* look for + multiple formatted files. + diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/enkf/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/enkf/index.rst new file mode 100644 index 0000000000..4353f95738 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/enkf/index.rst @@ -0,0 +1,2 @@ +The ert.enkf package +==================== diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/geometry/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/geometry/index.rst new file mode 100644 index 0000000000..89c51ef2c5 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/geometry/index.rst @@ -0,0 +1,2 @@ +The ert.geo package +=================== diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/index.rst new file mode 100644 index 0000000000..32d9a40755 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/index.rst @@ -0,0 +1,20 @@ +The ert packages +================ + +.. toctree:: + :maxdepth: 1 + + util/index.rst + config/index.rst + eclipse/index.rst + well/index.rst + geometry/index.rst + enkf/index.rst + + +Currently only the package targeted at working with Eclipse files, +:code:`ert.ecl` has extensive documentation. In +:ref:`python_documentation` there are links to auto generated API +documentation for all of ert, and in :ref:`example` there are some +additional examples. + diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/util/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/util/index.rst new file mode 100644 index 0000000000..83bd652b28 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/util/index.rst @@ -0,0 +1,2 @@ +The ert.util package +=================== diff --git a/ThirdParty/Ert/devel/docs/code/python/packages/well/index.rst b/ThirdParty/Ert/devel/docs/code/python/packages/well/index.rst new file mode 100644 index 0000000000..9a3ea2c9a1 --- /dev/null +++ b/ThirdParty/Ert/devel/docs/code/python/packages/well/index.rst @@ -0,0 +1,2 @@ +The ert.well package +==================== diff --git a/ThirdParty/Ert/devel/docs/conf.py.in b/ThirdParty/Ert/devel/docs/conf.py.in index a34d0d4e90..2bde72df1c 100644 --- a/ThirdParty/Ert/devel/docs/conf.py.in +++ b/ThirdParty/Ert/devel/docs/conf.py.in @@ -19,7 +19,7 @@ import os # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) -sys.path.insert(0, os.path.abspath('../python/python')) +sys.path.insert(0, os.path.abspath('${PYTHON_INSTALL_PREFIX}')) # -- General configuration ------------------------------------------------ diff --git a/ThirdParty/Ert/devel/docs/tips.txt b/ThirdParty/Ert/devel/docs/tips.txt index 0b02c30c3a..8c4c49aa3b 100644 --- a/ThirdParty/Ert/devel/docs/tips.txt +++ b/ThirdParty/Ert/devel/docs/tips.txt @@ -216,7 +216,7 @@ Concrete tips: .... this can then be easily captured to a temporary file by setting - the stdout redirection of the util_fork_exec() function, and then + the stdout redirection of the util_spawn() function, and then subsequently the 100% normal way of creating a gen_obs instance can be used. Input arguments / input files / e.t.c. to the OBS_SCRIPT should be given in the SCRIPT_ARG option - fully diff --git a/ThirdParty/Ert/devel/docs/user/index.rst b/ThirdParty/Ert/devel/docs/user/index.rst index 8848329bc8..c8705f26a8 100644 --- a/ThirdParty/Ert/devel/docs/user/index.rst +++ b/ThirdParty/Ert/devel/docs/user/index.rst @@ -8,6 +8,7 @@ Contents: tutorial/index keywords/index + magic_strings/index workflows/index observations/index distributions/index diff --git a/ThirdParty/Ert/devel/docs/user/keywords/index.rst b/ThirdParty/Ert/devel/docs/user/keywords/index.rst index a7017fea43..21afd0bfe0 100644 --- a/ThirdParty/Ert/devel/docs/user/keywords/index.rst +++ b/ThirdParty/Ert/devel/docs/user/keywords/index.rst @@ -63,7 +63,6 @@ Keyword name Required by :ref:`ENKF_PEN_PRESS ` NO FALSE Should we want to use a penalised PRESS statistic in model selection? :ref:`ENKF_RERUN ` NO FALSE Should the simulations be restarted from time zero after each update. :ref:`ENKF_SCALING ` NO TRUE Do we want to normalize the data ensemble to have unit variance? -:ref:`ENKF_SCHED_FILE ` NO Allows fine-grained control of the time steps in the simulation. :ref:`ENKF_TRUNCATION ` NO 0.99 Cutoff used on singular value spectrum. :ref:`ENSPATH ` NO storage Folder used for storage of simulation results. :ref:`EQUIL_INIT_FILE ` NO Use INIT_SECTION instead @@ -76,6 +75,7 @@ Keyword name Required by :ref:`GEN_PARAM ` NO Add a general parameter. :ref:`GRID ` YES Provide an ECLIPSE grid for the reservoir model. :ref:`HISTORY_SOURCE ` NO REFCASE_HISTORY Source used for historical values. +:ref:`HOOK_WORKFLOW ` NO Install a workflow to be run automatically. :ref:`HOST_TYPE ` NO :ref:`IGNORE_SCHEDULE ` NO :ref:`IMAGE_TYPE ` NO png The type of the images created when plotting. @@ -87,7 +87,6 @@ Keyword name Required by :ref:`ITER_RETRY_COUNT ` NO 4 Number of retries for a iteration - iterated ensemble smoother :ref:`JOBNAME ` NO Name used for simulation files. An alternative to ECLBASE. :ref:`JOB_SCRIPT ` NO Python script managing the forward model. -:ref:`KEEP_RUNPATH ` NO Specify realizations that simulations should be kept for. :ref:`LOAD_SEED ` NO Load random seed from given file. :ref:`LOAD_WORKFLOW ` NO Load a workflow into ERT. :ref:`LOAD_WORKFLOW_JOB ` NO Load a workflow job into ERT. @@ -118,19 +117,10 @@ Keyword name Required by :ref:`PLOT_WIDTH ` NO 1024 Pixel width of the plots. :ref:`PRE_CLEAR_RUNPATH ` NO FALSE Should the runpath be cleared before initializing? :ref:`QC_PATH ` NO QC ... -:ref:`QC_WORKFLOW ` NO Name of existing workflow to do QC work. :ref:`QUEUE_SYSTEM ` NO System used for running simulation jobs. :ref:`REFCASE ` NO (see HISTORY_SOURCE and SUMMARY) Reference case used for observations and plotting. :ref:`REFCASE_LIST ` NO Full path to Eclipse .DATA files containing completed runs (which you can add to plots) -:ref:`REPORT_CONTEXT ` NO Values for variables used in report templates. -:ref:`REPORT_GROUP_LIST ` NO Specify list of groups used in report templates. -:ref:`REPORT_LARGE ` NO FALSE -:ref:`REPORT_LIST ` NO List of templates used for creating reports. -:ref:`REPORT_PATH ` NO Reports Directory where final reports are stored. -:ref:`REPORT_SEARCH_PATH ` NO Search path for report templates. -:ref:`REPORT_TIMEOUT ` NO 120 Timeout for running LaTeX. -:ref:`REPORT_WELL_LIST ` NO Specify list of wells used in report templates. -:ref:`RERUN_PATH ` NO ... +:ref:`RERUN_PATH ` NO ... :ref:`RERUN_START ` NO 0 ... :ref:`RFT_CONFIG ` NO Config file specifying wellnames and dates for rft-measurments. Used for plotting. The format has to be name day month year (ex. Q-2FI 02 08 1973), with a new entry on a new line. :ref:`RFTPATH ` NO rft Path to where the rft well observations are stored @@ -141,7 +131,6 @@ Keyword name Required by :ref:`STD_SCALE_CORRELATED_OBS ` NO FALSE Try to estimate the correlations in the data to inflate the observation std. :ref:`SCHEDULE_FILE ` YES Provide an ECLIPSE schedule file for the problem. :ref:`SCHEDULE_PREDICTION_FILE ` NO Schedule prediction file. -:ref:`SELECT_CASE ` NO The current case / default You can tell ert to select a particular case on bootup. :ref:`SETENV ` NO You can modify the UNIX environment with SETENV calls. :ref:`SINGLE_NODE_UPDATE ` NO FALSE ... :ref:`STD_CUTOFF ` NO 1e-6 ... @@ -296,7 +285,13 @@ These keywords are optional. However, they serve many useful purposes, and it is .. _delete_runpath: .. topic:: DELETE_RUNPATH - When the enkf application is running it creates directories for the ECLIPSE simulations, one for each realization. When the simulations are done, the enkf will load the results into it's internal database. If you are using the enkf application as a convenient way to start many simulations, e.g. using the screening experiment option, the default behavior is to not delete these simulation directories. This behavior can be overridden with the DELETE_RUNPATH keyword, which causes enkf to delete the specified simulation directories. When running the EnKF algorithm, the behavior is the opposite. The keyword KEEP_RUNPATH can then be used to override the default behavoir. + When the ert application is running it creates directories for + the forward model simulations, one for each realization. When + the simulations are done, ert will load the results into the + internal database. By default the realization folders will be + left intact after ert has loaded the results, but using the + keyword DELETE_RUNPATH you can request to have (some of) the + directories deleted after results have been loaded. *Example A:* @@ -314,46 +309,6 @@ These keywords are optional. However, they serve many useful purposes, and it is The DELETE_RUNPATH keyword is optional. -.. _enfk_sched_file: -.. topic:: ENKF_SCHED_FILE - - When the enkf application runs the EnKF algorithm, it will use - ECLIPSE to simulate one report step at a time, and do an - update after each step. However, in some cases it will be - beneficial to turn off the EnKF update for some report steps - or to skip some steps completely. The keyword ENKF_SCHED_FILE - can point to a file with a more advanced schedule for when to - perform the updates. The format of the file pointed to by - ENKF_SCHED_FILE should be plain text, with one entry per - line. Each line should have the following form: - - :: - - REPORT_STEP1 REPORT_STEP2 ON|OFF STRIDE - ... - - Here REPORT_STEP1 and REPORT_STEP2 are the first and last - report steps respectively and ON|OFF determines whether the - EnKF analysis should be ON or OFF, the STRIDE argument is - optional. If the analysis is ON the stride will default to - REPORT_STEP2 minus REPORT_STEP1, thus if you want to perform - analysis at each report step set stride equal to 1. Observe - that whatever value of stride is used, the integration will - always start on REPORT_STEP1 and end on REPORT_STEP2. Example: - - :: - - 0 100 OFF - 100 125 ON 5 - 125 200 ON 1 - - In this example, the enkf application will do the following: - - #. Simulate directly from report step 0 to report step 100. No EnKF update will be performed. - #. From report step 100 to report step 125 it will simulate five report steps at a time, doing EnKF update at report steps 105, 110, 115, 120 and 125. - #. From report step 125 to report step 200 it will simulate one report step at a time, doing EnKF update for every timestep. - - The ENKF_SCHED_FILE keyword is optional. .. _end_date: .. topic:: END_DATE @@ -398,16 +353,6 @@ These keywords are optional. However, they serve many useful purposes, and it is The ENSPATH keyword is optional. -.. _select_case: -.. topic:: SELECT_CASE - - By default ert will remember the selected case from the - previous run, or select the case "default" if this is the - first time you start a project. By using the SELECT_CASE - keyword you can tell ert to start up with a particular - case. If the requested case does not exist ert will ignore the - SELECT_CASE command, the case will not be created - automagically. .. _history_source: .. topic:: HISTORY_SOURCE @@ -481,20 +426,6 @@ These keywords are optional. However, they serve many useful purposes, and it is The INSTALL_JOB keyword is optional. -.. _keep_runpath: -.. topic:: KEEP_RUNPATH - - When the enkf application is running it creates directories for the ECLIPSE simulations, one for each realization. If you are using the enkf application to run the EnKF algorithm, the default behavior is to delete these directories after the simulation results have been internalized. This behavior can be overridden with the KEEP_RUNPATH keyword, which causes enkf to keep the specified simulation directories. When running the enkf application as a convenient way to start many simulations, e.g. using the screening experiment option, the behavior is the opposite, and can be overridden with the DELETE_RUNPATH keyword. - - *Example:* - - :: - - -- Keep simulation directories 0 to 15 and 18 and 20 - KEEP_RUNPATH 0-15, 18, 20 - - The KEEP_RUNPATH keyword is optional. - .. _obs_config: .. topic:: OBS_CONFIG @@ -1995,173 +1926,33 @@ The name and location of this file is available as the magical string / [Work-path:/tmp/latex-XXXXXX] ...... +.. _hook_workflow: +.. topic:: HOOK_WORKFLOW -This means that ERT has created the directory /tmp/latex-XXXXXX and populated that with the file which is compiled. If there are LaTeX problems of some kind you must go to this directory to check out what is wrong, and then fix the source template. When the compilation is finished ERT will print: +With the keyword :code:`HOOK_WORKFLOW` you can configure workflow +'hooks'; meaning workflows which will be run automatically at certain +points during ERTs execution. Currently there are two points in ERTs +flow of execution where you can hook in a workflow, either just before +the simulations start, :code:`PRE_SIMULATION` - or after all the +simulations have completed :code:`POST_SIMULATION`. The +:code:`POST_SIMULATION` hook is typically used to trigger QC +workflows: :: - Creating report Reports// [Work-path:/tmp/latex-XXXXXX] ...... OK?? - -As indicated by the OK?? it is quite difficult for ERT to assert that the compilation has been successfull, so the pdf file must be opened with e.g. acroread to be certain. - - -.. _report_context: -.. topic:: REPORT_CONTEXT - - With the report context word you can define key,value pairs which will be used in a search-and-replace operation in the template. - - *Example:* - - :: - - REPORT_CONTEXT $FIELD Snorre - REPORT_CONTEXT $MODEL "DG-X sensitivity studies" - - Here every occurence of $FIELD will be replaced with 'Snorre' and every occurence of $MODEL will be replaced with 'DG-X sensitivity studies'. Observe that the config parser expects that the REPORT_CONTEXT keyword gets two space separated arguments, so quoting with "" is necessary when the value consists of several words. The use of a '$' prefix on the keys above is just a suggestion, and not a rule. - - -.. _report_list: -.. topic:: REPORT_LIST - - This should be a list of LaTeX templates which you want to use for creating reports. The arguments in this list should either be the path to an existing file, or alternatively the name of a file which can be found in REPORT_SEARCH_PATH. The search order will be to first look directly in the filesystem, and then subsequently go through the paths listed in REPORT_SEARCH_PATH - - The filename can optionally be followed by a :Name, in that case the created report will be renamed Name.pdf irrespective of the name of the template file. - - *Example:* - - :: - - REPORT_SEARCH_PATH /common/report/path - REPORT_LIST templates/report.tex /some/absolute/path/report.tex:Report2 well_report.tex:snorre_wells.tex - - In the example we specify templates for three different reports: - - #. In the relative path templates/report.tex - #. In the absolute path /some/absolute/path/report.tex - #. Assuming there is no file well_report.tex in your current directory ERT will look in the paths specified by REPORT_SEARCH_PATH. - - Observe the two latter reports will be renamed Report2.pdf and snorre_wells.pdf respectively. - - -.. _report_path: -.. topic:: REPORT_PATH - - The REPORT_PATH keyword is used to tell ERT where you want to store the finished pdf reports. A subdirectory with the current case name will be appended to this path: - - :: - - REPORT_LIST templates/well_report.tex templates/field_report.tex - REPORT_PATH Reports - - Assuming the selected case is called prior you will get the reports Reports/prior/well_report.pdf and Reports/prior/field_report.tex. - - -.. _report_search_path: -.. topic:: REPORT_SEARCH_PATH - - It is possible to install LaTeX templates for reports in a common location, the REPORT_LIST keyword will then search for the templates in these locations. You can use the REPORT_SEARCH_PATH keyword in your config file, but the most relevant use is in the global site configuration file. - - :: - - REPORT_SEARCH_PATH /common/path/well_reports /common/path/group_reports - REPORT_SEARCH_PATH /common/path/field_reports - - -.. _report_well_list: -.. topic:: REPORT_WELL_LIST - - By using the {% for x in [] %} construction in the templates it is possible to have report templates which loop over a list of wells. Unfortunately it is not very interesting to loop over all wells, because ECLIPSE has a limited amount of meta information about the wells, which means that injectors and producers will be treated equally. By using the REPORT_WELL_LIST keyword you can specify which wells you wish to include in the report, these well names will then be assembled into a list which will go into the $WELL_LIST keyword in the report template. - - :: - - REPORT_WELL_LIST C* E1-H -- Must have supplied a REFCASE for the '*' to work properly - REPORT_WELL_LIST OP* - - These well names are then assembled into a list and replace the symbol $WELL_LIST when creating the report. For this to work the report template should contain a section like: - - :: - - {% for $well in $WELL_LIST %} - % Do something with $well - {% endfor %} - - -.. _report_group_list: -.. topic:: REPORT_GROUP_LIST + HOOK_WORKFLOW initWFLOW PRE_SIMULATION + HOOK_WORKFLOW QC_WFLOW1 POST_SIMULATION + HOOK_WORKFLOW QC_WFLOW2 POST_SIMULATION - This is just like the REPORT_WELL_LIST keyword, but for groups. +In this example the the workflow :code:`initWFLOW` will run after all +the simulation directiories have been created, just before the forward +model is submitted to the queue. When all the simulations are complete +the two workflows :code:`QC_WFLOW1` and :code:`QC_WFLOW2` will be +run. Observe that the workflows being 'hooked in' with the +:code:`HOOK_WORKFLOW` must be loaded with the :code:`LOAD_WORKFLOW` +keyword. +NB: Currently the :code:`PRE_SIMULATION` workflow is never called. Manipulating the Unix environment --------------------------------- diff --git a/ThirdParty/Ert/devel/docs/user/localization/index.rst b/ThirdParty/Ert/devel/docs/user/localization/index.rst index 2095e12856..8b8f108ee3 100644 --- a/ThirdParty/Ert/devel/docs/user/localization/index.rst +++ b/ThirdParty/Ert/devel/docs/user/localization/index.rst @@ -16,28 +16,69 @@ An alterative way to 'program' the local config commands is by writing a Python Not all the commands available from the local config programming are supported for Python scripting. -**Local config ERT script example:** +**Local config python script example:** :: - from ert.enkf import ErtScript - from ert.enkf import LocalConfig - - class LocalConfigJob(ErtScript): - - - def run(self): - - ert = self.ert() - local_config = ert.getLocalConfig() - - # Add your local config commands here - dataset_multflt = local_config.createDataset("DATASET_MULTFLT") - ... + from ert.enkf import ErtScript + from ert.enkf import LocalConfig, LocalObsdata, LocalObsdataNode, LocalMinistep, LocalUpdateStep, LocalDataset, ActiveList + from ert.ecl import EclGrid, EclRegion, Ecl3DKW, EclFile, EclInitFile, EclKW, EclTypeEnum + + class LocalConfigJob(ErtScript): + + + def run(self): + + # This example can be used with the REEK data set from the ERT tutorial + + # Get the ert object + ert = self.ert() + + # Get local config object + local_config = ert.getLocalConfig() + + # Reset internal local config structure. From now you need to specify what to localize + local_config.clear() + + # There is only one update step + updatestep = local_config.getUpdatestep() + + # A ministep + ministep = local_config.createMinistep("MINISTEP" ) + + # Add some dataset you want to localize here. + dataset_multflt = local_config.createDataset("DATASET_MULTFLT") + + # Add some field and localize inside a box + data_poro = local_config.createDataset("DATA_PORO") + ecl_grid = local_config.getGrid() + ecl_region = EclRegion(ecl_grid, False) + ecl_region.select_box((0,0,0),(3,3,3)) + data_poro.addField("PORO", ecl_region) + + + # Add some index from MULTFLT to the dataset + dataset_multflt.addNode("MULTFLT") + active_list = dataset_multflt.getActiveList("MULTFLT") + active_list.addActiveIndex(0) + + # Add existing observations from WOPR:OP_1. Alternatively, use getObservations and filter the observations you want to use for this ministep. + obsdata_wopr = local_config.createObsdata("WOPR:OP_1_10") + for i in range(1,10): + obsdata_wopr.addNode("OBS"+str(i)) + + # Attach the created dataset and obsset to the ministep + ministep.attachDataset(dataset_multflt) + ministep.attachObsset(obsdata_wopr) + + # Then attach the ministep to the update step + updatestep.attachMinistep(ministep) + + # Write a .csv file for debugging. The generated file can be imported into Excel for a better tabulation of the setup + local_config.writeSummaryFile("tmp/summary_local_config.csv") + + - # Write to file for debugging - local_config.writeLocalConfigFile("tmp/debug_local_config.txt") - List of keywords @@ -45,8 +86,8 @@ List of keywords =========================================================================================== =========================================================== ============================================================================================================================================== Keyword name ERT script function Purpose =========================================================================================== =========================================================== ============================================================================================================================================== +:ref:`CREATE_UPDATESTEP ` getUpdatestep Creates/gets default updatestep :ref:`CREATE_MINISTEP ` createMinistep Creates ministep -:ref:`CREATE_UPDATESTEP ` createUpdatestep Creates updatestep :ref:`CREATE_DATASET ` createDataset Creates dataset :ref:`COPY_DATASET ` copyDataset Deep copy of dataset :ref:`CREATE_OBSSET ` createObsdata Creates observation set @@ -56,14 +97,13 @@ Keyword name :ref:`ATTACH_OBSSET ` attachObsset Attaches observation set to mini step :ref:`ADD_DATA ` addNode Adds data node to dataset :ref:`DEL_DATA ` del Deletes observation node from dataset -:ref:`ADD_OBS ` addNodeAndRange Adds observation node to observation set +:ref:`ADD_OBS ` addNode, addNodeAndRange Adds observation node to observation set for all times or in a given time range :ref:`DEL_OBS ` del Deletes observation node from observation set :ref:`DATASET_DEL_ALL_DATA ` clear Delete all the data keys from a dataset :ref:`ACTIVE_LIST_ADD_DATA_INDEX ` addActiveIndex Adds data index to the list of active indices :ref:`ACTIVE_LIST_ADD_OBS_INDEX ` addActiveIndex Adds observation index to the list of active indices :ref:`ACTIVE_LIST_ADD_MANY_DATA_INDEX ` addActiveIndex Adds several data indices to the list of active indices :ref:`ACTIVE_LIST_ADD_MANY_OBS_INDEX ` addActiveIndex Adds several observation indinces to the list of active indices -:ref:`INSTALL_DEFAULT_UPDATESTEP ` Installs default update step :ref:`ADD_FIELD ` addField Adds field node to dataset :ref:`LOAD_FILE ` EclGrid, EclInitFile, Loads eclipse file in restart format :ref:`CREATE_ECLREGION ` EclRegion Creates a new region for use when defining active regions for fields @@ -82,6 +122,8 @@ Keyword name :ref:`SURFACE_REGION_SELECT_IN_POLYGON ` Creates region to select or deselect parts of a surface :ref:`SURFACE_REGION_SELECT_LINE ` Selects or deselects parts of a surface in half space define by a line :ref:`ADD_DATA_SURFACE ` Adds surface node to dataset with elements in a surface region +| getObservations Get the observations currently imported. Use to filter the observations to localize. +| getGrid Get the underlying grid. Use to define active cells in a field. =========================================================================================== =========================================================== ============================================================================================================================================== .. ########################################################################################################### @@ -89,23 +131,23 @@ Keyword name .. _create_updatestep: .. topic:: CREATE_UPDATESTEP - | This function will create a new updatestep with the name 'NAME_OF_UPDATESTEP'. Observe that you must add (at least) one ministep to the updatestep, otherwise it will not be able to do anything. - + | This function will create a updatestep with the name 'NAME_OF_UPDATESTEP'. + | Observe that you must add (at least) one ministep to the updatestep, otherwise it will not be able to do anything. + | Currently supports only one update step. It is kept here due to historical reasons when it was possible to have several update steps. *Example:* :: - -- Update step in time interval 0->1 - CREATE_UPDATESTEP UPDATESTEP_0_1 + -- Updatestep + CREATE_UPDATESTEP DEFAULT *Example:* :: - update_step_0_1 = local_config.createUpdatestep("UPDATESTEP_0_1") - + updatestep = local_config.getUpdatestep() .. ########################################################################################################### @@ -119,14 +161,14 @@ Keyword name :: - -- Mini step 0 in update step 0->1 - CREATE_MINISTEP MINISTEP_0_1_0 + -- Ministep in updatestep + CREATE_MINISTEP MINISTEP *Example:* :: - ministep_0_1_0 = local_config.createMinistep("MINISTEP_0_1_0") + ministep = local_config.createMinistep("MINISTEP") @@ -213,14 +255,14 @@ Keyword name :: - -- Attach MINISTEP_0_1_0 to UPDATESTEP_0_1 - ATTACH_MINISTEP UPDATESTEP_0_1 MINISTEP_0_1_0 + -- Attach MINISTEP to UPDATESTEP + ATTACH_MINISTEP UPDATESTEP MINISTEP *Example:* :: - update_step_0_1.attachMinistep(ministep_0_1_0) + update_step.attachMinistep(ministep) .. ########################################################################################################### @@ -234,14 +276,14 @@ Keyword name :: - -- Attach DATASET_MULTFLT to MINISTEP_0_1_0 - ATTACH_MINISTEP MINISTEP_0_1_0 DATASET_MULTFLT + -- Attach DATASET_MULTFLT to MINISTEP + ATTACH_MINISTEP MINISTEP DATASET_MULTFLT *Example:* :: - ministep_0_1_0.attachDataset(dataset_multflt) + ministep.attachDataset(dataset_multflt) .. ########################################################################################################### @@ -255,14 +297,14 @@ Keyword name :: - -- Attach OBS_WELL to MINISTEP_0_1_0 - ATTACH_MINISTEP MINISTEP_0_1_0 OBS_WELL + -- Attach OBS_WELL to MINISTEP + ATTACH_MINISTEP MINISTEP OBS_WELL *Example:* :: - ministep_0_1_0.attachObsset(obsset_obs_well) + ministep.attachObsset(obsset_obs_well) .. ########################################################################################################### @@ -329,6 +371,9 @@ Keyword name -- The obsset has a time range obsset_obs_well.addNodeAndRange("WOPR:OBS_WELL", 0, 1) + + -- All times are active + obsset_obs_well.addNode("WOPR:OBS_WELL") .. ########################################################################################################### @@ -449,23 +494,6 @@ Keyword name -- Add index 0, 1 and 2 from data WOPR:OBS_WELL to obsset OBS_WELL ACTIVE_LIST_ADD_MANY_OBS_INDEX OBS_WELL WOPR:OBS_WELL 0 1 2 -.. ########################################################################################################### - - -.. _install_default_updatestep: -.. topic:: INSTALL_DEFAULT_UPDATESTEP - - | This function will install 'NAME_OF_UPDATESTEP' as the default updatestep which applies to all report steps where you have not explicitly set another updatestep with the INSTALL_UPDATESTEP function. - - - - *Example:* - - :: - - -- Install default update step - INSTALL_DEFAULT_UPDATESTEP ALL_ACTIVE - .. ########################################################################################################### diff --git a/ThirdParty/Ert/devel/docs/user/magic_strings/index.rst b/ThirdParty/Ert/devel/docs/user/magic_strings/index.rst new file mode 100644 index 0000000000..9252b0a1aa --- /dev/null +++ b/ThirdParty/Ert/devel/docs/user/magic_strings/index.rst @@ -0,0 +1,30 @@ +.. _ert_magic_strings_full_doc: + +Magic Strings +=================================== + +Magic strings are special keywords that can be used in configuration files and templates which have special meanings. + +ERT Config +---------- + +These magic strings are available in the ERT config file. + +**** + +Inserts the config file name with extension into the config file. + +:: + + ENSPATH storage//ensemble + +If the config file is named *config.ert* then the resulting storage path will be: + +:: + + storage/config.ert/ensemble + + +**** + +Same as but inserts the config file name without the extension into the config file. diff --git a/ThirdParty/Ert/devel/docs/user/workflows/index.rst b/ThirdParty/Ert/devel/docs/user/workflows/index.rst index c3368629b0..f086a7a2bc 100644 --- a/ThirdParty/Ert/devel/docs/user/workflows/index.rst +++ b/ThirdParty/Ert/devel/docs/user/workflows/index.rst @@ -195,36 +195,28 @@ Jobs related to running simulations - including updates **RUN_SMOOTHER** -The RUN_SMOOTHER job will run a simulation and perform an update. The updated parameters are default stored as the new initial parameters of the current case. Optionally the job can take 1 or 2 parameters. The case to store the updated parameters in can be specified as the first argument. A second argument can be specified to run a simulation with the updated parameters. +The RUN_SMOOTHER job will run a simulation and perform an update. The +job has one required argument - the name of a case where the updated +parameters are stored. Optionally the job can take a second boolean +argument, if the second argument is set to true the job will rerun +based on the updated parameters. - -Run a simulation and an update. The updated parameters are stored as the new initial parameters of the current case: - -:: - - RUN_SMOOTHER - - -Run a simulation and an update. Store the updated parameters in the specified case. This case is created if it does not exist: +Run a simulation and an update. Store the updated parameters in the +specified case. This case is created if it does not exist: :: RUN_SMOOTHER new_case -Run a simulation and an update. Store the updated parameters in the specified case, then run a simulation on this case: +Run a simulation and an update. Store the updated parameters in the +specified case, then run a simulation on this case: :: RUN_SMOOTHER new_case true -Run a simulation and an update. Store the updated parameters in the current case, then run a simulation again. Specify "*" to use the current case: - -:: - - RUN_SMOOTHER * true - **RUN_SMOOTHER_WITH_ITER** diff --git a/ThirdParty/Ert/devel/libanalysis/src/CMakeLists.txt b/ThirdParty/Ert/devel/libanalysis/src/CMakeLists.txt index c4826a0a2b..43f214521f 100644 --- a/ThirdParty/Ert/devel/libanalysis/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libanalysis/src/CMakeLists.txt @@ -3,7 +3,7 @@ set( source_files analysis_module.c enkf_linalg.c std_enkf.c sqrt_enkf.c cv_enkf set( header_files analysis_module.h enkf_linalg.h analysis_table.h std_enkf.h fwd_step_enkf.h) add_library( analysis SHARED ${source_files} ) set_target_properties( analysis PROPERTIES COMPILE_DEFINITIONS INTERNAL_LINK) -set_target_properties( analysis PROPERTIES VERSION 1.0 SOVERSION 1.0 ) +set_target_properties( analysis PROPERTIES VERSION ${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} SOVERSION ${ERT_VERSION_MAJOR} ) target_link_libraries( analysis ert_util ) target_link_libraries( analysis dl ) diff --git a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_content.h b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_content.h index 63158f77f4..73520feb63 100644 --- a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_content.h +++ b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_content.h @@ -50,6 +50,7 @@ typedef struct config_content_struct config_content_type; int config_content_iget_as_int( const config_content_type * content , const char * key , int occurence , int index); bool config_content_iget_as_bool( const config_content_type * content , const char * key , int occurence , int index); double config_content_iget_as_double( const config_content_type * content , const char * key , int occurence , int index); + const char * config_content_iget_as_path( const config_content_type * content , const char * key , int occurence , int index); const char * config_content_safe_iget(const config_content_type * content , const char *kw, int occurence , int index); int config_content_get_occurences(const config_content_type * content, const char * kw); diff --git a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_parser.h b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_parser.h index b156f8012a..9438388675 100644 --- a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_parser.h +++ b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_parser.h @@ -49,7 +49,7 @@ typedef struct config_parser_struct config_parser_type; void config_free(config_parser_type *); config_parser_type * config_alloc( ); char ** config_alloc_active_list(const config_parser_type * , int * ); - config_content_type * config_parse(config_parser_type * , const char * , const char * , const char * , const char * , config_schema_unrecognized_enum unrecognized_behaviour , bool ); + config_content_type * config_parse(config_parser_type * config, const char * filename, const char * comment_string, const char * include_kw, const char * define_kw, const hash_type * pre_defined_kw_map, config_schema_unrecognized_enum unrecognized_behaviour , bool validate); bool config_has_schema_item(const config_parser_type * config , const char * kw); /*****************************************************************/ diff --git a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_schema_item.h b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_schema_item.h index 96243b456d..05b2a5f6e4 100644 --- a/ThirdParty/Ert/devel/libconfig/include/ert/config/config_schema_item.h +++ b/ThirdParty/Ert/devel/libconfig/include/ert/config/config_schema_item.h @@ -32,44 +32,25 @@ extern "C" { /** Types used for validation of config items. */ -typedef enum {CONFIG_STRING = 1, - CONFIG_INT = 2, - CONFIG_FLOAT = 4, - CONFIG_PATH = 8, - CONFIG_EXISTING_PATH = 16, - CONFIG_BOOL = 32, - CONFIG_CONFIG = 64, - CONFIG_BYTESIZE = 128, - CONFIG_EXECUTABLE = 256 , - CONFIG_INVALID = 512 } config_item_types; - -#define CONFIG_ITEM_TYPE_ENUM_DEFS \ -{.value = 1 , .name="CONFIG_STRING"}, \ -{.value = 2 , .name="CONFIG_INT"}, \ -{.value = 4 , .name="CONFIG_FLOAT"}, \ -{.value = 8 , .name="CONFIG_PATH"}, \ -{.value = 16 , .name="CONFIG_EXISTING_PATH"}, \ -{.value = 32 , .name="CONFIG_BOOL"}, \ -{.value = 64 , .name="CONFIG_CONFIG"}, \ -{.value = 128 , .name="CONFIG_BYTESIZE"}, \ -{.value = 256 , .name="CONFIG_EXECUTABLE"}, \ -{.value = 512 , .name="CONFIG_INVALID"} -#define CONFIG_ITEM_TYPE_ENUM_SIZE 10 - - - typedef enum { +typedef enum { + CONFIG_STRING = 1, + CONFIG_INT = 2, + CONFIG_FLOAT = 4, + CONFIG_PATH = 8, + CONFIG_EXISTING_PATH = 16, + CONFIG_BOOL = 32, + CONFIG_CONFIG = 64, + CONFIG_BYTESIZE = 128, + CONFIG_EXECUTABLE = 256, + CONFIG_INVALID = 512 +} config_item_types; + + +typedef enum { CONFIG_UNRECOGNIZED_IGNORE = 0, CONFIG_UNRECOGNIZED_WARN = 1, CONFIG_UNRECOGNIZED_ERROR = 2 - } config_schema_unrecognized_enum; - - -#define CONFIG_SCHEMA_UNRECOGNIZED_ENUM_DEFS \ -{.value = 0 , .name="CONFIG_UNRECOGNIZED_IGNORE"}, \ -{.value = 1 , .name="CONFIG_UNRECOGNIZED_WARN"}, \ -{.value = 2 , .name="CONFIG_UNRECOGNIZED_ERROR"} -#define CONFIG_SCHEMA_UNRECOGNIZED_ENUM_SIZE 3 - +} config_schema_unrecognized_enum; diff --git a/ThirdParty/Ert/devel/libconfig/src/CMakeLists.txt b/ThirdParty/Ert/devel/libconfig/src/CMakeLists.txt index 3c0a76d4a3..4f5217b223 100644 --- a/ThirdParty/Ert/devel/libconfig/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libconfig/src/CMakeLists.txt @@ -2,7 +2,7 @@ set( source_files config_parser.c config_content.c config_error.c config_schema_ set( header_files config_parser.h config_content.h config_error.h config_schema_item.h config_content_item.h config_content_node.h config_root_path.h config_path_elm.h conf.h conf_data.h) add_library( config ${LIBRARY_TYPE} ${source_files} ) -set_target_properties( config PROPERTIES VERSION 1.0 SOVERSION 1.0 ) +set_target_properties( config PROPERTIES VERSION ${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} SOVERSION ${ERT_VERSION_MAJOR} ) target_link_libraries( config ert_util ) if (USE_RUNPATH) diff --git a/ThirdParty/Ert/devel/libconfig/src/config_content.c b/ThirdParty/Ert/devel/libconfig/src/config_content.c index 507456aa54..b96592b782 100644 --- a/ThirdParty/Ert/devel/libconfig/src/config_content.c +++ b/ThirdParty/Ert/devel/libconfig/src/config_content.c @@ -110,6 +110,8 @@ config_error_type * config_content_get_errors( const config_content_type * conte void config_content_free( config_content_type * content ) { vector_free( content->nodes ); + vector_free( content->path_elm_stack ); + vector_free( content->path_elm_storage ); hash_free( content->items ); config_error_free( content->parse_errors ); subst_list_free( content->define_list ); @@ -197,6 +199,12 @@ double config_content_iget_as_double( const config_content_type * content , cons return config_content_item_iget_as_double(item , occurence , index); } +const char * config_content_iget_as_path( const config_content_type * content , const char * key , int occurence , int index) { + config_content_item_type * item = config_content_get_item(content , key); + config_content_node_type * node = config_content_item_iget_node( item , index ); + return config_content_node_iget_as_path(node , index); +} + /** This function will return NULL is the item has not been set, diff --git a/ThirdParty/Ert/devel/libconfig/src/config_parser.c b/ThirdParty/Ert/devel/libconfig/src/config_parser.c index fce75df223..7afe49eee3 100644 --- a/ThirdParty/Ert/devel/libconfig/src/config_parser.c +++ b/ThirdParty/Ert/devel/libconfig/src/config_parser.c @@ -192,10 +192,12 @@ static config_content_node_type * config_content_item_set_arg__(subst_list_type int iarg; for (iarg = 0; iarg < argc; iarg++) { int env_offset = 0; - char * env_var; - do { - env_var = util_isscanf_alloc_envvar( stringlist_iget(token_list , iarg + 1) , env_offset ); - if (env_var != NULL) { + while (true) { + char * env_var = util_isscanf_alloc_envvar( stringlist_iget(token_list , iarg + 1) , env_offset ); + if (env_var == NULL) + break; + + { const char * env_value = getenv( &env_var[1] ); if (env_value != NULL) { char * new_value = util_string_replace_alloc( stringlist_iget( token_list , iarg + 1 ) , env_var , env_value ); @@ -205,7 +207,9 @@ static config_content_node_type * config_content_item_set_arg__(subst_list_type fprintf(stderr,"** Warning: environment variable: %s is not defined \n", env_var); } } - } while (env_var != NULL); + + free( env_var ); + } } } @@ -637,11 +641,25 @@ config_content_type * config_parse(config_parser_type * config , const char * comment_string , const char * include_kw , const char * define_kw , + const hash_type * pre_defined_kw_map, config_schema_unrecognized_enum unrecognized_behaviour, bool validate) { config_content_type * content = config_content_alloc( ); + if(pre_defined_kw_map != NULL) { + hash_iter_type * keys = hash_iter_alloc(pre_defined_kw_map); + + while(!hash_iter_is_complete(keys)) { + const char * key = hash_iter_get_next_key(keys); + const char * value = hash_get(pre_defined_kw_map, key); + config_content_add_define( content , key , value ); + } + + hash_iter_free(keys); + } +// + if (util_file_readable( filename )) { path_stack_type * path_stack = path_stack_alloc(); { diff --git a/ThirdParty/Ert/devel/libconfig/src/config_schema_item.c b/ThirdParty/Ert/devel/libconfig/src/config_schema_item.c index 2934d8a498..37aceb6469 100644 --- a/ThirdParty/Ert/devel/libconfig/src/config_schema_item.c +++ b/ThirdParty/Ert/devel/libconfig/src/config_schema_item.c @@ -87,7 +87,7 @@ struct validate_struct { #define CONFIG_SCHEMA_ITEM_ID 6751 struct config_schema_item_struct { UTIL_TYPE_ID_DECLARATION; - char * kw; /* The kw which identifies this item· */ + char * kw; /* The kw which identifies this item */ bool required_set; @@ -526,12 +526,3 @@ stringlist_type * config_schema_item_get_required_children_value(const config_sc /*****************************************************************/ /* Small functions to support enum introspection. */ - -const char * config_schema_item_type_enum_iget( int index, int * value) { - return util_enum_iget( index , CONFIG_ITEM_TYPE_ENUM_SIZE , (const util_enum_element_type []) { CONFIG_ITEM_TYPE_ENUM_DEFS }, value); -} - - -const char * config_schema_item_unrecognized_enum_iget( int index, int * value) { - return util_enum_iget( index , CONFIG_SCHEMA_UNRECOGNIZED_ENUM_SIZE , (const util_enum_element_type []) { CONFIG_SCHEMA_UNRECOGNIZED_ENUM_DEFS }, value); -} diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_append_test.c b/ThirdParty/Ert/devel/libconfig/tests/config_append_test.c index e2eeaa0803..4c89d18853 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_append_test.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_append_test.c @@ -33,7 +33,7 @@ int main(int argc , char ** argv) { config_schema_item_set_argc_minmax( item , 1 , 1); { - config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , false , true ); + config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , NULL , false , true ); test_assert_true(config_content_is_instance( content )); test_assert_true(config_content_is_valid( content )); test_assert_int_equal( config_content_get_occurences( content , "APPEND" ) , 3); @@ -47,7 +47,7 @@ int main(int argc , char ** argv) { } { - config_content_type * content = config_parse( config , "DoesNotExist" , "--" , NULL , NULL , false , true); + config_content_type * content = config_parse( config , "DoesNotExist" , "--" , NULL , NULL , NULL , false , true); test_assert_false( config_content_is_valid( content )); config_content_free( content ); } diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_argc.c b/ThirdParty/Ert/devel/libconfig/tests/config_argc.c index da32176017..067023672e 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_argc.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_argc.c @@ -49,14 +49,14 @@ int main(int argc , char ** argv) { config_schema_item_set_argc_minmax( schema_item , 2 , 2 ); { - config_content_type * content = config_parse( config , argc_OK , "--" , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); + config_content_type * content = config_parse( config , argc_OK , "--" , NULL , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); test_assert_true( config_content_is_instance( content )); test_assert_true(config_content_is_valid( content )); config_content_free( content ); } { - config_content_type * content = config_parse( config , argc_less , "--" , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); + config_content_type * content = config_parse( config , argc_less , "--" , NULL , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); test_assert_true( config_content_is_instance( content )); test_assert_false( config_content_is_valid( content )); @@ -71,7 +71,7 @@ int main(int argc , char ** argv) { } { - config_content_type * content = config_parse( config , argc_more , "--" , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); + config_content_type * content = config_parse( config , argc_more , "--" , NULL , NULL , NULL , CONFIG_UNRECOGNIZED_ERROR , true); test_assert_true( config_content_is_instance( content )); test_assert_false( config_content_is_valid( content )); { diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_content_item.c b/ThirdParty/Ert/devel/libconfig/tests/config_content_item.c index f79a0ca601..0b8ab1aa41 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_content_item.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_content_item.c @@ -37,7 +37,7 @@ int main(int argc , char ** argv) { config_add_schema_item( config , "NOTSET" , false ); { - config_content_type * content = config_parse( config , config_file , "--" , "INCLUDE" , NULL , CONFIG_UNRECOGNIZED_IGNORE , true ); + config_content_type * content = config_parse( config , config_file , "--" , "INCLUDE" , NULL , NULL , CONFIG_UNRECOGNIZED_IGNORE , true ); test_assert_true( config_content_is_instance( content )); test_assert_true(config_content_is_valid( content )); diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_define.c b/ThirdParty/Ert/devel/libconfig/tests/config_define.c index c10eb27f86..386ab0c655 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_define.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_define.c @@ -28,9 +28,11 @@ #include #include - void test_define(config_parser_type * config , const char * config_file) { - config_content_type * content = config_parse( config , config_file , NULL , NULL , "DEFINE" , CONFIG_UNRECOGNIZED_IGNORE , true ); + hash_type * pre_defined_kw_map = hash_alloc(); + hash_insert_string(pre_defined_kw_map, "", "TEST_VALUE"); + config_content_type * content = config_parse( config , config_file , NULL , NULL , "DEFINE" , pre_defined_kw_map , CONFIG_UNRECOGNIZED_IGNORE , true ); + hash_free(pre_defined_kw_map); test_assert_true( config_content_is_instance( content )); test_assert_true(config_content_is_valid( content )); { @@ -38,13 +40,16 @@ void test_define(config_parser_type * config , const char * config_file) { test_assert_true( subst_list_has_key( define_list , "VAR1")); test_assert_true( subst_list_has_key( define_list , "VAR2")); test_assert_true( subst_list_has_key( define_list , "VARX")); + test_assert_true( subst_list_has_key( define_list , "")); test_assert_false( subst_list_has_key( define_list , "VARY")); test_assert_string_equal( subst_list_get_value( define_list , "VAR1") , "100"); test_assert_string_equal( subst_list_get_value( define_list , "VAR2") , "10"); test_assert_string_equal( subst_list_get_value( define_list , "VARX") , "1"); + test_assert_string_equal( subst_list_get_value( define_list , "") , "TEST_VALUE"); } + config_content_free( content ); } diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_include_test.c b/ThirdParty/Ert/devel/libconfig/tests/config_include_test.c index d310e580a0..593a34af5b 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_include_test.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_include_test.c @@ -53,7 +53,7 @@ void parse_test(config_parser_type * config , config_rel_path = util_alloc_rel_path( NULL , config_abs_path); { - config_content_type * content = config_parse( config , config_file , "--" , "INCLUDE" , NULL , CONFIG_UNRECOGNIZED_IGNORE , true ); + config_content_type * content = config_parse( config , config_file , "--" , "INCLUDE" , NULL , NULL , CONFIG_UNRECOGNIZED_IGNORE , true ); if (config_content_is_valid( content )) { char * relpath0 = util_alloc_filename( config_rel_path , path0, NULL); diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_node_test.c b/ThirdParty/Ert/devel/libconfig/tests/config_node_test.c index 699aeeb69c..7f18c4fd7e 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_node_test.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_node_test.c @@ -32,7 +32,7 @@ int main(int argc , char ** argv) { } config_add_schema_item(config , "NEXT" , false ); - config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , false , true ); + config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , NULL , false , true ); if (config_content_is_valid( content )) { if (config_content_get_size( content ) == 4) { diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_typeFail.c b/ThirdParty/Ert/devel/libconfig/tests/config_typeFail.c index bfedc12d38..c3a113adf7 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_typeFail.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_typeFail.c @@ -49,7 +49,7 @@ int main(int argc , char ** argv) { } { - config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , false , true ); + config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , NULL , false , true ); if (config_content_is_valid( content )) { error("Parse error\n"); diff --git a/ThirdParty/Ert/devel/libconfig/tests/config_typeOK.c b/ThirdParty/Ert/devel/libconfig/tests/config_typeOK.c index 7dc4bc59fb..e68c4e929c 100644 --- a/ThirdParty/Ert/devel/libconfig/tests/config_typeOK.c +++ b/ThirdParty/Ert/devel/libconfig/tests/config_typeOK.c @@ -42,7 +42,7 @@ int main(int argc , char ** argv) { config_schema_item_set_argc_minmax( item , 3 , CONFIG_DEFAULT_ARG_MAX ); } { - config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , false , true ); + config_content_type * content = config_parse(config , config_file , "--" , NULL , NULL , NULL , false , true ); test_assert_true( config_content_is_valid( content )); config_content_free( content ); } diff --git a/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt b/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt index f69cef80dd..fa498fa89c 100644 --- a/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt @@ -2,9 +2,9 @@ if (BUILD_APPLICATIONS) add_executable( sum_write sum_write.c ) add_executable( make_grid make_grid.c ) add_executable( grdecl_grid grdecl_grid.c ) - add_executable( summary2csv summary2csv.c ) - add_executable( summary2csv2 summary2csv2.c ) if (ERT_LINUX) + add_executable( ecl_pack.x ecl_pack.c ) + add_executable( ecl_unpack.x ecl_unpack.c ) add_executable( esummary.x esummary.c ) add_executable( convert.x convert.c ) add_executable( grdecl_test.x grdecl_test.c ) @@ -16,12 +16,11 @@ if (BUILD_APPLICATIONS) add_executable( summary.x view_summary.c ) add_executable( select_test.x select_test.c ) add_executable( load_test.x load_test.c ) - set(program_list summary2csv2 summary2csv esummary.x kw_extract.x grdecl_grid make_grid sum_write load_test.x grdecl_test.x grid_dump_ascii.x select_test.x grid_dump.x convert.x kw_list.x grid_info.x summary.x) + set(program_list ecl_pack.x ecl_unpack.x esummary.x kw_extract.x grdecl_grid make_grid sum_write load_test.x grdecl_test.x grid_dump_ascii.x select_test.x grid_dump.x convert.x kw_list.x grid_info.x summary.x) else() # The stupid .x extension creates problems on windows - add_executable( convert convert.c ) - add_executable( grdecl_test grdecl_test.c ) - add_executable( kw_list kw_list.c ) + add_executable( ecl_pack ecl_pack.c ) + add_executable( ecl_unpack ecl_unpack.c ) add_executable( kw_extract kw_extract.c ) add_executable( grid_info grid_info.c ) add_executable( grid_dump grid_dump.c ) @@ -29,7 +28,7 @@ if (BUILD_APPLICATIONS) add_executable( summary view_summary.c ) add_executable( select_test select_test.c ) add_executable( load_test load_test.c ) - set(program_list summary2csv2 summary2csv kw_extract grdecl_grid make_grid sum_write load_test grdecl_test grid_dump_ascii select_test grid_dump convert kw_list grid_info summary) + set(program_list ecl_pack ecl_unpack kw_extract grdecl_grid make_grid sum_write load_test grid_dump_ascii select_test grid_dump grid_info summary) endif() if (BUILD_ERT) @@ -58,26 +57,6 @@ if (BUILD_APPLICATIONS) endforeach() endif() -if (BUILD_ENS_PLOT) - include_directories( ${PLPLOT_HEADER} ) - add_executable( ens_plot.x ens_plot.c ) - target_link_libraries( ens_plot.x plot ecl) - if (USE_RUNPATH) - add_runpath( ens_plot.x ) - endif() - - set (destination ${CMAKE_INSTALL_PREFIX}/bin) - if (INSTALL_ERT) - install(TARGETS ens_plot.x DESTINATION ${destination}) - if (INSTALL_GROUP) - install(CODE "EXECUTE_PROCESS(COMMAND chgrp ${INSTALL_GROUP} ${destination}/ens_plot.x)") - install(CODE "EXECUTE_PROCESS(COMMAND chmod g+w ${destination}/ens_plot.x)") - endif() - endif() -endif() - - - if (BUILD_ECL_SUMMARY) add_executable( ecl_summary view_summary.c ) target_link_libraries( ecl_summary ecl) diff --git a/ThirdParty/Ert/devel/libecl/applications/ecl_pack.c b/ThirdParty/Ert/devel/libecl/applications/ecl_pack.c index d212d8e82f..0dacd92249 100644 --- a/ThirdParty/Ert/devel/libecl/applications/ecl_pack.c +++ b/ThirdParty/Ert/devel/libecl/applications/ecl_pack.c @@ -92,7 +92,7 @@ int main(int argc, char ** argv) { prev_report_step = report_step; msg_update(msg , stringlist_iget( filelist , i)); { - ecl_file_type * src_file = ecl_file_open( stringlist_iget( filelist , i) ); + ecl_file_type * src_file = ecl_file_open( stringlist_iget( filelist , i) , 0 ); if (target_type == ECL_UNIFIED_RESTART_FILE) { /* Must insert the SEQNUM keyword first. */ ecl_kw_iset_int(seqnum_kw , 0 , report_step); diff --git a/ThirdParty/Ert/devel/libecl/applications/ecl_quantile.c b/ThirdParty/Ert/devel/libecl/applications/ecl_quantile.c index 8bfe042f7c..49da8a653c 100644 --- a/ThirdParty/Ert/devel/libecl/applications/ecl_quantile.c +++ b/ThirdParty/Ert/devel/libecl/applications/ecl_quantile.c @@ -830,7 +830,7 @@ int main( int argc , char ** argv ) { const char * config_arg = argv[1]; config_init( config ); - content = config_parse( config , config_arg , "--" , NULL , NULL , CONFIG_UNRECOGNIZED_WARN, true ); + content = config_parse( config , config_arg , "--" , NULL , NULL , NULL , CONFIG_UNRECOGNIZED_WARN, true ); if (config_content_is_valid( content )) { char * config_path; diff --git a/ThirdParty/Ert/devel/libecl/applications/ecl_unpack.c b/ThirdParty/Ert/devel/libecl/applications/ecl_unpack.c index b4542b1ee9..dea205e809 100644 --- a/ThirdParty/Ert/devel/libecl/applications/ecl_unpack.c +++ b/ThirdParty/Ert/devel/libecl/applications/ecl_unpack.c @@ -17,13 +17,15 @@ */ #include -#include -#include -#include -#include -#include -#include -#include + +#include +#include + +#include +#include +#include +#include +#include void unpack_file(const char * filename) { ecl_file_enum target_type = ECL_OTHER_FILE; @@ -41,7 +43,7 @@ void unpack_file(const char * filename) { printf("** Warning: when unpacking unified summary files it as ambigous - starting with 0001 -> \n"); } { - ecl_file_type * src_file = ecl_file_open( filename ); + ecl_file_type * src_file = ecl_file_open( filename , 0 ); int size; int offset; int report_step = 0; diff --git a/ThirdParty/Ert/devel/libecl/applications/ens_plot.c b/ThirdParty/Ert/devel/libecl/applications/ens_plot.c deleted file mode 100644 index 87be8abb1b..0000000000 --- a/ThirdParty/Ert/devel/libecl/applications/ens_plot.c +++ /dev/null @@ -1,1988 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'ens_plot.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -/* - The ens_plot program is a very simple program created to plot - ensembles of many related ECLIPSE simulations. The program is mainly - designed to be invoked from BASRA, and hence not optimized for - simple standalone use. However the communication with BASRA is based - on reading commands from stdin, and those commands could in - prinicple just as well come from a user generated file. The format - for the command files is documented here. - - The very first element in the file should be the path to where you - want the created files to go. After the path name on the first line - the main loop of the ens_plot.x program evolves around the five - 'commands': - - C : Create a new ensemble - P : Plot - A : Set attributes of an ensemble - QUANTILES : Plot an ensemble using quantiles instead of many lines - Q : Quit - - Each command should be entered on a separate line of the command - stream. The various main commands then take options and arguments on - the following lines of the command stream. - - - C : CREATE_ENS_CMD - ------------------ - The CREATE_ENS_CMD command will create a new ensemble. On the first - line after the 'C' command the program expects the name of the - ensemble, i.e. for instance 'Prior', and then the ECLIPSE datafiles - for each simulation case on seperate lines. The CREATE_ENS_CMD - command should be terminated with a '_stop_' line. For each case - the program will load the summary data of the case, and the .RFT - file - if present. In the example below we create an ensemble - called Prior consisting of three simulations: - -C -Prior -/path/to/sim1/ECLIPSE1.DATA -/path/to/sim2/ECLIPSE2.DATA -/path/to/sim3/ECLIPSE3.DATA -_stop_ - - P : PLOT_CMD - ------------ - The plot command will plot the selected variables and ensemble to a - png file. The 'P' command requires at the minimum the variable to - plot and ensembles to plot, but can in addition accept several extra - parameters. Assuming you have used the 'C' command to create two - ensembles 'Prior' and 'Posterior' you can plot the water cut in well - XYZ like this: - -P -WWCT:XYZ -Prior -Posterior -_stop_ - - The variable to plot, i.e. the WWCT:XYZ on the second line, follows - the format from the summary.x program, alternatively the ens_plot.x - program can be used to plot pressure-depth relationships from RFT - surveys. In that case the key should be given as: - - RFT:WELL:10/12/2008 - - i.e. the magic string 'RFT', followed by the well name and finally - the date of the survey, the items separated with ':'. - - The plot created will be a png file stored in the path given as - first element in the command file, and with the key as basename. - - The 'P' command is quite flexible, and the following is possible, in - addition to the minimum behaviour described above: - - - Additional keys: If you e.g. want to plot both the oil production - rate, and accumulated oil production you can do that with the - command _newplotvector_ followed by the new key: - - P - WOPR:XYZ - Prior - Posterior - _newplotvector_ - WOPT:XYZ - Prior - Posterior - _stop_ - - Observe that the ensemble names 'Prior' and 'Posterior' must be - repeated after the second key has been entered. The - _newplotvector_ can not be used to combine summary and RFT data in - the same plot. - - - Adding observations: In a history matching context it is typically - interesting to include observed data. This can be done with the - subcommand '_meas_points_'. The '_meas_points_' command expects - each datapoint to come on a separate line, the observed points can - come in different formats. In the case of summary plots the - alternatives are: - - xy date value - xyy date low_value high_value - xxy days1 days2 value - - The 'xy' format will plot a point, and the 'xyy' and 'xxy' - alternatives will plot a vertical and horizontal error bar - respectively. Observe that the '_meas_points_' command must be - terminated with it's own '_stop_' command; so to add two - observations of WWCT - with an accomanpying uncertainty - you - should plot like: - - P - WWCT:XYZ - Prior - Posterior - _meas_points_ - xyy 10/10/2009 0.45 0.55 - xyy 10/01/2010 0.70 0.80 - _stop_ - _stop_ - - For RFT plots the format for adding observed values is different, - there each line of observed data should consist of a pressure - measurement from a cell. So to add two pressure measurements when - plotting an rft: - - P - RFT:XYZ:10/10/2010 - Prior - Posterior - _meas_points_ - rft - rft - _stop_ - _stop_ - - Of course actual values should be used for the cell coordinates - (i,j,k) and the low and high pressures P_low and P_high. - - - Setting the range: By defualt the ens_plot program will adjust the - axis to include all the supplied data, but by using the - '_set_range_' command you can manually set the xmin,xmax,ymin and - ymax properties of the axes. The range should be set with one line - formatted like this: - - VAR value VAR value VAR value ... - - Where VAR is one of the identifieres 'XMIN', 'XMAX', 'YMIN' and - 'YMAX' and value is the value of the preceeding identifier. In the - case of summary plots the XMIN and XMAX properties should be - dates, whereas they are pressures in the case of RFT plots. So; to - only focus on the the year 2010 in a summary plot you could use - the following statement: - - _set_range_ - XMIN 01/01/2010 XMAX 31/12/2010 - - as part of your PLOT command. - - - A : ATTRIBUTES_CMD - ------------------ - The attributes command can be used to set the color of the plotted - lines on a per-ensemble basis. So to set 'Prior' ensemble to be - plotted with red lines and the 'Posterior' with blue lines you can - issue the following command sequence: - - A - Prior - 1 - A - Posterior - 9 - - The colors must be given with the numerical values, the codes are as - follows: - - WHITE = 0, - RED = 1, - YELLOW = 2, - GREEN = 3, - AQUAMARINE = 4, - PINK = 5, - WHEAT = 6, - GRAY = 7, - BROWN = 8, - BLUE = 9, - VIOLET = 10, - CYAN = 11, - TURQUOISE = 12, - MAGENTA = 13, - SALMON = 14, - BLACK = 15 - - No attributes beyond color ... - - - QUANTILES - --------- - - By default the ens_plot program will plot the ensemble by plotting - all the realisations, by using the 'QUANTILES' command you can - choose to plot quantiles like P10 and P90 instead of the individual - realisations. The QUANTILES command takes additional arguments on - seperate lines like this: - - Turn on quantile plotting: - - QUANTILES - Prior <- The name of the ensemble - 1 <- Use quantiles 1:True 0:False - 5 <- How many quantiles - 0.10 -----\ - 0.25 | - 0.50 + The quantiles we are interested in, i.e. - 0.75 | P10, P25, P50, P75 and P90 in this case. - 0.90 -----/ - - - Turn off quantile plotting: - - QUANTILES - Prior - 0 <-- Turn off quantile plotting - - Quantiles is only an option for plotting summary vectors, not RFTs. - - -Complete example file: -------------------------------------------------------------------------------------------------------------------- -/path/to/plots | All plots will be created here; the path will be created if it does not exist. -C | Create a new ensemble -Prior | Call the new ensemble 'Prior' -/path/to/sim1/CASE1.DATA | Case 1 in prior -/path/to/sim2/CASE2.DATA | Case 2 in prior -/path/to/sim3/CASE3.DATA | Case 3 in prior -_stop_ | All realizations added to 'Prior' -A |--\ -Prior | | Prior should be plotted in red -1 |--/ -C | Create a new ensemble -Posterior | Call the new ensemble 'Posterior' -/path/to/Post1/CASE1.DATA | Case 1 in Posterior -/path/to/Post2/CASE2.DATA | Case 2 in Posterior -/path/to/Post3/CASE3.DATA | Case 3 in Posterior -_stop_ | All realizations added to 'Prior' -A |--\ -Posterior | | Posterior should be plotted in blue -9 |--/ -P | Create a plot: /path/to/plots/WWCT:XYC.png -WWCT:XYC | Of the watercut in well XYZ -Posterior | Include the posterior ensemble -Prior | Include the posterior ensemble -_stop_ | All data added to the plot - go and make it. -P | Create a plot: /path/to/plots/WOPR:XYC.png -WOPR:XYC | Of the oil production rate in well XYC -Posterior | Include the posterior ensemble -Prior | Include the prior ensemble -_newplotvector_ | Include a new ... -WOPT:XYC | ... summary vector WOPT:XYZ -Posterior | Include the posterior ensemble -Prior | Include the prior ensemble -_set_range_ | Manually adjust the plotting range -XMIN 01/01/2009 XMAX 31/12/2009 | Include all of 2009 in the plot; yrange still auto. -_stop_ | All data added to the plot - go and make it. -Q | Quit -------------------------------------------------------------------------------------------------------------------- -*/ - - -#define VIEWER "/usr/bin/display" - -#define CREATE_ENS_CMD "C" -#define PLOT_CMD "P" -#define ATTRIBUTES_CMD "A" -#define QUANTILES_CMD "QUANTILES" -#define QUIT_CMD "Q" - -#define XMIN_CMD "XMIN" -#define XMAX_CMD "XMAX" -#define YMIN_CMD "YMIN" -#define YMAX_CMD "YMAX" - -#define STOP_CMD "_stop_" -#define XY_CMD "xy" -#define XYY_CMD "xyy" -#define XXY_CMD "xxy" - -#define RFT_CMD "rft" - -#define MEAS_POINTS_CMD "_meas_points_" -#define SET_RANGE_CMD "_set_range_" -#define NEW_VECTOR_CMD "_newplotvector_" - - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - - - - - -/*******************************************************************/ -/** - -About plotting quantiles: -------------------------- - -The default modus for ens_plot is to plot an ensemble as a collection -of curves, however it is also possible to plot an ensemble as a mean -curve and a collection of quantiles. The implementation works as -follows: - - 1. You use the function ens_use_quantile(ens , true) to tell that you - want to plot the ensemble using quantiles. The ens_alloc() - function contains the statement: - - ens_use_quantiles(ens , false); - - i.e. the default is to not use quantiles. Observe that the use of - quantiles versus a collection of lines is on per-ensemble basis. - - - 2. You use the function ens_add_quantile(ens , q) to add - quantiles. The quantile values should be q in the interval [0,1]. - - - 3. The function plot_ensemble() has separate code blocks for plotting - with quantiles and as a collection of lines. When plotting with - quantiles the algorithm is as follows: - - a) All summary data is resampled to a common time-axis. This time - axis contains @interp_size elements, this is currently set to - 50. The distribution of interpolation times is currently - uniform, but that can easily be generalized. - - The data is resampled using the low-level function - ecl_sum_data_get_from_sim_time() which tries to differentiates - between rate and non-rate data. - - - b) For each interpolation time step we use the functions - statistics_empirical_quantile() to calculate the quantile - values. This is briefly based on sorting the data, looking up - the appropriate index and simple linear interpolation. - - - c) The quantiles are plotted - along with the mean value. - - -*/ - - -/** - -Multithreaded loading ---------------------- -The loading of ensembles in function create_ensemble_batch() is done -multithreaded. This is implemented with the help of a thread_pool -"class" implemented in libutil/src/thread_pool.c. The maximum number -of concurrent threads is given by MAX_LOAD_THREADS, this is currently -set to 4. Since the loading is mainly I/O bound it might be beneficial -to set it even higher? -*/ - - -bool use_viewer = false ; // Global variable to enable backwords compatible behaviour of batch mode - // option -b sets use_viewer = true (will start external viewer to show plots) - // option -s sets use_viewer = false (slave mode, returns name of plot file on STDOUT) - - -#define KEY_JOIN_STRING ":" /* The string used when joining strings to form a gen_key lookup key - can be anything (even ""). */ -#define PLOT_WIDTH 640 -#define PLOT_HEIGHT 480 -#define PROMPT_LEN 60 -#define MAX_LOAD_THREADS 4 - - - - - - -/** - This is basic datatype to hold the information about one ensemble - of eclipse simulations. All the simulations in one ensemble should - share some characteristica, like all beeing from the prior - distribution. A plotting session can very well be completed with - only one ensemble. -*/ - -typedef struct { - vector_type * data; /* This is a vector ecl_sum instances - actually holding the data. */ - pthread_mutex_t data_mutex; /* mutex ensuring serial write access to the data vector. */ - - plot_style_type plot_style; /* LINE | POINTS | LINE_POINTS */ - plot_color_type plot_color; /* See available colors in libplot/include/plot_const.h */ - plot_line_style_type plot_line_style; /* Line style: solid_line | short_dash | long_dash */ - plot_symbol_type plot_symbol; /* Integer - 17 is filled circle ... */ - double plot_symbol_size; /* Scale factor for symbol size. */ - double plot_line_width; /* Scale factor for line width. */ - double sim_length; /* The length of the _longest_ simulation in the ensemble. */ - - /* Everything below line is related to plotting of quantiles. */ - /*-----------------------------------------------------------------*/ - bool use_quantiles; /* Should this ensemble be plotted as a mean and quantiles - instead of one line pr. member? */ - int interp_size; /* How many interpolation points to use when resampling the summary data.*/ - double_vector_type * interp_days; /* The times where we resample the summary data - given in days since simulation start.*/ - vector_type * interp_data; /* A vector of double_vector instances of the summary data - interpolated to interp_days. */ - double_vector_type * quantiles; /* The quantile values we want to plot, i.e [0.10, 0.32, 0.68, 0.90] */ - vector_type * quantile_data; /* The quantile data as double_vector instances. */ -} ens_type; - - - -/** - Struct holding basic information used when plotting. -*/ - -typedef struct plot_info_struct { - char * plot_path; /* All the plots will be saved as xxxx files in this directory. */ - char * plot_device; /* Type of plot file - currently only 'png' is tested. */ - char * viewer; /* The executable used when displaying the newly created image. */ -} plot_info_type; - -/* - * Dialog functions for batch processing (two way communication): - */ - -void error_reply(char* message) -{ - printf("ERROR: %s\n",message) ; - fflush(stdout) ; -} ; - - -void warning_reply(char* message) -{ - printf("WARNING: %s\n",message) ; - fflush(stdout) ; -}; - - -void info_reply(char* message) -{ - printf("INFO: %s\n",message) ; - fflush(stdout) ; -}; - -void install_SIGNALS(void) { - signal(SIGSEGV , util_abort_signal); /* Segmentation violation, i.e. overwriting memory ... */ - signal(SIGINT , util_abort_signal); /* Control C */ - signal(SIGTERM , util_abort_signal); /* If killing the program with SIGTERM (the default kill signal) you will get a backtrace. - Killing with SIGKILL (-9) will not give a backtrace.*/ -} - - - -/******************************************************************/ -/* Functions manipulating the ensemble type. */ - -void ens_set_style(ens_type * ens, plot_style_type style) { - ens->plot_style = style; -} - -void ens_set_color(ens_type * ens, plot_color_type color) { - ens->plot_color = color; -} - -void ens_set_line_style(ens_type * ens, plot_line_style_type line_style) { - ens->plot_line_style = line_style; -} - -void ens_set_symbol_type(ens_type * ens, plot_symbol_type symbol_type) { - ens->plot_symbol = symbol_type; -} - -void ens_set_symbol_size(ens_type * ens, double symbol_size) { - ens->plot_symbol_size = symbol_size; -} - -void ens_set_line_width(ens_type * ens, double line_width) { - ens->plot_line_width = line_width; -} - -void ens_set_interp_size( ens_type * ens, int interp_size) { - ens->interp_size = interp_size; -} - -void ens_use_quantiles( ens_type * ens, bool use_quantiles ) { - ens->use_quantiles = use_quantiles; -} - - -void ens_add_quantile( ens_type * ens , double quantile ) { - double_vector_append( ens->quantiles , quantile ); - vector_append_owned_ref( ens->quantile_data , double_vector_alloc(0,0) , double_vector_free__ ); -} - -void ens_clear_quantiles( ens_type * ens ) { - double_vector_reset( ens->quantiles ); - vector_clear( ens->quantile_data ); -} - -void ens_add_data__( ens_type * ens, void * data , free_ftype * destructor) { - pthread_mutex_lock( &ens->data_mutex ); - { - vector_append_owned_ref( ens->data , data , destructor ); - } - pthread_mutex_unlock( &ens->data_mutex ); -} - - -void ens_add_sum( ens_type * ens, ecl_sum_type * ecl_sum ) { - ens_add_data__( ens , ecl_sum , ecl_sum_free__); -} - - -void ens_add_rft( ens_type * ens, ecl_rft_file_type * rft ) { - ens_add_data__( ens , rft , ecl_rft_file_free__); -} - - -/** - Allocating an empty ens_type instance, with all plotting - attributes initialized to default values. -*/ - - - -ens_type * ens_alloc() { - ens_type * ens = util_malloc( sizeof * ens ); - ens->data = vector_alloc_new(); - pthread_mutex_init( &ens->data_mutex , NULL ); - /* Quantyile related stuff. */ - ens->quantiles = double_vector_alloc(0 , 0); - ens->interp_days = double_vector_alloc(0 , 0); - ens->interp_data = vector_alloc_new(); - ens->quantile_data = vector_alloc_new(); - ens->sim_length = 0; - - /* Setting defaults for the plot */ - ens_set_style( ens , LINE ); - ens_set_color( ens , BLUE ); - ens_set_line_style(ens , PLOT_LINESTYLE_SOLID_LINE); - ens_set_symbol_type(ens , PLOT_SYMBOL_FILLED_CIRCLE); - ens_set_symbol_size(ens , 1.0); - ens_set_line_width(ens , 1.0); - ens_use_quantiles( ens , false ); - ens_set_interp_size( ens , 50 ); - return ens; -} - - - -void ens_free( ens_type * ens) { - vector_free( ens->data ); - pthread_mutex_destroy( &ens->data_mutex ); - double_vector_free( ens->quantiles ); - double_vector_free( ens->interp_days ); - vector_free( ens->interp_data ); - vector_free( ens->quantile_data ); - free(ens); -} - - -void ens_free__(void * __ens) { - ens_type * ens = (ens_type *) __ens; - ens_free (ens ); -} - - -void ens_load_summary(ens_type * ens, const char * data_file) { - char * base , * path; - - if (util_file_exists(data_file)) { - util_alloc_file_components( data_file , &path , &base , NULL); - if (path != NULL) - printf("Loading case: %s/%s ... ",path , base); - else - printf("Loading case: %s .......",base); - fflush(stdout); - { - ecl_sum_type * ecl_sum = ecl_sum_fread_alloc_case( data_file , KEY_JOIN_STRING ); - ens_add_sum( ens , ecl_sum ); - ens->sim_length = util_double_max( ens->sim_length , ecl_sum_get_sim_length( ecl_sum )); - } - vector_append_owned_ref( ens->interp_data , double_vector_alloc(0,0) , double_vector_free__ ); - printf("\n"); - free( base ); - util_safe_free( path ); - } else - fprintf(stderr,"Sorry: could not locate case:%s \n",data_file); -} - - -void ens_load_rft(ens_type * ens, const char * data_file) { - char * base , * path; - - - if (util_file_exists(data_file)) { - util_alloc_file_components( data_file , &path , &base , NULL); - char * rft_file = ecl_util_alloc_exfilename( path, base, ECL_RFT_FILE, false, -1 ); - if(rft_file != NULL){ - printf("Loading case: %s/%s ... ",path , base); - fflush(stdout); - ens_add_rft( ens , ecl_rft_file_alloc( rft_file)); - printf("\n"); - free( base ); - util_safe_free( path ); - } else - fprintf(stderr,"Sorry: could not locate rft file:%s \n",rft_file); - } else - fprintf(stderr,"Sorry: could not locate case:%s \n",data_file); -} - - - -void ens_load_batch(ens_type* ens, ens_type* ens_rft, const char * data_file) { - char* base ; - char* path ; - char message[128] ; - - if (util_file_exists(data_file)) { - util_alloc_file_components( data_file , &path , &base , NULL); - { - ecl_sum_type * ecl_sum = ecl_sum_fread_alloc_case( data_file , KEY_JOIN_STRING ); - if (ecl_sum != NULL){ - ens_add_sum( ens , ecl_sum ); - ens->sim_length = util_double_max( ens->sim_length , ecl_sum_get_sim_length( ecl_sum )); - vector_append_owned_ref( ens->interp_data , double_vector_alloc(0,0) , double_vector_free__ ); - } - else{ - sprintf(message,"No summary file for case %s loaded",base) ; - warning_reply(message) ; - } - } - - - char * rft_file = ecl_util_alloc_exfilename( path, base, ECL_RFT_FILE, false, -1 ); - - if(rft_file != NULL){ - ens_add_rft( ens_rft , ecl_rft_file_alloc( rft_file)); - sprintf(message,"Case %s loaded",base) ; - info_reply(message) ; - } else { - sprintf(message,"No RFT for case %s loaded",base) ; - warning_reply(message) ; - } ; - - free( base ); - util_safe_free( path ); - } else { - sprintf(message,"Case %s not found",base) ; - error_reply(message) ; - } -} - - -void * ens_load_batch__(void * arg) { - arg_pack_type * arg_pack = arg_pack_safe_cast( arg ); - ens_type * ens = arg_pack_iget_ptr( arg_pack , 0 ); - ens_type * ens_rft = arg_pack_iget_ptr( arg_pack , 1 ); - const char * data_file = arg_pack_iget_ptr( arg_pack , 2 ); - - ens_load_batch( ens, ens_rft , data_file ); - return NULL; -} - - - -void ens_load_many(ens_type * ens, path_fmt_type * data_file_fmt , int iens1, int iens2) { - int iens; - for (iens = iens1; iens <= iens2; iens++) { - char * data_file = path_fmt_alloc_path( data_file_fmt , false , iens , iens , iens); /* Substituting up to three %d with the member number. */ - ens_load_summary(ens , data_file); - free( data_file ); - } -} - - -void ens_set_plot_attributes(ens_type * ens) { - int new_color; - do { - new_color = util_scanf_int("Color (integer : 0-15 )", PROMPT_LEN); - } while ((new_color < 0) || (new_color > 15)); - ens_set_color( ens , new_color); -} - - -void ens_set_plot_attributes_batch(hash_type * ens_table, hash_type * ens_rft_table) { - - char message[128]; - char ens_name[128]; - scanf("%s" , ens_name); - int new_color; - char tmp_col[32]; - scanf("%s" , tmp_col); - util_sscanf_int(tmp_col, &new_color); - - if (hash_has_key( ens_table , ens_name)){ - ens_type * set_ens = hash_get( ens_table , ens_name); - if((new_color > -1) && (new_color < 16)){ - ens_set_color( set_ens , new_color); - } - } else { - sprintf(message,"Unknown ensemble %s",ens_name) ; - error_reply(message) ; - return ; - } - - if (hash_has_key( ens_rft_table , ens_name)){ - ens_type * set_ens = hash_get( ens_rft_table , ens_name); - if((new_color > -1) && (new_color < 16)){ - ens_set_color( set_ens , new_color); - } - } else { - sprintf(message,"Unknown ensemble %s",ens_name) ; - error_reply(message) ; - return ; - } - - info_reply("New attributes set") ; -} - - -/** - This function will set the quantile properties of an ensemble. The - main command loop has read a 'Quantiles', and then subsequently gone up - here. The first argument following the 'Quantiles' should be the name of - the ensemble, a true or false value (i.e. 1 or 0) as to whether - quantiles should be used, and if quantiles should be used the - number of quantiles and their values. - - Example1 - -------- - Quantiles <- read in the main loop - Prior <- Name of ensemble this applies to - 1 <- This ensemble should be plotted with quantiles. - 4 <- We want four quantiles - 0.10 <- The four quantile values - 0.32 <- - 0.68 <- - 0.90 <- - - - - Example2 - -------- - Quantiles <- read in the main loop - Prior <- Name of ensemble this applies to - 0 <- This ensemble should not be plotted with quantiles. - -*/ - -void ens_set_plot_quantile_properties_batch( hash_type * ens_table ) { - char message[128]; - char ens_name[128]; - scanf("%s" , ens_name); /* Name of ensemble. */ - if (hash_has_key( ens_table , ens_name)){ - ens_type * ens = hash_get( ens_table , ens_name); - int use_quantiles; - fscanf(stdin , "%d" , &use_quantiles); /* Should quantiles be used? */ - if (use_quantiles == 1) { - int num_quantiles; - ens_use_quantiles( ens , true ); - fscanf(stdin , "%d" , &num_quantiles); - ens_clear_quantiles( ens ); - for (int i = 0; i < num_quantiles; i++) { - double q; - fscanf(stdin , "%lg" , &q); - ens_add_quantile( ens , q ); - } - } else - ens_use_quantiles( ens , false); - } else { - sprintf(message,"Unknown ensemble %s",ens_name) ; - error_reply(message) ; - return; - } - -} - - -/*****************************************************************/ -/** Functions for 'manipulating' the plot_info type. */ - -void plot_info_set_path(plot_info_type * plot_info , const char * plot_path) { - plot_info->plot_path = util_realloc_string_copy(plot_info->plot_path , plot_path); - util_make_path( plot_path ); -} - - -void plot_info_set_device(plot_info_type * plot_info , const char * plot_device) { - plot_info->plot_device = util_realloc_string_copy(plot_info->plot_device , plot_device); -} - -void plot_info_set_viewer(plot_info_type * plot_info , const char * plot_viewer) { - plot_info->viewer = util_realloc_string_copy(plot_info->viewer , plot_viewer); -} - - -void plot_info_free( plot_info_type * plot_info) { - util_safe_free(plot_info->plot_path); - util_safe_free(plot_info->viewer); - util_safe_free(plot_info->plot_device); - -} - - -plot_info_type * plot_info_alloc(const char * plot_path , const char * device , const char * viewer) { - plot_info_type * info = util_malloc( sizeof * info ); - info->plot_path = NULL; - info->plot_device = NULL; - info->viewer = NULL; - - plot_info_set_path(info , plot_path); - plot_info_set_device(info , device); - plot_info_set_viewer(info , viewer); - - return info; -} - - - -/*****************************************************************/ - - -void plot_ensemble(const ens_type * ens , plot_type * plot , const char * user_key) { - const char * label = NULL; - const int ens_size = vector_get_size( ens->data ); - int iens; - - - if (ens->use_quantiles) { - /* The ensemble is plotted as a mean, and quantiles. */ - - /* 1: Init simulations days to use for resampling of the summary data. */ - double_vector_reset( ens->interp_days ); - for (int i = 0; i < ens->interp_size; i++) { - double sim_days = i * ens->sim_length / (ens->interp_size - 1); - double_vector_iset( ens->interp_days , i , sim_days); - } - - /* 2: resample all the simulation results to the same times. */ - for (iens = 0; iens < ens_size; iens++) { - const ecl_sum_type * ecl_sum = vector_iget_const( ens->data , iens ); - ecl_sum_resample_from_sim_days( ecl_sum , ens->interp_days , vector_iget( ens->interp_data , iens ) , user_key ); - } - - /* 3: Setting up the plot data for the quantiles. */ - { - /* 3A: Create the plot_dataset instances and set the properties for the plots. */ - vector_type * quantiles = vector_alloc_new(); - plot_dataset_type * mean = plot_alloc_new_dataset( plot , label , PLOT_XY); - - for (int i=0; i < double_vector_size( ens->quantiles ); i++) { - plot_dataset_type * quantile_dataset = plot_alloc_new_dataset( plot , label , PLOT_XY); - vector_append_ref( quantiles , quantile_dataset); - - /* - The plotting style of the quantiles is (currently) quite - hardcoded: - - 1. The quantiles are plotted as lines, with linestyle LONG_DASH. - 2. The quantiles are plotted with the same color as the "mother curve" (i.e. the mean). - 3. The quantiles are plotted with a linwidth given by 0.75 times the linewidth of the mean. - */ - - plot_dataset_set_style ( quantile_dataset , LINE ); - plot_dataset_set_line_color ( quantile_dataset , ens->plot_color); - plot_dataset_set_line_style ( quantile_dataset , PLOT_LINESTYLE_LONG_DASH); - plot_dataset_set_line_width ( quantile_dataset , ens->plot_line_width * 0.75); - } - - /* Set the style of the mean. */ - plot_dataset_set_style ( mean , ens->plot_style); - plot_dataset_set_line_color ( mean , ens->plot_color); - plot_dataset_set_point_color( mean , ens->plot_color); - plot_dataset_set_line_style ( mean , ens->plot_line_style); - plot_dataset_set_symbol_type( mean , ens->plot_symbol); - plot_dataset_set_symbol_size( mean , ens->plot_symbol_size); - plot_dataset_set_line_width ( mean , ens->plot_line_width); - - /* 3B: Calculate and add the actual data to plot. */ - { - double_vector_type * tmp = double_vector_alloc( 0,0); - for (int i =0; i < double_vector_size( ens->interp_days ); i++) { /* looping over the time direction */ - double_vector_reset( tmp ); - for (iens=0; iens < ens_size; iens++) { /* Looping over all the realisations. */ - const double_vector_type * interp_data = vector_iget_const( ens->interp_data , iens ); - double_vector_iset( tmp , iens , double_vector_iget( interp_data , i )); - } - - /* - Now tmp is an ensemble of values resampled to the same - time; this can be used for quantiles. - */ - { - const ecl_sum_type * ecl_sum = vector_iget_const( ens->data , 0); - - /* Adding the mean value. */ - plot_dataset_append_point_xy( mean , - ecl_sum_time_from_days( ecl_sum , double_vector_iget( ens->interp_days , i )) , /* Time value */ - statistics_mean( tmp )); - - /* Adding the quantiles. */ - for (int iq =0; iq < double_vector_size( ens->quantiles ); iq++) { /* Looping over all the quantiles. */ - double qv; - plot_dataset_type * data_set = vector_iget( quantiles , iq ); - qv = statistics_empirical_quantile( tmp , double_vector_iget( ens->quantiles , iq )); - plot_dataset_append_point_xy( data_set , - ecl_sum_time_from_days( ecl_sum , double_vector_iget( ens->interp_days , i )) , /* Time value */ - qv ); /* y-value - the interpolated quantile. */ - } - } - } - double_vector_free( tmp ); - } - vector_free(quantiles); - } - } else { - /* The ensemble is plotted as a collection of curves. */ - - for (iens = 0; iens < ens_size; iens++) { - plot_dataset_type * plot_dataset = plot_alloc_new_dataset( plot , label , PLOT_XY ); - const ecl_sum_type * ecl_sum = vector_iget_const( ens->data , iens ); - int param_index = ecl_sum_get_general_var_params_index( ecl_sum , user_key ); - int time_index; - - for (time_index = 0; time_index < ecl_sum_get_data_length( ecl_sum ); time_index++) { - plot_dataset_append_point_xy( plot_dataset , - //ecl_sum_iget_sim_days( ecl_sum , time_index ), - ecl_sum_iget_sim_time( ecl_sum , time_index ), - ecl_sum_iget( ecl_sum , time_index , param_index )); - } - - plot_dataset_set_style ( plot_dataset , ens->plot_style); - plot_dataset_set_line_color ( plot_dataset , ens->plot_color); - plot_dataset_set_point_color( plot_dataset , ens->plot_color); - plot_dataset_set_line_style ( plot_dataset , ens->plot_line_style); - plot_dataset_set_symbol_type( plot_dataset , ens->plot_symbol); - plot_dataset_set_symbol_size( plot_dataset , ens->plot_symbol_size); - plot_dataset_set_line_width( plot_dataset , ens->plot_line_width); - } - } -} - - -void plot_rft_ensemble(const ens_type * ens , plot_type * plot , const char * well, time_t survey_time) { - const char * label = NULL; - const int ens_size = vector_get_size( ens->data ); - int iens, inode; - - const ecl_rft_file_type * ecl_rft = NULL; - for (iens = 0; iens < ens_size; iens++) { - - plot_dataset_type * plot_dataset = plot_alloc_new_dataset( plot , label , PLOT_XY ); - ecl_rft = vector_iget_const( ens->data , iens ); - const ecl_rft_node_type * ecl_rft_node = ecl_rft_file_get_well_time_rft(ecl_rft, well, survey_time); - - - const int node_size = ecl_rft_node_get_size(ecl_rft_node); - for (inode =0;inode < node_size;inode++){ - plot_dataset_append_point_xy( plot_dataset , - ecl_rft_node_iget_pressure(ecl_rft_node,inode) , - ecl_rft_node_iget_depth(ecl_rft_node,inode) ); - } - - plot_dataset_set_style ( plot_dataset , ens->plot_style); - plot_dataset_set_line_color ( plot_dataset , ens->plot_color); - plot_dataset_set_point_color( plot_dataset , ens->plot_color); - plot_dataset_set_line_style ( plot_dataset , ens->plot_line_style); - plot_dataset_set_symbol_type( plot_dataset , ens->plot_symbol); - plot_dataset_set_symbol_size( plot_dataset , ens->plot_symbol_size); - plot_dataset_set_line_width( plot_dataset , ens->plot_line_width); - } -} - - -void set_range(plot_type * plot, time_t start_time){ - int num_tokens; - char ** token_list; - char * line; - - line = util_blocking_alloc_stdin_line(100); - util_split_string(line , " " , &num_tokens , &token_list); - - int i; - for (i=0;idata && vector_get_size(ens->data) > 0){ - hash_iter_free( ens_iter ); - break; - } - } - } - - const ecl_rft_file_type * ecl_rft = vector_iget_const( ens->data , 0 ); - if (ecl_rft_file_has_well( ecl_rft , well )) { - const ecl_rft_node_type * ecl_rft_node = ecl_rft_file_iget_well_rft(ecl_rft, well, 0); - const int node_size = ecl_rft_node_get_size(ecl_rft_node); - int inode; - int ni,nj,nk; - for (inode =0;inode < node_size;inode++){ - /* - The ecl_rft structure has zero offset values for the - coordinates, whereas the (i,j,k) input to this function is - assumed offset 1. - */ - ecl_rft_node_iget_ijk( ecl_rft_node , inode , &ni , &nj , &nk); - - if( ( i == (ni + 1)) && - ( j == (nj + 1)) && - ( k == (nk + 1))) { - //double depth = ecl_rft_node_iget_depth(ecl_rft_node,inode); - return ecl_rft_node_iget_depth(ecl_rft_node,inode); - } - } - } - - return 0; -} - - -void plot_meas_file(plot_type * plot, time_t start_time){ - bool done = 0; - double x,x1,x2,y,y1,y2; - char * error_ptr; - plot_dataset_type * plot_dataset; - time_t time; - int days; - while (!done) { - int num_tokens; - char ** token_list; - char * line; - - line = util_blocking_alloc_stdin_line(10); - util_split_string(line , " " , &num_tokens , &token_list); - - /* - Tips: - - - 1. Free token_list: util_free_stringlist( token_list , num_tokens); - 2. Parse int/double/... - - if (util_sscanf_double(token_list[??] , &double_value)) - prinftf("Parsed %s -> %g \n",token_list[?+] , double_value); - else - printf("Could not interpret %s as double \n",token_list[??]); - - */ - - if (token_list[0] != NULL) { - if(strcmp(token_list[0], STOP_CMD) == 0){ - done = 1; - } - - if(strcmp(token_list[0], XY_CMD) == 0){ - util_sscanf_date(token_list[1] , &time); - util_difftime(start_time, time, &days, NULL, NULL, NULL); - x = time; - //x = days; - - y = strtod(token_list[2], &error_ptr); - plot_dataset = plot_alloc_new_dataset( plot , NULL , PLOT_XY ); - plot_dataset_set_style (plot_dataset , POINTS); - plot_dataset_append_point_xy(plot_dataset , x , y); - plot_dataset_set_line_width( plot_dataset , 1.5); - plot_dataset_set_line_color( plot_dataset , 15); - } - - if(strcmp(token_list[0], XYY_CMD) == 0){ - util_sscanf_date(token_list[1] , &time); - util_difftime(start_time, time, &days, NULL, NULL, NULL); - //x = days; - x = time; - y1 = strtod(token_list[2], &error_ptr); - y2 = strtod(token_list[3], &error_ptr); - - plot_dataset = plot_alloc_new_dataset( plot , NULL , PLOT_XY1Y2 ); - plot_dataset_append_point_xy1y2(plot_dataset , x , y1, y2); - plot_dataset_set_line_width( plot_dataset , 1.5); - plot_dataset_set_line_color( plot_dataset , 15); - } - - if(strcmp(token_list[0], XXY_CMD) == 0){ - x1 = strtod(token_list[1], &error_ptr); - x2 = strtod(token_list[2], &error_ptr); - time_t time1 = start_time; - time_t time2 = start_time; - util_inplace_forward_days(&time1 , x1); - util_inplace_forward_days(&time2 , x2); - - y = strtod(token_list[3], &error_ptr); - plot_dataset = plot_alloc_new_dataset( plot , NULL , PLOT_X1X2Y ); - plot_dataset_append_point_x1x2y(plot_dataset , time1 , time2, y); - plot_dataset_set_line_width( plot_dataset , 1.5); - plot_dataset_set_line_color( plot_dataset , 15); - } - - } else { - util_forward_line(stdin , &done); - } - util_free_stringlist( token_list , num_tokens); - } -} - -void plot_meas_rft_file(plot_type * plot, char * well, hash_type * ens_table){ - bool done = 0; - int i, j, k; - double x1, x2; - plot_dataset_type * plot_dataset; - //time_t time; - //int days; - while (!done) { - int num_tokens; - char ** token_list; - char * line; - - line = util_blocking_alloc_stdin_line(10); - util_split_string(line , " " , &num_tokens , &token_list); - - /* - Tips: - - - 1. Free token_list: util_free_stringlist( token_list , num_tokens); - 2. Parse int/double/... - - if (util_sscanf_double(token_list[??] , &double_value)) - prinftf("Parsed %s -> %g \n",token_list[?+] , double_value); - else - printf("Could not interpret %s as double \n",token_list[??]); - - */ - - if (token_list[0] != NULL) { - if(strcmp(token_list[0], STOP_CMD ) == 0){ - done = 1; - } - - if(strcmp(token_list[0], RFT_CMD) == 0){ - util_sscanf_int(token_list[1] , &i); - util_sscanf_int(token_list[2] , &j); - util_sscanf_int(token_list[3] , &k); - util_sscanf_double(token_list[4] , &x1); - util_sscanf_double(token_list[5] , &x2); - - double depth = get_rft_depth(ens_table, well, i, j, k); - - if(depth != 0){ - plot_dataset = plot_alloc_new_dataset( plot , NULL , PLOT_X1X2Y ); - plot_dataset_append_point_x1x2y(plot_dataset , x1 , x2, depth); - plot_dataset_set_line_width( plot_dataset , 1.5); - plot_dataset_set_line_color( plot_dataset , 15); - } - else{ - printf ("The block %i %i %i does not exist in well %s\n", i, j, k, well); - } - } - - } else { - util_forward_line(stdin , &done); - } - util_free_stringlist( token_list , num_tokens); - } -} - - - - - -void plot_finalize(plot_type * plot , plot_info_type * info , const char * plot_file) { - plot_data(plot); - plot_free(plot); - util_fork_exec(info->viewer , 1 , (const char *[1]) { plot_file } , false , NULL , NULL , NULL , NULL , NULL); -} - - -void plot_all(void * arg) { - arg_pack_type * arg_pack = arg_pack_safe_cast( arg ); - hash_type * ens_table = arg_pack_iget_ptr( arg_pack , 0); - plot_info_type * plot_info = arg_pack_iget_ptr( arg_pack , 1); - { - plot_type * plot; - char key[32]; - char * plot_file; - - util_printf_prompt("Give key to plot" , PROMPT_LEN , '=' , "=> "); - scanf("%s" , key); - - plot_file = util_alloc_sprintf("%s/%s.%s" , plot_info->plot_path , key , plot_info->plot_device); - { - arg_pack_type * arg_pack = arg_pack_alloc(); - arg_pack_append_ptr( arg_pack , plot_file ); - arg_pack_append_ptr( arg_pack , plot_info->plot_device); - - plot = plot_alloc("PLPLOT" , arg_pack , false , false); /* The two last arguments are for log - works by taking log on the __the_data__. */ - - arg_pack_free( arg_pack ); - } - plot_set_window_size(plot , PLOT_WIDTH , PLOT_HEIGHT); - plot_set_labels(plot , "Time (days)" , key , key); - - { - bool complete; - hash_iter_type * ens_iter = hash_iter_alloc( ens_table ); - do { - complete = hash_iter_is_complete( ens_iter ); - if (!complete) { - const ens_type * ens = hash_iter_get_next_value( ens_iter ); - plot_ensemble( ens , plot , key); - } - } while (!complete); - hash_iter_free( ens_iter ); - plot_finalize(plot , plot_info , plot_file); - } - printf("Plot saved in: %s \n",plot_file); - free( plot_file ); - } -} - - -void _plot_batch_rft(arg_pack_type* arg_pack, char* inkey){ - - // subroutine used in batch mode to plot an rft vector for a list of ensembles given at stdin - - char message[128] ; - - hash_type* ens_rft_table = arg_pack_iget_ptr( arg_pack , 1); - plot_info_type* plot_info = arg_pack_iget_ptr( arg_pack , 2); - - plot_type* plot = NULL ; - - char * key = inkey; - - // split the key in to head, well, date - int num_tokens; - char ** token_list; - util_split_string(key , ":" , &num_tokens , &token_list); - - if(num_tokens != 3){ - sprintf(message,"The key %s does not exist", key); - error_reply(message) ; - return; - } - - char * well = token_list[1]; - char * date = token_list[2]; - time_t survey_time ; - util_sscanf_date(date , &survey_time) ; - - char * plot_file; - { - char * plot_name = util_alloc_sprintf("%s:%s" , token_list[0] , token_list[1]); - plot_file = util_alloc_filename(plot_info->plot_path , plot_name , plot_info->plot_device); - free( plot_name ); - } - - { - arg_pack_type * arg_pack = arg_pack_alloc(); - arg_pack_append_ptr( arg_pack , plot_file ); - arg_pack_append_ptr( arg_pack , plot_info->plot_device); - plot = plot_alloc("PLPLOT" , arg_pack , false , false ); - arg_pack_free( arg_pack ); - } - plot_set_window_size(plot , PLOT_WIDTH , PLOT_HEIGHT); - plot_set_labels(plot , "Pressure" , "Depth" , key); - - - char ens_name[32]; - int iens; - int ens_size; - bool ens_ok = false; - - // Check if there is anything to plot - ens_type * ens = NULL; - { - hash_iter_type * ens_iter = hash_iter_alloc( ens_rft_table ); - while (!hash_iter_is_complete( ens_iter )) { - ens = hash_iter_get_next_value( ens_iter ); - if (ens != NULL && ens->data && vector_get_size(ens->data) > 0){ - hash_iter_free( ens_iter ); - ens_ok = true; - break; - } - } - } - - if (!ens_ok) { - error_reply("No ensembles or RFT files to plot\n"); - return; - } - - - const ecl_rft_file_type * ecl_rft = vector_iget_const( ens->data , 0 ); - - sprintf(message,"Will plot %s",key) ; - info_reply(message) ; - - bool plotempty = true ; - bool complete = false; - bool failed = false ; - - while (!complete) { - scanf("%s" , ens_name); - - if(strcmp(ens_name, MEAS_POINTS_CMD ) == 0){ - plot_meas_rft_file(plot, well, ens_rft_table); - plotempty = false ; - info_reply("Measured values plotted") ; - } else if(strcmp(ens_name, SET_RANGE_CMD) == 0){ - set_range_rft(plot); - info_reply("Range set") ; - } else if(strcmp(ens_name, NEW_VECTOR_CMD ) == 0){ - scanf("%s" , key); - util_split_string(key , ":" , &num_tokens , &token_list); - - if(num_tokens != 3){ - sprintf(message,"The key %s does not exist", key); - error_reply(message) ; - return; - } - - if(strcmp(token_list[0],"RFT") != 0){ - sprintf(message,"The key %s does not exist", key); - error_reply(message) ; - failed = true ; - char tmp[32]; - scanf("%s" , tmp); - } - else{ - well = token_list[1]; - date = token_list[2]; - util_sscanf_date(date , &survey_time) ; - sprintf(message,"Will plot %s",key) ; - info_reply(message) ; - } - } else if (strcmp(ens_name, STOP_CMD) == 0) { - complete = true ; - } else if (hash_has_key(ens_rft_table , ens_name)){ - ens = hash_get(ens_rft_table , ens_name); - - // Check if there is anything to plot - if (ens == NULL || !(ens->data) || vector_get_size(ens->data) <= 0) { // Denne satt langt inne !!!! - sprintf(message,"No RFT files to plot in ensemble %s\n", ens_name); - error_reply(message); - return; - } - - ens_size = vector_get_size( ens->data ); - - - // Check if the rft file has the requested well and date - for (iens = 0; iens < ens_size && !failed; iens++) { - ecl_rft = vector_iget_const( ens->data , iens ); - if(!ecl_rft_file_has_well(ecl_rft , well)){ - sprintf(message,"The well %s does not exist\n", well); - error_reply(message) ; - failed = true ; - } else { - // Check if the rft file has the requested survey time - const ecl_rft_node_type * ecl_rft_node = ecl_rft_file_get_well_time_rft(ecl_rft, well, survey_time); - if(ecl_rft_node == NULL){ - sprintf(message,"The survey %s in %s does not exist", well, date); - error_reply(message) ; - failed = true ; - } - } - } - - if (!failed) { - plot_rft_ensemble( ens , plot , well, survey_time); - plotempty = false ; - sprintf(message,"%s plotted",ens_name) ; - info_reply(message) ; - } ; - - } else { - sprintf(message,"unknown ensemble %s",ens_name) ; - error_reply(message) ; - return ; - } - - } // End while - - if (plot && !plotempty) { - plot_data(plot); - plot_free(plot); - if (use_viewer) { - util_fork_exec(plot_info->viewer , 1 , (const char *[1]) { plot_file } , false , NULL , NULL , NULL , NULL , NULL); - } ; - sprintf(message,"Plot file %s",plot_file) ; - info_reply(message) ; - } else { - error_reply("No data plotted") ; - } ; - - free( plot_file ); -} - - - -void _plot_batch_summary(arg_pack_type* arg_pack, char * inkey){ - - // subroutine used in batch mode to plot a summary vector for a list of ensembles given at stdin - - char message[128] ; - - hash_type* ens_table = arg_pack_iget_ptr( arg_pack , 0); - plot_info_type* plot_info = arg_pack_iget_ptr( arg_pack , 2); - - plot_type* plot = NULL ; - - char* key = inkey; - char* plot_file ; - - plot_file = util_alloc_sprintf("%s/%s.%s" , plot_info->plot_path , key , plot_info->plot_device); - - { - arg_pack_type * arg_pack = arg_pack_alloc(); - arg_pack_append_ptr( arg_pack , plot_file ); - arg_pack_append_ptr( arg_pack , plot_info->plot_device); - plot = plot_alloc("PLPLOT" , arg_pack , false , false ); - arg_pack_free( arg_pack ); - } - plot_set_window_size(plot , PLOT_WIDTH , PLOT_HEIGHT); - plot_set_labels(plot , "Date" , key , key); - - // get the simulation start time, to be used in plot_meas_file - ens_type * ens = NULL; - bool ens_ok = false; - { - hash_iter_type * ens_iter = hash_iter_alloc( ens_table ); - while (!hash_iter_is_complete( ens_iter )) { - ens = hash_iter_get_next_value( ens_iter ); - if (ens != NULL && ens->data && vector_get_size(ens->data) > 0){ - hash_iter_free( ens_iter ); - ens_ok = true; - break; - } - } - } - - if ( !ens_ok ) { - error_reply("No ensembles or summary files to plot\n"); - return ; - } ; - - const ecl_sum_type * ecl_sum = vector_iget_const( ens->data , 0 ); - - time_t start_time = ecl_sum_get_start_time( ecl_sum ); - time_t end_time = ecl_sum_get_end_time( ecl_sum ); - - sprintf(message,"Will plot %s",key) ; - info_reply(message) ; - - char ens_name[32]; - bool complete = false; - bool plotempty = true ; - bool failed = false ; - - int iens; - int ens_size; - - while (!complete) { - scanf("%s" , ens_name); - - if(strcmp(ens_name, MEAS_POINTS_CMD) == 0){ - plot_meas_file(plot, start_time); - plotempty = false ; - info_reply("Measured values plotted") ; - } else if(strcmp(ens_name, SET_RANGE_CMD) == 0){ - set_range(plot, start_time); - info_reply("Range set") ; - } else if(strcmp(ens_name, NEW_VECTOR_CMD) == 0){// ?????????? - scanf("%s" , key); - } else if (strcmp(ens_name, STOP_CMD) == 0) { - complete = true ; - } else if (hash_has_key( ens_table , ens_name)){ - ens = hash_get(ens_table , ens_name); - - // Check if there is anything to plot - if (ens == NULL || !(ens->data) || vector_get_size(ens->data) <= 0) { // Denne satt langt inne !!!! - sprintf(message,"No files to plot in ensemble %s\n", ens_name); - error_reply(message); - return; - } - - ens_size = vector_get_size( ens->data ); - // Check if the summary file has the requested key - for (iens = 0; iens < ens_size && !failed; iens++) { - ecl_sum = vector_iget_const( ens->data , iens ); - if(!ecl_sum_has_general_var(ecl_sum , key)){ - sprintf(message,"The key %s does not exist in case %i", key,iens); // How to get name - error_reply(message) ; - failed = true ; - } - } ; - - if (!failed) { - plotempty = false ; - plot_ensemble( ens , plot , key); - sprintf(message,"%s plotted",ens_name) ; - info_reply(message) ; - } ; - - } else { - sprintf(message,"unknown ensemble %s",ens_name) ; - error_reply(message) ; - return ; - } - - } // End while - - if (plot && !plotempty) { - plot_set_default_timefmt(plot , start_time , end_time); - plot_data(plot); - plot_free(plot); - if (use_viewer) { - util_fork_exec(plot_info->viewer , 1 , (const char *[1]) { plot_file } , false , NULL , NULL , NULL , NULL , NULL); - } ; - sprintf(message,"Plot file %s",plot_file) ; - info_reply(message) ; - } else { - error_reply("No data plotted") ; - } ; - - free( plot_file ); -} - - -/******************************************************************/ - -ens_type * select_ensemble(hash_type * ens_table, const char * prompt) { - char ens_name[32]; - - util_printf_prompt(prompt, PROMPT_LEN , '=' , "=> "); - scanf("%s" , ens_name); - if (hash_has_key( ens_table , ens_name)) - return hash_get( ens_table , ens_name); - else { - fprintf(stderr,"Do not have ensemble: \'%s\' \n", ens_name); - return NULL; - } -} - -void plot_batch(arg_pack_type* arg) { - char * key = util_blocking_alloc_stdin_line(10); - int num_tokens; - char ** token_list; - - // scan stdin for vector - util_split_string(key , ":" , &num_tokens , &token_list); - if(strcmp(token_list[0],"RFT") == 0){ - _plot_batch_rft(arg, key); - } else{ - _plot_batch_summary(arg, key); - } -} - - -void add_simulation(void * arg) { - hash_type * ens_table = (hash_type *) arg; - ens_type * ens = select_ensemble( ens_table , "Which ensemble"); - if (ens != NULL) { - char data_file[512]; - util_printf_prompt("Give datafile", PROMPT_LEN , '=' , "=> "); - scanf("%s" , data_file); - ens_load_summary( ens , data_file ); - } -} - - -void scanf_ensemble_numbers(int * iens1 , int * iens2) { - bool OK = false; - - util_printf_prompt("Ensemble members (xx yy)" , PROMPT_LEN , '=' , "=> "); - - while (!OK) { - char * input = util_alloc_stdin_line(); - const char * current_ptr = input; - OK = true; - - current_ptr = util_parse_int(current_ptr , iens1 , &OK); - current_ptr = util_skip_sep(current_ptr , " ,-:" , &OK); - current_ptr = util_parse_int(current_ptr , iens2 , &OK); - - if (!OK) - printf("Failed to parse two integers from: \"%s\". Example: \"0 - 19\" to get the 20 first members.\n",input); - free(input); - } -} - - - -void add_many_simulations(void * arg) { - hash_type * ens_table = (hash_type *) arg; - ens_type * ens = select_ensemble( ens_table , "Which ensemble"); - if (ens != NULL) { - path_fmt_type * data_file_fmt; - int iens1 , iens2; - char data_file[512]; - util_printf_prompt("Give datafile format (with up to three %d) ", PROMPT_LEN , '=' , "=> "); - scanf("%s" , data_file); - data_file_fmt = path_fmt_alloc_path_fmt( data_file ); - - scanf_ensemble_numbers(&iens1 , &iens2); /* iens1 and iens2 are inclusive */ - - ens_load_many( ens , data_file_fmt , iens1 , iens2 ); - path_fmt_free( data_file_fmt ); - } -} - - - - -void create_ensemble(void * arg) { - hash_type * ens_table = (hash_type *) arg; - char ens_name[32]; - - util_printf_prompt("Name of new ensemble", PROMPT_LEN , '=' , "=> "); - scanf("%s" , ens_name); - if (!hash_has_key( ens_table , ens_name)) { - ens_type * ens = ens_alloc(); - hash_insert_hash_owned_ref( ens_table , ens_name , ens , ens_free__); - } -} - - -void create_named_ensembles(ens_type** ens, ens_type** ens_rft, hash_type* ens_table, hash_type* ens_rft_table, char* ens_name) { - char message[128] ; - if (!hash_has_key( ens_table , ens_name) && !hash_has_key( ens_rft_table , ens_name)) { - *ens = ens_alloc(); - ens_set_line_width(*ens, 1.5); - hash_insert_hash_owned_ref( ens_table , ens_name , *ens , ens_free__); - - *ens_rft = ens_alloc(); - ens_set_line_width(*ens_rft, 1.5); - ens_set_style(*ens_rft, POINTS); - ens_set_symbol_type(*ens_rft , PLOT_SYMBOL_FILLED_CIRCLE); - hash_insert_hash_owned_ref( ens_rft_table , ens_name , *ens_rft , ens_free__); - - sprintf(message,"Ensemble %s created", ens_name); - info_reply(message) ; - } else { - sprintf(message,"Ensemble %s already exist",ens_name) ; - error_reply(message) ; - } ; - return ; -} ; - - -/** - This function has been slightly rewritten to support multithreaded - loading of realizations. The most important changes is that the - error and complete conditions are handled with a break statement, - and not an immediate return. This is essential to ensure that - thread_pool_join() call at the end of the function is issued. -*/ - -void create_ensemble_batch(hash_type* ens_table, hash_type* ens_rft_table) { - thread_pool_type * tp = thread_pool_alloc( MAX_LOAD_THREADS , true ); - vector_type * arglist = vector_alloc_new(); /* Container to discard the arg_pack instances used for the threaded loading. */ - char message[128] ; - char * line; - // scan stdin for ensemble name - char * ens_name = util_alloc_stdin_line(); - - ens_type* ens = NULL ; - ens_type* ens_rft = NULL ; - create_named_ensembles(&ens, &ens_rft, ens_table, ens_rft_table, ens_name); - - // scan stdin for valid simulation directory, or a valid eclipse data filename - - char * base; - - while (1) { - char * data_file = NULL; - - line = util_alloc_stdin_line(); - - if(strcmp(line, "_stop_") == 0){ - sprintf(message,"Ensemble %s created",ens_name) ; - info_reply(message) ; - break; - } - - // Check if this is a directory or a file - if(util_is_directory(line)) { - base = ecl_util_alloc_base_guess(line); - data_file = ecl_util_alloc_filename(line, base, ECL_DATA_FILE , true , 0); - } else if (util_is_file(line)) - data_file = util_alloc_string_copy( line ); - - if (data_file != NULL) { - arg_pack_type * arg_pack = arg_pack_alloc(); - vector_append_owned_ref( arglist , arg_pack , arg_pack_free__); - arg_pack_append_ptr( arg_pack , ens ); - arg_pack_append_ptr( arg_pack , ens_rft ); - arg_pack_append_owned_ptr( arg_pack , data_file , free); /* The arg pack takes ownership of the data_file pointer. */ - - thread_pool_add_job(tp , ens_load_batch__ , arg_pack ); - //ens_load_batch(ens , ens_rft , data_file) ; - } else { - sprintf(message,"%s is not a valid eclipse summary file or directory", line); - error_reply(message) ; - free(line) ; - break; - }; - free(line); - }; - - thread_pool_join( tp ); - thread_pool_free( tp ); - vector_free( arglist ); - sprintf(message,"Ensemble %s created",ens_name) ; - info_reply(message) ; -} - - -void set_plot_attributes(void * arg) { - hash_type * ens_table = (hash_type *) arg; - ens_type * ens = select_ensemble( ens_table , "Which ensemble"); - if (ens != NULL) - ens_set_plot_attributes( ens ); - -} - - - - - -/*****************************************************************/ - -void print_usage() { - printf("***************************************************************************\n"); - printf(" This program is used to plot the summary results from many ECLIPSE\n"); - printf(" simulations in one plot.\n"); - printf("\n"); - printf(" 1. When starting the program you can give the path to ECLIPSE data\n"); - printf(" files on the command line - the corresponding summary results will\n"); - printf(" be loaded.\n"); - printf("\n"); - printf(" 2. In the menu:\n"); - printf("\n"); - printf(" p: Plot summary ensemble(s): This will ask you for a key to plot,\n"); - printf(" i.e. RPR:2 for a region, WWCT:OP_3 for the watercut in well OP_3\n"); - printf(" and FOPR for the field oil production rate - and so on. It will\n"); - printf(" plot all the ensembles you have loaded.\n"); - printf("\n"); - printf(" c: Create a new ensemble: The simulation results are grouped\n"); - printf(" together in ensembles. With this command you can make a new\n"); - printf(" (empty) ensemble.\n"); - printf("\n"); - printf(" n: New simulation case: You can load a new simulation; first you\n"); - printf(" are prompted for the name of an ensemble, and then afterwards\n"); - printf(" an ECLIPSE data file which is then loaded.\n"); - printf("\n"); - printf(" m: Add many simulations: This is similar to 'n' - but instead of\n"); - printf(" giving a data-file you give a (C-based) format string containing\n"); - printf(" up to three %%d format specifiers - these are replaced with\n"); - printf(" simulation number, and the corresponding cases are loaded.\n"); - printf("\n"); - printf(" a: Set plot attributes: This gives you the possibility to set plot\n"); - printf(" attributes for an ensemble. Observe that all the members in the\n"); - printf(" ensemble are plotted with the same attributes. (Currently only\n"); - printf(" attribute is color).\n"); - printf("\n"); - printf("***************************************************************************\n"); -} - - -/*****************************************************************/ - -int main(int argc , char ** argv) { - install_SIGNALS(); - - //setvbuf(stdout, NULL, _IOFBF, 0); - setenv( "PLPLOT_LIB" , "/project/res/x86_64_RH_5/plplot/plplot-5.10.0/share/plplot5.10.0" , 1); - - if(argc > 1){ - if(strcmp(argv[1], "-b") == 0 || strcmp(argv[1], "-s") == 0) { - if (strcmp(argv[1], "-b") == 0) { - use_viewer = true ; - } ; - char * path = util_blocking_alloc_stdin_line(10); - - hash_type * ens_table = hash_alloc(); - hash_type * ens_rft_table = hash_alloc(); - plot_info_type * info = plot_info_alloc( path , "png" , VIEWER); - arg_pack_type * arg_pack = arg_pack_alloc(); - arg_pack_append_ptr( arg_pack , ens_table ); - arg_pack_append_ptr( arg_pack , ens_rft_table ); - arg_pack_append_ptr( arg_pack , info ); - char * line; - free(path); - - while (1){ - line = util_blocking_alloc_stdin_line(10); - util_strupr(line); - - //if(strcmp(line, "Q") == 0 || strcmp(line, "STOP") == 0 ){ - if(strcmp(line, QUIT_CMD) == 0){ - - plot_info_free( info ); - hash_free( ens_table ); - hash_free( ens_rft_table ); - return 0 ; - - } else if(strcmp(line, CREATE_ENS_CMD) == 0){ - - create_ensemble_batch(ens_table, ens_rft_table); - - } else if (strcmp(line, PLOT_CMD) == 0){ - - plot_batch(arg_pack); - - } else if (strcmp(line, ATTRIBUTES_CMD) == 0){ - ens_set_plot_attributes_batch(ens_table, ens_rft_table); - } else if (strcmp(line, QUANTILES_CMD) == 0){ - ens_set_plot_quantile_properties_batch( ens_table ); - } else { - - char message[128] ; - sprintf(message,"Unknown command %s",line) ; - error_reply(message) ; - - } ; - - free(line); - } - plot_info_free( info ); - hash_free( ens_table ); - hash_free( ens_rft_table ); - return 1 ; - - } - } - - hash_type * ens_table = hash_alloc(); - plot_info_type * info = plot_info_alloc( "Plot" , "png" , VIEWER); - - print_usage(); - - - { - int iarg; - if (argc > 1) { - printf("Loading realizations in ensemble: \"Ensemble1\"\n"); - ens_type * ens = ens_alloc(); - for (iarg = 1; iarg < argc; iarg++) - ens_load_summary(ens , argv[iarg]); - hash_insert_hash_owned_ref( ens_table , "Ensemble1" , ens , ens_free__); - } - } - - { - menu_type * menu = menu_alloc("E C L I P S E Ensemble plot" , "Quit" , "q"); - arg_pack_type * arg_pack = arg_pack_alloc(); - - arg_pack_append_ptr( arg_pack , ens_table ); - arg_pack_append_ptr( arg_pack , info ); - menu_add_item(menu , "Plot summary ensemble(s)" , "p" , plot_all , arg_pack , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Create new ensemble" , "cC" , create_ensemble , ens_table , NULL); - menu_add_item(menu , "New simulation case" , "nN" , add_simulation , ens_table , NULL); - menu_add_item(menu , "Add many simulations" , "mM" , add_many_simulations , ens_table , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Set plot attributes (color)" , "aA" , set_plot_attributes , ens_table , NULL); - menu_run(menu); - menu_free( menu ); - arg_pack_free( arg_pack ); - } - - plot_info_free( info ); - hash_free( ens_table ); - exit(1); -} diff --git a/ThirdParty/Ert/devel/libecl/applications/grid_info.c b/ThirdParty/Ert/devel/libecl/applications/grid_info.c index 239de99862..9754a109f0 100644 --- a/ThirdParty/Ert/devel/libecl/applications/grid_info.c +++ b/ThirdParty/Ert/devel/libecl/applications/grid_info.c @@ -1,19 +1,19 @@ /* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'grid_info.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. + Copyright (C) 2011 Statoil ASA, Norway. + + The file 'grid_info.c' is part of ERT - Ensemble based Reservoir Tool. + + ERT is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ERT is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License at + for more details. */ #include @@ -35,13 +35,13 @@ int main(int argc, char ** argv) { { ecl_grid_type * ecl_grid; const char * grid_file = argv[1]; - - + + ecl_grid = ecl_grid_alloc(grid_file ); ecl_grid_summarize( ecl_grid ); if (argc >= 3) { ecl_grid_type * grid2 = ecl_grid_alloc( argv[2] ); - + if (ecl_grid_compare( ecl_grid , grid2 , true , false , false)) printf("\nThe grids %s %s are IDENTICAL.\n" , argv[1] , argv[2]); else { @@ -54,13 +54,12 @@ int main(int argc, char ** argv) { /* printf("----\n"); { - double * ri_points = util_calloc( ecl_grid_get_global_size( ecl_grid ) * 24 , sizeof * ri_points ); + double * ri_points = util_calloc( ecl_grid_get_global_size( ecl_grid ) * 24 , sizeof * ri_points ); ecl_grid_ri_export( ecl_grid , ri_points ); free( ri_points ); } printf("----\n"); */ - ecl_grid_fwrite_EGRID( ecl_grid , "/tmp/INFO.EGRID", true); ecl_grid_free(ecl_grid); } } diff --git a/ThirdParty/Ert/devel/libecl/applications/summary2csv.c b/ThirdParty/Ert/devel/libecl/applications/summary2csv.c deleted file mode 100644 index 2b9fb94eb9..0000000000 --- a/ThirdParty/Ert/devel/libecl/applications/summary2csv.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - The file 'summary2csv.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include -#include -#include -#include - -#include -#include - -#include - - - -static bool extend_key_list( const ecl_sum_type * ecl_sum , const stringlist_type * var_list , const char * well , stringlist_type * key_list ) { - bool oil_producer = false; - int last_step = ecl_sum_get_data_length( ecl_sum ) - 1; - char * wopt_key = ecl_sum_alloc_well_key( ecl_sum , "WOPT", well); - if (ecl_sum_has_key( ecl_sum , wopt_key) && (ecl_sum_get_well_var( ecl_sum , last_step , well , "WOPT") > 0 )) { - /* - We add all the keys unconditionally here; and then let the - ecl_sum_fprintf() function print a message on stderr if it is - missing. - */ - int ivar; - for (ivar = 0; ivar < stringlist_get_size( var_list ); ivar++) { - const char * var = stringlist_iget( var_list , ivar ); - stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , var, well) ); - } - oil_producer = true; - } - free( wopt_key ); - return oil_producer; -} - - -int main(int argc , char ** argv) { - { - ecl_sum_fmt_type fmt; - bool well_rows = false; - bool include_restart = true; - int arg_offset = 1; - - if (argc != 2) { - printf("You must supply the name of a case as:\n\n summary2csv.exe ECLIPSE_CASE\n\nThe case can optionally contain a leading path component.\n"); - exit(1); - } - - { - char * data_file = argv[arg_offset]; - ecl_sum_type * ecl_sum; - stringlist_type * var_list = stringlist_alloc_new(); - - stringlist_append_ref( var_list , "WOPR" ); - stringlist_append_ref( var_list , "WOPT" ); - stringlist_append_ref( var_list , "WGPR" ); - stringlist_append_ref( var_list , "WGPT" ); - stringlist_append_ref( var_list , "WWPR" ); - stringlist_append_ref( var_list , "WWPT" ); - - ecl_sum_fmt_init_csv( &fmt ); - ecl_sum = ecl_sum_fread_alloc_case__( data_file , ":" , include_restart); - if (ecl_sum != NULL) { - char * csv_file = util_alloc_filename( NULL , ecl_sum_get_base(ecl_sum) , "txt"); // Will save to current path; can use ecl_sum_get_path() to save to target path instead. - FILE * stream = util_fopen( csv_file , "w"); - - stringlist_type * well_list = ecl_sum_alloc_well_list( ecl_sum , NULL ); - stringlist_type * key_list = stringlist_alloc_new( ); - int iw; - - for (iw = 0; iw < stringlist_get_size( well_list ); iw++) { - const char * well = stringlist_iget( well_list , iw ); - if (!extend_key_list( ecl_sum , var_list , well , key_list)) - fprintf(stderr , "Ignoring well: %s \n",well); - - if (well_rows) { - if (stringlist_get_size(key_list)) { - ecl_sum_fprintf(ecl_sum , stream , key_list , false , &fmt); - stringlist_clear( key_list ); - } - } - } - if (!well_rows) - ecl_sum_fprintf(ecl_sum , stream , key_list , false , &fmt); - - stringlist_free( well_list ); - stringlist_free( key_list ); - ecl_sum_free(ecl_sum); - fclose( stream ); - free( csv_file ); - } else - fprintf(stderr,"summary2csv: No summary data found for case:%s\n", data_file ); - - stringlist_free( var_list ); - } - } -} diff --git a/ThirdParty/Ert/devel/libecl/applications/view_summary.c b/ThirdParty/Ert/devel/libecl/applications/view_summary.c index 9300550a5b..579466d2a3 100644 --- a/ThirdParty/Ert/devel/libecl/applications/view_summary.c +++ b/ThirdParty/Ert/devel/libecl/applications/view_summary.c @@ -19,7 +19,9 @@ #include #include -#ifdef HAVE_GETOPT +#include + +#ifdef ERT_HAVE_GETOPT #include #endif @@ -60,7 +62,7 @@ void print_help_and_exit() { printf(" LBPR:LGR3:10,10,10 - The block pressure in cell 10,10,10 - in LGR3\n"); printf("\n"); -#ifdef HAVE_GETOPT +#ifdef ERT_HAVE_GETOPT printf("The option --list can be used to list all available keys.\n"); printf("\n"); printf("Options:\n"); @@ -126,13 +128,9 @@ static void build_key_list( const ecl_sum_type * ecl_sum , stringlist_type * key missing keys. */ - if (util_string_has_wildcard( argv[iarg] )) { - stringlist_type * tmp_keys = stringlist_alloc_new( ); - ecl_sum_select_matching_general_var_list( ecl_sum , argv[iarg] , tmp_keys); - stringlist_sort( tmp_keys , (string_cmp_ftype *) util_strcmp_int ); - stringlist_append_stringlist_copy( key_list , tmp_keys ); - stringlist_free( tmp_keys ); - } else + if (util_string_has_wildcard( argv[iarg] )) + ecl_sum_select_matching_general_var_list( ecl_sum , argv[iarg] , key_list); + else stringlist_append_copy( key_list , argv[iarg] ); } } @@ -147,7 +145,7 @@ int main(int argc , char ** argv) { bool print_header = true; int arg_offset = 1; -#ifdef HAVE_GETOPT +#ifdef ERT_HAVE_GETOPT if (argc == 1) print_help_and_exit(); else { diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h index a11c7e34d8..82146364be 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h @@ -144,6 +144,10 @@ extern "C" { bool ecl_grid_cell_invalid3(const ecl_grid_type * ecl_grid , int i , int j , int k); double ecl_grid_cell_invalid1A(const ecl_grid_type * grid , int active_index); + bool ecl_grid_cell_valid1(const ecl_grid_type * ecl_grid , int global_index); + bool ecl_grid_cell_valid3(const ecl_grid_type * ecl_grid , int i , int j , int k); + double ecl_grid_cell_valid1A(const ecl_grid_type * grid , int active_index); + void ecl_grid_dump(const ecl_grid_type * grid , FILE * stream); void ecl_grid_dump_ascii(ecl_grid_type * grid , bool active_only , FILE * stream); void ecl_grid_dump_ascii_cell1(ecl_grid_type * grid , int global_index , FILE * stream, const double * offset); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw.h index 809a126ee2..354b59e546 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw.h @@ -99,7 +99,7 @@ extern "C" { bool ecl_kw_header_eq(const ecl_kw_type *ecl_kw1 , const ecl_kw_type * ecl_kw2); bool ecl_kw_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2); bool ecl_kw_icmp_string( const ecl_kw_type * ecl_kw , int index, const char * other_string); - bool ecl_kw_numeric_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2 , double rel_diff); + bool ecl_kw_numeric_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2 , double abs_diff , double rel_diff); bool ecl_kw_block_equal( const ecl_kw_type * ecl_kw1 , const ecl_kw_type * ecl_kw2 , int cmp_elements); bool ecl_kw_data_equal( const ecl_kw_type * ecl_kw , const void * data); bool ecl_kw_content_equal( const ecl_kw_type * ecl_kw1 , const ecl_kw_type * ecl_kw2); @@ -145,6 +145,7 @@ extern "C" { void ecl_kw_inplace_sub( ecl_kw_type * target_kw , const ecl_kw_type * sub_kw); void ecl_kw_inplace_div( ecl_kw_type * target_kw , const ecl_kw_type * div_kw); void ecl_kw_inplace_mul( ecl_kw_type * target_kw , const ecl_kw_type * mul_kw); + void ecl_kw_inplace_abs( ecl_kw_type * kw ); void ecl_kw_inplace_add_indexed( ecl_kw_type * target_kw , const int_vector_type * index_set , const ecl_kw_type * add_kw); void ecl_kw_inplace_sub_indexed( ecl_kw_type * target_kw , const int_vector_type * index_set , const ecl_kw_type * sub_kw); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_file.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_file.h index 63e421bc48..59c1565ba0 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_file.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_file.h @@ -34,7 +34,6 @@ typedef struct ecl_rft_file_struct ecl_rft_file_type; char * ecl_rft_file_alloc_case_filename(const char * case_input ); const char * ecl_rft_file_get_filename( const ecl_rft_file_type * rft_file ); ecl_rft_file_type * ecl_rft_file_alloc_case(const char * case_input ); -bool ecl_rft_file_case_has_rft(const char * case_input ); bool ecl_rft_file_case_has_rft( const char * case_input ); ecl_rft_file_type * ecl_rft_file_alloc(const char * ); void ecl_rft_file_free(ecl_rft_file_type * ); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h index b4f68af660..1f033ce016 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h @@ -30,6 +30,9 @@ extern "C" { typedef struct { + // The report step is from the SEQNUM keyword for unified files, + // and inferred from the filename for non unified files. + int report_step; int day; int year; int month; @@ -77,6 +80,7 @@ extern "C" { void ecl_rsthead_free( ecl_rsthead_type * rsthead ); + ecl_rsthead_type * ecl_rsthead_alloc_from_kw( int report_step , const ecl_kw_type * intehead_kw , const ecl_kw_type * doubhead_kw , const ecl_kw_type * logihead_kw ); ecl_rsthead_type * ecl_rsthead_ialloc( const ecl_file_type * rst_file , int occurence); ecl_rsthead_type * ecl_rsthead_alloc( const ecl_file_type * rst_file ); ecl_rsthead_type * ecl_rsthead_alloc_empty(); @@ -85,6 +89,8 @@ extern "C" { void ecl_rsthead_fprintf_struct( const ecl_rsthead_type * header , FILE * stream); bool ecl_rsthead_equal( const ecl_rsthead_type * header1 , const ecl_rsthead_type * header2); double ecl_rsthead_get_sim_days( const ecl_rsthead_type * header ); + int ecl_rsthead_get_report_step( const ecl_rsthead_type * header ); + time_t ecl_rsthead_get_sim_time( const ecl_rsthead_type * header ); #ifdef __cplusplus } diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h index 9ecf59114f..7191005621 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h @@ -52,7 +52,6 @@ extern "C" { char * value_dash; } ecl_sum_fmt_type; - void ecl_sum_fmt_init_csv( ecl_sum_fmt_type * fmt ); /*****************************************************************/ @@ -205,6 +204,7 @@ typedef struct ecl_sum_struct ecl_sum_type; char * ecl_sum_alloc_well_key( const ecl_sum_type * ecl_sum , const char * keyword , const char * wgname); bool ecl_sum_report_step_equal( const ecl_sum_type * ecl_sum1 , const ecl_sum_type * ecl_sum2); bool ecl_sum_report_step_compatible( const ecl_sum_type * ecl_sum1 , const ecl_sum_type * ecl_sum2); + void ecl_sum_export_csv(const ecl_sum_type * ecl_sum , const char * filename , const stringlist_type * var_list , const char * date_format , const char * sep); UTIL_IS_INSTANCE_HEADER( ecl_sum ); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_data.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_data.h index 6bc5603c3e..c5564baf75 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_data.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_data.h @@ -86,7 +86,7 @@ typedef struct ecl_sum_data_struct ecl_sum_data_type ; ecl_sum_tstep_type * ecl_sum_data_add_new_tstep( ecl_sum_data_type * data , int report_step , double sim_seconds); bool ecl_sum_data_report_step_equal( const ecl_sum_data_type * data1 , const ecl_sum_data_type * data2); bool ecl_sum_data_report_step_compatible( const ecl_sum_data_type * data1 , const ecl_sum_data_type * data2); - void ecl_sum_data_write_csv_file(const ecl_sum_data_type * data , time_t sim_time, const ecl_sum_vector_type * keylist, FILE *fp); + void ecl_sum_data_fwrite_interp_csv_line(const ecl_sum_data_type * data , time_t sim_time, const ecl_sum_vector_type * keylist, FILE *fp); #ifdef __cplusplus } diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_vector.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_vector.h index 4e265d383f..8e589d3590 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_vector.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum_vector.h @@ -22,6 +22,9 @@ #ifdef __cplusplus extern "C" { #endif + +#include + #include typedef struct ecl_sum_vector_struct ecl_sum_vector_type; @@ -36,6 +39,9 @@ typedef struct ecl_sum_vector_struct ecl_sum_vector_type; int ecl_sum_vector_iget_param_index(const ecl_sum_vector_type * ecl_sum_vector, int index); int ecl_sum_vector_get_size(const ecl_sum_vector_type * ecl_sum_vector); + UTIL_IS_INSTANCE_HEADER( ecl_sum_vector); + + #ifdef __cplusplus } #endif diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_util.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_util.h index 9c2b0441c7..361876a131 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_util.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_util.h @@ -175,7 +175,6 @@ ert_ecl_unit_enum ecl_util_get_unit_set(const char * data_file); bool ecl_util_valid_basename_fmt( const char * basename_fmt ); bool ecl_util_valid_basename( const char * basename ); const char * ecl_util_get_phase_name( ecl_phase_enum phase ); -const char * ecl_util_file_enum_iget( int index, int * value); int ecl_util_select_filelist( const char * path , const char * base , ecl_file_enum file_type , bool fmt_file , stringlist_type * filelist); void ecl_util_append_month_range( time_t_vector_type * date_list , time_t start_date , time_t end_date , bool force_append_end); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/smspec_node.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/smspec_node.h index 27e44f8416..edded8322d 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/smspec_node.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/smspec_node.h @@ -22,9 +22,6 @@ #include -#include - - #ifdef __cplusplus extern "C" { #endif @@ -34,6 +31,13 @@ extern "C" { #define SMSPEC_PARAMS_INDEX_INVALID -77 +#define SMSPEC_TIME_KEYWORD "TIME" +#define SMSPEC_TIME_NUMS_VALUE -32676 + +#define SMSPEC_YEARS_KEYWORD "YEARS" +#define SMSPEC_YEARS_NUMS_VALUE -32676 + + typedef enum {ECL_SMSPEC_INVALID_VAR = 0 , ECL_SMSPEC_AQUIFER_VAR = 1 , ECL_SMSPEC_WELL_VAR = 2 , /* X */ @@ -99,6 +103,7 @@ typedef enum {ECL_SMSPEC_INVALID_VAR = 0 , float default_value); smspec_node_type * smspec_node_alloc_new(int params_index, float default_value); + smspec_node_type * smspec_node_alloc_copy( const smspec_node_type* ); void smspec_node_free( smspec_node_type * index ); void smspec_node_free__(void * arg); diff --git a/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt b/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt index 0258867d02..e66ba679cb 100644 --- a/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt @@ -91,7 +91,7 @@ if (ERT_USE_OPENMP) endif() add_library( ecl ${LIBRARY_TYPE} ${source_files} ) -set_target_properties( ecl PROPERTIES VERSION 1.0 SOVERSION 1.0 ) +set_target_properties( ecl PROPERTIES VERSION ${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} SOVERSION ${ERT_VERSION_MAJOR}) if (USE_RUNPATH) add_runpath( ecl ) endif() diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_file.c b/ThirdParty/Ert/devel/libecl/src/ecl_file.c index 8e91a857f4..777f355a23 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_file.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_file.c @@ -1129,14 +1129,4 @@ bool ecl_file_save_kw( const ecl_file_type * ecl_file , const ecl_kw_type * ecl_ } } -/* Small function to support Python based enum introspection. */ - -#ifdef HAVE_FORK - -const char * ecl_util_file_flags_enum_iget( int index , int * value) { - return util_enum_iget( index , ECL_FILE_FLAGS_ENUM_SIZE , (const util_enum_element_type []) { ECL_FILE_FLAGS_ENUM_DEFS }, value); -} - -#endif - diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_grid.c b/ThirdParty/Ert/devel/libecl/src/ecl_grid.c index 9c73783e56..bb27b8e3f0 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_grid.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_grid.c @@ -2287,6 +2287,10 @@ static void ecl_grid_init_nnc(ecl_grid_type * main_grid, ecl_file_type * ecl_fil int num_nnchead_kw = ecl_file_get_num_named_kw( ecl_file , NNCHEAD_KW ); int i; + if(num_nnchead_kw > 0 && main_grid->eclipse_version == 2015){ + return; //Eclipse 2015 has an error with nnc. + } + for (i = 0; i < num_nnchead_kw; i++) { ecl_file_push_block(ecl_file); /* <---------------------------------------------------------------- */ ecl_file_select_block(ecl_file , NNCHEAD_KW , i); @@ -4319,9 +4323,19 @@ double ecl_grid_get_cell_thickness3( const ecl_grid_type * grid , int i , int j double ecl_grid_get_cell_dx1( const ecl_grid_type * grid , int global_index ) { - fprintf(stderr , "** WARNING: The ecl_grid_get_cell_dx1() function is only a stub returning -1.\n"); - fprintf(stderr , " If you need a correct value for cell dx you must rebuild a new ert version.\n"); - return -1; + const ecl_cell_type * cell = ecl_grid_get_cell( grid , global_index); + double dx = 0; + double dy = 0; + int c; + + for (c = 1; c < 8; c += 2) { + dx += cell->corner_list[c].x - cell->corner_list[c - 1].x; + dy += cell->corner_list[c].y - cell->corner_list[c - 1].y; + } + dx *= 0.25; + dy *= 0.25; + + return sqrt( dx * dx + dy * dy ); } @@ -4332,15 +4346,17 @@ double ecl_grid_get_cell_dx3( const ecl_grid_type * grid , int i , int j , int k double ecl_grid_get_cell_dy1( const ecl_grid_type * grid , int global_index ) { - fprintf(stderr , "** WARNING: The ecl_grid_get_cell_dy1() function is only a stub returning -1.\n"); - fprintf(stderr , " If you need a correct value for cell dy you must update rebuild a new ert version.\n"); - return -1; + double V = ecl_grid_get_cell_volume1(grid , global_index); + double dz = ecl_grid_get_cell_thickness1( grid , global_index); + double dx = ecl_grid_get_cell_dx1( grid , global_index); + + return V / (dx * dz); } double ecl_grid_get_cell_dy3( const ecl_grid_type * grid , int i , int j , int k) { const int global_index = ecl_grid_get_global_index3(grid , i,j,k); - return ecl_grid_get_cell_dy1( grid , global_index ); + return ecl_grid_get_cell_dx1( grid , global_index ); } @@ -4395,6 +4411,25 @@ double ecl_grid_cell_invalid1A(const ecl_grid_type * grid , int active_index) { } +bool ecl_grid_cell_valid1(const ecl_grid_type * ecl_grid , int global_index) { + ecl_cell_type * cell = ecl_grid_get_cell( ecl_grid , global_index); + if (GET_CELL_FLAG(cell , CELL_FLAG_TAINTED)) + return false; + else + return (GET_CELL_FLAG(cell , CELL_FLAG_VALID)); +} + +bool ecl_grid_cell_valid3(const ecl_grid_type * ecl_grid , int i , int j , int k) { + int global_index = ecl_grid_get_global_index3( ecl_grid , i , j , k); + return ecl_grid_cell_valid1( ecl_grid , global_index ); +} + +double ecl_grid_cell_valid1A(const ecl_grid_type * grid , int active_index) { + const int global_index = ecl_grid_get_global_index1A(grid , active_index); + return ecl_grid_cell_valid1( grid , global_index ); +} + + /*****************************************************************/ /* Functions for LGR query/lookup/... */ @@ -4633,6 +4668,13 @@ double ecl_grid_get_cell_volume1( const ecl_grid_type * ecl_grid, int global_ind } +double ecl_grid_get_cell_volume1A( const ecl_grid_type * ecl_grid, int active_index ) { + int global_index = ecl_grid_get_global_index1A( ecl_grid , active_index ); + return ecl_grid_get_cell_volume1( ecl_grid , global_index ); +} + + + double ecl_grid_get_cell_volume1_tskille( const ecl_grid_type * ecl_grid, int global_index ) { ecl_cell_type * cell = ecl_grid_get_cell( ecl_grid , global_index ); return ecl_cell_get_volume_tskille( cell ); @@ -5978,3 +6020,38 @@ int ecl_grid_get_num_nnc( const ecl_grid_type * grid ) { } +static ecl_kw_type * ecl_grid_alloc_volume_kw_active( const ecl_grid_type * grid) { + ecl_kw_type * volume_kw = ecl_kw_alloc("VOLUME" , ecl_grid_get_active_size(grid) , ECL_DOUBLE_TYPE); + { + double * volume_data = ecl_kw_get_ptr( volume_kw ); + int active_index; + for (active_index = 0; active_index < ecl_grid_get_active_size(grid); active_index++) { + double cell_volume = ecl_grid_get_cell_volume1A(grid , active_index); + volume_data[ active_index] = cell_volume; + } + } + return volume_kw; +} + + +static ecl_kw_type * ecl_grid_alloc_volume_kw_global( const ecl_grid_type * grid) { + ecl_kw_type * volume_kw = ecl_kw_alloc("VOLUME" , ecl_grid_get_global_size(grid) , ECL_DOUBLE_TYPE); + { + double * volume_data = ecl_kw_get_ptr( volume_kw ); + int global_index; + for (global_index = 0; global_index < ecl_grid_get_global_size(grid); global_index++) { + double cell_volume = ecl_grid_get_cell_volume1(grid , global_index); + volume_data[ global_index] = cell_volume; + } + } + return volume_kw; +} + + + +ecl_kw_type * ecl_grid_alloc_volume_kw( const ecl_grid_type * grid , bool active_size) { + if (active_size) + return ecl_grid_alloc_volume_kw_active( grid ); + else + return ecl_grid_alloc_volume_kw_global( grid ); +} diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_kw.c b/ThirdParty/Ert/devel/libecl/src/ecl_kw.c index 449868ba20..3c885033ad 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_kw.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_kw.c @@ -404,17 +404,22 @@ bool ecl_kw_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2) { } -#define CMP(ctype,ABS) \ -static bool CMP_ ## ctype( ctype v1, ctype v2 , ctype epsilon) { \ +#define CMP(ctype,ABS) \ +static bool CMP_ ## ctype( ctype v1, ctype v2 , ctype abs_epsilon , ctype rel_epsilon) { \ if ((ABS(v1) + ABS(v2)) == 0) \ return true; \ else { \ - ctype d = ABS(v1 - v2) / (ABS(v1) + ABS(v2)); \ - if (d < epsilon) \ - return true; \ - else \ - return false; \ + ctype diff = ABS(v1 - v2); \ + if (diff < abs_epsilon) \ + return true; \ + else { \ + ctype sum = ABS(v1) + ABS(v2); \ + ctype d = diff / sum; \ + if (d < rel_epsilon) \ + return true; \ + } \ } \ + return false; \ } CMP(float,fabsf) CMP(double,fabs) @@ -422,14 +427,14 @@ CMP(double,fabs) #define ECL_KW_NUMERIC_CMP(ctype) \ - static bool ecl_kw_numeric_equal_ ## ctype( const ecl_kw_type * ecl_kw1 , const ecl_kw_type * ecl_kw2 , ctype rel_diff) { \ + static bool ecl_kw_numeric_equal_ ## ctype( const ecl_kw_type * ecl_kw1 , const ecl_kw_type * ecl_kw2 , ctype abs_diff , ctype rel_diff) { \ int index; \ bool equal = true; \ { \ const ctype * data1 = (const ctype *) ecl_kw1->data; \ const ctype * data2 = (const ctype *) ecl_kw2->data; \ for (index = 0; index < ecl_kw1->size; index++) { \ - equal = CMP_ ## ctype( data1[index] , data2[index] , rel_diff); \ + equal = CMP_ ## ctype( data1[index] , data2[index] , abs_diff , rel_diff); \ if (!equal) \ break; \ } \ @@ -448,7 +453,7 @@ ECL_KW_NUMERIC_CMP( double ) @rel_diff. Does not consider consider the kw header. */ -bool ecl_kw_numeric_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2 , double rel_diff) { +bool ecl_kw_numeric_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2 , double abs_diff , double rel_diff) { bool equal = true; if ( ecl_kw1->ecl_type != ecl_kw2->ecl_type) equal = false; @@ -458,9 +463,9 @@ bool ecl_kw_numeric_equal(const ecl_kw_type *ecl_kw1, const ecl_kw_type *ecl_kw2 if (equal) { if (ecl_kw1->ecl_type == ECL_FLOAT_TYPE) - equal = ecl_kw_numeric_equal_float( ecl_kw1 , ecl_kw2 , rel_diff ); + equal = ecl_kw_numeric_equal_float( ecl_kw1 , ecl_kw2 , abs_diff , rel_diff ); else if (ecl_kw1->ecl_type == ECL_DOUBLE_TYPE) - equal = ecl_kw_numeric_equal_double( ecl_kw1 , ecl_kw2 , rel_diff ); + equal = ecl_kw_numeric_equal_double( ecl_kw1 , ecl_kw2 , abs_diff , rel_diff ); else equal = ecl_kw_data_equal( ecl_kw1 , ecl_kw2->data ); } @@ -1127,6 +1132,9 @@ bool ecl_kw_fread_data(ecl_kw_type *ecl_kw, fortio_type *fortio) { index++; } } + + /* Skip the trailing newline */ + fortio_fseek( fortio , 1 , SEEK_CUR); return true; } else { bool read_ok = true; @@ -2226,6 +2234,41 @@ void ecl_kw_inplace_sub_indexed( ecl_kw_type * target_kw , const int_vector_type } +/*****************************************************************/ + +#define ECL_KW_TYPED_INPLACE_ABS( ctype , abs_func) \ +void ecl_kw_inplace_abs_ ## ctype( ecl_kw_type * kw ) { \ + ctype * data = ecl_kw_get_data_ref( kw ); \ + int i; \ + for (i=0; i < kw->size; i++) \ + data[i] = abs_func(data[i]); \ +} + +ECL_KW_TYPED_INPLACE_ABS( int , abs ) +ECL_KW_TYPED_INPLACE_ABS( double , fabs ) +ECL_KW_TYPED_INPLACE_ABS( float , fabsf ) +#undef ECL_KW_TYPED_INPLACE_ABS + + + +void ecl_kw_inplace_abs( ecl_kw_type * kw ) { + ecl_type_enum type = ecl_kw_get_type(kw); + switch (type) { + case(ECL_FLOAT_TYPE): + ecl_kw_inplace_abs_float( kw ); + break; + case(ECL_DOUBLE_TYPE): + ecl_kw_inplace_abs_double( kw ); + break; + case(ECL_INT_TYPE): + ecl_kw_inplace_abs_int( kw ); + break; + default: + util_abort("%s: inplace abs not implemented for type:%s \n",__func__ , ecl_util_get_type_name( type )); + } +} + + /*****************************************************************/ #define ECL_KW_TYPED_INPLACE_MUL( ctype ) \ diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c b/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c index 1891855d2e..0a2bced36e 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c @@ -37,6 +37,7 @@ #define PLT_DATA_TYPE_ID 87166667 + struct ecl_rft_cell_struct { UTIL_TYPE_ID_DECLARATION; int i,j,k; diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c b/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c index 8f81f28dad..d5b9c4eee7 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c @@ -69,6 +69,20 @@ struct ecl_rft_node_struct { +/* + The implementation of cell types based on _either_ RFT data or PLT + data is based on a misunderstanding and is currently WRONG. One + section in an RFT file can contain RFT data, PLT data and SEGMENT + data. The @data_type string should therefor not be interpreted as a + type string, but rather as a "bit mask": + + + "R" => Section contains only RFT data. + "P" => Section contains only PLT data. + "RP" => Section contains *BOTH* RFT data and PLT data. +*/ + + /** Will return NULL if the data_type_string is equal to "SEGMENT" - that is not (yet) supported. @@ -137,6 +151,18 @@ void ecl_rft_node_append_cell( ecl_rft_node_type * rft_node , ecl_rft_cell_type } +static ecl_kw_type * ecl_rft_node_get_pressure_kw( ecl_rft_node_type * rft_node , const ecl_file_type * rft ) { + if (rft_node->data_type == RFT) + return ecl_file_iget_named_kw( rft , PRESSURE_KW , 0); + else { + ecl_kw_type * conpres_kw = ecl_file_iget_named_kw( rft , CONPRES_KW , 0); + if (ecl_kw_element_sum_float( conpres_kw ) > 0.0 ) + return conpres_kw; + else + return ecl_file_iget_named_kw( rft , PRESSURE_KW , 0); + } +} + static void ecl_rft_node_init_RFT_cells( ecl_rft_node_type * rft_node , const ecl_file_type * rft) { const ecl_kw_type * conipos = ecl_file_iget_named_kw( rft , CONIPOS_KW , 0); @@ -145,7 +171,7 @@ static void ecl_rft_node_init_RFT_cells( ecl_rft_node_type * rft_node , const ec const ecl_kw_type * depth_kw = ecl_file_iget_named_kw( rft , DEPTH_KW , 0); const ecl_kw_type * swat_kw = ecl_file_iget_named_kw( rft , SWAT_KW , 0); const ecl_kw_type * sgas_kw = ecl_file_iget_named_kw( rft , SGAS_KW , 0); - const ecl_kw_type * pressure_kw = ecl_file_iget_named_kw( rft , PRESSURE_KW , 0); + const ecl_kw_type * pressure_kw = ecl_rft_node_get_pressure_kw( rft_node , rft ); const float * SW = ecl_kw_get_float_ptr( swat_kw ); const float * SG = ecl_kw_get_float_ptr( sgas_kw ); @@ -183,7 +209,7 @@ static void ecl_rft_node_init_PLT_cells( ecl_rft_node_type * rft_node , const ec const float * WR = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONWRAT_KW , 0)); const float * GR = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONGRAT_KW , 0)); const float * OR = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONORAT_KW , 0)); - const float * P = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONPRES_KW , 0)); + const float * P = ecl_kw_get_float_ptr( ecl_rft_node_get_pressure_kw( rft_node , rft )); const float * depth = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONDEPTH_KW , 0)); const float * flowrate = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONVTUB_KW , 0)); const float * oil_flowrate = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONOTUB_KW , 0)); diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c b/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c index bb3505afdb..a7958ff88c 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c @@ -37,19 +37,26 @@ time_t ecl_rsthead_date( const ecl_kw_type * intehead_kw ) { } +time_t ecl_rsthead_get_sim_time( const ecl_rsthead_type * header ) { + return header->sim_time; +} + double ecl_rsthead_get_sim_days( const ecl_rsthead_type * header ) { return header->sim_days; } +int ecl_rsthead_get_report_step( const ecl_rsthead_type * header ) { + return header->report_step; +} + -ecl_rsthead_type * ecl_rsthead_ialloc( const ecl_file_type * rst_file , int occurence) { - if (ecl_file_get_num_named_kw( rst_file , INTEHEAD_KW) > occurence) { - const ecl_kw_type * intehead_kw = ecl_file_iget_named_kw( rst_file , INTEHEAD_KW , occurence); - ecl_rsthead_type * rsthead = util_malloc( sizeof * rsthead ); - { +ecl_rsthead_type * ecl_rsthead_alloc_from_kw( int report_step , const ecl_kw_type * intehead_kw , const ecl_kw_type * doubhead_kw , const ecl_kw_type * logihead_kw ) { + ecl_rsthead_type * rsthead = util_malloc( sizeof * rsthead ); + rsthead->report_step = report_step; + { const int * data = (const int *) ecl_kw_get_void_ptr( intehead_kw ); rsthead->day = data[INTEHEAD_DAY_INDEX]; @@ -78,31 +85,43 @@ ecl_rsthead_type * ecl_rsthead_ialloc( const ecl_file_type * rst_file , int occu // The only derived quantity rsthead->sim_time = rsthead_date( rsthead->day , rsthead->month , rsthead->year ); - } + } + rsthead->sim_days = ecl_kw_iget_double( doubhead_kw , DOUBHEAD_DAYS_INDEX ); + if (logihead_kw) + rsthead->dualp = ecl_kw_iget_bool( logihead_kw , LOGIHEAD_DUALP_INDEX); - if (ecl_file_get_num_named_kw(rst_file, DOUBHEAD_KW) > occurence) { - const ecl_kw_type * doubhead_kw = ecl_file_iget_named_kw( rst_file , DOUBHEAD_KW , occurence); - rsthead->sim_days = ecl_kw_iget_double( doubhead_kw , DOUBHEAD_DAYS_INDEX ); - } + return rsthead; +} - if (ecl_file_get_num_named_kw(rst_file, LOGIHEAD_KW) > occurence) { - const ecl_kw_type * logihead_kw = ecl_file_iget_named_kw( rst_file , LOGIHEAD_KW , occurence); - rsthead->dualp = ecl_kw_iget_bool( logihead_kw , LOGIHEAD_DUALP_INDEX); - } else - rsthead->dualp = false; + ecl_rsthead_type * ecl_rsthead_ialloc( const ecl_file_type * rst_file , int occurence) { + if (ecl_file_get_num_named_kw( rst_file , INTEHEAD_KW) > occurence) { + const ecl_kw_type * intehead_kw = ecl_file_iget_named_kw( rst_file , INTEHEAD_KW , occurence); + const ecl_kw_type * doubhead_kw = ecl_file_iget_named_kw( rst_file , DOUBHEAD_KW , occurence); + const ecl_kw_type * logihead_kw = NULL; + int report_step; + if (ecl_file_get_num_named_kw(rst_file, LOGIHEAD_KW) > occurence) + logihead_kw = ecl_file_iget_named_kw( rst_file , LOGIHEAD_KW , occurence); + + if (ecl_file_get_num_named_kw( rst_file , SEQNUM_KW) > occurence) { + const ecl_kw_type * seqnum_kw = ecl_file_iget_named_kw( rst_file , SEQNUM_KW , occurence ); + report_step = ecl_kw_iget_int( seqnum_kw , 0); + } else + ecl_util_get_file_type( ecl_file_get_src_file(rst_file) , NULL , &report_step); - return rsthead; + return ecl_rsthead_alloc_from_kw( report_step , intehead_kw , doubhead_kw , logihead_kw ); } else return NULL; } + ecl_rsthead_type * ecl_rsthead_alloc( const ecl_file_type * rst_file) { return ecl_rsthead_ialloc( rst_file , 0 ); } + ecl_rsthead_type * ecl_rsthead_alloc_empty() { ecl_rsthead_type * rsthead = util_malloc( sizeof * rsthead ); diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_smspec.c b/ThirdParty/Ert/devel/libecl/src/ecl_smspec.c index d95792dc2a..6051bdc97c 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_smspec.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_smspec.c @@ -1711,6 +1711,17 @@ void ecl_smspec_select_matching_general_var_list( const ecl_smspec_type * smspec hash_iter_type * iter = hash_iter_alloc( smspec->gen_var_index ); while (!hash_iter_is_complete( iter )) { const char * key = hash_iter_get_next_key( iter ); + + /* + The TIME is typically special cased by output and will not + match the 'all keys' wildcard. + */ + if (util_string_equal( key , "TIME")) { + if ((pattern == NULL) || (util_string_equal( pattern , "*"))) + continue; + } + + if ((pattern == NULL) || (util_fnmatch( pattern , key ) == 0)) { if (!hash_has_key( ex_keys , key)) stringlist_append_copy( keys , key ); @@ -1720,6 +1731,7 @@ void ecl_smspec_select_matching_general_var_list( const ecl_smspec_type * smspec } hash_free( ex_keys ); + stringlist_sort( keys , (string_cmp_ftype *) util_strcmp_int ); } diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_sum.c b/ThirdParty/Ert/devel/libecl/src/ecl_sum.c index a120097ffd..c9d9f56a3c 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_sum.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_sum.c @@ -649,8 +649,8 @@ double ecl_sum_get_general_var(const ecl_sum_type * ecl_sum , int time_index , c } -void ecl_sum_dump_line_to_csv_file(const ecl_sum_type * ecl_sum, time_t sim_time, const ecl_sum_vector_type * key_words, FILE *fp){ - ecl_sum_data_write_csv_file(ecl_sum->data, sim_time, key_words, fp); +void ecl_sum_fwrite_interp_csv_line(const ecl_sum_type * ecl_sum, time_t sim_time, const ecl_sum_vector_type * key_words, FILE *fp){ + ecl_sum_data_fwrite_interp_csv_line(ecl_sum->data, sim_time, key_words, fp); } @@ -868,20 +868,6 @@ double ecl_sum_iget_sim_days( const ecl_sum_type * ecl_sum , int index ) { /*****************************************************************/ /* This is essentially the summary.x program. */ -void ecl_sum_fmt_init_csv( ecl_sum_fmt_type * fmt ) { - fmt->locale = "Norwegian"; - fmt->sep = "\t"; - fmt->date_fmt = "%d/%m/%y"; - fmt->value_fmt = "%g"; - fmt->days_fmt = "%7.2f"; - fmt->header_fmt = "%s"; - - fmt->newline = "\r\n"; - fmt->date_header = "DAYS\tDATE"; - fmt->print_header = true; - fmt->print_dash = false; -} - void ecl_sum_fmt_init_summary_x( const ecl_sum_type * ecl_sum , ecl_sum_fmt_type * fmt ) { @@ -1021,6 +1007,36 @@ void ecl_sum_fprintf(const ecl_sum_type * ecl_sum , FILE * stream , const string #undef DATE_STRING_LENGTH + + +static void ecl_sum_fmt_init_csv( ecl_sum_fmt_type * fmt , const char * date_format , const char * date_header , const char * sep) { + fmt->locale = NULL; //"Norwegian"; + fmt->sep = sep; + fmt->date_fmt = date_format; + fmt->value_fmt = "%g"; + fmt->days_fmt = "%7.2f"; + fmt->header_fmt = "%s"; + + fmt->newline = "\r\n"; + fmt->date_header = date_header; + fmt->print_header = true; + fmt->print_dash = false; +} + + +void ecl_sum_export_csv(const ecl_sum_type * ecl_sum , const char * filename , const stringlist_type * var_list , const char * date_format , const char * sep) { + FILE * stream = util_mkdir_fopen(filename , "w"); + char * date_header = util_alloc_sprintf("DAYS%sDATE" , sep); + bool report_only = false; + ecl_sum_fmt_type fmt; + ecl_sum_fmt_init_csv( &fmt , date_format , date_header , sep ); + ecl_sum_fprintf( ecl_sum , stream , var_list , report_only , &fmt ); + fclose( stream ); + free( date_header ); +} + + + const char * ecl_sum_get_case(const ecl_sum_type * ecl_sum) { return ecl_sum->ecl_case; } diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_sum_data.c b/ThirdParty/Ert/devel/libecl/src/ecl_sum_data.c index ba27897629..f5ce55202f 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_sum_data.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_sum_data.c @@ -1131,7 +1131,7 @@ double ecl_sum_data_interp_get(const ecl_sum_data_type * data , int time_index1 } -void ecl_sum_data_write_csv_file(const ecl_sum_data_type * data , time_t sim_time, const ecl_sum_vector_type * keylist, FILE *fp){ +void ecl_sum_data_fwrite_interp_csv_line(const ecl_sum_data_type * data , time_t sim_time, const ecl_sum_vector_type * keylist, FILE *fp){ int num_keywords = ecl_sum_vector_get_size(keylist); double weight1 , weight2; int time_index1 , time_index2; diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_sum_vector.c b/ThirdParty/Ert/devel/libecl/src/ecl_sum_vector.c index cc02bf1523..0aaa0d58bc 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_sum_vector.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_sum_vector.c @@ -27,21 +27,28 @@ #include -#define ECL_SUM_VECTOR_TYPE_ID 8756667078 +#define ECL_SUM_VECTOR_TYPE_ID 8768778 struct ecl_sum_vector_struct { + UTIL_TYPE_ID_DECLARATION; int_vector_type * node_index_list; bool_vector_type * is_rate_list; const ecl_sum_type * ecl_sum; }; + void ecl_sum_vector_free( ecl_sum_vector_type * ecl_sum_vector ){ int_vector_free(ecl_sum_vector->node_index_list); bool_vector_free(ecl_sum_vector->is_rate_list); } + +UTIL_IS_INSTANCE_FUNCTION( ecl_sum_vector , ECL_SUM_VECTOR_TYPE_ID ) + + ecl_sum_vector_type * ecl_sum_vector_alloc(const ecl_sum_type * ecl_sum){ ecl_sum_vector_type * ecl_sum_vector = util_malloc( sizeof * ecl_sum_vector ); + UTIL_TYPE_ID_INIT( ecl_sum_vector , ECL_SUM_VECTOR_TYPE_ID); ecl_sum_vector->ecl_sum = ecl_sum; ecl_sum_vector->node_index_list = int_vector_alloc(0,0); ecl_sum_vector->is_rate_list = bool_vector_alloc(0,false); diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_util.c b/ThirdParty/Ert/devel/libecl/src/ecl_util.c index 0c55d1cf74..8a12bab14a 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_util.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_util.c @@ -1,19 +1,19 @@ /* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'ecl_util.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. + Copyright (C) 2011 Statoil ASA, Norway. + + The file 'ecl_util.c' is part of ERT - Ensemble based Reservoir Tool. + + ERT is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ERT is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License at + for more details. */ #include @@ -22,6 +22,8 @@ #include #include +#include + #include #include #include @@ -32,16 +34,16 @@ /*****************************************************************/ /* The string names for the different ECLIPSE low-level - types. + types. */ #define ECL_TYPE_NAME_CHAR "CHAR" #define ECL_TYPE_NAME_FLOAT "REAL" -#define ECL_TYPE_NAME_INT "INTE" +#define ECL_TYPE_NAME_INT "INTE" #define ECL_TYPE_NAME_DOUBLE "DOUB" #define ECL_TYPE_NAME_BOOL "LOGI" -#define ECL_TYPE_NAME_MESSAGE "MESS" +#define ECL_TYPE_NAME_MESSAGE "MESS" #define ECL_PHASE_NAME_OIL "SOIL" // SHould match the keywords found in restart file @@ -50,26 +52,38 @@ #define ECL_OTHER_FILE_FMT_PATTERN "*" -#define ECL_RESTART_FMT_PATTERN "F[0-9][0-9][0-9][0-9]" #define ECL_UNIFIED_RESTART_FMT_PATTERN "FUNRST" -#define ECL_SUMMARY_FMT_PATTERN "A[0-9][0-9][0-9][0-9]" #define ECL_UNIFIED_SUMMARY_FMT_PATTERN "FUNSMRY" #define ECL_GRID_FMT_PATTERN "FGRID" #define ECL_EGRID_FMT_PATTERN "FEGRID" #define ECL_INIT_FMT_PATTERN "FINIT" #define ECL_RFT_FMT_PATTERN "FRFT" -#define ECL_DATA_PATTERN "DATA" - +#define ECL_DATA_PATTERN "DATA" #define ECL_OTHER_FILE_UFMT_PATTERN "*" -#define ECL_RESTART_UFMT_PATTERN "X[0-9][0-9][0-9][0-9]" #define ECL_UNIFIED_RESTART_UFMT_PATTERN "UNRST" -#define ECL_SUMMARY_UFMT_PATTERN "S[0-9][0-9][0-9][0-9]" -#define ECL_UNIFIED_SUMMARY_UFMT_PATTERN "UNSMRY" +#define ECL_UNIFIED_SUMMARY_UFMT_PATTERN "UNSMRY" #define ECL_GRID_UFMT_PATTERN "GRID" #define ECL_EGRID_UFMT_PATTERN "EGRID" -#define ECL_INIT_UFMT_PATTERN "INIT" -#define ECL_RFT_UFMT_PATTERN "RFT" +#define ECL_INIT_UFMT_PATTERN "INIT" +#define ECL_RFT_UFMT_PATTERN "RFT" + +#ifdef ERT_WINDOWS +/* + The filename matching function on windows onyl recognizes the '*' + and '?' wildcard characters. +*/ + #define ECL_RESTART_FMT_PATTERN "F????" + #define ECL_SUMMARY_FMT_PATTERN "A????" + #define ECL_RESTART_UFMT_PATTERN "X????" + #define ECL_SUMMARY_UFMT_PATTERN "S????" +#else + #define ECL_RESTART_FMT_PATTERN "F[0-9][0-9][0-9][0-9]" + #define ECL_SUMMARY_FMT_PATTERN "A[0-9][0-9][0-9][0-9]" + #define ECL_RESTART_UFMT_PATTERN "X[0-9][0-9][0-9][0-9]" + #define ECL_SUMMARY_UFMT_PATTERN "S[0-9][0-9][0-9][0-9]" +#endif + @@ -147,8 +161,8 @@ ecl_type_enum ecl_util_get_type_from_name( const char * type_name ) { int ecl_util_get_sizeof_ctype_fortio(ecl_type_enum ecl_type) { int size = ecl_util_get_sizeof_ctype ( ecl_type ); if (ecl_type == ECL_CHAR_TYPE) - size = ECL_STRING_LENGTH * sizeof(char); - + size = ECL_STRING_LENGTH * sizeof(char); + return size; } @@ -156,13 +170,13 @@ int ecl_util_get_sizeof_ctype(ecl_type_enum ecl_type) { int sizeof_ctype = -1; switch (ecl_type) { case(ECL_CHAR_TYPE): - /* + /* One element of character data is a string section of 8 characters + \0. Observe that the return value here corresponds to the size requirements of ECL_CHAR_TYPE instance in memory; on disk the trailing \0 is not stored. */ - sizeof_ctype = (ECL_STRING_LENGTH + 1) * sizeof(char); + sizeof_ctype = (ECL_STRING_LENGTH + 1) * sizeof(char); break; case(ECL_FLOAT_TYPE): sizeof_ctype = sizeof(float); @@ -199,7 +213,7 @@ char * ecl_util_alloc_base_guess(const char * path) { stringlist_type * DATA_files = stringlist_alloc_new( ); stringlist_select_matching_files( data_files , path , "*.data"); stringlist_select_matching_files( DATA_files , path , "*.DATA"); - + if ((stringlist_get_size( data_files ) + stringlist_get_size( DATA_files)) == 1) { const char * path_name; @@ -222,21 +236,21 @@ char * ecl_util_alloc_base_guess(const char * path) { int ecl_util_filename_report_nr(const char *filename) { int report_nr = -1; char *ext = strrchr(filename , '.'); - if (ext == NULL) + if (ext == NULL) util_abort("%s: can not determine timestep from filename:%s - aborting \n",__func__ , filename); - - if (ext[1] == 'X' || ext[1] == 'F' || ext[1] == 'S' || ext[1] == 'A') + + if (ext[1] == 'X' || ext[1] == 'F' || ext[1] == 'S' || ext[1] == 'A') report_nr = atoi(&ext[2]); - else + else util_abort("%s: Filename:%s not recognized - valid extensions: Annnn / Xnnnn / Fnnnn / Snnnn - aborting \n",__func__ , filename); - + return report_nr; } /* bool ecl_util_numeric_extension(const char * extension) { - + const char digit_ascii_min = 48; const char digit_ascii_max = 57; bool valid = true; @@ -247,65 +261,67 @@ bool ecl_util_numeric_extension(const char * extension) { if (!valid) break; } - + return valid; } */ - +/* + We accept mixed lowercase/uppercase Eclipse file extensions even if Eclipse itself does not accept them. +*/ ecl_file_enum ecl_util_inspect_extension(const char * ext , bool *_fmt_file, int * _report_nr) { ecl_file_enum file_type = ECL_OTHER_FILE; bool fmt_file = true; int report_nr = -1; - - if (strcmp(ext , "UNRST") == 0) { + char* upper_ext = util_alloc_strupr_copy(ext); + if (strcmp(upper_ext , "UNRST") == 0) { file_type = ECL_UNIFIED_RESTART_FILE; fmt_file = false; - } else if (strcmp(ext , "FUNRST") == 0) { + } else if (strcmp(upper_ext , "FUNRST") == 0) { file_type = ECL_UNIFIED_RESTART_FILE; fmt_file = true; - } else if (strcmp(ext , "UNSMRY") == 0) { + } else if (strcmp(upper_ext , "UNSMRY") == 0) { file_type = ECL_UNIFIED_SUMMARY_FILE; fmt_file = false; - } else if (strcmp(ext , "FUNSMRY") == 0) { + } else if (strcmp(upper_ext , "FUNSMRY") == 0) { file_type = ECL_UNIFIED_SUMMARY_FILE; fmt_file = true; - } else if (strcmp(ext , "SMSPEC") == 0) { + } else if (strcmp(upper_ext , "SMSPEC") == 0) { file_type = ECL_SUMMARY_HEADER_FILE; fmt_file = false; - } else if (strcmp(ext , "FSMSPEC") == 0) { + } else if (strcmp(upper_ext , "FSMSPEC") == 0) { file_type = ECL_SUMMARY_HEADER_FILE; fmt_file = true; - } else if (strcmp(ext , "GRID") == 0) { + } else if (strcmp(upper_ext , "GRID") == 0) { file_type = ECL_GRID_FILE; fmt_file = false; - } else if (strcmp(ext , "FGRID") == 0) { + } else if (strcmp(upper_ext , "FGRID") == 0) { file_type = ECL_GRID_FILE; fmt_file = true; - } else if (strcmp(ext , "EGRID") == 0) { + } else if (strcmp(upper_ext , "EGRID") == 0) { file_type = ECL_EGRID_FILE; fmt_file = false; - } else if (strcmp(ext , "FEGRID") == 0) { + } else if (strcmp(upper_ext , "FEGRID") == 0) { file_type = ECL_EGRID_FILE; fmt_file = true; - } else if (strcmp(ext , "INIT") == 0) { + } else if (strcmp(upper_ext , "INIT") == 0) { file_type = ECL_INIT_FILE; fmt_file = false; - } else if (strcmp(ext , "FINIT") == 0) { + } else if (strcmp(upper_ext , "FINIT") == 0) { file_type = ECL_INIT_FILE; fmt_file = true; - } else if (strcmp(ext , "FRFT") == 0) { + } else if (strcmp(upper_ext , "FRFT") == 0) { file_type = ECL_RFT_FILE; fmt_file = true; - } else if (strcmp(ext , "RFT") == 0) { + } else if (strcmp(upper_ext , "RFT") == 0) { file_type = ECL_RFT_FILE; fmt_file = false; - } else if (strcmp(ext , "DATA") == 0) { + } else if (strcmp(upper_ext , "DATA") == 0) { file_type = ECL_DATA_FILE; fmt_file = true; /* Not really relevant ... */ } else { - switch (ext[0]) { + switch (upper_ext[0]) { case('X'): file_type = ECL_RESTART_FILE; fmt_file = false; @@ -325,25 +341,25 @@ ecl_file_enum ecl_util_inspect_extension(const char * ext , bool *_fmt_file, int default: file_type = ECL_OTHER_FILE; } - if (file_type != ECL_OTHER_FILE) - if (!util_sscanf_int(&ext[1] , &report_nr)) + if (file_type != ECL_OTHER_FILE) + if (!util_sscanf_int(&upper_ext[1] , &report_nr)) file_type = ECL_OTHER_FILE; } - + if (_fmt_file != NULL) *_fmt_file = fmt_file; - - if (_report_nr != NULL) + + if (_report_nr != NULL) *_report_nr = report_nr; - + + free( upper_ext ); return file_type; } - -/** +/** This function takes an eclipse filename as input - looks at the extension, and uses that to determine the type of file. In addition to the fundamental type, it is also determined whether the file is @@ -355,7 +371,7 @@ ecl_file_enum ecl_util_inspect_extension(const char * ext , bool *_fmt_file, int ecl_file_enum ecl_util_get_file_type(const char * filename, bool *_fmt_file, int * _report_nr) { - + char *ext = strrchr(filename , '.'); if (ext != NULL) { ext++; @@ -528,7 +544,7 @@ static char * ecl_util_alloc_filename_static(const char * path, const char * bas else ext = util_alloc_sprintf("S%04d" , report_nr); break; - + case(ECL_UNIFIED_SUMMARY_FILE): if (fmt_file) ext = util_alloc_string_copy("FUNSMRY"); @@ -537,35 +553,35 @@ static char * ecl_util_alloc_filename_static(const char * path, const char * bas break; case(ECL_SUMMARY_HEADER_FILE): - if (fmt_file) + if (fmt_file) ext = util_alloc_string_copy("FSMSPEC"); else ext = util_alloc_string_copy("SMSPEC"); break; case(ECL_GRID_FILE): - if (fmt_file) + if (fmt_file) ext = util_alloc_string_copy("FGRID"); else ext = util_alloc_string_copy("GRID"); break; - + case(ECL_EGRID_FILE): - if (fmt_file) + if (fmt_file) ext = util_alloc_string_copy("FEGRID"); else ext = util_alloc_string_copy("EGRID"); break; case(ECL_INIT_FILE): - if (fmt_file) + if (fmt_file) ext = util_alloc_string_copy("FINIT"); else ext = util_alloc_string_copy("INIT"); break; case(ECL_RFT_FILE): - if (fmt_file) + if (fmt_file) ext = util_alloc_string_copy("FRFT"); else ext = util_alloc_string_copy("RFT"); @@ -574,7 +590,7 @@ static char * ecl_util_alloc_filename_static(const char * path, const char * bas case(ECL_DATA_FILE): ext = util_alloc_string_copy("DATA"); break; - + default: util_abort("%s: Invalid input file_type to ecl_util_alloc_filename - aborting \n",__func__); /* Dummy to shut up compiler */ @@ -583,14 +599,14 @@ static char * ecl_util_alloc_filename_static(const char * path, const char * bas filename = util_alloc_filename(path , base , ext); free(ext); - + if (must_exist) { if (!util_file_exists( filename )) { free(filename); filename = NULL; } } - + return filename; } @@ -613,7 +629,7 @@ char * ecl_util_alloc_exfilename(const char * path, const char * base , ecl_file */ char * ecl_util_alloc_exfilename_anyfmt(const char * path, const char * base , ecl_file_enum file_type , bool fmt_file_first , int report_nr) { - + char * filename = ecl_util_alloc_filename( path , base , file_type , fmt_file_first , report_nr); if (!util_file_exists( filename )) { free( filename ); @@ -621,10 +637,10 @@ char * ecl_util_alloc_exfilename_anyfmt(const char * path, const char * base , e } if (! util_file_exists(filename)) { - util_safe_free( filename ); + util_safe_free( filename ); filename = NULL; } - + return filename; } @@ -643,7 +659,7 @@ char * ecl_util_alloc_exfilename_anyfmt(const char * path, const char * base , e int ecl_util_fname_report_cmp(const void *f1, const void *f2) { - + int t1 = ecl_util_filename_report_nr( (const char *) f1 ); int t2 = ecl_util_filename_report_nr( (const char *) f2 ); @@ -657,10 +673,10 @@ int ecl_util_fname_report_cmp(const void *f1, const void *f2) { } /** - This function will scan the directory @path (or cwd if @path == NULL) - for all ECLIPSE files of type @file_type. If base == NULL it will use - '*' as pattern for basename. If file_type == ECL_OTHER_FILE it will - use '*' as pattern for the extension (as a consequence files which do + This function will scan the directory @path (or cwd if @path == NULL) + for all ECLIPSE files of type @file_type. If base == NULL it will use + '*' as pattern for basename. If file_type == ECL_OTHER_FILE it will + use '*' as pattern for the extension (as a consequence files which do not originate from ECLIPSE will also be included). The stringlist will be cleared before the actual matching process @@ -677,12 +693,12 @@ int ecl_util_select_filelist( const char * path , const char * base , ecl_file_e base_pattern = util_alloc_string_copy( "*" ); else base_pattern = util_alloc_string_copy( base ); - + file_pattern = util_alloc_filename( NULL , base_pattern , extension ); stringlist_select_matching_files( filelist , path , file_pattern ); if ((file_type == ECL_SUMMARY_FILE) || (file_type == ECL_RESTART_FILE)) stringlist_sort( filelist , ecl_util_fname_report_cmp ); - + free( base_pattern ); free( file_pattern ); return stringlist_get_size( filelist ); @@ -694,7 +710,7 @@ bool ecl_util_unified_file(const char *filename) { ecl_file_enum file_type; bool fmt_file; file_type = ecl_util_get_file_type(filename , &fmt_file , &report_nr); - + if ((file_type == ECL_UNIFIED_RESTART_FILE) || (file_type == ECL_UNIFIED_SUMMARY_FILE)) return true; else @@ -705,23 +721,23 @@ bool ecl_util_unified_file(const char *filename) { bool ecl_util_fmt_file(const char *filename , bool * __fmt_file) { /*const int min_size = 32768;*/ const int min_size = 256; /* Veeeery small */ - + int report_nr; ecl_file_enum file_type; bool status = true; bool fmt_file; - + if (util_file_exists(filename)) { file_type = ecl_util_get_file_type(filename , &fmt_file , &report_nr); if (file_type == ECL_OTHER_FILE) { if (util_file_size(filename) > min_size) fmt_file = util_fmt_bit8(filename); - else + else status = false; // Do not know ?? } } else { file_type = ecl_util_get_file_type(filename , &fmt_file , &report_nr); - if (file_type == ECL_OTHER_FILE) + if (file_type == ECL_OTHER_FILE) status = false; // Do not know ?? } @@ -745,7 +761,7 @@ bool ecl_util_fmt_file(const char *filename , bool * __fmt_file) { void ecl_util_memcpy_typed_data(void *_target_data , const void * _src_data , ecl_type_enum target_type , ecl_type_enum src_type, int size) { int i; - if (target_type == src_type) + if (target_type == src_type) memcpy(_target_data , _src_data , size * ecl_util_get_sizeof_ctype(src_type)); else { switch (target_type) { @@ -757,7 +773,7 @@ void ecl_util_memcpy_typed_data(void *_target_data , const void * _src_data , ec util_float_to_double(target_data , (const float *) _src_data , size); break; case(ECL_INT_TYPE): - for (i = 0; i < size; i++) + for (i = 0; i < size; i++) target_data[i] = ((int *) _src_data)[i]; break; default: @@ -773,7 +789,7 @@ void ecl_util_memcpy_typed_data(void *_target_data , const void * _src_data , ec util_double_to_float(target_data , (const double *) _src_data , size); break; case(ECL_INT_TYPE): - for (i = 0; i < size; i++) + for (i = 0; i < size; i++) target_data[i] = ((int *) _src_data)[i]; break; default: @@ -799,7 +815,7 @@ void ecl_util_alloc_summary_data_files(const char * path , const char * base , b int files = ecl_util_select_filelist( path , base , ECL_SUMMARY_FILE , fmt_file , filelist); if ((files > 0) && (unif_data_file != NULL)) { - /* + /* We have both a unified file AND a list of files: BASE.S0000, BASE.S0001, BASE.S0002, ..., must check which is newest and load accordingly. @@ -807,20 +823,20 @@ void ecl_util_alloc_summary_data_files(const char * path , const char * base , b bool unified_newest = true; int file_nr = 0; while (unified_newest && (file_nr < files)) { - if (util_file_difftime( stringlist_iget(filelist , file_nr) , unif_data_file ) > 0) + if (util_file_difftime( stringlist_iget(filelist , file_nr) , unif_data_file ) > 0) unified_newest = false; file_nr++; } - + if (unified_newest) { stringlist_clear( filelist ); /* Clear out all the BASE.Snnnn selections. */ stringlist_append_copy( filelist , unif_data_file ); - } + } } else if (unif_data_file != NULL) { /* Found a unified summary file : Clear out all the BASE.Snnnn selections. */ stringlist_clear( filelist ); /* Clear out all the BASE.Snnnn selections. */ stringlist_append_copy( filelist , unif_data_file ); - } + } util_safe_free( unif_data_file ); } @@ -840,35 +856,35 @@ void ecl_util_alloc_summary_data_files(const char * path , const char * base , b For the data there are four different possibilities: - 1. X.A0001, X.A0002, X.A0003, ... + 1. X.A0001, X.A0002, X.A0003, ... 2. X.FUNSMRY - 3. X.S0001, X.S0002, X.S0003, ... + 3. X.S0001, X.S0002, X.S0003, ... 4. X.UNSMRY - + In principle a directory can contain all different (altough that is probably not typical). The algorithm is a a two step algorithm: 1. Determine wether to use X.FSMSPEC or X.SMSPEC based on which is the newest. This also implies a decision of wether to use formatted, or unformatted filed. - + 2. Use formatted or unformatted files according to 1. above, and then choose either a list of files or unified files according to which is the newest. - + This algorithm should work in most practical cases, but it is - surely possible to fool it. + surely possible to fool it. */ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const char * ext , char ** _header_file , stringlist_type * filelist) { bool fmt_input = false; bool fmt_set = false; - bool fmt_file = true; + bool fmt_file = true; bool unif_input = false; bool unif_set = false; - + char * header_file = NULL; char * base; @@ -884,7 +900,7 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const base = ecl_util_alloc_base_guess(path); else base = (char *) _base; - + if (ext != NULL) { ecl_file_enum input_type; @@ -895,7 +911,7 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const } if ((input_type != ECL_OTHER_FILE) && (input_type != ECL_DATA_FILE)) { - /* + /* The file has been recognized as a file type from which we can at least infer formatted/unformatted inforamtion. */ @@ -914,29 +930,29 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const default: /* Nothing wrong with this */ break; } - } + } } - - + + /* - 2: We continue by looking for header files. + 2: We continue by looking for header files. */ - + { char * fsmspec_file = ecl_util_alloc_exfilename(path , base , ECL_SUMMARY_HEADER_FILE , true , -1); char * smspec_file = ecl_util_alloc_exfilename(path , base , ECL_SUMMARY_HEADER_FILE , false , -1); - + if ((fsmspec_file == NULL) && (smspec_file == NULL)) /* Neither file exists */ return false; - + if (fmt_set) /* The question of formatted|unformatted has already been settled based on the input filename. */ fmt_file = fmt_input; else { if ((fsmspec_file != NULL) && (smspec_file != NULL)) { /* Both fsmspec and smspec exist - we take the newest. */ - if (util_file_difftime(fsmspec_file , smspec_file) < 0) + if (util_file_difftime(fsmspec_file , smspec_file) < 0) fmt_file = true; - else + else fmt_file = false; } else { /* Only one of fsmspec / smspec exists */ if (fsmspec_file != NULL) @@ -945,7 +961,7 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const fmt_file = false; } } - + if (fmt_file) { header_file = fsmspec_file; util_safe_free( smspec_file ); @@ -957,10 +973,10 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const if (header_file == NULL) return false; /* If you insist on e.g. unformatted and only fsmspec exists - no results for you. */ } - - - /* + + + /* 3: OK - we have found a SMSPEC / FMSPEC file - continue to look for XXX.Snnnn / XXX.UNSMRY files. */ @@ -974,16 +990,16 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const stringlist_append_copy( filelist , unif_data_file ); free( unif_data_file ); } - } else + } else ecl_util_select_filelist( path , base , ECL_SUMMARY_FILE , fmt_file , filelist); - } else + } else ecl_util_alloc_summary_data_files( path , base , fmt_file , filelist ); - + if (_base == NULL) free(base); *_header_file = header_file; - + return (stringlist_get_size(filelist) > 0) ? true : false; } @@ -995,15 +1011,15 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const //} // // -///** +///** // Based on the ordinary util_alloc_file_components function, but if // file_type is used specify the type file we know what extension to // expect, and an optional "." can potentially be included as part of -// the filename. +// the filename. //*/ // //void ecl_util_alloc_file_components( const char * file, ecl_file_enum file_type , char **_path , char **_basename , char **_extension) { -// +// //} @@ -1011,7 +1027,7 @@ bool ecl_util_alloc_summary_files(const char * path , const char * _base , const void ecl_util_alloc_restart_files(const char * path , const char * _base , char *** _restart_files , int * num_restart_files , bool * _fmt_file , bool * _unified) { - + util_exit("Function:%s currently not implemented - sorry \n",__func__); //char * base = NULL; @@ -1023,14 +1039,14 @@ void ecl_util_alloc_restart_files(const char * path , const char * _base , char // int num_F_files; // int num_X_files; // - // char * unrst_file = ecl_util_alloc_filename(path , base , ECL_UNIFIED_RESTART_FILE , false , -1); + // char * unrst_file = ecl_util_alloc_filename(path , base , ECL_UNIFIED_RESTART_FILE , false , -1); // char * funrst_file = ecl_util_alloc_filename(path , base , ECL_UNIFIED_RESTART_FILE , true , -1); - // char * unif_file = NULL; + // char * unif_file = NULL; // - // char ** F_files = ecl_util_alloc_scandir_filelist(path , base , ECL_RESTART_FILE , true , &num_F_files); - // char ** X_files = ecl_util_alloc_scandir_filelist(path , base , ECL_RESTART_FILE , false , &num_X_files); + // char ** F_files = ecl_util_alloc_scandir_filelist(path , base , ECL_RESTART_FILE , true , &num_F_files); + // char ** X_files = ecl_util_alloc_scandir_filelist(path , base , ECL_RESTART_FILE , false , &num_X_files); // char * FX_file = NULL; - // char * final_file; + // char * final_file; // // /* // Ok now we have formatted/unformatted unified and not @@ -1038,14 +1054,14 @@ void ecl_util_alloc_restart_files(const char * path , const char * _base , char // is the newest. // */ // unif_file = util_newest_file(unrst_file , funrst_file); - // - // if (num_F_files > 0 || num_X_files > 0) { + // + // if (num_F_files > 0 || num_X_files > 0) { // if (num_F_files > 0 && num_X_files > 0) { - // /* + // /* // We have both a list of .Fnnnn and a list of .Xnnnn files; if // the length of lists is not equal we take the longest, // otherwise we compare the dates of the last files in the - // list. + // list. // */ // if (num_F_files == num_X_files) { // FX_file = util_newest_file( F_files[num_F_files - 1] , X_files[num_X_files - 1]); @@ -1064,13 +1080,13 @@ void ecl_util_alloc_restart_files(const char * path , const char * _base , char // final_file = FX_file; // } else // final_file = unif_file; - // - // - // if (final_file == NULL) + // + // + // if (final_file == NULL) // util_abort("%s: could not find any restart data in %s/%s \n",__func__ , path , base); - // // - // /* + // + // /* // Determine type of final_file. Thois block is where the return // values are actually set. // */ @@ -1078,7 +1094,7 @@ void ecl_util_alloc_restart_files(const char * path , const char * _base , char // char ** restart_files; // bool fmt_file , unified; // ecl_file_enum file_type; - // + // // ecl_util_get_file_type( final_file , &file_type , &fmt_file , NULL); // if (file_type == ECL_UNIFIED_RESTART_FILE) { // *num_restart_files = 1; @@ -1092,7 +1108,7 @@ void ecl_util_alloc_restart_files(const char * path , const char * _base , char // *_restart_files = restart_files; // // if (_fmt_file != NULL) *_fmt_file = fmt_file; - // if (_unified != NULL) *_unified = unified; + // if (_unified != NULL) *_unified = unified; // } // // util_free_stringlist(F_files , num_F_files); @@ -1142,38 +1158,38 @@ static int ecl_util_get_month_nr__(const char * _month_name) { int month_nr = -1; char * month_name = util_alloc_string_copy(_month_name); util_strupr(month_name); - - if (strncmp(month_name , "JAN" , 3) == 0) + + if (strncmp(month_name , "JAN" , 3) == 0) month_nr = 1; - else if (strncmp(month_name , "FEB" , 3) == 0) + else if (strncmp(month_name , "FEB" , 3) == 0) month_nr = 2; - else if (strncmp(month_name , "MAR" , 3) == 0) + else if (strncmp(month_name , "MAR" , 3) == 0) month_nr = 3; - else if (strncmp(month_name , "APR" , 3) == 0) + else if (strncmp(month_name , "APR" , 3) == 0) month_nr = 4; - else if (strncmp(month_name , "MAI" , 3) == 0) + else if (strncmp(month_name , "MAI" , 3) == 0) month_nr = 5; - else if (strncmp(month_name , "MAY" , 3) == 0) + else if (strncmp(month_name , "MAY" , 3) == 0) month_nr = 5; - else if (strncmp(month_name , "JUN" , 3) == 0) + else if (strncmp(month_name , "JUN" , 3) == 0) month_nr = 6; - else if (strncmp(month_name , "JUL" , 3) == 0) + else if (strncmp(month_name , "JUL" , 3) == 0) month_nr = 7; else if (strncmp(month_name , "JLY" , 3) == 0) /* ECLIPSE ambigus on July. */ month_nr = 7; - else if (strncmp(month_name , "AUG" , 3) == 0) + else if (strncmp(month_name , "AUG" , 3) == 0) month_nr = 8; - else if (strncmp(month_name , "SEP" , 3) == 0) + else if (strncmp(month_name , "SEP" , 3) == 0) month_nr = 9; - else if (strncmp(month_name , "OCT" , 3) == 0) + else if (strncmp(month_name , "OCT" , 3) == 0) month_nr = 10; - else if (strncmp(month_name , "OKT" , 3) == 0) + else if (strncmp(month_name , "OKT" , 3) == 0) month_nr = 10; - else if (strncmp(month_name , "NOV" , 3) == 0) + else if (strncmp(month_name , "NOV" , 3) == 0) month_nr = 11; - else if (strncmp(month_name , "DEC" , 3) == 0) + else if (strncmp(month_name , "DEC" , 3) == 0) month_nr = 12; - else if (strncmp(month_name , "DES" , 3) == 0) + else if (strncmp(month_name , "DES" , 3) == 0) month_nr = 12; free(month_name); return month_nr; @@ -1182,9 +1198,9 @@ static int ecl_util_get_month_nr__(const char * _month_name) { int ecl_util_get_month_nr(const char * month_name) { int month_nr = ecl_util_get_month_nr__(month_name); - if (month_nr < 0) + if (month_nr < 0) util_abort("%s: %s not a valid month name - aborting \n",__func__ , month_name); - + return month_nr; } @@ -1205,15 +1221,15 @@ int ecl_util_get_month_nr(const char * month_name) { */ -time_t ecl_util_get_start_date(const char * data_file) { +time_t ecl_util_get_start_date(const char * data_file) { basic_parser_type * parser = basic_parser_alloc(" \t\r\n" , "\"\'" , NULL , NULL , "--" , "\n"); time_t start_date = -1; FILE * stream = util_fopen(data_file , "r"); char * buffer; - + if (!basic_parser_fseek_string( parser , stream , "START" , true , true)) /* Seeks case insensitive. */ util_abort("%s: sorry - could not find START in DATA file %s \n",__func__ , data_file); - + { long int start_pos = util_ftell( stream ); int buffer_size; @@ -1221,15 +1237,15 @@ time_t ecl_util_get_start_date(const char * data_file) { /* Look for terminating '/' */ if (!basic_parser_fseek_string( parser , stream , "/" , false , true)) util_abort("%s: sorry - could not find \"/\" termination of START keyword in data_file: \n",__func__ , data_file); - + buffer_size = (util_ftell(stream) - start_pos) ; buffer = util_calloc( buffer_size + 1 , sizeof * buffer ); util_fseek( stream , start_pos , SEEK_SET); util_fread( buffer , sizeof * buffer , buffer_size ,stream , __func__); buffer[buffer_size] = '\0'; } - - + + { stringlist_type * tokens = basic_parser_tokenize_buffer( parser , buffer , true ); int day, year, month_nr; @@ -1240,18 +1256,18 @@ time_t ecl_util_get_start_date(const char * data_file) { util_abort("%s: failed to parse DAY MONTH YEAR from : \"%s\" \n",__func__ , buffer); stringlist_free( tokens ); } - + free( buffer ); basic_parser_free( parser ); fclose(stream); - + return start_date; } static int ecl_util_get_num_parallel_cpu__(basic_parser_type* parser, FILE* stream, const char * data_file) { int num_cpu = 1; - char * buffer; + char * buffer; long int start_pos = util_ftell( stream ); int buffer_size; @@ -1267,7 +1283,7 @@ static int ecl_util_get_num_parallel_cpu__(basic_parser_type* parser, FILE* stre { stringlist_type * tokens = basic_parser_tokenize_buffer( parser , buffer , true ); - + if (stringlist_get_size( tokens ) > 0) { const char * num_cpu_string = stringlist_iget( tokens , 0 ); if (!util_sscanf_int( num_cpu_string , &num_cpu)) @@ -1276,60 +1292,60 @@ static int ecl_util_get_num_parallel_cpu__(basic_parser_type* parser, FILE* stre fprintf(stderr,"** Warning: failed to load data for PARALLEL keyword - assuming one CPU\n"); stringlist_free( tokens ); - } + } free( buffer ); - return num_cpu; + return num_cpu; } static int ecl_util_get_num_slave_cpu__(basic_parser_type* parser, FILE* stream, const char * data_file) { int num_cpu = 0; - int linecount = 0; + int linecount = 0; basic_parser_fseek_string( parser , stream , "\n" , true , true); /* Go to next line after the SLAVES keyword*/ while (true) { char * buffer = util_fscanf_alloc_line( stream , NULL); - ++linecount; - if (linecount > 10) + ++linecount; + if (linecount > 10) util_abort("%s: Did not find ending \"/\" character after SLAVES keyword, aborting \n", __func__); { stringlist_type * tokens = basic_parser_tokenize_buffer( parser , buffer , true ); if (stringlist_get_size(tokens) > 0 ) { - + const char * first_item = stringlist_iget(tokens, 0); - + if (first_item[0] == '/') { - break; + break; } - else + else ++num_cpu; } stringlist_free( tokens ); } - + free( buffer ); - } - + } + if (0 == num_cpu) util_abort("%s: Did not any CPUs after SLAVES keyword, aborting \n", __func__); - return num_cpu; + return num_cpu; } -int ecl_util_get_num_cpu(const char * data_file) { - int num_cpu = 1; +int ecl_util_get_num_cpu(const char * data_file) { + int num_cpu = 1; basic_parser_type * parser = basic_parser_alloc(" \t\r\n" , "\"\'" , NULL , NULL , "--" , "\n"); FILE * stream = util_fopen(data_file , "r"); - + if (basic_parser_fseek_string( parser , stream , "PARALLEL" , true , true)) { /* Seeks case insensitive. */ - num_cpu = ecl_util_get_num_parallel_cpu__(parser, stream, data_file); + num_cpu = ecl_util_get_num_parallel_cpu__(parser, stream, data_file); } else if (basic_parser_fseek_string( parser , stream , "SLAVES" , true , true)) { /* Seeks case insensitive. */ - num_cpu = ecl_util_get_num_slave_cpu__(parser, stream, data_file) + 1; - fprintf(stderr, "Information: \"SLAVES\" option found, returning %d number of CPUs", num_cpu); + num_cpu = ecl_util_get_num_slave_cpu__(parser, stream, data_file) + 1; + fprintf(stderr, "Information: \"SLAVES\" option found, returning %d number of CPUs", num_cpu); } basic_parser_free( parser ); @@ -1428,7 +1444,7 @@ bool ecl_util_valid_basename_fmt(const char * basename_fmt) corresponds to the first date in a month the list will start with start_date, otherwise the list will start with the first day in the month following after start_date. - + If end_date corresponds to the first day of the month the list will end with end_date, otherwise it will ende with the first day in the month prior to end_date: @@ -1439,7 +1455,7 @@ bool ecl_util_valid_basename_fmt(const char * basename_fmt) All time_t values added to the date list will be pure dates, i.e. the time part will be 00:00:00; that also applies to start_date and end_date where possible time parts will be normalized away prior - to insertion. + to insertion. */ @@ -1449,7 +1465,7 @@ void ecl_util_append_month_range( time_t_vector_type * date_list , time_t start_ if (util_is_first_day_in_month( start_date)) time_t_vector_append( date_list , start_date ); - + { time_t current_date = start_date; while (true) { @@ -1460,7 +1476,7 @@ void ecl_util_append_month_range( time_t_vector_type * date_list , time_t start_ year += 1; } else month += 1; - + current_date = ecl_util_make_date( 1 , month , year ); if (current_date < end_date) time_t_vector_append( date_list , current_date ); @@ -1481,7 +1497,7 @@ void ecl_util_init_month_range( time_t_vector_type * date_list , time_t start_da time_t_vector_reset( date_list ); if (!util_is_first_day_in_month( start_date )) time_t_vector_append( date_list , util_make_pure_date(start_date)); - + ecl_util_append_month_range( date_list , start_date , end_date , true ); } @@ -1491,7 +1507,7 @@ void ecl_util_init_month_range( time_t_vector_type * date_list , time_t start_da time_t ecl_util_make_date__(int mday , int month , int year, int * __year_offset) { time_t date; -#ifdef TIME_T_64BIT_ACCEPT_PRE1970 +#ifdef ERT_TIME_T_64BIT_ACCEPT_PRE1970 *__year_offset = 0; date = util_make_date(mday , month , year); #else @@ -1518,23 +1534,8 @@ time_t ecl_util_make_date(int mday , int month , int year) { return ecl_util_make_date__( mday , month , year , &year_offset); } -/*****************************************************************/ -/* Small functions to support enum introspection. */ - -#ifdef HAVE_FORK - -const char * ecl_util_phase_enum_iget( int index, int * value) { - return util_enum_iget( index , ECL_PHASE_ENUM_SIZE , (const util_enum_element_type []) { ECL_PHASE_ENUM_DEFS }, value); -} - -const char * ecl_util_type_enum_iget( int index, int * value) { - return util_enum_iget( index , ECL_TYPE_ENUM_SIZE , (const util_enum_element_type []) { ECL_TYPE_ENUM_DEFS }, value); -} - void ecl_util_set_date_values(time_t t , int * mday , int * month , int * year) { return util_set_date_values(t,mday,month,year); } -#endif - diff --git a/ThirdParty/Ert/devel/libecl/src/smspec_node.c b/ThirdParty/Ert/devel/libecl/src/smspec_node.c index 554d025574..5a9361e42d 100644 --- a/ThirdParty/Ert/devel/libecl/src/smspec_node.c +++ b/ThirdParty/Ert/devel/libecl/src/smspec_node.c @@ -64,7 +64,6 @@ struct smspec_node_struct { int * lgr_ijk; /* The (i,j,k) coordinate, in the local grid, if this is a LGR variable. WIll be NULL for no-lgr variables. */ bool rate_variable; /* Is this a rate variable (i.e. WOPR) or a state variable (i.e. BPR). Relevant when doing time interpolation. */ bool total_variable; /* Is this a total variable like WOPT? */ - bool need_nums; /* Do we use the NUMS vector - relevant for storing. */ bool historical; /* Does the name end with 'H'? */ int params_index; /* The index of this variable (applies to all the vectors - in particular the PARAMS vectors of the summary files *.Snnnn / *.UNSMRY ). */ float default_value; /* Default value for this variable. */ @@ -253,7 +252,6 @@ static void smspec_node_set_keyword( smspec_node_type * smspec_node , const char static void smspec_node_set_invalid_flags( smspec_node_type * smspec_node) { smspec_node->rate_variable = false; smspec_node->total_variable = false; - smspec_node->need_nums = false; smspec_node->historical = false; } @@ -320,23 +318,6 @@ static void smspec_node_set_flags( smspec_node_type * smspec_node) { } smspec_node->total_variable = is_total; } - - /* - Check if this node needs the nums field; if at least one of the - nodes need the NUMS field must be stored when writing a SMSPEC - file. - */ - { - if (smspec_node->var_type == ECL_SMSPEC_COMPLETION_VAR || - smspec_node->var_type == ECL_SMSPEC_SEGMENT_VAR || - smspec_node->var_type == ECL_SMSPEC_REGION_VAR || - smspec_node->var_type == ECL_SMSPEC_REGION_2_REGION_VAR || - smspec_node->var_type == ECL_SMSPEC_BLOCK_VAR || - smspec_node->var_type == ECL_SMSPEC_AQUIFER_VAR) - smspec_node->need_nums = true; - else - smspec_node->need_nums = false; - } } /** @@ -602,13 +583,27 @@ bool smspec_node_init( smspec_node_type * smspec_node, break; case(ECL_SMSPEC_MISC_VAR): /* Misc variable : */ - /* Fully initialized with the smspec_common_init() function */ + + /* + For some keywords the SMSPEC files generated by Eclipse have a + non zero NUMS value although; it seems that value is required + for the generatd summaryfiles to display nicely in + e.g. S3GRAF. + */ + + if (util_string_equal( keyword ,SMSPEC_TIME_KEYWORD)) + smspec_node_set_num( smspec_node , grid_dims , SMSPEC_TIME_NUMS_VALUE ); + + if (util_string_equal( keyword ,SMSPEC_YEARS_KEYWORD)) + smspec_node_set_num( smspec_node , grid_dims , SMSPEC_YEARS_NUMS_VALUE ); + break; default: /* Lots of legitimate alternatives which are not internalized. */ initOK = false; break; } + if (initOK) smspec_node_set_gen_keys( smspec_node , key_join_string ); return initOK; @@ -741,6 +736,42 @@ smspec_node_type * smspec_node_alloc_lgr( ecl_smspec_var_type var_type , } } +smspec_node_type* smspec_node_alloc_copy( const smspec_node_type* node ) { + + if( !node ) return NULL; + + { + smspec_node_type* copy = util_malloc( sizeof * copy ); + UTIL_TYPE_ID_INIT( copy, SMSPEC_TYPE_ID ); + copy->gen_key1 = util_alloc_string_copy( node->gen_key1 ); + copy->gen_key2 = util_alloc_string_copy( node->gen_key2 ); + copy->var_type = node->var_type; + copy->wgname = util_alloc_string_copy( node->wgname ); + copy->keyword = util_alloc_string_copy( node->keyword ); + copy->unit = util_alloc_string_copy( node->unit ); + copy->num = node->num; + + copy->ijk = NULL; + if( node->ijk ) { + copy->ijk = util_calloc( 3 , sizeof * node->ijk ); + memcpy( copy->ijk, node->ijk, 3 * sizeof( * node->ijk ) ); + } + + copy->lgr_name = util_alloc_string_copy( node->lgr_name ); + copy->lgr_ijk = NULL; + if( node->lgr_ijk ) { + copy->lgr_ijk = util_calloc( 3 , sizeof * node->lgr_ijk ); + memcpy( copy->lgr_ijk, node->lgr_ijk, 3 * sizeof( * node->lgr_ijk ) ); + } + + copy->rate_variable = node->rate_variable; + copy->total_variable = node->total_variable; + copy->historical = node->historical; + copy->params_index = node->params_index; + copy->default_value = node->default_value; + return copy; + } +} void smspec_node_free( smspec_node_type * index ) { util_safe_free( index->unit ); @@ -830,9 +861,29 @@ void smspec_node_set_unit( smspec_node_type * smspec_node , const char * unit ) bool smspec_node_need_nums( const smspec_node_type * smspec_node ) { - return smspec_node->need_nums; + /* + Check if this node needs the nums field; if at least one of the + nodes need the NUMS field must be stored when writing a SMSPEC + file. + */ + { + if (smspec_node->var_type == ECL_SMSPEC_COMPLETION_VAR || + smspec_node->var_type == ECL_SMSPEC_SEGMENT_VAR || + smspec_node->var_type == ECL_SMSPEC_REGION_VAR || + smspec_node->var_type == ECL_SMSPEC_REGION_2_REGION_VAR || + smspec_node->var_type == ECL_SMSPEC_BLOCK_VAR || + smspec_node->var_type == ECL_SMSPEC_AQUIFER_VAR) + return true; + else { + if (smspec_node->num == SMSPEC_NUMS_INVALID) + return false; + else + return true; + } + } } + void smspec_node_fprintf( const smspec_node_type * smspec_node , FILE * stream) { fprintf(stream, "KEYWORD: %s \n",smspec_node->keyword); fprintf(stream, "WGNAME : %s \n",smspec_node->wgname); diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_fortio.c b/ThirdParty/Ert/devel/libecl/tests/ecl_fortio.c index c722d49abd..d675c9f2a3 100644 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_fortio.c +++ b/ThirdParty/Ert/devel/libecl/tests/ecl_fortio.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_corner.c b/ThirdParty/Ert/devel/libecl/tests/ecl_grid_corner.c index b4adf52270..eb98690b22 100644 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_corner.c +++ b/ThirdParty/Ert/devel/libecl/tests/ecl_grid_corner.c @@ -19,6 +19,7 @@ #include #include +#include #include diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_layer.c b/ThirdParty/Ert/devel/libecl/tests/ecl_layer.c index e6420cecc4..891cefff07 100644 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_layer.c +++ b/ThirdParty/Ert/devel/libecl/tests/ecl_layer.c @@ -19,6 +19,7 @@ #include #include +#include #include #include diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_rsthead.c b/ThirdParty/Ert/devel/libecl/tests/ecl_rsthead.c index ab7daca54e..1ca6f24252 100644 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_rsthead.c +++ b/ThirdParty/Ert/devel/libecl/tests/ecl_rsthead.c @@ -1,19 +1,19 @@ /* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'ecl_rst_header.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. + Copyright (C) 2013 Statoil ASA, Norway. + + The file 'ecl_rst_header.c' is part of ERT - Ensemble based Reservoir Tool. + + ERT is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ERT is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License at + for more details. */ #include #include @@ -30,13 +30,13 @@ void test_file( const char * filename , int occurence , bool exists , const ecl_rsthead_type * true_header) { ecl_file_type * rst_file = ecl_file_open( filename , 0); ecl_rsthead_type * rst_head = ecl_rsthead_ialloc( rst_file , occurence); - + if (exists) { test_assert_not_NULL( rst_head ); - + if (occurence == 0) { ecl_rsthead_type * rst_head0 = ecl_rsthead_alloc( rst_file ); - + test_assert_true( ecl_rsthead_equal( rst_head , rst_head0 )); ecl_rsthead_free( rst_head0 ); } @@ -45,12 +45,13 @@ void test_file( const char * filename , int occurence , bool exists , const ecl_ ecl_rsthead_free( rst_head ); } else test_assert_NULL( rst_head ); - + } int main(int argc , char ** argv) { - ecl_rsthead_type true1 = {.day = 1, + ecl_rsthead_type true1 = {.report_step = 1, + .day = 1, .year = 2000, .month = 1, .sim_time = (time_t) 946681200, @@ -72,8 +73,9 @@ int main(int argc , char ** argv) { .nilbrz = -1, .dualp = 0, .sim_days = 0}; - - ecl_rsthead_type true2 = {.day = 22, + + ecl_rsthead_type true2 = {.report_step = 5, + .day = 22, .year = 1990, .month = 1, .sim_time = (time_t) 632962800, @@ -95,14 +97,14 @@ int main(int argc , char ** argv) { .nilbrz = -1, .dualp = 1, .sim_days = 21}; - + const char * unified_file = argv[1]; const char * Xfile = argv[2]; - + test_file( unified_file , 0 , true , &true1 ); test_file( unified_file , 100 , false , NULL ); test_file( Xfile , 0 , true , &true2 ); - + exit(0); } diff --git a/ThirdParty/Ert/devel/libecl/tests/tests.cmake b/ThirdParty/Ert/devel/libecl/tests/tests.cmake index a819f6fd12..2dc107f434 100644 --- a/ThirdParty/Ert/devel/libecl/tests/tests.cmake +++ b/ThirdParty/Ert/devel/libecl/tests/tests.cmake @@ -127,11 +127,6 @@ target_link_libraries( ecl_grid_reset_actnum ecl test_util ) add_test( ecl_grid_reset_actnum ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_reset_actnum ) add_executable( ecl_grid_export ecl_grid_export.c ) -add_executable( ecl_grid_corner ecl_grid_corner.c ) -target_link_libraries( ecl_grid_corner ecl test_util ) -add_test( ecl_grid_corner ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_corner ) - - target_link_libraries( ecl_grid_export ecl test_util ) add_test( ecl_grid_export ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_export ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID ) @@ -180,10 +175,6 @@ add_executable( ecl_point ecl_point.c ) target_link_libraries( ecl_point ecl test_util ) add_test(ecl_point ${EXECUTABLE_OUTPUT_PATH}/ecl_point ) -add_executable( ecl_layer ecl_layer.c ) -target_link_libraries( ecl_layer ecl test_util ) -add_test(ecl_layer ${EXECUTABLE_OUTPUT_PATH}/ecl_layer ) - add_executable( ecl_layer_statoil ecl_layer_statoil.c ) target_link_libraries( ecl_layer_statoil ecl test_util ) @@ -233,9 +224,20 @@ add_test( ecl_sum_report_step_compatible4 ${EXECUTABLE_OUTPUT_PATH}/ecl_sum_repo add_test( ecl_sum_report_step_compatible5 ${EXECUTABLE_OUTPUT_PATH}/ecl_sum_report_step_compatible ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/modGurbat/enkf/ECLIPSE TRUE) add_test( ecl_sum_report_step_compatible6 ${EXECUTABLE_OUTPUT_PATH}/ecl_sum_report_step_equal ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Snorre/SNORRE ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Snorre2/SNORRE2 FALSE) -add_executable( ecl_fortio ecl_fortio.c ) -target_link_libraries( ecl_fortio ecl test_util ) -add_test( ecl_fortio ${EXECUTABLE_OUTPUT_PATH}/ecl_fortio ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.UNRST ) +if (HAVE_UTIL_ABORT_INTERCEPT) + add_executable( ecl_fortio ecl_fortio.c ) + target_link_libraries( ecl_fortio ecl test_util ) + add_test( ecl_fortio ${EXECUTABLE_OUTPUT_PATH}/ecl_fortio ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.UNRST ) + set_property( TEST ecl_fortio PROPERTY LABELS StatoilData) + + add_executable( ecl_grid_corner ecl_grid_corner.c ) + target_link_libraries( ecl_grid_corner ecl test_util ) + add_test( ecl_grid_corner ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_corner ) + + add_executable( ecl_layer ecl_layer.c ) + target_link_libraries( ecl_layer ecl test_util ) + add_test(ecl_layer ${EXECUTABLE_OUTPUT_PATH}/ecl_layer ) +endif() add_executable( ecl_file ecl_file.c ) target_link_libraries( ecl_file ecl test_util ) @@ -328,7 +330,6 @@ set_property( TEST ecl_sum_report_step_compatible6 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_fortio PROPERTY LABELS StatoilData) set_property( TEST ecl_grid_dims1 PROPERTY LABELS StatoilData ) set_property( TEST ecl_grid_dims2 PROPERTY LABELS StatoilData ) set_property( TEST ecl_grid_dims3 PROPERTY LABELS StatoilData ) diff --git a/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c b/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c index 6c670941c1..1d24ce9c6f 100644 --- a/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c +++ b/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c @@ -17,7 +17,6 @@ */ #include #include -#include #include #include diff --git a/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt b/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt index 3c1edaa604..f71887f102 100644 --- a/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt @@ -33,7 +33,7 @@ include_directories( ${libgeometry_src_path} ) add_library( ecl_well ${LIBRARY_TYPE} ${source_files} ) -set_target_properties( ecl_well PROPERTIES VERSION 1.0 SOVERSION 1.0 ) +set_target_properties( ecl_well PROPERTIES VERSION ${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} SOVERSION ${ERT_VERSION_MAJOR} ) target_link_libraries( ecl_well ecl ) if (USE_RUNPATH) add_runpath( ecl_well ) diff --git a/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/EclKW.hpp b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/EclKW.hpp index 471e49a7fe..3b37da8329 100644 --- a/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/EclKW.hpp +++ b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/EclKW.hpp @@ -29,8 +29,9 @@ #include #include -#include +#include +#include namespace ERT { @@ -51,12 +52,12 @@ namespace ERT { return *( static_cast( ecl_kw_iget_ptr( m_kw.get() , index) )); } - + void fwrite(FortIO& fortio) const { - ecl_kw_fwrite( m_kw.get() , fortio.getPointer() ); + ecl_kw_fwrite( m_kw.get() , fortio.get() ); } - + void assignVector(const std::vector& data) { if (data.size() == size()) ecl_kw_set_memcpy_data( m_kw.get() , data.data() ); @@ -67,21 +68,17 @@ namespace ERT { ecl_kw_type * getPointer() const { return m_kw.get(); } - + private: EclKW(ecl_kw_type * c_ptr) { - reset(c_ptr); - } - - void reset(ecl_kw_type * c_ptr) { - m_kw.reset( c_ptr , ecl_kw_free); + m_kw.reset( c_ptr ); } - + static EclKW checkedLoad(FortIO& fortio, ecl_type_enum expectedType) { - ecl_kw_type * c_ptr = ecl_kw_fread_alloc( fortio.getPointer() ); + ecl_kw_type * c_ptr = ecl_kw_fread_alloc( fortio.get() ); if (c_ptr) { - if (ecl_kw_get_type( c_ptr ) == expectedType) + if (ecl_kw_get_type( c_ptr ) == expectedType) return EclKW( c_ptr ); else throw std::invalid_argument("Type error"); @@ -89,8 +86,8 @@ namespace ERT { throw std::invalid_argument("fread kw failed - EOF?"); } - - std::shared_ptr m_kw; + + ert_unique_ptr m_kw; }; } diff --git a/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/FortIO.hpp b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/FortIO.hpp index 35329f7f64..16ec950a29 100644 --- a/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/FortIO.hpp +++ b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/FortIO.hpp @@ -27,6 +27,7 @@ #include #include +#include @@ -34,13 +35,14 @@ namespace ERT { class FortIO { public: + FortIO(); FortIO(const std::string& filename , std::ios_base::openmode mode , bool fmt_file = false , bool endian_flip_header = ECL_ENDIAN_FLIP); - fortio_type * getPointer() const; - void close(); - void reset() const; + void open(const std::string& filename , std::ios_base::openmode mode , bool fmt_file = false , bool endian_flip_header = ECL_ENDIAN_FLIP); + fortio_type * get() const; + void close(); private: - std::shared_ptr m_fortio; + ert_unique_ptr m_fortio; }; } diff --git a/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/Smspec.hpp b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/Smspec.hpp new file mode 100644 index 0000000000..2670c6f649 --- /dev/null +++ b/ThirdParty/Ert/devel/libeclxx/include/ert/ecl/Smspec.hpp @@ -0,0 +1,51 @@ +#ifndef OPM_ERT_SMSPEC_HPP +#define OPM_ERT_SMSPEC_HPP + +#include +#include + +#include +#include + +namespace ERT { + + class smspec_node { + public: + smspec_node( const smspec_node& ); + + smspec_node( + ecl_smspec_var_type, + const std::string& wgname, + const std::string& keyword + ); + + smspec_node( const std::string& keyword ); + + smspec_node( const std::string& keyword, + int dims[ 3 ], + int ijk[ 3 ] ); + + smspec_node( const std::string& keyword, + const std::string& wellname, + int dims[ 3 ], + int ijk[ 3 ] ); + + smspec_node( const std::string& keyword, + int dims[ 3 ], + int region ); + + const char* wgname() const; + const char* keyword() const; + + private: + smspec_node( + ecl_smspec_var_type, + const char*, const char*, const char*, const char*, + const int[3], int, int = 0, float = 0 ); + + ert_unique_ptr< smspec_node_type, smspec_node_free > node; + }; + +} + +#endif //OPM_ERT_SMSPEC_HPP diff --git a/ThirdParty/Ert/devel/libeclxx/src/CMakeLists.txt b/ThirdParty/Ert/devel/libeclxx/src/CMakeLists.txt index 1c3549a3b5..21a2aee5a6 100644 --- a/ThirdParty/Ert/devel/libeclxx/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libeclxx/src/CMakeLists.txt @@ -1,14 +1,18 @@ set( source_files EclKW.cpp - FortIO.cpp ) + FortIO.cpp + Smspec.cpp + ) set( header_files EclKW.hpp - FortIO.hpp ) + FortIO.hpp + Smspec.hpp + ) add_library( eclxx ${LIBRARY_TYPE} ${source_files} ) -set_target_properties( eclxx PROPERTIES VERSION 1.0 SOVERSION 1.0 ) +set_target_properties( eclxx PROPERTIES VERSION ${ERT_VERSION_MAJOR}.${ERT_VERSION_MINOR} SOVERSION ${ERT_VERSION_MAJOR}) if (USE_RUNPATH) add_runpath( eclxx ) endif() diff --git a/ThirdParty/Ert/devel/libeclxx/src/EclKW.cpp b/ThirdParty/Ert/devel/libeclxx/src/EclKW.cpp index acb8ebb532..03d7ac9919 100644 --- a/ThirdParty/Ert/devel/libeclxx/src/EclKW.cpp +++ b/ThirdParty/Ert/devel/libeclxx/src/EclKW.cpp @@ -3,22 +3,19 @@ namespace ERT { template <> - EclKW::EclKW(const std::string& kw, int size_) { - ecl_kw_type * c_ptr = ecl_kw_alloc( kw.c_str() , size_ , ECL_INT_TYPE ); - reset( c_ptr ); - } + EclKW::EclKW(const std::string& kw, int size_) + : m_kw( ecl_kw_alloc( kw.c_str() , size_ , ECL_INT_TYPE ) ) + { } template <> - EclKW::EclKW(const std::string& kw, int size_) { - ecl_kw_type * c_ptr = ecl_kw_alloc( kw.c_str() , size_ , ECL_FLOAT_TYPE ); - reset( c_ptr ); - } + EclKW::EclKW(const std::string& kw, int size_) + : m_kw( ecl_kw_alloc( kw.c_str() , size_ , ECL_FLOAT_TYPE ) ) + { } template <> - EclKW::EclKW(const std::string& kw, int size_) { - ecl_kw_type * c_ptr = ecl_kw_alloc( kw.c_str() , size_ , ECL_DOUBLE_TYPE ); - reset( c_ptr ); - } + EclKW::EclKW(const std::string& kw, int size_) + : m_kw( ecl_kw_alloc( kw.c_str() , size_ , ECL_DOUBLE_TYPE ) ) + { } diff --git a/ThirdParty/Ert/devel/libeclxx/src/FortIO.cpp b/ThirdParty/Ert/devel/libeclxx/src/FortIO.cpp index 2af298854b..35737beaf7 100644 --- a/ThirdParty/Ert/devel/libeclxx/src/FortIO.cpp +++ b/ThirdParty/Ert/devel/libeclxx/src/FortIO.cpp @@ -26,16 +26,28 @@ namespace ERT { - FortIO::FortIO(const std::string& filename , std::ios_base::openmode mode , bool fmt_file , bool endian_flip_header) { + FortIO::FortIO( ) { } + + + FortIO::FortIO(const std::string& filename , std::ios_base::openmode mode , bool fmt_file , bool endian_flip_header) + { + open( filename , mode , fmt_file , endian_flip_header ); + } + + + void FortIO::open(const std::string& filename , std::ios_base::openmode mode , bool fmt_file , bool endian_flip_header) { if (mode == std::ios_base::in) { if (util_file_exists( filename.c_str() )) { fortio_type * c_ptr = fortio_open_reader( filename.c_str() , fmt_file , endian_flip_header); - m_fortio.reset( c_ptr , fortio_fclose ); + m_fortio.reset( c_ptr ); } else throw std::invalid_argument("File " + filename + " does not exist"); + } else if (mode == std::ios_base::app) { + fortio_type * c_ptr = fortio_open_append( filename.c_str() , fmt_file , endian_flip_header); + m_fortio.reset( c_ptr ); } else { fortio_type * c_ptr = fortio_open_writer( filename.c_str() , fmt_file , endian_flip_header); - m_fortio.reset( c_ptr , fortio_fclose ); + m_fortio.reset( c_ptr ); } } @@ -48,7 +60,7 @@ namespace ERT { - fortio_type * FortIO::getPointer() const { + fortio_type * FortIO::get() const { return m_fortio.get(); } diff --git a/ThirdParty/Ert/devel/libeclxx/src/Smspec.cpp b/ThirdParty/Ert/devel/libeclxx/src/Smspec.cpp new file mode 100644 index 0000000000..c83aee7dfc --- /dev/null +++ b/ThirdParty/Ert/devel/libeclxx/src/Smspec.cpp @@ -0,0 +1,77 @@ +#include +#include + +namespace ERT { + + smspec_node::smspec_node( const smspec_node& rhs ) : + node( smspec_node_alloc_copy( rhs.node.get() ) ) + {} + + static const int dummy_dims[ 3 ] = { -1, -1, -1 }; + const auto default_join = ":"; + + static int global_index( int dims[ 3 ], int ijk[ 3 ] ) { + /* num is offset 1 global index */ + return 1 + ijk[ 0 ] + ( ijk[ 1 ] * dims[ 0 ] ) + ( ijk[ 2 ] * dims[ 1 ] * dims[ 0 ] ); + } + + smspec_node::smspec_node( + ecl_smspec_var_type var_type, + const std::string& name, + const std::string& kw + ) : smspec_node( var_type, name.c_str(), kw.c_str(), "", default_join, dummy_dims, 0 ) + {} + + smspec_node::smspec_node( const std::string& keyword ) : + smspec_node( ECL_SMSPEC_FIELD_VAR, "", keyword.c_str(), + "", default_join, dummy_dims, 0 ) + {} + + smspec_node::smspec_node( + const std::string& keyword, + int dims[ 3 ], + int ijk[ 3 ] ) : + smspec_node( + ECL_SMSPEC_BLOCK_VAR, "", keyword.c_str(), "", default_join, dims, global_index( dims, ijk ) + ) + {} + + smspec_node::smspec_node( + const std::string& keyword, + const std::string& wellname, + int dims[ 3 ], + int ijk[ 3 ] ) : + smspec_node( + ECL_SMSPEC_COMPLETION_VAR, wellname.c_str(), keyword.c_str(), "", default_join, dims, global_index( dims, ijk ) + ) + {} + + smspec_node::smspec_node( + const std::string& keyword, + int dims[ 3 ], + int region ) : + smspec_node( + ECL_SMSPEC_REGION_VAR, "", keyword.c_str(), "", default_join, dims, region + ) + {} + + smspec_node::smspec_node( + ecl_smspec_var_type type, + const char* wgname, + const char* keyword, + const char* unit, + const char* join, + const int grid_dims[ 3 ], + int num, int index, float default_value ) : + node( smspec_node_alloc( type, wgname, keyword, unit, + join, grid_dims, num, index, default_value ) ) + {} + + const char* smspec_node::wgname() const { + return smspec_node_get_wgname( this->node.get() ); + } + + const char* smspec_node::keyword() const { + return smspec_node_get_keyword( this->node.get() ); + } +} diff --git a/ThirdParty/Ert/devel/libeclxx/tests/CMakeLists.txt b/ThirdParty/Ert/devel/libeclxx/tests/CMakeLists.txt index a5b6e85030..9959e2a64b 100644 --- a/ThirdParty/Ert/devel/libeclxx/tests/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libeclxx/tests/CMakeLists.txt @@ -5,3 +5,7 @@ add_test(eclxx_kw ${EXECUTABLE_OUTPUT_PATH}/eclxx_kw) add_executable(eclxx_fortio eclxx_fortio.cpp) target_link_libraries(eclxx_fortio eclxx test_util util) add_test(eclxx_fortio ${EXECUTABLE_OUTPUT_PATH}/eclxx_fortio) + +add_executable(eclxx_smspec eclxx_smspec.cpp) +target_link_libraries(eclxx_smspec eclxx test_util util) +add_test(eclxx_smspec ${EXECUTABLE_OUTPUT_PATH}/eclxx_smspec) diff --git a/ThirdParty/Ert/devel/libeclxx/tests/eclxx_fortio.cpp b/ThirdParty/Ert/devel/libeclxx/tests/eclxx_fortio.cpp index de803316f0..6465287142 100644 --- a/ThirdParty/Ert/devel/libeclxx/tests/eclxx_fortio.cpp +++ b/ThirdParty/Ert/devel/libeclxx/tests/eclxx_fortio.cpp @@ -28,6 +28,49 @@ #include +void test_open() { + test_work_area_type * work_area = test_work_area_alloc("fortio"); + + ERT::FortIO fortio; + fortio.open( "new_file" , std::fstream::out ); + + { + std::vector data; + for (size_t i=0; i < 1000; i++) + data.push_back(i); + + fortio_fwrite_record( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ); + } + fortio.close(); + + fortio.open( "new_file" , std::fstream::app ); + { + std::vector data; + for (size_t i=0; i < 1000; i++) + data.push_back(i); + + fortio_fwrite_record( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ); + } + fortio.close(); + + fortio.open( "new_file" , std::fstream::in ); + { + std::vector data; + for (size_t i=0; i < 1000; i++) + data.push_back(99); + + test_assert_true( fortio_fread_buffer( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ) ); + for (size_t i =0; i < 1000; i++) + test_assert_size_t_equal(data[i], i); + + test_assert_true( fortio_fread_buffer( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ) ); + for (size_t i =0; i < 1000; i++) + test_assert_size_t_equal(data[i], i); + } + fortio.close(); + test_work_area_free( work_area ); +} + void test_fortio() { test_work_area_type * work_area = test_work_area_alloc("fortio"); @@ -38,7 +81,7 @@ void test_fortio() { for (size_t i=0; i < 1000; i++) data.push_back(i); - fortio_fwrite_record( fortio.getPointer() , reinterpret_cast(data.data()) , 1000 * 4 ); + fortio_fwrite_record( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ); } fortio.close(); @@ -48,7 +91,7 @@ void test_fortio() { for (size_t i=0; i < 1000; i++) data.push_back(99); - test_assert_true( fortio_fread_buffer( fortio.getPointer() , reinterpret_cast(data.data()) , 1000 * 4 ) ); + test_assert_true( fortio_fread_buffer( fortio.get() , reinterpret_cast(data.data()) , 1000 * 4 ) ); for (size_t i =0; i < 1000; i++) test_assert_size_t_equal(data[i], i); @@ -91,6 +134,7 @@ void test_fortio_kw() { int main(int argc , char ** argv) { + test_open(); test_fortio(); test_fortio_kw(); } diff --git a/ThirdParty/Ert/devel/libeclxx/tests/eclxx_smspec.cpp b/ThirdParty/Ert/devel/libeclxx/tests/eclxx_smspec.cpp new file mode 100644 index 0000000000..a1146c9e1e --- /dev/null +++ b/ThirdParty/Ert/devel/libeclxx/tests/eclxx_smspec.cpp @@ -0,0 +1,86 @@ +/* + Copyright 2015 Statoil ASA. + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ + +#include +#include + +#include + +void test_smspec_copy() { + std::string kw( "FOPT" ); + ERT::smspec_node field( kw ); + + ERT::smspec_node copy( field ); +} + +void test_smspec_wg() { + std::string kw( "WWCT" ); + std::string wg( "OP1" ); + std::string gr( "WG1" ); + + ERT::smspec_node well( ECL_SMSPEC_WELL_VAR, wg, kw ); + ERT::smspec_node group( ECL_SMSPEC_GROUP_VAR, gr, kw ); + + test_assert_true(well.wgname() == wg); + test_assert_true(group.wgname() == gr); +} + +void test_smspec_field() { + std::string kw( "FOPT" ); + ERT::smspec_node field( kw ); + + test_assert_true( field.keyword() == kw ); +} + +void test_smspec_block() { + std::string kw( "BPR" ); + int dims[ 3 ] = { 10, 10, 10 }; + int ijk[ 3 ] = { 5, 5, 5 }; + + ERT::smspec_node block( kw, dims, ijk ); + + test_assert_true( block.keyword() == kw ); +} + +void test_smspec_region() { + std::string kw( "ROIP" ); + int dims[ 3 ] = { 10, 10, 10 }; + ERT::smspec_node region( kw, dims, 0 ); + + test_assert_true( region.keyword() == kw ); +} + +void test_smspec_completion() { + std::string kw( "CWIT" ); + std::string wg( "WELL1" ); + int dims[ 3 ] = { 10, 10, 10 }; + int ijk[ 3 ] = { 1, 1, 1 }; + ERT::smspec_node completion( kw, wg, dims, ijk ); + + test_assert_true( completion.keyword() == kw ); +} + +int main (int argc, char **argv) { + test_smspec_copy(); + test_smspec_wg(); + test_smspec_field(); + test_smspec_block(); + test_smspec_region(); + test_smspec_completion(); +} diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/CMakeLists.txt b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/CMakeLists.txt index fa883a25be..045842bdf1 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/CMakeLists.txt @@ -1,8 +1,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) -include_directories( ${PLPLOT_HEADER} ) -set( src_list main.c enkf_tui_main.c enkf_tui_fs.c enkf_tui_ranking.c enkf_tui_misc.c enkf_tui_table.c enkf_tui_plot.c enkf_tui_plot_rft.c enkf_tui_plot_util.c - enkf_tui_run.c enkf_tui_util.c enkf_tui_init.c enkf_tui_export.c enkf_tui_analysis.c enkf_tui_QC.c enkf_tui_help.c enkf_tui_simple.c ert_tui_jobs.c enkf_tui_workflow.c) +set( src_list main.c enkf_tui_main.c enkf_tui_fs.c enkf_tui_ranking.c enkf_tui_misc.c enkf_tui_table.c + enkf_tui_run.c enkf_tui_util.c enkf_tui_init.c enkf_tui_export.c enkf_tui_analysis.c enkf_tui_help.c enkf_tui_simple.c enkf_tui_workflow.c) execute_process(COMMAND date "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE BUILD_TIME ) string(STRIP ${BUILD_TIME} BUILD_TIME) @@ -20,7 +19,7 @@ endif() set_source_files_properties( main.c PROPERTIES COMPILE_DEFINITIONS "COMPILE_TIME_STAMP=\"${BUILD_TIME}\";GIT_COMMIT=\"${GIT_COMMIT}\"") add_executable( ert ${src_list} ) -target_link_libraries( ert enkf sched rms ecl config plot job_queue analysis ert_util ) +target_link_libraries( ert enkf sched rms ecl config job_queue analysis ert_util ) if (USE_RUNPATH) add_runpath( ert ) endif() diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/SConstruct b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/SConstruct deleted file mode 100644 index dd21fc1948..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/SConstruct +++ /dev/null @@ -1,65 +0,0 @@ -import os -import os.path -import sys -sys.path += ["../../../scons-config"] -import global_config -from global_config import LIBUTIL -from global_config import LIBECL -from global_config import LIBPLOT -from global_config import LIBCONFIG -from global_config import LIBJOB_QUEUE -from global_config import LIBENKF -from global_config import LIBRMS -from global_config import LIBSCHED -from global_config import LIBANALYSIS -from global_config import LIBGEOMETRY - -from global_config import add_program - -lib_path = "../lib" -include_path = "../include" -bin_path = "../bin" - -conf = global_config.get_conf(os.getcwd() , 3) -env = Environment() - -lib_list = ["lapack" , "blas" , "plplotd" , "m" , "z" , "pthread" , "dl"] - -if conf.INCLUDE_LSF: - lib_list.append( ["bat" , "lsf" , "nsl"] ) - -if conf.g2c: - lib_list.append( "g2c" ) - -fileH = open("site_config_file.h" , "w") -fileH.write( "#define SITE_CONFIG_FILE \"%s\"\n" % conf.SITE_CONFIG_FILE) -fileH.close() - -conf.update_env( env , [ LIBENKF , LIBRMS , LIBANALYSIS , LIBJOB_QUEUE , LIBSCHED , LIBECL , LIBGEOMETRY , LIBPLOT , LIBCONFIG , LIBUTIL ] , lib_list , link = True) -env.Append( CPPPATH = conf.PLPLOT_INCLUDE_PATH ) -env.Append( LIBPATH = conf.PLPLOT_LIB_PATH ) -if conf.INCLUDE_LSF: - env.Append( LIBPATH = conf.LSF_LIB_PATH ) - - -tui_objects = env.Object( ["enkf_tui_main.c" , "enkf_tui_fs.c" , - "enkf_tui_ranking.c" , "enkf_tui_misc.c" , - "enkf_tui_table.c" , "enkf_tui_plot.c" , - "enkf_tui_plot_rft.c", - "enkf_tui_plot_util.c" , "enkf_tui_run.c", - "enkf_tui_util.c" , "enkf_tui_init.c" , - "enkf_tui_export.c" , "enkf_tui_analysis.c" , - "enkf_tui_QC.c" , "enkf_tui_help.c"]) - -define_fmt = "\'%s=\"%s\"\'" -main_object = env.Object("main.c" , CPPDEFINES = "DEVEL_VERSION") - - -local_config = env.Program( "local_config" , ["local_config.c"]) -upgrade_fs104 = env.Program( "upgrade_fs104" , ["upgrade_fs104.c"]) -ert = env.Program( "ert" , [main_object, tui_objects]) -ert_svn = env.Program( "ert_%s" % conf.SVN_VERSION , [main_object, tui_objects]) - -env.Install( bin_path , [ert , local_config , upgrade_fs104]) - -Default( bin_path ) diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_QC.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_QC.c deleted file mode 100644 index 0455e5cb4b..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_QC.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - Copyright (C) 2012 Statoil ASA, Norway. - - The file 'enkf_tui_QC.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - - - -void enkf_tui_QC_plot_PC_list( void * arg ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - stringlist_type * all_obs_keys = enkf_obs_alloc_keylist( enkf_main_get_obs( enkf_main )); - stringlist_type * obs_keys = stringlist_alloc_new(); - - { - char * keys_input; - util_printf_prompt("Observation keys (wildcards allowed) - [default: all]", PROMPT_LEN, '=', "=> "); - keys_input = util_alloc_stdin_line(); - if (keys_input) - { - stringlist_type * pattern_list = stringlist_alloc_from_split(keys_input, " ,"); - for (int i = 0; i < stringlist_get_size(pattern_list); i++) - { - const char * pattern = stringlist_iget(pattern_list, i); - stringlist_append_matching_elements(obs_keys, all_obs_keys, pattern); - } - free(keys_input); - } - } - - if (stringlist_get_size(obs_keys) > 0) - { - const int last_report = enkf_main_get_history_length(enkf_main); - vector_type * PC_list = vector_alloc_new(); - const int ncomp = 1; - - for (int iobs = 0; iobs < stringlist_get_size(obs_keys); iobs++) - { - local_obsdata_node_type * obsnode = local_obsdata_node_alloc(stringlist_iget(obs_keys, iobs)); - local_obsdata_type * obsdata = local_obsdata_alloc_wrapper(obsnode); - local_obsdata_node_add_range(obsnode, 0, last_report); - { - pca_plot_data_type * plot_data = enkf_main_alloc_pca_plot_data(enkf_main, obsdata, ncomp); - vector_append_owned_ref(PC_list, plot_data, pca_plot_data_free__); - } - local_obsdata_free(obsdata); - } - enkf_tui_plot_PC_list(enkf_main , PC_list); - vector_free(PC_list); - } else - printf("Sorry: no observation keys mathced the pattern(s).\n"); - - stringlist_free( obs_keys ); - stringlist_free( all_obs_keys ); -} - - - -void enkf_tui_QC_plot_PC( void * arg ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const int last_report = enkf_main_get_history_length( enkf_main ); - int step1,step2; - double truncation_or_ncomp; - local_obsdata_type * obsdata = local_obsdata_alloc("PCA Observations"); - char * keys_input; - - - enkf_tui_util_scanf_report_steps(last_report , PROMPT_LEN , &step1 , &step2); - util_printf_prompt("Observation keys (wildcards allowed) - [default: all]" , PROMPT_LEN , '=' , "=> "); - keys_input = util_alloc_stdin_line(); - - util_printf_prompt("Truncation: [0,1): Explained variance [1,ens_size): fixed" , PROMPT_LEN , '=' , "=> "); - - { - char * input = util_alloc_stdin_line(); - - if (input == NULL) - return; - else { - if (!util_sscanf_double( input , &truncation_or_ncomp)) { - fprintf(stderr , "Failed to parse:%s as number \n",input); - free( input ); - return; - } - } - - free( input ); - } - - { - stringlist_type * all_keys = enkf_obs_alloc_keylist( enkf_main_get_obs( enkf_main )); - stringlist_type * obs_keys = stringlist_alloc_new(); - - if (keys_input) { - stringlist_type * input_keys = stringlist_alloc_from_split( keys_input , " "); - int i; - for (i=0; i < stringlist_get_size( input_keys ); i++) - stringlist_append_matching_elements( obs_keys , all_keys , stringlist_iget( input_keys , i )); - stringlist_free( input_keys ); - } else - stringlist_deep_copy( obs_keys , all_keys ); - - - - - { - int iobs; - - for (iobs = 0; iobs < stringlist_get_size( obs_keys); iobs++) { - const char * obs_key = stringlist_iget( obs_keys , iobs ); - if (!local_obsdata_has_node( obsdata , obs_key )) { - local_obsdata_node_type * obs_node = local_obsdata_node_alloc( obs_key ); - - local_obsdata_node_add_range( obs_node , step1 , step2 ); - local_obsdata_add_node( obsdata , obs_node ); - } - } - - stringlist_free( all_keys ); - stringlist_free( obs_keys ); - } - } - - if (local_obsdata_get_size( obsdata )) { - matrix_type * PC = matrix_alloc(1,1); - matrix_type * PC_obs = matrix_alloc(1,1); - analysis_config_type * analysis_config = enkf_main_get_analysis_config( enkf_main ); - char * plot_name = util_alloc_sprintf(analysis_config_get_PC_filename( analysis_config ) , - step1 , step2 , "obs"); - - pca_plot_data_type * plot_data = enkf_main_alloc_pca_plot_data( enkf_main , obsdata , truncation_or_ncomp); - - enkf_tui_plot_PC( enkf_main , plot_name , plot_data ); - - free( plot_name ); - matrix_free( PC ); - matrix_free( PC_obs ); - pca_plot_data_free( plot_data ); - } - local_obsdata_free( obsdata ); -} - - -void enkf_tui_QC_run_workflow( void * arg ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const qc_module_type * qc_module = enkf_main_get_qc_module( enkf_main ); - - qc_module_run_workflow( qc_module , enkf_main ); -} - - - -void enkf_tui_QC_menu(void * arg) { - - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Quality check of prior" , "Back" , "bB"); - menu_item_type * plot_PC_item = menu_add_item( menu , "Plot of prior principal components" , "pP" , - enkf_tui_QC_plot_PC , enkf_main , NULL); - - menu_item_type * plot_PC_list_item = menu_add_item( menu , "Plot first principal component for all observations" , "aA" , - enkf_tui_QC_plot_PC_list, enkf_main , NULL); - - menu_item_type * run_QC_workflow_item = menu_add_item( menu , "Run QC workflow" , "rR" , enkf_tui_QC_run_workflow , enkf_main , NULL); - - if (!enkf_main_have_obs( enkf_main )) { - menu_item_disable( plot_PC_item ); - menu_item_disable( plot_PC_list_item ); - } - - if (!enkf_main_has_QC_workflow( enkf_main )) - menu_item_disable( run_QC_workflow_item ); - - menu_run(menu); - menu_free(menu); - } -} - diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_analysis.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_analysis.c index 6a75b3c5dc..577b151a72 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_analysis.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_analysis.c @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -40,30 +39,6 @@ #include -void enkf_tui_analysis_analyze_selected__(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - { - int_vector_type * step_list = int_vector_alloc(0,0); - { - char * filename = util_fscanf_alloc_filename("File with selected report steps" , PROMPT_LEN , 1); - FILE * stream = util_fopen( filename , "r"); - - while (true) { - int step; - if (fscanf(stream , "%d" , &step) == 1) - int_vector_append( step_list , step ); - else - break; - } - - fclose( stream ); - free( filename ); - - } - enkf_main_assimilation_update(enkf_main , step_list); - int_vector_free( step_list ); - } -} void enkf_tui_analysis_scale_observation_std__(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast(arg); @@ -78,82 +53,7 @@ void enkf_tui_analysis_scale_observation_std__(void * arg) { -/** - Observe that this function will update manually at the report step - given by the user. The function will ignore - ENKF_SCHED_FILE setting and also the - ENKF_MERGE_OBSERVATIONS -*/ -void enkf_tui_analysis_analyze__(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - int report_step; - bool valid = false; - { - char * report_step_as_char = enkf_tui_util_scanf_report_step_as_char(enkf_main_get_history_length(enkf_main) , "Which report step to analyze" , PROMPT_LEN); - if(strlen(report_step_as_char) !=0){ - valid = util_sscanf_int(report_step_as_char , &report_step); - } - if(valid){ - int_vector_type * step_list = int_vector_alloc(0,0); - int_vector_append( step_list , report_step ); - enkf_main_assimilation_update(enkf_main , step_list ); - int_vector_free( step_list ); - } - free(report_step_as_char); - } -} - - -void enkf_tui_analysis_smooth__(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - { - bool default_used; - bool valid = false; - int last_report = enkf_main_get_history_length( enkf_main ); - int step1,step2; - char * step1_as_char = enkf_tui_util_scanf_report_step_as_char(last_report , "First report step" , PROMPT_LEN); - if(strlen(step1_as_char) !=0){ - valid = util_sscanf_int(step1_as_char , &step1); - } - if(valid){ - valid = false; - char * step2_as_char = enkf_tui_util_scanf_report_step_as_char(last_report , "Last report step" , PROMPT_LEN); - if(strlen(step2_as_char) !=0){ - valid = util_sscanf_int(step2_as_char , &step2); - if(step2 step2) - break; - } - if (int_vector_get_last( step_list ) != step2) - int_vector_append( step_list , step2 ); - } - enkf_main_assimilation_update(enkf_main , step_list); - - int_vector_free( step_list ); - } - free(step2_as_char); - } - free(step1_as_char); - } -} static void enkf_tui_analysis_update_title( enkf_main_type * enkf_main , menu_type * menu ) { @@ -242,17 +142,12 @@ void enkf_tui_analysis_menu(void * arg) { { enkf_tui_analysis_update_title(enkf_main, menu); - menu_add_item(menu, "Analyze one step manually", "aA", enkf_tui_analysis_analyze__, enkf_main, NULL); - menu_add_item(menu, "Analyze interval manually", "iI", enkf_tui_analysis_smooth__, enkf_main, NULL); - menu_add_item(menu, "Analyze selected steps manually", "nN", enkf_tui_analysis_analyze_selected__, enkf_main, NULL); - menu_add_separator(menu); - { - menu_item_type * item = menu_add_item(menu, "Global scaling of uncertainty", "gG", enkf_tui_analysis_scale_observation_std__, enkf_main, NULL); - if (!enkf_main_have_obs(enkf_main)) { - menu_item_disable(item); - } + + if (enkf_main_have_obs(enkf_main)) { + menu_add_item(menu, "Global scaling of uncertainty", "gG", enkf_tui_analysis_scale_observation_std__, enkf_main, NULL); + menu_add_separator(menu); } - menu_add_separator(menu); + menu_add_item(menu, "Select analysis module", "sS", enkf_tui_analysis_select_module__, arg_pack, NULL); menu_add_item(menu, "List available modules", "lL", enkf_tui_analysis_list_modules__, enkf_main, NULL); menu_add_item(menu, "Modify analysis module parameters", "mM", enkf_tui_analysis_update_module__, enkf_main, NULL); @@ -262,3 +157,4 @@ void enkf_tui_analysis_menu(void * arg) { menu_free(menu); arg_pack_free(arg_pack); } + diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_export.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_export.c index 22e85e8045..fb86a72ac1 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_export.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_export.c @@ -67,7 +67,7 @@ void enkf_tui_export_field(const enkf_main_type * enkf_main , field_file_format_ } { - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); enkf_node_type * node = enkf_node_alloc(config_node); for (iens = iens1; iens <= iens2; iens++) { @@ -151,7 +151,7 @@ void enkf_tui_export_gen_data(void * arg) { { msg_type * msg = msg_alloc("Writing file: " , false); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); enkf_node_type * node = enkf_node_alloc(config_node); gen_data_file_format_type export_type = gen_data_guess_export_type( enkf_node_value_ptr(node) ); int iens; @@ -253,7 +253,7 @@ void enkf_tui_export_profile(void * enkf_main) { double * profile = util_calloc(total_cells , sizeof * profile ); int iens , report_step; enkf_node_type * node = enkf_node_alloc( config_node ); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); for (report_step = 0; report_step <= last_report; report_step++) { if (report_active[report_step]) { @@ -313,7 +313,7 @@ void enkf_tui_export_cell(void * enkf_main) { double * cell_data = util_calloc(ens_size , sizeof * cell_data); int iens , report_step; /* Observe that iens and report_step loops below should be inclusive.*/ enkf_node_type * node = enkf_node_alloc( config_node ); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); path_fmt_type * file_fmt = path_fmt_scanf_alloc("Give filename to store historgrams (with %d for report step) =>" , 0 , NULL , false); @@ -376,7 +376,7 @@ void enkf_tui_export_time(void * enkf_main) { double * x, *y; int iens; /* Observe that iens and report_step loops below should be inclusive.*/ enkf_node_type * node = enkf_node_alloc( config_node ); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); path_fmt_type * file_fmt = path_fmt_scanf_alloc("Give filename to store line (with %d for report iens) =>" , 0 , NULL , false); @@ -434,7 +434,7 @@ void enkf_tui_export_fieldP(void * arg) { util_printf_prompt("Filename to store file: " , PROMPT_LEN , '=' , "=> "); export_file = util_alloc_stdin_line(); { - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); enkf_node_type ** ensemble = enkf_node_load_alloc_ensemble( config_node , fs , report_step , iens1 , iens2 , analysis_state ); enkf_node_type * sum = enkf_node_alloc( config_node ); int active_ens_size = 0; @@ -559,7 +559,7 @@ void enkf_tui_export_scalar2csv(void * arg) { } { /* Seriously manual creation of csv file. */ - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); enkf_node_type * node = enkf_node_alloc( config_node ); FILE * stream = util_fopen( csv_file , "w"); msg_type * msg = msg_alloc("Exporting report_step/member: " , false); @@ -658,7 +658,11 @@ void enkf_tui_export_stat(void * arg) { } { - enkf_node_type ** ensemble = enkf_main_get_node_ensemble( enkf_main , enkf_config_node_get_key( config_node ) , report_step , analysis_state ); + enkf_node_type ** ensemble = enkf_main_get_node_ensemble( enkf_main , + enkf_main_tui_get_fs( enkf_main ) , + enkf_config_node_get_key( config_node ) , + report_step , + analysis_state ); enkf_node_type * mean = enkf_node_copyc( ensemble[0] ); enkf_node_type * std = enkf_node_copyc( ensemble[0] ); diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_fs.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_fs.c index 022ea728e7..cc362310d8 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_fs.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_fs.c @@ -177,29 +177,7 @@ static void enkf_tui_fs_copy_ensemble__( 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; - - if(only_parameters) - nodes = ensemble_config_alloc_keylist_from_var_type(config, PARAMETER); - else { - /* Must explicitly load the static nodes. */ - stringlist_type * restart_kw_list = stringlist_alloc_new(); - int i; - - enkf_fs_fread_restart_kw_list(src_fs , report_step_from , 0 , restart_kw_list); - for (i = 0; i < stringlist_get_size( restart_kw_list ); i++) { - const char * kw = stringlist_iget( restart_kw_list , i); - if (!ensemble_config_has_key(config , kw)) - ensemble_config_add_STATIC_node(config , kw ); - } - for (i=0; i < ens_size; i++) - enkf_fs_fwrite_restart_kw_list(target_fs , report_step_to , i , restart_kw_list); - - stringlist_free( restart_kw_list ); - nodes = ensemble_config_alloc_keylist(config); - } - - /***/ + stringlist_type * nodes = ensemble_config_alloc_keylist_from_var_type(config, PARAMETER); { int num_nodes = stringlist_get_size(nodes); diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_help.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_help.c index 57280d4d58..6297ad91aa 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_help.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_help.c @@ -25,11 +25,9 @@ #include #include -#include #include #include -#include #include #include #include @@ -55,14 +53,7 @@ void enkf_tui_help_manual_main( void * arg) { } void enkf_tui_help_menu_main(void * arg) { - - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - + enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); { menu_type * menu = menu_alloc("Help: Main menu" , "Back" , "bB"); menu_add_helptext(menu , "Choose the different options from the main menu to read more about the different options."); @@ -91,19 +82,11 @@ void enkf_tui_help_manual_cases( void * arg) { void enkf_tui_help_menu_cases(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Manage cases" , "Back" , "bB"); - menu_add_helptext(menu , "Use this menu to navgate between cases and to initialize cases. A case has to be initialized before it can be used."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_cases , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } + menu_type * menu = menu_alloc("Help: Manage cases" , "Back" , "bB"); + menu_add_helptext(menu , "Use this menu to navgate between cases and to initialize cases. A case has to be initialized before it can be used."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_cases , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } void enkf_tui_help_manual_run( void * arg) { @@ -125,54 +108,13 @@ void enkf_tui_help_manual_run( void * arg) { void enkf_tui_help_menu_run(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Run menu" , "Back" , "bB"); - menu_add_helptext(menu , "This menu is used to do the main work in ERT. The first option, x: Ensemble run: history, will just run the case without any data conditioning. Options r and s will initiate classical enkf runs. The two options i and t invokes the ensemble kalman smoother."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_run , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } -} - -void enkf_tui_help_manual_plot( void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const site_config_type * site_config = enkf_main_get_site_config ( enkf_main ); - const char * manual_url = site_config_get_manual_url( site_config ); - const char * browser = getenv("BROWSER"); - - if (browser == NULL) - browser = site_config_get_default_browser( site_config ); - - { - char * cmd = util_alloc_sprintf("%s %s%s &" , browser , manual_url , "#Plot_Results"); - system(cmd); - free( cmd ); - } + menu_type * menu = menu_alloc("Help: Run menu" , "Back" , "bB"); + menu_add_helptext(menu , "This menu is used to do the main work in ERT. The first option, x: Ensemble run: history, will just run the case without any data conditioning. Options r and s will initiate classical enkf runs. The two options i and t invokes the ensemble kalman smoother."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_run , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } -void enkf_tui_help_menu_plot(void * arg) { - - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Plot results" , "Back" , "bB"); - menu_add_helptext(menu , "Use this option to plot results after the case has been run."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_plot , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } -} void enkf_tui_help_manual_rank( void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); @@ -193,19 +135,11 @@ void enkf_tui_help_manual_rank( void * arg) { void enkf_tui_help_menu_rank(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Rank results" , "Back" , "bB"); - menu_add_helptext(menu , "Use this option to rank results after the case has been run."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_rank , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } + menu_type * menu = menu_alloc("Help: Rank results" , "Back" , "bB"); + menu_add_helptext(menu , "Use this option to rank results after the case has been run."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_rank , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } void enkf_tui_help_manual_export( void * arg) { @@ -227,19 +161,11 @@ void enkf_tui_help_manual_export( void * arg) { void enkf_tui_help_menu_export(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Export results" , "Back" , "bB"); - menu_add_helptext(menu , "Use this option to export results after the case has been run."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_export , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } + menu_type * menu = menu_alloc("Help: Export results" , "Back" , "bB"); + menu_add_helptext(menu , "Use this option to export results after the case has been run."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_export , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } void enkf_tui_help_manual_table( void * arg) { @@ -261,19 +187,11 @@ void enkf_tui_help_manual_table( void * arg) { void enkf_tui_help_menu_table(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Table of results" , "Back" , "bB"); - menu_add_helptext(menu , "This option can generate a table of results after the case has been run."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_table , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } + menu_type * menu = menu_alloc("Help: Table of results" , "Back" , "bB"); + menu_add_helptext(menu , "This option can generate a table of results after the case has been run."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_table , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } void enkf_tui_help_manual_misc( void * arg) { @@ -295,36 +213,20 @@ void enkf_tui_help_manual_misc( void * arg) { void enkf_tui_help_menu_misc(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Miscellanous" , "Back" , "bB"); - menu_add_helptext(menu , "This option contains miscellaneous options."); - menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_misc , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } + menu_type * menu = menu_alloc("Help: Miscellanous" , "Back" , "bB"); + menu_add_helptext(menu , "This option contains miscellaneous options."); + menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_misc , enkf_main , NULL); + menu_run(menu); + menu_free(menu); } void enkf_tui_help_menu_simple(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu = menu_alloc("Help: Simple menu" , "Back" , "bB"); - menu_add_helptext(menu , "The top four options in the simple menu will run eclipse simulations. Option s: Sensitivity run: No data conditioning, will initialize all parameters and run one eclipse simulation for each set of different parameters. e: Assimilation run: EnKF updates, will initialize all parameters and run one eclipse simulation for each set of different parameters. The eclipse simulations will run until the first data time step is encountered and condition on data before continuing. a: Assimilation run: Smoother update, will do one pass of the sensitivity run, then condition the parameters to all the data and rerun all experiments. i: Assimilation run: Iterated smoother [RML-EnKF] will iterate the smoother run several times."); + menu_type * menu = menu_alloc("Help: Simple menu" , "Back" , "bB"); + menu_add_helptext(menu , "The top four options in the simple menu will run eclipse simulations. Option s: Sensitivity run: No data conditioning, will initialize all parameters and run one eclipse simulation for each set of different parameters. e: Assimilation run: EnKF updates, will initialize all parameters and run one eclipse simulation for each set of different parameters. The eclipse simulations will run until the first data time step is encountered and condition on data before continuing. a: Assimilation run: Smoother update, will do one pass of the sensitivity run, then condition the parameters to all the data and rerun all experiments. i: Assimilation run: Iterated smoother [RML-EnKF] will iterate the smoother run several times."); menu_add_item(menu , "Open manual (firefox)" , "mM" , enkf_tui_help_manual_main , enkf_main , NULL); menu_run(menu); menu_free(menu); - } } diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_init.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_init.c index b8f7d3519f..656c7fae6e 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_init.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_init.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -90,7 +89,8 @@ void enkf_tui_init(enkf_main_type * enkf_main, bool all_members , bool all_param } if (param_list != NULL) { - enkf_main_initialize_from_scratch(enkf_main , param_list , iens1 , iens2 , init_mode); + enkf_fs_type * init_fs = enkf_main_tui_get_fs( enkf_main ); + enkf_main_initialize_from_scratch(enkf_main , init_fs , param_list , iens1 , iens2 , init_mode); stringlist_free( param_list ); } } diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_main.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_main.c index afdc843418..0741f7c9c0 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_main.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_main.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -35,7 +34,6 @@ #include #include #include -#include /** @@ -59,8 +57,6 @@ void enkf_tui_main_menu(void * arg) { menu_add_item(menu , "Manage cases" , "cC" , enkf_tui_fs_menu , enkf_main , NULL); menu_add_item(menu , "Run, restart or analyse experiment" , "rR" , enkf_tui_run_menu , enkf_main , NULL); - menu_add_item(menu , "Quality check" , "uU" , enkf_tui_QC_menu , enkf_main , NULL); - menu_add_item(menu , "Plot results" , "pP" , enkf_tui_plot_menu , enkf_main , NULL); menu_add_item(menu , "Rank results" , "aA" , enkf_tui_ranking_menu , enkf_main , NULL); menu_add_item(menu , "Export data to other formats" , "eE" , enkf_tui_export_menu , enkf_main , NULL); menu_add_item(menu , "Table of results" , "tT" , enkf_tui_table_menu , enkf_main , NULL); diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.c deleted file mode 100644 index 78610ba3c7..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.c +++ /dev/null @@ -1,1340 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'enkf_tui_plot.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -/** - The final plot path consists of three parts: - - plot_path: This is the PLOT_PATH option given in main configuration file. - - case_name: This the name of the currently active case. - - base_name: The filename of the current plot. -*/ - -#define NUM_REFCASE_POINTS 75 - - -static void __plot_add_data(plot_type * plot , const char * label , int N , const double * x , const double *y) { - plot_dataset_type *d = plot_alloc_new_dataset( plot , label , PLOT_XY ); - plot_dataset_set_line_color(d , BLUE); - plot_dataset_append_vector_xy(d, N , x, y); -} - - - - - - - -void enkf_tui_plot_PC_list( enkf_main_type * enkf_main , const vector_type * PC_list ) { - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , enkf_main_get_current_fs( enkf_main ), "PC_list" ); - plot_type * plot = enkf_tui_plot_alloc(plot_config , - "Standardized PC value " , - "Observation #", - "Principle components" , - plot_file); - - int num_obs = vector_get_size( PC_list ); - int iobs; - for (iobs = 0; iobs < num_obs; iobs++) { - const pca_plot_data_type * pca_data = vector_iget_const( PC_list , iobs ); - const pca_plot_vector_type * pca_vector = pca_plot_data_iget_vector( pca_data , 0 ); - int ens_size = pca_plot_vector_get_size( pca_vector ); - { - char * data_label = util_alloc_sprintf("%s - simulated" , pca_plot_data_get_name( pca_data )); - plot_dataset_type * sim_data = plot_alloc_new_dataset( plot , data_label , PLOT_XY ); - plot_dataset_set_style( sim_data , POINTS ); - plot_dataset_set_point_color( sim_data , BLUE); - for (int iens = 0; iens < ens_size; iens++) - plot_dataset_append_point_xy( sim_data , - pca_plot_vector_iget_sim_value( pca_vector , iens ), - iobs ); - free( data_label ); - } - { - char * obs_label = util_alloc_sprintf("%s - obs" , pca_plot_data_get_name( pca_data )); - plot_dataset_type * obs_data = plot_alloc_new_dataset( plot , obs_label , PLOT_XY ); - plot_dataset_set_style( obs_data , POINTS ); - plot_dataset_set_point_color( obs_data , RED); - plot_dataset_append_point_xy( obs_data , pca_plot_vector_get_obs_value( pca_vector ) , iobs ); - free( obs_label ); - } - // POsition of text is not considered when the autorange is applied; i.e. with - // fixed coordinates it might fall outside the clipping region ... - plot_add_text( plot , -0.75 , iobs , 0.35 , pca_plot_data_get_name( pca_data )); - } - enkf_tui_show_plot( plot , plot_config , plot_file ); /* Frees the plot - logical ehhh. */ - free( plot_file ); -} - - - -void enkf_tui_plot_PC( enkf_main_type * enkf_main , const char * plot_name , const pca_plot_data_type * plot_data) { - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , enkf_main_get_current_fs( enkf_main ), plot_name ); - plot_type * plot = enkf_tui_plot_alloc(plot_config , "PC number", /* y akse */ "Standardized PC value " , "Principle components" , plot_file); - - - { - const int num_PC = pca_plot_data_get_size( plot_data ); - const int ens_size = pca_plot_data_get_ens_size( plot_data ); - int ipc, iens; - - { - plot_dataset_type * sim_data = plot_alloc_new_dataset( plot , "simulated" , PLOT_XY ); - plot_dataset_set_style( sim_data , POINTS ); - plot_dataset_set_point_color( sim_data , BLUE); - for (ipc = 0; ipc < num_PC; ipc++) { - const pca_plot_vector_type * pca_vector = pca_plot_data_iget_vector( plot_data , ipc ); - for (iens =0; iens < ens_size; iens++) - plot_dataset_append_point_xy( sim_data , - (ipc + 1) , - pca_plot_vector_iget_sim_value( pca_vector , iens )); - } - } - - { - plot_dataset_type * obs_data = plot_alloc_new_dataset( plot , "observation" , PLOT_XY ); - plot_dataset_set_style( obs_data , POINTS ); - plot_dataset_set_point_color( obs_data , RED); - for (ipc = 0; ipc < num_PC; ipc++) { - const pca_plot_vector_type * pca_vector = pca_plot_data_iget_vector( plot_data , ipc ); - plot_dataset_append_point_xy( obs_data , (ipc + 1) , pca_plot_vector_get_obs_value( pca_vector )); - } - } - } - enkf_tui_show_plot( plot , plot_config , plot_file ); /* Frees the plot - logical ehhh. */ - free( plot_file ); -} - - - - - -void enkf_tui_plot_ensemble__(enkf_main_type * enkf_main , - const enkf_config_node_type * config_node , - const char * user_key , - const char * key_index , - int step1 , int step2 , - bool prediction_mode , - int iens1 , int iens2 , - state_enum plot_state) { - - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); - enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - - bool plot_dates = true; - const int errorbar_max_obsnr = plot_config_get_errorbar_max( plot_config ); - const bool plot_errorbars = plot_config_get_plot_errorbar( plot_config ); - const bool add_observations = true; - const bool logy = plot_config_get_logy( plot_config ); - const bool plot_refcase = plot_config_get_plot_refcase( plot_config ); - bool show_plot = false; - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , enkf_main_get_current_fs( enkf_main ), user_key ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - plot_type * plot ; - enkf_node_type * node; - msg_type * msg; - bool_vector_type * has_data = bool_vector_alloc( 0 , false ); - int iens , step; - - /* - { - enkf_plot_data_type * plot_data = enkf_main_alloc_plot_data( enkf_main ); - bool_vector_type * active = bool_vector_alloc( 0 , false ); - - for (iens = iens1; iens <= iens2; iens++) - bool_vector_iset( active , iens , true ); - - enkf_plot_data_load( plot_data , config_node , fs , user_key , FORECAST , active , false , step1 , step2 ); - bool_vector_free( active ); - enkf_plot_data_free( plot_data ); - } - */ - - - if (plot_dates) - plot = enkf_tui_plot_alloc(plot_config , "" , /* y akse */ "" ,user_key,plot_file); - else - plot = enkf_tui_plot_alloc(plot_config , "Simulation time (days) ", /* y akse */ "" ,user_key , plot_file); - - /* Initial data on summary plots is just bogus. - */ - if ((enkf_config_node_get_impl_type( config_node ) == SUMMARY) && (step1 == 0)) - step1 = 1; - - node = enkf_node_alloc( config_node ); - { - char * prompt = util_alloc_sprintf("Loading %s member: " , enkf_config_node_get_key(config_node)); - msg = msg_alloc(prompt, false); - free(prompt); - } - msg_show(msg); - - double_vector_type * x = double_vector_alloc(0,0); - { - - double_vector_type * y = double_vector_alloc(0,0); - for (iens = iens1; iens <= iens2; iens++) { - char msg_label[32]; - char plot_label[32]; - double_vector_reset( x ); - double_vector_reset( y ); - sprintf(msg_label , "%03d" , iens ); - msg_update( msg , msg_label); - - if (prediction_mode) - step2 = time_map_get_last_step( time_map ); - - for (step = step1; step <= step2; step++) { - - double sim_days = time_map_iget_sim_days( time_map , step ); - time_t sim_time = time_map_iget( time_map , step ); - - /* Forecast block */ - if (plot_state & FORECAST) { - double value; - node_id_type node_id = {.report_step = step , - .iens = iens , - .state = FORECAST }; - - if (enkf_node_user_get( node , fs , key_index , node_id , &value)) { - if (!(logy && (value <= 0))) { - double_vector_append(y , value); - bool_vector_iset(has_data , step , true); - if (plot_dates) - double_vector_append(x , sim_time ); - else - double_vector_append(x , sim_days ); - } - } - } - - - /* Analyzed block */ - if (plot_state & ANALYZED) { - double value; - - node_id_type node_id = {.report_step = step , - .iens = iens , - .state = ANALYZED }; - - if (enkf_node_user_get( node , fs , key_index , node_id , &value)) { - if (!(logy && (value <= 0))) { - double_vector_append(y , value); - bool_vector_iset(has_data , step , true); - if (plot_dates) - double_vector_append(x , sim_time ); - else - double_vector_append(x , sim_days ); - } - } - } - } - - if (double_vector_size( x ) > 0) { - show_plot = true; - - /* This is called once for every realization - that is kind of wasted. */ - if (plot_dates) { - time_t min_time = ( time_t ) double_vector_get_min( x ); - time_t max_time = ( time_t ) double_vector_get_max( x ); - - plot_set_default_timefmt( plot , min_time , max_time ); - } - - sprintf(plot_label , "mem_%03d" , iens); - __plot_add_data(plot , plot_label , double_vector_size( x ) , double_vector_get_ptr( x ) , double_vector_get_ptr( y )); - } - } - double_vector_free( y ); - } - - - /* - Observe that all the observations are 'flattened'. - */ - if (add_observations) { - ert_impl_type impl_type = enkf_config_node_get_impl_type(config_node); - if ((impl_type == SUMMARY) || (impl_type == FIELD) || (impl_type == GEN_DATA)) { - /* - These three double vectors are used to assemble - all observations. - */ - double_vector_type * sim_time = double_vector_alloc( 0 , 0 ); - double_vector_type * obs_value = double_vector_alloc( 0 , 0 ); - double_vector_type * obs_std = double_vector_alloc( 0 , 0 ); - - const stringlist_type * obs_keys = enkf_config_node_get_obs_keys(config_node); - int obs_size = 0; - int i; - for (i=0; i < stringlist_get_size( obs_keys ); i++) { - const char * obs_key = stringlist_iget(obs_keys , i); - const obs_vector_type * obs_vector = enkf_obs_get_vector( enkf_obs , obs_key); - double value , std; - int report_step = -1; - do { - report_step = obs_vector_get_next_active_step( obs_vector , report_step); - if (report_step != -1) { - if (bool_vector_safe_iget( has_data , report_step)) { /* Not plotting an observation if we do not have any simulations at the same time. */ - bool valid; - - /** - The user index used when calling the user_get function on the - gen_obs data type is different depending on whether is called with a - data context user_key (as here) or with a observation context - user_key (as when plotting an observation plot). See more - documentation of the function gen_obs_user_get_data_index(). - */ - - if (impl_type == GEN_DATA) - gen_obs_user_get_with_data_index( obs_vector_iget_node( obs_vector , report_step ) , key_index , &value , &std , &valid); - else - obs_vector_user_get( obs_vector , key_index , report_step , &value , &std , &valid); - - if (valid) { - if (logy && ((value - std) <= 0.0)) - valid = false; - } - - - if (valid) { - /** - Should get sim_time directly from the observation - and not inderctly thrugh the member_config object. - */ - if (plot_dates) - double_vector_append( sim_time , time_map_iget( time_map , report_step )); - else - double_vector_append( sim_time , time_map_iget_sim_days( time_map , report_step )); - - double_vector_append( obs_value , value ); - double_vector_append( obs_std , std ); - - obs_size += 1; - } - } - } - } while (report_step != -1); - } - - if (double_vector_size( sim_time ) > 0) { - if (obs_size > errorbar_max_obsnr && plot_errorbars) { - /* - There are very many observations - to increase - readability of the plots we plot an upper and lower limit - as dashed lines, instead of plotting each individual - error bar. - */ - - plot_dataset_type * data_value = plot_alloc_new_dataset( plot , "observation" , PLOT_XY ); - plot_dataset_type * data_lower = plot_alloc_new_dataset( plot , "observation_lower" , PLOT_XY ); - plot_dataset_type * data_upper = plot_alloc_new_dataset( plot , "observation_upper" , PLOT_XY ); - - plot_dataset_set_style( data_value , POINTS ); - plot_dataset_set_style( data_upper , LINE ); - plot_dataset_set_style( data_lower , LINE ); - - plot_dataset_set_line_style( data_upper , PLOT_LINESTYLE_LONG_DASH ); - plot_dataset_set_line_style( data_lower , PLOT_LINESTYLE_LONG_DASH ); - plot_dataset_set_line_color( data_upper , RED); - plot_dataset_set_line_color( data_lower , RED); - plot_dataset_set_line_width( data_upper , 1.50 ); - plot_dataset_set_line_width( data_lower , 1.50 ); - - plot_dataset_set_point_color( data_value , BLACK); - plot_dataset_set_symbol_type( data_value , PLOT_SYMBOL_FILLED_CIRCLE); - - { - int * perm = double_vector_alloc_sort_perm( sim_time ); - double_vector_permute( sim_time , perm ); - double_vector_permute( obs_value , perm ); - double_vector_permute( obs_std , perm ); - free( perm ); - } - - for (i = 0; i < double_vector_size( sim_time ); i++) { - double days = double_vector_iget( sim_time , i); - double value = double_vector_iget( obs_value , i); - double std = double_vector_iget( obs_std , i); - - plot_dataset_append_point_xy( data_value , days , value); - plot_dataset_append_point_xy( data_lower , days , value - std); - plot_dataset_append_point_xy( data_upper , days , value + std); - } - } else if (plot_errorbars){ - /* - Normal plot with errorbars. Observe that the coordinates - are (x,y1,y2) and NOT (x,y,std_y). - */ - - plot_dataset_type * obs_errorbar = plot_alloc_new_dataset( plot , "observations" , PLOT_XY1Y2 ); - plot_dataset_set_line_color( obs_errorbar , RED); - plot_dataset_set_line_width( obs_errorbar , 1.5); - for (i = 0; i < double_vector_size( sim_time ); i++) { - double days = double_vector_iget( sim_time , i); - double value = double_vector_iget( obs_value , i); - double std = double_vector_iget( obs_std , i); - plot_dataset_append_point_xy1y2( obs_errorbar , days , value - std , value + std); - } - } - else { - /* - Normal plot without errorbars. Observe that the coordinates - are (x,y1,y2) and NOT (x,y,std_y). - */ - plot_dataset_type * data_value = plot_alloc_new_dataset( plot , "observation" , PLOT_XY ); - plot_dataset_set_style( data_value , POINTS ); - plot_dataset_set_point_color( data_value , BLACK); - plot_dataset_set_symbol_type( data_value , PLOT_SYMBOL_FILLED_CIRCLE); - - { - int * perm = double_vector_alloc_sort_perm( sim_time ); - double_vector_permute( sim_time , perm ); - double_vector_permute( obs_value , perm ); - double_vector_permute( obs_std , perm ); - free( perm ); - } - - for (i = 0; i < double_vector_size( sim_time ); i++) { - double days = double_vector_iget( sim_time , i); - double value = double_vector_iget( obs_value , i); - plot_dataset_append_point_xy( data_value , days , value); - } - - } - } - double_vector_free( sim_time ); - double_vector_free( obs_std ); - double_vector_free( obs_value ); - } - } - - /*REFCASE PLOTTING*/ - - if (plot_refcase && time_map_get_size( time_map) ) { - ecl_config_type * ecl_config = enkf_main_get_ecl_config( enkf_main ); - ecl_refcase_list_type * refcase_list = ecl_config_get_refcase_list( ecl_config ); - int num_refcase = ecl_refcase_list_get_size( refcase_list ); - - for( int iref=0; iref < num_refcase; iref++) { - const ecl_sum_type * refcase = ecl_refcase_list_iget_case( refcase_list , iref ); - if ( ecl_sum_has_general_var( refcase , user_key)) { - char * refcase_label = util_alloc_sprintf("Refcase%d" , iref); - plot_dataset_type * d = plot_alloc_new_dataset( plot , refcase_label , PLOT_XY ); - int color_nr = iref % (PLOT_NUM_COLORS - 1) + 1; // Color_nr == 0 is white; we skip that. - - plot_dataset_set_style( d , LINE ); - plot_dataset_set_line_color( d , color_nr ); - plot_dataset_set_line_width(d , 2.0 ); - - for ( int i = 0; i < time_map_get_size( time_map ); i++ ){ - time_t sim_time = ( time_t ) time_map_iget( time_map , i ); - if (ecl_sum_check_sim_time( refcase , sim_time)) { - double days = ecl_sum_time2days( refcase , sim_time ); - double value = ecl_sum_get_general_var_from_sim_time( refcase , sim_time , user_key); - - if (plot_dates) - plot_dataset_append_point_xy( d , sim_time , value); - else - plot_dataset_append_point_xy( d , days , value); - } - } - - free( refcase_label ); - } - } - } - double_vector_free( x ); - - plot_set_bottom_padding( plot , 0.05); - plot_set_top_padding( plot , 0.05); - plot_set_left_padding( plot , 0.05); - plot_set_right_padding( plot , 0.05); - - enkf_node_free( node ); - msg_free( msg , true ); - if ( show_plot ) { - enkf_tui_show_plot( plot , plot_config , plot_file ); /* Frees the plot - logical ehhh. */ - } else { - printf( "No data to plot for:%s \n" , user_key); - plot_free( plot ); - } - free( plot_file ); - bool_vector_free( has_data ); -} - - - - -void enkf_tui_plot_GEN_KW__(enkf_main_type * enkf_main , const enkf_config_node_type * config_node , int step1 , int step2 , int iens1 , int iens2) { - gen_kw_config_type * gen_kw_config = enkf_config_node_get_ref( config_node ); - stringlist_type * key_list = gen_kw_config_alloc_name_list( gen_kw_config ); - - int ikw; - for (ikw = 0; ikw < stringlist_get_size( key_list ); ikw++) { - char * user_key = gen_kw_config_alloc_user_key( gen_kw_config , ikw ); - enkf_tui_plot_ensemble__( enkf_main , config_node , user_key , stringlist_iget( key_list , ikw) , step1 , step2 , false , iens1 , iens2 , ANALYZED ); - free( user_key ); - } - - stringlist_free( key_list ); -} - - - -void enkf_tui_plot_GEN_KW(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - { - const char * prompt = "Which GEN_KW parameter do you want to plot"; - const enkf_config_node_type * config_node = NULL; - bool exit_loop = false; - - do { - char *node_key; - util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); - node_key = util_alloc_stdin_line(); - - if (node_key != NULL) { - if (!ensemble_config_has_key( ensemble_config , node_key )) - printf("Could not find node:%s \n",node_key); - else { - config_node = ensemble_config_get_node( ensemble_config , node_key ); - if (enkf_config_node_get_impl_type( config_node ) == GEN_KW) - exit_loop = true; - else { - printf("%s is not a GEN_KW parameter \n",node_key); - config_node = NULL; - } - } - } else - exit_loop = true; - util_safe_free( node_key ); - } while (!exit_loop); - - if (config_node != NULL) { - int iens1 , iens2 , step1 , step2; - const int last_report = time_map_get_last_step( time_map ); - - enkf_tui_util_scanf_report_steps(last_report , PROMPT_LEN , &step1 , &step2); - enkf_tui_util_scanf_iens_range("Realizations members to plot(0 - %d)" , enkf_main_get_ensemble_size( enkf_main ) , PROMPT_LEN , &iens1 , &iens2); - - enkf_tui_plot_GEN_KW__(enkf_main , config_node , step1 , step2 , iens1 , iens2); - } - } -} - - - - - - - -void enkf_tui_plot_all_GEN_KW(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - { - int iens1 , iens2 , step1 , step2 , ikey; - stringlist_type * gen_kw_keys = ensemble_config_alloc_keylist_from_impl_type(ensemble_config , GEN_KW); - int last_report = time_map_get_last_step( time_map ); - - enkf_tui_util_scanf_report_steps(last_report , PROMPT_LEN , &step1 , &step2); - enkf_tui_util_scanf_iens_range("Realizations members to plot(0 - %d)" , enkf_main_get_ensemble_size( enkf_main ) , PROMPT_LEN , &iens1 , &iens2); - - for (ikey = 0; ikey < stringlist_get_size( gen_kw_keys ); ikey++) { - const char * key = stringlist_iget( gen_kw_keys , ikey); - enkf_config_node_type * config_node = ensemble_config_get_node( ensemble_config , key ); - enkf_tui_plot_GEN_KW__(enkf_main , config_node , step1 , step2 , iens1 , iens2); - } - stringlist_free( gen_kw_keys ); - } -} - - - - -void enkf_tui_plot_histogram__(enkf_main_type * enkf_main , enkf_fs_type * fs , char * user_key , state_enum plot_state , int report_step){ - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - const char * case_name = enkf_main_get_current_fs( enkf_main ); - { - const enkf_config_node_type * config_node; - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - char * key_index; - double * count = util_calloc(ens_size , sizeof * count ); - int iens; - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , case_name , user_key ); - plot_type * plot = enkf_tui_plot_alloc(plot_config , user_key , "#" ,user_key , plot_file); - - config_node = ensemble_config_user_get_node( ensemble_config , user_key , &key_index); - if (config_node == NULL) { - fprintf(stderr,"** Sorry - could not find any nodes with the key:%s \n",user_key); - util_safe_free(key_index); - return; - } - { - int active_size = 0; - enkf_node_type * node = enkf_node_alloc( config_node ); - node_id_type node_id = {.report_step = report_step , - .iens = 0 , - .state = plot_state }; - for (iens = 0; iens < ens_size; iens++) { - node_id.iens = iens; - if (enkf_node_user_get( node , fs , key_index , node_id , &count[active_size])) - active_size++; - } - enkf_node_free( node ); - - { - plot_dataset_type * d = plot_alloc_new_dataset( plot , NULL , PLOT_HIST); - plot_dataset_append_vector_hist(d , active_size , count); - if(plot_dataset_get_size(d) > 0){ - enkf_tui_show_plot(plot , plot_config , plot_file);} - else{ - fprintf(stderr,"** There is no data to plot. Are you trying to plot analyzed data after a forward run with option x? \n");} - } - } - free(count); - util_safe_free(key_index); - } -} - - - -void enkf_tui_plot_histogram(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - { - const char * prompt = "What do you want to plot (KEY:INDEX)"; - const enkf_config_node_type * config_node; - char * user_key; - util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); - user_key = util_alloc_stdin_line(); - if (user_key != NULL) { - state_enum plot_state = ANALYZED; /* Compiler shut up */ - char * key_index; - const int last_report = time_map_get_last_step( time_map ); - int report_step; - config_node = ensemble_config_user_get_node( ensemble_config , user_key , &key_index); - if (config_node == NULL) { - fprintf(stderr,"** Sorry - could not find any nodes with the key:%s \n",user_key); - util_safe_free(key_index); - return; - } - report_step = util_scanf_int_with_limits("Report step: ", PROMPT_LEN , 0 , last_report); - { - enkf_var_type var_type = enkf_config_node_get_var_type(config_node); - if ((var_type == DYNAMIC_STATE) || (var_type == DYNAMIC_RESULT)) { - plot_state = enkf_tui_util_scanf_state("Plot Forecast/Analyzed: [F|A]" , PROMPT_LEN , false); - enkf_tui_plot_histogram__(enkf_main , fs , user_key , plot_state, report_step); - } - else if (var_type == PARAMETER){ - plot_state = ANALYZED; - gen_kw_config_type * gen_kw_config = enkf_config_node_get_ref( config_node ); - stringlist_type * key_list = gen_kw_config_alloc_name_list( gen_kw_config ); - int ikw; - for (ikw = 0; ikw < stringlist_get_size( key_list ); ikw++) { - char * user_key = gen_kw_config_alloc_user_key( gen_kw_config , ikw ); - enkf_tui_plot_histogram__(enkf_main , fs , user_key , plot_state, report_step); - free( user_key ); - } - stringlist_free( key_list ); - } - else - util_abort("%s: can not plot this type \n",__func__); - } - - util_safe_free(key_index); - } - util_safe_free( user_key ); - } -} - - - - - -void enkf_tui_plot_ensemble(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - { - const bool prediction_mode = false; - const char * prompt = "What do you want to plot (KEY:INDEX)"; - const enkf_config_node_type * config_node; - char * user_key; - - util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); - user_key = util_alloc_stdin_line(); - if (user_key != NULL) { - state_enum plot_state = ANALYZED; /* Compiler shut up */ - char * key_index; - const int last_report = time_map_get_last_step( time_map ); - int iens1 , iens2 , step1 , step2; - - config_node = ensemble_config_user_get_node( ensemble_config , user_key , &key_index); - if (config_node == NULL) { - fprintf(stderr,"** Sorry - could not find any nodes with the key:%s \n",user_key); - util_safe_free(key_index); - return; - } - - enkf_tui_util_scanf_report_steps(last_report , PROMPT_LEN , &step1 , &step2); - enkf_tui_util_scanf_iens_range("Realizations members to plot(0 - %d)" , enkf_main_get_ensemble_size( enkf_main ) , PROMPT_LEN , &iens1 , &iens2); - - { - enkf_var_type var_type = enkf_config_node_get_var_type(config_node); - if ((var_type == DYNAMIC_STATE) || (var_type == DYNAMIC_RESULT)) - plot_state = enkf_tui_util_scanf_state("Plot Forecast/Analyzed/Both: [F|A|B]" , PROMPT_LEN , true); - else if (var_type == PARAMETER) - plot_state = ANALYZED; - else - util_abort("%s: can not plot this type \n",__func__); - } - enkf_tui_plot_ensemble__(enkf_main , - config_node , - user_key , - key_index , - step1 , - step2 , - prediction_mode , - iens1 , - iens2 , - plot_state); - util_safe_free(key_index); - } - util_safe_free( user_key ); - } -} - - - -static void * enkf_tui_plot_ensemble_mt( void * void_arg ) { - arg_pack_type * arg = arg_pack_safe_cast( void_arg ); - enkf_tui_plot_ensemble__(arg_pack_iget_ptr( arg , 0 ), - arg_pack_iget_ptr( arg , 1 ), - arg_pack_iget_const_ptr( arg , 2 ), - arg_pack_iget_ptr( arg , 3 ), - arg_pack_iget_int( arg , 4 ), - arg_pack_iget_int( arg , 5 ), - arg_pack_iget_bool( arg , 6 ), - arg_pack_iget_int( arg , 7 ), - arg_pack_iget_int( arg , 8 ), - arg_pack_iget_int( arg , 9 )); - return NULL; -} - - - -void enkf_tui_plot_all_summary__( enkf_main_type * enkf_main , int iens1 , int iens2 , int step1 , int step2 , bool prediction_mode) { - /* - This code is prepared for multithreaded creation of plots; - however the low level PLPlot library is not thread safe, we - therefor must limit the the number of threads in the thread pool - to 0 - i.e. serial excution. - */ - //thread_pool_type * tp = thread_pool_alloc( 0 , true ); - - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - stringlist_type * summary_keys = ensemble_config_alloc_keylist_from_impl_type(ensemble_config , SUMMARY); - arg_pack_type ** arg_list = util_calloc( stringlist_get_size( summary_keys ) , sizeof * arg_list ); - { - char * plot_path = util_alloc_filename( plot_config_get_path( plot_config ) , enkf_main_get_current_fs( enkf_main ) , NULL ); - util_make_path( plot_path ); - free( plot_path ); - } - - for (int ikey = 0; ikey < stringlist_get_size( summary_keys ); ikey++) { - const char * key = stringlist_iget( summary_keys , ikey); - - arg_list[ikey] = arg_pack_alloc( ); - { - arg_pack_type * arg = arg_list[ikey]; - - arg_pack_append_ptr( arg , enkf_main ); - arg_pack_append_ptr( arg , ensemble_config_get_node( ensemble_config , key )); - arg_pack_append_const_ptr( arg , key ); - arg_pack_append_ptr( arg , NULL ); - arg_pack_append_int( arg , step1 ); - arg_pack_append_int( arg , step2 ); - arg_pack_append_bool( arg , prediction_mode ); - arg_pack_append_int( arg , iens1 ); - arg_pack_append_int( arg , iens2 ); - arg_pack_append_int( arg , BOTH ); - - enkf_tui_plot_ensemble_mt( arg ); - //thread_pool_add_job( tp , enkf_tui_plot_ensemble_mt , arg ); - } - } - //thread_pool_join( tp ); - for (int ikey = 0; ikey < stringlist_get_size( summary_keys ); ikey++) - arg_pack_free( arg_list[ikey] ); - free( arg_list ); - stringlist_free( summary_keys ); - - //thread_pool_free( tp ); -} - - - - -void enkf_tui_plot_all_summary(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - int iens1 , iens2 , step1 , step2; - bool prediction_mode; - - { - bool default_used; - step1 = enkf_tui_util_scanf_int_with_default_return_to_menu( "Starting plotting at report step [Enter: default: 0] (M: return to menu)" , PROMPT_LEN , &default_used); - - if (default_used) - step1 = 0; - - if(step1 != -2) - step2 = enkf_tui_util_scanf_int_with_default_return_to_menu( "Stop plotting at report step [Enter: default: everything] (M: return to menu)" , PROMPT_LEN , &prediction_mode); - } - - if (step1 != -2 && step2 != -2){ - enkf_tui_util_scanf_iens_range("Realizations members to plot(0 - %d) [default: all]" , enkf_main_get_ensemble_size( enkf_main ) , PROMPT_LEN , &iens1 , &iens2); - enkf_tui_plot_all_summary__( enkf_main , iens1 , iens2 , step1 , step2 , prediction_mode ); - } -} - - - - - -void enkf_tui_plot_observation(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - - { - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - const char * prompt = "What do you want to plot (KEY:INDEX)"; - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - const obs_vector_type * obs_vector; - char * user_key; - char * index_key; - - util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); - user_key = util_alloc_stdin_line(); - if (user_key != NULL) { - obs_vector = enkf_obs_user_get_vector(enkf_obs , user_key , &index_key); - if (obs_vector != NULL) { - char * plot_file = enkf_tui_plot_alloc_plot_file(plot_config , enkf_main_get_current_fs( enkf_main ), user_key); - plot_type * plot = enkf_tui_plot_alloc(plot_config , "Member nr" , "Value" , user_key , plot_file); - const char * state_kw = obs_vector_get_state_kw( obs_vector ); - enkf_config_node_type * config_node = ensemble_config_get_node( ensemble_config , state_kw ); - int num_active = obs_vector_get_num_active( obs_vector ); - plot_dataset_type * obs_value = plot_alloc_new_dataset(plot , "observation" , PLOT_YLINE ); - plot_dataset_type * obs_quant_lower = plot_alloc_new_dataset(plot , "obs_minus_std" , PLOT_YLINE ); - plot_dataset_type * obs_quant_upper = plot_alloc_new_dataset(plot , "obs_plus_std" , PLOT_YLINE ); - plot_dataset_type * forecast_data = plot_alloc_new_dataset(plot , "forecast" , PLOT_XY ); - plot_dataset_type * analyzed_data = plot_alloc_new_dataset(plot , "analyzed" , PLOT_XY ); - int report_step; - - do { - if (num_active == 1) - report_step = obs_vector_get_active_report_step( obs_vector ); - else - report_step = enkf_tui_util_scanf_report_step( time_map_get_last_step( time_map ) , prompt , PROMPT_LEN); - } while (!obs_vector_iget_active(obs_vector , report_step)); - - { - enkf_node_type * enkf_node = enkf_node_alloc( config_node ); - msg_type * msg = msg_alloc("Loading realization: ",false); - double y , value , std ; - bool valid; - const int iens1 = 0; - const int iens2 = ens_size - 1; - int iens; - char cens[5]; - - obs_vector_user_get( obs_vector , index_key , report_step , &value , &std , &valid); - plot_set_bottom_padding( plot , 0.10); - plot_set_top_padding( plot , 0.10); - plot_set_left_padding( plot , 0.05); - plot_set_right_padding( plot , 0.05); - - plot_dataset_set_yline(obs_value , value); - plot_dataset_set_yline(obs_quant_lower , value - std); - plot_dataset_set_yline(obs_quant_upper , value + std); - - plot_dataset_set_line_color(obs_value , BLACK); - plot_dataset_set_line_color(obs_quant_lower , BLACK); - plot_dataset_set_line_color(obs_quant_upper , BLACK); - plot_dataset_set_line_width(obs_value , 2.0); - plot_dataset_set_line_style(obs_quant_lower , PLOT_LINESTYLE_LONG_DASH); - plot_dataset_set_line_style(obs_quant_upper , PLOT_LINESTYLE_LONG_DASH); - - - - plot_dataset_set_style( forecast_data , POINTS); - plot_dataset_set_style( analyzed_data , POINTS); - plot_dataset_set_point_color( forecast_data , BLUE ); - plot_dataset_set_point_color( analyzed_data , RED ); - - msg_show(msg); - { - double sum1 = 0; - double sum2 = 0; - int num = 0; - - for (iens = iens1; iens <= iens2; iens++) { - node_id_type node_id = {.report_step = report_step , - .iens = iens , - .state = ANALYZED }; - - sprintf(cens , "%03d" , iens); - msg_update(msg , cens); - - if (enkf_node_user_get( enkf_node , fs , index_key , node_id , &y)) - plot_dataset_append_point_xy( analyzed_data , iens , y); - - node_id.state = FORECAST; - if (enkf_node_user_get( enkf_node , fs , index_key , node_id , &y)) { - plot_dataset_append_point_xy( forecast_data , iens , y); - sum1 += y; - sum2 += y*y; - num += 1; - } - - } - } - msg_free(msg , true); - printf("\n"); - enkf_node_free(enkf_node); - } - enkf_tui_show_plot(plot , plot_config , plot_file); - free(plot_file); - } - util_safe_free( index_key ); - } - util_safe_free( user_key ); - } -} - - - - - - - - - - -void enkf_tui_plot_sensitivity(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - - - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - const int last_report = time_map_get_last_step( time_map ); - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - const enkf_config_node_type * config_node_x; - const enkf_config_node_type * config_node_y; - double * x = util_calloc( ens_size , sizeof * x ); - double * y = util_calloc( ens_size , sizeof * y ); - bool * valid = util_calloc( ens_size , sizeof * valid); - state_enum state_x = BOTH; - state_enum state_y = BOTH; - int report_step_x = 0; - int report_step_y; - int iens; - char * user_key_y; - char * user_key_x = NULL; - - - - /* Loading the parameter on the x-axis */ - { - char * key_index_x = NULL; - util_printf_prompt("Parameter on the x-axis (blank for iens): " , PROMPT_LEN , '=' , "=> "); - user_key_x = util_alloc_stdin_line(); - if (user_key_x == NULL) { - user_key_x = util_realloc_string_copy(user_key_x , "Ensemble member"); - config_node_x = NULL; - } else { - config_node_x = ensemble_config_user_get_node( ensemble_config , user_key_x , &key_index_x); - if (config_node_x == NULL) { - fprintf(stderr,"** Sorry - could not find any nodes with the key:%s \n",user_key_x); - util_safe_free(key_index_x); - free(x); - free(y); - free(valid); - free(user_key_x); - return; - } - } - - if (config_node_x == NULL) { - /* x-axis just contains iens. */ - for (iens = 0; iens < ens_size; iens++) { - x[iens] = iens; - valid[iens] = true; - } - } else { - enkf_node_type * node = enkf_node_alloc( config_node_x ); - for (iens = 0; iens < ens_size; iens++) { - node_id_type node_id = {.report_step = report_step_x , - .iens = iens , - .state = state_x }; - if (enkf_node_user_get( node , fs , key_index_x , node_id , &x[iens])) - valid[iens] = true; - else - valid[iens] = false; - } - enkf_node_free( node ); - } - util_safe_free(key_index_x); - } - - /* OK - all the x-data has been loaded. */ - - { - char * key_index_y; - util_printf_prompt("Result on the y-axis: " , PROMPT_LEN , '=' , "=> "); - user_key_y = util_alloc_stdin_line(); - report_step_y = util_scanf_int_with_limits("Report step: ", PROMPT_LEN , 0 , last_report); - - { - config_node_y = ensemble_config_user_get_node( ensemble_config , user_key_y , &key_index_y); - if (config_node_y == NULL) { - fprintf(stderr,"** Sorry - could not find any nodes with the key:%s \n",user_key_y); - util_safe_free(key_index_y); - free(x); - free(y); - free(valid); - free(user_key_y); - return; - } - } - { - enkf_node_type * node = enkf_node_alloc( config_node_y ); - - for (iens = 0; iens < ens_size; iens++) { - if (valid[iens]) { - node_id_type node_id = {.report_step = report_step_y , - .iens = iens , - .state = state_y }; - - if (enkf_node_user_get(node , fs , key_index_y , node_id , &y[iens])) - valid[iens] = true; - else - valid[iens] = false; - } - } - - enkf_node_free( node ); - } - util_safe_free(key_index_y); - } - /*****************************************************************/ - /* OK - now we have x[], y[] and valid[] - ready for plotting. */ - - { - int valid_count = 0; - char * basename = util_alloc_sprintf("%s-%s" , user_key_x , user_key_y); - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , enkf_main_get_current_fs( enkf_main ), basename ); - plot_type * plot = enkf_tui_plot_alloc( plot_config , user_key_x , user_key_y , "Sensitivity plot" , plot_file); - plot_dataset_type * data = plot_alloc_new_dataset( plot , NULL , PLOT_XY ); - - for (iens = 0; iens < ens_size; iens++) { - if (valid[iens]) { - plot_dataset_append_point_xy( data , x[iens] , y[iens]); - valid_count++; - } - } - - plot_dataset_set_style( data , POINTS); - plot_set_bottom_padding( plot , 0.05); - plot_set_top_padding( plot , 0.05); - plot_set_left_padding( plot , 0.05); - plot_set_right_padding( plot , 0.05); - - if (valid_count > 0) { - printf("Plot saved in: %s \n",plot_file); - enkf_tui_show_plot(plot , plot_config , plot_file); /* Frees the plot - logical ehhh. */ - } else { - printf("Ehh - no data to plot \n"); - plot_free( plot ); - } - free(basename); - free(plot_file); - } - - - util_safe_free(user_key_y); - util_safe_free(user_key_x); - free(x); - free(y); - free(valid); -} - - - -static void enkf_tui_toggle_logy(void * arg) { - arg_pack_type * arg_pack = arg_pack_safe_cast( arg ); - plot_config_type * plot_config = arg_pack_iget_ptr( arg_pack , 0 ); - menu_item_type * menu_item = arg_pack_iget_ptr( arg_pack , 1 ); - - plot_config_toggle_logy( plot_config ); - if (plot_config_get_logy( plot_config )) - menu_item_set_label(menu_item , "Use normal Y-axis"); - else - menu_item_set_label(menu_item , "Use logarithmic Y-axis"); -} - - - -void enkf_tui_plot_RFT_time(void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); - const enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( fs ); - { - const char * state_kw; - char * index_key = NULL; - char * user_key = NULL; - char * obs_key; - int report_step; - obs_vector_type * obs_vector; - const enkf_config_node_type * config_node; - int step1 , step2; - int iens1 , iens2; - state_enum plot_state; - - enkf_tui_plot_select_RFT(enkf_main , &obs_key , &report_step); - obs_vector = enkf_obs_get_vector( enkf_obs , obs_key ); - config_node = obs_vector_get_config_node( obs_vector ); - - /* Could be user input ... */ - step1 = 0; - step2 = time_map_get_last_step( time_map ); - iens1 = 0; - iens2 = enkf_main_get_ensemble_size( enkf_main ) - 1; - plot_state = BOTH; - state_kw = enkf_config_node_get_key( config_node ); - { - int block_nr,i,j,k; - const block_obs_type * block_obs = obs_vector_iget_node( obs_vector , report_step ); - for (block_nr = 0; block_nr < block_obs_get_size( block_obs ); block_nr++) { - block_obs_iget_ijk( block_obs , block_nr , &i , &j , &k); - index_key = util_realloc_sprintf( index_key , "%d,%d,%d" , i+1,j+1,k+1); - user_key = util_realloc_sprintf( user_key , "%s:%d,%d,%d" , state_kw , i+1,j+1,k+1); - enkf_tui_plot_ensemble__(enkf_main , config_node , user_key , index_key , step1 , step2 , false , iens1 , iens2 , plot_state); - } - } - free( obs_key ); - free( index_key ); - free( user_key ); - } -} - -/*****************************************************************/ -void enkf_tui_plot_reports( void * arg ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - ert_report_list_type * report_list = enkf_main_get_report_list( enkf_main ); - - ert_report_list_create( report_list , enkf_main_get_current_fs( enkf_main ) , true ); -} - - -/*****************************************************************/ - -void enkf_tui_plot_simple_menu(void * arg) { - - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu; - { - char * title = util_alloc_sprintf("Plot results [case:%s]" , enkf_main_get_current_fs( enkf_main )); - menu = menu_alloc(title , "Back" , "bB"); - free(title); - } - menu_add_item(menu , "Ensemble plot" , "eE" , enkf_tui_plot_ensemble , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of ALL summary variables" , "aA" , enkf_tui_plot_all_summary , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of GEN_KW parameter" , "g" , enkf_tui_plot_GEN_KW , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of ALL GEN_KW parameters" , "G" , enkf_tui_plot_all_GEN_KW , enkf_main , NULL); - menu_add_item(menu , "Observation plot" , "oO" , enkf_tui_plot_observation , enkf_main , NULL); - /* menu_add_separator( menu ); - menu_add_item(menu , "Plot RFT and simulated pressure vs. TVD" , "tT" , enkf_tui_plot_RFT_sim_all_TVD , enkf_main , NULL); - menu_add_item(menu , "Plot RFT and simulated pressure vs. MD" , "mM" , enkf_tui_plot_RFT_sim_all_MD , enkf_main , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Plot block observation (~RFT) versus depth" , "dD" , enkf_tui_plot_RFT_depth , enkf_main , NULL); - menu_add_item(menu , "Plot block observation (~RFT) versus time" , "iI" , enkf_tui_plot_RFT_time , enkf_main , NULL); - menu_add_item(menu , "Plot all block observations (~RFT) versus depth" , "rR" , enkf_tui_plot_all_RFT , enkf_main , NULL); - menu_add_separator( menu );*/ - menu_add_item(menu , "Sensitivity plot" , "sS" , enkf_tui_plot_sensitivity , enkf_main , NULL); - menu_add_item(menu , "Histogram" , "H" , enkf_tui_plot_histogram , enkf_main , NULL); - menu_add_separator(menu); - { - menu_item_type * menu_item; - arg_pack_type * arg_pack = arg_pack_alloc(); - menu_item = menu_add_item(menu , "" , "lL" , enkf_tui_toggle_logy , arg_pack , arg_pack_free__); - arg_pack_append_ptr( arg_pack , plot_config ); - arg_pack_append_ptr( arg_pack , menu_item ); - plot_config_toggle_logy( plot_config ); - enkf_tui_toggle_logy( arg_pack ); /* This sets the label */ - } - - /* menu_add_separator(menu); - { - menu_item_type * menu_item = menu_add_item( menu , "Create pdf reports" , "pP" , enkf_tui_plot_reports , enkf_main , NULL ); - ert_report_list_type * report_list = enkf_main_get_report_list( enkf_main ); - - if (ert_report_list_get_num( report_list ) == 0) - menu_item_disable( menu_item ); - - }*/ - menu_add_item(menu , "Help" , "h" , enkf_tui_help_menu_plot , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } -} - - -/*****************************************************************/ - -void enkf_tui_plot_menu(void * arg) { - - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - { - const char * plot_path = plot_config_get_path( plot_config ); - util_make_path( plot_path ); - } - - { - menu_type * menu; - { - char * title = util_alloc_sprintf("Plot results [case:%s]" , enkf_main_get_current_fs( enkf_main )); - menu = menu_alloc(title , "Back" , "bB"); - free(title); - } - menu_add_item(menu , "Ensemble plot" , "eE" , enkf_tui_plot_ensemble , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of ALL summary variables" , "aA" , enkf_tui_plot_all_summary , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of GEN_KW parameter" , "g" , enkf_tui_plot_GEN_KW , enkf_main , NULL); - menu_add_item(menu , "Ensemble plot of ALL GEN_KW parameters" , "G" , enkf_tui_plot_all_GEN_KW , enkf_main , NULL); - menu_add_item(menu , "Observation plot" , "oO" , enkf_tui_plot_observation , enkf_main , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Plot RFT and simulated pressure vs. TVD" , "tT" , enkf_tui_plot_RFT_sim_all_TVD , enkf_main , NULL); - menu_add_item(menu , "Plot RFT and simulated pressure vs. MD" , "mM" , enkf_tui_plot_RFT_sim_all_MD , enkf_main , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Plot block observation (~RFT) versus depth" , "dD" , enkf_tui_plot_RFT_depth , enkf_main , NULL); - menu_add_item(menu , "Plot block observation (~RFT) versus time" , "iI" , enkf_tui_plot_RFT_time , enkf_main , NULL); - menu_add_item(menu , "Plot all block observations (~RFT) versus depth" , "rR" , enkf_tui_plot_all_RFT , enkf_main , NULL); - menu_add_separator( menu ); - menu_add_item(menu , "Sensitivity plot" , "sS" , enkf_tui_plot_sensitivity , enkf_main , NULL); - menu_add_item(menu , "Histogram" , "H" , enkf_tui_plot_histogram , enkf_main , NULL); - menu_add_separator(menu); - { - menu_item_type * menu_item; - arg_pack_type * arg_pack = arg_pack_alloc(); - menu_item = menu_add_item(menu , "" , "lL" , enkf_tui_toggle_logy , arg_pack , arg_pack_free__); - arg_pack_append_ptr( arg_pack , plot_config ); - arg_pack_append_ptr( arg_pack , menu_item ); - plot_config_toggle_logy( plot_config ); - enkf_tui_toggle_logy( arg_pack ); /* This sets the label */ - } - - menu_add_separator(menu); - { - menu_item_type * menu_item = menu_add_item( menu , "Create pdf reports" , "pP" , enkf_tui_plot_reports , enkf_main , NULL ); - ert_report_list_type * report_list = enkf_main_get_report_list( enkf_main ); - - if (ert_report_list_get_num( report_list ) == 0) - menu_item_disable( menu_item ); - - } - menu_add_item(menu , "Help" , "h" , enkf_tui_help_menu_plot , enkf_main , NULL); - menu_run(menu); - menu_free(menu); - } -} diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.h b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.h deleted file mode 100644 index eafdb69555..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'enkf_tui_plot.h' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#ifndef __ENKF_TUI_PLOT_H__ -#define __ENKF_TUI_PLOT_H__ - - -#include -#include - -#include -#include - -void enkf_tui_plot_simple_menu(void * ); -void enkf_tui_plot_menu(void * ); -void enkf_tui_plot_PC( enkf_main_type * enkf_main , const char * plot_name , const pca_plot_data_type * plot_data); -void enkf_tui_plot_PC_list( enkf_main_type * enkf_main , const vector_type * PC_list ); -void enkf_tui_plot_reports(void *); -void enkf_tui_plot_all_summary__( enkf_main_type * enkf_main , int iens1 , int iens2 , int step1 , int step2 , bool prediction_mode); - -void enkf_tui_plot_ensemble__(enkf_main_type * enkf_main , - const enkf_config_node_type * config_node , - const char * user_key , - const char * key_index , - int step1 , int step2 , - bool prediction_mode , - int iens1 , int iens2 , - state_enum plot_state); -#endif diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_rft.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_rft.c deleted file mode 100644 index 87eada994b..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_rft.c +++ /dev/null @@ -1,667 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'enkf_tui_plot_rft.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - - -/* - This file contains functions to plot RFT. These are both grid - independant methods which load a true well trajectory from file, and - and then lookup pressure nodes afterwards, and also a simpler - implementation which will plot a enkf block_obs (i.e. in 99% of - cases and RFT) for a fixed grid. - - The grid independent functions are at the top of the file. -*/ - - -int enkf_tui_plot_read_rft_obs(enkf_main_type * enkf_main, - char * wellname, - double_vector_type * UTM_x, - double_vector_type * UTM_y, - double_vector_type * MD, - double_vector_type * TVD_z, - double_vector_type * RFT_obs){ - const model_config_type * model_config = enkf_main_get_model_config( enkf_main ); - const char * pathname = model_config_get_rftpath( model_config ); - path_fmt_type * pathname_fmt = path_fmt_alloc_directory_fmt(pathname); - strcat(wellname, ".txt"); /* This will append .txt to the wellname*/ - char * pathandfilename = path_fmt_alloc_file(pathname_fmt, false, wellname); - FILE * stream = util_fopen( pathandfilename , "r" ); - int lines = util_count_content_file_lines( stream ); - rewind(stream); - bool at_eof; - int tokens; - - for ( int i = 0; i < lines; i++ ) { - char ** token_list; - char * line = util_fscanf_alloc_line( stream , &at_eof ); - util_split_string(line , " \t" , &tokens , &token_list); - if( tokens == 5 ){ - double utm_x, utm_y, md, tvd_z, rft_obs; - if ( util_sscanf_double( token_list[0] , &utm_x ) && - util_sscanf_double( token_list[1] , &utm_y ) && - util_sscanf_double( token_list[2] , &md ) && - util_sscanf_double( token_list[3] , &tvd_z ) && - util_sscanf_double( token_list[4] , &rft_obs )){ - - double_vector_iset( UTM_x , i, utm_x ); - double_vector_iset( UTM_y , i, utm_y ); - double_vector_iset( MD , i, md ); - double_vector_iset( TVD_z , i, tvd_z); - double_vector_iset( RFT_obs, i, rft_obs); - } - else{ - util_abort("%s: RFT file has to be on the format UTM_X; UTM_Y; MD; TVD_Z; RFT \n",__func__ , pathandfilename); - } - } - else - util_abort("%s: RFT file has to be on the format UTM_X; UTM_Y; MD; TVD_Z; RFT \n",__func__ , pathandfilename); - - free( line ); - util_free_stringlist(token_list, tokens); - } - - free( pathandfilename ); - path_fmt_free( pathname_fmt ); - - wellname=strtok(wellname,".");/* This will remove the appended .txt from the wellname*/ - fclose(stream); - return lines; -} - - - -void enkf_tui_plot_RFTS__(enkf_main_type * enkf_main , - const char * wellname , - double_vector_type * MD, - double_vector_type * RFT_obs, - double_vector_type * RFT_refcase, - bool_vector_type * refcase_has_data, - vector_type * pressure_container, - int_vector_type * active, - bool rft_file_exists, - vector_type * has_data_container, - bool isMD) { - - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - bool show_plot = false; - char * plot_file = enkf_tui_plot_alloc_plot_file( plot_config , enkf_main_get_current_fs(enkf_main), wellname ); - plot_type * plot ; - if(isMD) - plot = enkf_tui_plot_alloc(plot_config , "RFT pressure", "MD" , wellname, plot_file); - else - plot = enkf_tui_plot_alloc(plot_config , "RFT pressure", "TVD" , wellname, plot_file); - - { - show_plot = true; - } - /* - Start with plotting the simulated rfts - */ - if(rft_file_exists){ - for (int iens=0; iens < ens_size; iens++){ - const double_vector_type * simulated_pressure = vector_iget_const(pressure_container, iens); - const bool_vector_type * has_data = vector_iget_const(has_data_container, iens); - for (int nobs = 0; nobs < double_vector_size(RFT_obs); nobs++){ - if (bool_vector_iget(has_data, nobs)){ - plot_dataset_type * iplot = plot_alloc_new_dataset( plot , NULL , PLOT_XY ); - double rft_sim_numeric = double_vector_iget(simulated_pressure , nobs); - double md_numeric = double_vector_iget(MD , nobs); - plot_dataset_append_point_xy( iplot, rft_sim_numeric , md_numeric); - plot_dataset_set_style( iplot , POINTS ); - plot_dataset_set_point_color( iplot , (iens % 13)+1); /*Can choose between 16 colors, but we dont want 0 which is white or reserved 14 and 15*/ - } - } - } - } - /* - Now continue with refcase and observations. - */ - plot_dataset_type * rft_obs_value = plot_alloc_new_dataset( plot , "observation" , PLOT_XY ); - plot_dataset_type * rft_refcase_value = plot_alloc_new_dataset( plot , "refcase" , PLOT_XY ); - - plot_dataset_set_style( rft_obs_value , POINTS ); - plot_dataset_set_style( rft_refcase_value , POINTS ); - - plot_dataset_set_point_color( rft_obs_value , 15); - plot_dataset_set_point_color( rft_refcase_value , 14); - - plot_dataset_set_symbol_type( rft_obs_value , 5); - plot_dataset_set_symbol_type( rft_refcase_value , 5); - - - for (int nobs = 0; nobs < double_vector_size(RFT_obs); nobs++){ - double rft_obs_numeric = double_vector_iget(RFT_obs , nobs); - double md_numeric = double_vector_iget(MD , nobs); - plot_dataset_append_point_xy( rft_obs_value, rft_obs_numeric , md_numeric); - if( bool_vector_iget(refcase_has_data, nobs)){ - double rft_refcase_numeric = double_vector_iget(RFT_refcase , nobs); - plot_dataset_append_point_xy( rft_refcase_value, rft_refcase_numeric , md_numeric); - } - } - - plot_invert_y_axis(plot); - plot_set_bottom_padding( plot , 0.05); - plot_set_top_padding( plot , 0.05); - plot_set_left_padding( plot , 0.05); - plot_set_right_padding( plot , 0.05); - - if (show_plot) { - enkf_tui_show_plot(plot , plot_config , plot_file); /* Frees the plot - logical ehhh. */ - } else { - printf("No data to plot \n"); - plot_free(plot); - } - - free(plot_file); -} - - - -void enkf_tui_plot_RFT_simIn(enkf_main_type * enkf_main, path_fmt_type * runpathformat, const path_fmt_type * caseformat, char * wellname , time_t recording_time, bool isMD){ - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - const plot_config_type * plot_config = enkf_main_get_plot_config( enkf_main ); - bool plot_refcase = plot_config_get_plot_refcase( plot_config ); - ecl_config_type * ecl_config = enkf_main_get_ecl_config(enkf_main); - ecl_refcase_list_type * refcase_list = ecl_config_get_refcase_list( ecl_config ); - const ecl_sum_type * refcase = ecl_refcase_list_get_default( refcase_list ); - if (refcase) { - - /* - Start by reading RFT measurment - */ - double_vector_type * UTM_x = double_vector_alloc( 0 , 0); - double_vector_type * UTM_y = double_vector_alloc( 0 , 0); - double_vector_type * MD = double_vector_alloc( 0 , 0); - double_vector_type * TVD_z = double_vector_alloc( 0 , 0); - double_vector_type * RFT_obs = double_vector_alloc( 0 , 0); - int lines = enkf_tui_plot_read_rft_obs(enkf_main, wellname, UTM_x, UTM_y, MD, TVD_z, RFT_obs); - /* - Find ijk-list - */ - char * caseending = path_fmt_alloc_path(caseformat, false, 0); //Use the grid in ensmember 0 - char * casename = path_fmt_alloc_file(runpathformat , false, 0, caseending); - ecl_grid_type * grid = ecl_grid_load_case( casename ); - int_vector_type * i_values = int_vector_alloc( lines , 0 ); - int_vector_type * j_values = int_vector_alloc( lines , 0 ); - int_vector_type * k_values = int_vector_alloc( lines , 0 ); - int_vector_type * active = int_vector_alloc( lines , 0 ); - for (int nobs =0; nobs -1){ - const ecl_rft_cell_type * cell = ecl_rft_node_lookup_ijk( rft_refcase_node , - int_vector_iget(i_values,nobs) , - int_vector_iget(j_values,nobs) , - int_vector_iget(k_values,nobs) ); - - if (cell) { - double pressure_value = ecl_rft_cell_get_pressure( cell ); - double_vector_append(RFT_refcase, pressure_value); - bool_vector_append(refcase_has_data, true); - } else { - double_vector_append(RFT_refcase, 0.0); - bool_vector_append(refcase_has_data, false); - } - } - else { - double_vector_append(RFT_refcase, 0.0); - bool_vector_append(refcase_has_data, false); - } - } - } - ecl_rft_file_free(rft_refcase_file); - /* - Get the simulated RFTs - */ - vector_type * pressure_container = vector_alloc_new(); - vector_type * has_data_container = vector_alloc_new(); - char * caseending1 = path_fmt_alloc_path(caseformat, false, 0); - char * casename1 = path_fmt_alloc_file(runpathformat , false, 0, caseending1); - const char * case_file_name1 = ecl_rft_file_alloc_case_filename(casename1 ); - bool eclipse_rft_exists = false; - if (case_file_name1 == NULL){ - util_abort("%s: Cannot find eclipse RFT file",__func__ , case_file_name1); - } - else{ - eclipse_rft_exists = true; - for (int iens = 0; iens -1){ - const ecl_rft_cell_type * cell = ecl_rft_node_lookup_ijk( rftnode , - int_vector_iget(i_values,nobs), - int_vector_iget(j_values,nobs), - int_vector_iget(k_values,nobs) ); //lookup cell - if (cell) { - double pressure_value = ecl_rft_cell_get_pressure( cell ); - double_vector_iset(simulated_pressures, nobs , pressure_value); - bool_vector_iset(has_data, nobs, true); - } else { - double_vector_iset(simulated_pressures,nobs ,0.0); - bool_vector_iset(has_data, nobs, false); - } - - } - } - } - ecl_rft_file_free(rftfile); - vector_append_owned_ref( pressure_container , simulated_pressures , double_vector_free__ ); - vector_append_owned_ref( has_data_container , has_data , bool_vector_free__ ); - } - } - /* - Do the actual plotting - */ - if(isMD) - enkf_tui_plot_RFTS__( enkf_main , wellname , MD, RFT_obs, RFT_refcase, refcase_has_data, pressure_container, active, eclipse_rft_exists, has_data_container, isMD); - else - enkf_tui_plot_RFTS__( enkf_main , wellname , TVD_z, RFT_obs, RFT_refcase, refcase_has_data, pressure_container, active, eclipse_rft_exists, has_data_container, isMD); - double_vector_free( UTM_x ); - double_vector_free( UTM_y ); - double_vector_free( MD ); - double_vector_free( TVD_z ); - double_vector_free( RFT_obs ); - double_vector_free( RFT_refcase ); - bool_vector_free( refcase_has_data ); - vector_free( pressure_container ); - vector_free( has_data_container ); - free( caseending ); - free( caseending1 ); - free( casename ); - free( casename1 ); - int_vector_free( i_values ); - int_vector_free( j_values ); - int_vector_free( k_values ); - int_vector_free( active ); - } -} - - -int enkf_tui_plot_read_rft_config(const char * rft_config_file, stringlist_type * wellnames, time_t_vector_type * dates){ - int lines = 0; - int day, month, year; - if ( rft_config_file != NULL ){ - printf( "Reading RFT wellnames and dates \n" ); - FILE * stream = util_fopen( rft_config_file , "r" ); - if(stream == NULL) - util_abort("%s: RFT config file is NULL \n",__func__ , rft_config_file); - - lines = util_count_content_file_lines( stream ); - rewind(stream); - bool at_eof; - char ** token_list; - int tokens; - for ( int i = 0; i < lines; i++ ) { - char * line = util_fscanf_alloc_line( stream , &at_eof ); - util_split_string(line , " \t" , &tokens , &token_list); - char * name = token_list[0]; - char * ownname = util_alloc_string_copy(name); - if( tokens == 4 ){ - stringlist_append_owned_ref( wellnames , ownname ); - if ( util_sscanf_int( token_list[1] , &day ) && util_sscanf_int( token_list[2] , &month ) && util_sscanf_int( token_list[3] , &year ) ){ - time_t recording_time = util_make_date(day , month , year); - time_t_vector_append(dates, recording_time); - } - else{ - util_abort("%s: RFT config file has to be on the format NAME DAY MONTH YEAR \n",__func__ , rft_config_file); - } - } - else{ - util_abort("%s: RFT config file has to be on the format NAME DAY MONTH YEAR \n",__func__ , rft_config_file); - } - free( line ); - free( name ); - } - fclose(stream); - } - else{ - printf("RFT config file is not specified."); - } - return lines; -} - -void enkf_tui_plot_RFT_sim_all_MD( void * arg) { - enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); - const model_config_type * model_config = enkf_main_get_model_config( enkf_main ); - const char * rft_config_file = enkf_main_get_rft_config_file( enkf_main ); - stringlist_type * wellnames = stringlist_alloc_new(); - time_t_vector_type * dates = time_t_vector_alloc(0,0); - int lines = enkf_tui_plot_read_rft_config(rft_config_file, wellnames, dates); - path_fmt_type * runpathformat = model_config_get_runpath_fmt( model_config ); - const path_fmt_type * caseformat = ecl_config_get_eclbase_fmt(enkf_main_get_ecl_config(enkf_main)); - for (int i = 0; i - for more details. -*/ - -#ifndef __ENKF_TUI_PLOT_RFT_H__ -#define __ENKF_TUI_PLOT_RFT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - - void enkf_tui_plot_RFT_sim_all_MD( void * arg); - void enkf_tui_plot_RFT_sim_all_TVD( void * arg); - void enkf_tui_plot_select_RFT(const enkf_main_type * enkf_main , char ** _obs_key , int * _report_step); - void enkf_tui_plot_RFT_depth(void * arg); - void enkf_tui_plot_all_RFT( void * arg); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.c deleted file mode 100644 index ffd738621c..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - Copyright (C) 2012 Statoil ASA, Norway. - - The file 'enkf_tui_plot_util.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - - - -char * enkf_tui_plot_alloc_plot_file(const plot_config_type * plot_config , const char * case_name , const char * base_name) { - char * base = util_alloc_string_copy( base_name ); - char * path = util_alloc_filename(plot_config_get_path( plot_config ) , case_name , NULL); /* It is really a path - but what the fuck. */ - char * plot_file; - - util_string_tr( base , '/' , '-'); /* Replace '/' -> '-' in the key name. */ - plot_file = util_alloc_filename(path , base , plot_config_get_image_type( plot_config )); - util_make_path( path ); /* Ensure that the path where the plots are stored exists. */ - - free(path); - free(base); - return plot_file; -} - - -void enkf_tui_show_plot(plot_type * plot , const plot_config_type * plot_config , const char * file) { - plot_data(plot); - plot_free(plot); - if (util_file_exists( file )) { - const char * viewer = plot_config_get_viewer( plot_config ); - printf("Plot saved in: %s \n",file); - if (viewer != NULL) - util_fork_exec(viewer , 1 , (const char *[1]) { file } , false , NULL , NULL , NULL , NULL , NULL); - } - /* - else: the file does not exist - that might be OK? - */ -} - - -plot_type * enkf_tui_plot_alloc(const plot_config_type * plot_config , const char * x_label , const char * y_label , const char * title , const char * file) { - - arg_pack_type * arg_pack = arg_pack_alloc(); - plot_type * plot; - - if (util_string_equal( plot_config_get_driver( plot_config ) , "PLPLOT")) { - arg_pack_append_const_ptr( arg_pack , file ); - arg_pack_append_const_ptr( arg_pack , plot_config_get_image_type( plot_config )); - } else if (util_string_equal( plot_config_get_driver( plot_config ) , "TEXT")) { - - char * plot_path, *basename; - char * path; - util_alloc_file_components( file , &plot_path , &basename , NULL); - - path = util_alloc_filename( plot_path , basename , NULL); - arg_pack_append_owned_ptr( arg_pack , path , free); - - free( plot_path ); - free( basename ); - } else - util_abort("%s: unrecognized driver type: %s \n",__func__ , plot_config_get_driver( plot_config )); - - plot = plot_alloc(plot_config_get_driver( plot_config ) , arg_pack , false , plot_config_get_logy( plot_config )); - - plot_set_window_size(plot , plot_config_get_width( plot_config ) , plot_config_get_height( plot_config )); - plot_set_labels(plot, x_label , y_label , title); - arg_pack_free( arg_pack ); - - return plot; -} diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.h b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.h deleted file mode 100644 index 9c8b397d24..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_plot_util.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2012 Statoil ASA, Norway. - - The file 'enkf_tui_plot_util.h' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - - -#ifndef __ENKF_TUI_PLOT_UTIL_H__ -#define __ENKF_TUI_PLOT_UTIL_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include - - char * enkf_tui_plot_alloc_plot_file(const plot_config_type * plot_config , const char * case_name , const char * base_name); - void enkf_tui_show_plot(plot_type * plot , const plot_config_type * plot_config , const char * file); - plot_type * enkf_tui_plot_alloc(const plot_config_type * plot_config , const char * x_label , const char * y_label , const char * title , const char * file); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_ranking.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_ranking.c index 1c9f850210..295f552fcb 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_ranking.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_ranking.c @@ -37,7 +37,7 @@ static void enkf_tui_ranking_make_misfit_ensemble( void * arg) { arg_pack_type * arg_pack = arg_pack_safe_cast( arg ); enkf_main_type * enkf_main = arg_pack_iget_ptr( arg_pack , 0 ); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); const int history_length = enkf_main_get_history_length( enkf_main ); @@ -56,7 +56,7 @@ static void enkf_tui_ranking_make_misfit_ensemble( void * arg) { static void enkf_tui_ranking_create_obs( void * arg ) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); - enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); + enkf_fs_type * fs = enkf_main_tui_get_fs( enkf_main ); misfit_ensemble_type * misfit_ensemble = enkf_fs_get_misfit_ensemble( fs ); if (!misfit_ensemble_initialized( misfit_ensemble )) { @@ -111,7 +111,7 @@ static void enkf_tui_ranking_create_obs( void * arg ) { static void enkf_tui_ranking_create_data__( void * arg , bool sort_increasing) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); ranking_table_type * ranking_table = enkf_main_get_ranking_table( enkf_main ); - enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); + enkf_fs_type * fs = enkf_main_tui_get_fs( enkf_main ); ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config( enkf_main ); time_map_type * time_map = enkf_fs_get_time_map( fs ); const int prompt_len = 60; @@ -208,7 +208,7 @@ void enkf_tui_ranking_menu(void * arg) { menu_add_item(menu , "New data based ranking (Sort: decreasing)" , "dD" , enkf_tui_ranking_create_data_decreasing , enkf_main , NULL); menu_add_item(menu , "Show ranking" , "sS" , enkf_tui_ranking_display , enkf_main , NULL); { - enkf_fs_type * fs = enkf_main_get_fs( enkf_main ); + enkf_fs_type * fs = enkf_main_tui_get_fs( enkf_main ); misfit_ensemble_type * misfit_ensemble = enkf_fs_get_misfit_ensemble( fs ); if (!misfit_ensemble_initialized( misfit_ensemble )) menu_item_disable( obs_item ); diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_run.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_run.c index 7c38b055fe..4e640b9b3b 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_run.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_run.c @@ -1,19 +1,19 @@ /* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'enkf_tui_run.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. + Copyright (C) 2011 Statoil ASA, Norway. + + The file 'enkf_tui_run.c' is part of ERT - Ensemble based Reservoir Tool. + + ERT is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ERT is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. + + See the GNU General Public License at + for more details. */ #include @@ -31,7 +31,6 @@ #include #include -#include #include #include #include @@ -43,67 +42,7 @@ #include #include -/* - Set runpath runtime - disabled. - -static void enkf_tui_run_set_runpath(void * arg) { - arg_pack_type * arg_pack = arg_pack_safe_cast( arg ); - model_config_type * model_config = arg_pack_iget_ptr(arg_pack , 0); - menu_item_type * item = arg_pack_iget_ptr(arg_pack , 1); - char runpath_fmt[256]; - printf("Give runpath format ==> "); - scanf("%s" , runpath_fmt); - model_config_set_runpath_fmt(model_config , runpath_fmt); - { - char * menu_label = util_alloc_sprintf("Set new value for RUNPATH:%s" , runpath_fmt); - menu_item_set_label( item , menu_label ); - free(menu_label); - } -} -*/ - - - -void enkf_tui_run_start(void * enkf_main) { - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - bool_vector_type * iactive = bool_vector_alloc(ens_size , true); - - enkf_main_run_assimilation(enkf_main , iactive , 0 , 0 , ANALYZED); - - bool_vector_free(iactive); -} - - -void enkf_tui_run_restart__(void * enkf_main) { - const int ens_size = enkf_main_get_ensemble_size( enkf_main ); - const int last_report = enkf_main_get_history_length( enkf_main ); - int start_report; - char * start_report_as_char; - bool wronginput = false; - state_enum state; - bool_vector_type * iactive = bool_vector_alloc(0,true); - bool_vector_iset( iactive , ens_size - 1 , true ); - - start_report_as_char = util_scanf_int_with_limits_return_char("Report step",PROMPT_LEN , 0 , last_report); - if(strlen(start_report_as_char) != 0){ - util_sscanf_int(start_report_as_char , &start_report); - } - else - wronginput = true; - - if(!wronginput){ - state = enkf_tui_util_scanf_state("Analyzed/forecast" , PROMPT_LEN , false); - if(state == UNDEFINED) - wronginput = true; - } - - if(!wronginput) - enkf_main_run_assimilation(enkf_main , iactive , start_report , start_report , state); - - bool_vector_free(iactive); - free(start_report_as_char); -} @@ -111,7 +50,8 @@ void enkf_tui_run_smoother(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast( arg ); int ens_size = enkf_main_get_ensemble_size( enkf_main ); bool_vector_type * iactive = bool_vector_alloc( ens_size , true ); - enkf_main_run_smoother(enkf_main , "AUTO-SMOOTHER" , iactive , 0 , true ); + enkf_fs_type * source_fs = enkf_main_tui_get_fs( enkf_main ); + enkf_main_run_smoother(enkf_main , source_fs , "AUTO-SMOOTHER" , iactive , 0 , true ); bool_vector_free( iactive ); } @@ -126,7 +66,7 @@ void enkf_tui_run_iterated_ES(void * arg) { } -/** +/** Experiments will always start with the parameters at time == 0; if you want to simulate with updated (posterior) parameters, you ensure that by initializing from a report_step > 0 from an @@ -143,7 +83,7 @@ void enkf_tui_run_exp(void * enkf_main) { char * prompt = util_alloc_sprintf("Which realizations to simulate (Ex: 1,3-5) [M to return to menu] : " , ens_size); char * select_string; - + util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); select_string = util_alloc_stdin_line(); enkf_tui_util_sscanf_active_list( iactive , select_string , ens_size); @@ -153,7 +93,7 @@ void enkf_tui_run_exp(void * enkf_main) { } if (bool_vector_count_equal(iactive , true)) enkf_main_run_exp(enkf_main , iactive , true ); - + bool_vector_free(iactive); } @@ -171,7 +111,7 @@ void enkf_tui_run_create_runpath__(void * __enkf_main) { util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); select_string = util_alloc_stdin_line(); enkf_tui_util_sscanf_active_list( iactive , select_string , ens_size ); - + util_safe_free( select_string ); free( prompt ); } @@ -192,7 +132,7 @@ void enkf_tui_run_manual_load__( void * arg ) { const int ens_size = enkf_main_get_ensemble_size( enkf_main ); bool_vector_type * iactive = bool_vector_alloc( 0 , false ); int iter = 0; - + { char * prompt = util_alloc_sprintf("Which realizations to load (Ex: 1,3-5) [M to return to menu] : [ensemble size:%d] : " , ens_size); char * select_string; @@ -201,7 +141,7 @@ void enkf_tui_run_manual_load__( void * arg ) { enkf_tui_util_sscanf_active_list( iactive , select_string , ens_size ); util_safe_free( select_string ); - + free( prompt ); } @@ -214,17 +154,17 @@ void enkf_tui_run_manual_load__( void * arg ) { util_printf_prompt(prompt , PROMPT_LEN , '=' , "=> "); input = util_alloc_stdin_line(); - if (input == NULL) + if (input == NULL) return; - OK = util_sscanf_int( input , &iter ); + OK = util_sscanf_int( input , &iter ); free( input ); if (!OK) return; } } - + if (bool_vector_count_equal( iactive , true )) { stringlist_type ** realizations_msg_list = util_calloc( ens_size , sizeof * realizations_msg_list ); @@ -234,7 +174,7 @@ void enkf_tui_run_manual_load__( void * arg ) { } enkf_main_load_from_forward_model(enkf_main, iter , iactive, realizations_msg_list); - + for (iens = 0; iens < ens_size; ++iens) { stringlist_type * msg_list = realizations_msg_list[iens]; if (bool_vector_iget(iactive, iens)) { @@ -269,34 +209,19 @@ void enkf_tui_run_menu(void * arg) { free(title); } menu_add_item(menu , "Ensemble run: history" , "xX" , enkf_tui_run_exp , enkf_main , NULL); - menu_add_separator( menu ); { - const ecl_config_type * ecl_config = enkf_main_get_ecl_config( enkf_main ); const analysis_config_type * analysis_config = enkf_main_get_analysis_config(enkf_main); const enkf_obs_type * enkf_obs = enkf_main_get_obs( enkf_main ); - - menu_item_type * enkf_item = menu_add_item(menu , "Start EnKF run from beginning" , "sS" , enkf_tui_run_start , enkf_main , NULL); - menu_item_type * restart_enkf_item = menu_add_item(menu , "Restart EnKF run from arbitrary state" , "rR" , enkf_tui_run_restart__ , enkf_main , NULL); + menu_item_type * ES_item = menu_add_item(menu , "Integrated smoother update" , "iI" , enkf_tui_run_smoother , enkf_main , NULL); menu_item_type * it_ES_item = menu_add_item(menu , "Iterated smoother [RML-EnKF]" , "tT" , enkf_tui_run_iterated_ES , enkf_main , NULL); - - if (!ecl_config_has_schedule( ecl_config )) { - menu_item_disable( enkf_item ); - menu_item_disable( restart_enkf_item ); - } - - if (!ecl_config_has_init_section( ecl_config )) - menu_item_disable( enkf_item ); if (!analysis_config_get_module_option(analysis_config , ANALYSIS_ITERABLE)) { menu_item_disable( it_ES_item ); - } else { - menu_item_disable( enkf_item ); - menu_item_disable( restart_enkf_item ); + } else menu_item_disable( ES_item ); - } - + if (!enkf_obs_have_obs( enkf_obs )) { menu_item_disable( it_ES_item ); menu_item_disable( ES_item ); @@ -308,27 +233,11 @@ void enkf_tui_run_menu(void * arg) { menu_add_separator(menu); { menu_item_type * analysis_item = menu_add_item(menu , "Analysis menu" , "aA" , enkf_tui_analysis_menu , enkf_main , NULL); - - if (!enkf_main_have_obs( enkf_main )) + + if (!enkf_main_have_obs( enkf_main )) menu_item_disable( analysis_item ); } - /* - Option to set runpath runtime - currently dismantled. - - menu_add_separator(menu); - { - model_config_type * model_config = enkf_main_get_model_config( enkf_main ); - path_fmt_type * runpath_fmt = model_config_get_runpath_fmt( model_config ); - arg_pack_type * arg_pack = arg_pack_alloc(); - char * runpath_label = util_alloc_sprintf("Set new value for RUNPATH:%s" , path_fmt_get_fmt ( runpath_fmt )); - - arg_pack_append_ptr(arg_pack , model_config); - arg_pack_append_ptr(arg_pack , menu_add_item(menu , runpath_label , "dD" , enkf_tui_run_set_runpath , arg_pack , arg_pack_free__)); - - free(runpath_label); - } - */ - menu_add_item(menu , "Help" , "hH" , enkf_tui_help_menu_run , enkf_main , NULL); + menu_add_item(menu , "Help" , "hH" , enkf_tui_help_menu_run , enkf_main , NULL); menu_run(menu); menu_free(menu); } diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_simple.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_simple.c index 1f5b3cc333..5e8fd2f5c7 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_simple.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_simple.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -38,7 +37,6 @@ #include #include #include -#include #include #include @@ -47,31 +45,17 @@ void enkf_tui_simple_menu(void * arg) { enkf_main_type * enkf_main = enkf_main_safe_cast(arg); menu_type * menu = menu_alloc("Simple menu" , "Quit" , "qQ"); menu_add_item(menu , "Sensitivity run: No data conditioning" , "sS" , enkf_tui_run_exp , enkf_main , NULL); - const ecl_config_type * ecl_config = enkf_main_get_ecl_config( enkf_main ); const model_config_type * model_config = enkf_main_get_model_config( enkf_main ); - menu_item_type * enkf_item = menu_add_item(menu , "Assimilation run: EnKF updates" , "eE" , enkf_tui_run_start , enkf_main , NULL); menu_item_type * ES_item = menu_add_item(menu , "Assimilation run: Smoother update" , "aA" , enkf_tui_run_smoother , enkf_main , NULL); menu_item_type * it_ES_item = menu_add_item(menu , "Assimilation run: Iterated smoother [RML-EnKF]" , "iI" , enkf_tui_run_iterated_ES , enkf_main , NULL); - if (!ecl_config_has_schedule( ecl_config )) { - menu_item_disable( enkf_item ); - } + if (!model_config_has_history( model_config )) { menu_item_disable( it_ES_item ); menu_item_disable( ES_item ); } menu_add_separator( menu ); - menu_add_item(menu , "Plot results" , "pP" , enkf_tui_plot_simple_menu , enkf_main , NULL); - { - menu_item_type * menu_item = menu_add_item( menu , "Create pdf reports" , "rR" , enkf_tui_plot_reports , enkf_main , NULL ); - ert_report_list_type * report_list = enkf_main_get_report_list( enkf_main ); - - if (ert_report_list_get_num( report_list ) == 0) - menu_item_disable( menu_item ); - - } - menu_add_separator(menu); menu_add_item(menu , "Help" , "hH" , enkf_tui_help_menu_simple , enkf_main , NULL); - menu_add_item(menu , "Advanced menu" , "dD" , enkf_tui_main_menu , enkf_main , NULL); + menu_add_item(menu , "Advanced menu" , "dD" , enkf_tui_main_menu , enkf_main , NULL); menu_run(menu); menu_free(menu); diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_table.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_table.c index e25ecd5bdf..4d273545c8 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_table.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_table.c @@ -37,7 +37,6 @@ #include #include -#include #include @@ -46,7 +45,7 @@ static void enkf_tui_table__(enkf_main_type * enkf_main , bool gen_kw_table , bool ens_plot) { const ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config(enkf_main); - enkf_fs_type * fs = enkf_main_get_fs(enkf_main); + enkf_fs_type * fs = enkf_main_tui_get_fs(enkf_main); const int ens_size = enkf_main_get_ensemble_size( enkf_main ); const int last_report = enkf_main_get_history_length( enkf_main ); int iens1, iens2, step1 , step2; diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_workflow.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_workflow.c index 16718f59a7..f4a5a96576 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_workflow.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/enkf_tui_workflow.c @@ -32,7 +32,6 @@ #include #include -#include #include #include #include diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/ert_tui_jobs.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/ert_tui_jobs.c deleted file mode 100644 index e9251d81af..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/ert_tui_jobs.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'ert_tui_jobs.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include - -#include -#include -#include -#include - -#include - -void enkf_tui_plot_all_summary_JOB(void * self , const stringlist_type * args ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( self ); - int iens1 , iens2 , step1 , step2; - bool prediction_mode; - iens1 = 0; - iens2 = enkf_main_get_ensemble_size( enkf_main ); - step1 = 0; - step2 = 0; - prediction_mode = true; - enkf_tui_plot_all_summary__( enkf_main , iens1 , iens2 , step1 , step2 , prediction_mode ); -} - - - -void enkf_tui_plot_JOB(void * self , const stringlist_type * args ) { - enkf_main_type * enkf_main = enkf_main_safe_cast( self ); - enkf_fs_type * enkf_fs = enkf_main_get_fs( enkf_main ); - time_map_type * time_map = enkf_fs_get_time_map( enkf_fs ); - ensemble_config_type * ensemble_config = enkf_main_get_ensemble_config( enkf_main ); - const int step2 = time_map_get_last_step( time_map ); - const int step1 = 0; - int i; - - for (i=0; i < stringlist_get_size( args ); i++) { - const char * user_key = stringlist_iget( args , i ); - char * key_index; - const enkf_config_node_type * config_node = ensemble_config_user_get_node( ensemble_config , user_key , &key_index); - if (config_node != NULL) - enkf_tui_plot_ensemble__(enkf_main , config_node , user_key , key_index , step1 , step2 , false , 0 , enkf_main_get_ensemble_size( enkf_main ) , BOTH ); - - util_safe_free( key_index ); - } -} - - diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/install.py b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/install.py deleted file mode 100644 index 41ae564ab3..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/install.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/python -# Copyright (C) 2011 Statoil ASA, Norway. -# -# The file 'install.py' is part of ERT - Ensemble based Reservoir Tool. -# -# ERT is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ERT is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. -# -# See the GNU General Public License at -# for more details. - - -import sys -import commands -import os -sys.path += ["../../../../ERT-Statoil/OldStuff/python/ctypes/SDP"] -import SDP - -local_ert = "ert" -svn_version = commands.getoutput( "svnversion" ) - -try: - numeric = int( svn_version ) -except: - sys.exit("Will not install svn version:%s - must have a pure checkout") - -svn_ert = "%s_%s" % (local_ert , svn_version) -(SDP_ROOT , RH_version) = SDP.get_SDP_ROOT() -target_file = "%s/bin/ert_release/%s" % (SDP_ROOT, svn_ert) -ert_link = "%s/bin/ert_latest_and_greatest" % SDP_ROOT - -SDP.install_file( local_ert , target_file ) -SDP.install_link( target_file , ert_link ) - - - diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/main.c b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/main.c index 072d36b8de..f94d58d5f2 100644 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/main.c +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/main.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #define WORKFLOW_OPTION "-wf" @@ -155,6 +154,7 @@ int main (int argc , char ** argv) { { char * abs_config = util_alloc_realpath( model_config_file ); printf("model config : %s \n\n", abs_config); + free(abs_config); } enkf_welcome( model_config_file ); { diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/timestamp.cmake b/ThirdParty/Ert/devel/libenkf/applications/ert_tui/timestamp.cmake deleted file mode 100644 index 683193bb06..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/ert_tui/timestamp.cmake +++ /dev/null @@ -1,4 +0,0 @@ -exec_program( svnversion ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE SVN_VERSION) -exec_program( date OUTPUT_VARIABLE COMPILE_TIME_STAMP) -file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/build_timestamp.h "#define SVN_VERSION \"${SVN_VERSION}\"\n#define COMPILE_TIME_STAMP \"${COMPILE_TIME_STAMP}\"\n" ) - diff --git a/ThirdParty/Ert/devel/libenkf/applications/xml/doc/ERT.txt b/ThirdParty/Ert/devel/libenkf/applications/xml/doc/ERT.txt deleted file mode 100644 index 0ddc342313..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/xml/doc/ERT.txt +++ /dev/null @@ -1,108 +0,0 @@ - -Eclipse -ADD_FIXED_LENGTH_SCHEDULE_KW No Supporting unknown SCHEDULE keywords. -ADD_STATIC_KW No ... -DATA_FILE Yes Provide an ECLIPSE data file for the problem. -DATA_KW No ... -ECLBASE Yes Define a name for the ECLIPSE simulations. - -EQUIL_INIT_FILE No Use INIT_SECTION instead -GRID Yes Provide an ECLIPSE grid for the reservoir model. -INIT_SECTION Yes Initialization code for the reservoir model. -REFCASE No (but see HISTORY_SOURCE and SUMMARY) ... -SCHEDULE_FILE Yes Provide an ECLIPSE schedule file for the problem. -SCHEDULE_PREDICTION_FILE No A SCHEDULE file for predictions - not prased by ert. - - -Update -ENKF_RERUN No FALSE Should the simulations be restarted from time zero after each update. -RERUN_START No 0 ... -ENKF_SCHED_FILE No ... -LOCAL_CONFIG No A file with configuration information for local analysis. - - Enkf - ENKF_ALPHA No 1.50 Parameter controlling outlier behaviour in EnKF algorithm. - ENKF_MERGE_OBSERVATIONS No FALSE Should observations from many times be merged together. - ENKF_MODE No STANDARD Which EnKF algorithm should be used. - ENKF_TRUNCATION No 0.99 Cutoff used on singular value spectrum. - - -Queue_system -LSF_QUEUE No normal ... -LSF_RESOURCES No ... -MAX_RUNNING_LOCAL No The maximum number of running jobs when running locally. -MAX_RUNNING_LSF No ... -MAX_RUNNING_RSH No ... -QUEUE_SYSTEM No -RSH_COMMAND No ... -RSH_HOST_LIST No ... - - -System -SETENV No You can modify the UNIX environment with SETENV calls. -UPDATE_PATH No update_log Modify a UNIX path variable like LD_LIBRARY_PATH. -INSTALL_JOB No ... -JOB_SCRIPT No ... - - -Plot -PLOT_DRIVER No PLPLOT Which plotting system should be used. -PLOT_ERRORBAR_MAX No 25 Show error bars if less than this number of observations. -PLOT_HEIGHT No 768 Pixel height of the plots. -PLOT_PATH No plots Path to where the plots are stored. -PLOT_WIDTH No 1024 Pixel width of the plots. -IMAGE_TYPE No png The type of the images created when plotting. -IMAGE_VIEWER No /usr/bin/display External program spawned to view images. - - - -Ensemble -NUM_REALIZATIONS Yes Set the number of reservoir realizations to use. - Parameters - FIELD No ... - GEN_DATA No ... - GEN_KW No ... - GEN_PARAM No ... - SUMMARY No Add summary variables for internalization. - - - -Observations -HISTORY_SOURCE No ... -OBS_CONFIG No ... - - -Simulations -DELETE_RUNPATH No Explictly tell ert to delete the runpath when a job is complete. -FORWARD_MODEL No ... -KEEP_RUNPATH No ... -LICENSE_PATH No A path where ert-licenses to e.g. RMS are stored. -PRE_CLEAR_RUNPATH No FALSE Should the runpath be cleared before initializing? -RUNPATH No simulations/realization%d Directory to run simulations -RUN_TEMPLATE No Install arbitrary files in the runpath directory. -MAX_SUBMIT No 2 How many times should the queue system retry a simulation. -MAX_RESAMPLE No 1 How many times should ert resample & retry a simulation. -CASE_TABLE No For running sensitivies you can give the cases descriptive names. - - -DBASE -DBASE_TYPE No PLAIN Which 'database' system should be used for storage. -ENSPATH No storage ... - - -ACTION -SELECT_CASE No The current case / default You can tell ert to select a particular case on bootup. - - -LOG -LOG_FILE No log Name of log file -LOG_LEVEL No 1 How much logging? -UPDATE_LOG_PATH No Summary of the EnKF update steps are stored in this directory. - - - - - - - - diff --git a/ThirdParty/Ert/devel/libenkf/applications/xml/src/tree1.c b/ThirdParty/Ert/devel/libenkf/applications/xml/src/tree1.c deleted file mode 100644 index e768a8424c..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/xml/src/tree1.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'tree1.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -/** - * section: Tree - * synopsis: Navigates a tree to print element names - * purpose: Parse a file to a tree, use xmlDocGetRootElement() to - * get the root element, then walk the document and print - * all the element name in document order. - * usage: tree1 filename_or_URL - * test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp - * author: Dodji Seketeli - * copy: see Copyright for the status of this software. - */ -#include -#include -#include -#include - -#ifdef LIBXML_TREE_ENABLED - -/* - *To compile this file using gcc you can type - *gcc `xml2-config --cflags --libs` -o xmlexample libxml2-example.c - */ - -/** - * print_element_names: - * @a_node: the initial xml node to consider. - * - * Prints the names of the all the xml elements - * that are siblings or children of a given xml node. - */ -static void print_element_names(xmlNode * a_node, char *str) { - xmlNode *cur_node = NULL; - char level[100]; - sprintf(level, "%s-", str); - //strcat(level, str); - - for (cur_node = a_node; cur_node; cur_node = cur_node->next) { - if (cur_node->type == XML_ELEMENT_NODE) { - printf("%s node type: Element, name: %s\n", level, cur_node->name); - } - - print_element_names(cur_node->children, level); - } -} - - -/** - * Simple example to parse a fi le called "file.xml", - * walk down the DOM, and print the name of the - * xml elements nodes. - */ -int main(int argc, char **argv) { - xmlDoc *doc = NULL; - xmlNode *root_element = NULL; - - if (argc != 2) - return(1); - - /* - * this initialize the library and check potential ABI mismatches - * between the version it was compiled for and the actual shared - * library used. - */ - LIBXML_TEST_VERSION - - /*parse the file and get the DOM */ - doc = xmlReadFile(argv[1], NULL, 0); - - if (doc == NULL) { - printf("error: could not parse file %s\n", argv[1]); - } - - /*Get the root element node */ - root_element = xmlDocGetRootElement(doc); - - print_element_names(root_element, ""); - - /*free the document */ - xmlFreeDoc(doc); - - /* - *Free the global variables that may - *have been allocated by the parser. - */ - xmlCleanupParser(); - - return 0; -} -#else -int main(void) { - fprintf(stderr, "Tree support not compiled in\n"); - exit(1); -} -#endif diff --git a/ThirdParty/Ert/devel/libenkf/applications/xml/src/xpath1.c b/ThirdParty/Ert/devel/libenkf/applications/xml/src/xpath1.c deleted file mode 100644 index eee4bd391e..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/xml/src/xpath1.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'xpath1.c' is part of ERT - Ensemble based Reservoir Tool. - - ERT is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - ERT is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License at - for more details. -*/ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) - - -static void usage(const char *name); -static int example(const char *filename); -static int setNodeValue(const xmlXPathContextPtr xc, const xmlChar * xpath, const xmlChar * value); -static void update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar * value); - - -int main(int argc, char **argv) { - /* Parse command line and process file */ - if (argc != 2) { - fprintf(stderr, "Error: wrong number of arguments.\n"); - usage(argv[0]); - return(-1); - } - - /* Init libxml */ - xmlInitParser(); - LIBXML_TEST_VERSION - - /* Do the main job */ - if (example(argv[1])) { - usage(argv[0]); - return(-1); - } - - /* Shutdown libxml */ - xmlCleanupParser(); - - /* - * this is to debug memory for regression tests - */ - xmlMemoryDump(); - return 0; -} - -/** - * usage: - * @name: the program name. - * - * Prints usage information. - */ -static void usage(const char *name) { - assert(name); - - fprintf(stderr, "Usage: %s \n", name); -} - -/** - * example: - * @filename: the input XML filename. - * - * Parses input XML file, evaluates XPath expression and update the nodes - * then print the result. - * - * Returns 0 on success and a negative value otherwise. - */ -static int example(const char* filename) { - xmlDocPtr doc; - xmlXPathContextPtr xpathCtx; - - assert(filename); - - /* Load XML document */ - doc = xmlParseFile(filename); - if (doc == NULL) { - fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename); - return(-1); - } - - /* Create xpath evaluation context */ - xpathCtx = xmlXPathNewContext(doc); - if(xpathCtx == NULL) { - fprintf(stderr,"Error: unable to create new XPath context\n"); - xmlFreeDoc(doc); - return(-1); - } - - - //change the PATH attribute of GRID - if(setNodeValue(xpathCtx, "//ert/eclipse/grid/@path", "sillypath")) { - xmlFreeDoc(doc); - return -1; - } - - //node TEST does not exist but will not create an error. Prints "no nodes!" - if(setNodeValue(xpathCtx, "//ert/eclipse/test", "sillypath")) { - xmlFreeDoc(doc); - return -1; - } - - - - - - /* Cleanup of XPath data */ - xmlXPathFreeContext(xpathCtx); - - /* dump the resulting document */ - xmlDocDump(stdout, doc); - - - /* free the document */ - xmlFreeDoc(doc); - - return(0); -} - -static int setNodeValue(const xmlXPathContextPtr xc, const xmlChar* xpath, const xmlChar* value) { - xmlXPathObjectPtr xpathObj; - - /* Evaluate xpath expression */ - xpathObj = xmlXPathEvalExpression(xpath, xc); - if(xpathObj == NULL) { - fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", xpath); - xmlXPathFreeContext(xc); - return(-1); - } - - if(xpathObj->nodesetval->nodeNr == 0) { - printf("No nodes!\n"); - } - /* update selected nodes */ - update_xpath_nodes(xpathObj->nodesetval, value); - xmlXPathFreeObject(xpathObj); - return 0; -} - -/** - * update_xpath_nodes: - * @nodes: the nodes set. - * @value: the new value for the node(s) - * - * Prints the @nodes content to @output. - */ -static void update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar* value) { - int size; - int i; - - assert(value); - size = (nodes) ? nodes->nodeNr : 0; - - /* - * NOTE: the nodes are processed in reverse order, i.e. reverse document - * order because xmlNodeSetContent can actually free up descendant - * of the node and such nodes may have been selected too ! Handling - * in reverse order ensure that descendant are accessed first, before - * they get removed. Mixing XPath and modifications on a tree must be - * done carefully ! - */ - for(i = size - 1; i >= 0; i--) { - assert(nodes->nodeTab[i]); - - xmlNodeSetContent(nodes->nodeTab[i], value); - /* - * All the elements returned by an XPath query are pointers to - * elements from the tree *except* namespace nodes where the XPath - * semantic is different from the implementation in libxml2 tree. - * As a result when a returned node set is freed when - * xmlXPathFreeObject() is called, that routine must check the - * element type. But node from the returned set may have been removed - * by xmlNodeSetContent() resulting in access to freed data. - * This can be exercised by running - * valgrind xpath2 test3.xml '//discarded' discarded - * There is 2 ways around it: - * - make a copy of the pointers to the nodes from the result set - * then call xmlXPathFreeObject() and then modify the nodes - * or - * - remove the reference to the modified nodes from the node set - * as they are processed, if they are not namespace nodes. - */ - if (nodes->nodeTab[i]->type != XML_NAMESPACE_DECL) - nodes->nodeTab[i] = NULL; - } -} - -#else -int main(void) { - fprintf(stderr, "XPath support not compiled in\n"); - exit(1); -} -#endif \ No newline at end of file diff --git a/ThirdParty/Ert/devel/libenkf/applications/xml/tests/enkf_config.xml b/ThirdParty/Ert/devel/libenkf/applications/xml/tests/enkf_config.xml deleted file mode 100644 index 94686b1de4..0000000000 --- a/ThirdParty/Ert/devel/libenkf/applications/xml/tests/enkf_config.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - EXAMPLE_01_BASE_%04d - - - - - - - - - - 0,3,10-20 - - - - - - - - BLOCK_FS - - - - - - 10 - - - - - REFCASE_SIMULATED - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 366 - 547 - 762 - 912 - 1096 - 1277 - 1461 - 1643 - - 2001-01-01 - 2001-07-01 - 2002-02-01 - 2002-07-01 - 2003-01-01 - 2003-07-01 - 2004-01-01 - 2004-07-01 - - - - - 2003-01-01 - - - - - - - - - - 10 - - - -