From 4be58edf782a9151ab8ccd6b86648aeae6394e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 25 Jun 2013 15:53:19 +0200 Subject: [PATCH] MSW code reverted. Regrettfully the work has to be reconsidered. Both ERT and the resinsight code is rolled back to before MSW was introduced as refined. p4#: 21999 --- .../FileInterface/RifReaderEclipseOutput.cpp | 355 ++------- .../FileInterface/RifReaderEclipseOutput.h | 2 +- .../RivPipeGeometryGenerator.cpp | 16 +- .../RivWellPipesPartMgr.cpp | 208 +----- .../ProjectDataModel/RimReservoirView.cpp | 28 - ApplicationCode/ProjectDataModel/RimWell.cpp | 15 +- .../RigSingleWellResultsData.cpp | 34 +- .../RigSingleWellResultsData.h | 76 +- ThirdParty/Ert/devel/cmake/cmake_pyc2 | 6 +- ThirdParty/Ert/devel/cmake/cmake_pyc_tree | 4 - .../devel/libecl/applications/CMakeLists.txt | 5 +- .../Ert/devel/libecl/applications/makefile | 163 +++++ .../devel/libecl/applications/summary2csv.c | 85 +-- .../devel/libecl/applications/summary2csv2.c | 146 ---- .../devel/libecl/include/ert/ecl/ecl_grid.h | 5 - .../libecl/include/ert/ecl/ecl_kw_magic.h | 9 +- .../libecl/include/ert/ecl/ecl_rft_cell.h | 83 --- .../libecl/include/ert/ecl/ecl_rft_file.h | 8 +- .../libecl/include/ert/ecl/ecl_rft_node.h | 17 +- .../libecl/include/ert/ecl/ecl_rsthead.h | 1 - .../devel/libecl/include/ert/ecl/ecl_sum.h | 1 - .../Ert/devel/libecl/src/CMakeLists.txt | 4 +- ThirdParty/Ert/devel/libecl/src/ecl_grid.c | 27 +- ThirdParty/Ert/devel/libecl/src/ecl_region.c | 5 +- .../Ert/devel/libecl/src/ecl_rft_cell.c | 357 --------- .../Ert/devel/libecl/src/ecl_rft_file.c | 64 +- .../Ert/devel/libecl/src/ecl_rft_node.c | 646 +++++++++++------ ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c | 1 - ThirdParty/Ert/devel/libecl/src/ecl_sum.c | 32 +- .../Ert/devel/libecl/tests/CMakeLists.txt | 63 +- .../Ert/devel/libecl/tests/ecl_grid_case.c | 46 -- .../devel/libecl/tests/ecl_grid_lgr_name.c | 38 - .../Ert/devel/libecl/tests/ecl_region.c | 70 -- ThirdParty/Ert/devel/libecl/tests/ecl_rft.c | 131 ---- .../Ert/devel/libecl/tests/ecl_rft_cell.c | 147 ---- .../Ert/devel/libecl/tests/ecl_sum_test.c | 7 - .../Ert/devel/libecl_well/CMakeLists.txt | 2 +- .../libecl_well/applications/CMakeLists.txt | 3 +- .../libecl_well/applications/segment_info.c | 107 --- .../include/ert/ecl_well/well_branch.h | 42 ++ .../ert/ecl_well/well_branch_collection.h | 50 -- .../include/ert/ecl_well/well_conn.h | 18 +- .../ert/ecl_well/well_conn_collection.h | 51 -- .../include/ert/ecl_well/well_const.h | 7 - .../include/ert/ecl_well/well_path.h | 48 ++ .../include/ert/ecl_well/well_segment.h | 79 -- .../ert/ecl_well/well_segment_collection.h | 60 -- .../include/ert/ecl_well/well_state.h | 45 +- .../Ert/devel/libecl_well/src/CMakeLists.txt | 9 +- .../Ert/devel/libecl_well/src/well_branch.c | 103 +++ .../libecl_well/src/well_branch_collection.c | 117 --- .../Ert/devel/libecl_well/src/well_conn.c | 238 +++--- .../libecl_well/src/well_conn_collection.c | 115 --- .../Ert/devel/libecl_well/src/well_info.c | 29 +- .../Ert/devel/libecl_well/src/well_path.c | 185 +++++ .../Ert/devel/libecl_well/src/well_segment.c | 249 ------- .../libecl_well/src/well_segment_collection.c | 169 ----- .../Ert/devel/libecl_well/src/well_state.c | 681 ++++++++---------- .../devel/libecl_well/tests/CMakeLists.txt | 123 +--- .../tests/well_branch_collection.c | 70 -- .../Ert/devel/libecl_well/tests/well_conn.c | 123 ---- .../libecl_well/tests/well_conn_collection.c | 55 -- .../devel/libecl_well/tests/well_conn_load.c | 104 --- .../Ert/devel/libecl_well/tests/well_info.c | 44 -- .../devel/libecl_well/tests/well_lgr_load.c | 10 +- .../devel/libecl_well/tests/well_segment.c | 115 --- .../tests/well_segment_branch_conn_load.c | 106 --- .../tests/well_segment_collection.c | 87 --- .../libecl_well/tests/well_segment_conn.c | 59 -- .../tests/well_segment_conn_load.c | 107 --- .../libecl_well/tests/well_segment_load.c | 88 --- .../Ert/devel/libecl_well/tests/well_state.c | 67 -- .../devel/libecl_well/tests/well_state_load.c | 78 -- .../Ert/devel/libecl_well/tests/well_ts.c | 7 +- .../ert_gui/lib}/ert_gui/__init__.py | 0 .../ert_gui/lib}/ert_gui/gert_main.py | 130 ++-- .../ert_gui/lib}/ert_gui/newconfig.py | 0 .../ert_gui/lib}/ert_gui/pages/__init__.py | 0 .../ert_gui/lib}/ert_gui/pages/application.py | 0 .../lib}/ert_gui/pages/config/__init__.py | 0 .../lib/ert_gui/pages/config/analysis.py | 93 +++ .../lib}/ert_gui/pages/config/configpages.py | 4 +- .../lib}/ert_gui/pages/config/eclipse.py | 51 +- .../lib}/ert_gui/pages/config/ensemble.py | 115 ++- .../ert_gui/pages/config/jobs/__init__.py | 0 .../pages/config/jobs/forwardmodelpanel.py | 9 +- .../ert_gui/pages/config/jobs/jobsdialog.py | 117 +-- .../ert_gui/pages/config/jobs/jobspanel.py | 7 +- .../lib}/ert_gui/pages/config/observations.py | 28 +- .../pages/config/parameters/__init__.py | 0 .../pages/config/parameters/datapanel.py | 0 .../pages/config/parameters/fieldpanel.py | 4 +- .../pages/config/parameters/keywordpanel.py | 0 .../config/parameters/parameterdialog.py | 0 .../config/parameters/parametermodels.py | 0 .../pages/config/parameters/parameterpanel.py | 52 +- .../ert_gui/lib}/ert_gui/pages/config/plot.py | 35 +- .../lib}/ert_gui/pages/config/queuesystem.py | 42 +- .../lib}/ert_gui/pages/config/simulation.py | 97 ++- .../pages/config/simulations/__init__.py | 0 .../pages/config/simulations/runpathpanel.py | 0 .../config/simulations/runtemplatepanel.py | 4 +- .../lib}/ert_gui/pages/config/systemenv.py | 91 +-- .../lib}/ert_gui/pages/init/__init__.py | 0 .../lib}/ert_gui/pages/init/initandcopy.py | 52 +- .../lib}/ert_gui/pages/init/initpanel.py | 29 +- .../lib}/ert_gui/pages/plot/__init__.py | 0 .../ert_gui/pages/plot/ensemblefetcher.py | 167 +++-- .../lib}/ert_gui/pages/plot/fetcher.py | 0 .../lib}/ert_gui/pages/plot/plotconfig.py | 4 +- .../lib}/ert_gui/pages/plot/plotdata.py | 81 ++- .../lib}/ert_gui/pages/plot/plotfigure.py | 0 .../lib}/ert_gui/pages/plot/plotgenerator.py | 0 .../lib}/ert_gui/pages/plot/plotpanel.py | 6 +- .../lib}/ert_gui/pages/plot/plotrenderer.py | 0 .../lib}/ert_gui/pages/plot/plotsettings.py | 4 +- .../ert_gui/pages/plot/plotsettingsxml.py | 0 .../lib}/ert_gui/pages/plot/plotview.py | 2 +- .../lib/ert_gui/pages/plot/rftfetcher.py | 192 +++++ .../lib}/ert_gui/pages/plot/zoomslider.py | 2 + .../lib}/ert_gui/pages/run/__init__.py | 0 .../ert_gui/lib}/ert_gui/pages/run/legend.py | 0 .../lib}/ert_gui/pages/run/runpanel.py | 35 +- .../lib}/ert_gui/pages/run/simulation.py | 33 +- .../ert_gui/pages/run/simulationsdialog.py | 27 +- .../ert_gui/lib}/ert_gui/widgets/__init__.py | 0 .../lib}/ert_gui/widgets/activelabel.py | 2 +- .../ert_gui/lib}/ert_gui/widgets/checkbox.py | 0 .../ert_gui/lib}/ert_gui/widgets/cogwheel.py | 0 .../lib}/ert_gui/widgets/combochoice.py | 8 +- .../lib}/ert_gui/widgets/configpanel.py | 0 .../ert_gui/lib}/ert_gui/widgets/help.py | 0 .../lib}/ert_gui/widgets/helpedwidget.py | 0 .../lib}/ert_gui/widgets/pathchooser.py | 4 +- .../lib}/ert_gui/widgets/reloadbutton.py | 0 .../lib}/ert_gui/widgets/searchablelist.py | 0 .../lib}/ert_gui/widgets/spinnerwidgets.py | 0 .../ert_gui/lib}/ert_gui/widgets/stringbox.py | 2 +- .../lib}/ert_gui/widgets/tablewidgets.py | 0 .../ert_gui/lib}/ert_gui/widgets/util.py | 2 +- .../lib}/ert_gui/widgets/validateddialog.py | 0 .../applications/ert_tui/enkf_tui_plot_rft.c | 46 +- .../libenkf/include/ert/enkf/config_keys.h | 1 + .../include/ert/enkf/enkf_config_node.h | 1 - .../libenkf/include/ert/enkf/enkf_main.h | 1 - .../libenkf/include/ert/enkf/enkf_node.h | 1 - .../libenkf/include/ert/enkf/model_config.h | 4 +- .../libenkf/include/ert/enkf/site_config.h | 2 + .../Ert/devel/libenkf/src/enkf_config_node.c | 4 - ThirdParty/Ert/devel/libenkf/src/enkf_main.c | 1 + ThirdParty/Ert/devel/libenkf/src/enkf_node.c | 9 +- ThirdParty/Ert/devel/libenkf/src/field.c | 1 + .../Ert/devel/libenkf/src/field_config.c | 2 + .../Ert/devel/libenkf/src/model_config.c | 5 +- .../Ert/devel/libenkf/src/site_config.c | 102 ++- .../Ert/devel/libenkf/tests/CMakeLists.txt | 20 +- .../libert_util/include/ert/util/test_util.h | 2 - .../include/ert/util/type_macros.h | 35 - .../libert_util/include/ert/util/vector.h | 2 - .../include/ert/util/vector_template.h | 1 - .../Ert/devel/libert_util/src/test_util.c | 11 +- ThirdParty/Ert/devel/libert_util/src/vector.c | 56 +- .../devel/libert_util/src/vector_template.c | 9 - .../tests/ert_util_type_vector_test.c | 16 +- .../libert_util/tests/ert_util_vector_test.c | 42 -- .../devel/libgeometry/tests/CMakeLists.txt | 2 +- .../include/ert/job_queue/job_queue.h | 4 +- .../include/ert/job_queue/queue_driver.h | 9 +- .../Ert/devel/libjob_queue/src/job_queue.c | 75 +- .../Ert/devel/libjob_queue/src/queue_driver.c | 87 +-- .../devel/libjob_queue/tests/job_queue_test.c | 69 +- .../tests/job_torque_submit_test.c | 4 +- .../libjob_queue/tests/job_torque_test.c | 2 - .../Ert/devel/python/python/CMakeLists.txt | 2 - .../devel/python/python/ert/CMakeLists.txt | 2 +- .../devel/python/python/ert/cwrap/cwrap.py | 10 +- .../python/python/ert/ecl/CMakeLists.txt | 16 +- .../Ert/devel/python/python/ert/ecl/ecl.py | 3 +- .../devel/python/python/ert/ecl/ecl_grid.py | 2 +- .../devel/python/python/ert/ecl/ecl_local.py | 72 ++ .../devel/python/python/ert/ecl/ecl_rft.py | 341 ++++----- .../python/python/ert/ecl/ecl_rft_cell.py | 217 ------ .../devel/python/python/ert/ecl/ecl_sum.py | 30 +- .../python/python/ert/enkf/CMakeLists.txt | 2 +- .../python/python/ert/enkf/analysis_config.py | 55 +- .../devel/python/python/ert/enkf/block_obs.py | 58 -- .../python/python/ert/enkf/ecl_config.py | 89 +-- .../python/ert/enkf/enkf_config_node.py | 87 +-- .../devel/python/python/ert/enkf/enkf_fs.py | 68 -- .../devel/python/python/ert/enkf/enkf_main.py | 284 ++------ .../devel/python/python/ert/enkf/enkf_node.py | 66 -- .../devel/python/python/ert/enkf/enkf_obs.py | 34 +- .../python/python/ert/enkf/enkf_state.py | 64 -- .../python/python/ert/enkf/ens_config.py | 68 +- .../python/python/ert/enkf/ert_template.py | 45 +- .../python/python/ert/enkf/ert_templates.py | 62 -- .../Ert/devel/python/python/ert/enkf/field.py | 48 -- .../python/python/ert/enkf/field_config.py | 67 +- .../python/python/ert/enkf/gen_data_config.py | 37 +- .../python/python/ert/enkf/gen_kw_config.py | 39 +- .../python/python/ert/enkf/local_config.py | 33 +- .../python/python/ert/enkf/model_config.py | 89 +-- .../python/python/ert/enkf/obs_vector.py | 60 -- .../python/python/ert/enkf/plot_config.py | 76 +- .../python/python/ert/enkf/site_config.py | 163 +---- .../devel/python/python/ert/enkf/time_map.py | 53 -- .../python/python/ert/ert/CMakeLists.txt | 1 - .../devel/python/python/ert/ert/c_enums.py | 79 -- .../Ert/devel/python/python/ert/ert/enums.py | 28 +- .../devel/python/python/ert/ert/erttypes.py | 6 - .../devel/python/python/ert/ert/ertwrapper.py | 85 ++- .../python/python/ert/job_queue/driver.py | 1 + .../python/python/ert/job_queue/ext_job.py | 110 +-- .../python/ert/job_queue/ext_joblist.py | 43 +- .../python/ert/job_queue/forward_model.py | 42 +- .../python/python/ert/job_queue/queue.py | 95 +-- .../python/python/ert/sched/CMakeLists.txt | 2 +- .../devel/python/python/ert/sched/history.py | 54 -- .../python/python/ert/util/CMakeLists.txt | 2 +- .../devel/python/python/ert/util/buffer.py | 46 -- .../Ert/devel/python/python/ert/util/ctime.py | 3 - .../Ert/devel/python/python/ert/util/log.py | 51 +- .../python/python/ert/util/stringlist.py | 13 +- .../devel/python/python/ert/util/tvector.py | 78 +- .../python/python/ert_gui/CMakeLists.txt | 3 - .../devel/python/python/ert_gui/README.txt | 43 -- .../python/ert_gui/pages/CMakeLists.txt | 5 - .../ert_gui/pages/config/CMakeLists.txt | 4 - .../python/ert_gui/pages/config/analysis.py | 85 --- .../ert_gui/pages/config/jobs/CMakeLists.txt | 1 - .../pages/config/parameters/CMakeLists.txt | 1 - .../pages/config/simulations/CMakeLists.txt | 1 - .../python/ert_gui/pages/init/CMakeLists.txt | 1 - .../python/ert_gui/pages/plot/CMakeLists.txt | 1 - .../python/ert_gui/pages/plot/rftfetcher.py | 164 ----- .../python/ert_gui/pages/run/CMakeLists.txt | 1 - .../python/ert_gui/widgets/CMakeLists.txt | 2 - .../Ert/devel/python/test/CMakeLists.txt | 74 +- ThirdParty/Ert/devel/python/test/ctest_run.py | 10 +- ThirdParty/Ert/devel/python/test/enkf_test.py | 57 +- .../Ert/devel/python/test/ens_config_test.py | 16 +- ThirdParty/Ert/devel/python/test/grid_test.py | 9 - .../Ert/devel/python/test/import_local.py | 33 - .../Ert/devel/python/test/import_test.py | 190 +---- .../Ert/devel/python/test/rft_cell_test.py | 122 ---- ThirdParty/Ert/devel/python/test/rft_test.py | 84 +-- .../Ert/devel/python/test/tvector_test.py | 107 --- .../Ert/devel/share/gui/img/newsplash.jpg | Bin 78813 -> 0 bytes 248 files changed, 3536 insertions(+), 9271 deletions(-) create mode 100644 ThirdParty/Ert/devel/libecl/applications/makefile delete mode 100644 ThirdParty/Ert/devel/libecl/applications/summary2csv2.c delete mode 100644 ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_cell.h delete mode 100644 ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c delete mode 100644 ThirdParty/Ert/devel/libecl/tests/ecl_grid_case.c delete mode 100644 ThirdParty/Ert/devel/libecl/tests/ecl_grid_lgr_name.c delete mode 100644 ThirdParty/Ert/devel/libecl/tests/ecl_region.c delete mode 100644 ThirdParty/Ert/devel/libecl/tests/ecl_rft.c delete mode 100644 ThirdParty/Ert/devel/libecl/tests/ecl_rft_cell.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/applications/segment_info.c create mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch.h delete mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch_collection.h delete mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn_collection.h create mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_path.h delete mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment.h delete mode 100644 ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment_collection.h create mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_branch.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_branch_collection.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_conn_collection.c create mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_path.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_segment.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/src/well_segment_collection.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_branch_collection.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_conn.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_conn_collection.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_conn_load.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_info.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment_branch_conn_load.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment_collection.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn_load.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_segment_load.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_state.c delete mode 100644 ThirdParty/Ert/devel/libecl_well/tests/well_state_load.c rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/gert_main.py (60%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/newconfig.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/application.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/__init__.py (100%) create mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/analysis.py rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/configpages.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/eclipse.py (60%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/ensemble.py (66%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/jobs/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/jobs/forwardmodelpanel.py (97%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/jobs/jobsdialog.py (67%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/jobs/jobspanel.py (94%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/observations.py (63%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/datapanel.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/fieldpanel.py (93%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/keywordpanel.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/parameterdialog.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/parametermodels.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/parameters/parameterpanel.py (89%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/plot.py (56%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/queuesystem.py (60%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/simulation.py (57%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/simulations/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/simulations/runpathpanel.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/simulations/runtemplatepanel.py (99%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/config/systemenv.py (60%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/init/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/init/initandcopy.py (88%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/init/initpanel.py (79%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/ensemblefetcher.py (70%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/fetcher.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotconfig.py (99%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotdata.py (73%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotfigure.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotgenerator.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotpanel.py (98%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotrenderer.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotsettings.py (98%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotsettingsxml.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/plotview.py (99%) create mode 100644 ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/rftfetcher.py rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/plot/zoomslider.py (98%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/run/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/run/legend.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/run/runpanel.py (90%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/run/simulation.py (92%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/pages/run/simulationsdialog.py (90%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/__init__.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/activelabel.py (96%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/checkbox.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/cogwheel.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/combochoice.py (90%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/configpanel.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/help.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/helpedwidget.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/pathchooser.py (99%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/reloadbutton.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/searchablelist.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/spinnerwidgets.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/stringbox.py (98%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/tablewidgets.py (100%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/util.py (99%) rename ThirdParty/Ert/devel/{python/python => libenkf/applications/ert_gui/lib}/ert_gui/widgets/validateddialog.py (100%) create mode 100644 ThirdParty/Ert/devel/python/python/ert/ecl/ecl_local.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft_cell.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/block_obs.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/enkf_fs.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/enkf_node.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/enkf_state.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/ert_templates.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/field.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/obs_vector.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/enkf/time_map.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/ert/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert/ert/c_enums.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/sched/history.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert/util/buffer.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/README.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/config/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/config/analysis.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/init/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/rftfetcher.py delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/pages/run/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/python/ert_gui/widgets/CMakeLists.txt delete mode 100644 ThirdParty/Ert/devel/python/test/import_local.py delete mode 100644 ThirdParty/Ert/devel/python/test/rft_cell_test.py delete mode 100644 ThirdParty/Ert/devel/share/gui/img/newsplash.jpg diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp index 2c660a74bc..c5e2afdd2c 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp @@ -370,10 +370,14 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigCaseData* eclipseC if (!transferGeometry(mainEclGrid, eclipseCase)) return false; progInfo.incrementProgress(); - m_eclipseCase = eclipseCase; + progInfo.setProgressDescription("Releasing reader memory"); + ecl_grid_free( mainEclGrid ); + progInfo.incrementProgress(); progInfo.setProgressDescription("Reading Result index"); progInfo.setNextProgressIncrement(60); + + m_eclipseCase = eclipseCase; // Build results meta data buildMetaData(); @@ -381,11 +385,9 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigCaseData* eclipseC progInfo.setNextProgressIncrement(8); progInfo.setProgressDescription("Reading Well information"); - readWellCells(mainEclGrid); + + readWellCells(); - progInfo.setProgressDescription("Releasing reader memory"); - ecl_grid_free( mainEclGrid ); - progInfo.incrementProgress(); return true; } @@ -707,48 +709,16 @@ bool RifReaderEclipseOutput::dynamicResult(const QString& result, PorosityModelR return true; } - - -// Helper structure to handle the metadata for connections in segments -struct SegmentData -{ - SegmentData(const well_conn_collection_type* connections) : - m_branchId(-1), - m_segmentId(-1), - m_gridIndex(cvf::UNDEFINED_SIZE_T), - m_connections(connections) - {} - - int m_branchId; - int m_segmentId; - size_t m_gridIndex; - const well_conn_collection_type* m_connections; -}; - -void getSegmentDataByBranchId(const std::list& segments, std::vector& branchSegments, int branchId) -{ - std::list::const_iterator it; - - for (it = segments.begin(); it != segments.end(); it++) - { - if (it->m_branchId == branchId) - { - branchSegments.push_back(*it); - } - } -} - - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid) +void RifReaderEclipseOutput::readWellCells() { CVF_ASSERT(m_eclipseCase); if (m_dynamicResultsAccess.isNull()) return; - well_info_type* ert_well_info = well_info_alloc(mainEclGrid); + well_info_type* ert_well_info = well_info_alloc(NULL); if (!ert_well_info) return; m_dynamicResultsAccess->readWellData(ert_well_info); @@ -815,29 +785,25 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid) + // Loop over all the grids in the model. If we have connections in one, we will discard - // the main grid connections as the well connections are duplicated in the main grid and LGR grids + // the maingrid connections as they are "duplicates" bool hasWellConnectionsInLGR = false; - -#if 0 - // To be discussed with Statoil for (size_t gridNr = 1; gridNr < grids.size(); ++gridNr) { - RigGridBase* lgrGrid = m_eclipseCase->grid(gridNr); - if (well_state_has_grid_connections(ert_well_state, lgrGrid->gridName().data())) + int branchCount = well_state_iget_lgr_num_branches(ert_well_state, static_cast(gridNr)); + if (branchCount > 0) { hasWellConnectionsInLGR = true; break; } } -#endif - size_t gridNr = hasWellConnectionsInLGR ? 1 : 0; for (; gridNr < grids.size(); ++gridNr) { - // Wellhead. If several grids have a wellhead definition for this well, we use the last one. (Possibly the innermost LGR) + // Wellhead. If several grids have a wellhead definition for this well, we use tha last one. (Possibly the innermost LGR) const well_conn_type* ert_wellhead = well_state_iget_wellhead(ert_well_state, static_cast(gridNr)); if (ert_wellhead) { @@ -855,275 +821,53 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid) wellResFrame.m_wellHead.m_gridCellIndex = grids[gridNr]->cellIndexFromIJK(cellI, cellJ, cellK); wellResFrame.m_wellHead.m_gridIndex = gridNr; } - else + + + int branchCount = well_state_iget_lgr_num_branches(ert_well_state, static_cast(gridNr)); + if (branchCount > 0) { - CVF_ASSERT(0); - } + if (static_cast(wellResFrame.m_wellResultBranches.size()) < branchCount) wellResFrame.m_wellResultBranches.resize(branchCount); - - std::string gridName; - if (gridNr == 0) - { - gridName = ECL_GRID_GLOBAL_GRID; - } - else - { - RigGridBase* rigGrid = m_eclipseCase->grid(gridNr); - gridName = rigGrid->gridName(); - } - - - - std::list segmentList; - std::vector outletBranchSegmentList; // Keep a list of branch outlet segments to avoid traversal twice - std::vector ertBranchIDs; - - int branchCount = 0; - if (well_state_is_MSW(ert_well_state)) - { - wellResults->setMultiSegmentWell(true); - - well_branch_collection_type* branches = well_state_get_branches(ert_well_state); - - branchCount = well_branch_collection_get_size(branches); - for (int branchIdx = 0; branchIdx < well_branch_collection_get_size(branches); branchIdx++) + for (int branchIdx = 0; branchIdx < branchCount; ++branchIdx ) { - const well_segment_type* segment = well_branch_collection_iget_start_segment(branches, branchIdx); - int branchId = well_segment_get_branch_id(segment); - - ertBranchIDs.push_back(branchId); - - while (segment && branchId == well_segment_get_branch_id(segment)) + // Connections + int connectionCount = well_state_iget_num_lgr_connections(ert_well_state, static_cast(gridNr), branchIdx); + if (connectionCount > 0) { - SegmentData segmentData(NULL); - segmentData.m_branchId = branchId; - segmentData.m_segmentId = well_segment_get_id(segment); - segmentData.m_gridIndex = gridNr; - - if (well_segment_has_grid_connections(segment, gridName.data())) + + RigWellResultBranch& wellSegment = wellResFrame.m_wellResultBranches[branchIdx]; // Is this completely right? Is the branch index actually the same between lgrs ? + wellSegment.m_branchNumber = branchIdx; + size_t existingConnCount = wellSegment.m_wellCells.size(); + wellSegment.m_wellCells.resize(existingConnCount + connectionCount); + + int connIdx; + for (connIdx = 0; connIdx < connectionCount; connIdx++) { - const well_conn_collection_type* connections = well_segment_get_connections(segment, gridName.data()); - segmentData.m_connections = connections; - } - - // Insert in front, as the segments are accessed starting from grid cell closes to well head - segmentList.push_front(segmentData); - - if (well_segment_get_outlet_id(segment) == -1) - { - break; - } - - segment = well_segment_get_outlet(segment); - } - - outletBranchSegmentList.push_back(segment); - } - } - else - { - branchCount = 1; - ertBranchIDs.push_back(0); - - const well_conn_collection_type* connections = well_state_get_grid_connections(ert_well_state, gridName.data()); - SegmentData segmentData(connections); - segmentData.m_gridIndex = gridNr; - segmentList.push_front(segmentData); - } - - size_t currentGridBranchStartIndex = wellResFrame.m_wellResultBranches.size(); - wellResFrame.m_wellResultBranches.resize(currentGridBranchStartIndex + branchCount); - - - // Import all well result cells for all connections - for (int branchIdx = 0; branchIdx < branchCount; branchIdx++) - { - RigWellResultBranch& wellResultBranch = wellResFrame.m_wellResultBranches[currentGridBranchStartIndex + branchIdx]; - wellResultBranch.m_branchIndex = branchIdx; - - int ertBranchId = ertBranchIDs[branchIdx]; - wellResultBranch.m_ertBranchId = ertBranchId; - - std::vector branchSegments; - getSegmentDataByBranchId(segmentList, branchSegments, ertBranchId); - - for (size_t segmentIdx = 0; segmentIdx < branchSegments.size(); segmentIdx++) - { - SegmentData& connData = branchSegments[segmentIdx]; - - if (!connData.m_connections) - { - size_t existingCellCount = wellResultBranch.m_wellCells.size(); - wellResultBranch.m_wellCells.resize(existingCellCount + 1); - - RigWellResultCell& data = wellResultBranch.m_wellCells[existingCellCount]; - - data.m_ertBranchId = connData.m_branchId; - data.m_ertSegmentId = connData.m_segmentId; - } - else - { - int connectionCount = well_conn_collection_get_size(connData.m_connections); - - size_t existingCellCount = wellResultBranch.m_wellCells.size(); - wellResultBranch.m_wellCells.resize(existingCellCount + connectionCount); - - for (int connIdx = 0; connIdx < connectionCount; connIdx++) - { - well_conn_type* ert_connection = well_conn_collection_iget(connData.m_connections, connIdx); + const well_conn_type* ert_connection = well_state_iget_lgr_connections( ert_well_state, static_cast(gridNr), branchIdx)[connIdx]; CVF_ASSERT(ert_connection); - RigWellResultCell& data = wellResultBranch.m_wellCells[existingCellCount + connIdx]; - int cellI = well_conn_get_i( ert_connection ); - int cellJ = well_conn_get_j( ert_connection ); - int cellK = well_conn_get_k( ert_connection ); - bool isCellOpen = well_conn_open( ert_connection ); - - // If a well is defined in fracture region, the K-value is from (cellCountK - 1) -> cellCountK*2 - 1 - // Adjust K so index is always in valid grid region - if (cellK >= static_cast(grids[gridNr]->cellCountK())) - { - cellK -= static_cast(grids[gridNr]->cellCountK()); - } - + RigWellResultCell& data = wellSegment.m_wellCells[existingConnCount + connIdx]; data.m_gridIndex = gridNr; - data.m_gridCellIndex = grids[gridNr]->cellIndexFromIJK(cellI, cellJ, cellK); - - data.m_isOpen = isCellOpen; - - data.m_ertBranchId = connData.m_branchId; - data.m_ertSegmentId = connData.m_segmentId; - } - } - } - } - - - if (well_state_is_MSW(ert_well_state)) - { - - // Assign outlet well cells to leaf branch well heads - - for (int branchIdx = 0; branchIdx < branchCount; branchIdx++) - { - RigWellResultBranch& wellResultLeafBranch = wellResFrame.m_wellResultBranches[currentGridBranchStartIndex + branchIdx]; - - const well_segment_type* outletBranchSegment = outletBranchSegmentList[branchIdx]; - CVF_ASSERT(outletBranchSegment); - - int outletErtBranchId = well_segment_get_branch_id(outletBranchSegment); - - size_t outletErtBranchIndex = cvf::UNDEFINED_SIZE_T; - for (size_t i = 0; i < ertBranchIDs.size(); i++) - { - if (ertBranchIDs[i] == outletErtBranchId) - { - outletErtBranchIndex = i; - } - } - - RigWellResultBranch& outletResultBranch = wellResFrame.m_wellResultBranches[currentGridBranchStartIndex + outletErtBranchIndex]; - - int outletErtSegmentId = well_segment_get_branch_id(outletBranchSegment); - size_t lastCellIndexForSegmentIdInOutletBranch = cvf::UNDEFINED_SIZE_T; - for (size_t outletCellIdx = 0; outletCellIdx < outletResultBranch.m_wellCells.size(); outletCellIdx++) - { - if (outletResultBranch.m_wellCells[outletCellIdx].m_ertSegmentId == outletErtSegmentId) - { - lastCellIndexForSegmentIdInOutletBranch = outletCellIdx; - } - } - - if (lastCellIndexForSegmentIdInOutletBranch == cvf::UNDEFINED_SIZE_T) - { - // Did not find the cell in the outlet branch based on branch id and segment id from outlet cell in leaf branch - CVF_ASSERT(0); - } - else - { - RigWellResultCell& outletCell = outletResultBranch.m_wellCells[lastCellIndexForSegmentIdInOutletBranch]; - - wellResultLeafBranch.m_outletBranchIndex = currentGridBranchStartIndex + outletErtBranchIndex; - wellResultLeafBranch.m_outletBranchHeadCellIndex = lastCellIndexForSegmentIdInOutletBranch; - } - } - - - // Update outlet well cells with no grid cell connections - - for (int branchIdx = 0; branchIdx < branchCount; branchIdx++) - { - RigWellResultBranch& wellResultLeafBranch = wellResFrame.m_wellResultBranches[currentGridBranchStartIndex + branchIdx]; - - const RigWellResultCell* leafBranchHead = wellResFrame.findResultCellFromOutletSpecification(wellResultLeafBranch.m_outletBranchIndex, wellResultLeafBranch.m_outletBranchHeadCellIndex); - if (!leafBranchHead || leafBranchHead->hasGridConnections()) - { - continue; - } - - RigWellResultBranch& outletResultBranch = wellResFrame.m_wellResultBranches[wellResultLeafBranch.m_outletBranchIndex]; - - size_t firstCellIndexWithGridConnectionInLeafBranch = cvf::UNDEFINED_SIZE_T; - for (size_t j = 0; j < wellResultLeafBranch.m_wellCells.size(); j++) - { - if (wellResultLeafBranch.m_wellCells[j].hasGridConnections()) - { - firstCellIndexWithGridConnectionInLeafBranch = j; - break; - } - } - - if (firstCellIndexWithGridConnectionInLeafBranch != cvf::UNDEFINED_SIZE_T) - { - const RigCell& firstCellWithGridConnectionInLeafBranch = m_eclipseCase->cellFromWellResultCell(wellResultLeafBranch.m_wellCells[firstCellIndexWithGridConnectionInLeafBranch]); - cvf::Vec3d firstGridConnectionCenterInLeafBranch = firstCellWithGridConnectionInLeafBranch.center(); - - size_t cellIndexInOutletBranch = wellResultLeafBranch.m_outletBranchHeadCellIndex; - CVF_ASSERT(cellIndexInOutletBranch != cvf::UNDEFINED_SIZE_T); - - RigWellResultCell& currCell = outletResultBranch.m_wellCells[cellIndexInOutletBranch]; - - while (cellIndexInOutletBranch != cvf::UNDEFINED_SIZE_T && !currCell.hasGridConnections()) - { - size_t branchConnectionCount = currCell.m_branchConnectionCount; - if (branchConnectionCount == 0) { - currCell.m_averageCenter = firstGridConnectionCenterInLeafBranch; - } - else - { - cvf::Vec3d currentWeightedCoord = currCell.m_averageCenter * branchConnectionCount / static_cast(branchConnectionCount + 1); - cvf::Vec3d additionalWeightedCoord = firstGridConnectionCenterInLeafBranch / static_cast(branchConnectionCount + 1); - - currCell.m_averageCenter = currentWeightedCoord + additionalWeightedCoord; - } - - currCell.m_branchConnectionCount++; - - if (cellIndexInOutletBranch == 0) - { - cellIndexInOutletBranch = cvf::UNDEFINED_SIZE_T; - - // Find the branch the outlet is connected to, and continue update of - // segments until a segment with a grid connection is found - const RigWellResultCell* leafBranchHead = wellResFrame.findResultCellFromOutletSpecification(outletResultBranch.m_outletBranchIndex, outletResultBranch.m_outletBranchHeadCellIndex); - - if (leafBranchHead && - !leafBranchHead->hasGridConnections() && - leafBranchHead->m_ertBranchId != outletResultBranch.m_ertBranchId) + int cellI = well_conn_get_i( ert_connection ); + int cellJ = well_conn_get_j( ert_connection ); + int cellK = well_conn_get_k( ert_connection ); + bool open = well_conn_open( ert_connection ); + int branch = well_conn_get_branch( ert_connection ); + int segment = well_conn_get_segment( ert_connection ); + + // If a well is defined in fracture region, the K-value is from (cellCountK - 1) -> cellCountK*2 - 1 + // Adjust K so index is always in valid grid region + if (cellK >= static_cast(grids[gridNr]->cellCountK())) { - outletResultBranch = wellResFrame.m_wellResultBranches[outletResultBranch.m_outletBranchIndex]; - cellIndexInOutletBranch = outletResultBranch.m_outletBranchHeadCellIndex; + cellK -= static_cast(grids[gridNr]->cellCountK()); } - } - else - { - cellIndexInOutletBranch--; - } - if(cellIndexInOutletBranch >= 0 && cellIndexInOutletBranch < outletResultBranch.m_wellCells.size()) - { - currCell = outletResultBranch.m_wellCells[cellIndexInOutletBranch]; + data.m_gridCellIndex = grids[gridNr]->cellIndexFromIJK(cellI , cellJ , cellK); + + data.m_isOpen = open; + data.m_branchId = branch; + data.m_segmentId = segment; } } } @@ -1132,7 +876,6 @@ void RifReaderEclipseOutput::readWellCells(const ecl_grid_type* mainEclGrid) } } - wellResults->computeMappingFromResultTimeIndicesToWellTimeIndices(m_timeSteps); wells.push_back(wellResults.p()); diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.h b/ApplicationCode/FileInterface/RifReaderEclipseOutput.h index fe33a025ae..5dc8794a3a 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.h +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.h @@ -56,7 +56,7 @@ public: private: bool readActiveCellInfo(); void buildMetaData(); - void readWellCells(const ecl_grid_type* mainEclGrid); + void readWellCells(); void openInitFile(); bool openDynamicAccess(); diff --git a/ApplicationCode/ModelVisualization/RivPipeGeometryGenerator.cpp b/ApplicationCode/ModelVisualization/RivPipeGeometryGenerator.cpp index 085a9e2ab0..9f9887babc 100644 --- a/ApplicationCode/ModelVisualization/RivPipeGeometryGenerator.cpp +++ b/ApplicationCode/ModelVisualization/RivPipeGeometryGenerator.cpp @@ -547,8 +547,20 @@ void RivPipeGeometryGenerator::updateFilteredPipeCenterCoords() } } - // Always append last coord as it is not added by above algorithm - m_filteredPipeCenterCoords.push_back(m_originalPipeCenterCoords->get(m_originalPipeCenterCoords->size() - 1)); + // Add last cross section if not duplicate coordinate + cvf::Vec3d coordA = m_originalPipeCenterCoords->get(m_originalPipeCenterCoords->size() - 2); + cvf::Vec3d coordB = m_originalPipeCenterCoords->get(m_originalPipeCenterCoords->size() - 1); + + cvf::Vec3d directionAB = coordB - coordA; + if (directionAB.lengthSquared() > squareDistanceTolerance) + { + m_filteredPipeCenterCoords.push_back(m_originalPipeCenterCoords->get(m_originalPipeCenterCoords->size() - 1)); + } + else + { + // Remove last segment as the length is below tolerance + m_filteredPipeSegmentToResult.pop_back(); + } CVF_ASSERT(m_filteredPipeCenterCoords.size() - 1 == m_filteredPipeSegmentToResult.size()); } diff --git a/ApplicationCode/ModelVisualization/RivWellPipesPartMgr.cpp b/ApplicationCode/ModelVisualization/RivWellPipesPartMgr.cpp index 00702a2091..8d1e738f1f 100644 --- a/ApplicationCode/ModelVisualization/RivWellPipesPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivWellPipesPartMgr.cpp @@ -176,15 +176,15 @@ void RivWellPipesPartMgr::calculateWellPipeCenterline( std::vector< std::vector RigCaseData* rigReservoir = m_rimReservoirView->eclipseCase()->reservoirData(); RigSingleWellResultsData* wellResults = m_rimWell->wellResults(); + const RigWellResultFrame& staticWellFrame = m_rimWell->wellResults()->m_staticWellCells; + // Make sure we have computed the static representation of the well - if (wellResults->m_staticWellCells.m_wellResultBranches.size() == 0) + if (staticWellFrame.m_wellResultBranches.size() == 0) { wellResults->computeStaticWellCellPath(); } - - const RigWellResultFrame& staticWellFrame = wellResults->m_staticWellCells; if (staticWellFrame.m_wellResultBranches.size() == 0) return; - + // Initialize the return arrays pipeBranchesCLCoords.clear(); pipeBranchesCellIds.clear(); @@ -211,93 +211,31 @@ void RivWellPipesPartMgr::calculateWellPipeCenterline( std::vector< std::vector if (hasResultCells) { + // Create a new branch from wellhead + + pipeBranchesCLCoords.push_back(std::vector()); + pipeBranchesCellIds.push_back(std::vector ()); + + // We start by entering the first cell (the wellhead) + const RigWellResultCell* prevResCell = whResCell; + + pipeBranchesCLCoords.back().push_back(whStartPos); + pipeBranchesCellIds.back().push_back(*prevResCell ); // Add extra coordinate between cell face and cell center // to make sure the well pipe terminated in a segment parallel to z-axis cvf::Vec3d whIntermediate = whStartPos; whIntermediate.z() = (whStartPos.z() + whCell.center().z()) / 2.0; + pipeBranchesCLCoords.back().push_back(whIntermediate); + pipeBranchesCellIds.back().push_back(*prevResCell ); - const RigWellResultCell* prevResCell = NULL; - - // Use well head if branch head is not specified - if (!wellResults->isMultiSegmentWell()) - { - // Create a new branch from wellhead - - pipeBranchesCLCoords.push_back(std::vector()); - pipeBranchesCellIds.push_back(std::vector ()); - - prevResCell = whResCell; - - pipeBranchesCLCoords.back().push_back(whStartPos); - pipeBranchesCellIds.back().push_back(*prevResCell); - - pipeBranchesCLCoords.back().push_back(whIntermediate); - pipeBranchesCellIds.back().push_back(*prevResCell); - } for (size_t brIdx = 0; brIdx < resBranches.size(); brIdx++) { if (resBranches[brIdx].m_wellCells.size() == 0) continue; // Skip empty branches. Do not know why they exist, but they make problems. - prevResCell = NULL; - - - // Find the start the MSW well-branch centerline. Normal wells are started "once" at wellhead in the code above - - if (wellResults->isMultiSegmentWell()) - { - pipeBranchesCLCoords.push_back(std::vector()); - pipeBranchesCellIds.push_back(std::vector ()); - - if (brIdx == 0) - { - // The first branch contains segment number 1, and this is the only segment connected to well head - // See Eclipse documentation for the keyword WELSEGS - prevResCell = whResCell; - - pipeBranchesCLCoords.back().push_back(whStartPos); - pipeBranchesCellIds.back().push_back(*prevResCell); - - pipeBranchesCLCoords.back().push_back(whIntermediate); - pipeBranchesCellIds.back().push_back(*prevResCell); - } - else - { - const RigWellResultCell* leafBranchHead = staticWellFrame.findResultCellFromOutletSpecification(resBranches[brIdx].m_outletBranchIndex, resBranches[brIdx].m_outletBranchHeadCellIndex); - if (leafBranchHead && leafBranchHead->hasGridConnections()) - { - // Create a new branch and use branch head as previous result cell - - prevResCell = leafBranchHead; - - const RigCell& cell = rigReservoir->cellFromWellResultCell(*leafBranchHead); - cvf::Vec3d branchHeadStartPos = cell.faceCenter(cvf::StructGridInterface::NEG_K); - - pipeBranchesCLCoords.back().push_back(branchHeadStartPos); - pipeBranchesCellIds.back().push_back(*prevResCell); - } - else if (leafBranchHead) - { - cvf::Vec3d interpolatedCoord = leafBranchHead->m_averageCenter; - - CVF_ASSERT(interpolatedCoord != cvf::Vec3d::UNDEFINED); - if (interpolatedCoord != cvf::Vec3d::UNDEFINED) - { - pipeBranchesCLCoords.back().push_back(interpolatedCoord); - pipeBranchesCellIds.back().push_back(RigWellResultCell()); - } - } - else - { - // No branch head found: Possibly main branch - CVF_ASSERT(false); - } - } - } - // Loop over all the resultCells in the branch const std::vector& resBranchCells = resBranches[brIdx].m_wellCells; @@ -307,101 +245,56 @@ void RivWellPipesPartMgr::calculateWellPipeCenterline( std::vector< std::vector std::vector& branchCellIds = pipeBranchesCellIds.back(); const RigWellResultCell& resCell = resBranchCells[cIdx]; - - if (!resCell.hasConnections()) - { - continue; - } - - if (resCell.hasBranchConnections()) - { - // Use the interpolated value of branch head - cvf::Vec3d interpolatedCoord = resCell.m_averageCenter; - - CVF_ASSERT(interpolatedCoord != cvf::Vec3d::UNDEFINED); - if (interpolatedCoord != cvf::Vec3d::UNDEFINED) - { - pipeBranchesCLCoords.back().push_back(interpolatedCoord); - pipeBranchesCellIds.back().push_back(RigWellResultCell()); - } - - // Set previous result cell to NULL - prevResCell = NULL; - - continue; - } - const RigCell& cell = rigReservoir->cellFromWellResultCell(resCell); // Check if this and the previous cells has shared faces cvf::StructGridInterface::FaceType sharedFace; - if (prevResCell && rigReservoir->findSharedSourceFace(sharedFace, resCell, *prevResCell)) + if (rigReservoir->findSharedSourceFace(sharedFace, resCell, *prevResCell)) { branchCLCoords.push_back(cell.faceCenter(sharedFace)); branchCellIds.push_back(resCell); } else { - cvf::Vec3d previousCoord; - - if (prevResCell) - { - // This and the previous cell does not share a face. We need to go out of the previous cell, before entering this. - const RigCell& prevCell = rigReservoir->cellFromWellResultCell(*prevResCell); - previousCoord = prevCell.center(); - } - else - { - previousCoord = pipeBranchesCLCoords.back().back(); - } - + // This and the previous cell does not share a face. We need to go out of the previous cell, before entering this. + const RigCell& prevCell = rigReservoir->cellFromWellResultCell(*prevResCell); + cvf::Vec3d centerPrevCell = prevCell.center(); cvf::Vec3d centerThisCell = cell.center(); // First make sure this cell is not starting a new "display" branch - if ( wellResults->isMultiSegmentWell() - || !isAutoDetectBranches - || (prevResCell == whResCell) - || (centerThisCell-previousCoord).lengthSquared() <= (centerThisCell - whStartPos).lengthSquared() - ) + if ( !isAutoDetectBranches || (prevResCell == whResCell) + || (centerThisCell-centerPrevCell).lengthSquared() <= (centerThisCell - whStartPos).lengthSquared()) { // Not starting a "display" branch // Create ray and intersect with cells cvf::Ray rayToThisCell; - rayToThisCell.setOrigin(previousCoord); - rayToThisCell.setDirection((centerThisCell - previousCoord).getNormalized()); + rayToThisCell.setOrigin(centerPrevCell); + rayToThisCell.setDirection((centerThisCell - centerPrevCell).getNormalized()); + cvf::Vec3d outOfPrevCell(centerPrevCell); cvf::Vec3d intoThisCell(centerThisCell); - cell.firstIntersectionPoint(rayToThisCell, &intoThisCell); - if (prevResCell) + bool intersectionOk = prevCell.firstIntersectionPoint(rayToThisCell, &outOfPrevCell); + //CVF_ASSERT(intersectionOk); + intersectionOk = cell.firstIntersectionPoint(rayToThisCell, &intoThisCell); + //CVF_ASSERT(intersectionOk); + if ((intoThisCell - outOfPrevCell).lengthSquared() > 1e-3) { - cvf::Vec3d outOfPrevCell(previousCoord); - - const RigCell& prevCell = rigReservoir->cellFromWellResultCell(*prevResCell); - bool intersectionOk = prevCell.firstIntersectionPoint(rayToThisCell, &outOfPrevCell); - //CVF_ASSERT(intersectionOk); - //CVF_ASSERT(intersectionOk); - if ((intoThisCell - outOfPrevCell).lengthSquared() > 1e-3) - { - branchCLCoords.push_back(outOfPrevCell); - branchCellIds.push_back(*prevResCell); - } + branchCLCoords.push_back(outOfPrevCell); + branchCellIds.push_back(RigWellResultCell()); } - branchCLCoords.push_back(intoThisCell); branchCellIds.push_back(resCell); } else { - CVF_ASSERT(!wellResults->isMultiSegmentWell()); - // This cell is further from the previous cell than from the well head, // thus we interpret it as a new branch. // First finish the current branch - branchCLCoords.push_back(branchCLCoords.back() + 1.5*(previousCoord - branchCLCoords.back()) ); + branchCLCoords.push_back(branchCLCoords.back() + 1.5*(centerPrevCell - branchCLCoords.back()) ); // Create new display branch pipeBranchesCLCoords.push_back(std::vector()); @@ -423,32 +316,14 @@ void RivWellPipesPartMgr::calculateWellPipeCenterline( std::vector< std::vector } prevResCell = &resCell; + } - - if ( wellResults->isMultiSegmentWell()) - { - // All MSW branches are completed using the point 0.5 past the center of last cell - size_t clCoordCount = pipeBranchesCLCoords.back().size(); - CVF_ASSERT(clCoordCount >= 2); - cvf::Vec3d centerPrevCell = pipeBranchesCLCoords.back()[clCoordCount - 2]; - cvf::Vec3d centerThisCell = pipeBranchesCLCoords.back()[clCoordCount - 1]; - - pipeBranchesCLCoords.back().push_back(centerThisCell + 1.5*(centerPrevCell - centerThisCell) ); - } } - if (!wellResults->isMultiSegmentWell()) - { - // None MSW wells - // For the last cell, add the point 0.5 past the center of that cell - - size_t clCoordCount = pipeBranchesCLCoords.back().size(); - CVF_ASSERT(clCoordCount >= 2); - cvf::Vec3d centerPrevCell = pipeBranchesCLCoords.back()[clCoordCount - 2]; - cvf::Vec3d centerThisCell = pipeBranchesCLCoords.back()[clCoordCount - 1]; - - pipeBranchesCLCoords.back().push_back(centerThisCell + 1.5*(centerPrevCell - centerThisCell) ); - } + // For the last cell, add the point 0.5 past the center of that cell + const RigCell& prevCell = rigReservoir->cellFromWellResultCell(*prevResCell); + cvf::Vec3d centerPrevCell = prevCell.center(); + pipeBranchesCLCoords.back().push_back(pipeBranchesCLCoords.back().back() + 1.5*(centerPrevCell - pipeBranchesCLCoords.back().back()) ); } @@ -514,12 +389,7 @@ void RivWellPipesPartMgr::updatePipeResultColor(size_t frameIndex) for (size_t wcIdx = 0; wcIdx < cellIds.size(); ++wcIdx) { // we need a faster lookup, I guess - const RigWellResultCell* wResCell = NULL; - - if (cellIds[wcIdx].hasGridConnections()) - { - wResCell = wResFrame.findResultCell(cellIds[wcIdx].m_gridIndex, cellIds[wcIdx].m_gridCellIndex); - } + const RigWellResultCell* wResCell = wResFrame.findResultCell(cellIds[wcIdx].m_gridIndex, cellIds[wcIdx].m_gridCellIndex); if (wResCell == NULL) { diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp index 2e1d37c6e0..6402bce527 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp @@ -1025,29 +1025,6 @@ void RimReservoirView::appendCellResultInfo(size_t gridIndex, size_t cellIndex, } } } - - cvf::Collection wellResults = m_reservoir->reservoirData()->wellResults(); - for (size_t i = 0; i < wellResults.size(); i++) - { - RigSingleWellResultsData* singleWellResultData = wellResults.at(i); - - if (m_currentTimeStep < singleWellResultData->firstResultTimeStep()) - { - continue; - } - - const RigWellResultFrame& wellResultFrame = singleWellResultData->wellResultFrame(m_currentTimeStep); - const RigWellResultCell* wellResultCell = wellResultFrame.findResultCell(gridIndex, cellIndex); - if (wellResultCell) - { - resultInfoText->append(QString("(0-based) Branch Id : %1 Segment Id %2\n").arg(wellResultCell->m_ertBranchId).arg(wellResultCell->m_ertSegmentId)); - if (wellResultCell->hasBranchConnections()) - { - resultInfoText->append(QString("Branch Connection Count : %1\n").arg(wellResultCell->m_branchConnectionCount)); - resultInfoText->append(QString("Center coord : %1 %2 %3\n").arg(wellResultCell->m_averageCenter.x()).arg(wellResultCell->m_averageCenter.y()).arg(wellResultCell->m_averageCenter.z())); - } - } - } } } @@ -1404,11 +1381,6 @@ void RimReservoirView::calculateVisibleWellCellsIncFence(cvf::UByteArray* visibl { if (wsResCells[cIdx].m_gridIndex == grid->gridIndex()) { - if (!wsResCells[cIdx].hasGridConnections()) - { - continue; - } - size_t gridCellIndex = wsResCells[cIdx].m_gridCellIndex; (*visibleCells)[gridCellIndex] = true; diff --git a/ApplicationCode/ProjectDataModel/RimWell.cpp b/ApplicationCode/ProjectDataModel/RimWell.cpp index ccbeaef416..8d7b53366b 100644 --- a/ApplicationCode/ProjectDataModel/RimWell.cpp +++ b/ApplicationCode/ProjectDataModel/RimWell.cpp @@ -196,16 +196,13 @@ bool RimWell::calculateWellPipeVisibility(size_t frameIndex) const std::vector& wsResCells = wellResSegments[wsIdx].m_wellCells; for (size_t cIdx = 0; cIdx < wsResCells.size(); ++ cIdx) { - if (wsResCells[cIdx].hasGridConnections()) - { - gridIndex = wsResCells[cIdx].m_gridIndex; - gridCellIndex = wsResCells[cIdx].m_gridCellIndex; + gridIndex = wsResCells[cIdx].m_gridIndex; + gridCellIndex = wsResCells[cIdx].m_gridCellIndex; - cvf::cref cellVisibility = rvMan->cellVisibility(visGridParts[gpIdx], gridIndex, frameIndex); - if ((*cellVisibility)[gridCellIndex]) - { - return true; - } + cvf::cref cellVisibility = rvMan->cellVisibility(visGridParts[gpIdx], gridIndex, frameIndex); + if ((*cellVisibility)[gridCellIndex]) + { + return true; } } } diff --git a/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.cpp b/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.cpp index 609e2766ed..a36cf5752f 100644 --- a/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.cpp @@ -118,7 +118,7 @@ void RigSingleWellResultsData::computeStaticWellCellPath() for (size_t bIdx = 0; bIdx < m_wellCellsTimeSteps[0].m_wellResultBranches.size(); ++bIdx) { - size_t branchNumber = m_wellCellsTimeSteps[0].m_wellResultBranches[bIdx].m_branchIndex; + size_t branchNumber = m_wellCellsTimeSteps[0].m_wellResultBranches[bIdx].m_branchNumber; std::vector& frameCells = m_wellCellsTimeSteps[0].m_wellResultBranches[bIdx].m_wellCells; std::list< RigWellResultCell >& branch = staticWellBranches[branchNumber]; @@ -137,7 +137,7 @@ void RigSingleWellResultsData::computeStaticWellCellPath() for (size_t bIdx = 0; bIdx < m_wellCellsTimeSteps[tIdx].m_wellResultBranches.size(); ++bIdx) { - size_t branchNumber = m_wellCellsTimeSteps[tIdx].m_wellResultBranches[bIdx].m_branchIndex; + size_t branchNumber = m_wellCellsTimeSteps[tIdx].m_wellResultBranches[bIdx].m_branchNumber; std::vector& resBranch = m_wellCellsTimeSteps[tIdx].m_wellResultBranches[bIdx].m_wellCells; std::list< RigWellResultCell >& stBranch = staticWellBranches[branchNumber]; @@ -252,20 +252,12 @@ void RigSingleWellResultsData::computeStaticWellCellPath() for (bIt = staticWellBranches.begin(); bIt != staticWellBranches.end(); ++bIt) { - if (bIt->first >= m_wellCellsTimeSteps[0].m_wellResultBranches.size()) - { - continue; - } - - // Copy from first time step - RigWellResultBranch rigBranch = m_wellCellsTimeSteps[0].m_wellResultBranches[bIt->first]; - rigBranch.m_branchIndex = bIt->first; - - // Clear well cells, and insert the collection of well cells for the static situation - rigBranch.m_wellCells.clear(); + RigWellResultBranch rigBranch; + rigBranch.m_branchNumber = bIt->first; std::list< RigWellResultCell >& branch = bIt->second; std::list< RigWellResultCell >::iterator cIt; + for (cIt = branch.begin(); cIt != branch.end(); ++cIt) { RigWellResultCell rwc = *cIt; @@ -277,19 +269,3 @@ void RigSingleWellResultsData::computeStaticWellCellPath() } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RigSingleWellResultsData::setMultiSegmentWell(bool isMultiSegmentWell) -{ - m_isMultiSegmentWell = isMultiSegmentWell; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RigSingleWellResultsData::isMultiSegmentWell() const -{ - return m_isMultiSegmentWell; -} - diff --git a/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.h b/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.h index 3954c0d11b..7e27f23073 100644 --- a/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.h +++ b/ApplicationCode/ReservoirDataModel/RigSingleWellResultsData.h @@ -25,72 +25,33 @@ #include "RimDefines.h" #include #include -#include "cvfVector3.h" struct RigWellResultCell { RigWellResultCell() : m_gridIndex(cvf::UNDEFINED_SIZE_T), m_gridCellIndex(cvf::UNDEFINED_SIZE_T), - m_isOpen(false), - m_ertBranchId(-1), - m_ertSegmentId(-1), - m_averageCenter(cvf::Vec3d::UNDEFINED), - m_branchConnectionCount(0) + m_branchId(-1), + m_segmentId(-1), + m_isOpen(false) { } - bool hasBranchConnections() const - { - return m_branchConnectionCount != 0; - } - - bool hasGridConnections() const - { - return m_gridCellIndex != cvf::UNDEFINED_SIZE_T; - } - - bool hasConnections() const - { - return hasGridConnections() || hasBranchConnections(); - } - - size_t m_gridIndex; size_t m_gridCellIndex; //< Index to cell which is included in the well + int m_branchId; + int m_segmentId; bool m_isOpen; //< Marks the well as open or closed as of Eclipse simulation - - int m_ertBranchId; - int m_ertSegmentId; - - cvf::Vec3d m_averageCenter; - size_t m_branchConnectionCount; }; struct RigWellResultBranch { RigWellResultBranch() : - m_branchIndex(cvf::UNDEFINED_SIZE_T), - m_ertBranchId(-1), - m_outletBranchIndex(cvf::UNDEFINED_SIZE_T), - m_outletBranchHeadCellIndex(cvf::UNDEFINED_SIZE_T) + m_branchNumber(cvf::UNDEFINED_SIZE_T) {} - - size_t m_branchIndex; - int m_ertBranchId; - + size_t m_branchNumber; std::vector m_wellCells; - - // Grid cell from last connection in outlet segment. For MSW wells, this is either well head or a well result cell in another branch - // For standard wells, this is always well head. - RigWellResultCell m_branchHead; - - // Grid cell from last connection in outlet segment. For MSW wells, this is either well head or a well result cell in another branch - // For standard wells, this is always well head. - size_t m_outletBranchIndex; - size_t m_outletBranchHeadCellIndex; - }; class RigWellResultFrame @@ -106,8 +67,6 @@ public: const RigWellResultCell* findResultCell(size_t gridIndex, size_t gridCellIndex) const { - CVF_ASSERT(gridIndex != cvf::UNDEFINED_SIZE_T && gridCellIndex != cvf::UNDEFINED_SIZE_T); - if (m_wellHead.m_gridCellIndex == gridCellIndex && m_wellHead.m_gridIndex == gridIndex ) { return &m_wellHead; @@ -128,21 +87,6 @@ public: return NULL; } - const RigWellResultCell* findResultCellFromOutletSpecification(size_t branchIndex, size_t wellResultCellIndex) const - { - if (branchIndex != cvf::UNDEFINED_SIZE_T && branchIndex < m_wellResultBranches.size()) - { - const RigWellResultBranch& resBranch = m_wellResultBranches[branchIndex]; - if (wellResultCellIndex != cvf::UNDEFINED_SIZE_T && wellResultCellIndex < resBranch.m_wellCells.size()) - { - return (&resBranch.m_wellCells[wellResultCellIndex]); - } - } - - return NULL; - } - - WellProductionType m_productionType; bool m_isOpen; RigWellResultCell m_wellHead; @@ -158,11 +102,6 @@ public: class RigSingleWellResultsData : public cvf::Object { public: - RigSingleWellResultsData() { m_isMultiSegmentWell = false; } - - void setMultiSegmentWell(bool isMultiSegmentWell); - bool isMultiSegmentWell() const; - bool hasWellResult(size_t resultTimeStepIndex) const; size_t firstResultTimeStep() const; @@ -174,7 +113,6 @@ public: public: QString m_wellName; - bool m_isMultiSegmentWell; std::vector m_resultTimeStepIndexToWellTimeStepIndex; // Well result timesteps may differ from result timesteps std::vector< RigWellResultFrame > m_wellCellsTimeSteps; diff --git a/ThirdParty/Ert/devel/cmake/cmake_pyc2 b/ThirdParty/Ert/devel/cmake/cmake_pyc2 index b32fd967a7..d1ecbf7279 100644 --- a/ThirdParty/Ert/devel/cmake/cmake_pyc2 +++ b/ThirdParty/Ert/devel/cmake/cmake_pyc2 @@ -11,11 +11,7 @@ target_file = sys.argv[2] (target_path , tail) = os.path.split( target_file ) if not os.path.exists( target_path ): - try: - os.makedirs( target_path ) - except: - # When running with make -j 4 there might be a race to create this directory. - pass + os.makedirs( target_path ) shutil.copyfile( src_file , target_file ) try: diff --git a/ThirdParty/Ert/devel/cmake/cmake_pyc_tree b/ThirdParty/Ert/devel/cmake/cmake_pyc_tree index eeeaa389b6..790ce984d9 100644 --- a/ThirdParty/Ert/devel/cmake/cmake_pyc_tree +++ b/ThirdParty/Ert/devel/cmake/cmake_pyc_tree @@ -17,10 +17,6 @@ for (root , dir_list , file_list) in os.walk( root_path ): (tmp , ext) = os.path.splitext( full_path ) if ext == ".py": py_file = full_path - pyc_file = full_path + "c" - if os.path.exists( pyc_file ): - os.unlink( pyc_file ) - try: print "Compiling: %s" % py_file py_compile.compile( py_file , doraise = True ) diff --git a/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt b/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt index 864aeaf500..afc4dba904 100644 --- a/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl/applications/CMakeLists.txt @@ -3,7 +3,6 @@ if (BUILD_APPLICATIONS) 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( esummary.x esummary.c ) add_executable( convert.x convert.c ) @@ -16,7 +15,7 @@ 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 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) else() # The stupid .x extension creates problems on windows add_executable( convert convert.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 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) endif() diff --git a/ThirdParty/Ert/devel/libecl/applications/makefile b/ThirdParty/Ert/devel/libecl/applications/makefile new file mode 100644 index 0000000000..7c3db2c7dd --- /dev/null +++ b/ThirdParty/Ert/devel/libecl/applications/makefile @@ -0,0 +1,163 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "MinGW Makefiles" Generator, CMake Version 2.8 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canoncical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +SHELL = cmd.exe + +# The CMake executable. +CMAKE_COMMAND = "C:\Program Files\CMake 2.8\bin\cmake.exe" + +# The command to remove a file. +RM = "C:\Program Files\CMake 2.8\bin\cmake.exe" -E remove -f + +# The program to use to edit the cache. +CMAKE_EDIT_COMMAND = "C:\Program Files\CMake 2.8\bin\cmake-gui.exe" + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = C:\code\ERT + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = C:\code\ERT + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + "C:\Program Files\CMake 2.8\bin\cmake-gui.exe" -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + "C:\Program Files\CMake 2.8\bin\cmake.exe" -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /d C:\code\ERT && $(CMAKE_COMMAND) -E cmake_progress_start C:\code\ERT\CMakeFiles C:\code\ERT\libecl\applications\CMakeFiles\progress.marks + cd /d C:\code\ERT && $(MAKE) -f CMakeFiles\Makefile2 libecl/applications/all + $(CMAKE_COMMAND) -E cmake_progress_start C:\code\ERT\CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /d C:\code\ERT && $(MAKE) -f CMakeFiles\Makefile2 libecl/applications/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /d C:\code\ERT && $(MAKE) -f CMakeFiles\Makefile2 libecl/applications/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /d C:\code\ERT && $(MAKE) -f CMakeFiles\Makefile2 libecl/applications/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /d C:\code\ERT && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +libecl/applications/CMakeFiles/grid_info.x.dir/rule: + cd /d C:\code\ERT && $(MAKE) -f CMakeFiles\Makefile2 libecl/applications/CMakeFiles/grid_info.x.dir/rule +.PHONY : libecl/applications/CMakeFiles/grid_info.x.dir/rule + +# Convenience name for target. +grid_info.x: libecl/applications/CMakeFiles/grid_info.x.dir/rule +.PHONY : grid_info.x + +# fast build rule for target. +grid_info.x/fast: + cd /d C:\code\ERT && $(MAKE) -f libecl\applications\CMakeFiles\grid_info.x.dir\build.make libecl/applications/CMakeFiles/grid_info.x.dir/build +.PHONY : grid_info.x/fast + +grid_info.obj: grid_info.c.obj +.PHONY : grid_info.obj + +# target to build an object file +grid_info.c.obj: + cd /d C:\code\ERT && $(MAKE) -f libecl\applications\CMakeFiles\grid_info.x.dir\build.make libecl/applications/CMakeFiles/grid_info.x.dir/grid_info.c.obj +.PHONY : grid_info.c.obj + +grid_info.i: grid_info.c.i +.PHONY : grid_info.i + +# target to preprocess a source file +grid_info.c.i: + cd /d C:\code\ERT && $(MAKE) -f libecl\applications\CMakeFiles\grid_info.x.dir\build.make libecl/applications/CMakeFiles/grid_info.x.dir/grid_info.c.i +.PHONY : grid_info.c.i + +grid_info.s: grid_info.c.s +.PHONY : grid_info.s + +# target to generate assembly for a file +grid_info.c.s: + cd /d C:\code\ERT && $(MAKE) -f libecl\applications\CMakeFiles\grid_info.x.dir\build.make libecl/applications/CMakeFiles/grid_info.x.dir/grid_info.c.s +.PHONY : grid_info.c.s + +# Help Target +help: + @$(CMAKE_COMMAND) -E echo "The following are some of the valid targets for this Makefile:" + @$(CMAKE_COMMAND) -E echo "... all (the default if no target is provided)" + @$(CMAKE_COMMAND) -E echo "... clean" + @$(CMAKE_COMMAND) -E echo "... depend" + @$(CMAKE_COMMAND) -E echo "... edit_cache" + @$(CMAKE_COMMAND) -E echo "... grid_info.x" + @$(CMAKE_COMMAND) -E echo "... rebuild_cache" + @$(CMAKE_COMMAND) -E echo "... grid_info.obj" + @$(CMAKE_COMMAND) -E echo "... grid_info.i" + @$(CMAKE_COMMAND) -E echo "... grid_info.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /d C:\code\ERT && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/ThirdParty/Ert/devel/libecl/applications/summary2csv.c b/ThirdParty/Ert/devel/libecl/applications/summary2csv.c index 2b9fb94eb9..2a43ed4725 100644 --- a/ThirdParty/Ert/devel/libecl/applications/summary2csv.c +++ b/ThirdParty/Ert/devel/libecl/applications/summary2csv.c @@ -27,32 +27,39 @@ -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; + +static void build_key_list( const ecl_sum_type * ecl_sum , stringlist_type * key_list ) { + int iw; 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; + stringlist_type * well_list = ecl_sum_alloc_well_list( ecl_sum , NULL ); + for (iw = 0; iw < stringlist_get_size( well_list ); iw++) { + const char * well = stringlist_iget( well_list , iw ); + char * wopt_key = ecl_sum_alloc_well_key( ecl_sum , "WOPR", 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. + */ + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WOPR", well) ); + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WOPT", well) ); + + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WGPR", well) ); + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WGPT", well) ); + + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WWPR", well) ); + stringlist_append_owned_ref( key_list , ecl_sum_alloc_well_key( ecl_sum , "WWPT", well) ); + } else + printf("Ignoring well: %s \n",well); + free( wopt_key ); + } + stringlist_free( well_list ); } int main(int argc , char ** argv) { { ecl_sum_fmt_type fmt; - bool well_rows = false; bool include_restart = true; int arg_offset = 1; @@ -64,49 +71,23 @@ int main(int argc , char ** argv) { { 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) + build_key_list( ecl_sum , key_list ); + { + char * csv_file = util_alloc_filename( NULL , ecl_sum_get_base(ecl_sum) , "txt"); // Weill save to current path; can use ecl_sum_get_path() to save to target path instead. + FILE * stream = util_fopen( csv_file , "w"); ecl_sum_fprintf(ecl_sum , stream , key_list , false , &fmt); - - stringlist_free( well_list ); + fclose( stream ); + free( csv_file ); + } 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/summary2csv2.c b/ThirdParty/Ert/devel/libecl/applications/summary2csv2.c deleted file mode 100644 index 7655f1f02b..0000000000 --- a/ThirdParty/Ert/devel/libecl/applications/summary2csv2.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - The file 'summary2csv2.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 void fprintf_line( const ecl_sum_type * ecl_sum , const ecl_sum_fmt_type * fmt , const char * well , int time_index , const stringlist_type * var_list , FILE * stream) { - /* WELL */ - fprintf(stream , fmt->header_fmt , well); - fprintf(stream , fmt->sep ); - - /* DAYS */ - fprintf(stream , fmt->days_fmt , ecl_sum_iget_sim_days(ecl_sum , time_index)); - fprintf(stream , fmt->sep ); - - /* DATE */ - { - struct tm ts; - const int DATE_STRING_LENGTH = 128; - char * date_string = util_malloc( DATE_STRING_LENGTH * sizeof * date_string); - time_t sim_time = ecl_sum_iget_sim_time(ecl_sum , time_index ); - util_localtime( &sim_time , &ts); - strftime( date_string , DATE_STRING_LENGTH - 1 , fmt->date_fmt , &ts); - fprintf(stream , date_string ); - free( date_string ); - } - - { - int ivar; - for (ivar = 0; ivar < stringlist_get_size( var_list ); ivar++) { - const char * var = stringlist_iget( var_list , ivar ); - double value = 0; - if (ecl_sum_has_well_var( ecl_sum , well , var )) - value = ecl_sum_get_well_var( ecl_sum , time_index , well , var ); - else - fprintf(stderr,"Missing variable:%s for well:%s - substituting 0.0 \n",var , well); - - fprintf(stream , fmt->sep ); - fprintf(stream , fmt->value_fmt , value ); - } - fprintf( stream , fmt->newline ); - } -} - - - -int main(int argc , char ** argv) { - { - ecl_sum_fmt_type fmt; - 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( ); - - fprintf(stream , fmt.header_fmt , "WELLNAME"); - - fprintf(stream , fmt.sep ); - fprintf(stream , fmt.header_fmt , "DAYS"); - - fprintf(stream , fmt.sep ); - fprintf(stream , fmt.header_fmt , "DATES"); - - { - int ivar; - for (ivar = 0; ivar < stringlist_get_size( var_list ); ivar++) { - const char * var = stringlist_iget( var_list , ivar ); - fprintf(stream , fmt.sep ); - fprintf(stream , fmt.header_fmt , var ); - } - fprintf(stream , "\n"); - } - - { - int iw; - for (iw = 0; iw < stringlist_get_size( well_list ); iw++) { - const char * well = stringlist_iget( well_list , iw ); - if (ecl_sum_is_oil_producer( ecl_sum , well )) { - int time_index; - for (time_index = 0; time_index < ecl_sum_get_data_length( ecl_sum ); time_index++) - fprintf_line( ecl_sum , &fmt , well , time_index , var_list , stream); - } - } - } - - stringlist_free( well_list ); - stringlist_free( key_list ); - ecl_sum_free(ecl_sum); - fclose( stream ); - free( csv_file ); - } else - fprintf(stderr,"summary2csv2: No summary data found for case:%s\n", data_file ); - - stringlist_free( var_list ); - } - } -} 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 ee007e3b08..2ab1448567 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_grid.h @@ -31,8 +31,6 @@ extern "C" { #include #include -#define ECL_GRID_GLOBAL_GRID "Global" // used as key in hash tables over grids. - typedef double (block_function_ftype) ( const double_vector_type *); typedef struct ecl_grid_struct ecl_grid_type; @@ -142,7 +140,6 @@ extern "C" { ecl_grid_type * ecl_grid_iget_lgr(const ecl_grid_type * main_grid , int lgr_nr); ecl_grid_type * ecl_grid_get_lgr(const ecl_grid_type * main_grid, const char * __lgr_name); bool ecl_grid_has_lgr(const ecl_grid_type * main_grid, const char * __lgr_name); - const char * ecl_grid_iget_lgr_name( const ecl_grid_type * ecl_grid , int lgr_nr); stringlist_type * ecl_grid_alloc_lgr_name_list(const ecl_grid_type * ecl_grid); int ecl_grid_get_parent_cell1( const ecl_grid_type * grid , int global_index); int ecl_grid_get_parent_cell3( const ecl_grid_type * grid , int i , int j , int k); @@ -174,8 +171,6 @@ extern "C" { void ecl_grid_cell_ri_export( const ecl_grid_type * ecl_grid , int global_index , double * ri_points); bool ecl_grid_dual_grid( const ecl_grid_type * ecl_grid ); - - UTIL_IS_INSTANCE_HEADER( ecl_grid ); #ifdef __cplusplus } diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw_magic.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw_magic.h index ece8f6ecf8..9bf019ffe2 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw_magic.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_kw_magic.h @@ -104,7 +104,6 @@ extern "C" { #define ZWEL_KW "ZWEL" #define ICON_KW "ICON" #define ISEG_KW "ISEG" -#define RSEG_KW "RSEG" #define ECLIPSE100_OIL_DEN_KW "OIL_DEN" #define ECLIPSE100_GAS_DEN_KW "GAS_DEN" @@ -136,9 +135,9 @@ extern "C" { #define INTEHEAD_NSEGMX_INDEX 176 #define INTEHEAD_NLBRMX_INDEX 177 #define INTEHEAD_NISEGZ_INDEX 178 -#define INTEHEAD_NRSEGZ_INDEX 179 #define INTEHEAD_NILBRZ_INDEX 180 + #define DOUBHEAD_DAYS_INDEX 0 /*****************************************************************/ @@ -231,11 +230,7 @@ extern "C" { #define CONGRAT_KW "CONGRAT" /* Gas ... */ #define CONORAT_KW "CONORAT" /* Oil ... */ #define CONPRES_KW "CONPRES" /* Pressure ... */ -#define CONLENST_KW "CONLENST" /* Length along MSW well */ -#define CONVTUB_KW "CONVTUB" /* Volumetric flow at tubing head conditions. */ -#define CONOTUB_KW "CONOTUB" /* Volumetric oil flow at tubing head conditions. */ -#define CONGTUB_KW "CONGTUB" /* Volumetric gas flow at tubing head conditions. */ -#define CONWTUB_KW "CONWTUB" /* Volumetric water flow at tubing head conditions. */ + #define WELLETC_TYPE_INDEX 5 /* At this keyword the WELLETC keyword contains a string diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_cell.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_cell.h deleted file mode 100644 index 4d8ad0754b..0000000000 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_cell.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'ecl_rft_cell.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 __ECL_RFT_CELL_H__ -#define __ECL_RFT_CELL_H__ -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define ECL_RFT_CELL_INVALID_VALUE -1 - -typedef struct ecl_rft_cell_struct ecl_rft_cell_type; - - - - -UTIL_IS_INSTANCE_HEADER( ecl_rft_cell ); - - ecl_rft_cell_type * ecl_rft_cell_alloc_PLT( int i , - int j , - int k , - double depth , - double pressure , - double orat , - double grat , - double wrat , - double connection_start, - double flowrate, - double oil_flowrate, - double gas_flowrate, - double water_flowrate); - - ecl_rft_cell_type * ecl_rft_cell_alloc_RFT( int i , int j , int k , double depth , double pressure , double swat , double sgas); - void ecl_rft_cell_free( ecl_rft_cell_type * cell ); - void ecl_rft_cell_free__( void * arg); - - bool ecl_rft_cell_ijk_equal( const ecl_rft_cell_type * cell , int i , int j , int k); - void ecl_rft_cell_get_ijk( const ecl_rft_cell_type * cell , int * i , int * j , int * k); - int ecl_rft_cell_get_i( const ecl_rft_cell_type * cell ); - int ecl_rft_cell_get_j( const ecl_rft_cell_type * cell ); - int ecl_rft_cell_get_k( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_depth( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_pressure( const ecl_rft_cell_type * cell ); - - double ecl_rft_cell_get_swat( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_sgas( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_soil( const ecl_rft_cell_type * cell ); - - double ecl_rft_cell_get_wrat( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_grat( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_orat( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_connection_start( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_flowrate( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_oil_flowrate( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_gas_flowrate( const ecl_rft_cell_type * cell ); - double ecl_rft_cell_get_water_flowrate( const ecl_rft_cell_type * cell ); - - int ecl_rft_cell_cmp__( const void * arg1 , const void * arg2); - int ecl_rft_cell_cmp( const ecl_rft_cell_type * cell1 , const ecl_rft_cell_type * cell2); - -#ifdef __cplusplus -} -#endif - -#endif - 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 1118fdd011..d6ff6ded25 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 @@ -39,13 +39,15 @@ void ecl_rft_file_free(ecl_rft_file_type * ); void ecl_rft_file_block(const ecl_rft_file_type * , double , const char * , int , const double * , int * , int * , int *); void ecl_rft_file_fprintf_rft_obs(const ecl_rft_file_type * , double , const char * , const char *, const char * , double); ecl_rft_node_type * ecl_rft_file_get_node(const ecl_rft_file_type * , const char * ); +void ecl_rft_file_summarize(const ecl_rft_file_type * , bool ); +void ecl_rft_file_xml_summary( const ecl_rft_file_type * rft_file ); +const ecl_rft_node_type * ecl_rft_file_get_well_time_rft( const ecl_rft_file_type * rft_file , const char * well , time_t recording_time); int ecl_rft_file_get_size__( const ecl_rft_file_type * rft_file, const char * well_pattern , time_t recording_time); int ecl_rft_file_get_size( const ecl_rft_file_type * rft_file); -ecl_rft_node_type * ecl_rft_file_get_well_time_rft( const ecl_rft_file_type * rft_file , const char * well , time_t recording_time); -ecl_rft_node_type * ecl_rft_file_iget_node( const ecl_rft_file_type * rft_file , int index); -ecl_rft_node_type * ecl_rft_file_iget_well_rft( const ecl_rft_file_type * rft_file , const char * well, int index); +const ecl_rft_node_type * ecl_rft_file_iget_node( const ecl_rft_file_type * rft_file , int index); +const ecl_rft_node_type * ecl_rft_file_iget_well_rft( const ecl_rft_file_type * rft_file , const char * well, int index); bool ecl_rft_file_has_well( const ecl_rft_file_type * rft_file , const char * well); int ecl_rft_file_get_well_occurences( const ecl_rft_file_type * rft_file , const char * well); stringlist_type * ecl_rft_file_alloc_well_list(const ecl_rft_file_type * rft_file ); diff --git a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_node.h b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_node.h index 1a4f9fed27..f6fd0d7b7c 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_node.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rft_node.h @@ -24,7 +24,6 @@ extern "C" { #include #include -#include typedef enum { RFT = 1 , PLT = 2 , @@ -32,34 +31,28 @@ typedef enum { RFT = 1 , typedef struct ecl_rft_node_struct ecl_rft_node_type; -void ecl_rft_node_inplace_sort_cells( ecl_rft_node_type * rft_node ); -const ecl_rft_cell_type * ecl_rft_node_iget_cell_sorted( ecl_rft_node_type * rft_node , int index); -const ecl_rft_cell_type * ecl_rft_node_iget_cell( const ecl_rft_node_type * rft_node , int index); -const ecl_rft_cell_type * ecl_rft_node_lookup_ijk( const ecl_rft_node_type * rft_node , int i, int j , int k); +int ecl_rft_node_lookup_ijk( const ecl_rft_node_type * rft_node , int i, int j , int k); void ecl_rft_node_fprintf_rft_obs(const ecl_rft_node_type * , double , const char * , const char * , double ); ecl_rft_node_type * ecl_rft_node_alloc(const ecl_file_type * file_map ); const char * ecl_rft_node_get_well_name(const ecl_rft_node_type * ); void ecl_rft_node_free(ecl_rft_node_type * ); void ecl_rft_node_free__(void * ); +void ecl_rft_node_block2(const ecl_rft_node_type * , int , const double * , const double * , int * , int * , int *); +void ecl_rft_node_block(const ecl_rft_node_type * , double , int , const double * , int * , int * , int *); time_t ecl_rft_node_get_date(const ecl_rft_node_type * ); int ecl_rft_node_get_size(const ecl_rft_node_type * ); +void ecl_rft_node_summarize(const ecl_rft_node_type * , bool ); const char * ecl_rft_node_get_well_name( const ecl_rft_node_type * rft_node ); void ecl_rft_node_iget_ijk( const ecl_rft_node_type * rft_node , int index , int *i , int *j , int *k); -bool ecl_rft_node_is_RFT( const ecl_rft_node_type * rft_node ); -bool ecl_rft_node_is_PLT( const ecl_rft_node_type * rft_node ); -bool ecl_rft_node_is_SEGMENT( const ecl_rft_node_type * rft_node ); -bool ecl_rft_node_is_MSW( const ecl_rft_node_type * rft_node ); - +void ecl_rft_node_export_DEPTH(const ecl_rft_node_type * , const char * ); double ecl_rft_node_iget_pressure( const ecl_rft_node_type * rft_node , int index); double ecl_rft_node_iget_depth( const ecl_rft_node_type * rft_node , int index); double ecl_rft_node_iget_wrat( const ecl_rft_node_type * rft_node , int index); double ecl_rft_node_iget_grat( const ecl_rft_node_type * rft_node , int index); double ecl_rft_node_iget_orat( const ecl_rft_node_type * rft_node , int index); - double ecl_rft_node_iget_swat( const ecl_rft_node_type * rft_node , int index); double ecl_rft_node_iget_sgas( const ecl_rft_node_type * rft_node , int index); -double ecl_rft_node_iget_soil( const ecl_rft_node_type * rft_node , int index); #ifdef __cplusplus } 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 4068ed4528..a128e2adf1 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_rsthead.h @@ -63,7 +63,6 @@ extern "C" { int nswlmx; // The maximum number of segmented wells int nlbrmx; // The maximum number of lateral branches pr well int nilbrz; // The number of entries pr segment in ILBR array - int nrsegz; // The number of entries pr segment in RSEG array // Properteies from the LOGIHEAD keyword: bool dualp; 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 e31572f7ca..c62fc61f42 100644 --- a/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h +++ b/ThirdParty/Ert/devel/libecl/include/ert/ecl/ecl_sum.h @@ -200,7 +200,6 @@ typedef struct ecl_sum_struct ecl_sum_type; ecl_sum_tstep_type * ecl_sum_add_tstep( ecl_sum_type * ecl_sum , int report_step , double sim_days); void ecl_sum_update_wgname( ecl_sum_type * ecl_sum , smspec_node_type * node , const char * wgname ); - bool ecl_sum_is_oil_producer( const ecl_sum_type * ecl_sum , const char * well); char * ecl_sum_alloc_well_key( const ecl_sum_type * ecl_sum , const char * keyword , const char * wgname); UTIL_IS_INSTANCE_HEADER( ecl_sum ); diff --git a/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt b/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt index 92a66c89ac..1ddeaf0066 100644 --- a/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl/src/CMakeLists.txt @@ -2,9 +2,9 @@ include_directories( ext ) file(GLOB ext_source "ext/*.c" ) file(GLOB ext_header "ext/*.h" ) -set( source_files ecl_rsthead.c ecl_sum_tstep.c ecl_rst_file.c ecl_init_file.c ecl_grid_cache.c smspec_node.c ecl_kw_grdecl.c ecl_file_kw.c ecl_grav.c ecl_grav_calc.c ecl_smspec.c ecl_sum_data.c ecl_util.c ecl_kw.c ecl_sum.c fortio.c ecl_rft_file.c ecl_rft_node.c ecl_rft_cell.c ecl_grid.c ecl_coarse_cell.c ecl_box.c ecl_io_config.c ecl_file.c ecl_region.c point.c tetrahedron.c ecl_subsidence.c ecl_grid_dims.c grid_dims.c ecl_grav_common.c ${ext_source}) +set( source_files ecl_rsthead.c ecl_sum_tstep.c ecl_rst_file.c ecl_init_file.c ecl_grid_cache.c smspec_node.c ecl_kw_grdecl.c ecl_file_kw.c ecl_grav.c ecl_grav_calc.c ecl_smspec.c ecl_sum_data.c ecl_util.c ecl_kw.c ecl_sum.c fortio.c ecl_rft_file.c ecl_rft_node.c ecl_grid.c ecl_coarse_cell.c ecl_box.c ecl_io_config.c ecl_file.c ecl_region.c point.c tetrahedron.c ecl_subsidence.c ecl_grid_dims.c grid_dims.c ecl_grav_common.c ${ext_source}) -set( header_files ecl_rsthead.h ecl_sum_tstep.h ecl_rst_file.h ecl_init_file.h smspec_node.h ecl_grid_cache.h ecl_kw_grdecl.h ecl_file_kw.h ecl_grav.h ecl_grav_calc.h ecl_endian_flip.h ecl_smspec.h ecl_sum_data.h ecl_util.h ecl_kw.h ecl_sum.h fortio.h ecl_rft_file.h ecl_rft_node.h ecl_rft_cell.h ecl_box.h ecl_coarse_cell.h ecl_grid.h ecl_io_config.h ecl_file.h ecl_region.h ecl_kw_magic.h ecl_subsidence.h ecl_grid_dims.h grid_dims.h ${ext_header} ecl_grav_common.h) +set( header_files ecl_rsthead.h ecl_sum_tstep.h ecl_rst_file.h ecl_init_file.h smspec_node.h ecl_grid_cache.h ecl_kw_grdecl.h ecl_file_kw.h ecl_grav.h ecl_grav_calc.h ecl_endian_flip.h ecl_smspec.h ecl_sum_data.h ecl_util.h ecl_kw.h ecl_sum.h fortio.h ecl_rft_file.h ecl_rft_node.h ecl_box.h ecl_coarse_cell.h ecl_grid.h ecl_io_config.h ecl_file.h ecl_region.h ecl_kw_magic.h ecl_subsidence.h ecl_grid_dims.h grid_dims.h ${ext_header} ecl_grav_common.h) diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_grid.c b/ThirdParty/Ert/devel/libecl/src/ecl_grid.c index cde1086863..f8bc1846d4 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_grid.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_grid.c @@ -513,12 +513,12 @@ struct ecl_grid_struct { int parent_box[6]; /* integers i1,i2, j1,j2, k1,k2 of the parent grid region containing this lgr. the indices are inclusive - zero offset */ /* not used yet .. */ - int dualp_flag; - bool use_mapaxes; - double unit_x[2]; - double unit_y[2]; - double origo[2]; - float mapaxes[6]; + int dualp_flag; + bool use_mapaxes; + double unit_x[2]; + double unit_y[2]; + double origo[2]; + float mapaxes[6]; /*------------------------------: the fields below this line are used for blocking algorithms - and not allocated by default.*/ int block_dim; /* == 2 for maps and 3 for fields. 0 when not in use. */ int block_size; @@ -1089,7 +1089,6 @@ static void ecl_cell_init_regular( ecl_cell_type * cell , const double * offset /* starting on the ecl_grid proper implementation */ UTIL_SAFE_CAST_FUNCTION(ecl_grid , ECL_GRID_ID); -UTIL_IS_INSTANCE_FUNCTION( ecl_grid , ECL_GRID_ID); /** this function allocates the internal index_map and inv_index_map fields. @@ -2602,10 +2601,7 @@ ecl_grid_type * ecl_grid_load_case( const char * case_input ) { ecl_grid_type * ecl_grid = NULL; char * grid_file = ecl_grid_alloc_case_filename( case_input ); if (grid_file != NULL) { - - if (util_file_exists( grid_file )) - ecl_grid = ecl_grid_alloc( grid_file ); - + ecl_grid = ecl_grid_alloc( grid_file ); free( grid_file ); } return ecl_grid; @@ -3545,15 +3541,6 @@ stringlist_type * ecl_grid_alloc_lgr_name_list(const ecl_grid_type * ecl_grid) { } } -const char * ecl_grid_iget_lgr_name( const ecl_grid_type * ecl_grid , int lgr_nr) { - __assert_main_grid( ecl_grid ); - if (lgr_nr < (vector_get_size( ecl_grid->LGR_list ) - 1)) { - const ecl_grid_type * lgr = vector_iget( ecl_grid->LGR_list , lgr_nr + 1); - return lgr->name; - } else - return NULL; -} - /*****************************************************************/ diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_region.c b/ThirdParty/Ert/devel/libecl/src/ecl_region.c index cab67acd54..2c872abaf1 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_region.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_region.c @@ -689,9 +689,8 @@ void ecl_region_deselect_i1i2( ecl_region_type * region , int i1 , int i2) { static void ecl_region_select_j1j2__( ecl_region_type * region , int j1 , int j2 , bool select) { if (j1 > j2) util_abort("%s: i1 > i2 - this is illogical ... \n",__func__); - j1 = util_int_max(0 , j1); - j2 = util_int_min(region->grid_ny - 1 , j2); + j2 = util_int_min(region->grid_nx - 1 , j2); { int i,j,k; for (k = 0; k < region->grid_nz; k++) @@ -730,7 +729,7 @@ static void ecl_region_select_k1k2__( ecl_region_type * region , int k1 , int k2 if (k1 > k2) util_abort("%s: i1 > i2 - this is illogical ... \n",__func__); k1 = util_int_max(0 , k1); - k2 = util_int_min(region->grid_nz - 1 , k2); + k2 = util_int_min(region->grid_nx - 1 , k2); { int i,j,k; for (k = k1; k <= k2; k++) diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c b/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c deleted file mode 100644 index eab980b2f6..0000000000 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rft_cell.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'ecl_rft_cell.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 - - -#define ECL_RFT_CELL_TYPE_ID 99164012 -#define RFT_DATA_TYPE_ID 66787166 -#define PLT_DATA_TYPE_ID 87166667 - - -struct ecl_rft_cell_struct { - UTIL_TYPE_ID_DECLARATION; - int i,j,k; - double pressure; - double depth; - - void * data; -}; - - -typedef struct plt_data_struct plt_data_type; -typedef struct rft_data_struct rft_data_type; - - -struct rft_data_struct { - UTIL_TYPE_ID_DECLARATION; - double swat; - double sgas; -}; - - - - -struct plt_data_struct { - UTIL_TYPE_ID_DECLARATION; - double orat; - double wrat; - double grat; - double connection_start; - double flowrate; - double oil_flowrate; - double gas_flowrate; - double water_flowrate; -}; - - -/*****************************************************************/ - -static rft_data_type * rft_data_alloc( double swat , double sgas) { - rft_data_type * data = util_malloc( sizeof * data ); - UTIL_TYPE_ID_INIT( data , RFT_DATA_TYPE_ID ); - - data->swat = swat; - data->sgas = sgas; - - return data; -} - - -static void rft_data_free( rft_data_type * data ) { - free( data ); -} - -static UTIL_TRY_CAST_FUNCTION_CONST( rft_data , RFT_DATA_TYPE_ID) -static UTIL_IS_INSTANCE_FUNCTION( rft_data , RFT_DATA_TYPE_ID) - -/*****************************************************************/ - - static plt_data_type * plt_data_alloc( double orat , double grat , double wrat,double connection_start, double flowrate , double oil_flowrate , double gas_flowrate , double water_flowrate) { - plt_data_type * data = util_malloc( sizeof * data ); - UTIL_TYPE_ID_INIT( data , PLT_DATA_TYPE_ID ); - - data->orat = orat; - data->grat = grat; - data->wrat = wrat; - data->connection_start = connection_start; - data->flowrate = flowrate; - data->oil_flowrate = oil_flowrate; - data->gas_flowrate = gas_flowrate; - data->water_flowrate = water_flowrate; - - return data; -} - - -static void plt_data_free( plt_data_type * data ) { - free( data ); -} - -static UTIL_TRY_CAST_FUNCTION_CONST( plt_data , PLT_DATA_TYPE_ID) -static UTIL_IS_INSTANCE_FUNCTION( plt_data , PLT_DATA_TYPE_ID) - - - -/*****************************************************************/ - -static UTIL_SAFE_CAST_FUNCTION( ecl_rft_cell , ECL_RFT_CELL_TYPE_ID) -static UTIL_SAFE_CAST_FUNCTION_CONST( ecl_rft_cell , ECL_RFT_CELL_TYPE_ID) -UTIL_IS_INSTANCE_FUNCTION( ecl_rft_cell , ECL_RFT_CELL_TYPE_ID) - - - -static ecl_rft_cell_type * ecl_rft_cell_alloc_common(int i , int j , int k , double depth , double pressure) { - ecl_rft_cell_type * cell = util_malloc( sizeof * cell ); - UTIL_TYPE_ID_INIT( cell , ECL_RFT_CELL_TYPE_ID ); - - cell->i = i; - cell->j = j; - cell->k = k; - cell->depth = depth; - cell->pressure = pressure; - - return cell; -} - - - -ecl_rft_cell_type * ecl_rft_cell_alloc_RFT( int i , int j , int k , double depth , double pressure , double swat , double sgas) { - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_common( i , j , k , depth , pressure ); - - cell->data = rft_data_alloc( swat , sgas ); - return cell; -} - - -ecl_rft_cell_type * ecl_rft_cell_alloc_PLT( int i , - int j , - int k , - double depth , - double pressure , - double orat , - double grat , - double wrat, - double connection_start, - double flowrate , - double oil_flowrate , - double gas_flowrate , - double water_flowrate) { - - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_common( i , j , k , depth , pressure ); - - cell->data = plt_data_alloc( orat , grat , wrat , connection_start , flowrate , oil_flowrate , gas_flowrate , water_flowrate); - return cell; -} - - - -void ecl_rft_cell_free( ecl_rft_cell_type * cell ) { - if (rft_data_is_instance( cell->data )) - rft_data_free( cell->data ); - else if (plt_data_is_instance( cell->data )) - plt_data_free( cell->data ); - - free( cell ); -} - -void ecl_rft_cell_free__( void * arg) { - ecl_rft_cell_type * cell = ecl_rft_cell_safe_cast( arg ); - ecl_rft_cell_free( cell ); -} - - -/*****************************************************************/ - -int ecl_rft_cell_get_i( const ecl_rft_cell_type * cell ) { - return cell->i; -} - -int ecl_rft_cell_get_j( const ecl_rft_cell_type * cell ) { - return cell->j; -} - -int ecl_rft_cell_get_k( const ecl_rft_cell_type * cell ) { - return cell->k; -} - -void ecl_rft_cell_get_ijk( const ecl_rft_cell_type * cell , int * i , int * j , int * k) { - *i = cell->i; - *j = cell->j; - *k = cell->k; -} - -double ecl_rft_cell_get_depth( const ecl_rft_cell_type * cell ) { - return cell->depth; -} - -double ecl_rft_cell_get_pressure( const ecl_rft_cell_type * cell ) { - return cell->pressure; -} - - -/*****************************************************************/ - -double ecl_rft_cell_get_swat( const ecl_rft_cell_type * cell ) { - const rft_data_type * data = rft_data_try_cast_const( cell->data ); - if (data) - return data->swat; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_sgas( const ecl_rft_cell_type * cell ) { - const rft_data_type * data = rft_data_try_cast_const( cell->data ); - if (data) - return data->sgas; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_soil( const ecl_rft_cell_type * cell ) { - const rft_data_type * data = rft_data_try_cast_const( cell->data ); - if (data) - return 1 - (data->swat + data->sgas); - else - return ECL_RFT_CELL_INVALID_VALUE; -} - -/*****************************************************************/ - -double ecl_rft_cell_get_orat( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->orat; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_grat( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->grat; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_wrat( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->wrat; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - -double ecl_rft_cell_get_connection_start( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->connection_start; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_flowrate( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->flowrate; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_oil_flowrate( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->oil_flowrate; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_gas_flowrate( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->gas_flowrate; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - -double ecl_rft_cell_get_water_flowrate( const ecl_rft_cell_type * cell ) { - const plt_data_type * data = plt_data_try_cast_const( cell->data ); - if (data) - return data->water_flowrate; - else - return ECL_RFT_CELL_INVALID_VALUE; -} - - - - - -/*****************************************************************/ - - - -bool ecl_rft_cell_ijk_equal( const ecl_rft_cell_type * cell , int i , int j , int k) { - return ( (i == cell->i) && - (j == cell->j) && - (k == cell->k) ); -} - - -/* - Currently only comparison based on connection length along PLT is supported. -*/ -int ecl_rft_cell_cmp( const ecl_rft_cell_type * cell1 , const ecl_rft_cell_type * cell2) { - double val1 = ecl_rft_cell_get_connection_start( cell1 ); - double val2 = ecl_rft_cell_get_connection_start( cell2 ); - - if (val1 < val2) - return -1; - else if (val1 == val2) - return 0; - else - return 0; - -} - - -int ecl_rft_cell_cmp__( const void * arg1 , const void * arg2) { - const ecl_rft_cell_type * cell1 = ecl_rft_cell_safe_cast_const( arg1 ); - const ecl_rft_cell_type * cell2 = ecl_rft_cell_safe_cast_const( arg2 ); - return ecl_rft_cell_cmp( cell1 , cell2 ); -} diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rft_file.c b/ThirdParty/Ert/devel/libecl/src/ecl_rft_file.c index f06f9d00c2..f65f0e6937 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rft_file.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rft_file.c @@ -226,8 +226,8 @@ int ecl_rft_file_get_size__( const ecl_rft_file_type * rft_file, const char * we for ( i=0; i < vector_get_size( rft_file->data ); i++) { const ecl_rft_node_type * rft = vector_iget_const( rft_file->data , i); - if (well_pattern) { - if (util_fnmatch( well_pattern , ecl_rft_node_get_well_name( rft )) != 0) + if (well_pattern != NULL) { + if (!util_fnmatch( well_pattern , ecl_rft_node_get_well_name( rft ))) continue; } @@ -269,8 +269,8 @@ const char * ecl_rft_file_get_filename( const ecl_rft_file_type * rft_file ) { handle that. */ -ecl_rft_node_type * ecl_rft_file_iget_node( const ecl_rft_file_type * rft_file , int index) { - return vector_iget( rft_file->data , index ); +const ecl_rft_node_type * ecl_rft_file_iget_node( const ecl_rft_file_type * rft_file , int index) { + return vector_iget_const( rft_file->data , index ); } @@ -301,7 +301,7 @@ ecl_rft_node_type * ecl_rft_file_iget_node( const ecl_rft_file_type * rft_file , -ecl_rft_node_type * ecl_rft_file_iget_well_rft( const ecl_rft_file_type * rft_file , const char * well, int index) { +const ecl_rft_node_type * ecl_rft_file_iget_well_rft( const ecl_rft_file_type * rft_file , const char * well, int index) { const int_vector_type * index_vector = hash_get(rft_file->well_index , well); return ecl_rft_file_iget_node( rft_file , int_vector_iget(index_vector , index)); } @@ -315,8 +315,8 @@ ecl_rft_node_type * ecl_rft_file_iget_well_rft( const ecl_rft_file_type * rft_fi */ -ecl_rft_node_type * ecl_rft_file_get_well_time_rft( const ecl_rft_file_type * rft_file , const char * well , time_t recording_time) { - ecl_rft_node_type * node = NULL; +const ecl_rft_node_type * ecl_rft_file_get_well_time_rft( const ecl_rft_file_type * rft_file , const char * well , time_t recording_time) { + const ecl_rft_node_type * node = NULL; if (hash_has_key( rft_file->well_index , well)) { const int_vector_type * index_vector = hash_get(rft_file->well_index , well); int index = 0; @@ -367,6 +367,56 @@ stringlist_type * ecl_rft_file_alloc_well_list(const ecl_rft_file_type * rft_fil } +/*****************************************************************/ +void ecl_rft_file_summarize(const ecl_rft_file_type * rft_vector , bool show_completions) { + int iw; + for (iw = 0; iw < vector_get_size( rft_vector->data ); iw++) { + ecl_rft_node_summarize(vector_iget( rft_vector->data , iw) , show_completions); + printf("\n"); + } +} + +void ecl_rft_file_xml_summary( const ecl_rft_file_type * rft_file ) { + stringlist_type * wells = ecl_rft_file_alloc_well_list( rft_file ); + printf("\n"); + { + int iw; + for (iw = 0; iw < stringlist_get_size( wells ); iw++) { + const char * well = stringlist_iget(wells , iw); + printf(" \n"); + { + int it; + for (it = 0; it < ecl_rft_file_get_well_occurences( rft_file , well ); it++) { + const ecl_rft_node_type * node = ecl_rft_file_iget_well_rft( rft_file , well , it); + time_t date = ecl_rft_node_get_date( node ); + { + int mday, year,month; + util_set_date_values( date , &mday , &month , &year); + printf(" \n"); + printf(" %02d/%02d/%4d \n",mday,month,year); + { + int num_cells = ecl_rft_node_get_size( node ); + int icell; + for (icell = 0; icell < num_cells; icell++) { + int i,j,k; + ecl_rft_node_iget_ijk( node , icell , &i , &j , &k); + printf(" \n"); + printf(" %g \n", ecl_rft_node_iget_pressure( node, icell)); + printf(" %g \n" , ecl_rft_node_iget_depth( node , icell)); + printf(" %3d,%3d,%3d \n",i,j,k); + printf(" \n"); + } + } + printf(" \n"); + } + } + } + printf(" \n"); + } + } + printf("\n"); + stringlist_free( wells ); +} diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c b/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c index 07f60948b3..6c37f90306 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rft_node.c @@ -25,14 +25,12 @@ #include #include -#include -#include #include #include #include #include -#include + /** The RFT's from several wells, and possibly also several timesteps @@ -50,20 +48,80 @@ */ +/** + Here comes some small structs containing various pieces of + information. Observe the following which is common to all these + structs: + + * In the implementation only 'full instance' are employed, and + not pointers. This implies that the code does not provide + xxx_alloc() and xx_free() functions. + + * They should NOT be exported out of this file. +*/ + + +/** + This type is used to hold the coordinates of a perforated + cell. This type is used irrespective of whether this is a simple + RFT or a PLT. +*/ + +typedef struct { + int i; + int j; + int k; + double depth; + double pressure; /* both CONPRES from PLT and PRESSURE from RFT are internalized as pressure in the cell_type. */ +} cell_type; + +/*-----------------------------------------------------------------*/ +/** + Type which contains the information for one cell in an RFT. +*/ +typedef struct { + double swat; + double sgas; +} rft_data_type; + + +/*-----------------------------------------------------------------*/ +/** + Type which contains the information for one cell in an PLT. +*/ +typedef struct { + double orat; + double grat; + double wrat; + /* There is quite a lot of more information in the PLT - not yet internalized. */ +} plt_data_type; + + + + +/* This is not implemented at all ..... */ +typedef struct { + double data; +} segment_data_type; + #define ECL_RFT_NODE_ID 887195 struct ecl_rft_node_struct { UTIL_TYPE_ID_DECLARATION; char * well_name; /* Name of the well. */ + int size; /* The number of entries in this RFT vector (i.e. the number of cells) .*/ ecl_rft_enum data_type; /* What type of data: RFT|PLT|SEGMENT */ time_t recording_date; /* When was the RFT recorded - date.*/ double days; /* When was the RFT recorded - days after simulaton start. */ - bool MSW; - - bool sort_perm_in_sync ; - int_vector_type * sort_perm; - vector_type *cells; + cell_type *cells; /* Coordinates and depth of the well cells. */ + + /* Only one of segment_data, rft_data or plt_data can be != NULL */ + segment_data_type * segment_data; + rft_data_type * rft_data; + plt_data_type * plt_data; + + bool __vertical_well; /* Internal variable - when this is true we can try to block - otherwise it is NO FUXXXX WAY. */ }; @@ -73,7 +131,7 @@ struct ecl_rft_node_struct { that is not (yet) supported. */ -static ecl_rft_node_type * ecl_rft_node_alloc_empty(const char * data_type_string) { +static ecl_rft_node_type * ecl_rft_node_alloc_empty(int size , const char * data_type_string) { ecl_rft_enum data_type = SEGMENT; /* According to the ECLIPSE documentaton. */ @@ -82,7 +140,7 @@ static ecl_rft_node_type * ecl_rft_node_alloc_empty(const char * data_type_strin else if (strchr(data_type_string, 'R') != NULL) data_type = RFT; else if (strchr(data_type_string , 'S') != NULL) - data_type = SEGMENT; + data_type = SEGMENT; else util_abort("%s: Could not determine type of RFT/PLT/SEGMENT data - aborting\n",__func__); @@ -95,13 +153,24 @@ static ecl_rft_node_type * ecl_rft_node_alloc_empty(const char * data_type_strin { ecl_rft_node_type * rft_node = util_malloc(sizeof * rft_node ); + rft_node->plt_data = NULL; + rft_node->rft_data = NULL; + rft_node->segment_data = NULL; + UTIL_TYPE_ID_INIT( rft_node , ECL_RFT_NODE_ID ); - rft_node->cells = vector_alloc_new(); - rft_node->data_type = data_type; - rft_node->sort_perm = NULL; - rft_node->sort_perm_in_sync = false; + rft_node->cells = util_calloc( size , sizeof * rft_node->cells ); + if (data_type == RFT) + rft_node->rft_data = util_calloc( size , sizeof * rft_node->rft_data ); + else if (data_type == PLT) + rft_node->plt_data = util_calloc( size , sizeof * rft_node->plt_data); + else if (data_type == SEGMENT) + rft_node->segment_data = util_calloc( size , sizeof * rft_node->segment_data ); + rft_node->__vertical_well = false; + rft_node->size = size; + rft_node->data_type = data_type; + return rft_node; } } @@ -111,137 +180,112 @@ UTIL_SAFE_CAST_FUNCTION( ecl_rft_node , ECL_RFT_NODE_ID ); UTIL_IS_INSTANCE_FUNCTION( ecl_rft_node , ECL_RFT_NODE_ID ); -static void ecl_rft_node_append_cell( ecl_rft_node_type * rft_node , ecl_rft_cell_type * cell) { - vector_append_owned_ref( rft_node->cells , cell , ecl_rft_cell_free__ ); - rft_node->sort_perm_in_sync = false; -} - - - -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); - const ecl_kw_type * conjpos = ecl_file_iget_named_kw( rft , CONJPOS_KW , 0); - const ecl_kw_type * conkpos = ecl_file_iget_named_kw( rft , CONKPOS_KW , 0); - 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 float * SW = ecl_kw_get_float_ptr( swat_kw ); - const float * SG = ecl_kw_get_float_ptr( sgas_kw ); - const float * P = ecl_kw_get_float_ptr( pressure_kw ); - const float * depth = ecl_kw_get_float_ptr( depth_kw ); - const int * i = ecl_kw_get_int_ptr( conipos ); - const int * j = ecl_kw_get_int_ptr( conjpos ); - const int * k = ecl_kw_get_int_ptr( conkpos ); - - { - int c; - for (c = 0; c < ecl_kw_get_size( conipos ); c++) { - /* The connection coordinates are shifted -= 1; i.e. all internal usage is offset 0. */ - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_RFT( i[c] - 1 , j[c] - 1 , k[c] - 1 , - depth[c] , P[c] , SW[c] , SG[c]); - ecl_rft_node_append_cell( rft_node , cell ); - } - } -} - - - - - -static void ecl_rft_node_init_PLT_cells( ecl_rft_node_type * rft_node , const ecl_file_type * rft) { - /* For PLT there is quite a lot of extra information which is not yet internalized. */ - const ecl_kw_type * conipos = ecl_file_iget_named_kw( rft , CONIPOS_KW , 0); - const ecl_kw_type * conjpos = ecl_file_iget_named_kw( rft , CONJPOS_KW , 0); - const ecl_kw_type * conkpos = ecl_file_iget_named_kw( rft , CONKPOS_KW , 0); - - const int * i = ecl_kw_get_int_ptr( conipos ); - const int * j = ecl_kw_get_int_ptr( conjpos ); - const int * k = ecl_kw_get_int_ptr( conkpos ); - - 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 * 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)); - const float * gas_flowrate = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONGTUB_KW , 0)); - const float * water_flowrate = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONWTUB_KW , 0)); - const float * connection_start = NULL; - - /* This keyword is ONLY present if we are dealing with a MSW well. */ - if (ecl_file_has_kw( rft , CONLENST_KW)) - connection_start = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , CONLENST_KW , 0)); - - { - int c; - for ( c = 0; c < ecl_kw_get_size( conipos ); c++) { - ecl_rft_cell_type * cell; - double cs = 0; - if (connection_start) - cs = connection_start[c]; - - /* The connection coordinates are shifted -= 1; i.e. all internal usage is offset 0. */ - cell = ecl_rft_cell_alloc_PLT( i[c] -1 , j[c] -1 , k[c] -1 , - depth[c] , P[c] , OR[c] , GR[c] , WR[c] , cs , flowrate[c] , oil_flowrate[c] , gas_flowrate[c] , water_flowrate[c]); - ecl_rft_node_append_cell( rft_node , cell ); - } - } -} - - - - - -static void ecl_rft_node_init_cells( ecl_rft_node_type * rft_node , const ecl_file_type * rft ) { - - if (rft_node->data_type == RFT) - ecl_rft_node_init_RFT_cells( rft_node , rft ); - else if (rft_node->data_type == PLT) - ecl_rft_node_init_PLT_cells( rft_node , rft ); - -} - - ecl_rft_node_type * ecl_rft_node_alloc(const ecl_file_type * rft) { + ecl_kw_type * conipos = ecl_file_iget_named_kw(rft , CONIPOS_KW , 0); ecl_kw_type * welletc = ecl_file_iget_named_kw(rft , WELLETC_KW , 0); - ecl_rft_node_type * rft_node = ecl_rft_node_alloc_empty(ecl_kw_iget_ptr(welletc , WELLETC_TYPE_INDEX)); + ecl_rft_node_type * rft_node = ecl_rft_node_alloc_empty(ecl_kw_get_size(conipos) , + ecl_kw_iget_ptr(welletc , WELLETC_TYPE_INDEX)); if (rft_node != NULL) { ecl_kw_type * date_kw = ecl_file_iget_named_kw( rft , DATE_KW , 0); + ecl_kw_type * conjpos = ecl_file_iget_named_kw( rft , CONJPOS_KW , 0); + ecl_kw_type * conkpos = ecl_file_iget_named_kw( rft , CONKPOS_KW , 0); + ecl_kw_type * depth_kw; + if (rft_node->data_type == RFT) + depth_kw = ecl_file_iget_named_kw( rft , DEPTH_KW , 0); + else + depth_kw = ecl_file_iget_named_kw( rft , CONDEPTH_KW , 0); rft_node->well_name = util_alloc_strip_copy( ecl_kw_iget_ptr(welletc , WELLETC_NAME_INDEX)); - + /* Time information. */ { int * time = ecl_kw_get_int_ptr( date_kw ); rft_node->recording_date = util_make_date( time[DATE_DAY_INDEX] , time[DATE_MONTH_INDEX] , time[DATE_YEAR_INDEX] ); } rft_node->days = ecl_kw_iget_float( ecl_file_iget_named_kw( rft , TIME_KW , 0 ) , 0); - if (ecl_file_has_kw( rft , CONLENST_KW)) - rft_node->MSW = true; - else - rft_node->MSW = false; + + + /* Cell information */ + { + const int * i = ecl_kw_get_int_ptr( conipos ); + const int * j = ecl_kw_get_int_ptr( conjpos ); + const int * k = ecl_kw_get_int_ptr( conkpos ); + const float * depth = ecl_kw_get_float_ptr( depth_kw ); - ecl_rft_node_init_cells( rft_node , rft ); + + /* The ECLIPSE file has offset-1 coordinates, and that is + currently what we store; What a fxxxing mess. */ + int c; + for (c = 0; c < rft_node->size; c++) { + rft_node->cells[c].i = i[c]; + rft_node->cells[c].j = j[c]; + rft_node->cells[c].k = k[c]; + rft_node->cells[c].depth = depth[c]; + } + + } + + + /* Now we are done with the information which is common to both RFT and PLT. */ + if (rft_node->data_type == RFT) { + const float * SW = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , SWAT_KW , 0)); + const float * SG = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , SGAS_KW , 0)); + const float * P = ecl_kw_get_float_ptr( ecl_file_iget_named_kw( rft , PRESSURE_KW , 0)); + int c; + for (c = 0; c < rft_node->size; c++) { + rft_node->rft_data[c].swat = SW[c]; + rft_node->rft_data[c].sgas = SG[c]; + rft_node->cells[c].pressure = P[c]; + } + } else if (rft_node->data_type == PLT) { + /* For PLT there is quite a lot of extra information which is not yet internalized. */ + 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)); + int c; + for ( c = 0; c < rft_node->size; c++) { + rft_node->plt_data[c].orat = OR[c]; + rft_node->plt_data[c].grat = GR[c]; + rft_node->plt_data[c].wrat = WR[c]; + rft_node->cells[c].pressure = P[c]; + } + } else { + /* Segmnet code - not implemented. */ + } + + /* + Checking if the well is monotone in the z-direction; if it is we can + reasonably safely try some blocking. + */ + { + int i; + double first_delta = rft_node->cells[1].depth - rft_node->cells[0].depth; + rft_node->__vertical_well = true; + for (i = 1; i < (rft_node->size - 1); i++) { + double delta = rft_node->cells[i+1].depth - rft_node->cells[i].depth; + if (fabs(delta) > 0) { + if (first_delta * delta < 0) + rft_node->__vertical_well = false; + } + } + } } return rft_node; } - + const char * ecl_rft_node_get_well_name(const ecl_rft_node_type * rft_node) { return rft_node->well_name; } void ecl_rft_node_free(ecl_rft_node_type * rft_node) { - free(rft_node->well_name); - vector_free( rft_node->cells ); - if (rft_node->sort_perm) - int_vector_free( rft_node->sort_perm ); - + free(rft_node->cells); + util_safe_free(rft_node->segment_data); + util_safe_free(rft_node->rft_data); + util_safe_free(rft_node->plt_data); free(rft_node); } @@ -251,10 +295,247 @@ void ecl_rft_node_free__(void * void_node) { +void ecl_rft_node_summarize(const ecl_rft_node_type * rft_node , bool print_cells) { + int i; + printf("--------------------------------------------------------------\n"); + printf("Well.............: %s \n",rft_node->well_name); + printf("Completed cells..: %d \n",rft_node->size); + printf("Vertical well....: %d \n",rft_node->__vertical_well); + { + int day , month , year; + util_set_date_values(rft_node->recording_date , &day , &month , &year); + printf("Recording date...: %02d/%02d/%4d / %g days after simulation start.\n" , day , month , year , rft_node->days); + } + printf("-----------------------------------------\n"); + if (print_cells) { + printf(" i j k Depth Pressure\n"); + printf("-----------------------------------------\n"); + for (i=0; i < rft_node->size; i++) + printf("%2d: %3d %3d %3d | %10.2f %10.2f \n",i, + rft_node->cells[i].i , + rft_node->cells[i].j , + rft_node->cells[i].k , + rft_node->cells[i].depth, + rft_node->cells[i].pressure); + printf("-----------------------------------------\n"); + } +} -int ecl_rft_node_get_size(const ecl_rft_node_type * rft_node) { return vector_get_size( rft_node->cells ); } +/* + For this function to work the ECLIPSE keyword COMPORD must be used. +*/ +void ecl_rft_node_block(const ecl_rft_node_type * rft_node , double epsilon , int size , const double * tvd , int * i, int * j , int *k) { + int rft_index , tvd_index; + int last_rft_index = 0; + bool * blocked = util_calloc(rft_node->size , sizeof * blocked); + + if (!rft_node->__vertical_well) { + fprintf(stderr,"**************************************************************************\n"); + fprintf(stderr,"** WARNING: Trying to block horizontal well: %s from only tvd, this **\n", ecl_rft_node_get_well_name(rft_node)); + fprintf(stderr,"** is extremely error prone - blocking should be carefully checked. **\n"); + fprintf(stderr,"**************************************************************************\n"); + } + ecl_rft_node_summarize(rft_node , true); + for (tvd_index = 0; tvd_index < size; tvd_index++) { + double min_diff = 100000; + int min_diff_index = 0; + if (rft_node->__vertical_well) { + for (rft_index = last_rft_index; rft_index < rft_node->size; rft_index++) { + double diff = fabs(tvd[tvd_index] - rft_node->cells[rft_index].depth); + if (diff < min_diff) { + min_diff = diff; + min_diff_index = rft_index; + } + } + } else { + for (rft_index = last_rft_index; rft_index < (rft_node->size - 1); rft_index++) { + int next_rft_index = rft_index + 1; + if ((rft_node->cells[next_rft_index].depth - tvd[tvd_index]) * (tvd[tvd_index] - rft_node->cells[rft_index].depth) > 0) { + /* + We have bracketing ... !! + */ + min_diff_index = rft_index; + min_diff = 0; + printf("Bracketing: %g | %g | %g \n",rft_node->cells[next_rft_index].depth , + tvd[tvd_index] , rft_node->cells[rft_index].depth); + break; + } + } + } + + if (min_diff < epsilon) { + i[tvd_index] = rft_node->cells[min_diff_index].i; + j[tvd_index] = rft_node->cells[min_diff_index].j; + k[tvd_index] = rft_node->cells[min_diff_index].k; + + blocked[min_diff_index] = true; + last_rft_index = min_diff_index; + } else { + i[tvd_index] = -1; + j[tvd_index] = -1; + k[tvd_index] = -1; + fprintf(stderr,"%s: Warning: True Vertical Depth:%g (Point:%d/%d) could not be mapped to well_path for well:%s \n",__func__ , tvd[tvd_index] , tvd_index+1 , size , rft_node->well_name); + } + } + free(blocked); +} + + + +/* + Faen - dette er jeg egentlig *ikke* interessert i .... +*/ +static double * ecl_rft_node_alloc_well_md(const ecl_rft_node_type * rft_node , int fixed_index , double md_offset) { + double * md = util_calloc(rft_node->size , sizeof * md ); + + + + return md; +} + + +void ecl_rft_node_block_static(const ecl_rft_node_type * rft_node , int rft_index_offset , int md_size , int md_index_offset , const double * md , int * i , int * j , int * k) { + const double md_offset = md[md_index_offset]; + double *well_md = ecl_rft_node_alloc_well_md(rft_node , rft_index_offset , md_offset); + int index; + for (index = 0; index < md_size; index++) { + i[index] = -1; + j[index] = -1; + k[index] = -1; + } + i[md_index_offset] = rft_node->cells[rft_index_offset].i; + j[md_index_offset] = rft_node->cells[rft_index_offset].j; + k[md_index_offset] = rft_node->cells[rft_index_offset].k; + + + free(well_md); +} + + + + +void ecl_rft_node_block2(const ecl_rft_node_type * rft_node , int tvd_size , const double * md , const double * tvd , int * i, int * j , int *k) { + const double epsilon = 1.0; + int rft_index ; + + ecl_rft_node_summarize(rft_node , true); + { + double min_diff = 100000; + int min_diff_index = 0; + int tvd_index = 0; + double local_tvd_peak = 99999999; + { + int index; + for (index = 1; index < (tvd_size - 1); index++) + if (tvd[index] < tvd[index+1] && tvd[index] < tvd[index-1]) + local_tvd_peak = util_double_min(tvd[index] , local_tvd_peak); + } + + + while (min_diff > epsilon) { + for (rft_index = 0; rft_index < rft_node->size; rft_index++) { + double diff = fabs(tvd[tvd_index] - rft_node->cells[rft_index].depth); + if (diff < min_diff) { + min_diff = diff; + min_diff_index = rft_index; + } + } + if (min_diff > epsilon) { + tvd_index++; + if (tvd_index == tvd_size) { + fprintf(stderr,"%s: could not map tvd:%g to well-path depth - aborting \n",__func__ , tvd[tvd_index]); + abort(); + } + + if (tvd[tvd_index] > local_tvd_peak) { + fprintf(stderr,"%s: could not determine offset before well path becomes multivalued - aborting\n",__func__); + abort(); + } + } + } + ecl_rft_node_block_static(rft_node , min_diff_index , tvd_size , tvd_index , md , i , j , k); + } +} + + + + + +void ecl_rft_node_fprintf_rft_obs(const ecl_rft_node_type * rft_node , double epsilon , const char * tvd_file , const char * target_file , double p_std) { + FILE * input_stream = util_fopen(tvd_file , "r" ); + int size = util_count_file_lines(input_stream); + double *p = util_calloc(size , sizeof * p ); + double *tvd = util_calloc(size , sizeof * tvd ); + double *md = util_calloc(size , sizeof * md ); + int *i = util_calloc(size , sizeof * i); + int *j = util_calloc(size , sizeof * j); + int *k = util_calloc(size , sizeof * k); + + { + double *arg1 , *arg2; + int line; + arg1 = p; + arg2 = tvd; + for (line = 0; line < size; line++) + if (fscanf(input_stream , "%lg %lg", &arg1[line] , &arg2[line]) != 2) { + fprintf(stderr,"%s: something wrong when reading: %s - aborting \n",__func__ , tvd_file); + abort(); + } + } + fclose(input_stream); + ecl_rft_node_block(rft_node , epsilon , size , tvd , i , j , k); + + { + int active_lines = 0; + int line; + for (line = 0; line < size; line++) + if (i[line] != -1) + active_lines++; + + if (active_lines > 0) { + FILE * output_stream = util_fopen(target_file , "w" ); + fprintf(output_stream,"%d\n" , active_lines); + for (line = 0; line < size; line++) + if (i[line] != -1) + fprintf(output_stream , "%3d %3d %3d %g %g\n",i[line] , j[line] , k[line] , p[line] , p_std); + fclose(output_stream); + } else + fprintf(stderr,"%s: Warning found no active cells when blocking well:%s to data_file:%s \n",__func__ , rft_node->well_name , tvd_file); + } + + free(md); + free(p); + free(tvd); + free(i); + free(j); + free(k); +} + + +void ecl_rft_node_export_DEPTH(const ecl_rft_node_type * rft_node , const char * path) { + FILE * stream; + char * full; + char * filename = util_alloc_string_copy(ecl_rft_node_get_well_name(rft_node)); + int i; + + filename = util_strcat_realloc(filename , ".DEPTH"); + full = util_alloc_filename(path , filename , NULL); + + stream = fopen(full , "w"); + for (i=0; i < rft_node->size; i++) + fprintf(stream , "%d %g \n",i , rft_node->cells[i].depth); + fclose(stream); + + /* + free(full); + free(filename); + */ +} + + +int ecl_rft_node_get_size(const ecl_rft_node_type * rft_node) { return rft_node->size; } time_t ecl_rft_node_get_date(const ecl_rft_node_type * rft_node) { return rft_node->recording_date; } ecl_rft_enum ecl_rft_node_get_type(const ecl_rft_node_type * rft_node) { return rft_node->data_type; } @@ -262,87 +543,65 @@ ecl_rft_enum ecl_rft_node_get_type(const ecl_rft_node_type * rft_node) { return /*****************************************************************/ /* various functions to access properties at the cell level */ -const ecl_rft_cell_type * ecl_rft_node_iget_cell( const ecl_rft_node_type * rft_node , int index) { - return vector_iget_const( rft_node->cells , index ); -} - - -static void ecl_rft_node_create_sort_perm( ecl_rft_node_type * rft_node ) { - if (rft_node->sort_perm) - int_vector_free( rft_node->sort_perm ); - - rft_node->sort_perm = vector_alloc_sort_perm( rft_node->cells , ecl_rft_cell_cmp__ ); - rft_node->sort_perm_in_sync = true; -} - -void ecl_rft_node_inplace_sort_cells( ecl_rft_node_type * rft_node ) { - vector_sort( rft_node->cells , ecl_rft_cell_cmp__ ); - rft_node->sort_perm_in_sync = false; // The permutation is no longer sorted; however the vector itself is sorted .... -} - -const ecl_rft_cell_type * ecl_rft_node_iget_cell_sorted( ecl_rft_node_type * rft_node , int index) { - if (ecl_rft_node_is_RFT( rft_node )) - return ecl_rft_node_iget_cell( rft_node , index ); +static cell_type * ecl_rft_node_iget_cell( const ecl_rft_node_type * rft_node , int index) { + if (index < rft_node->size) + return &rft_node->cells[index]; else { - if (!rft_node->sort_perm_in_sync) - ecl_rft_node_create_sort_perm( rft_node ); - - return vector_iget_const( rft_node->cells , int_vector_iget( rft_node->sort_perm , index )); + util_abort("%s: asked for cell:%d max:%d \n",__func__ , index , rft_node->size - 1); + return NULL; } } double ecl_rft_node_iget_depth( const ecl_rft_node_type * rft_node , int index) { - const ecl_rft_cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); - return ecl_rft_cell_get_depth( cell ); + const cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); + return cell->depth; } double ecl_rft_node_iget_pressure( const ecl_rft_node_type * rft_node , int index) { - const ecl_rft_cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); - return ecl_rft_cell_get_pressure( cell ); + const cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); + return cell->pressure; } void ecl_rft_node_iget_ijk( const ecl_rft_node_type * rft_node , int index , int *i , int *j , int *k) { - const ecl_rft_cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); - - ecl_rft_cell_get_ijk( cell , i,j,k); + const cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); + *i = cell->i; + *j = cell->j; + *k = cell->k; } -const ecl_rft_cell_type * ecl_rft_node_lookup_ijk( const ecl_rft_node_type * rft_node , int i, int j , int k) { +int ecl_rft_node_lookup_ijk( const ecl_rft_node_type * rft_node , int i, int j , int k) { int index = 0; - int size = ecl_rft_node_get_size( rft_node ); while (true) { - const ecl_rft_cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); - - if (ecl_rft_cell_ijk_equal( cell , i , j , k )) - return cell; + const cell_type * cell = ecl_rft_node_iget_cell( rft_node , index ); + if ((cell->i == (i+1)) && (cell->j == (j+1)) && (cell->k == (k+1))) /* OK - found it. */ + return index; index++; - if (index == size) /* Could not find it. */ - return NULL; + if (index == rft_node->size) /* Could not find it. */ + return -1; } } - static void assert_type_and_index( const ecl_rft_node_type * rft_node , ecl_rft_enum target_type , int index) { if (rft_node->data_type != target_type) util_abort("%s: wrong type \n",__func__); - if ((index < 0) || (index >= vector_get_size( rft_node->cells ))) + if ((index < 0) || (index >= rft_node->size)) util_abort("%s: invalid index:%d \n",__func__ , index); } double ecl_rft_node_iget_sgas( const ecl_rft_node_type * rft_node , int index) { assert_type_and_index( rft_node , RFT , index ); { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index ); - return ecl_rft_cell_get_sgas( cell ); + const rft_data_type rft_data = rft_node->rft_data[ index ]; + return rft_data.sgas; } } @@ -350,28 +609,17 @@ double ecl_rft_node_iget_sgas( const ecl_rft_node_type * rft_node , int index) { double ecl_rft_node_iget_swat( const ecl_rft_node_type * rft_node , int index) { assert_type_and_index( rft_node , RFT , index ); { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index ); - return ecl_rft_cell_get_swat( cell ); + const rft_data_type rft_data = rft_node->rft_data[ index ]; + return rft_data.swat; } } -double ecl_rft_node_iget_soil( const ecl_rft_node_type * rft_node , int index) { - assert_type_and_index( rft_node , RFT , index ); - { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index ); - return ecl_rft_cell_get_soil( cell ); - } -} - -/*****************************************************************/ - - double ecl_rft_node_iget_orat( const ecl_rft_node_type * rft_node , int index) { assert_type_and_index( rft_node , PLT , index ); { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index ); - return ecl_rft_cell_get_orat( cell ); + const plt_data_type plt_data = rft_node->plt_data[ index ]; + return plt_data.orat; } } @@ -379,8 +627,8 @@ double ecl_rft_node_iget_orat( const ecl_rft_node_type * rft_node , int index) { double ecl_rft_node_iget_wrat( const ecl_rft_node_type * rft_node , int index) { assert_type_and_index( rft_node , PLT , index ); { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index); - return ecl_rft_cell_get_wrat( cell ); + const plt_data_type plt_data = rft_node->plt_data[ index ]; + return plt_data.wrat; } } @@ -388,36 +636,8 @@ double ecl_rft_node_iget_wrat( const ecl_rft_node_type * rft_node , int index) { double ecl_rft_node_iget_grat( const ecl_rft_node_type * rft_node , int index) { assert_type_and_index( rft_node , PLT , index ); { - const ecl_rft_cell_type * cell = vector_iget_const( rft_node->cells , index); - return ecl_rft_cell_get_grat( cell ); + const plt_data_type plt_data = rft_node->plt_data[ index ]; + return plt_data.grat; } } - -bool ecl_rft_node_is_MSW( const ecl_rft_node_type * rft_node ) { - return rft_node->MSW; -} - - -bool ecl_rft_node_is_PLT( const ecl_rft_node_type * rft_node ) { - if (rft_node->data_type == PLT) - return true; - else - return false; -} - -bool ecl_rft_node_is_SEGMENT( const ecl_rft_node_type * rft_node ) { - if (rft_node->data_type == SEGMENT) - return true; - else - return false; -} - -bool ecl_rft_node_is_RFT( const ecl_rft_node_type * rft_node ) { - if (rft_node->data_type == RFT) - return true; - else - return false; -} - - diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c b/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c index b0baf402ed..05995747cc 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_rsthead.c @@ -71,7 +71,6 @@ ecl_rsthead_type * ecl_rsthead_ialloc( const ecl_file_type * rst_file , int occu rsthead->nisegz = data[INTEHEAD_NISEGZ_INDEX]; rsthead->nsegmx = data[INTEHEAD_NSEGMX_INDEX]; rsthead->nswlmx = data[INTEHEAD_NSWLMX_INDEX]; - rsthead->nrsegz = data[INTEHEAD_NRSEGZ_INDEX]; // The only derived quantity rsthead->sim_time = rsthead_date( rsthead->day , rsthead->month , rsthead->year ); diff --git a/ThirdParty/Ert/devel/libecl/src/ecl_sum.c b/ThirdParty/Ert/devel/libecl/src/ecl_sum.c index d9282726f7..f07e1de355 100644 --- a/ThirdParty/Ert/devel/libecl/src/ecl_sum.c +++ b/ThirdParty/Ert/devel/libecl/src/ecl_sum.c @@ -333,7 +333,6 @@ void ecl_sum_free( ecl_sum_type * ecl_sum ) { util_safe_free( ecl_sum->path ); util_safe_free( ecl_sum->ext ); - util_safe_free( ecl_sum->abs_path ); free( ecl_sum->base ); free( ecl_sum->ecl_case ); @@ -883,6 +882,8 @@ void ecl_sum_fmt_init_summary_x( ecl_sum_fmt_type * fmt ) { #define DATE_STRING_LENGTH 128 static void __ecl_sum_fprintf_line( const ecl_sum_type * ecl_sum , FILE * stream , int internal_index , const bool_vector_type * has_var , const int_vector_type * var_index , char * date_string , const ecl_sum_fmt_type * fmt) { + int ivar , day,month,year; + util_set_date_values(ecl_sum_iget_sim_time(ecl_sum , internal_index ) , &day , &month, &year); fprintf(stream , fmt->days_fmt , ecl_sum_iget_sim_days(ecl_sum , internal_index)); fprintf(stream , fmt->sep ); @@ -894,15 +895,12 @@ static void __ecl_sum_fprintf_line( const ecl_sum_type * ecl_sum , FILE * stream fprintf(stream , date_string ); } - { - int ivar; - for (ivar = 0; ivar < int_vector_size( var_index ); ivar++) { - if (bool_vector_iget( has_var , ivar )) { - fprintf(stream , fmt->sep); - fprintf(stream , fmt->value_fmt , ecl_sum_iget(ecl_sum , internal_index, int_vector_iget( var_index , ivar ))); - } + for (ivar = 0; ivar < int_vector_size( var_index ); ivar++) { + if (bool_vector_iget( has_var , ivar )) { + fprintf(stream , fmt->sep); + fprintf(stream , fmt->value_fmt , ecl_sum_iget(ecl_sum , internal_index, int_vector_iget( var_index , ivar ))); } - } + } fprintf(stream , fmt->newline); } @@ -982,7 +980,6 @@ void ecl_sum_fprintf(const ecl_sum_type * ecl_sum , FILE * stream , const string bool_vector_free( has_var ); if (current_locale != NULL) setlocale( LC_NUMERIC , current_locale); - free( date_string ); } #undef DATE_STRING_LENGTH @@ -1166,21 +1163,6 @@ char * ecl_sum_alloc_well_key( const ecl_sum_type * ecl_sum , const char * keywo -bool ecl_sum_is_oil_producer( const ecl_sum_type * ecl_sum , const char * well) { - const char * WOPT_KEY = "WOPT"; - bool oil_producer = false; - - if (ecl_sum_has_well_var( ecl_sum , well , WOPT_KEY)) { - int last_step = ecl_sum_get_data_length( ecl_sum ) - 1; - double wopt = ecl_sum_get_well_var( ecl_sum , last_step , well , WOPT_KEY); - - if (wopt > 0) - oil_producer = true; - } - - return oil_producer; -} - diff --git a/ThirdParty/Ert/devel/libecl/tests/CMakeLists.txt b/ThirdParty/Ert/devel/libecl/tests/CMakeLists.txt index 42c8765bf9..2236c08c93 100644 --- a/ThirdParty/Ert/devel/libecl/tests/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl/tests/CMakeLists.txt @@ -8,20 +8,6 @@ target_link_libraries( ecl_restart_test ecl ) add_test( ecl_restart_test ${EXECUTABLE_OUTPUT_PATH}/ecl_restart_test ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.UNRST ) -add_executable( ecl_grid_lgr_name ecl_grid_lgr_name.c ) -target_link_libraries( ecl_grid_lgr_name ecl ) -set_target_properties( ecl_grid_lgr_name PROPERTIES COMPILE_FLAGS "-Werror") -add_test( ecl_grid_lgr_name ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_lgr_name ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.EGRID) - -add_executable( ecl_region ecl_region.c ) -target_link_libraries( ecl_region ecl ) -add_test( ecl_region ${EXECUTABLE_OUTPUT_PATH}/ecl_region ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID ) - - -add_executable( ecl_grid_case ecl_grid_case.c ) -target_link_libraries( ecl_grid_case ecl ) -add_test( ecl_grid_case ${EXECUTABLE_OUTPUT_PATH}/ecl_grid_case ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE ) - add_executable( ecl_lgr_test ecl_lgr_test.c ) target_link_libraries( ecl_lgr_test ecl ) @@ -89,35 +75,20 @@ target_link_libraries( ecl_rsthead ecl ) add_test( ecl_rsthead ${EXECUTABLE_OUTPUT_PATH}/ecl_rsthead ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.UNRST ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/DualPoro/DUALPORO.X0005 ) -add_executable( ecl_rft ecl_rft.c ) -target_link_libraries( ecl_rft ecl ) -add_test( ecl_rft_rft ${EXECUTABLE_OUTPUT_PATH}/ecl_rft ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.RFT RFT) -add_test( ecl_rft_plt ${EXECUTABLE_OUTPUT_PATH}/ecl_rft ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/RFT/TEST1_1A.RFT PLT) - -add_executable( ecl_rft_cell ecl_rft_cell.c ) -target_link_libraries( ecl_rft_cell ecl ) -add_test( ecl_rft_cell ${EXECUTABLE_OUTPUT_PATH}/ecl_rft_cell ) - - -set_property( TEST ecl_fmt PROPERTY LABELS StatoilData ) -set_property( TEST ecl_coarse_test PROPERTY LABELS StatoilData ) -set_property( TEST ecl_restart_test PROPERTY LABELS StatoilData ) -set_property( TEST ecl_lgr_test1 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_lgr_test2 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_lgr_test3 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_grid_lgr_name PROPERTY LABELS StatoilData ) -set_property( TEST ecl_grid_simple PROPERTY LABELS StatoilData ) -set_property( TEST ecl_dualp PROPERTY LABELS StatoilData ) -set_property( TEST ecl_sum_test 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 ) -set_property( TEST ecl_grid_dims4 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_grid_dims5 PROPERTY LABELS StatoilData ) -set_property( TEST ecl_file PROPERTY LABELS StatoilData) -set_property( TEST ecl_rsthead PROPERTY LABELS StatoilData) -set_property( TEST ecl_region PROPERTY LABELS StatoilData) -set_property( TEST ecl_grid_case PROPERTY LABELS StatoilData) -set_property( TEST ecl_rft_rft PROPERTY LABELS StatoilData) -set_property( TEST ecl_rft_plt PROPERTY LABELS StatoilData) +set_property( TEST ecl_fmt PROPERTY LABELS Statoil ) +set_property( TEST ecl_coarse_test PROPERTY LABELS Statoil ) +set_property( TEST ecl_restart_test PROPERTY LABELS Statoil ) +set_property( TEST ecl_lgr_test1 PROPERTY LABELS Statoil ) +set_property( TEST ecl_lgr_test2 PROPERTY LABELS Statoil ) +set_property( TEST ecl_lgr_test3 PROPERTY LABELS Statoil ) +set_property( TEST ecl_grid_simple PROPERTY LABELS Statoil ) +set_property( TEST ecl_dualp PROPERTY LABELS Statoil ) +set_property( TEST ecl_sum_test PROPERTY LABELS Statoil ) +set_property( TEST ecl_fortio PROPERTY LABELS Statoil) +set_property( TEST ecl_grid_dims1 PROPERTY LABELS Statoil ) +set_property( TEST ecl_grid_dims2 PROPERTY LABELS Statoil ) +set_property( TEST ecl_grid_dims3 PROPERTY LABELS Statoil ) +set_property( TEST ecl_grid_dims4 PROPERTY LABELS Statoil ) +set_property( TEST ecl_grid_dims5 PROPERTY LABELS Statoil ) +set_property( TEST ecl_file PROPERTY LABELS Statoil) +set_property( TEST ecl_rsthead PROPERTY LABELS Statoil) diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_case.c b/ThirdParty/Ert/devel/libecl/tests/ecl_grid_case.c deleted file mode 100644 index cbf40c6a83..0000000000 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_case.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'ecl_grid_case.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 - - -void test_grid( const char * input , bool expected) { - ecl_grid_type * grid = ecl_grid_load_case( input ); - if (expected) { - test_assert_true( ecl_grid_is_instance( grid )); - ecl_grid_free( grid ); - } else - test_assert_NULL( grid ); -} - - -int main(int argc , char ** argv) { - const char * grid_file = argv[1]; - const char * case_path = argv[2]; - - test_grid( grid_file , true ); - test_grid( case_path , true ); - test_grid( "/tmp/does/not/exists/file.EGRID" , false ); - test_grid( "/tmp/does/not/exists/CASE" , false ); - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_lgr_name.c b/ThirdParty/Ert/devel/libecl/tests/ecl_grid_lgr_name.c deleted file mode 100644 index a9d54a951f..0000000000 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_grid_lgr_name.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'ecl_grid_lgr_name.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 - - - -int main(int argc , char ** argv) { - const char * grid_file = argv[1]; - ecl_grid_type * ecl_grid = ecl_grid_alloc( grid_file ); - - test_assert_int_equal( 1 , ecl_grid_get_num_lgr( ecl_grid )); - test_assert_string_equal( "LGR1" , ecl_grid_iget_lgr_name( ecl_grid , 0 )); - test_assert_string_equal( NULL , ecl_grid_iget_lgr_name( ecl_grid , 1 )); - - ecl_grid_free( ecl_grid ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_region.c b/ThirdParty/Ert/devel/libecl/tests/ecl_region.c deleted file mode 100644 index 2c0b339814..0000000000 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_region.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (C) 2012 Statoil ASA, Norway. - - The file 'ecl_region.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 - -void test_list( int volume , int nactive , ecl_region_type * region ) { - const int_vector_type * active_list; - const int_vector_type * global_list; - active_list = ecl_region_get_active_list( region ); - global_list = ecl_region_get_global_list( region ); - test_assert_int_equal( nactive , int_vector_size( active_list )); - test_assert_int_equal( volume , int_vector_size( global_list )); - - - ecl_region_deselect_all( region ); - active_list = ecl_region_get_active_list( region ); - global_list = ecl_region_get_global_list( region ); - test_assert_int_equal( 0 , int_vector_size( active_list )); - test_assert_int_equal( 0 , int_vector_size( global_list )); -} - - - -void test_slice( const ecl_grid_type * grid ) { - int nx = ecl_grid_get_nx( grid ); - int ny = ecl_grid_get_ny( grid ); - int nz = ecl_grid_get_nz( grid ); - int nactive = ecl_grid_get_nactive( grid ); - ecl_region_type * region = ecl_region_alloc( grid , false ); - - ecl_region_select_i1i2( region , 0 , nx - 1); - test_list( nx*ny*nz , nactive , region ); - ecl_region_select_j1j2( region , 0 , ny - 1); - test_list( nx*ny*nz , nactive , region ); - ecl_region_select_k1k2( region , 0 , nz - 1); - test_list( nx*ny*nz , nactive , region ); - - ecl_region_free( region ); -} - - -int main(int argc , char ** argv) { - const char * grid_file = argv[1]; - ecl_grid_type * grid = ecl_grid_alloc( grid_file ); - - test_slice( grid ); - - ecl_grid_free( grid ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_rft.c b/ThirdParty/Ert/devel/libecl/tests/ecl_rft.c deleted file mode 100644 index 88c0bad336..0000000000 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_rft.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'ecl_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 - - - - -// Hardcoded GURBAT values -void test_rft( const char * rft_file ) { - ecl_rft_file_type * rft = ecl_rft_file_alloc( rft_file ); - ecl_rft_node_type * rft_node = ecl_rft_file_iget_node( rft , 0 ); - - test_assert_true( ecl_rft_node_is_RFT( rft_node )); - test_assert_int_equal( 14 , ecl_rft_node_get_size( rft_node )); - test_assert_false( ecl_rft_node_is_MSW( rft_node )); - - test_assert_double_equal( 259.146 , ecl_rft_node_iget_pressure( rft_node , 0 )); - test_assert_double_equal( 0.0580598 , ecl_rft_node_iget_soil( rft_node , 0 )); - test_assert_double_equal( 0.940477 , ecl_rft_node_iget_swat( rft_node , 0 )); - test_assert_double_equal( 0.00146271 , ecl_rft_node_iget_sgas( rft_node , 0 )); - - { - int i,j,k; - - ecl_rft_node_iget_ijk( rft_node , 0 , &i , &j , &k ); - test_assert_int_equal( 32 , i ); - test_assert_int_equal( 53 , j ); - test_assert_int_equal( 0 , k ); - - ecl_rft_node_iget_ijk( rft_node , 13 , &i , &j , &k ); - test_assert_int_equal( 32 , i ); - test_assert_int_equal( 54 , j ); - test_assert_int_equal( 12 , k ); - - for (i=0; i < ecl_rft_node_get_size( rft_node ); i++) { - const ecl_rft_cell_type * cell1 = ecl_rft_node_iget_cell( rft_node , i ); - const ecl_rft_cell_type * cell2 = ecl_rft_node_iget_cell_sorted( rft_node , i ); - - test_assert_ptr_equal( cell1 , cell2 ); - } - } - ecl_rft_node_inplace_sort_cells( rft_node ); - - ecl_rft_file_free( rft ); -} - - -// Have no such case yet ... -void test_plt_msw( const char * plt_file ) { - -} - - -// Hardcoded values from a test case with a PLT. -void test_plt( const char * plt_file ) { - ecl_rft_file_type * plt = ecl_rft_file_alloc( plt_file ); - ecl_rft_node_type * plt_node = ecl_rft_file_iget_node( plt , 11 ); - - test_assert_true( ecl_rft_node_is_PLT( plt_node )); - test_assert_false( ecl_rft_node_is_MSW( plt_node )); - test_assert_int_equal( 22 , ecl_rft_node_get_size( plt_node )); - - test_assert_double_equal( 244.284 , ecl_rft_node_iget_pressure( plt_node , 0 )); - test_assert_double_equal( 167.473 , ecl_rft_node_iget_orat( plt_node , 0 )); - test_assert_double_equal( 41682.2 , ecl_rft_node_iget_grat( plt_node , 0 )); - test_assert_double_equal( 0.958927 , ecl_rft_node_iget_wrat( plt_node , 0 )); - - { - int i,j,k; - - ecl_rft_node_iget_ijk( plt_node , 0 , &i , &j , &k ); - test_assert_int_equal( 39 , i ); - test_assert_int_equal( 33 , j ); - test_assert_int_equal( 16 , k ); - - ecl_rft_node_iget_ijk( plt_node , 21 , &i , &j , &k ); - test_assert_int_equal( 44 , i ); - test_assert_int_equal( 34 , j ); - test_assert_int_equal( 7 , k ); - - for (i=0; i < ecl_rft_node_get_size( plt_node ); i++) { - const ecl_rft_cell_type * cell1 = ecl_rft_node_iget_cell( plt_node , i ); - const ecl_rft_cell_type * cell2 = ecl_rft_node_iget_cell_sorted( plt_node , i ); - - test_assert_ptr_equal( cell1 , cell2 ); - } - ecl_rft_node_inplace_sort_cells( plt_node ); - } - - ecl_rft_file_free( plt ); -} - - - -int main( int argc , char ** argv) { - const char * rft_file = argv[1]; - const char * mode_string = argv[2]; - - if (strcmp( mode_string , "RFT") == 0) - test_rft( rft_file ); - else if (strcmp( mode_string , "PLT") == 0) - test_plt( rft_file ); - else if (strcmp( mode_string , "MSW-PLT") == 0) - test_plt_msw( rft_file ); - else - test_error_exit("Second argument:%s not recognized. Valid values are: RFT and PLT" , mode_string); - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_rft_cell.c b/ThirdParty/Ert/devel/libecl/tests/ecl_rft_cell.c deleted file mode 100644 index 0c37cf48d0..0000000000 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_rft_cell.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'ecl_rft_cell.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 - - - -void test_rft_cell() { - const int i = 10; - const int j = 11; - const int k = 12; - - const double depth = 100; - const double pressure = 200; - const double swat = 0.25; - const double sgas = 0.35; - - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_RFT(i,j,k,depth,pressure,swat,sgas); - - test_assert_int_equal( i , ecl_rft_cell_get_i( cell )); - test_assert_int_equal( j , ecl_rft_cell_get_j( cell )); - test_assert_int_equal( k , ecl_rft_cell_get_k( cell )); - - { - int ii,jj,kk; - ecl_rft_cell_get_ijk( cell , &ii , &jj , &kk); - test_assert_int_equal( i , ii); - test_assert_int_equal( j , jj); - test_assert_int_equal( k , kk); - } - - test_assert_double_equal( depth , ecl_rft_cell_get_depth( cell )); - test_assert_double_equal( pressure , ecl_rft_cell_get_pressure( cell )); - test_assert_double_equal( swat , ecl_rft_cell_get_swat( cell )); - test_assert_double_equal( sgas , ecl_rft_cell_get_sgas( cell )); - test_assert_double_equal( 1 - (swat + sgas) , ecl_rft_cell_get_soil( cell )); - - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_orat( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_grat( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_wrat( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_flowrate( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_connection_start( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_oil_flowrate( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_gas_flowrate( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_water_flowrate( cell )); - - ecl_rft_cell_free( cell ); - { - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_RFT(i,j,k,depth,pressure,swat,sgas); - - test_assert_true( ecl_rft_cell_ijk_equal( cell , i , j , k )); - test_assert_false( ecl_rft_cell_ijk_equal( cell , i , j , k + 1 )); - - ecl_rft_cell_free__( cell ); - } -} - - - -void test_plt_cell() { - const int i = 10; - const int j = 11; - const int k = 12; - - const double depth = 100; - const double pressure = 200; - const double orat = 0.25; - const double grat = 0.35; - const double wrat = 0.45; - const double flowrate = 100.0; - const double connection_start = 891; - const double oil_flowrate = 0.891; - const double gas_flowrate = 7771; - const double water_flowrate = 77614; - - ecl_rft_cell_type * cell = ecl_rft_cell_alloc_PLT(i,j,k,depth,pressure,orat,grat,wrat,connection_start,flowrate,oil_flowrate , gas_flowrate , water_flowrate); - - test_assert_int_equal( i , ecl_rft_cell_get_i( cell )); - test_assert_int_equal( j , ecl_rft_cell_get_j( cell )); - test_assert_int_equal( k , ecl_rft_cell_get_k( cell )); - - { - int ii,jj,kk; - ecl_rft_cell_get_ijk( cell , &ii , &jj , &kk); - test_assert_int_equal( i , ii); - test_assert_int_equal( j , jj); - test_assert_int_equal( k , kk); - } - - test_assert_double_equal( depth , ecl_rft_cell_get_depth( cell )); - test_assert_double_equal( pressure , ecl_rft_cell_get_pressure( cell )); - - test_assert_double_equal( orat , ecl_rft_cell_get_orat( cell )); - test_assert_double_equal( grat , ecl_rft_cell_get_grat( cell )); - test_assert_double_equal( wrat , ecl_rft_cell_get_wrat( cell )); - test_assert_double_equal( connection_start, ecl_rft_cell_get_connection_start( cell )); - test_assert_double_equal(flowrate , ecl_rft_cell_get_flowrate( cell )); - - test_assert_double_equal(oil_flowrate , ecl_rft_cell_get_oil_flowrate( cell )); - test_assert_double_equal(gas_flowrate , ecl_rft_cell_get_gas_flowrate( cell )); - test_assert_double_equal(water_flowrate , ecl_rft_cell_get_water_flowrate( cell )); - - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_swat( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_sgas( cell )); - test_assert_double_equal( ECL_RFT_CELL_INVALID_VALUE , ecl_rft_cell_get_soil( cell )); - - ecl_rft_cell_free( cell ); -} - - - - - -int main( int argc , char ** argv) { - - test_rft_cell(); - test_plt_cell(); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl/tests/ecl_sum_test.c b/ThirdParty/Ert/devel/libecl/tests/ecl_sum_test.c index a383cfa2ec..beb85d875d 100644 --- a/ThirdParty/Ert/devel/libecl/tests/ecl_sum_test.c +++ b/ThirdParty/Ert/devel/libecl/tests/ecl_sum_test.c @@ -51,12 +51,6 @@ void test_days( const ecl_sum_type * ecl_sum ) { } -void test_is_oil_producer( const ecl_sum_type * ecl_sum) { - test_assert_true( ecl_sum_is_oil_producer( ecl_sum , "OP_1")); - test_assert_false( ecl_sum_is_oil_producer( ecl_sum , "WI_1")); - test_assert_false( ecl_sum_is_oil_producer( ecl_sum , "DoesNotExist")); -} - @@ -67,7 +61,6 @@ int main( int argc , char ** argv) { test_time_range( ecl_sum ); test_days( ecl_sum ); - test_is_oil_producer(ecl_sum); exit(0); } diff --git a/ThirdParty/Ert/devel/libecl_well/CMakeLists.txt b/ThirdParty/Ert/devel/libecl_well/CMakeLists.txt index c59e944fce..3edab07684 100644 --- a/ThirdParty/Ert/devel/libecl_well/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl_well/CMakeLists.txt @@ -1,5 +1,5 @@ add_subdirectory( src ) -if (BUILD_APPLICATIONS) +if (BUILD_APPLICATONS) add_subdirectory( applications ) endif() diff --git a/ThirdParty/Ert/devel/libecl_well/applications/CMakeLists.txt b/ThirdParty/Ert/devel/libecl_well/applications/CMakeLists.txt index 578a9d2901..4e4b78d7d6 100644 --- a/ThirdParty/Ert/devel/libecl_well/applications/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl_well/applications/CMakeLists.txt @@ -1,7 +1,6 @@ add_executable( well_info_test well_info_test.c ) -add_executable( segment_info segment_info.c ) -set(program_list well_info_test segment_info ) +set(program_list well_info_test ) foreach(prog ${program_list}) target_link_libraries( ${prog} ecl_well ecl) diff --git a/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c b/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c deleted file mode 100644 index 712802ece0..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/applications/segment_info.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'segment_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 -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - - -int main(int argc , char ** argv) { - const char * Xfile = argv[1]; - ecl_file_type * rst_file = ecl_file_open( Xfile , 0 ); - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0 ); - const ecl_kw_type * iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0 ); - const ecl_kw_type * rseg_kw = ecl_file_iget_named_kw( rst_file , RSEG_KW , 0 ); - const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0 ); - const ecl_kw_type * zwel_kw = ecl_file_iget_named_kw( rst_file , ZWEL_KW , 0 ); - - test_install_SIGNALS(); - { - int well_nr; - for (well_nr = 0; well_nr < rst_head->nwells; well_nr++) { - const int zwel_offset = rst_head->nzwelz * well_nr; - char * well_name = util_alloc_strip_copy(ecl_kw_iget_ptr( zwel_kw , zwel_offset )); - - printf("=================================================================\n"); - printf("Well: %s ",well_name); - { - well_conn_collection_type * connections = well_conn_collection_alloc(); - well_segment_collection_type * segments = well_segment_collection_alloc(); - - if (well_segment_collection_load_from_kw( segments , well_nr , iwel_kw , iseg_kw , rseg_kw , rst_head )) { - well_branch_collection_type * branches = well_branch_collection_alloc(); - - well_conn_collection_load_from_kw( connections , iwel_kw , icon_kw , well_nr , rst_head); - well_segment_collection_link( segments ); - well_segment_collection_add_branches( segments , branches ); - well_segment_collection_add_connections( segments , ECL_GRID_GLOBAL_GRID , connections ); - - printf("\n"); - printf("Segments:\n"); - { - int is; - for (is=0; is < well_segment_collection_get_size( segments ); is++) { - well_segment_type * segment = well_segment_collection_iget( segments , is ); - printf("-----------------------------------------------------------------\n"); - printf("ID : %d \n",well_segment_get_id( segment )); - printf("Outlet : %d \n",well_segment_get_outlet_id( segment )); - printf("Branch : %d \n",well_segment_get_branch_id( segment )); - printf("Connections : ["); - { - well_conn_collection_type * connections = well_segment_get_global_connections( segment ); - if (connections) { - int ic; - for (ic = 0; ic < well_conn_collection_get_size( connections ); ic++) { - const well_conn_type * conn = well_conn_collection_iget( connections , ic ); - printf("(%d , %d , %d) ",well_conn_get_i( conn ), well_conn_get_j( conn ), well_conn_get_k( conn )); - } - } - } - - printf("]\n"); - } - } - well_branch_collection_free( branches ); - } else - printf("not MSW well\n\n"); - - well_conn_collection_free( connections ); - well_segment_collection_free( segments ); - } - } - } - - ecl_file_close( rst_file ); - ecl_rsthead_free( rst_head ); -} diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch.h new file mode 100644 index 0000000000..f876ba370f --- /dev/null +++ b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2012 Statoil ASA, Norway. + + The file 'well_branch.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 __WELL_BRANCH_H__ +#define __WELL_BRANCH_H__ + + +#ifdef __cplusplus +extern "C" { +#endif + +#include + + typedef struct well_branch_struct well_branch_type; + + well_branch_type * well_branch_alloc(int branch_nr); + void well_branch_free( well_branch_type * branch ); + void well_branch_add_conn( well_branch_type * branch , well_conn_type * connection ); + int well_branch_get_length( const well_branch_type * branch ); + const well_conn_type ** well_branch_get_connections( const well_branch_type * branch ); + int well_branch_get_nr( const well_branch_type * branch ); + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch_collection.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch_collection.h deleted file mode 100644 index de472c3dbd..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_branch_collection.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_branch_collection.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 __WELL_BRANCH_COLLECTION_H__ -#define __WELL_BRANCH_COLLECTION_H__ - - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include - -#include - - typedef struct well_branch_collection_struct well_branch_collection_type; - - well_branch_collection_type * well_branch_collection_alloc(); - void well_branch_collection_free( well_branch_collection_type * branches ); - void well_branch_collection_free__( void * arg ); - bool well_branch_collection_has_branch( const well_branch_collection_type * branches , int branch_id); - int well_branch_collection_get_size( const well_branch_collection_type * branches ); - const well_segment_type * well_branch_collection_iget_start_segment( const well_branch_collection_type * branches , int index ); - const well_segment_type * well_branch_collection_get_start_segment( const well_branch_collection_type * branches , int branch_id); - bool well_branch_collection_add_start_segment( well_branch_collection_type * branches , const well_segment_type * start_segment); - - UTIL_IS_INSTANCE_HEADER( well_branch_collection ); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn.h index d2c2fd2a17..f6b1194cca 100644 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn.h +++ b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn.h @@ -27,8 +27,6 @@ extern "C" { #include -#include - #include typedef enum { @@ -45,17 +43,10 @@ extern "C" { void well_conn_free( well_conn_type * conn); void well_conn_free__( void * arg ); - - well_conn_type * well_conn_alloc( int i , int j , int k , well_conn_dir_enum dir, bool open); - well_conn_type * well_conn_alloc_MSW( int i , int j , int k , well_conn_dir_enum dir, bool open, int segment); - well_conn_type * well_conn_alloc_fracture( int i , int j , int k , well_conn_dir_enum dir, bool open); - well_conn_type * well_conn_alloc_fracture_MSW( int i , int j , int k , well_conn_dir_enum dir, bool open, int segment); - - bool well_conn_MSW(const well_conn_type * conn); - - well_conn_type * well_conn_alloc_from_kw( const ecl_kw_type * icon_kw , const ecl_rsthead_type * header , int well_nr , int conn_nr); + well_conn_type * well_conn_alloc( const ecl_kw_type * icon_kw , const ecl_kw_type * iseg_kw , const ecl_rsthead_type * header , int well_nr , int seg_well_nr , int conn_nr); well_conn_type * well_conn_alloc_wellhead( const ecl_kw_type * iwel_kw , const ecl_rsthead_type * header , int well_nr); + int well_conn_get_branch(const well_conn_type * conn); int well_conn_get_i(const well_conn_type * conn); int well_conn_get_j(const well_conn_type * conn); int well_conn_get_k(const well_conn_type * conn); @@ -64,11 +55,6 @@ extern "C" { int well_conn_get_segment( const well_conn_type * conn ); bool well_conn_fracture_connection( const well_conn_type * conn); bool well_conn_matrix_connection( const well_conn_type * conn); - bool well_conn_equal( const well_conn_type *conn1 , const well_conn_type * conn2); - - UTIL_IS_INSTANCE_HEADER( well_conn ); - UTIL_SAFE_CAST_HEADER( well_conn ); - #ifdef __cplusplus } diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn_collection.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn_collection.h deleted file mode 100644 index 3357c61a8d..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_conn_collection.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn_collection.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 __WELL_CONN_COLLECTION_H__ -#define __WELL_CONN_COLLECTION_H__ - - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include - -#include - - typedef struct well_conn_collection_struct well_conn_collection_type; - - well_conn_collection_type * well_conn_collection_alloc(); - void well_conn_collection_free( well_conn_collection_type * wellcc ); - void well_conn_collection_free__( void * arg ); - int well_conn_collection_get_size( const well_conn_collection_type * wellcc ); - const well_conn_type * well_conn_collection_iget_const( const well_conn_collection_type * wellcc , int index); - well_conn_type * well_conn_collection_iget(const well_conn_collection_type * wellcc , int index); - void well_conn_collection_add( well_conn_collection_type * wellcc , well_conn_type * conn); - void well_conn_collection_add_ref( well_conn_collection_type * wellcc , well_conn_type * conn); - int well_conn_collection_load_from_kw( well_conn_collection_type * wellcc , const ecl_kw_type * iwel_kw , const ecl_kw_type * icon_kw , int iwell , const ecl_rsthead_type * rst_head); - - UTIL_IS_INSTANCE_HEADER( well_conn_collection ); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_const.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_const.h index 3fca6fa5c6..e7319067a5 100644 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_const.h +++ b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_const.h @@ -39,8 +39,6 @@ extern "C" { #define IWEL_LGR_ITEM 42 #define IWEL_SEGMENTED_WELL_NR_ITEM 70 -#define IWEL_SEGMENTED_WELL_NR_NORMAL_VALUE -1 - #define ISEG_OUTLET_ITEM 1 #define ISEG_BRANCH_ITEM 3 @@ -61,11 +59,6 @@ extern "C" { #define ICON_DEFAULT_DIR_TARGET ICON_DIRZ -#define RSEG_LENGTH_INDEX 0 -#define RSEG_DIAMETER_INDEX 2 -#define RSEG_TOTAL_LENGTH_INDEX 6 -#define RSEG_DEPTH_INDEX 7 - /* The ECLIPSE documentation says that a certain item in the IWEL array should indicate the type of the well, the available types are the diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_path.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_path.h new file mode 100644 index 0000000000..69a4607112 --- /dev/null +++ b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_path.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2012 Statoil ASA, Norway. + + The file 'well_path.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 __WELL_PATH_H__ +#define __WELL_PATH_H__ + + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include +#include + + + typedef struct well_path_struct well_path_type; + + well_path_type * well_path_alloc(const char * grid_name ); + void well_path_free( well_path_type * path ); + void well_path_add_conn( well_path_type * well_path , well_conn_type * conn); + well_branch_type * well_path_iget_branch( const well_path_type * well_path , int branch_nr); + void well_path_free__(void * arg); + int well_path_get_max_branches( const well_path_type * well_path ); + int well_path_get_num_active_branches( const well_path_type * well_path ); + const char * well_path_get_grid_name( const well_path_type * well_path ); + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment.h deleted file mode 100644 index 689af32cf2..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment.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 __WELL_SEGMENT_H__ -#define __WELL_SEGMENT_H__ - - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include -#include - -#include -#include - - /* The values are shifted one down compared to ISEG description in table 6.1 in ECLIPSE file formats reference. */ - -#define ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE -1 -#define ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE 0 -#define ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE -1 - - - - typedef struct well_segment_struct well_segment_type; - - well_segment_type * well_segment_alloc_from_kw( const ecl_kw_type * iseg_kw , const ecl_kw_type * rseg_kw , const ecl_rsthead_type * header , int well_nr, int segment_id); - well_segment_type * well_segment_alloc(int segment_id , int outlet_segment_id , int branch_id , const double * rseg_data); - void well_segment_free(well_segment_type * segment ); - void well_segment_free__(void * arg); - - bool well_segment_active( const well_segment_type * segment ); - bool well_segment_main_stem( const well_segment_type * segment ); - bool well_segment_nearest_wellhead( const well_segment_type * segment ); - - int well_segment_get_link_count( const well_segment_type * segment ); - int well_segment_get_branch_id( const well_segment_type * segment ); - int well_segment_get_outlet_id( const well_segment_type * segment ); - int well_segment_get_id( const well_segment_type * segment ); - well_segment_type * well_segment_get_outlet( const well_segment_type * segment ); - bool well_segment_link( well_segment_type * segment , well_segment_type * outlet_segment ); - void well_segment_link_strict( well_segment_type * segment , well_segment_type * outlet_segment ); - bool well_segment_has_grid_connections( const well_segment_type * segment , const char * grid_name); - bool well_segment_has_global_grid_connections( const well_segment_type * segment); - bool well_segment_add_connection( well_segment_type * segment , const char * grid_name , well_conn_type * conn); - const well_conn_collection_type * well_segment_get_connections(const well_segment_type * segment , const char * grid_name ); - const well_conn_collection_type * well_segment_get_global_connections(const well_segment_type * segment ); - bool well_segment_well_is_MSW(int well_nr , const ecl_kw_type * iwel_kw , const ecl_rsthead_type * rst_head); - - double well_segment_get_depth( const well_segment_type * segment ); - double well_segment_get_length( const well_segment_type * segment ); - double well_segment_get_total_length( const well_segment_type * segment ); - double well_segment_get_diameter( const well_segment_type * segment ); - - UTIL_IS_INSTANCE_HEADER( well_segment ); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment_collection.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment_collection.h deleted file mode 100644 index 3a2e1b8deb..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_segment_collection.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_collection.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 __WELL_SEGMENT_COLLECTION_H__ -#define __WELL_SEGMENT_COLLECTION_H__ - - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include - -#include -#include -#include - - typedef struct well_segment_collection_struct well_segment_collection_type; - - well_segment_collection_type * well_segment_collection_alloc(); - void well_segment_collection_free(well_segment_collection_type * segment_collection ); - int well_segment_collection_get_size( const well_segment_collection_type * segment_collection ); - void well_segment_collection_add( well_segment_collection_type * segment_collection , well_segment_type * segment); - bool well_segment_collection_has_segment( const well_segment_collection_type * segment_collection , int segment_id); - well_segment_type * well_segment_collection_get( const well_segment_collection_type * segment_collection , int segment_id); - well_segment_type * well_segment_collection_iget( const well_segment_collection_type * segment_collection , int index); - int well_segment_collection_load_from_kw( well_segment_collection_type * segment_collection , int well_nr , - const ecl_kw_type * iwel_kw , - const ecl_kw_type * iseg_kw , - const ecl_kw_type * rseg_kw , - const ecl_rsthead_type * rst_head); - void well_segment_collection_link(const well_segment_collection_type * segment_collection); - void well_segment_collection_add_connections(well_segment_collection_type * segment_collection , - const char * grid_name , - const well_conn_collection_type * connections); - void well_segment_collection_add_branches( const well_segment_collection_type * segment_collection , - well_branch_collection_type * branches ); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_state.h b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_state.h index 8481573e8c..0db96bc313 100644 --- a/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_state.h +++ b/ThirdParty/Ert/devel/libecl_well/include/ert/ecl_well/well_state.h @@ -27,37 +27,16 @@ extern "C" { #include #include -#include #include #include -#include -#include -#include #define GLOBAL_GRID_NAME "GLOBAL" // The name assigned to the global grid for name based lookup. typedef struct well_state_struct well_state_type; - well_state_type * well_state_alloc(const char * well_name , int global_well_nr , bool open, well_type_enum type , int report_nr, time_t valid_from); - well_state_type * well_state_alloc_from_file( ecl_file_type * ecl_file , const ecl_grid_type * grid , int report_step , int well_nr); - - void well_state_add_connections( well_state_type * well_state , - const ecl_grid_type * grid , - ecl_file_type * rst_file , - int well_nr); - - bool well_state_add_MSW( well_state_type * well_state , - const ecl_file_type * rst_file , - int well_nr); - - bool well_state_is_MSW( const well_state_type * well_state); - - well_segment_collection_type * well_state_get_segments( const well_state_type * well_state ); - well_branch_collection_type * well_state_get_branches( const well_state_type * well_state ); - - + well_state_type * well_state_alloc( ecl_file_type * ecl_file , int report_step , int well_nr); void well_state_free( well_state_type * well ); const char * well_state_get_name( const well_state_type * well ); int well_state_get_report_nr( const well_state_type * well_state ); @@ -65,18 +44,24 @@ extern "C" { well_conn_type * well_state_iget_connection( const well_state_type * well_state , int index); well_type_enum well_state_get_type( const well_state_type * well_state); bool well_state_is_open( const well_state_type * well_state ); - int well_state_get_well_nr( const well_state_type * well_state ); - + const well_conn_type * well_state_iget_wellhead( const well_state_type * well_state , int grid_nr); const well_conn_type * well_state_get_wellhead( const well_state_type * well_state , const char * grid_name); - void well_state_summarize( const well_state_type * well_state , FILE * stream ); - well_type_enum well_state_translate_ecl_type_int(int int_type); + + const well_conn_type ** well_state_iget_lgr_connections(const well_state_type * well_state , int grid_nr , int branch_nr ); + const well_conn_type ** well_state_get_lgr_connections(const well_state_type * well_state , const char * lgr_name , int branch_nr); + const well_conn_type ** well_state_get_connections(const well_state_type * well_state , int branch_nr ); - const well_conn_collection_type * well_state_get_grid_connections( const well_state_type * well_state , const char * grid_name); - const well_conn_collection_type * well_state_get_global_connections( const well_state_type * well_state ); - bool well_state_has_grid_connections( const well_state_type * well_state , const char * grid_name); - bool well_state_has_global_connections( const well_state_type * well_state ); + int well_state_iget_num_lgr_connections(const well_state_type * well_state , int grid_nr , int branch_nr ); + int well_state_get_num_lgr_connections(const well_state_type * well_state , const char * lgr_name , int branch_nr); + int well_state_get_num_connections(const well_state_type * well_state , int branch_nr ); + + int well_state_iget_lgr_num_branches( const well_state_type * well_state , int grid_nr); + int well_state_get_lgr_num_branches( const well_state_type * well_state , const char * lgr_name); + int well_state_get_num_branches(const well_state_type * well_state ); + + void well_state_summarize( const well_state_type * well_state , FILE * stream ); UTIL_IS_INSTANCE_HEADER( well_state ); diff --git a/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt b/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt index 19b908b75c..59182ea3c8 100644 --- a/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl_well/src/CMakeLists.txt @@ -1,10 +1,5 @@ -set( source_files well_state.c well_conn.c well_info.c well_ts.c well_conn_collection.c well_segment.c well_segment_collection.c well_branch_collection.c) -set( header_files well_state.h well_const.h well_conn.h well_info.h well_ts.h well_conn_collection.h well_segment.h well_segment_collection.h well_branch_collection.h) - -if (NOT ERT_WINDOWS) - set_property( SOURCE well_branch_collection.c well_segment.c well_segment_collection.c well_conn_collection.c well_conn.c PROPERTY COMPILE_FLAGS "-Werror") -endif() - +set( source_files well_state.c well_conn.c well_info.c well_ts.c well_branch.c well_path.c ) +set( header_files well_state.h well_const.h well_conn.h well_info.h well_ts.h well_branch.h well_path.h ) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) include_directories( ${libgeometry_src_path} ) diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_branch.c b/ThirdParty/Ert/devel/libecl_well/src/well_branch.c new file mode 100644 index 0000000000..dd2ccd8416 --- /dev/null +++ b/ThirdParty/Ert/devel/libecl_well/src/well_branch.c @@ -0,0 +1,103 @@ +/* + Copyright (C) 2012 Statoil ASA, Norway. + + The file 'well_branch.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 + +/* + + See also documentation on the top of well_path.c for how a path and + a branch are related. +*/ + +struct well_branch_struct { + int branch_nr; + well_conn_type ** connections; + int size; + int alloc_size; +}; + + +static void well_branch_resize( well_branch_type * branch , int new_size) { + if (new_size < branch->alloc_size) + util_abort("%s: sorry - can only grow \n",__func__); + + branch->connections = util_realloc( branch->connections , new_size * sizeof * branch->connections ); + { + int i; + for (i=branch->alloc_size; i < new_size; i++) + branch->connections[i] = NULL; + } + branch->alloc_size = new_size; +} + + +well_branch_type * well_branch_alloc(int branch_nr) { + well_branch_type * branch = util_malloc( sizeof * branch ); + branch->branch_nr = branch_nr; + branch->connections = NULL; + branch->alloc_size = 0; + branch->size = 0; + + well_branch_resize( branch , 10 ); + return branch; +} + + +void well_branch_free( well_branch_type * branch ) { + int i; + for ( i=0; i < branch->alloc_size; i++) { + well_conn_type * conn = branch->connections[i]; + if (conn != NULL) + well_conn_free( conn ); + } + free( branch->connections ); + free( branch ); +} + + +int well_branch_get_length( const well_branch_type * branch) { + return branch->size; +} + + +const well_conn_type ** well_branch_get_connections( const well_branch_type * branch ) { + if (branch->size == 0) + return NULL; + else + return (const well_conn_type **) branch->connections; +} + + +void well_branch_add_conn( well_branch_type * branch, well_conn_type * connection ) { + if (branch->size == branch->alloc_size) + well_branch_resize(branch , 2*( 1 + branch->alloc_size )); + branch->connections[ branch->size ] = connection; + branch->size++; +} + + +int well_branch_get_nr( const well_branch_type * branch ) { + return branch->branch_nr; +} + diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_branch_collection.c b/ThirdParty/Ert/devel/libecl_well/src/well_branch_collection.c deleted file mode 100644 index 0e514cb6fb..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/src/well_branch_collection.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_branch_collection.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 - - -#define WELL_BRANCH_COLLECTION_TYPE_ID 67177087 - -struct well_branch_collection_struct { - UTIL_TYPE_ID_DECLARATION; - - vector_type * __start_segments; - int_vector_type * index_map; -}; - - -UTIL_IS_INSTANCE_FUNCTION( well_branch_collection , WELL_BRANCH_COLLECTION_TYPE_ID ) -static UTIL_SAFE_CAST_FUNCTION( well_branch_collection , WELL_BRANCH_COLLECTION_TYPE_ID ) - - -well_branch_collection_type * well_branch_collection_alloc() { - well_branch_collection_type * branch_collection = util_malloc( sizeof * branch_collection ); - UTIL_TYPE_ID_INIT( branch_collection , WELL_BRANCH_COLLECTION_TYPE_ID ); - branch_collection->__start_segments = vector_alloc_new(); - branch_collection->index_map = int_vector_alloc(0 , -1 ); - return branch_collection; -} - - - -void well_branch_collection_free( well_branch_collection_type * branches ) { - vector_free( branches->__start_segments ); - int_vector_free( branches->index_map ); - free( branches ); -} - - - -void well_branch_collection_free__( void * arg ) { - well_branch_collection_type * branches = well_branch_collection_safe_cast( arg ); - well_branch_collection_free( branches ); -} - - -int well_branch_collection_get_size( const well_branch_collection_type * branches ) { - return vector_get_size( branches->__start_segments ); -} - - -bool well_branch_collection_has_branch( const well_branch_collection_type * branches , int branch_id) { - if (int_vector_safe_iget( branches->index_map , branch_id) >= 0) - return true; - else - return false; -} - - - -const well_segment_type * well_branch_collection_iget_start_segment( const well_branch_collection_type * branches , int index ) { - if (index < vector_get_size( branches->__start_segments)) - return vector_iget_const( branches->__start_segments , index); - else - return NULL; -} - - - -const well_segment_type * well_branch_collection_get_start_segment( const well_branch_collection_type * branches , int branch_id) { - int internal_index = int_vector_safe_iget( branches->index_map , branch_id); - if (internal_index >= 0) - return well_branch_collection_iget_start_segment( branches , internal_index ); - else - return NULL; -} - - -bool well_branch_collection_add_start_segment( well_branch_collection_type * branches , const well_segment_type * start_segment) { - if ((well_segment_get_link_count( start_segment ) == 0) && (well_segment_get_outlet(start_segment))) { - int branch_id = well_segment_get_branch_id( start_segment ); - int current_index = int_vector_safe_iget( branches->index_map , branch_id); - if (current_index >= 0) - vector_iset_ref( branches->__start_segments , current_index , start_segment); - else { - int new_index = vector_get_size( branches->__start_segments ); - vector_append_ref( branches->__start_segments , start_segment); - int_vector_iset( branches->index_map , branch_id , new_index); - } - - return true; - } else - return false; -} - diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_conn.c b/ThirdParty/Ert/devel/libecl_well/src/well_conn.c index bc2e536948..0d10cd786d 100644 --- a/ThirdParty/Ert/devel/libecl_well/src/well_conn.c +++ b/ThirdParty/Ert/devel/libecl_well/src/well_conn.c @@ -17,10 +17,8 @@ */ #include -#include #include -#include #include #include @@ -28,151 +26,110 @@ #include #include - -#define WELL_CONN_NORMAL_WELL_SEGMENT_ID -999 -#define ECLIPSE_NORMAL_WELL_SEGMENT_ID -1 - /* Observe that when the (ijk) values are initialized they are shifted to zero offset values, to be aligned with the rest of the ert libraries. */ -#define WELL_CONN_TYPE_ID 702052013 - struct well_conn_struct { - UTIL_TYPE_ID_DECLARATION; - int i; - int j; - int k; - well_conn_dir_enum dir; - bool open; - int segment; // -1: Ordinary well - bool matrix_connection; // k >= nz => fracture (and k -= nz ) + int i; + int j; + int k; + well_conn_dir_enum dir; + bool open; + int segment; // -1: Ordinary well + bool matrix_connection; // k >= nz => fracture (and k -= nz ) + /*-----------------------------------------------------------------*/ + /* If the segment field == -1 - i.e. an ordinary well, the + outlet_segment is rubbish and should not be consulted. + */ + int branch; + int outlet_segment; // -1: This segment flows to the wellhead. }; +static void well_conn_set_k( well_conn_type * conn , const ecl_rsthead_type * header , int icon_k) { + conn->k = icon_k; + conn->matrix_connection = true; -bool well_conn_equal( const well_conn_type *conn1 , const well_conn_type * conn2) { - if (memcmp(conn1 , conn2 , sizeof * conn1) == 0) - return true; - else - return false; -} - - -bool well_conn_MSW( const well_conn_type * conn ) { - if (conn->segment == WELL_CONN_NORMAL_WELL_SEGMENT_ID) - return false; - else - return true; -} - -static bool well_conn_assert_direction( well_conn_dir_enum dir, bool matrix_connection) { - if ((dir == well_conn_fracX || dir == well_conn_fracY) && matrix_connection) - return false; - else - return true; -} - - -UTIL_IS_INSTANCE_FUNCTION( well_conn , WELL_CONN_TYPE_ID) -UTIL_SAFE_CAST_FUNCTION( well_conn , WELL_CONN_TYPE_ID) - - -static well_conn_type * well_conn_alloc__( int i , int j , int k , well_conn_dir_enum dir , bool open, int segment_id, bool matrix_connection) { - if (well_conn_assert_direction( dir , matrix_connection)) { - well_conn_type * conn = util_malloc( sizeof * conn ); - UTIL_TYPE_ID_INIT( conn , WELL_CONN_TYPE_ID ); - conn->i = i; - conn->j = j; - conn->k = k; - conn->open = open; - conn->dir = dir; - - conn->matrix_connection = matrix_connection; - if (segment_id == ECLIPSE_NORMAL_WELL_SEGMENT_ID) - conn->segment = WELL_CONN_NORMAL_WELL_SEGMENT_ID; - else - conn->segment = segment_id; - - return conn; - } else { - printf("assert-direction failed. dir:%d matrix_connection:%d \n",dir , matrix_connection); - return NULL; + if (header->dualp) { + int geometric_nz = header->nz / 2; + if (icon_k >= geometric_nz) { + conn->k -= geometric_nz; + conn->matrix_connection = false; + } } } -well_conn_type * well_conn_alloc( int i , int j , int k , well_conn_dir_enum dir , bool open) { - return well_conn_alloc__(i , j , k , dir , open , WELL_CONN_NORMAL_WELL_SEGMENT_ID , true ); + + +well_conn_type * well_conn_alloc_wellhead( const ecl_kw_type * iwel_kw , const ecl_rsthead_type * header , int well_nr) { + const int iwel_offset = header->niwelz * well_nr; + int conn_i = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADI_ITEM ); + + if (conn_i > 0) { + well_conn_type * conn = util_malloc( sizeof * conn ); + + conn->i = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADI_ITEM ) - 1; + conn->j = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADJ_ITEM ) - 1; + { + int icon_k = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADK_ITEM ) - 1; + well_conn_set_k( conn , header , icon_k); + } + + conn->open = true; // This is not really specified anywhere. + conn->branch = 0; + conn->segment = 0; + conn->outlet_segment = 0; + return conn; + } else + // The well is completed in this LGR - however the wellhead is in another LGR. + return NULL; } +static well_conn_type * well_conn_alloc__( const ecl_kw_type * icon_kw , const ecl_rsthead_type * header , int icon_offset) { + well_conn_type * conn = util_malloc( sizeof * conn ); + + conn->i = ecl_kw_iget_int( icon_kw , icon_offset + ICON_I_ITEM ) - 1; + conn->j = ecl_kw_iget_int( icon_kw , icon_offset + ICON_J_ITEM ) - 1; + { + int icon_k = ecl_kw_iget_int( icon_kw , icon_offset + ICON_K_ITEM ) - 1; + well_conn_set_k( conn , header , icon_k); + } -well_conn_type * well_conn_alloc_MSW( int i , int j , int k , well_conn_dir_enum dir , bool open, int segment) { - return well_conn_alloc__(i , j , k , dir , open , segment , true ); + conn->segment = ecl_kw_iget_int( icon_kw , icon_offset + ICON_SEGMENT_ITEM ) - 1; + + conn->outlet_segment = -999; + conn->branch = -999; + return conn; } - - -well_conn_type * well_conn_alloc_fracture( int i , int j , int k , well_conn_dir_enum dir , bool open) { - return well_conn_alloc__(i , j , k , dir , open , WELL_CONN_NORMAL_WELL_SEGMENT_ID , false); -} - - - -well_conn_type * well_conn_alloc_fracture_MSW( int i , int j , int k , well_conn_dir_enum dir , bool open, int segment) { - return well_conn_alloc__(i , j , k , dir , open , segment , false); -} - - - - /* Observe that the (ijk) and branch values are shifted to zero offset to be aligned with the rest of the ert libraries. */ -well_conn_type * well_conn_alloc_from_kw( const ecl_kw_type * icon_kw , - const ecl_rsthead_type * header , - int well_nr , - int conn_nr ) { +well_conn_type * well_conn_alloc( const ecl_kw_type * icon_kw , + const ecl_kw_type * iseg_kw , + const ecl_rsthead_type * header , + int well_nr , + int seg_well_nr , + int conn_nr ) { const int icon_offset = header->niconz * ( header->ncwmax * well_nr + conn_nr ); int IC = ecl_kw_iget_int( icon_kw , icon_offset + ICON_IC_ITEM ); if (IC > 0) { - well_conn_type * conn; - int i = ecl_kw_iget_int( icon_kw , icon_offset + ICON_I_ITEM ) - 1; - int j = ecl_kw_iget_int( icon_kw , icon_offset + ICON_J_ITEM ) - 1; - int k = ecl_kw_iget_int( icon_kw , icon_offset + ICON_K_ITEM ) - 1; - int segment = ecl_kw_iget_int( icon_kw , icon_offset + ICON_SEGMENT_ITEM ) - 1; - bool matrix_connection = true; - bool open; - well_conn_dir_enum dir = well_conn_fracX; - - /* Set the status */ + well_conn_type * conn = well_conn_alloc__( icon_kw , header , icon_offset ); { int int_status = ecl_kw_iget_int( icon_kw , icon_offset + ICON_STATUS_ITEM ); if (int_status > 0) - open = true; + conn->open = true; else - open = false; + conn->open = false; } - - /* Set the K value and fracture flag. */ - { - if (header->dualp) { - int geometric_nz = header->nz / 2; - if (k >= geometric_nz) { - k -= geometric_nz; - matrix_connection = false; - } - } - } - - - /* Set the direction flag */ { int int_direction = ecl_kw_iget_int( icon_kw , icon_offset + ICON_DIRECTION_ITEM ); if (int_direction == ICON_DEFAULT_DIR_VALUE) @@ -180,27 +137,25 @@ well_conn_type * well_conn_alloc_from_kw( const ecl_kw_type * icon_kw , switch (int_direction) { case(ICON_DIRX): - dir = well_conn_dirX; + conn->dir = well_conn_dirX; break; case(ICON_DIRY): - dir = well_conn_dirY; + conn->dir = well_conn_dirY; break; case(ICON_DIRZ): - dir = well_conn_dirZ; + conn->dir = well_conn_dirZ; break; case(ICON_FRACX): - dir = well_conn_fracX; + conn->dir = well_conn_fracX; break; case(ICON_FRACY): - dir = well_conn_fracY; + conn->dir = well_conn_fracY; break; default: util_abort("%s: icon direction value:%d not recognized\n",__func__ , int_direction); } } - - conn = well_conn_alloc__(i,j,k,dir,open,segment,matrix_connection); - + /** For multisegmented wells ONLY the global part of the restart file has segment information, i.e. the ?SEG @@ -208,9 +163,8 @@ well_conn_type * well_conn_alloc_from_kw( const ecl_kw_type * icon_kw , MSW + LGR well. */ - /* if (iseg_kw != NULL) { - if (conn->segment != WELL_CONN_NORMAL_WELL_SEGMENT_ID) { + if (conn->segment >= 0) { const int iseg_offset = header->nisegz * ( header->nsegmx * seg_well_nr + conn->segment ); conn->outlet_segment = ecl_kw_iget_int( iseg_kw , iseg_offset + ISEG_OUTLET_ITEM ); conn->branch = ecl_kw_iget_int( iseg_kw , iseg_offset + ISEG_BRANCH_ITEM ); @@ -222,8 +176,7 @@ well_conn_type * well_conn_alloc_from_kw( const ecl_kw_type * icon_kw , conn->branch = 0; conn->outlet_segment = 0; } - */ - + return conn; } else return NULL; /* IC < 0: Connection not in current LGR. */ @@ -236,42 +189,11 @@ void well_conn_free( well_conn_type * conn) { void well_conn_free__( void * arg ) { - well_conn_type * conn = well_conn_safe_cast( arg ); + well_conn_type * conn = (well_conn_type *) arg; well_conn_free( conn ); } -well_conn_type * well_conn_alloc_wellhead( const ecl_kw_type * iwel_kw , const ecl_rsthead_type * header , int well_nr) { - const int iwel_offset = header->niwelz * well_nr; - int conn_i = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADI_ITEM ) - 1; - - if (conn_i >= 0) { - //well_conn_type * conn = util_malloc( sizeof * conn ); - int conn_j = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADJ_ITEM ) - 1; - int conn_k = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_HEADK_ITEM ) - 1; - bool matrix_connection = true; - bool open = true; - - if (header->dualp) { - int geometric_nz = header->nz / 2; - if (conn_k >= geometric_nz) { - conn_k -= geometric_nz; - matrix_connection = false; - } - } - - if (matrix_connection) - return well_conn_alloc( conn_i , conn_j , conn_k , open , well_conn_dirZ ); - else - return well_conn_alloc_fracture( conn_i , conn_j , conn_k , open , well_conn_dirZ ); - } else - // The well is completed in this LGR - however the wellhead is in another LGR. - return NULL; -} - - - - /*****************************************************************/ @@ -288,6 +210,9 @@ int well_conn_get_k(const well_conn_type * conn) { } +int well_conn_get_branch(const well_conn_type * conn) { + return conn->branch; +} well_conn_dir_enum well_conn_get_dir(const well_conn_type * conn) { return conn->dir; @@ -297,7 +222,6 @@ bool well_conn_open( const well_conn_type * conn ) { return conn->open; } - int well_conn_get_segment( const well_conn_type * conn ) { return conn->segment; } diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_conn_collection.c b/ThirdParty/Ert/devel/libecl_well/src/well_conn_collection.c deleted file mode 100644 index f409566517..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/src/well_conn_collection.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn_collection.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 - - -#define WELL_CONN_COLLECTION_TYPE_ID 67150087 - -struct well_conn_collection_struct { - UTIL_TYPE_ID_DECLARATION; - vector_type * connection_list; -}; - - -UTIL_IS_INSTANCE_FUNCTION( well_conn_collection , WELL_CONN_COLLECTION_TYPE_ID ) -static UTIL_SAFE_CAST_FUNCTION( well_conn_collection , WELL_CONN_COLLECTION_TYPE_ID ) - - -well_conn_collection_type * well_conn_collection_alloc() { - well_conn_collection_type * wellcc = util_malloc( sizeof * wellcc ); - UTIL_TYPE_ID_INIT( wellcc , WELL_CONN_COLLECTION_TYPE_ID ); - wellcc->connection_list = vector_alloc_new(); - return wellcc; -} - -/* - The collection takes ownership of the connection object and frees it - when the collection is discarded. -*/ - -void well_conn_collection_add( well_conn_collection_type * wellcc , well_conn_type * conn) { - vector_append_owned_ref( wellcc->connection_list , conn , well_conn_free__); -} - -/* - The collection only stores a refernce to the object, which will be destroyed by 'someone else'. -*/ - -void well_conn_collection_add_ref( well_conn_collection_type * wellcc , well_conn_type * conn) { - vector_append_ref( wellcc->connection_list , conn ); -} - - -void well_conn_collection_free( well_conn_collection_type * wellcc ) { - vector_free( wellcc->connection_list ); - free( wellcc ); -} - -void well_conn_collection_free__( void * arg ) { - well_conn_collection_type * wellcc = well_conn_collection_safe_cast( arg ); - well_conn_collection_free( wellcc ); -} - - -int well_conn_collection_get_size( const well_conn_collection_type * wellcc ) { - return vector_get_size( wellcc->connection_list ); -} - - -const well_conn_type * well_conn_collection_iget_const(const well_conn_collection_type * wellcc , int index) { - int size = well_conn_collection_get_size( wellcc ); - if (index < size) - return vector_iget_const( wellcc->connection_list , index ); - else - return NULL; -} - -well_conn_type * well_conn_collection_iget(const well_conn_collection_type * wellcc , int index) { - int size = well_conn_collection_get_size( wellcc ); - if (index < size) - return vector_iget( wellcc->connection_list , index ); - else - return NULL; -} - - -int well_conn_collection_load_from_kw( well_conn_collection_type * wellcc , const ecl_kw_type * iwel_kw , const ecl_kw_type * icon_kw , int iwell , const ecl_rsthead_type * rst_head) { - const int iwel_offset = rst_head->niwelz * iwell; - int num_connections = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_CONNECTIONS_ITEM ); - int iconn; - - for (iconn = 0; iconn < num_connections; iconn++) { - well_conn_type * conn = well_conn_alloc_from_kw( icon_kw , rst_head , iwell , iconn ); - if (conn) - well_conn_collection_add( wellcc , conn ); - } - return num_connections; -} - diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_info.c b/ThirdParty/Ert/devel/libecl_well/src/well_info.c index 4980c22ded..4c2c13abed 100644 --- a/ThirdParty/Ert/devel/libecl_well/src/well_info.c +++ b/ThirdParty/Ert/devel/libecl_well/src/well_info.c @@ -52,9 +52,22 @@ contains a time series for one well. well_state_type: The well_state_type datatype contains the - state/properties of one well at one particular instant of - time. The well_state.c file contains further documentation of - the concepts connections, branches and segments. + state/properties of one well at one particular instant of time. + + well_path_type: The well_path_type datatype hold information about + the path of the well, i.e. which cells it goes through. The + well_path_type instance is for one grid only; and if the well + goes through LGRs the well_state instance contains one + well_path instance for the global grid and additional well_path + instances for each LGR. + + well_branch_type: The wells can be split into several + branches. The well_branch_type datatype contain a collection of + well connections which form a 1-dimensional segment. + + well_conn_type: This is the connection of a well to one cell. This + datatype is exported, i.e. calling scope can inspect + (read-only!) the members of a well_conn_type instance. WELL1 @@ -266,18 +279,18 @@ static void well_info_add_state( well_info_type * well_info , well_state_type * by calling this function repeatedly. This function will go through all the wells by number and call the - well_state_alloc_from_file() function to create a well state object for each - well. The well_state_alloc_from_file() function will iterate through all the + well_state_alloc() function to create a well state object for each + well. The well_state_alloc() function will iterate through all the grids and assign well properties corresponding to each of the grids, the global grid special-cased to determine is consulted to determine the number of wells. */ void well_info_add_wells( well_info_type * well_info , ecl_file_type * rst_file , int report_nr) { - int well_nr; ecl_rsthead_type * global_header = ecl_rsthead_alloc( rst_file ); + int well_nr; for (well_nr = 0; well_nr < global_header->nwells; well_nr++) { - well_state_type * well_state = well_state_alloc_from_file( rst_file , well_info->grid , report_nr , well_nr ); + well_state_type * well_state = well_state_alloc( rst_file , report_nr , well_nr ); if (well_state != NULL) well_info_add_state( well_info , well_state ); } @@ -327,7 +340,7 @@ void well_info_load_rstfile( well_info_type * well_info , const char * filename) well_info_add_wells( well_info , ecl_file , report_nr ); else well_info_add_UNRST_wells( well_info , ecl_file ); - + ecl_file_close( ecl_file ); } else util_abort("%s: invalid file type:%s - must be a restart file\n",__func__ , filename); diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_path.c b/ThirdParty/Ert/devel/libecl_well/src/well_path.c new file mode 100644 index 0000000000..72208435fb --- /dev/null +++ b/ThirdParty/Ert/devel/libecl_well/src/well_path.c @@ -0,0 +1,185 @@ +/* + Copyright (C) 2012 Statoil ASA, Norway. + + The file 'well_path.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 + +/* + This file implements the well_path structure which is container for + the grid connections for one grid realisation; i.e. if the well is + perforated in LGRs in addition to the global grid the parent + well_state structure will have several well_path instances - one for + the global grid and one for each LGR. + + The well_path structure consist of one or several well_branch_type + instances; the well_branch is a collection of cells which are + connected on a 1D line. + + --------------D + / + / + A---------------B----------C + + + All of this figure is one well; how this structure is connected to + one particular grid is described by the well_path structure in this + file. The current well consist of two branches: A-B-C and B-D; these + are two well_branch instance in the well_path structure. +*/ + + +#define WELL_PATH_TYPE_ID 91916433 + +struct well_path_struct { + UTIL_TYPE_ID_DECLARATION; + char * grid_name; // Will be NULL for 'null_path' construction in the well_state object. + well_branch_type ** branches; + int max_branches; // This might be misleading due to NULL pointers 'inside' the branches array. + int alloc_size; +}; + + + +static void well_path_resize( well_path_type * well_path , int new_size) { + well_path->branches = util_realloc( well_path->branches , new_size * sizeof * well_path->branches ); + { + int i; + for (i=well_path->alloc_size; i < new_size; i++) + well_path->branches[i] = NULL; + } + + well_path->alloc_size = new_size; +} + +static UTIL_SAFE_CAST_FUNCTION( well_path , WELL_PATH_TYPE_ID ) + +well_path_type * well_path_alloc(const char * grid_name) { + well_path_type * well_path = util_malloc( sizeof * well_path ); + UTIL_TYPE_ID_INIT( well_path , WELL_PATH_TYPE_ID ); + well_path->grid_name = util_alloc_string_copy( grid_name ); + well_path->branches = NULL; + well_path->max_branches = 0; + well_path->alloc_size = 0; + well_path_resize( well_path , 4 ); + return well_path; +} + + + +well_branch_type * well_path_add_branch( well_path_type * well_path , int branch_nr) { + + well_branch_type * new_branch = well_branch_alloc( branch_nr ); + if (branch_nr >= well_path->alloc_size) + well_path_resize( well_path , 2 * branch_nr ); + + well_path->branches[ branch_nr ] = new_branch; + if (branch_nr >= well_path->max_branches) + well_path->max_branches = branch_nr + 1; + + return new_branch; +} + + +bool well_path_has_branch( const well_path_type * well_path , int branch_nr ) { + if (branch_nr >= 0 && branch_nr < well_path->max_branches) { + well_branch_type * branch = well_path->branches[ branch_nr ]; + if (branch != NULL) + return true; + else + return false; + } else + return false; +} + +/** + This will return the maximum branch number; there can be holes in + the branches array: + + branches = [ branch0, NULL , branch1 , NULL , branch3] + + In this case the the well_path_get_max_branches() will return five; + however there are only three active branches in this case. The + alternative function well_path_get_num_active_branches() will count + the number of active (i.e. != NULL) branches. +*/ +int well_path_get_max_branches( const well_path_type * well_path ) { + return well_path->max_branches; +} + + +int well_path_get_num_active_branches( const well_path_type * well_path) { + int branch_nr; + int num_active = 0; + for (branch_nr = 0; branch_nr < well_path->max_branches; branch_nr++) + if (well_path->branches[ branch_nr ] != NULL) + num_active++; + return num_active; +} + + + +/** + Will return NULL if the branch does not exist. +*/ + +well_branch_type * well_path_iget_branch( const well_path_type * well_path , int branch_nr) { + if (well_path_has_branch( well_path , branch_nr )) + return well_path->branches[ branch_nr ]; + else + return NULL; +} + + +void well_path_add_conn( well_path_type * well_path , well_conn_type * conn) { + int branch_nr = well_conn_get_branch( conn ); + if (!well_path_has_branch( well_path , branch_nr)) + well_path_add_branch( well_path , branch_nr ); + { + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + well_branch_add_conn( branch , conn ); + } +} + + +void well_path_free( well_path_type * well_path ) { + int i; + for (i=0; i < well_path->alloc_size; i++) { + if (well_path->branches[i] != NULL) + well_branch_free( well_path->branches[i] ); + } + util_safe_free( well_path->grid_name ); + free( well_path->branches ); + free( well_path ); +} + +void well_path_free__(void * arg) { + well_path_type * well_path = well_path_safe_cast( arg ); + well_path_free( well_path ); +} + + + +const char * well_path_get_grid_name( const well_path_type * well_path ) { + return well_path->grid_name; +} diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_segment.c b/ThirdParty/Ert/devel/libecl_well/src/well_segment.c deleted file mode 100644 index 90bf94a281..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/src/well_segment.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment.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 - -#define WELL_SEGMENT_TYPE_ID 2209166 - -struct well_segment_struct { - UTIL_TYPE_ID_DECLARATION; - int link_count; - int segment_id; - int branch_id; - int outlet_segment_id; // This is in the global index space given by the ISEG keyword. - well_segment_type * outlet_segment; - hash_type * connections; // hash_type; - - double depth; // The depth of the segment node; furthest away from the wellhead. - double length; - double total_length; // Total length from wellhead. - double diameter; // The tube diametere available for flow. -}; - - -UTIL_IS_INSTANCE_FUNCTION( well_segment , WELL_SEGMENT_TYPE_ID ) -static UTIL_SAFE_CAST_FUNCTION( well_segment , WELL_SEGMENT_TYPE_ID ) - - -well_segment_type * well_segment_alloc(int segment_id , int outlet_segment_id , int branch_id , const double * rseg_data) { - well_segment_type * segment = util_malloc( sizeof * segment ); - UTIL_TYPE_ID_INIT( segment , WELL_SEGMENT_TYPE_ID ); - - segment->link_count = 0; - segment->segment_id = segment_id; - segment->outlet_segment_id = outlet_segment_id; - segment->branch_id = branch_id; - segment->outlet_segment = NULL; - segment->connections = hash_alloc(); - - segment->depth = rseg_data[ RSEG_DEPTH_INDEX ]; - segment->length = rseg_data[ RSEG_LENGTH_INDEX ]; - segment->total_length = rseg_data[ RSEG_TOTAL_LENGTH_INDEX ]; - segment->diameter = rseg_data[ RSEG_DIAMETER_INDEX ]; - - return segment; -} - - -well_segment_type * well_segment_alloc_from_kw( const ecl_kw_type * iseg_kw , const ecl_kw_type * rseg_kw , const ecl_rsthead_type * header , int well_nr, int segment_id) { - if (rseg_kw == NULL) { - util_abort("%s: fatal internal error - tried to create well_segment instance without RSEG keyword.\n",__func__); - return NULL; - } else { - const int iseg_offset = header->nisegz * ( header->nsegmx * well_nr + segment_id); - const int rseg_offset = header->nrsegz * ( header->nsegmx * well_nr + segment_id); - int outlet_segment_id = ecl_kw_iget_int( iseg_kw , iseg_offset + ISEG_OUTLET_ITEM ) - 1; - int branch_id = ecl_kw_iget_int( iseg_kw , iseg_offset + ISEG_BRANCH_ITEM ) - 1; - const double * rseg_data = ecl_kw_iget_ptr( rseg_kw , rseg_offset ); - - well_segment_type * segment = well_segment_alloc( segment_id , outlet_segment_id , branch_id , rseg_data); - return segment; - } -} - - -/* - if (iseg_kw != NULL) { - if (conn->segment != WELL_CONN_NORMAL_WELL_SEGMENT_ID) { - - } else { - conn->branch = 0; - conn->outlet_segment = 0; - } - } else { - conn->branch = 0; - conn->outlet_segment = 0; - } - */ - - -void well_segment_free(well_segment_type * segment ) { - hash_free( segment->connections ); - free( segment ); -} - -void well_segment_free__(void * arg) { - well_segment_type * segment = well_segment_safe_cast( arg ); - well_segment_free( segment ); -} - - -bool well_segment_active( const well_segment_type * segment ) { - if (segment->branch_id == ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE) - return false; - else - return true; -} - - -bool well_segment_main_stem( const well_segment_type * segment ) { - if (segment->branch_id == ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE) - return true; - else - return false; -} - - -bool well_segment_nearest_wellhead( const well_segment_type * segment ) { - if (segment->outlet_segment_id == ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE) - return true; - else - return false; -} - - -int well_segment_get_link_count( const well_segment_type * segment ) { - return segment->link_count; -} - -int well_segment_get_branch_id( const well_segment_type * segment ) { - return segment->branch_id; -} - -int well_segment_get_outlet_id( const well_segment_type * segment ) { - return segment->outlet_segment_id; -} - -int well_segment_get_id( const well_segment_type * segment ) { - return segment->segment_id; -} - - -well_segment_type * well_segment_get_outlet( const well_segment_type * segment ) { - return segment->outlet_segment; -} - - -bool well_segment_link( well_segment_type * segment , well_segment_type * outlet_segment ) { - if (segment->outlet_segment_id == outlet_segment->segment_id) { - segment->outlet_segment = outlet_segment; - outlet_segment->link_count++; - return true; - } else - /* - This is a quite fatal topological error - and aborting is probaly the wisest - thing to do. I.e. the function well_segment_link_strict() is recommended. - */ - return false; -} - - -void well_segment_link_strict( well_segment_type * segment , well_segment_type * outlet_segment ) { - if (!well_segment_link( segment , outlet_segment)) - util_abort("%s: tried to create invalid link between segments %d and %d \n",segment->segment_id , outlet_segment->segment_id); -} - - - -bool well_segment_has_grid_connections( const well_segment_type * segment , const char * grid_name) { - return hash_has_key( segment->connections , grid_name ); -} - - -bool well_segment_has_global_grid_connections( const well_segment_type * segment) { - return well_segment_has_grid_connections( segment , ECL_GRID_GLOBAL_GRID ); -} - - -bool well_segment_add_connection( well_segment_type * segment , const char * grid_name , well_conn_type * conn) { - int conn_segment_id = well_conn_get_segment( conn ); - if (conn_segment_id == segment->segment_id) { - if (!well_segment_has_grid_connections( segment , grid_name )) - hash_insert_hash_owned_ref( segment->connections , grid_name , well_conn_collection_alloc() , well_conn_collection_free__ ); - - { - well_conn_collection_type * connections = hash_get( segment->connections , grid_name ); - well_conn_collection_add_ref( connections , conn ); - } - return true; - } else - return false; -} - - -const well_conn_collection_type * well_segment_get_connections(const well_segment_type * segment , const char * grid_name ) { - if (well_segment_has_grid_connections( segment , grid_name)) - return hash_get( segment->connections , grid_name); - else - return NULL; -} - - -const well_conn_collection_type * well_segment_get_global_connections(const well_segment_type * segment ) { - return well_segment_get_connections( segment , ECL_GRID_GLOBAL_GRID ); -} - - -bool well_segment_well_is_MSW(int well_nr , const ecl_kw_type * iwel_kw , const ecl_rsthead_type * rst_head) { - int iwel_offset = rst_head->niwelz * well_nr; - int segment_well_nr = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_SEGMENTED_WELL_NR_ITEM) - 1; - - if (segment_well_nr == IWEL_SEGMENTED_WELL_NR_NORMAL_VALUE) - return false; - else - return true; -} - - -double well_segment_get_depth( const well_segment_type * segment ) { - return segment->depth; -} - -double well_segment_get_length( const well_segment_type * segment ) { - return segment->length; -} - -double well_segment_get_total_length( const well_segment_type * segment ) { - return segment->total_length; -} - -double well_segment_get_diameter( const well_segment_type * segment ) { - return segment->diameter; -} diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_segment_collection.c b/ThirdParty/Ert/devel/libecl_well/src/well_segment_collection.c deleted file mode 100644 index 403c373de7..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/src/well_segment_collection.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_collection.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 - - -struct well_segment_collection_struct { - int_vector_type * segment_index_map; - vector_type * __segment_storage; -}; - - - -well_segment_collection_type * well_segment_collection_alloc() { - well_segment_collection_type * segment_collection = util_malloc( sizeof * segment_collection ); - - segment_collection->__segment_storage = vector_alloc_new(); - segment_collection->segment_index_map = int_vector_alloc( 0 , -1 ); - return segment_collection; -} - - - -void well_segment_collection_free(well_segment_collection_type * segment_collection ) { - vector_free( segment_collection->__segment_storage ); - int_vector_free( segment_collection->segment_index_map ); - free( segment_collection ); -} - - - -int well_segment_collection_get_size( const well_segment_collection_type * segment_collection ) { - return vector_get_size( segment_collection->__segment_storage ); -} - - -void well_segment_collection_add( well_segment_collection_type * segment_collection , well_segment_type * segment) { - int segment_id = well_segment_get_id( segment ); - int current_index = int_vector_safe_iget( segment_collection->segment_index_map , segment_id ); - if (current_index >= 0) - vector_iset_owned_ref( segment_collection->__segment_storage , current_index , segment , well_segment_free__); - else { - int new_index = vector_get_size(segment_collection->__segment_storage); - vector_append_owned_ref( segment_collection->__segment_storage , segment , well_segment_free__); - int_vector_iset( segment_collection->segment_index_map , segment_id , new_index); - } -} - - - -well_segment_type * well_segment_collection_iget( const well_segment_collection_type * segment_collection , int index) { - return vector_iget( segment_collection->__segment_storage , index ); -} - - -well_segment_type * well_segment_collection_get( const well_segment_collection_type * segment_collection , int segment_id) { - int internal_index = int_vector_safe_iget( segment_collection->segment_index_map , segment_id ); - if (internal_index >= 0) - return well_segment_collection_iget( segment_collection , internal_index ); - else - return NULL; -} - - -bool well_segment_collection_has_segment( const well_segment_collection_type * segment_collection , int segment_id) { - int internal_index = int_vector_safe_iget( segment_collection->segment_index_map , segment_id ); - if (internal_index >= 0) - return true; - else - return false; -} - - - -int well_segment_collection_load_from_kw( well_segment_collection_type * segment_collection , int well_nr , - const ecl_kw_type * iwel_kw , - const ecl_kw_type * iseg_kw , - const ecl_kw_type * rseg_kw , - const ecl_rsthead_type * rst_head) { - - int iwel_offset = rst_head->niwelz * well_nr; - int segment_well_nr = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_SEGMENTED_WELL_NR_ITEM) - 1; - int segments_added = 0; - - if (segment_well_nr != IWEL_SEGMENTED_WELL_NR_NORMAL_VALUE) { - int segment_id; - for (segment_id = 0; segment_id < rst_head->nsegmx; segment_id++) { - well_segment_type * segment = well_segment_alloc_from_kw( iseg_kw , rseg_kw , rst_head , segment_well_nr , segment_id ); - - if (well_segment_active( segment )) { - well_segment_collection_add( segment_collection , segment ); - segments_added++; - } else - well_segment_free( segment ); - } - } - - return segments_added; -} - - -void well_segment_collection_link(const well_segment_collection_type * segment_collection) { - int index; - for (index = 0; index < vector_get_size( segment_collection->__segment_storage); index++) { - well_segment_type * segment = well_segment_collection_iget( segment_collection , index ); - int outlet_segment_id = well_segment_get_outlet_id( segment ); - if (!well_segment_nearest_wellhead(segment)) { - well_segment_type * target_segment = well_segment_collection_get( segment_collection , outlet_segment_id ); - well_segment_link( segment , target_segment ); - } - } -} - - - -void well_segment_collection_add_connections(well_segment_collection_type * segment_collection , - const char * grid_name , - const well_conn_collection_type * connections) { - int iconn; - for (iconn = 0; iconn < well_conn_collection_get_size( connections ); iconn++) { - well_conn_type * conn = well_conn_collection_iget( connections , iconn ); - if (well_conn_MSW( conn )) { - int segment_id = well_conn_get_segment( conn ); - well_segment_type * segment = well_segment_collection_get( segment_collection , segment_id ); - well_segment_add_connection( segment , grid_name , conn ); - } - } -} - - - -void well_segment_collection_add_branches( const well_segment_collection_type * segment_collection , - well_branch_collection_type * branches ) { - int iseg; - for (iseg =0; iseg < well_segment_collection_get_size( segment_collection ); iseg++) { - const well_segment_type * segment = well_segment_collection_iget( segment_collection , iseg ); - if (well_segment_get_link_count( segment ) == 0) - well_branch_collection_add_start_segment( branches , segment ); - } -} - diff --git a/ThirdParty/Ert/devel/libecl_well/src/well_state.c b/ThirdParty/Ert/devel/libecl_well/src/well_state.c index 0f792c7b10..2212050578 100644 --- a/ThirdParty/Ert/devel/libecl_well/src/well_state.c +++ b/ThirdParty/Ert/devel/libecl_well/src/well_state.c @@ -1,19 +1,19 @@ /* - Copyright (C) 2011 Statoil ASA, Norway. - - The file 'well_state.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 'well_state.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. */ /** @@ -36,126 +36,11 @@ #include #include #include -#include #include #include #include -#include -#include - -/* - -Connections, segments and branches ----------------------------------- - - - +-----+ - | | <- Wellhead - | | - +-----+ _________ Segment 2 - |\ / - | \/ Segment 1 Segment 0 - | \-----0---------------0--<----------------------O <-- Branch: 0 - \ | | | | - \ +-----+ +-----++-----+ +-----+ - \ | C3 | | C2 || C1 | | C0 | - \ | | | || | | | - \ +-----+ +-----++-----+ +-----+ - \ -Segment 5 \ - \ - \ Segment 4 Segment 3 - \-<--O-------<-------O----------------<------------O <-- Branch: 1 - | | | | - +-----+ +-----+ +-----+ +-----+ - | C7 | | C6 | | C5 | | C4 | - | | | | | | | | - +-----+ +-----+ +-----+ +-----+ - - - - -The boxes show connections C0 - C7; the connections serve as sinks (or -sources in the case of injectors) removing fluids from the -reservoir. As ind icated by the use of isolated boxes the ECLIPSE model -contains no geomtric concept linking the different connections into a -connected 'well-like' object. - -Ordinary wells in the ECLIPSE model are just a collection of -connections like these illustrated boxes, and to draw a connected 1D -object heuristics of some kind must be used to determine how the -various connections should be connected. In particular for wells which -consist of multiple branches this heuristic is non obvious. - -More advanced (i.e. newer) wells are modelles as multisegment wells; -the important thing about multisegment wells is that the 1D segments -constituting the flowpipe are modelled explicitly as 'segments', and -the equations of fluid flow are solved by ECLIPSE in these 1D -domains. The figure above shows a multisegment well with six segments -marked as Segment0 ... Segment5. The segments themselves are quite -abstract objects not directly linked to the grid, but indriectly -through the connections. In the figure the segment <-> connection -links are as follows: - - Segment0: C0, C1 - Segment1: C2 - Segment2: C3 - Segment3: C4, C5 - Segment4: C6 - Segment5: C7 - -Each segment has an outlet segment, which will link the segments -together into a geometry. - -The connection can in general be both to the main global grid, and to -an LGR. Hence all questions about connections must be LGR aware. This -is in contrast to the segments and branches which are geometric -objects, not directly coupled to a specific grid; however the segments -have a collection of connections - and these connections are of course -coupledte implementation these objects are modelled as such: - - 1. The well_state has hash table which is indexed by LGR name, and - the values are well_conn_collection instances. The - well_conn_collection type is a quite simple collection which can - tell how may connections there are, and index based lookup: - - - well_conn_collection_type * connections = well_state_get_grid_connections( well_state , LGR_NAME); - if (connections) { - well_conn_type * conn = well_conn_collection_iget( connections , 0 ); - printf("Have %d connections \n",well_conn_collection_get_size( connections ); - } - - The connections to the global grid are stored with the 'LGR' name - given by the symbole ECL_GRID_GLOBAL_GRID, or alternatively the - function well_state_get_global_connections( well_state ) can be - used. - - - - 2. If - AND ONLY IF - the well is a multisegment well, you can query - the well_state object for information about segments and branches: - - if (well_state_is_MSW( well_state )) { - well_segment_collection_type * segments = well_state_get_segments( well_state ); - well_branch_collection_type * branches = well_state_get_branches( well_state ); - int branch_nr; - - for (branch_nr = 0; branch_nr < well_branch_collection_get_size( branches ); branch_nr++) { - well_segment_type * segment = well_branch_collection_iget_start_segment( branches , branhc_nr ); - while (segment) { - // Inspect the current segment. - segment = well_segment_get_outlet( segment ); - } - } - } - - - - -*/ - +#include #define WELL_STATE_TYPE_ID 613307832 @@ -164,18 +49,16 @@ struct well_state_struct { char * name; time_t valid_from_time; int valid_from_report; - int global_well_nr; bool open; well_type_enum type; - - hash_type * connections; // hash - well_segment_collection_type * segments; - well_branch_collection_type * branches; - - /*****************************************************************/ + + well_path_type * null_path; // This is a valid - empty path instance returned when the well does not have any cells in a particular LGR. vector_type * index_wellhead; // An well_conn_type instance representing the wellhead - indexed by grid_nr. hash_type * name_wellhead; // An well_conn_type instance representing the wellhead - indexed by lgr_name. + + vector_type * index_lgr_path; // Contains the various well_path instances indexed by grid_nr - global has grid_nr == 0. + hash_type * name_lgr_path; // Contains the different well_path instances indexed by lgr_name }; @@ -183,30 +66,34 @@ struct well_state_struct { UTIL_IS_INSTANCE_FUNCTION( well_state , WELL_STATE_TYPE_ID) -well_state_type * well_state_alloc(const char * well_name , int global_well_nr , bool open, well_type_enum type , int report_nr, time_t valid_from) { +static well_state_type * well_state_alloc_empty() { well_state_type * well_state = util_malloc( sizeof * well_state ); UTIL_TYPE_ID_INIT( well_state , WELL_STATE_TYPE_ID ); + well_state->index_lgr_path = vector_alloc_new(); + well_state->name_lgr_path = hash_alloc(); + well_state->index_wellhead = vector_alloc_new(); well_state->name_wellhead = hash_alloc(); - well_state->name = util_alloc_string_copy( well_name ); - well_state->valid_from_time = valid_from; - well_state->valid_from_report = report_nr; - well_state->open = open; - well_state->type = type; - well_state->global_well_nr = global_well_nr; - well_state->connections = hash_alloc(); - well_state->segments = well_segment_collection_alloc(); - well_state->branches = well_branch_collection_alloc(); - - /* See documentation of the 'IWEL_UNDOCUMENTED_ZERO' in well_const.h */ - if ((type == UNDOCUMENTED_ZERO) && open) - util_abort("%s: Invalid type value for open wells.\n",__func__ ); + well_state->null_path = well_path_alloc( NULL ); return well_state; } +/* + This function assumes that the ecl_file state has been restricted + to one LGR block with the ecl_file_subselect_block() function. +*/ +well_path_type * well_state_add_path( well_state_type * well_state , const ecl_file_type * rst_file , const char * grid_name , int grid_nr) { + well_path_type * well_path; + well_path = well_path_alloc( grid_name ); + + vector_safe_iset_owned_ref( well_state->index_lgr_path , grid_nr , well_path , well_path_free__); + hash_insert_ref( well_state->name_lgr_path , grid_name , well_path ); + + return well_path; +} void well_state_add_wellhead( well_state_type * well_state , const ecl_rsthead_type * header , const ecl_kw_type * iwel_kw , int well_nr , const char * grid_name , int grid_nr) { @@ -216,26 +103,72 @@ void well_state_add_wellhead( well_state_type * well_state , const ecl_rsthead_t vector_safe_iset_owned_ref( well_state->index_wellhead , grid_nr , wellhead , well_conn_free__ ); hash_insert_ref( well_state->name_wellhead , grid_name , wellhead ); } - + } +/* + This function assumes that the ecl_file state has been restricted + to one LGR block with the ecl_file_subselect_block() function. +*/ +static void well_state_add_connections( well_state_type * well_state , const ecl_file_type * rst_file , int grid_nr, int well_nr ) { + ecl_rsthead_type * header = ecl_rsthead_alloc( rst_file ); + const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0); + const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0); + const int iwel_offset = header->niwelz * well_nr; + int num_connections = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_CONNECTIONS_ITEM ); + ecl_kw_type * iseg_kw = NULL; + bool MSW = false; // MultiSegmentWell + int seg_well_nr = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_SEGMENTED_WELL_NR_ITEM) - 1; // -1: Ordinary well. + well_path_type * path; + + { + char * grid_name; + + if (grid_nr > 0) { + const ecl_kw_type * lgr_kw = ecl_file_iget_named_kw( rst_file , LGR_KW , 0 ); + grid_name = util_alloc_strip_copy(ecl_kw_iget_ptr( lgr_kw , 0)); + } else + grid_name = util_alloc_string_copy( GLOBAL_GRID_NAME ); + + path = well_state_add_path( well_state , rst_file , grid_name , grid_nr ); + well_state_add_wellhead( well_state , header , iwel_kw , well_nr , grid_name , grid_nr ); + free( grid_name ); + } + + /* The MSW information is only attached to the global grid. */ + if (seg_well_nr >= 0 && grid_nr == 0) + MSW = true; + + if (MSW) + iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0 ); + + { + int conn_nr; + for (conn_nr = 0; conn_nr < num_connections; conn_nr++) { + well_conn_type * conn = well_conn_alloc( icon_kw , iseg_kw , header , well_nr , seg_well_nr , conn_nr ); + if (conn != NULL) + well_path_add_conn( path , conn ); + } + } + ecl_rsthead_free( header ); +} /* This function assumes that the ecl_file state has been restricted to one LGR block with the ecl_file_subselect_block() function. Return value: -1 means that the well is not found in this LGR at - all. + all. */ static int well_state_get_lgr_well_nr( const well_state_type * well_state , const ecl_file_type * ecl_file) { int well_nr = -1; - + if (ecl_file_has_kw( ecl_file , ZWEL_KW)) { - ecl_rsthead_type * header = ecl_rsthead_alloc( ecl_file ); - const ecl_kw_type * zwel_kw = ecl_file_iget_named_kw( ecl_file , ZWEL_KW , 0 ); + ecl_rsthead_type * header = ecl_rsthead_alloc( ecl_file ); // + const ecl_kw_type * zwel_kw = ecl_file_iget_named_kw( ecl_file , ZWEL_KW , 0); int num_wells = header->nwells; well_nr = 0; while (true) { @@ -247,10 +180,10 @@ static int well_state_get_lgr_well_nr( const well_state_type * well_state , cons found = true; else well_nr++; - + free( lgr_well_name ); } - + if (found) break; else if (well_nr == num_wells) { @@ -258,7 +191,7 @@ static int well_state_get_lgr_well_nr( const well_state_type * well_state , cons well_nr = -1; break; } - + } ecl_rsthead_free( header ); } @@ -266,217 +199,97 @@ static int well_state_get_lgr_well_nr( const well_state_type * well_state , cons } - -well_type_enum well_state_translate_ecl_type_int(int int_type) { - well_type_enum type = UNDOCUMENTED_ZERO; - - switch (int_type) { - /* See documentation of the 'IWEL_UNDOCUMENTED_ZERO' in well_const.h */ - case(IWEL_UNDOCUMENTED_ZERO): - type = UNDOCUMENTED_ZERO; - break; - case(IWEL_PRODUCER): - type = PRODUCER; - break; - case(IWEL_OIL_INJECTOR): - type = OIL_INJECTOR; - break; - case(IWEL_GAS_INJECTOR): - type = GAS_INJECTOR; - break; - case(IWEL_WATER_INJECTOR): - type = WATER_INJECTOR; - break; - default: - util_abort("%s: Invalid type value %d\n",__func__ , int_type); - } - return type; -} - - - -/* - This function assumes that the ecl_file state has been restricted - to one LGR block with the ecl_file_subselect_block() function. -*/ - -static void well_state_add_connections__( well_state_type * well_state , - const ecl_file_type * rst_file , - const char * grid_name , - int grid_nr, - int well_nr ) { - - ecl_rsthead_type * header = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0); - - //const int iwel_offset = header->niwelz * well_nr; - //int seg_well_nr = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_SEGMENTED_WELL_NR_ITEM) - 1; // -1: Ordinary well. - - well_state_add_wellhead( well_state , header , iwel_kw , well_nr , grid_name , grid_nr ); - - if (!well_state_has_grid_connections( well_state , grid_name )) - hash_insert_hash_owned_ref( well_state->connections , grid_name, well_conn_collection_alloc( ) , well_conn_collection_free__ ); - - { - well_conn_collection_type * wellcc = hash_get( well_state->connections , grid_name ); - well_conn_collection_load_from_kw( wellcc , iwel_kw , icon_kw , well_nr , header ); - } - ecl_rsthead_free( header ); -} - - -static void well_state_add_global_connections( well_state_type * well_state , - const ecl_file_type * rst_file , - int well_nr ) { - well_state_add_connections__( well_state , rst_file , ECL_GRID_GLOBAL_GRID , 0 , well_nr ); -} - -static void well_state_add_LGR_connections( well_state_type * well_state , const ecl_grid_type * grid , ecl_file_type * ecl_file, int global_well_nr ) { - // Go through all the LGRs and add connections; both in the bulk - // grid and as wellhead. - int num_lgr = ecl_grid_get_num_lgr( grid ); - int lgr_nr; - for (lgr_nr = 0; lgr_nr < num_lgr; lgr_nr++) { - ecl_file_push_block( ecl_file ); // <-------------------------// - { // - ecl_file_subselect_block( ecl_file , LGR_KW , lgr_nr ); // - { // Restrict the file view - const char * grid_name = ecl_grid_iget_lgr_name( grid , lgr_nr ); // - int well_nr = well_state_get_lgr_well_nr( well_state , ecl_file ); // to one LGR block. - if (well_nr >= 0) // - well_state_add_connections__( well_state , ecl_file , grid_name , lgr_nr + 1, well_nr ); // - } // - } // - ecl_file_pop_block( ecl_file ); // <-------------------------// - } -} - - - -void well_state_add_connections( well_state_type * well_state , - const ecl_grid_type * grid , - ecl_file_type * rst_file , // Either an open .Xnnnn file or UNRST file restricted to one report step - int well_nr) { - - well_state_add_global_connections( well_state , rst_file , well_nr ); - well_state_add_LGR_connections( well_state , grid , rst_file , well_nr ); - -} - - -bool well_state_add_MSW( well_state_type * well_state , - const ecl_file_type * rst_file , - int well_nr) { - - if (ecl_file_has_kw( rst_file , ISEG_KW)) { - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0); - const ecl_kw_type * iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0); - ecl_kw_type * rseg_kw = NULL; - - int segments; - - if (ecl_file_has_kw( rst_file , RSEG_KW )) - /* - Here we check that the file has the RSEG_KW keyword, and pass - NULL if not. The rseg_kw pointer will later be used in - well_segment_collection_load_from_kw() where we test if this - is a MSW well. If this indeed is a MSW well the rseg_kw - pointer will be used unchecked, if it is then NULL => Crash - and burn. - */ - rseg_kw = ecl_file_iget_named_kw( rst_file , RSEG_KW , 0); - - segments = well_segment_collection_load_from_kw( well_state->segments , - well_nr , - iwel_kw , - iseg_kw , - rseg_kw , - rst_head); - - if (segments) { - hash_iter_type * grid_iter = hash_iter_alloc( well_state->connections ); - while (!hash_iter_is_complete( grid_iter )) { - const char * grid_name = hash_iter_get_next_key( grid_iter ); - const well_conn_collection_type * connections = hash_get( well_state->connections , grid_name ); - well_segment_collection_add_connections( well_state->segments , grid_name , connections ); - } - hash_iter_free( grid_iter ); - well_segment_collection_link( well_state->segments ); - well_segment_collection_add_branches( well_state->segments , well_state->branches ); - } - ecl_rsthead_free( rst_head ); - return true; - } else - return false; -} - - -bool well_state_is_MSW( const well_state_type * well_state) { - if (well_segment_collection_get_size( well_state->segments ) > 0) - return true; - else - return false; -} - - -well_state_type * well_state_alloc_from_file( ecl_file_type * ecl_file , const ecl_grid_type * grid , int report_nr , int global_well_nr) { +well_state_type * well_state_alloc( ecl_file_type * ecl_file , int report_nr , int global_well_nr) { if (ecl_file_has_kw( ecl_file , IWEL_KW)) { well_state_type * well_state = NULL; ecl_rsthead_type * global_header = ecl_rsthead_alloc( ecl_file ); const ecl_kw_type * global_iwel_kw = ecl_file_iget_named_kw( ecl_file , IWEL_KW , 0); const ecl_kw_type * global_zwel_kw = ecl_file_iget_named_kw( ecl_file , ZWEL_KW , 0); - + const int iwel_offset = global_header->niwelz * global_well_nr; { - char * name; - bool open; - well_type_enum type = UNDOCUMENTED_ZERO; + const int zwel_offset = global_header->nzwelz * global_well_nr; + well_state = well_state_alloc_empty(); + + well_state->valid_from_time = global_header->sim_time; + well_state->valid_from_report = report_nr; + well_state->name = util_alloc_strip_copy(ecl_kw_iget_ptr( global_zwel_kw , zwel_offset )); // Hardwired max 8 characters in Well Name + { int int_state = ecl_kw_iget_int( global_iwel_kw , iwel_offset + IWEL_STATUS_ITEM ); if (int_state > 0) - open = true; + well_state->open = true; else - open = false; + well_state->open = false; } - + { int int_type = ecl_kw_iget_int( global_iwel_kw , iwel_offset + IWEL_TYPE_ITEM); - type = well_state_translate_ecl_type_int( int_type ); + switch (int_type) { + /* See documentation of the 'IWEL_UNDOCUMENTED_ZERO' in well_const.h */ + case(IWEL_UNDOCUMENTED_ZERO): + well_state->type = UNDOCUMENTED_ZERO; + if (well_state->open) + util_abort("%s: Invalid type value %d\n",__func__ , int_type); + break; + case(IWEL_PRODUCER): + well_state->type = PRODUCER; + break; + case(IWEL_OIL_INJECTOR): + well_state->type = OIL_INJECTOR; + break; + case(IWEL_GAS_INJECTOR): + well_state->type = GAS_INJECTOR; + break; + case(IWEL_WATER_INJECTOR): + well_state->type = WATER_INJECTOR; + break; + default: + util_abort("%s: Invalid type value %d\n",__func__ , int_type); + } } - + + + // Add global connections: + well_state_add_connections( well_state , ecl_file , 0 , global_well_nr ); + + + + // Go through all the LGRs and add connections; both in the bulk + // grid and as wellhead. + { - const int zwel_offset = global_header->nzwelz * global_well_nr; - name = util_alloc_strip_copy(ecl_kw_iget_ptr( global_zwel_kw , zwel_offset )); // Hardwired max 8 characters in Well Name + int num_lgr = ecl_file_get_num_named_kw( ecl_file , LGR_KW ); + int lgr_nr; + for (lgr_nr = 0; lgr_nr < num_lgr; lgr_nr++) { + ecl_file_push_block( ecl_file ); // <-------------------- + { // + ecl_file_subselect_block( ecl_file , LGR_KW , lgr_nr ); // + { // Restrict the file view + int well_nr = well_state_get_lgr_well_nr( well_state , ecl_file); // to one LGR block. + if (well_nr >= 0) // + well_state_add_connections( well_state , ecl_file , lgr_nr + 1, well_nr ); // + } // + } // + ecl_file_pop_block( ecl_file ); // <-------------------- + } } - - well_state = well_state_alloc(name , global_well_nr , open , type , report_nr , global_header->sim_time); - free( name ); - - well_state_add_connections( well_state , grid , ecl_file , global_well_nr); - if (ecl_file_has_kw( ecl_file , ISEG_KW)) - well_state_add_MSW( well_state , ecl_file , global_well_nr ); - } + } ecl_rsthead_free( global_header ); return well_state; - } else + } else /* This seems a bit weird - have come over E300 restart files without the IWEL keyword. */ return NULL; } - - - - - - void well_state_free( well_state_type * well ) { + hash_free( well->name_lgr_path ); + vector_free( well->index_lgr_path ); + hash_free( well->name_wellhead ); vector_free( well->index_wellhead ); - hash_free( well->connections ); - well_segment_collection_free( well->segments ); - well_branch_collection_free( well->branches ); + + well_path_free( well->null_path ); free( well->name ); free( well ); @@ -508,7 +321,7 @@ const well_conn_type * well_state_get_wellhead( const well_state_type * well_sta } -well_type_enum well_state_get_type( const well_state_type * well_state){ +well_type_enum well_state_get_type( const well_state_type * well_state){ return well_state->type; } @@ -516,54 +329,146 @@ bool well_state_is_open( const well_state_type * well_state ) { return well_state->open; } -int well_state_get_well_nr( const well_state_type * well_state ) { - return well_state->global_well_nr; -} - - const char * well_state_get_name( const well_state_type * well_state ) { return well_state->name; } +/*****************************************************************/ + +well_path_type * well_state_get_path( const well_state_type * well_state , const char * lgr_name) { + if (hash_has_key( well_state->name_lgr_path , lgr_name)) + return hash_get( well_state->name_lgr_path , lgr_name ); + else + return well_state->null_path; +} + +well_path_type * well_state_iget_path( const well_state_type * well_state , int grid_nr) { + well_path_type * path = vector_safe_iget( well_state->index_lgr_path , grid_nr ); + if (path != NULL) + return path; + else + return well_state->null_path; +} + + +const well_conn_type ** well_state_iget_lgr_connections(const well_state_type * well_state , int grid_nr , int branch_nr ) { + well_path_type * well_path = well_state_iget_path( well_state , grid_nr ); + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + + if (branch != NULL) + return well_branch_get_connections( branch ); + else + return NULL; // Branch does not exist - or has 0 connections. +} + + +const well_conn_type ** well_state_get_lgr_connections(const well_state_type * well_state , const char * lgr_name , int branch_nr) { + well_path_type * well_path = well_state_get_path( well_state , lgr_name ); + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + if (branch != NULL) + return well_branch_get_connections( branch ); + else + return NULL; // Branch does not exist - or has 0 connections. +} + + +const well_conn_type ** well_state_get_connections(const well_state_type * well_state , int branch_nr ) { + return well_state_iget_lgr_connections(well_state , 0 , branch_nr ); +} + +/*****************************************************************/ + +int well_state_iget_num_lgr_connections(const well_state_type * well_state , int grid_nr , int branch_nr ) { + well_path_type * well_path = well_state_iget_path( well_state , grid_nr ); + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + if (branch != NULL) + return well_branch_get_length( branch ); + else + return 0; +} + +int well_state_get_num_lgr_connections(const well_state_type * well_state , const char * lgr_name , int branch_nr) { + well_path_type * well_path = well_state_get_path( well_state , lgr_name ); + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + if (branch != NULL) + return well_branch_get_length( branch ); + else + return 0; +} + + +int well_state_get_num_connections(const well_state_type * well_state , int branch_nr ) { + return well_state_iget_num_lgr_connections(well_state , 0 , branch_nr ); +} + +/*****************************************************************/ + +int well_state_iget_lgr_num_branches( const well_state_type * well_state , int grid_nr) { + well_path_type * well_path = well_state_iget_path( well_state , grid_nr ); + return well_path_get_max_branches( well_path ); +} + +int well_state_get_lgr_num_branches( const well_state_type * well_state , const char * lgr_name) { + well_path_type * well_path = well_state_get_path( well_state , lgr_name ); + return well_path_get_max_branches( well_path ); +} + + +int well_state_get_num_branches(const well_state_type * well_state ) { + return well_state_iget_lgr_num_branches( well_state , 0 ); +} + +/*****************************************************************/ + +int well_state_get_num_paths( const well_state_type * well_state ) { + return vector_get_size( well_state->index_lgr_path ); +} /*****************************************************************/ void well_state_summarize( const well_state_type * well_state , FILE * stream ) { + fprintf(stream , "Well: %s \n" , well_state->name ); + { + int grid_nr; + for (grid_nr=0; grid_nr < well_state_get_num_paths( well_state ); grid_nr++) { + well_path_type * well_path = well_state_iget_path(well_state , grid_nr ); + if (well_path_get_grid_name( well_path ) != NULL) { + fprintf(stream , " Grid: %-8s\n",well_path_get_grid_name( well_path )); + + { + const well_conn_type * global_head = well_state_iget_wellhead( well_state , grid_nr ); + if (global_head != NULL) + fprintf(stream , " Wellhead: (%3d,%3d,%3d)\n" , well_conn_get_i( global_head ) , well_conn_get_j(global_head) , well_conn_get_k( global_head) ); + else + fprintf(stream , " Wellhead: ------------\n" ); + } + + { + int num_branches = well_path_get_max_branches(well_path); + int branch_nr; + for (branch_nr = 0; branch_nr < num_branches; branch_nr++) { + well_branch_type * branch = well_path_iget_branch( well_path , branch_nr ); + if (branch != NULL) { + const well_conn_type ** connections = well_branch_get_connections( branch ); + int num_connections = well_branch_get_length( branch ); + int iconn; + + fprintf(stream , " Branch %2d: [" , branch_nr ); + for (iconn=0; iconn < num_connections; iconn++) { + const well_conn_type * conn = connections[ iconn ]; + fprintf(stream, "(%3d,%3d,%3d)",well_conn_get_i( conn ) , well_conn_get_j( conn ), well_conn_get_k( conn )); + if (iconn == (num_connections - 1)) + fprintf(stream , "]\n"); + else { + fprintf(stream , ", "); + if ((iconn + 1) % 10 == 0) + fprintf(stream , "\n "); + } + } + } + } + } + } + } + } } - - -const well_conn_collection_type * well_state_get_grid_connections( const well_state_type * well_state , const char * grid_name) { - if (hash_has_key( well_state->connections , grid_name)) - return hash_get( well_state->connections , grid_name); - else - return NULL; -} - - -const well_conn_collection_type * well_state_get_global_connections( const well_state_type * well_state ) { - return well_state_get_grid_connections( well_state , ECL_GRID_GLOBAL_GRID ); -} - - -bool well_state_has_grid_connections( const well_state_type * well_state , const char * grid_name) { - if (hash_has_key( well_state->connections , grid_name)) - return true; - else - return false; -} - - -bool well_state_has_global_connections( const well_state_type * well_state ) { - return well_state_has_grid_connections( well_state , ECL_GRID_GLOBAL_GRID ); -} - - -well_segment_collection_type * well_state_get_segments( const well_state_type * well_state ) { - return well_state->segments; -} - - -well_branch_collection_type * well_state_get_branches( const well_state_type * well_state ) { - return well_state->branches; -} - diff --git a/ThirdParty/Ert/devel/libecl_well/tests/CMakeLists.txt b/ThirdParty/Ert/devel/libecl_well/tests/CMakeLists.txt index 7c47c45ef9..d17c7ee460 100644 --- a/ThirdParty/Ert/devel/libecl_well/tests/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libecl_well/tests/CMakeLists.txt @@ -1,97 +1,3 @@ -add_executable( well_conn_collection well_conn_collection.c ) -target_link_libraries( well_conn_collection ecl_well ) -set_target_properties( well_conn_collection PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_conn_collection ${EXECUTABLE_OUTPUT_PATH}/well_conn_collection ) - -add_executable( well_branch_collection well_branch_collection.c ) -target_link_libraries( well_branch_collection ecl_well ) -set_target_properties( well_branch_collection PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_branch_collection ${EXECUTABLE_OUTPUT_PATH}/well_branch_collection ) - -add_executable( well_conn well_conn.c ) -target_link_libraries( well_conn ecl_well ) -set_target_properties( well_conn PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_conn ${EXECUTABLE_OUTPUT_PATH}/well_conn ) - -add_executable( well_state well_state.c ) -target_link_libraries( well_state ecl_well ) -set_target_properties( well_state PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_state ${EXECUTABLE_OUTPUT_PATH}/well_state ) - -add_executable( well_state_load well_state_load.c ) -target_link_libraries( well_state_load ecl_well ) -set_target_properties( well_state_load PROPERTIES COMPILE_FLAGS "-Werror") - -add_executable( well_state_load_missing_RSEG well_state_load_missing_RSEG.c ) -target_link_libraries( well_state_load_missing_RSEG ecl_well ) -set_target_properties( well_state_load_missing_RSEG PROPERTIES COMPILE_FLAGS "-Werror") - - -add_test( well_state_load1 ${EXECUTABLE_OUTPUT_PATH}/well_state_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.X0030) - -add_test( well_state_load2 ${EXECUTABLE_OUTPUT_PATH}/well_state_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/MSWcase/MSW_CASE.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/MSWcase/MSW_CASE.X0021) - -add_test( well_state_load3 ${EXECUTABLE_OUTPUT_PATH}/well_state_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW/MSW.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW/MSW.X0123) - -add_test( well_state_load4 ${EXECUTABLE_OUTPUT_PATH}/well_state_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW_LGR/LGR.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW_LGR/LGR.X0095) - -add_test( well_state_load5 ${EXECUTABLE_OUTPUT_PATH}/well_state_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.X0061) - -add_test( well_state_load_missing_RSEG1 ${EXECUTABLE_OUTPUT_PATH}/well_state_load_missing_RSEG ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.X0061) - -add_test( well_state_load_missing_RSEG2 ${EXECUTABLE_OUTPUT_PATH}/well_state_load_missing_RSEG ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW/MSW.EGRID - ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Troll/MSW/MSW.X0123) - - -add_executable( well_segment well_segment.c ) -target_link_libraries( well_segment ecl_well ) -set_target_properties( well_segment PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_segment ${EXECUTABLE_OUTPUT_PATH}/well_segment ) - -add_executable( well_segment_conn well_segment_conn.c ) -target_link_libraries( well_segment_conn ecl_well ) -set_target_properties( well_segment_conn PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_segment_conn ${EXECUTABLE_OUTPUT_PATH}/well_segment_conn ) - -add_executable( well_segment_load well_segment_load.c ) -target_link_libraries( well_segment_load ecl_well ) -set_target_properties( well_segment_load PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_segment_load ${EXECUTABLE_OUTPUT_PATH}/well_segment_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/MSWcase/MSW_CASE.X0021) - - -add_executable( well_segment_branch_conn_load well_segment_branch_conn_load.c ) -target_link_libraries( well_segment_branch_conn_load ecl_well ) -set_target_properties( well_segment_branch_conn_load PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_segment_branch_conn_load ${EXECUTABLE_OUTPUT_PATH}/well_segment_branch_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/MSWcase/MSW_CASE.X0021) - -add_executable( well_info well_info.c ) -target_link_libraries( well_info ecl_well ) -set_target_properties( well_info PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_info ${EXECUTABLE_OUTPUT_PATH}/well_info ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID ) - - -add_executable( well_segment_collection well_segment_collection.c ) -target_link_libraries( well_segment_collection ecl_well ) -set_target_properties( well_segment_collection PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_segment_collection ${EXECUTABLE_OUTPUT_PATH}/well_segment_collection ) - - -add_executable( well_conn_load well_conn_load.c ) -target_link_libraries( well_conn_load ecl_well ) -set_target_properties( well_conn_load PROPERTIES COMPILE_FLAGS "-Werror") -add_test( well_conn_load1 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.X0030 F) -add_test( well_conn_load2 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/10kcase/TEST10K_FLT_LGR_NNC.X0021 F) -add_test( well_conn_load3 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/MSWcase/MSW_CASE.X0021 T) -add_test( well_conn_load4 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/AmalgLGRcase/TESTCASE_AMALG_LGR.X0021 F) -add_test( well_conn_load5 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/DualPoro/DUALPORO.X0009 F) -add_test( well_conn_load6 ${EXECUTABLE_OUTPUT_PATH}/well_conn_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/0.9.2_LGR/BASE_REF_XY3Z1_T30_WI.X0003 F) - add_executable( well_ts well_ts.c ) target_link_libraries( well_ts ecl_well ) add_test( well_ts ${EXECUTABLE_OUTPUT_PATH}/well_ts ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/CO2case/BASE_CASE ) @@ -106,27 +12,10 @@ add_test( well_dualp ${EXECUTABLE_OUTPUT_PATH}/well_dualp ${PROJECT_SOURCE_DIR} add_executable( well_lgr_load well_lgr_load.c ) target_link_libraries( well_lgr_load ecl_well ) -add_test( well_lgr_load1 ${EXECUTABLE_OUTPUT_PATH}/well_lgr_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/0.9.2_LGR/BASE_REF_XY3Z1_T30_WI.EGRID ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/0.9.2_LGR/BASE_REF_XY3Z1_T30_WI.X0003) -add_test( well_lgr_load2 ${EXECUTABLE_OUTPUT_PATH}/well_lgr_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/AmalgLGRcase/TESTCASE_AMALG_LGR.EGRID ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/AmalgLGRcase/TESTCASE_AMALG_LGR.X0016) +add_test( well_lgr_load1 ${EXECUTABLE_OUTPUT_PATH}/well_lgr_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/0.9.2_LGR/BASE_REF_XY3Z1_T30_WI.X0003) +add_test( well_lgr_load2 ${EXECUTABLE_OUTPUT_PATH}/well_lgr_load ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/AmalgLGRcase/TESTCASE_AMALG_LGR.X0016) -set_property( TEST well_lgr_load1 PROPERTY LABELS StatoilData ) -set_property( TEST well_lgr_load2 PROPERTY LABELS StatoilData ) -set_property( TEST well_dualp PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load1 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load2 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load3 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load4 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load5 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load_missing_RSEG1 PROPERTY LABELS StatoilData ) -set_property( TEST well_state_load_missing_RSEG2 PROPERTY LABELS StatoilData ) -set_property( TEST well_dualp PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load1 PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load2 PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load3 PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load4 PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load5 PROPERTY LABELS StatoilData ) -set_property( TEST well_conn_load6 PROPERTY LABELS StatoilData ) -set_property( TEST well_info PROPERTY LABELS StatoilData ) -set_property( TEST well_segment_load PROPERTY LABELS StatoilData ) -set_property( TEST well_segment_branch_conn_load PROPERTY LABELS StatoilData ) -set_property( TEST well_ts PROPERTY LABELS StatoilData ) +set_property( TEST well_lgr_load1 PROPERTY LABELS Statoil ) +set_property( TEST well_lgr_load2 PROPERTY LABELS Statoil ) +set_property( TEST well_dualp PROPERTY LABELS Statoil ) +set_property( TEST well_ts PROPERTY LABELS Statoil ) diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_branch_collection.c b/ThirdParty/Ert/devel/libecl_well/tests/well_branch_collection.c deleted file mode 100644 index bd6d410d3a..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_branch_collection.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_branch_collection.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 - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - - well_branch_collection_type * branches = well_branch_collection_alloc(); - double * rseg_data = util_calloc( 100 , sizeof * rseg_data ); - const double depth = 100; - const double length = 20; - const double total_length = 200; - const double diameter = 10; - - rseg_data[ RSEG_DEPTH_INDEX ] = depth; - rseg_data[ RSEG_LENGTH_INDEX ] = length; - rseg_data[ RSEG_TOTAL_LENGTH_INDEX ] = total_length; - rseg_data[ RSEG_DIAMETER_INDEX ] = diameter; - - test_assert_true( well_branch_collection_is_instance( branches )); - test_assert_int_equal( well_branch_collection_get_size( branches ) , 0 ); - test_assert_NULL( well_branch_collection_iget_start_segment( branches , 0 )); - test_assert_NULL( well_branch_collection_get_start_segment( branches , 0 )); - test_assert_false( well_branch_collection_has_branch( branches , 0 )); - { - well_segment_type * segment1 = well_segment_alloc(189 , 99 , 78 , rseg_data); - well_segment_type * segment2 = well_segment_alloc(200 , 189 , 78 , rseg_data); - - test_assert_false( well_branch_collection_add_start_segment( branches , segment1 )); - - test_assert_true( well_segment_link( segment2 , segment1 )); - test_assert_true( well_branch_collection_add_start_segment( branches , segment2 )); - - test_assert_int_equal( well_branch_collection_get_size( branches ) , 1 ); - test_assert_true( well_segment_is_instance( well_branch_collection_iget_start_segment( branches , 0 ))); - test_assert_true( well_segment_is_instance( well_branch_collection_get_start_segment( branches , 78 ))); - test_assert_true( well_branch_collection_has_branch( branches , 78 )); - - } - well_branch_collection_free( branches ); - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_conn.c b/ThirdParty/Ert/devel/libecl_well/tests/well_conn.c deleted file mode 100644 index 255aac1d8a..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_conn.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn.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 - - -int main(int argc , char ** argv) { - int i = 10; - int j = 5; - int k = 16; - bool open = true; - test_install_SIGNALS(); - - { - well_conn_dir_enum dir = well_conn_dirX; - well_conn_type * conn = well_conn_alloc(i,j,k,dir,open); - well_conn_type * conn2 = well_conn_alloc(i,j,k,dir,open); - well_conn_type * conn3 = well_conn_alloc(i,j,k+1,dir,open); - test_assert_not_NULL( conn ); - test_assert_true( well_conn_is_instance( conn )); - test_assert_int_equal( i , well_conn_get_i( conn )); - test_assert_int_equal( j , well_conn_get_j( conn )); - test_assert_int_equal( k , well_conn_get_k( conn )); - test_assert_int_equal( dir , well_conn_get_dir( conn )); - test_assert_bool_equal( open , well_conn_open( conn )); - test_assert_false( well_conn_MSW( conn )); - test_assert_true( well_conn_matrix_connection( conn )); - test_assert_true( well_conn_equal( conn , conn2 )); - test_assert_false( well_conn_equal( conn , conn3 )); - well_conn_free( conn ); - } - - { - well_conn_dir_enum dir = well_conn_fracX; - well_conn_type * conn = well_conn_alloc(i,j,k,dir,open); - test_assert_NULL( conn ); - } - - - { - well_conn_dir_enum dir = well_conn_fracX; - well_conn_type * conn = well_conn_alloc_fracture(i,j,k,dir,open); - test_assert_not_NULL( conn ); - test_assert_int_equal( i , well_conn_get_i( conn )); - test_assert_int_equal( j , well_conn_get_j( conn )); - test_assert_int_equal( k , well_conn_get_k( conn )); - test_assert_bool_equal( open , well_conn_open( conn )); - test_assert_int_equal( dir , well_conn_get_dir( conn )); - test_assert_false( well_conn_MSW( conn )); - test_assert_false( well_conn_matrix_connection( conn )); - test_assert_true( well_conn_fracture_connection( conn )); - well_conn_free( conn ); - } - - - { - well_conn_dir_enum dir = well_conn_dirX; - well_conn_type * conn = well_conn_alloc_fracture(i,j,k,dir,open); - test_assert_not_NULL( conn ); - } - - { - int segment = 16; - well_conn_dir_enum dir = well_conn_dirX; - well_conn_type * conn = well_conn_alloc_MSW(i,j,k,dir,open,segment); - test_assert_not_NULL( conn ); - test_assert_int_equal( i , well_conn_get_i( conn )); - test_assert_int_equal( j , well_conn_get_j( conn )); - test_assert_int_equal( k , well_conn_get_k( conn )); - test_assert_int_equal( segment , well_conn_get_segment( conn )); - test_assert_bool_equal( open , well_conn_open( conn )); - test_assert_int_equal( dir , well_conn_get_dir( conn )); - test_assert_true( well_conn_MSW( conn )); - test_assert_true( well_conn_matrix_connection( conn )); - well_conn_free( conn ); - } - - - { - int segment = 16; - well_conn_dir_enum dir = well_conn_fracX; - well_conn_type * conn = well_conn_alloc_fracture_MSW(i,j,k,dir,open,segment); - test_assert_not_NULL( conn ); - test_assert_int_equal( i , well_conn_get_i( conn )); - test_assert_int_equal( j , well_conn_get_j( conn )); - test_assert_int_equal( k , well_conn_get_k( conn )); - test_assert_int_equal( segment , well_conn_get_segment( conn )); - test_assert_bool_equal( open , well_conn_open( conn )); - test_assert_int_equal( dir , well_conn_get_dir( conn )); - test_assert_true( well_conn_MSW( conn )); - test_assert_false( well_conn_matrix_connection( conn )); - well_conn_free( conn ); - } - - - - -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_conn_collection.c b/ThirdParty/Ert/devel/libecl_well/tests/well_conn_collection.c deleted file mode 100644 index 41b4fa4cfe..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_conn_collection.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn_collection.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 - - -void test_empty() { - well_conn_collection_type * wellcc = well_conn_collection_alloc( ); - test_assert_not_NULL( wellcc ); - test_assert_true( well_conn_collection_is_instance( wellcc )); - - test_assert_int_equal( 0 , well_conn_collection_get_size( wellcc )); - { - well_conn_type * conn = well_conn_collection_iget( wellcc , 0 ); - test_assert_NULL( conn ); - } - { - const well_conn_type * conn = well_conn_collection_iget_const( wellcc , 10 ); - test_assert_NULL( conn ); - } - - well_conn_collection_free( wellcc ); -} - - - -int main(int argc , char ** argv) { - test_empty(); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_conn_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_conn_load.c deleted file mode 100644 index 928744ec5b..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_conn_load.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn_load.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 - - - -int main(int argc , char ** argv) { - const char * Xfile = argv[1]; - bool MSW; - ecl_file_type * rst_file = ecl_file_open( Xfile , 0 ); - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - - test_install_SIGNALS(); - test_assert_true( util_sscanf_bool( argv[2] , &MSW )); - test_assert_not_NULL( rst_file ); - test_assert_not_NULL( rst_head ); - - { - int iwell; - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0 ); - const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0 ); - bool caseMSW = false; - - for (iwell = 0; iwell < rst_head->nwells; iwell++) { - const int iwel_offset = rst_head->niwelz * iwell; - int num_connections = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_CONNECTIONS_ITEM ); - int iconn; - well_conn_collection_type * wellcc = well_conn_collection_alloc( ); - well_conn_collection_type * wellcc_ref = well_conn_collection_alloc(); - - for (iconn = 0; iconn < num_connections; iconn++) { - well_conn_type * conn = well_conn_alloc_from_kw( icon_kw , rst_head , iwell , iconn ); - - test_assert_true( well_conn_is_instance( conn )); - test_assert_not_NULL( conn ); - if (!MSW) - test_assert_bool_equal( well_conn_MSW( conn ) , MSW); - else - caseMSW |= well_conn_MSW( conn ); - - well_conn_collection_add( wellcc , conn ); - well_conn_collection_add_ref( wellcc_ref , conn ); - test_assert_int_equal( iconn + 1 , well_conn_collection_get_size( wellcc )); - test_assert_ptr_equal( well_conn_collection_iget_const( wellcc , iconn) , conn); - test_assert_ptr_equal( well_conn_collection_iget_const( wellcc_ref , iconn) , conn); - } - well_conn_collection_free( wellcc_ref ); - { - - int i; - for (i=0; i < well_conn_collection_get_size( wellcc ); i++) - test_assert_true( well_conn_is_instance( well_conn_collection_iget_const( wellcc , i ))); - - } - { - well_conn_collection_type * wellcc2 = well_conn_collection_alloc(); - int i; - - test_assert_int_equal( well_conn_collection_get_size( wellcc ) , - well_conn_collection_load_from_kw( wellcc2 , iwel_kw , icon_kw , iwell , rst_head)); - - for (i=0; i < well_conn_collection_get_size( wellcc2 ); i++) { - test_assert_true( well_conn_is_instance( well_conn_collection_iget_const( wellcc2 , i ))); - test_assert_true( well_conn_equal( well_conn_collection_iget_const( wellcc2 , i ) , well_conn_collection_iget_const( wellcc , i ))); - } - well_conn_collection_free( wellcc2 ); - } - well_conn_collection_free( wellcc ); - } - test_assert_bool_equal( caseMSW , MSW); - } - - - exit( 0 ); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_info.c b/ThirdParty/Ert/devel/libecl_well/tests/well_info.c deleted file mode 100644 index 8a8dcb5424..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_info.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_conn.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 - - -int main(int argc , char ** argv) { - const char * grid_file = argv[1]; - - ecl_grid_type * grid = ecl_grid_alloc( grid_file ); - test_assert_not_NULL( grid ); - { - well_info_type * well_info = well_info_alloc( grid ); - test_assert_not_NULL( well_info ); - well_info_free( well_info ); - } - ecl_grid_free( grid ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_lgr_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_lgr_load.c index ea656e1164..d3a3b477c6 100644 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_lgr_load.c +++ b/ThirdParty/Ert/devel/libecl_well/tests/well_lgr_load.c @@ -41,10 +41,12 @@ int main( int argc , char ** argv) { Killing with SIGKILL (-9) will not give a backtrace.*/ signal(SIGABRT , util_abort_signal); /* Signal abort. */ { - ecl_grid_type * grid = ecl_grid_alloc( argv[1] ); - well_info_type * well_info = well_info_alloc( grid ); - - well_info_load_rstfile( well_info , argv[2]); + well_info_type * well_info = well_info_alloc( NULL ); + int i; + for (i=1; i < argc; i++) { + printf("Loading file: %s \n",argv[i]); + well_info_load_rstfile( well_info , argv[i]); + } // List all wells: { diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment.c deleted file mode 100644 index fcc34ad73d..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment.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 - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - double * rseg_data = util_calloc( 100 , sizeof * rseg_data ); - const double depth = 100; - const double length = 20; - const double total_length = 200; - const double diameter = 10; - - rseg_data[ RSEG_DEPTH_INDEX ] = depth; - rseg_data[ RSEG_LENGTH_INDEX ] = length; - rseg_data[ RSEG_TOTAL_LENGTH_INDEX ] = total_length; - rseg_data[ RSEG_DIAMETER_INDEX ] = diameter; - { - int segment_id = 78; - int outlet_segment_id = 100; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE; - well_segment_type * ws = well_segment_alloc(segment_id , outlet_segment_id , branch_nr, rseg_data); - - test_assert_true( well_segment_is_instance( ws )); - test_assert_int_equal( 0 , well_segment_get_link_count( ws )); - test_assert_NULL( well_segment_get_outlet( ws )); - test_assert_int_equal( well_segment_get_outlet_id( ws ) , outlet_segment_id ); - test_assert_int_equal( well_segment_get_branch_id( ws ) , branch_nr ); - test_assert_int_equal( well_segment_get_id( ws ) , segment_id ); - - test_assert_false( well_segment_nearest_wellhead( ws )); - test_assert_true( well_segment_active( ws )); - test_assert_true( well_segment_main_stem( ws )); - - test_assert_double_equal( depth , well_segment_get_depth( ws )); - test_assert_double_equal( length , well_segment_get_length( ws )); - test_assert_double_equal( total_length , well_segment_get_total_length( ws )); - test_assert_double_equal( diameter , well_segment_get_diameter( ws )); - - well_segment_free( ws ); - } - - { - int outlet_segment_id = ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE; - int branch_nr = 100; - well_segment_type * ws = well_segment_alloc(12 , outlet_segment_id , branch_nr, rseg_data); - - test_assert_true( well_segment_nearest_wellhead( ws )); - test_assert_false( well_segment_main_stem( ws )); - } - - - { - int outlet_segment_id = ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE; - well_segment_type * ws = well_segment_alloc(89 , outlet_segment_id , branch_nr, rseg_data); - - test_assert_false( well_segment_active( ws )); - } - - { - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE; - int outlet_id = 0; - well_segment_type * outlet = well_segment_alloc(outlet_id , ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE , branch_nr, rseg_data); - well_segment_type * ws = well_segment_alloc(100 , outlet_id , branch_nr, rseg_data); - - test_assert_true( well_segment_link( ws , outlet )); - test_assert_ptr_equal( well_segment_get_outlet( ws ) , outlet ); - test_assert_int_equal( well_segment_get_link_count( outlet ) , 1 ); - test_assert_ptr_not_equal( ws , well_segment_get_outlet( ws )); - - well_segment_link_strict( ws , outlet ); // This relinks - not very logical; refcount gets wrong. - well_segment_free( ws ); - } - - { - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE; - int outlet_id = 0; - well_segment_type * outlet = well_segment_alloc(outlet_id , ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE , branch_nr , rseg_data); - well_segment_type * ws = well_segment_alloc(100 , outlet_id + 1, branch_nr, rseg_data); - - test_assert_false( well_segment_link( ws , outlet )); - test_assert_NULL( well_segment_get_outlet( ws ) ); - test_assert_int_equal( well_segment_get_link_count( outlet ) , 0 ); - - well_segment_free( ws ); - } - free( rseg_data ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_branch_conn_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment_branch_conn_load.c deleted file mode 100644 index 36349ba508..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_branch_conn_load.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_conn_load.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 - - -int main(int argc , char ** argv) { - const char * Xfile = argv[1]; - ecl_file_type * rst_file = ecl_file_open( Xfile , 0 ); - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0 ); - const ecl_kw_type * iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0 ); - const ecl_kw_type * rseg_kw = ecl_file_iget_named_kw( rst_file , RSEG_KW , 0 ); - const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0 ); - - test_install_SIGNALS(); - test_assert_not_NULL( rst_file ); - test_assert_not_NULL( rst_head ); - { - int well_nr; - for (well_nr = 0; well_nr < rst_head->nwells; well_nr++) { - well_conn_collection_type * connections = well_conn_collection_alloc(); - well_conn_collection_load_from_kw( connections , iwel_kw , icon_kw , well_nr , rst_head); - { - well_segment_collection_type * segments = well_segment_collection_alloc(); - - if (well_segment_collection_load_from_kw( segments , well_nr , iwel_kw , iseg_kw , rseg_kw , rst_head )) { - well_branch_collection_type * branches = well_branch_collection_alloc(); - - test_assert_true( well_segment_well_is_MSW( well_nr , iwel_kw , rst_head)); - well_segment_collection_link( segments ); - { - int is; - for (is=0; is < well_segment_collection_get_size( segments ); is++) { - well_segment_type * segment = well_segment_collection_iget( segments , is ); - - if (well_segment_nearest_wellhead( segment )) - test_assert_NULL( well_segment_get_outlet( segment )); - else - test_assert_not_NULL( well_segment_get_outlet( segment )); - - test_assert_int_not_equal( well_segment_get_id( segment ) , well_segment_get_outlet_id( segment )); - test_assert_ptr_not_equal( segment , well_segment_get_outlet( segment )); - } - } - well_segment_collection_add_branches( segments , branches ); - { - int ib; - for (ib = 0; ib < well_branch_collection_get_size( branches ); ib++) { - const well_segment_type * start_segment = well_branch_collection_iget_start_segment( branches , ib ); - const well_segment_type * segment = start_segment; - - printf("Branch %d " , ib ); - while (segment) { - printf("%d -> ",well_segment_get_id( segment )); - segment = well_segment_get_outlet( segment ); - } - printf(" X \n"); - } - } - well_segment_collection_add_connections( segments , ECL_GRID_GLOBAL_GRID , connections ); - well_branch_collection_free( branches ); - } else - test_assert_false( well_segment_well_is_MSW( well_nr , iwel_kw , rst_head )); - - well_segment_collection_free( segments ); - } - well_conn_collection_free( connections ); - } - } - - ecl_file_close( rst_file ); - ecl_rsthead_free( rst_head ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_collection.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment_collection.c deleted file mode 100644 index 98c3772b68..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_collection.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_collection.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 - - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - - double * rseg_data = util_calloc( 100 , sizeof * rseg_data ); - well_segment_collection_type * sc = well_segment_collection_alloc(); - test_assert_not_NULL( sc ); - test_assert_int_equal( well_segment_collection_get_size( sc ) , 0 ); - - { - int outlet_segment_id = ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE; - well_segment_type * ws = well_segment_alloc(89 , outlet_segment_id , branch_nr, rseg_data); - - well_segment_collection_add( sc , ws ); - test_assert_int_equal( well_segment_collection_get_size( sc ) , 1); - test_assert_ptr_equal( well_segment_collection_iget( sc , 0 ) , ws ); - - test_assert_false( well_segment_collection_has_segment( sc , 451 )); - test_assert_true( well_segment_collection_has_segment( sc , 89 )); - test_assert_ptr_equal( well_segment_collection_get( sc , 89 ) , ws ); - } - - { - int outlet_segment_id = ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE; - well_segment_type * ws = well_segment_alloc(90 , outlet_segment_id , branch_nr , rseg_data); - - well_segment_collection_add( sc , ws ); - test_assert_int_equal( well_segment_collection_get_size( sc ) , 2); - test_assert_ptr_equal( well_segment_collection_iget( sc , 1 ) , ws ); - - test_assert_false( well_segment_collection_has_segment( sc , 451 )); - test_assert_true( well_segment_collection_has_segment( sc , 89 )); - test_assert_true( well_segment_collection_has_segment( sc , 90 )); - test_assert_ptr_equal( well_segment_collection_get( sc , 90 ) , ws ); - test_assert_NULL( well_segment_collection_get( sc , 76 )); - } - - { - int outlet_segment_id = ECLIPSE_WELL_SEGMENT_OUTLET_END_VALUE; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_INACTIVE_VALUE; - well_segment_type * ws = well_segment_alloc(89 , outlet_segment_id , branch_nr, rseg_data); - - well_segment_collection_add( sc , ws ); - test_assert_int_equal( well_segment_collection_get_size( sc ) , 2); - test_assert_ptr_equal( well_segment_collection_iget( sc , 0 ) , ws ); - - test_assert_false( well_segment_collection_has_segment( sc , 451 )); - test_assert_true( well_segment_collection_has_segment( sc , 89 )); - test_assert_ptr_equal( well_segment_collection_get( sc , 89 ) , ws ); - } - - free( rseg_data ); - well_segment_collection_free( sc ); - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn.c deleted file mode 100644 index 1779f6734d..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_conn.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 - - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - double * rseg_data = util_calloc( 100 , sizeof * rseg_data ); - { - int segment_id = 78; - int outlet_segment_id = 100; - int branch_nr = ECLIPSE_WELL_SEGMENT_BRANCH_MAIN_STEM_VALUE; - well_segment_type * ws = well_segment_alloc(segment_id , outlet_segment_id , branch_nr, rseg_data); - well_conn_type * conn1 = well_conn_alloc_MSW(1,1,1,true,well_conn_dirX,segment_id); - well_conn_type * conn2 = well_conn_alloc_MSW(1,1,1,true,well_conn_dirX,segment_id + 1); - - test_assert_false( well_segment_has_global_grid_connections( ws )); - - test_assert_true( well_segment_add_connection( ws , ECL_GRID_GLOBAL_GRID , conn1 )); - test_assert_false( well_segment_add_connection( ws , ECL_GRID_GLOBAL_GRID , conn2 )); - - test_assert_true( well_segment_has_grid_connections( ws , ECL_GRID_GLOBAL_GRID )); - test_assert_true( well_segment_has_global_grid_connections( ws )); - test_assert_false( well_segment_has_grid_connections( ws , "DoesNotExist")); - - test_assert_true( well_conn_collection_is_instance( well_segment_get_connections( ws , ECL_GRID_GLOBAL_GRID))); - test_assert_true( well_conn_collection_is_instance( well_segment_get_global_connections( ws))); - test_assert_NULL( well_segment_get_connections( ws , "doesNotExist")); - } - free( rseg_data ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn_load.c deleted file mode 100644 index 6fbdb46eb6..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_conn_load.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_conn_load.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 - - -int main(int argc , char ** argv) { - const char * Xfile = argv[1]; - ecl_file_type * rst_file = ecl_file_open( Xfile , 0 ); - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0 ); - const ecl_kw_type * iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0 ); - const ecl_kw_type * rseg_kw = ecl_file_iget_named_kw( rst_file , RSEG_KW , 0 ); - const ecl_kw_type * icon_kw = ecl_file_iget_named_kw( rst_file , ICON_KW , 0 ); - - test_install_SIGNALS(); - test_assert_not_NULL( rst_file ); - test_assert_not_NULL( rst_head ); - { - int well_nr; - for (well_nr = 0; well_nr < rst_head->nwells; well_nr++) { - well_conn_collection_type * connections = well_conn_collection_alloc(); - well_conn_collection_load_from_kw( connections , iwel_kw , icon_kw , well_nr , rst_head); - { - well_segment_collection_type * segments = well_segment_collection_alloc(); - - if (well_segment_collection_load_from_kw( segments , well_nr , iwel_kw , iseg_kw , rseg_kw , rst_head )) { - well_branch_collection_type * branches = well_branch_collection_alloc(); - - test_assert_true( well_segment_well_is_MSW( well_nr , iwel_kw , rst_head)); - well_segment_collection_link( segments ); - { - int is; - for (is=0; is < well_segment_collection_get_size( segments ); is++) { - well_segment_type * segment = well_segment_collection_iget( segments , is ); - - if (well_segment_nearest_wellhead( segment )) - test_assert_NULL( well_segment_get_outlet( segment )); - else - test_assert_not_NULL( well_segment_get_outlet( segment )); - - test_assert_ptr_not_equal( segment , well_segment_get_outlet( segment )); - } - } - - well_segment_collection_add_branches( segments , branches ); - { - int ib; - for (ib = 0; ib < well_branch_collection_get_size( branches ); ib++) { - const well_segment_type * start_segment = well_branch_collection_iget_start_segment( branches , ib ); - const well_segment_type * segment = start_segment; - - printf("Branch %d/%d " , ib , well_branch_collection_get_size( branches ) ); - while (segment) { - printf("[%p]%d -> \n",segment , well_segment_get_id( segment )); - segment = well_segment_get_outlet( segment ); - } - printf("\n"); - sleep(1); - } - } - well_segment_collection_add_connections( segments , ECL_GRID_GLOBAL_GRID , connections ); - well_branch_collection_free( branches ); - } else - test_assert_false( well_segment_well_is_MSW( well_nr , iwel_kw , rst_head )); - - well_segment_collection_free( segments ); - } - well_conn_collection_free( connections ); - } - } - - ecl_file_close( rst_file ); - ecl_rsthead_free( rst_head ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_segment_load.c deleted file mode 100644 index 032632b186..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_segment_load.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_segment_load.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 - - -int main(int argc , char ** argv) { - const char * Xfile = argv[1]; - ecl_file_type * rst_file = ecl_file_open( Xfile , 0 ); - ecl_rsthead_type * rst_head = ecl_rsthead_alloc( rst_file ); - const ecl_kw_type * iwel_kw = ecl_file_iget_named_kw( rst_file , IWEL_KW , 0 ); - const ecl_kw_type * iseg_kw = ecl_file_iget_named_kw( rst_file , ISEG_KW , 0 ); - const ecl_kw_type * rseg_kw = ecl_file_iget_named_kw( rst_file , RSEG_KW , 0 ); - - test_install_SIGNALS(); - test_assert_not_NULL( rst_file ); - test_assert_not_NULL( rst_head ); - - { - int well_nr; - - for (well_nr = 0; well_nr < rst_head->nwells; well_nr++) { - int iwel_offset = rst_head->niwelz * well_nr; - well_segment_collection_type * segments = well_segment_collection_alloc(); - int seg_well_nr = ecl_kw_iget_int( iwel_kw , iwel_offset + IWEL_SEGMENTED_WELL_NR_ITEM) - 1; // -1: Ordinary well. - if (seg_well_nr >= 0) { - int segment_id; - int segment_count = 0; - - for (segment_id = 0; segment_id < rst_head->nsegmx; segment_id++) { - well_segment_type * segment = well_segment_alloc_from_kw( iseg_kw , rseg_kw , rst_head , seg_well_nr , segment_id ); - - test_assert_true( well_segment_is_instance( segment )); - - if (well_segment_active( segment )) { - well_segment_collection_add( segments , segment ); - test_assert_int_equal( well_segment_collection_get_size( segments ) , segment_count + 1); - test_assert_ptr_equal( well_segment_collection_iget( segments , segment_count) , segment ); - segment_count++; - } else - well_segment_free( segment ); - } - } - - { - well_segment_collection_type * segments2 = well_segment_collection_alloc(); - test_assert_int_equal( well_segment_collection_load_from_kw( segments2 , well_nr , iwel_kw , iseg_kw , rseg_kw , rst_head ) , - well_segment_collection_get_size( segments)); - - well_segment_collection_link( segments ); - well_segment_collection_link( segments2 ); - well_segment_collection_free( segments ); - well_segment_collection_free( segments2 ); - } - } - } - ecl_file_close( rst_file ); - ecl_rsthead_free( rst_head ); - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_state.c b/ThirdParty/Ert/devel/libecl_well/tests/well_state.c deleted file mode 100644 index 9131c3ebe7..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_state.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_state.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 - - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - - test_assert_int_equal( well_state_translate_ecl_type_int( IWEL_UNDOCUMENTED_ZERO) , UNDOCUMENTED_ZERO); - test_assert_int_equal( well_state_translate_ecl_type_int( IWEL_PRODUCER) , PRODUCER); - test_assert_int_equal( well_state_translate_ecl_type_int( IWEL_WATER_INJECTOR) , WATER_INJECTOR); - test_assert_int_equal( well_state_translate_ecl_type_int( IWEL_GAS_INJECTOR) , GAS_INJECTOR); - test_assert_int_equal( well_state_translate_ecl_type_int( IWEL_OIL_INJECTOR) , OIL_INJECTOR); - - { - const char * well_name = "WELL"; - int report_nr = 100; - int global_well_nr = 67; - time_t valid_from = -1; - bool open = false; - well_type_enum type = GAS_INJECTOR; - - well_state_type * well_state = well_state_alloc(well_name , global_well_nr , open , type , report_nr , valid_from); - test_assert_true( well_state_is_instance( well_state) ); - - test_assert_false( well_state_is_MSW( well_state )); - test_assert_string_equal( well_name , well_state_get_name( well_state )); - test_assert_int_equal( global_well_nr , well_state_get_well_nr( well_state )); - test_assert_bool_equal( open , well_state_is_open( well_state )); - test_assert_int_equal( type , well_state_get_type( well_state )); - test_assert_int_equal( report_nr , well_state_get_report_nr( well_state )); - test_assert_time_t_equal( valid_from , well_state_get_sim_time( well_state )); - - test_assert_NULL( well_state_get_global_connections( well_state )); - test_assert_false( well_state_has_global_connections( well_state )); - test_assert_NULL( well_state_get_grid_connections( well_state , "GRID")); - test_assert_false( well_state_has_grid_connections( well_state , "GRID")); - - well_state_free( well_state ); - } - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_state_load.c b/ThirdParty/Ert/devel/libecl_well/tests/well_state_load.c deleted file mode 100644 index d9375259d4..0000000000 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_state_load.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright (C) 2013 Statoil ASA, Norway. - - The file 'well_state_load.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 - - -int main(int argc , char ** argv) { - test_install_SIGNALS(); - { - const char * grid_file = argv[1]; - const char * rst_file_name = argv[2]; - - ecl_grid_type * grid = ecl_grid_alloc( grid_file ); - ecl_file_type * rst_file = ecl_file_open( rst_file_name , 0); - ecl_rsthead_type * header = ecl_rsthead_alloc( rst_file ); - const char * well_name = "WELL"; - int report_nr = 100; - time_t valid_from = -1; - bool open = false; - well_type_enum type = GAS_INJECTOR; - int global_well_nr = 0; - - for (global_well_nr = 0; global_well_nr < header->nwells; global_well_nr++) { - well_state_type * well_state = well_state_alloc(well_name , global_well_nr , open , type , report_nr , valid_from); - test_assert_true( well_state_is_instance( well_state) ); - well_state_add_connections( well_state , grid , rst_file , 0 ); - - test_assert_true( well_state_has_grid_connections( well_state , ECL_GRID_GLOBAL_GRID )); - test_assert_false( well_state_has_grid_connections( well_state , "???" )); - test_assert_true( well_state_has_global_connections( well_state )); - - well_state_add_MSW( well_state , rst_file , global_well_nr ); - { - const well_segment_collection_type * segments = well_state_get_segments( well_state ); - const well_branch_collection_type * branches = well_state_get_branches( well_state ); - - if (well_state_is_MSW( well_state )) { - test_assert_true( ecl_file_has_kw( rst_file , ISEG_KW )); - test_assert_int_not_equal( well_segment_collection_get_size( segments ) , 0); - test_assert_int_not_equal( well_branch_collection_get_size( branches ) , 0); - } else { - test_assert_int_equal( well_segment_collection_get_size( segments ) , 0); - test_assert_int_equal( well_branch_collection_get_size( branches ) , 0); - test_assert_false( well_state_is_MSW( well_state )); - } - } - well_state_free( well_state ); - } - } - - exit(0); -} diff --git a/ThirdParty/Ert/devel/libecl_well/tests/well_ts.c b/ThirdParty/Ert/devel/libecl_well/tests/well_ts.c index 25d221f0c0..33b1d4c0fb 100644 --- a/ThirdParty/Ert/devel/libecl_well/tests/well_ts.c +++ b/ThirdParty/Ert/devel/libecl_well/tests/well_ts.c @@ -23,16 +23,13 @@ #include #include -#include #include int main(int argc , char ** argv) { const char * case_path = argv[1]; - char * grid_file = util_alloc_filename(NULL , case_path, "EGRID"); stringlist_type * file_list = stringlist_alloc_new( ); - ecl_grid_type * grid = ecl_grid_alloc( grid_file ); ecl_util_select_filelist( NULL , case_path , ECL_RESTART_FILE , false , file_list); printf("Searching in:%s \n",case_path); @@ -53,7 +50,7 @@ int main(int argc , char ** argv) { } } { - well_info_type * well_info = well_info_alloc( grid ); + well_info_type * well_info = well_info_alloc( NULL ); int i; for (i=0; i < stringlist_get_size( file_list ); i++) well_info_load_rstfile( well_info , stringlist_iget(file_list , i)); @@ -61,7 +58,7 @@ int main(int argc , char ** argv) { } { - well_info_type * well_info = well_info_alloc( grid ); + well_info_type * well_info = well_info_alloc( NULL ); int i; stringlist_reverse( file_list ); for (i=0; i < stringlist_get_size( file_list ); i++) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/gert_main.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/gert_main.py similarity index 60% rename from ThirdParty/Ert/devel/python/python/ert_gui/gert_main.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/gert_main.py index c3ace25019..828d8f4483 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/gert_main.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/gert_main.py @@ -114,102 +114,94 @@ from PyQt4 import QtGui, QtCore import sys import os - from ert.ert.ertwrapper import ErtWrapper import ert_gui.widgets.util import ert_gui.widgets.help -ert_gui.widgets.help.help_prefix = os.getenv("ERT_SHARE_PATH")+ "/gui/help/" -ert_gui.widgets.util.img_prefix = os.getenv("ERT_SHARE_PATH")+ "/gui/img/" +ert_gui.widgets.help.help_prefix = os.getenv("GERT_SHARE_PATH")+ "/help/" +ert_gui.widgets.util.img_prefix = os.getenv("GERT_SHARE_PATH")+ "/img/" + -from ert.enkf.enkf_main import EnKFMain from ert_gui.newconfig import NewConfigurationDialog + +app = QtGui.QApplication(sys.argv) #Early so that QT is initialized before other imports + from ert_gui.pages.application import Application from ert_gui.pages.init.initpanel import InitPanel from ert_gui.pages.run.runpanel import RunPanel +from ert_gui.pages.config.configpages import ConfigPages +from ert_gui.pages.plot.plotpanel import PlotPanel from ert_gui.widgets.helpedwidget import ContentModel from ert_gui.widgets.util import resourceImage, resourceIcon - - import matplotlib +print "PyQt4 version: ", QtCore.qVersion() +print "matplotlib version: ", matplotlib.__version__ -def main(): - app = QtGui.QApplication(sys.argv) #Early so that QT is initialized before other imports - from ert_gui.pages.config.configpages import ConfigPages - from ert_gui.pages.plot.plotpanel import PlotPanel +splash = QtGui.QSplashScreen(resourceImage("splash") , QtCore.Qt.WindowStaysOnTopHint) +splash.show() +splash.showMessage("Starting up...", color=QtCore.Qt.white) +app.processEvents() - splash = QtGui.QSplashScreen(resourceImage("newsplash") , QtCore.Qt.WindowStaysOnTopHint) - splash.show() - splash.showMessage("Starting up...", color=QtCore.Qt.white) - app.processEvents() +window = Application() - window = Application() +splash.showMessage("Bootstrapping...", color=QtCore.Qt.white) +app.processEvents() - splash.showMessage("Bootstrapping...", color=QtCore.Qt.white) - app.processEvents() +ert = ErtWrapper( ) +strict = True +site_config = os.getenv("ERT_SITE_CONFIG") +if len(sys.argv) == 1: + print "-----------------------------------------------------------------" + print "-- You must supply the name of configuration file as the first --" + print "-- commandline argument: --" + print "-- --" + print "-- bash% gert --" + print "-- --" + print "-- If the configuration file does not exist, gert will create --" + print "-- create a new configuration file. --" + print "-----------------------------------------------------------------" + sys.exit( ) - ert = ErtWrapper( ) - strict = True - site_config = os.getenv("ERT_SITE_CONFIG") - if len(sys.argv) == 1: - print "-----------------------------------------------------------------" - print "-- You must supply the name of configuration file as the first --" - print "-- commandline argument: --" - print "-- --" - print "-- bash% gert --" - print "-- --" - print "-- If the configuration file does not exist, gert will create --" - print "-- create a new configuration file. --" - print "-----------------------------------------------------------------" - #sys.exit(0) +enkf_config = sys.argv[1] +if not os.path.exists(enkf_config): + print "Trying to start new config" + new_configuration_dialog = NewConfigurationDialog(enkf_config) + success = new_configuration_dialog.exec_() + if not success: + print "Can not run without a configuration file." + sys.exit(1) else: - enkf_config = sys.argv[1] - if not os.path.exists(enkf_config): - print "Trying to start new config" - new_configuration_dialog = NewConfigurationDialog(enkf_config) - success = new_configuration_dialog.exec_() - if not success: - print "Can not run without a configuration file." - sys.exit(1) - else: - enkf_config = new_configuration_dialog.getConfigurationPath() - firste_case_name = new_configuration_dialog.getCaseName() - dbase_type = new_configuration_dialog.getDBaseType() - num_realizations = new_configuration_dialog.getNumberOfRealizations() - storage_path = new_configuration_dialog.getStoragePath() + enkf_config = new_configuration_dialog.getConfigurationPath() + firste_case_name = new_configuration_dialog.getCaseName() + dbase_type = new_configuration_dialog.getDBaseType() + num_realizations = new_configuration_dialog.getNumberOfRealizations() + storage_path = new_configuration_dialog.getStoragePath() + ert.enkf.enkf_main_create_new_config(enkf_config, storage_path , firste_case_name, dbase_type, num_realizations) + strict = False - EnKFMain.create_new_config(enkf_config, storage_path , firste_case_name, dbase_type, num_realizations) - strict = False +ert.bootstrap(enkf_config, site_config = site_config, strict = strict) +window.setSaveFunction(ert.save) - ert.bootstrap(enkf_config, site_config = site_config, strict = strict) - window.setSaveFunction(ert.save) +splash.showMessage("Creating GUI...", color=QtCore.Qt.white) +app.processEvents() - splash.showMessage("Creating GUI...", color=QtCore.Qt.white) - app.processEvents() +#window.addPage("Configuration", resourceIcon("config"), ConfigPages(window)) +window.addPage("Init", resourceIcon("db"), InitPanel(window)) +window.addPage("Run", resourceIcon("run"), RunPanel(window)) +window.addPage("Plots", resourceIcon("plot"), PlotPanel()) - window.addPage("Configuration", resourceIcon("config"), ConfigPages(window)) - window.addPage("Init" , resourceIcon("db"), InitPanel(window)) - window.addPage("Run" , resourceIcon("run"), RunPanel(window)) - window.addPage("Plots", resourceIcon("plot"), PlotPanel()) - - splash.showMessage("Communicating with ERT...", color=QtCore.Qt.white) - app.processEvents() - - ContentModel.contentModel = ert - ContentModel.updateObservers() - - window.show() - splash.finish(window) - - sys.exit(app.exec_()) - -if __name__ =="__main__": - main() +splash.showMessage("Communicating with ERT...", color=QtCore.Qt.white) +app.processEvents() +ContentModel.contentModel = ert +ContentModel.updateObservers() +window.show() +splash.finish(window) +sys.exit(app.exec_()) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/newconfig.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/newconfig.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/newconfig.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/newconfig.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/application.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/application.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/application.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/application.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/__init__.py diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/analysis.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/analysis.py new file mode 100644 index 0000000000..1a6d312eb4 --- /dev/null +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/analysis.py @@ -0,0 +1,93 @@ +# Copyright (C) 2011 Statoil ASA, Norway. +# +# The file 'analysis.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. + + +# ---------------------------------------------------------------------------------------------- +# Analysis tab +# ---------------------------------------------------------------------------------------------- +from ert_gui.widgets.checkbox import CheckBox +from ert_gui.widgets.spinnerwidgets import IntegerSpinner, DoubleSpinner, DoubleSpinner +import ert_gui.widgets.tablewidgets +from ert_gui.widgets.pathchooser import PathChooser +from ert_gui.widgets.combochoice import ComboChoice +from PyQt4 import QtGui +import ert.enkf + +def createAnalysisPage(configPanel, parent): + configPanel.startPage("Analysis") + + r = configPanel.addRow(CheckBox(parent, "ENKF rerun", "config/analysis/enkf_rerun", "Perform rerun")) + r.getter = lambda ert : ert.enkf.analysis_config_get_rerun(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_rerun(ert.analysis_config, value) + + r = configPanel.addRow(IntegerSpinner(parent, "Rerun start", "config/analysis/rerun_start", 0, 100000)) + r.getter = lambda ert : ert.enkf.analysis_config_get_rerun_start(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_rerun_start(ert.analysis_config, value) + + r = configPanel.addRow(PathChooser(parent, "ENKF schedule file", "config/analysis/enkf_sched_file")) + r.getter = lambda ert : ert.enkf.model_config_get_enkf_sched_file(ert.enkf.enkf_main_get_model_config(ert.main)) + r.setter = lambda ert, value : ert.enkf.model_config_set_enkf_sched_file(ert.enkf.enkf_main_get_model_config(ert.main), str(value)) + + r = configPanel.addRow(ert_gui.widgets.tablewidgets.KeywordList(parent, "Local config", "config/analysis/local_config")) + r.newKeywordPopup = lambda list : QtGui.QFileDialog.getOpenFileName(r, "Select a path", "") + + def get_local_config_files(ert): + local_config = ert.enkf.enkf_main_get_local_config(ert.main) + config_files_pointer = ert.enkf.local_config_get_config_files(local_config) + return ert.getStringList(config_files_pointer) + + r.getter = get_local_config_files + + def add_config_file(ert, value): + local_config = ert.enkf.enkf_main_get_local_config(ert.main) + ert.enkf.local_config_clear_config_files(local_config) + + for file in value: + ert.enkf.local_config_add_config_file(local_config, file) + + r.setter = add_config_file + + r = configPanel.addRow(PathChooser(parent, "Update log", "config/analysis/update_log")) + r.getter = lambda ert : ert.enkf.analysis_config_get_log_path(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_log_path(ert.analysis_config, str(value)) + + + configPanel.startGroup("EnKF") + + r = configPanel.addRow(DoubleSpinner(parent, "Alpha", "config/analysis/enkf_alpha", 0, 100000, 2)) + r.getter = lambda ert : ert.enkf.analysis_config_get_alpha(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_alpha(ert.analysis_config, value) + + r = configPanel.addRow(CheckBox(parent, "Merge Observations", "config/analysis/enkf_merge_observations", "Perform merge")) + r.getter = lambda ert : ert.enkf.analysis_config_get_merge_observations(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_merge_observations(ert.analysis_config, value) + + + enkf_mode_type = {"ENKF_STANDARD" : 10, "ENKF_SQRT" : 20} + enkf_mode_type_inverted = {10 : "ENKF_STANDARD" , 20 : "ENKF_SQRT"} + r = configPanel.addRow(ComboChoice(parent, enkf_mode_type.keys(), "Mode", "config/analysis/enkf_mode")) + r.getter = lambda ert : enkf_mode_type_inverted[ert.enkf.analysis_config_get_enkf_mode(ert.analysis_config)] + r.setter = lambda ert, value : ert.enkf.analysis_config_set_enkf_mode(ert.analysis_config, enkf_mode_type[str(value)]) + + + r = configPanel.addRow(DoubleSpinner(parent, "Truncation", "config/analysis/enkf_truncation", 0, 1, 2)) + r.getter = lambda ert : ert.enkf.analysis_config_get_truncation(ert.analysis_config) + r.setter = lambda ert, value : ert.enkf.analysis_config_set_truncation(ert.analysis_config, value) + + + + configPanel.endGroup() + configPanel.endPage() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/configpages.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/configpages.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/configpages.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/configpages.py index e9be36339f..0bfed3f9da 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/configpages.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/configpages.py @@ -14,16 +14,16 @@ # See the GNU General Public License at # for more details. + from ert_gui.widgets.configpanel import ConfigPanel import eclipse import analysis import queuesystem import systemenv import plot +import ensemble import observations import simulation -import ensemble - class ConfigPages(ConfigPanel): diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/eclipse.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/eclipse.py similarity index 60% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/eclipse.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/eclipse.py index 0d6c7415ea..4a5504dc27 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/eclipse.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/eclipse.py @@ -27,54 +27,47 @@ def createEclipsePage(configPanel, parent): configPanel.startPage("Eclipse") r = configPanel.addRow(PathChooser(parent, "Eclipse Base", "config/eclipse/eclbase", path_format=True)) - r.initialize = lambda ert : ert.main.ecl_config.get_eclbase - r.getter = lambda ert : ert.main.ecl_config.get_eclbase - r.setter = lambda ert, value : ert.main.set_eclbase(str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_eclbase(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.enkf_main_set_eclbase(ert.main , str(value)) r = configPanel.addRow(PathChooser(parent, "Data file", "config/eclipse/data_file", show_files=True)) - r.initialize = lambda ert : ert.main.ecl_config.get_data_file - r.getter = lambda ert : ert.main.ecl_config.get_data_file - r.setter = lambda ert, value : ert.main.set_datafile(str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_data_file(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.enkf_main_set_data_file(ert.main , str(value)) r = configPanel.addRow(PathChooser(parent, "Grid", "config/eclipse/grid", show_files=True)) - r.initialize = lambda ert : ert.main.ecl_config.get_gridfile - r.getter = lambda ert : ert.main.ecl_config.get_gridfile - r.setter = lambda ert, value : ert.main.ecl_config.set_gridfile(str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_gridfile(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.ecl_config_set_grid(ert.ecl_config, str(value)) r = configPanel.addRow(PathChooser(parent, "Schedule file" , "config/eclipse/schedule_file" , show_files = True)) - r.initialize = lambda ert : ert.main.ecl_config.get_schedule_file - r.getter = lambda ert : ert.main.ecl_config.get_schedule_file - r.setter = lambda ert, value : ert.main.ecl_config.set_schedule_file( str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_schedule_file(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.ecl_config_set_schedule_file(ert.ecl_config, str(value)) r = configPanel.addRow(PathChooser(parent, "Init section", "config/eclipse/init_section", show_files=True)) - r.initialize = lambda ert : ert.main.ecl_config.get_init_section - r.getter = lambda ert : ert.main.ecl_config.get_init_section - r.setter = lambda ert, value : ert.main.ecl_config.set_init_section( str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_init_section(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.ecl_config_set_init_section(ert.ecl_config, str(value)) r = configPanel.addRow(PathChooser(parent, "Refcase", "config/eclipse/refcase", show_files=True)) - r.initialize = lambda ert : ert.main.ecl_config.get_refcase_name - r.getter = lambda ert : ert.main.ecl_config.get_refcase_name - r.setter = lambda ert, value : ert.main.ecl_config.load_refcase( str(value)) + r.getter = lambda ert : ert.enkf.ecl_config_get_refcase_name(ert.ecl_config) + r.setter = lambda ert, value : ert.enkf.ecl_config_load_refcase(ert.ecl_config, str(value)) r = configPanel.addRow(PathChooser(parent, "Schedule prediction file", "config/eclipse/schedule_prediction_file", show_files=True)) - r.initialize = lambda ert : ert.main.get_schedule_prediction_file - r.getter = lambda ert : ert.main.get_schedule_prediction_file - r.setter = lambda ert, value : ert.main.set_schedule_prediction_file( ert.nonify( value )) + r.getter = lambda ert : ert.enkf.enkf_main_get_schedule_prediction_file(ert.main) + r.setter = lambda ert, value : ert.enkf.enkf_main_set_schedule_prediction_file(ert.main, ert.nonify( value )) r = configPanel.addRow(KeywordTable(parent, "Data keywords", "config/eclipse/data_kw")) - r.getter = lambda ert : ert.getSubstitutionList(ert.main.get_data_kw) + r.getter = lambda ert : ert.getSubstitutionList(ert.enkf.enkf_main_get_data_kw(ert.main)) def add_data_kw(ert, listOfKeywords): - ert.main.clear_data_kw + ert.enkf.enkf_main_clear_data_kw(ert.main) for keyword in listOfKeywords: - ert.main.add_data_kw( keyword[0], keyword[1]) + ert.enkf.enkf_main_add_data_kw(ert.main, keyword[0], keyword[1]) r.setter = add_data_kw - r.initialize = lambda ert : ert.getSubstitutionList(ert.main.get_data_kw) + configPanel.addSeparator() @@ -83,16 +76,16 @@ def createEclipsePage(configPanel, parent): internalPanel.startPage("Static keywords") r = internalPanel.addRow(KeywordList(parent, "", "config/eclipse/add_static_kw")) - r.getter = lambda ert : ert.main.ecl_config.get_static_kw_list + r.getter = lambda ert : ert.getStringList(ert.enkf.ecl_config_get_static_kw_list(ert.ecl_config)) def add_static_kw(ert, listOfKeywords): - ert.main.ecl_config.clear_static_kw + ert.enkf.ecl_config_clear_static_kw(ert.ecl_config) for keyword in listOfKeywords: - ert.main.ecl_config.add_static_kw(keyword) + ert.enkf.ecl_config_add_static_kw(ert.ecl_config, keyword) r.setter = add_static_kw - r.initialize = lambda ert : ert.main.ecl_config.get_static_kw_list + internalPanel.endPage() # todo: add support for fixed length schedule keywords diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/ensemble.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/ensemble.py similarity index 66% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/ensemble.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/ensemble.py index 07cdf0a760..ba40fec8f1 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/ensemble.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/ensemble.py @@ -18,23 +18,21 @@ # ---------------------------------------------------------------------------------------------- # Ensemble tab # ---------------------------------------------------------------------------------------------- -from PyQt4 import QtCore +from PyQt4 import QtGui, QtCore from ert_gui.widgets.spinnerwidgets import IntegerSpinner -from parameters.parameterpanel import ParameterPanel +from parameters.parameterpanel import ParameterPanel, enums from parameters.parametermodels import SummaryModel, DataModel, FieldModel, KeywordModel -import ert.ert.enums as enums -import ert.enkf.enkf_config_node -import ert.enkf.gen_kw_config -import ert.enkf.gen_data_config +from ert.ert.enums import field_type +from ert.ert.enums import truncation_type +from ert.ert.enums import gen_data_file_format def createEnsemblePage(configPanel, parent): configPanel.startPage("Ensemble") r = configPanel.addRow(IntegerSpinner(parent, "Number of realizations", "config/ensemble/num_realizations", 1, 10000)) - r.initialize = lambda ert : ert.main.ens_size - r.getter = lambda ert : ert.main.ens_size - r.setter = lambda ert, value : ert.main.resize_ensemble( value) + r.getter = lambda ert : ert.enkf.enkf_main_get_ensemble_size(ert.main) + r.setter = lambda ert, value : ert.enkf.enkf_main_resize_ensemble(ert.main, value) parent.connect(r, QtCore.SIGNAL("contentsChanged()"), lambda : r.modelEmit("ensembleResized()")) @@ -43,52 +41,52 @@ def createEnsemblePage(configPanel, parent): r = configPanel.addRow(ParameterPanel(parent, "", "")) # no help file necessary parent.connect(r, QtCore.SIGNAL("contentsChanged()"), lambda : r.modelEmit("ensembleUpdated()")) - def getEnsembleParameters(ert): - keys = ert.main.ensemble_config.alloc_keylist + keys = ert.getStringList(ert.enkf.ensemble_config_alloc_keylist(ert.ensemble_config), free_after_use=True) parameters = [] for key in keys: - node = ert.main.ensemble_config.get_node( key) - type = node.get_impl_type - data = node.get_ref + node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, key) + type = ert.enkf.enkf_config_node_get_impl_type(node) + data = ert.enkf.enkf_config_node_get_ref(node) + #print key, type model = None if type == FieldModel.TYPE: model = FieldModel(key) - field_type = node.field_model.get_type + field_type = ert.enkf.field_config_get_type(data) field_type = enums.field_type[field_type] model["type"] = field_type - truncation = node.field_model.get_truncation_mode + truncation = ert.enkf.field_config_get_truncation_mode(data) if truncation & enums.truncation_type.TRUNCATE_MAX: - model["max"] = node.field_model.get_truncation_max + model["max"] = ert.enkf.field_config_get_truncation_max(data) if truncation & enums.truncation_type.TRUNCATE_MIN: - model["min"] = node.field_model.get_truncation_min + model["min"] = ert.enkf.field_config_get_truncation_min(data) - model["init"] = node.field_model.get_init_transform_name - model["output"] = node.field_model.get_output_transform_name + model["init"] = ert.enkf.field_config_get_init_transform_name(data) + model["output"] = ert.enkf.field_config_get_output_transform_name(data) - model["init_files"] = node.get_init_file_fmt - model["min_std"] = node.get_min_std_file - model["enkf_outfile"] = node.get_enkf_outfile - model["enkf_infile"] = node.get_enkf_infile + model["init_files"] = ert.enkf.field_config_get_init_file_fmt(data) + model["min_std"] = ert.enkf.enkf_config_node_get_min_std_file(node) + model["enkf_outfile"] = ert.enkf.enkf_config_node_get_enkf_outfile(node) + model["enkf_infile"] = ert.enkf.enkf_config_node_get_enkf_infile(node) elif type == DataModel.TYPE: model = DataModel(key) - output_format_value = node.data_model.get_output_format + output_format_value = ert.enkf.gen_data_config_get_output_format(data) output_format = gen_data_file_format.resolveValue(output_format_value) - input_format_value = node.data_model.get_input_format + input_format_value = ert.enkf.gen_data_config_get_input_format(data) input_format = gen_data_file_format.resolveValue(input_format_value) - template_file = node.data_model.get_template_file - template_key = node.data_model.get_template_key - init_file_fmt = node.get_init_file_fmt + template_file = ert.enkf.gen_data_config_get_template_file(data) + template_key = ert.enkf.gen_data_config_get_template_key(data) + init_file_fmt = ert.enkf.gen_data_config_get_init_file_fmt(data) model["output_format"] = output_format model["input_format"] = input_format @@ -96,9 +94,9 @@ def createEnsemblePage(configPanel, parent): model["template_key"] = template_key model["init_file_fmt"] = init_file_fmt - min_std = node.get_min_std_file - enkf_outfile = node.get_enkf_outfile - enkf_infile = node.get_enkf_infile + min_std = ert.enkf.enkf_config_node_get_min_std_file(node) + enkf_outfile = ert.enkf.enkf_config_node_get_enkf_outfile(node) + enkf_infile = ert.enkf.enkf_config_node_get_enkf_infile(node) @@ -108,40 +106,40 @@ def createEnsemblePage(configPanel, parent): elif type == KeywordModel.TYPE: model = KeywordModel(key) - model["min_std"] = node.get_min_std_file - model["enkf_outfile"] = node.get_enkf_outfile - model["template"] = node.keyword_model.get_template_file - model["init_file"] = node.get_init_file_fmt - model["parameter_file"] = node.keyword_model.get_parameter_file + model["min_std"] = ert.enkf.enkf_config_node_get_min_std_file(node) + model["enkf_outfile"] = ert.enkf.enkf_config_node_get_enkf_outfile(node) + model["template"] = ert.enkf.gen_kw_config_get_template_file(data) + model["init_file"] = ert.enkf.gen_kw_config_get_init_file_fmt(data) + model["parameter_file"] = ert.enkf.gen_kw_config_get_parameter_file(data) elif type == SummaryModel.TYPE: model = SummaryModel(key) else: pass #Unknown type - #model.setValid(ert.main.enkf_config_node.is_valid) + model.setValid(ert.enkf.enkf_config_node_is_valid(node)) parameters.append(model) return parameters def removeParameter(ert, parameter_key): - ert.main.del_node(ert.main, parameter_key) + ert.enkf.enkf_main_del_node(ert.main, parameter_key) def insertParameter(ert, parameter): key = parameter.getName() if parameter.getType() == FieldModel.TYPE: - grid = ert.main.ecl_config.get_grid - node = ert.main.ensemble_config.add_field( key, grid) - parameter.setValid(ert.main.enkf_config_node.is_valid) + grid = ert.enkf.ecl_config_get_grid(ert.ecl_config) + node = ert.enkf.ensemble_config_add_field(ert.ensemble_config, key, grid) + parameter.setValid(ert.enkf.enkf_config_node_is_valid(node)) elif parameter.getType() == DataModel.TYPE: - node = ert.main.ensemble_config.add_gen_data( key) - parameter.setValid(ert.main.enkf_config_node.is_valid) + node = ert.enkf.ensemble_config_add_gen_data(ert.ensemble_config, key) + parameter.setValid(ert.enkf.enkf_config_node_is_valid(node)) elif parameter.getType() == KeywordModel.TYPE: - node = ert.main.ensemble_config.add_gen_kw( key) - parameter.setValid(ert.main.enkf_config_node.is_valid) + node = ert.enkf.ensemble_config_add_gen_kw(ert.ensemble_config, key) + parameter.setValid(ert.enkf.enkf_config_node_is_valid(node)) elif parameter.getType() == SummaryModel.TYPE: parameter.setValid(True) - b = ert.main.ensemble_config.add_summary( key) + b = ert.enkf.ensemble_config_add_summary(ert.ensemble_config, key) return b > 0 #0 == NULL else: print "Unknown type: ", parameter @@ -151,7 +149,7 @@ def createEnsemblePage(configPanel, parent): def updateParameter(ert, parameter_model): key = parameter_model.getName() - node = ert.main.ensemble_config.get_node( key) + node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, key) if isinstance(parameter_model, FieldModel): type = parameter_model["type"] @@ -167,12 +165,12 @@ def createEnsemblePage(configPanel, parent): maximum = 0.0 if type == field_type.ECLIPSE_RESTART: #dynamic - ert.main.enkf_config_node.update_state_field(node, + ert.enkf.enkf_config_node_update_state_field(node, truncate.value(), float(minimum), float(maximum)) elif type == field_type.ECLIPSE_PARAMETER: #parameter - ert.main.enkf_config_node.update_parameter_field(node, + ert.enkf.enkf_config_node_update_parameter_field(node, ert.nonify(parameter_model["enkf_outfile"]), ert.nonify(parameter_model["init_files"]), ert.nonify(parameter_model["min_std"]), @@ -182,7 +180,7 @@ def createEnsemblePage(configPanel, parent): parameter_model["init"], parameter_model["output"]) elif type == field_type.GENERAL: #general - ert.main.enkf_config_node.update_general_field(node, + ert.enkf.enkf_config_node_update_general_field(node, ert.nonify(parameter_model["enkf_outfile"]), ert.nonify(parameter_model["enkf_infile"]), ert.nonify(parameter_model["init_files"]), @@ -194,7 +192,7 @@ def createEnsemblePage(configPanel, parent): None, parameter_model["output"]) - parameter_model.setValid(ert.main.enkf_config_node.is_valid) + parameter_model.setValid(ert.enkf.enkf_config_node_is_valid(node)) elif isinstance(parameter_model, KeywordModel): enkf_outfile_fmt = parameter_model["enkf_outfile"] @@ -202,20 +200,20 @@ def createEnsemblePage(configPanel, parent): parameter_file = parameter_model["parameter_file"] min_std_file = parameter_model["min_std"] init_file_fmt = parameter_model["init_files"] - ert.main.enkf_config_node.update_gen_kw(node, + ert.enkf.enkf_config_node_update_gen_kw(node, ert.nonify(enkf_outfile_fmt), ert.nonify(template_file), ert.nonify(parameter_file), ert.nonify(min_std_file), ert.nonify(init_file_fmt)) - parameter_model.setValid(ert.main.enkf_config_node.is_valid) + parameter_model.setValid(ert.enkf.enkf_config_node_is_valid(node)) elif isinstance(parameter_model, SummaryModel): #should never be called from SummaryModel... raise AssertionError("Summary keys can not be updated!") elif isinstance(parameter_model, DataModel): input_format = gen_data_file_format.resolveName(str(parameter_model["input_format"])) output_format = gen_data_file_format.resolveName(str(parameter_model["output_format"])) - ert.main.enkf_config_node.update_gen_data(node, + ert.enkf.enkf_config_node_update_gen_data(node, input_format.value(), output_format.value(), ert.nonify(parameter_model["init_file_fmt"]), @@ -224,18 +222,17 @@ def createEnsemblePage(configPanel, parent): ert.nonify(parameter_model["enkf_outfile"]), ert.nonify(parameter_model["enkf_infile"]), ert.nonify(parameter_model["min_std"])) - parameter_model.setValid(ert.main.enkf_config_node.is_valid) + parameter_model.setValid(ert.enkf.enkf_config_node_is_valid(node)) else: raise AssertionError("Type is not supported: %s" % (parameter_model.__class__)) - if ert.main.enkf_config_node.is_valid: - ert.main.update_node( ert.main , key ) + if ert.enkf.enkf_config_node_is_valid(node): + ert.enkf.enkf_main_update_node( ert.main , key ) r.getter = getEnsembleParameters - r.initialize = getEnsembleParameters r.remove = removeParameter r.insert = insertParameter r.setter = updateParameter diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/forwardmodelpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/forwardmodelpanel.py similarity index 97% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/forwardmodelpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/forwardmodelpanel.py index bdab0fa371..ffb35bfd55 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/forwardmodelpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/forwardmodelpanel.py @@ -52,10 +52,11 @@ class ForwardModelPanel(HelpedWidget): def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=150, list_width=150, ignore_case=True, order_editable=True) self.addWidget(self.searchableList) - self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'),self.changeParameter) - self.connect(self.searchableList, QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem) - self.connect(self.searchableList, QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem) - self.connect(self.searchableList, QtCore.SIGNAL('orderChanged(QListWidgetItem)'), self.forwardModelChanged) + self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), + self.changeParameter) + self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) + self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) + self.connect(self.searchableList, QtCore.SIGNAL('orderChanged(list)'), self.forwardModelChanged) self.forward_model_panel = ert_gui.widgets.util.createEmptyPanel() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobsdialog.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobsdialog.py similarity index 67% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobsdialog.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobsdialog.py index df006158d6..468009b714 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobsdialog.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobsdialog.py @@ -87,124 +87,53 @@ class JobConfigPanel(ConfigPanel): def jid(ert): """Returns the pointer to the current job (self.job)""" - jl = ert.main.site_config.get_installed_jobs - return jl.get_job(self.job.name) + jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) + return ert.job_queue.ext_joblist_get_job(jl, self.job.name) - def set_stdin(ert,value): - job = jid(ert) - job.set_stdin_file(value) - - def get_stdin(ert): - job = jid(ert) - return job.get_stdin_file - self.stdin = PathChooser(self, "", "config/systemenv/install_job_stdin", show_files=True, must_be_set=False, must_exist=True) - self.stdin.setter = set_stdin - self.stdin.getter = get_stdin - self.stdin.initialize =get_stdin + self.stdin.setter = lambda ert, value : ert.job_queue.ext_job_set_stdin_file(jid(ert), value) + self.stdin.getter = lambda ert : ert.job_queue.ext_job_get_stdin_file(jid(ert)) - def set_stdout(ert,value): - job = jid(ert) - job.set_stdout_file(value) - - def get_stdout(ert): - job = jid(ert) - return job.get_stdout_file - self.stdout = PathChooser(self, "", "config/systemenv/install_job_stdout", show_files=True, must_be_set=True, must_exist=False) - self.stdout.setter = set_stdout - self.stdout.getter = get_stdout - self.stdout.initialize = get_stdout + self.stdout.setter = lambda ert, value : ert.job_queue.ext_job_set_stdout_file(jid(ert), value) + self.stdout.getter = lambda ert : ert.job_queue.ext_job_get_stdout_file(jid(ert)) - def set_stderr(ert,value): - job = jid(ert) - job.set_stderr_file(value) - - def get_stderr(ert): - job = jid(ert) - return job.get_stderr_file - self.stderr = PathChooser(self, "", "config/systemenv/install_job_stderr", show_files=True, must_be_set=True, must_exist=False) - self.stderr.setter = set_stderr - self.stderr.getter = get_stderr - self.stderr.initialize = get_stderr + self.stderr.setter = lambda ert, value : ert.job_queue.ext_job_set_stderr_file(jid(ert), value) + self.stderr.getter = lambda ert : ert.job_queue.ext_job_get_stderr_file(jid(ert)) - def set_target_file(ert,value): - job = jid(ert) - job.set_target_file(value) + self.target_file = PathChooser(self, "", "config/systemenv/install_job_target_file", show_files=True, must_be_set=False, + must_exist=False) + self.target_file.setter = lambda ert, value : ert.job_queue.ext_job_set_target_file(jid(ert), value) + self.target_file.getter = lambda ert : ert.job_queue.ext_job_get_target_file(jid(ert)) - def get_target_file(ert): - job = jid(ert) - return job.get_target_file - - self.target_file = PathChooser(self, "", "config/systemenv/install_job_target_file", show_files=True, must_be_set=False, must_exist=False) - self.target_file.setter = set_target_file - self.target_file.getter = get_target_file - self.target_file.initialize = get_target_file - - def set_executable(ert,value): - job = jid(ert) - job.set_executable(value) - - def get_executable(ert): - job = jid(ert) - return job.get_executable - self.executable = PathChooser(self, "", "config/systemenv/install_job_executable", show_files=True, must_be_set=True, must_exist=True, is_executable_file=True) - self.executable.setter = set_executable - self.executable.getter = get_executable + self.executable.setter = lambda ert, value : ert.job_queue.ext_job_set_executable(jid(ert), value) + self.executable.getter = lambda ert : ert.job_queue.ext_job_get_executable(jid(ert)) def setEnv(ert, value): job = jid(ert) - job.clear_environment + ert.job_queue.ext_job_clear_environment(job) for env in value: - job.set_environment(env[0], env[1]) - - def getEnv(ert): - job = jid(ert) - return ert.getHash(job.get_environment) + ert.job_queue.ext_job_add_environment(job, env[0], env[1]) self.env = KeywordTable(self, "", "config/systemenv/install_job_env", colHead1="Variable", colHead2="Value") self.env.setter = setEnv - self.env.getter = getEnv - - def set_arglist(ert,value): - job = jid(ert) - job.set_private_args_from_string(value) - - def get_arglist(ert): - job = jid(ert) - return job.get_private_args_as_string + self.env.getter = lambda ert : ert.getHash(ert.job_queue.ext_job_get_environment(jid(ert))) self.arglist = StringBox(self, "", "config/systemenv/install_job_arglist") - self.arglist.setter = set_arglist - self.arglist.getter = get_arglist + self.arglist.setter = lambda ert, value : ert.job_queue.ext_job_set_private_args_from_string(jid(ert), value) + self.arglist.getter = lambda ert : ert.job_queue.ext_job_get_private_args_as_string(jid(ert)) - def set_max_running(ert,value): - job = jid(ert) - job.set_max_running(value) - - def get_max_running(ert): - job = jid(ert) - return job.get_max_running - self.max_running = IntegerSpinner(self, "", "config/systemenv/install_job_max_running", 0, 10000) - self.max_running.setter = set_max_running - self.max_running.getter = get_max_running + self.max_running.setter = lambda ert, value : ert.job_queue.ext_job_set_max_running(jid(ert), value) + self.max_running.getter = lambda ert : ert.job_queue.ext_job_get_max_running(jid(ert)) - def set_max_running_minutes(ert,value): - job = jid(ert) - job.set_max_running_minutes(value) - - def get_max_running(ert): - job = jid(ert) - return job.get_max_running_minutes - self.max_running_minutes = IntegerSpinner(self, "", "config/systemenv/install_job_max_running_minutes", 0, 10000) - self.max_running_minutes.setter = set_max_running_minutes - self.max_running_minutes.getter = get_max_running_minutes + self.max_running_minutes.setter = lambda ert, value : ert.job_queue.ext_job_set_max_running_minutes(jid(ert), value) + self.max_running_minutes.getter = lambda ert : ert.job_queue.ext_job_get_max_running_minutes(jid(ert)) self.startPage("Standard") diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobspanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobspanel.py similarity index 94% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobspanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobspanel.py index 18f4681a10..1fd7421fb7 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/jobspanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/jobs/jobspanel.py @@ -49,9 +49,10 @@ class JobsPanel(HelpedWidget): def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=200, list_width=150, ignore_case=True) self.addWidget(self.searchableList) - self.connect(self.searchableList , QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'),self.changeParameter) - self.connect(self.searchableList , QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem) - self.connect(self.searchableList , QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem) + self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), + self.changeParameter) + self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) + self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) self.jobPanel = ert_gui.widgets.util.createEmptyPanel() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/observations.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/observations.py similarity index 63% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/observations.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/observations.py index b32de5adc4..e7f0609726 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/observations.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/observations.py @@ -22,7 +22,6 @@ from ert_gui.widgets.combochoice import ComboChoice from ert_gui.widgets.pathchooser import PathChooser from ert.ert.enums import history_source_type from ert_gui.widgets.reloadbutton import ReloadButton -from ert.sched.history import HistoryType def createObservationsPage(configPanel, parent): configPanel.startPage("Observations") @@ -30,23 +29,14 @@ def createObservationsPage(configPanel, parent): r = configPanel.addRow(ComboChoice(parent, history_source_type.values(), "History source", "config/observations/history_source")) def get_history_source(ert): - history_source = ert.main.model_config.get_history_source - return history_source_type.resolveValue(history_source.get_source_string) + history_source = ert.enkf.model_config_get_history_source(ert.model_config) + return history_source_type.resolveValue(history_source) - r.initialize = get_history_source r.getter = get_history_source def set_history_source(ert, value): - history_source_enum = history_source_type.resolveName(str(value)) - sched_file = ert.main.ecl_config.get_sched_file - refcase = ert.main.ecl_config.get_refcase - if history_source_enum.value() == 0: - history = HistoryType.alloc_from_sched_file(sched_file) - if history_source_enum.value() == 1: - history = HistoryType.alloc_from_refcase(refcase, True) - if history_source_enum.value() == 2: - history = HistoryType.alloc_from_refcase(refcase, False) - ert.main.model_config.set_history_source(history, sched_file, refcase) + history_source = history_source_type.resolveName(str(value)) + ert.enkf.model_config_get_history_source(ert.model_config, history_source.value()) r.setter = set_history_source @@ -54,21 +44,19 @@ def createObservationsPage(configPanel, parent): r = configPanel.addRow(PathChooser(parent, "Observations config", "config/observations/obs_config", True)) def get_obs(ert): - obs = ert.main.get_obs - return obs.get_config_file + obs = ert.enkf.enkf_main_get_obs(ert.main) + return ert.enkf.enkf_obs_get_config_file(obs) - r.initialize = get_obs r.getter = get_obs def set_obs(ert, value): - ert.main.load_obs( str(value)) + ert.enkf.enkf_main_load_obs(ert.main, str(value)) r.setter = set_obs r = configPanel.addRow(ReloadButton(parent, "Reload Observations", "config/observations/reload_observation", "Reload")) - r.initialize = lambda ert : ert.main.reload_obs - r.getter = lambda ert : ert.main.reload_obs + r.getter = lambda ert : ert.enkf.enkf_main_reload_obs(ert.main) configPanel.endPage() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/datapanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/datapanel.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/datapanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/datapanel.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/fieldpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/fieldpanel.py similarity index 93% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/fieldpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/fieldpanel.py index 978245006a..6120bc5575 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/fieldpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/fieldpanel.py @@ -48,10 +48,10 @@ class FieldPanel(QtGui.QFrame): self.max = DoubleBox(self, "", "config/ensemble/field_max") self.modelWrap(self.max, "max") - self.init = ComboChoice(self, ["None", "EXP", "EXP0", "LOG", "LN","LN0", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_init") + self.init = ComboChoice(self, ["None", "EXP", "LOG", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_init") self.modelWrap(self.init, "init") - self.output = ComboChoice(self, ["None", "EXP", "EXP0", "LOG", "LN","LN0", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_output") + self.output = ComboChoice(self, ["None", "EXP", "LOG", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_output") self.modelWrap(self.output, "output") self.init_files = PathChooser(self, "", "config/ensemble/field_init_files", True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/keywordpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/keywordpanel.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/keywordpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/keywordpanel.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parameterdialog.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parameterdialog.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parameterdialog.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parameterdialog.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parametermodels.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parametermodels.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parametermodels.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parametermodels.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parameterpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parameterpanel.py similarity index 89% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parameterpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parameterpanel.py index 46a27fc694..9fb8dd15eb 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/parameterpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/parameters/parameterpanel.py @@ -32,7 +32,6 @@ import ert_gui.widgets.util from parametermodels import SummaryModel, FieldModel, DataModel, KeywordModel from PyQt4.QtCore import SIGNAL - class ParameterPanel(HelpedWidget): """Shows a widget for parameters. The data structure expected and sent to the getter and setter is an array of Parameters.""" @@ -60,8 +59,8 @@ class ParameterPanel(HelpedWidget): self.addWidget(self.pagesWidget) self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter) - self.connect(self.searchableList, QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem) - self.connect(self.searchableList, QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem) + self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) + self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) #self.addHelpButton() @@ -111,7 +110,7 @@ class ParameterPanel(HelpedWidget): list.setCurrentItem(parameter) user_data = parameter.getUserData() - ##self.connect(user_data, SIGNAL('modelChanged(Model)'), self.modelChanged) + self.connect(user_data, SIGNAL('modelChanged(Model)'), self.modelChanged) def modelChanged(self, parameter_model): """Called whenever the content of a model changes""" @@ -124,7 +123,7 @@ class ParameterPanel(HelpedWidget): for index in range(list.count()): uniqueNames.append(str(list.item(index).text())) - pd = ParameterDialog(self, Parameter.get_typeIcons() , uniqueNames) + pd = ParameterDialog(self, Parameter.typeIcons, uniqueNames) if pd.exec_(): parameter = self.createParameter(pd.getTypeName(), pd.getName()) ok = self.updateContent(parameter, operation=ContentModel.INSERT) @@ -155,9 +154,7 @@ class ParameterPanel(HelpedWidget): for parameter in parameters: if parameter is None: - sys.stderr.write("Unknown type name!\n") - break - #raise AssertionError("Unknown type name!") + raise AssertionError("Unknown type name!") param = Parameter(parameter.name, parameter.TYPE) param.setUserData(parameter) @@ -169,65 +166,54 @@ class ParameterPanel(HelpedWidget): self.searchableList.getList().setCurrentRow(0) - class Parameter(QtGui.QListWidgetItem): """ListWidgetItem class that represents a Parameter with an associated icon.""" - - typeIcons__ = None - - @classmethod - def get_typeIcons(cls): - if cls.typeIcons__ is None: - typeIcons__ = {FieldModel.TYPE: util.resourceIcon("grid_16"), - DataModel.TYPE: util.resourceIcon("data"), - SummaryModel.TYPE: util.resourceIcon("summary"), - KeywordModel.TYPE: util.resourceIcon("key")} - return typeIcons__ - + typeIcons = {FieldModel.TYPE: util.resourceIcon("grid_16"), + DataModel.TYPE: util.resourceIcon("data"), + SummaryModel.TYPE: util.resourceIcon("summary"), + KeywordModel.TYPE: util.resourceIcon("key")} def __init__(self, name, type, icon=None): if icon is None: - icon = Parameter.get_typeIcons()[type] - + icon = Parameter.typeIcons[type] + QtGui.QListWidgetItem.__init__(self, icon, name) self.type = type self.name = name self.user_data = None self.setValid(True) - + def getType(self): """Retruns the type of this parameter""" return self.type - + def getName(self): """Returns the name of this parameter (keyword)""" return self.name - + def __ge__(self, other): if self.type.name == other.type.name: return self.name.lower() >= other.name.lower() else: return self.type.name >= other.type.name - + def __lt__(self, other): return not self >= other - + def setUserData(self, data): """Set user data for this parameter.""" self.user_data = data - + def getUserData(self): """Retrieve the user data.""" return self.user_data - + def setValid(self, valid): """Set the validity of this item. An invalid item is colored red""" self.valid = valid - + if valid: self.setBackgroundColor(QtCore.Qt.white) else: self.setBackgroundColor(HelpedWidget.STRONG_ERROR_COLOR) - - diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/plot.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/plot.py similarity index 56% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/plot.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/plot.py index aa670fd133..268e8d4391 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/plot.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/plot.py @@ -27,39 +27,32 @@ def createPlotPage(configPanel, parent): configPanel.startPage("Plot") r = configPanel.addRow(PathChooser(parent, "Output path", "config/plot/path")) - r.initialize = lambda ert : ert.main.plot_config.get_path - r.getter = lambda ert : ert.main.plot_config.get_path - r.setter = lambda ert, value : ert.main.plot_config.set_path( str(value)) + r.getter = lambda ert : ert.enkf.plot_config_get_path(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_path(ert.plot_config, str(value)) r = configPanel.addRow(ComboChoice(parent, ["PLPLOT", "TEXT"], "Driver", "config/plot/plot_driver")) - r.initialize = lambda ert : ert.main.plot_config.get_driver - r.getter = lambda ert : ert.main.plot_config.get_driver - r.setter = lambda ert, value : ert.main.plot_config.set_driver( str(value)) + r.getter = lambda ert : ert.enkf.plot_config_get_driver(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_driver(ert.plot_config, str(value)) r = configPanel.addRow(IntegerSpinner(parent, "Errorbar max", "config/plot/plot_errorbar_max", 1, 10000000)) - r.initialize = lambda ert : ert.main.plot_config.get_errorbar_max - r.getter = lambda ert : ert.main.plot_config.get_errorbar_max - r.setter = lambda ert, value : ert.main.plot_config.set_errorbar_max( value) + r.getter = lambda ert : ert.enkf.plot_config_get_errorbar_max(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_errorbar_max(ert.plot_config, value) r = configPanel.addRow(IntegerSpinner(parent, "Width", "config/plot/width", 1, 10000)) - r.initialize = lambda ert : ert.main.plot_config.get_width - r.getter = lambda ert : ert.main.plot_config.get_width - r.setter = lambda ert, value : ert.main.plot_config.set_width( value) + r.getter = lambda ert : ert.enkf.plot_config_get_width(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_width(ert.plot_config, value) r = configPanel.addRow(IntegerSpinner(parent, "Height", "config/plot/plot_height", 1, 10000)) - r.initialize = lambda ert : ert.main.plot_config.get_height - r.getter = lambda ert : ert.main.plot_config.get_height - r.setter = lambda ert, value : ert.main.plot_config.set_height( value) + r.getter = lambda ert : ert.enkf.plot_config_get_height(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_height(ert.plot_config, value) r = configPanel.addRow(PathChooser(parent, "Image Viewer", "config/plot/image_viewer", True)) - r.initialize = lambda ert : ert.main.plot_config.get_viewer - r.getter = lambda ert : ert.main.plot_config.get_viewer - r.setter = lambda ert, value : ert.main.plot_config.set_viewer( str(value)) + r.getter = lambda ert : ert.enkf.plot_config_get_viewer(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_viewer(ert.plot_config, str(value)) r = configPanel.addRow(ComboChoice(parent, ["bmp", "jpg", "png", "tif"], "Image type", "config/plot/image_type")) - r.initialize = lambda ert : ert.main.plot_config.get_image_type - r.getter = lambda ert : ert.main.plot_config.get_image_type - r.setter = lambda ert, value : ert.main.plot_config.set_image_type( str(value)) + r.getter = lambda ert : ert.enkf.plot_config_get_image_type(ert.plot_config) + r.setter = lambda ert, value : ert.enkf.plot_config_set_image_type(ert.plot_config, str(value)) configPanel.endPage() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/queuesystem.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/queuesystem.py similarity index 60% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/queuesystem.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/queuesystem.py index f890b6a1db..9f82da1f5e 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/queuesystem.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/queuesystem.py @@ -29,28 +29,24 @@ def createQueueSystemPage(configPanel, parent): configPanel.startPage("Queue System") r = configPanel.addRow(ComboChoice(parent, ["LSF", "RSH", "LOCAL"], "Queue system", "config/queue_system/queue_system")) - r.initialize = lambda ert : ert.main.site_config.get_queue_name - r.getter = lambda ert : ert.main.site_config.get_queue_name - r.setter = lambda ert, value : ert.main.site_config.set_job_queue(str(value)) + r.getter = lambda ert : ert.enkf.site_config_get_queue_name(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_job_queue(ert.site_config, str(value)) internalPanel = ConfigPanel(parent) internalPanel.startPage("LSF") r = internalPanel.addRow(StringBox(parent, "LSF Queue", "config/queue_system/lsf_queue")) - r.initialize = lambda ert : ert.main.site_config.get_lsf_queue - r.getter = lambda ert : ert.main.site_config.get_lsf_queue - r.setter = lambda ert, value : ert.main.site_config.set_lsf_queue( str(value)) + r.getter = lambda ert : ert.enkf.site_config_get_lsf_queue(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_lsf_queue(ert.site_config, str(value)) r = internalPanel.addRow(IntegerSpinner(parent, "Max running", "config/queue_system/max_running_lsf", 1, 1000)) - r.initialize = lambda ert : ert.main.site_config.get_max_running_lsf - r.getter = lambda ert : ert.main.site_config.get_max_running_lsf - r.setter = lambda ert, value : ert.main.site_config.set_max_running_lsf( value) + r.getter = lambda ert : ert.enkf.site_config_get_max_running_lsf(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_max_running_lsf(ert.site_config, value) r = internalPanel.addRow(StringBox(parent, "Resources", "config/queue_system/lsf_resources")) - r.initialize = lambda ert : ert.main.site_config.get_lsf_request - r.getter = lambda ert : ert.main.site_config.get_lsf_request - r.setter = lambda ert, value : ert.main.site_config.set_lsf_request(str(value)) + r.getter = lambda ert : ert.enkf.site_config_get_lsf_request(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_lsf_request(ert.site_config, str(value)) internalPanel.endPage() @@ -58,22 +54,19 @@ def createQueueSystemPage(configPanel, parent): internalPanel.startPage("RSH") r = internalPanel.addRow(PathChooser(parent, "Command", "config/queue_system/rsh_command", show_files=True, must_exist=True, is_executable_file=True)) - r.initialize = lambda ert : ert.main.site_config.get_rsh_command - r.getter = lambda ert : ert.main.site_config.get_rsh_command - r.setter = lambda ert, value : ert.main.site_config.set_rsh_command(str(value)) + r.getter = lambda ert : ert.enkf.site_config_get_rsh_command(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_rsh_command(ert.site_config, str(value)) r = internalPanel.addRow(IntegerSpinner(parent, "Max running", "config/queue_system/max_running_rsh", 1, 1000)) - r.initialize = lambda ert : ert.main.site_config.get_max_running_rsh - r.getter = lambda ert : ert.main.site_config.get_max_running_rsh - r.setter = lambda ert, value : ert.main.site_config.set_max_running_rsh( value) + r.getter = lambda ert : ert.enkf.site_config_get_max_running_rsh(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_max_running_rsh(ert.site_config, value) r = internalPanel.addRow(KeywordTable(parent, "Host List", "config/queue_system/rsh_host_list", "Host", "Number of jobs")) - r.initialize = lambda ert : ert.getHash(ert.main.site_config.get_rsh_host_list, True) - r.getter = lambda ert : ert.getHash(ert.main.site_config.get_rsh_host_list, True) + r.getter = lambda ert : ert.getHash(ert.enkf.site_config_get_rsh_host_list(ert.site_config), True) def add_rsh_host(ert, listOfKeywords): - ert.main.site_config.clear_rsh_host_list + ert.enkf.site_config_clear_rsh_host_list(ert.site_config) for keyword in listOfKeywords: if keyword[1].strip() == "": @@ -81,7 +74,7 @@ def createQueueSystemPage(configPanel, parent): else: max_running = int(keyword[1]) - ert.main.site_config.add_rsh_host( keyword[0], max_running) + ert.enkf.site_config_add_rsh_host(ert.site_config, keyword[0], max_running) r.setter = add_rsh_host @@ -91,9 +84,8 @@ def createQueueSystemPage(configPanel, parent): internalPanel.startPage("LOCAL") r = internalPanel.addRow(IntegerSpinner(parent, "Max running", "config/queue_system/max_running_local", 1, 1000)) - r.initialize = lambda ert : ert.main.site_config.get_max_running_local - r.getter = lambda ert : ert.main.site_config.get_max_running_local - r.setter = lambda ert, value : ert.main.site_config.set_max_running_local(value) + r.getter = lambda ert : ert.enkf.site_config_get_max_running_local(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_max_running_local(ert.site_config, value) internalPanel.endPage() configPanel.addRow(internalPanel) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulation.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulation.py similarity index 57% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulation.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulation.py index d833e20cb1..db12479cca 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulation.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulation.py @@ -31,21 +31,18 @@ from ert.ert.enums import keep_runpath_type from simulations.runtemplatepanel import RunTemplatePanel import ert_gui.widgets.helpedwidget import os -from ert.util.stringlist import StringList def createSimulationsPage(configPanel, parent): configPanel.startPage("Simulations") r = configPanel.addRow(IntegerSpinner(parent, "Max submit", "config/simulation/max_submit", 1, 10000)) - r.initialize = lambda ert : ert.main.site_config.get_max_submit - r.getter = lambda ert : ert.main.site_config.get_max_submit - r.setter = lambda ert, value : ert.main.site_config.set_max_submit( value) + r.getter = lambda ert : ert.enkf.site_config_get_max_submit(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_max_submit(ert.site_config, value) - r = configPanel.addRow(IntegerSpinner(parent, "Max internal submit", "config/simulation/max_resample", 1, 10000)) - r.initialize = lambda ert : ert.main.model_config.get_max_internal_submit - r.getter = lambda ert : ert.main.model_config.get_max_internal_submit - r.setter = lambda ert, value : ert.main.model_config.set_max_internal_submit( value) + r = configPanel.addRow(IntegerSpinner(parent, "Max resample", "config/simulation/max_resample", 1, 10000)) + r.getter = lambda ert : ert.enkf.model_config_get_max_resample(ert.model_config) + r.setter = lambda ert, value : ert.enkf.model_config_set_max_resample(ert.model_config, value) @@ -53,23 +50,25 @@ def createSimulationsPage(configPanel, parent): def get_forward_model(ert): - site_config = ert.main.site_config - installed_jobs = ert.main.site_config.get_installed_jobs - available_jobs = installed_jobs.alloc_list + site_config = ert.site_config + installed_jobs_pointer = ert.enkf.site_config_get_installed_jobs(site_config) + installed_jobs_stringlist_pointer = ert.job_queue.ext_joblist_alloc_list(installed_jobs_pointer) + available_jobs = ert.getStringList(installed_jobs_stringlist_pointer , free_after_use=True) result = {'available_jobs': available_jobs} - model_config = ert.main.model_config - forward_model = model_config.get_forward_model - job_names = forward_model.alloc_joblist - + model_config = ert.model_config + forward_model = ert.enkf.model_config_get_forward_model(model_config) + name_string_list = ert.job_queue.forward_model_alloc_joblist(forward_model) + job_names = ert.getStringList(name_string_list, free_after_use=True) + forward_model_jobs = [] count = 0 for name in job_names: - ext_job = forward_model.iget_job( count) - arg_string = ext_job.get_private_args_as_string - help_text = ext_job.get_help_text + ext_job = ert.job_queue.forward_model_iget_job(forward_model, count) + arg_string = ert.job_queue.ext_job_get_private_args_as_string(ext_job) + help_text = ert.job_queue.ext_job_get_help_text(ext_job) forward_model_jobs.append((name, arg_string, help_text)) count+=1 @@ -78,17 +77,16 @@ def createSimulationsPage(configPanel, parent): return result r.getter = get_forward_model - r.initialize = get_forward_model def update_forward_model(ert, forward_model): - forward_model_object = ert.main.model_config.get_forward_model - forward_model_object.clear + forward_model_pointer = ert.enkf.model_config_get_forward_model(ert.model_config) + ert.job_queue.forward_model_clear(forward_model_pointer) for job in forward_model: name = job[0] args = job[1] - ext_job = forward_model.add_job( name) - ext_job.set_private_args_from_string( args) + ext_job = ert.job_queue.forward_model_add_job(forward_model_pointer, name) + ert.job_queue.ext_job_set_private_args_from_string(ext_job, args) r.setter = update_forward_model @@ -98,19 +96,17 @@ def createSimulationsPage(configPanel, parent): def get_case_table(ert): - return ert.main.model_config.get_case_table_file + return ert.enkf.model_config_get_case_table_file(ert.model_config) r.getter = get_case_table - r.initialize = get_case_table - + def set_case_table(ert, value): if os.path.exists(value): - ert.main.set_case_table( ert.nonify(value)) + ert.enkf.enkf_main_set_case_table(ert.model_config, ert.nonify(value)) r.setter = set_case_table r = configPanel.addRow(PathChooser(parent, "License path", "config/simulation/license_path")) - r.getter = lambda ert : ert.main.site_config.get_license_root_path - r.initialize = lambda ert : ert.main.site_config.get_license_root_path + r.getter = lambda ert : ert.enkf.site_config_get_license_root_path(ert.site_config) def ls(string): if string is None: @@ -118,7 +114,7 @@ def createSimulationsPage(configPanel, parent): else: return string - r.setter = lambda ert, value : ert.main.site_config.set_license_root_path( ls(value)) + r.setter = lambda ert, value : ert.enkf.site_config_set_license_root_path(ert.site_config, ls(value)) @@ -128,36 +124,33 @@ def createSimulationsPage(configPanel, parent): r = internalPanel.addRow(PathChooser(parent, "Runpath", "config/simulation/runpath", path_format=True)) - r.getter = lambda ert : ert.main.model_config.get_runpath_as_char - r.initialize = lambda ert : ert.main.model_config.get_runpath_as_char - r.setter = lambda ert, value : ert.main.model_config.select_runpath( str(value)) + r.getter = lambda ert : ert.enkf.model_config_get_runpath_as_char(ert.model_config) + r.setter = lambda ert, value : ert.enkf.model_config_set_runpath_fmt(ert.model_config, str(value)) parent.connect(r, QtCore.SIGNAL("contentsChanged()"), lambda : r.modelEmit("runpathChanged()")) r = internalPanel.addRow(CheckBox(parent, "Pre clear", "config/simulation/pre_clear_runpath", "Perform pre clear")) - r.getter = lambda ert : ert.main.get_pre_clear_runpath - r.initialize = lambda ert : ert.main.get_pre_clear_runpath - r.setter = lambda ert, value : ert.main.set_pre_clear_runpath( value) + r.getter = lambda ert : ert.enkf.enkf_main_get_pre_clear_runpath(ert.main) + r.setter = lambda ert, value : ert.enkf.enkf_main_set_pre_clear_runpath(ert.main, value) r = internalPanel.addRow(RunpathMemberPanel(widgetLabel="Retain runpath", helpLabel="config/simulation/runpath_retain")) def get_runpath_retain_state(ert): - ensemble_size = ert.main.ens_size + ensemble_size = ert.enkf.enkf_main_get_ensemble_size(ert.main) result = [] for index in range(ensemble_size): - state = ert.main.iget_keep_runpath( index) + state = ert.enkf.enkf_main_iget_keep_runpath(ert.main, index) result.append((index, keep_runpath_type.resolveValue(state))) return result r.getter = get_runpath_retain_state - r.initialize = get_runpath_retain_state - + def set_runpath_retain_state(ert, items): for item in items: - ert.main.iset_keep_runpath(item.member, item.runpath_state.value()) + ert.enkf.enkf_main_iset_keep_runpath(ert.main, item.member, item.runpath_state.value()) r.setter = set_runpath_retain_state @@ -169,27 +162,27 @@ def createSimulationsPage(configPanel, parent): r = internalPanel.addRow(RunTemplatePanel(parent)) def get_run_templates(ert): - templates = ert.main.get_templates - template_names = templates.alloc_list - + templates = ert.enkf.enkf_main_get_templates(ert.main) + template_list = ert.enkf.ert_template_alloc_list(templates) + + template_names = ert.getStringList(template_list, free_after_use=True) result = [] for name in template_names: - template = templates.get_template(name) - template_file = template.get_template_file - target_file = template.get_target_file - arguments = template.get_args_as_string + template = ert.enkf.ert_template_get_template(templates, name) + template_file = ert.enkf.ert_template_get_template_file(template) + target_file = ert.enkf.ert_template_get_target_file(template) + arguments = ert.enkf.ert_template_get_args_as_string(template) result.append((name, template_file, target_file, arguments)) return result r.getter = get_run_templates - r.initialize = get_run_templates def set_run_templates(ert, template_list): - templates_object = ert.main.get_templates - templates_object.clear + templates_pointer = ert.enkf.enkf_main_get_templates(ert.main) + ert.enkf.ert_template_clear(templates_pointer) for template in template_list: - templates_object.add_template( template[0], template[1], template[2], template[3]) + ert.enkf.ert_template_add_template(templates_pointer, template[0], template[1], template[2], template[3]) r.setter = set_run_templates diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/runpathpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/runpathpanel.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/runpathpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/runpathpanel.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/runtemplatepanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/runtemplatepanel.py similarity index 99% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/runtemplatepanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/runtemplatepanel.py index 98b263b37d..a661172500 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/runtemplatepanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/simulations/runtemplatepanel.py @@ -53,8 +53,8 @@ class RunTemplatePanel(HelpedWidget): self.addWidget(self.searchableList) self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter) - self.connect(self.searchableList, QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem) - self.connect(self.searchableList, QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem) + self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) + self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) self.run_template_panel = ert_gui.widgets.util.createEmptyPanel() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/systemenv.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/systemenv.py similarity index 60% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/config/systemenv.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/systemenv.py index e4ee7873f5..e9c4f663d6 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/systemenv.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/config/systemenv.py @@ -26,7 +26,6 @@ from jobs.jobspanel import JobsPanel, Job import os import ert_gui.widgets.spinnerwidgets from ert_gui.widgets.activelabel import ActiveLabel -from ert.job_queue.ext_job import ExtJob def createSystemPage(configPanel, parent): configPanel.startPage("System") @@ -35,28 +34,25 @@ def createSystemPage(configPanel, parent): # the site configuration file; this should only be a label - not # user editable. r = configPanel.addRow(ActiveLabel(None, "Site Config", "", "Not specified.")) - r.initialize = lambda ert : ert.main.get_site_config_file - r.getter = lambda ert : ert.main.get_site_config_file + r.getter = lambda ert : ert.enkf.enkf_main_get_site_config_file(ert.main) r.modelConnect("casesUpdated()", r.fetchContent) r = configPanel.addRow(PathChooser(parent, "Job script", "config/systemenv/job_script", True)) - r.initialize = lambda ert : ert.main.site_config.get_job_script - r.getter = lambda ert : ert.main.site_config.get_job_script - r.setter = lambda ert, value : ert.main.site_config.set_job_script( str(value)) + r.getter = lambda ert : ert.enkf.site_config_get_job_script(ert.site_config) + r.setter = lambda ert, value : ert.enkf.site_config_set_job_script(ert.site_config, str(value)) internalPanel = ConfigPanel(parent) internalPanel.startPage("setenv") r = internalPanel.addRow(KeywordTable(parent, "", "config/systemenv/setenv")) - r.initialize = lambda ert : ert.getHash(ert.main.site_config.get_env_hash) - r.getter = lambda ert : ert.getHash(ert.main.site_config.get_env_hash) + r.getter = lambda ert : ert.getHash(ert.enkf.site_config_get_env_hash(ert.site_config)) def setenv(ert, value): - ert.main.site_config.clear_env + ert.enkf.site_config_clear_env(ert.site_config) for env in value: - ert.main.site_config.setenv( env[0], env[1]) + ert.enkf.site_config_setenv(ert.site_config, env[0], env[1]) r.setter = setenv @@ -65,21 +61,19 @@ def createSystemPage(configPanel, parent): internalPanel.startPage("Update path") r = internalPanel.addRow(KeywordTable(parent, "", "config/systemenv/update_path")) - def get_update_path(ert): - paths = ert.main.site_config.get_path_variables - values = ert.main.site_config.get_path_values + paths = ert.getStringList(ert.enkf.site_config_get_path_variables(ert.site_config)) + values = ert.getStringList(ert.enkf.site_config_get_path_values(ert.site_config)) return [[p, v] for p, v in zip(paths, values)] r.getter = get_update_path - r.initialize = get_update_path - + def update_pathvar(ert, value): - ert.main.site_config.clear_pathvar + ert.enkf.site_config_clear_pathvar(ert.site_config) for pathvar in value: - ert.main.site_config.update_pathvar( pathvar[0], pathvar[1]) + ert.enkf.site_config_update_pathvar(ert.site_config, pathvar[0], pathvar[1]) r.setter = update_pathvar @@ -89,66 +83,59 @@ def createSystemPage(configPanel, parent): internalPanel.startPage("Jobs") r = internalPanel.addRow(JobsPanel(parent)) - def get_jobs(ert): - jl = ert.main.site_config.get_installed_jobs - h = jl.get_jobs - stringlist = jl.alloc_list - jobs = ert.getHash(h, return_type="c_void_p") + jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) + h = ert.job_queue.ext_joblist_get_jobs(jl) + + jobs = ert.getHash(h, return_type="long") private_jobs = [] - for v in stringlist: - job = jl.get_job(v) - path = job.get_config_file - if job.is_private: - private_jobs.append(Job(v, path)) - #for k, v in jobs: - # job = jl.get_job(v) - # path = job.get_config_file - # if v.is_private: - # private_jobs.append(Job(k, path)) + for k, v in jobs: + v = int(v) + path = ert.job_queue.ext_job_get_config_file(v) + if ert.job_queue.ext_job_is_private(v): + private_jobs.append(Job(k, path)) return private_jobs def update_job(ert, value): - jl = ert.main.site_config.get_installed_jobs + jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) if os.path.exists(value.path): - license = ert.main.site_config.get_license_root_path + license = ert.enkf.site_config_get_license_root_path(ert.site_config) job = ert.job_queue.ext_job_fscanf_alloc(value.name, license, True, value.path) - jl.add_job(value.name, job) + ert.job_queue.ext_joblist_add_job(jl, value.name, job) else: - job = jl.get_job(value.name) - job.set_config_file(value.path) + job = ert.job_queue.ext_joblist_get_job(jl, value.name) + ert.job_queue.ext_job_set_config_file(job, value.path) def add_job(ert, value): - jl = ert.main.site_config.get_installed_jobs - if not jl.has_job(value.name): - license = ert.main.site_config.get_license_root_path + jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) + if not ert.job_queue.ext_joblist_has_job(jl, value.name): + license = ert.enkf.site_config_get_license_root_path(ert.site_config) if os.path.exists(value.path): job = ert.job_queue.ext_job_fscanf_alloc(value.name, license, True, value.path) - jl.add_job(value.name, job) + ert.job_queue.ext_joblist_add_job(jl, value.name, job) else: job = ert.job_queue.ext_job_alloc(value.name, license, True) - job.set_config_file(value.path) - jl.add_job(value.name, job) + ert.job_queue.ext_job_set_config_file(job, value.path) + ert.job_queue.ext_joblist_add_job(jl, value.name, job) return True return False def remove_job(ert, value): - jl = ert.main.site_config.get_installed_jobs - success = jl.del_job(value.name) + jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) + success = ert.job_queue.ext_joblist_del_job(jl, value.name) if not success: QtGui.QMessageBox.question(parent, "Failed", "Unable to delete job!", QtGui.QMessageBox.Ok) return False return True - + r.getter = get_jobs - r.initialize = get_jobs r.setter = update_job r.insert = add_job r.remove = remove_job @@ -159,14 +146,12 @@ def createSystemPage(configPanel, parent): configPanel.addRow(internalPanel) r = configPanel.addRow(PathChooser(parent, "Log file", "config/systemenv/log_file", True)) - r.initialize = lambda ert: ert.main.logh.get_filename - r.getter = lambda ert : ert.main.logh.get_filename - r.setter = lambda ert, value : ert.main.logh.reopen(value) + r.getter = lambda ert : ert.util.log_get_filename(ert.logh) + r.setter = lambda ert, value : ert.util.log_reset_filename(ert.logh, value) r = configPanel.addRow(ert_gui.widgets.spinnerwidgets.IntegerSpinner(parent, "Log level", "config/systemenv/log_level", 0, 1000)) - r.initialize = lambda ert : ert.main.logh.get_level - r.getter = lambda ert : ert.main.logh.get_level - r.setter = lambda ert, value : ert.main.logh.set_level( value) + r.getter = lambda ert : ert.util.log_get_level(ert.logh) + r.setter = lambda ert, value : ert.util.log_set_level(ert.logh, value) configPanel.endPage() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/init/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initandcopy.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initandcopy.py similarity index 88% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initandcopy.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initandcopy.py index 6573307996..092c4bd9f0 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initandcopy.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initandcopy.py @@ -19,9 +19,6 @@ from ert_gui.widgets.helpedwidget import HelpedWidget from PyQt4 import QtGui, QtCore from ert_gui.widgets.util import resourceIcon, ListCheckPanel, ValidatedTimestepCombo, getItemsFromList from ert.ert.enums import ert_state_enum -from ert.util.stringlist import StringList -from ctypes import * -from ert.util.tvector import BoolVector class ParametersAndMembers(HelpedWidget): @@ -105,14 +102,13 @@ class ParametersAndMembers(HelpedWidget): def initializeCaseFromScratch(self, parameters, members): ert = self.getModel() - stringlist = StringList(parameters) + stringlist = ert.createStringList(parameters) for member in members: m = int(member.strip()) - ert.main.initialize_from_scratch(stringlist, m , m) - - stringlist.__del__ + ert.enkf.enkf_main_initialize_from_scratch(ert.main, stringlist, m , m) + ert.freeStringList(stringlist) def initializeCaseFromCase(self, selected_parameters, selected_members): ert = self.getModel() @@ -123,18 +119,20 @@ class ParametersAndMembers(HelpedWidget): source_case = str(self.sourceCase.currentText()) source_report_step = self.sourceReportStep.getSelectedValue() source_state = ert_state_enum.resolveName(str(self.sourceType.currentText())).value() - member_mask = BoolVector.active_mask(str(selected_members).strip('[]')) + member_mask = ert.createBoolVector(self.membersList.count(), selected_members) ranking_key = None - node_list = StringList(selected_parameters) + node_list = ert.createStringList(selected_parameters) - ert.main.initialize_from_existing__( source_case, + ert.enkf.enkf_main_initialize_from_existing__(ert.main, + source_case, source_report_step, source_state, member_mask, ranking_key, node_list) - node_list.__del__ + ert.freeStringList(node_list) + ert.freeBoolVector(member_mask) def copyEnsemble(self, selected_parameters, selected_members): ert = self.getModel() @@ -150,11 +148,12 @@ class ParametersAndMembers(HelpedWidget): target_report_step = self.targetReportStep.getSelectedValue() target_state = ert_state_enum.resolveName(str(self.targetType.currentText())).value() - member_mask = BoolVector.active_mask(str(selected_members).strip('[]')) + member_mask = ert.createBoolVector(self.membersList.count(), selected_members) ranking_key = None - node_list = StringList(selected_parameters) + node_list = ert.createStringList(selected_parameters) - ert.main.copy_ensemble( source_case, + ert.enkf.enkf_main_copy_ensemble(ert.main, + source_case, source_report_step, source_state, target_case, @@ -164,7 +163,8 @@ class ParametersAndMembers(HelpedWidget): ranking_key, node_list) - node_list.__del__ + ert.freeStringList(node_list) + ert.freeBoolVector(member_mask) def initializeOrCopy(self): selected_parameters = getItemsFromList(self.parametersList) @@ -227,17 +227,25 @@ class ParametersAndMembers(HelpedWidget): #enums from enkf_types.h PARAMETER = 1 DYNAMIC_STATE = 2 - parameters = ert.main.ensemble_config.alloc_keylist_from_var_type( PARAMETER ) + keylist = ert.enkf.ensemble_config_alloc_keylist_from_var_type(ert.ensemble_config, PARAMETER ) - dynamicParameters = ert.main.ensemble_config.alloc_keylist_from_var_type( DYNAMIC_STATE ) + parameters = ert.getStringList(keylist) + ert.freeStringList(keylist) - members = ert.main.ens_size + keylist = ert.enkf.ensemble_config_alloc_keylist_from_var_type(ert.ensemble_config, DYNAMIC_STATE ) + dynamicParameters = ert.getStringList(keylist) + ert.freeStringList(keylist) - fs = ert.main.get_fs - currentCase = ert.main.get_current_fs + members = ert.enkf.enkf_main_get_ensemble_size(ert.main) - list = ert.main.alloc_caselist - historyLength = ert.main.get_history_length + fs = ert.enkf.enkf_main_get_fs(ert.main) + currentCase = "default" #ert.enkf.enkf_fs_get_read_dir(fs) + + #caseList = ert.enkf.enkf_fs_alloc_dirlist(fs) + #list = ert.getStringList(caseList) + #ert.freeStringList(caseList) + list = ["default"] + historyLength = ert.enkf.enkf_main_get_history_length(ert.main) return {"parameters" : parameters, "dynamic_parameters" : dynamicParameters, diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initpanel.py similarity index 79% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initpanel.py index 7cbb0e547a..67289b9da6 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/initpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/init/initpanel.py @@ -42,8 +42,11 @@ class InitPanel(QtGui.QFrame): def get_case_list(ert): - fs = ert.main.get_fs - list = ert.main.alloc_caselist + fs = ert.enkf.enkf_main_get_fs(ert.main) + caseList = ["default"] #ert.enkf.enkf_fs_alloc_dirlist(fs) + + list = caseList #ert.getStringList(caseList) + #ert.freeStringList(caseList) return list self.get_case_list = get_case_list # convenience: used by several functions @@ -72,13 +75,16 @@ class InitPanel(QtGui.QFrame): cases.addRemoveWidget.enableRemoveButton(False) #todo: add support for removal cases.list.setMaximumHeight(150) + cases.initialize = lambda ert : [ert.prototype("long enkf_main_get_fs(long)"), + ert.prototype("void enkf_main_select_case(long , char*)"), + ert.prototype("long enkf_fs_alloc_dirlist(long)")] def create_case(ert, cases): - fs = ert.main.get_fs + fs = ert.enkf.enkf_main_get_fs(ert.main) for case in cases: - if not fs.has_dir(case): - fs.select_write_dir(case, True) + if not ert.enkf.enkf_fs_has_dir(fs, case): + ert.enkf.enkf_fs_select_write_dir(fs, case, True) break self.currentCase.updateList(self.get_case_list(ert)) @@ -86,7 +92,6 @@ class InitPanel(QtGui.QFrame): self.casesUpdated() cases.getter = self.get_case_list - cases.initialize = self.get_case_list cases.setter = create_case return cases @@ -98,15 +103,17 @@ class InitPanel(QtGui.QFrame): self.currentCase.combo.setMinimumWidth(150) def initialize_cases(ert): + ert.prototype("long enkf_main_get_fs(long)") + self.currentCase.updateList(self.get_case_list(ert)) self.currentCase.initialize = initialize_cases def get_current_case(ert): - fs = ert.main.get_fs + fs = ert.enkf.enkf_main_get_fs(ert.main) tmp = self.get_case_list(ert) - currentCase = ert.main.get_current_fs - print "The selected case is: " + currentCase + currentCase = tmp[0] #ert.enkf.enkf_fs_get_read_dir(fs) + #print "The selected case is: " + currentCase return currentCase self.currentCase.getter = get_current_case @@ -115,11 +122,9 @@ class InitPanel(QtGui.QFrame): def select_case(ert, case): case = str(case) if not case == "": - ert.main.user_select_fs( case ) + ert.enkf.enkf_main_select_case( ert.main , case ) self.casesUpdated() self.currentCase.setter = select_case return self.currentCase - - diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/ensemblefetcher.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/ensemblefetcher.py similarity index 70% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/ensemblefetcher.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/ensemblefetcher.py index 8f0b5e081b..5e366ad39d 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/ensemblefetcher.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/ensemblefetcher.py @@ -22,10 +22,9 @@ import ert.ert.ertwrapper as ertwrapper import ert.ert.enums as enums from PyQt4.QtGui import QWidget, QFormLayout, QSpinBox, QComboBox from PyQt4.QtCore import SIGNAL -from ert.ert.erttypes import time_t, time_vector +from ert.ert.erttypes import time_t import numpy -from ert.util.tvector import DoubleVector -import datetime + class EnsembleFetcher(PlotDataFetcherHandler): """A data fetcher for ensemble parameters.""" @@ -37,29 +36,58 @@ class EnsembleFetcher(PlotDataFetcherHandler): self.keyword_configuration = KeywordConfigurationWidget() self.data_configuration = DataConfigurationWidget() - def initialize(self, ert): - self.initialized = True + def emitter(): + self.emit(SIGNAL('dataChanged()')) - def emitter(): - self.emit(SIGNAL('dataChanged()')) self.connect(self.field_configuration, SIGNAL('configurationChanged()'), emitter) self.connect(self.summary_configuration, SIGNAL('configurationChanged()'), emitter) self.connect(self.keyword_configuration, SIGNAL('configurationChanged()'), emitter) self.connect(self.data_configuration, SIGNAL('configurationChanged()'), emitter) - - + def initialize(self, ert): + + + ert.prototype("long enkf_main_get_fs(long)") + ert.prototype("int enkf_main_get_ensemble_size(long)") + ert.prototype("long enkf_main_iget_member_config(long, int)") + ert.prototype("void enkf_main_get_observations(long, char*, int, long*, double*, double*)") #main, user_key, *time, *y, *std + ert.prototype("int enkf_main_get_observation_count(long, char*)") + + ert.prototype("bool enkf_fs_has_node(long, long, int, int, int)") + ert.prototype("void enkf_fs_fread_node(long, long, int, int, int)") + + ert.prototype("long enkf_node_alloc(long)") + ert.prototype("void enkf_node_free(long)") + ert.prototype("double enkf_node_user_get(long, char*, bool*)") + + ert.prototype("double member_config_iget_sim_days(long, int, int)") + ert.prototype("time_t member_config_iget_sim_time(long, int, int)") + ert.prototype("int enkf_main_get_history_length(long)") + + + ert.prototype("long enkf_config_node_get_ref(long)") + ert.prototype("bool field_config_ijk_active(long, int, int, int)") + + ert.prototype("bool ecl_sum_has_general_var(long, char*)", lib=ert.ecl) + ert.prototype("int ecl_sum_get_general_var_index(long, char*)", lib=ert.ecl) + + ert.prototype("time_vector ecl_sum_alloc_time_vector(long, bool)", lib=ert.ecl) + ert.prototype("double_vector ecl_sum_alloc_data_vector(long, int, bool)", lib=ert.ecl) + + def isHandlerFor(self, ert, key): - return ert.main.ensemble_config.has_key( key) + return ert.enkf.ensemble_config_has_key(ert.ensemble_config, key) + def fetch(self, ert, key, parameter, data, comparison_fs): data.x_data_type = "time" - fs = ert.main.get_fs - config_node = ert.main.ensemble_config.get_node(key) - node = config_node.alloc_node - comp_node = config_node.alloc_node - num_realizations = ert.main.ens_size - var_type_set = False + + fs = ert.enkf.enkf_main_get_fs(ert.main) + config_node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, key) + node = ert.enkf.enkf_node_alloc(config_node) + comp_node = ert.enkf.enkf_node_alloc(config_node) + num_realizations = ert.enkf.enkf_main_get_ensemble_size(ert.main) + user_data = parameter.getUserData() if user_data is None: @@ -70,28 +98,20 @@ class EnsembleFetcher(PlotDataFetcherHandler): key_index = user_data['key_index'] if parameter.getType() == FieldModel.TYPE: - var_type = enums.enkf_var_type.PARAMETER - var_type_set = True - field_position = user_data['field_position'] - field_config = config_node.field_model - if field_config.ijk_active(field_position[0] - 1, field_position[1] - 1, field_position[2] - 1): + field_position = user_data['field_position'] + field_config = ert.enkf.enkf_config_node_get_ref(config_node) + if ert.enkf.field_config_ijk_active(field_config, field_position[0] - 1, field_position[1] - 1, field_position[2] - 1): key_index = "%i,%i,%i" % (field_position[0], field_position[1], field_position[2]) data.setKeyIndexIsIndex(True) else: return False - elif parameter.getType() == DataModel.TYPE: - var_type = enums.enkf_var_type.PARAMETER - var_type_set = True data_index = user_data['data_index'] key_index = "KEY:%d" % data_index data.setKeyIndexIsIndex(True) - if not var_type_set: - var_type = enums.enkf_var_type.DYNAMIC_RESULT - - data.setKeyIndex(key_index) + state_list = [user_data['state']] if state_list[0] == enums.ert_state_enum.BOTH: state_list = [enums.ert_state_enum.FORECAST, enums.ert_state_enum.ANALYZED] @@ -108,49 +128,43 @@ class EnsembleFetcher(PlotDataFetcherHandler): x_comp_time = data.x_comp_data[member] y_comp = data.y_comp_data[member] - stop_time = ert.main.get_history_length + member_config = ert.enkf.enkf_main_iget_member_config(ert.main, member) + stop_time = ert.enkf.enkf_main_get_history_length( ert.main ) - for state in state_list: - start_time = 0 - if config_node.get_impl_type == SummaryModel.TYPE: - start_time = 1 - for step in range(start_time, stop_time): - pikk = True - time_map = fs.get_time_map - sim_time_as_c_int = time_map.iget(step) - sim_time_as_time_t = time_t(sim_time_as_c_int) - sim_time_as_ordinal = sim_time_as_time_t.datetime().toordinal() - valid = ertwrapper.c_double() - value = node.user_get(fs, key_index, step, member, state.value(), ertwrapper.byref(valid)) - if value == True: - data.checkMaxMin(sim_time_as_time_t) - data.checkMaxMinY(valid.value) - x_time.append(sim_time_as_ordinal) - y.append(valid.value) - #else: - #print "Not valid: ", key, member, step, key_index, value, state.value() - - if not comparison_fs is None: - time_map = comparison_fs.get_time_map - sim_time_as_c_int = time_map.iget(step) - sim_time_as_time_t = time_t(sim_time_as_c_int) - sim_time_as_ordinal = sim_time_as_time_t.datetime().toordinal() - valid = ertwrapper.c_double() - value = node.user_get(comparison_fs, key, step, member, state.value(), ertwrapper.byref(valid)) - if value == 1: - data.checkMaxMin(sim_time_as_time_t) - data.checkMaxMinY(valid.value) - x_comp_time.append(sim_time_as_ordinal) - y_comp.append(valid.value) + for step in range(0, stop_time + 1): + for state in state_list: + if ert.enkf.enkf_fs_has_node(fs, config_node, step, member, state.value()): + sim_time = ert.enkf.member_config_iget_sim_time(member_config, step, fs) + ert.enkf.enkf_fs_fread_node(fs, node, step, member, state.value()) + valid = ertwrapper.c_int() + value = ert.enkf.enkf_node_user_get(node, key_index, ertwrapper.byref(valid)) + if valid.value == 1: + data.checkMaxMin(sim_time) + data.checkMaxMinY(value) + x_time.append(sim_time) + y.append(value) #else: - # print "Not valid: ", key, member, step, key_index - - - data.x_data[member] = numpy.array(x_time)#[t.datetime() for t in x_time]) + # print "Not valid: ", key, member, step, key_index + + if not comparison_fs is None: + if ert.enkf.enkf_fs_has_node(comparison_fs, config_node, step, member, state.value()): + sim_time = ert.enkf.member_config_iget_sim_time(member_config, step, comparison_fs) + ert.enkf.enkf_fs_fread_node(comparison_fs, comp_node, step, member, state.value()) + valid = ertwrapper.c_int() + value = ert.enkf.enkf_node_user_get(comp_node, key_index, ertwrapper.byref(valid)) + if valid.value == 1: + #data.checkMaxMin(sim_time) + #data.checkMaxMinY(value) + x_comp_time.append(sim_time) + y_comp.append(value) + #else: + # print "Not valid: ", key, member, step, key_index + + data.x_data[member] = numpy.array([t.datetime() for t in x_time]) data.y_data[member] = numpy.array(y) if not comparison_fs is None: - data.x_comp_data[member] = numpy.array(x_comp_time)#[t.datetime() for t in x_comp_time]) + data.x_comp_data[member] = numpy.array([t.datetime() for t in x_comp_time]) data.y_comp_data[member] = numpy.array(y_comp) @@ -158,8 +172,8 @@ class EnsembleFetcher(PlotDataFetcherHandler): self._getRefCase(ert, key, data) - #node.__del__ - #comp_node.__del__ + ert.enkf.enkf_node_free(node) + ert.enkf.enkf_node_free(comp_node) data.inverted_y_axis = False @@ -169,12 +183,12 @@ class EnsembleFetcher(PlotDataFetcherHandler): else: user_key = key - obs_count = ert.main.get_observation_count(user_key) + obs_count = ert.enkf.enkf_main_get_observation_count(ert.main, user_key) if obs_count > 0: obs_x = (time_t * obs_count)() obs_y = (ertwrapper.c_double * obs_count)() obs_std = (ertwrapper.c_double * obs_count)() - ert.main.get_observations(user_key, obs_count, obs_x, obs_y, obs_std) + ert.enkf.enkf_main_get_observations(ert.main, user_key, obs_count, obs_x, obs_y, obs_std) data.obs_x = numpy.array([t.datetime() for t in obs_x]) data.obs_y = numpy.array(obs_y) @@ -189,13 +203,12 @@ class EnsembleFetcher(PlotDataFetcherHandler): def _getRefCase(self, ert, key, data): - ecl_config = ert.main.ecl_config - ecl_sum = ecl_config.get_refcase + ecl_sum = ert.enkf.ecl_config_get_refcase(ert.ecl_config) - if(ecl_sum.has_key(key)): - ki = ecl_sum.get_general_var_index(key) - x_data = ecl_sum.alloc_time_vector(True) - y_data = ecl_sum.alloc_data_vector(ki, True) + if(ert.ecl.ecl_sum_has_general_var(ecl_sum, key)): + ki = ert.ecl.ecl_sum_get_general_var_index(ecl_sum, key) + x_data = ert.ecl.ecl_sum_alloc_time_vector(ecl_sum, True) + y_data = ert.ecl.ecl_sum_alloc_data_vector(ecl_sum, ki, True) data.refcase_x = [] data.refcase_y = [] @@ -203,7 +216,7 @@ class EnsembleFetcher(PlotDataFetcherHandler): for x in x_data: if not first: data.refcase_x.append(x) - #data.checkMaxMin(x) + data.checkMaxMin(x) else: first = False #skip first element because of eclipse behavior diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/fetcher.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/fetcher.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/fetcher.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/fetcher.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotconfig.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotconfig.py similarity index 99% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotconfig.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotconfig.py index 0917ace506..efc16ac434 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotconfig.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotconfig.py @@ -120,6 +120,7 @@ class PlotConfig(object): picker = property(getPicker, setPicker, doc="Picker radius") + class PlotConfigPanel(QFrame): """A panel to interact with PlotConfig instances.""" plot_marker_styles = ["", ".", ",", "o", "*", "s", "+", "x", "p", "h", "H", "D", "d"] @@ -209,12 +210,13 @@ class PlotConfigPanel(QFrame): class ColorPicker(QWidget): """A widget that shows a colored box and pops up a color dialog.""" + color_dialog = QColorDialog() def __init__(self, plot_config): QWidget.__init__(self) self.plot_config = plot_config - self.color_dialog = QColorDialog() + size = 20 self.setMaximumSize(QSize(size, size)) self.setMinimumSize(QSize(size, size)) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotdata.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotdata.py similarity index 73% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotdata.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotdata.py index 1c46c364ef..d5c9670b3a 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotdata.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotdata.py @@ -54,7 +54,8 @@ class PlotDataFetcher(ContentModel, QObject): handler.initialize(ert) self.connect(handler, SIGNAL('dataChanged()'), self.__dataChanged) - + ert.prototype("long enkf_main_mount_extra_fs(long, char*)") + ert.prototype("void enkf_fs_free(long)") #@print_timing @@ -112,12 +113,12 @@ class PlotDataFetcher(ContentModel, QObject): ert = self.getModel() if self.fs_for_comparison_plots: - fs_for_comparison_plots.__del__ + ert.enkf.enkf_fs_free(self.fs_for_comparison_plots) self.fs_for_comparison_plots = None self.comparison_fs_name = "None" if not new_fs == "None": - self.fs_for_comparison_plots = ert.main.get_alt_fs(new_fs, false, true) + self.fs_for_comparison_plots = ert.enkf.enkf_main_mount_extra_fs(ert.main, new_fs) self.comparison_fs_name = new_fs self.__dataChanged() @@ -162,7 +163,7 @@ class PlotData: if self.x_min is None or self.x_max is None: self.x_min = value self.x_max = value - + self.x_min = min(value, self.x_min) self.x_max = max(value, self.x_max) @@ -224,12 +225,34 @@ class PlotData: class PlotContextDataFetcher(ContentModel): + observation_icon = resourceIcon("observation") def __init__(self): ContentModel.__init__(self) - self.observation_icon = resourceIcon("observation") def initialize(self, ert): + + ert.prototype("long enkf_config_node_get_impl_type(long)") + ert.prototype("long enkf_config_node_get_ref(long)") + + ert.prototype("long gen_kw_config_alloc_name_list(long)") + + ert.prototype("long gen_data_config_get_initial_size(long)") + + ert.prototype("int field_config_get_nx(long)") + ert.prototype("int field_config_get_ny(long)") + ert.prototype("int field_config_get_nz(long)") + + ert.prototype("long enkf_main_get_fs(long)") + ert.prototype("char* enkf_fs_get_read_dir(long)") + ert.prototype("long enkf_fs_alloc_dirlist(long)") + + ert.prototype("int plot_config_get_errorbar_max(long)") + ert.prototype("char* plot_config_get_path(long)") + + ert.prototype("long enkf_main_get_obs(long)") + ert.prototype("long enkf_obs_alloc_typed_keylist(long, int)") + self.modelConnect("casesUpdated()", self.fetchContent) @@ -237,14 +260,14 @@ class PlotContextDataFetcher(ContentModel): def getter(self, ert): data = PlotContextData() - keys = ert.main.ensemble_config.alloc_keylist + keys = ert.getStringList(ert.enkf.ensemble_config_alloc_keylist(ert.ensemble_config), free_after_use=True) data.keys = keys data.parameters = [] for key in keys: - config_node = ert.main.ensemble_config.get_node( key) - type = config_node.get_impl_type - node_ref = config_node.get_ref + config_node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, key) + type = ert.enkf.enkf_config_node_get_impl_type(config_node) + node_ref = ert.enkf.enkf_config_node_get_ref(config_node) if type == SummaryModel.TYPE: p = Parameter(key, SummaryModel.TYPE) @@ -255,42 +278,44 @@ class PlotContextDataFetcher(ContentModel): data.parameters.append(p) if data.field_bounds is None: - x = config_node.field_model.get_nx - y = config_node.field_model.get_ny - z = config_node.field_model.get_nz + x = ert.enkf.field_config_get_nx(node_ref) + y = ert.enkf.field_config_get_ny(node_ref) + z = ert.enkf.field_config_get_nz(node_ref) data.field_bounds = (x,y,z) elif type == DataModel.TYPE: data.parameters.append(Parameter(key, DataModel.TYPE)) - data.gen_data_size = 2#config_node.data_model.get_initial_size + data.gen_data_size = ert.enkf.gen_data_config_get_initial_size(node_ref) elif type == KeywordModel.TYPE: p = Parameter(key, KeywordModel.TYPE) data.parameters.append(p) - s = config_node.keyword_model.alloc_name_list - data.key_index_list[key] = s + s = ert.enkf.gen_kw_config_alloc_name_list(node_ref) + data.key_index_list[key] = ert.getStringList(s, free_after_use=True) - data.errorbar_max = ert.main.plot_config.get_errorbar_max + data.errorbar_max = ert.enkf.plot_config_get_errorbar_max(ert.plot_config) - fs = ert.main.get_fs - current_case = ert.main.get_current_fs + fs = ert.enkf.enkf_main_get_fs(ert.main) + current_case = "default" #ert.enkf.enkf_fs_get_read_dir(fs) - data.plot_config_path = ert.main.plot_config.get_path - data.plot_path = ert.main.plot_config.get_path + "/" + current_case + data.plot_config_path = ert.enkf.plot_config_get_path(ert.plot_config) + #data.plot_path = ert.enkf.plot_config_get_path(ert.plot_config) + "/" + current_case + data.plot_path = "PLOTXXX" - enkf_obs = ert.main.get_obs - key_list = enkf_obs.alloc_typed_keylist( obs_impl_type.FIELD_OBS.value()) + enkf_obs = ert.enkf.enkf_main_get_obs(ert.main) + key_list = ert.enkf.enkf_obs_alloc_typed_keylist(enkf_obs, obs_impl_type.FIELD_OBS.value()) + field_obs = ert.getStringList(key_list, free_after_use=True) - for obs in key_list: - p = Parameter(obs, obs_impl_type.FIELD_OBS, self.observation_icon) + for obs in field_obs: + p = Parameter(obs, obs_impl_type.FIELD_OBS, PlotContextDataFetcher.observation_icon) data.parameters.append(p) - - case_list = ert.main.alloc_caselist - + #case_list_pointer = ert.enkf.enkf_fs_alloc_dirlist(fs) + #case_list = ert.getStringList(case_list_pointer) + case_list = ["default"] data.current_case = current_case - + #ert.freeStringList(case_list_pointer) for case in case_list: data.case_list.append(case) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotfigure.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotfigure.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotfigure.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotfigure.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotgenerator.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotgenerator.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotgenerator.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotgenerator.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotpanel.py similarity index 98% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotpanel.py index a78439dd77..c2b23c770b 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotpanel.py @@ -82,7 +82,7 @@ class PlotPanel(QtGui.QWidget): plotLayout.addLayout(plot_view_layout) self.plotViewSettings = PlotViewSettingsPanel(plotView=self.plot, width=250) - self.connect(self.plotViewSettings, QtCore.SIGNAL('comparisonCaseSelected(QString)'), self.plotDataFetcher.updateComparisonFS) + self.connect(self.plotViewSettings, QtCore.SIGNAL('comparisonCaseSelected(String)'), self.plotDataFetcher.updateComparisonFS) plotLayout.addWidget(self.plotViewSettings) self.setLayout(plotLayout) @@ -175,12 +175,12 @@ class PlotViewSettingsPanel(QtGui.QFrame): for plot_config in plot_configs: config_panel = PlotConfigPanel(plot_config) tabbed_panel.addTab(config_panel, plot_config.name) - self.connect(config_panel, SIGNAL('plotConfigChanged()'), self.plotView.drawPlot) + #self.connect(config_panel, SIGNAL('plotConfigChanged()'), self.plotView.drawPlot) layout.addWidget(tabbed_panel) tabbed_panel = QTabWidget() - tabbed_panel.setTabPosition(QTabWidget.West) + #tabbed_panel.setTabPosition(QTabWidget.West) tabbed_panel.addTab(self.createMemberSelectionPanel(), "Members") tabbed_panel.addTab(self.createPlotRangePanel(), "Plot") diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotrenderer.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotrenderer.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotrenderer.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotrenderer.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotsettings.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotsettings.py similarity index 98% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotsettings.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotsettings.py index b0bc0ec8cf..4b58fb0587 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotsettings.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotsettings.py @@ -65,8 +65,8 @@ class PlotSettings(QObject): self.errorbar_plot_config, self.comparison_plot_config] - #for pc in self._plot_configs: - # self.connect(pc.signal_handler, SIGNAL('plotConfigChanged(PlotConfig)'), self.notify) + for pc in self._plot_configs: + self.connect(pc.signal_handler, SIGNAL('plotConfigChanged(PlotConfig)'), self.notify) self._plot_config_dict = {} for pc in self._plot_configs: diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotsettingsxml.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotsettingsxml.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotsettingsxml.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotsettingsxml.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotview.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotview.py similarity index 99% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotview.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotview.py index 5c1e12618a..5f74965471 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/plotview.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/plotview.py @@ -22,7 +22,7 @@ import time from ert.ert.erttypes import time_t from ert_gui.widgets.util import print_timing -from ert_gui.pages.plot.plotdata import PlotData +from plotdata import PlotData import ert_gui.widgets from PyQt4.QtCore import SIGNAL diff --git a/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/rftfetcher.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/rftfetcher.py new file mode 100644 index 0000000000..08d1da4521 --- /dev/null +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/rftfetcher.py @@ -0,0 +1,192 @@ +# Copyright (C) 2011 Statoil ASA, Norway. +# +# The file 'rftfetcher.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. + + +from fetcher import PlotDataFetcherHandler +import ert.ert.ertwrapper as ertwrapper +import ert.ert.enums as enums +import plotdata +from ert.ert.enums import ert_state_enum, obs_impl_type +import numpy + +class RFTFetcher(PlotDataFetcherHandler): + + def __init__(self): + PlotDataFetcherHandler.__init__(self) + + def initialize(self, ert): + ert.prototype("long enkf_main_get_obs(long)") + ert.prototype("long enkf_main_get_fs(long)") + ert.prototype("int enkf_main_get_ensemble_size(long)") + ert.prototype("int enkf_main_get_history_length(long)") + + ert.prototype("bool enkf_fs_has_node(long, long, int, int, int)") + ert.prototype("void enkf_fs_fread_node(long, long, int, int, int)") + + ert.prototype("bool enkf_obs_has_key(long, char*)") + ert.prototype("long enkf_obs_get_vector(long, char*)") + ert.prototype("long enkf_obs_alloc_typed_keylist(long, int)") + + ert.prototype("char* obs_vector_get_state_kw(long)") + ert.prototype("long obs_vector_iget_node(long, int)") + ert.prototype("int obs_vector_get_num_active(long)") + ert.prototype("bool obs_vector_iget_active(long, int)") + + ert.prototype("long enkf_config_node_get_ref(long)") + + ert.prototype("int* field_obs_get_i(long)") + ert.prototype("int* field_obs_get_j(long)") + ert.prototype("int* field_obs_get_k(long)") + ert.prototype("int field_obs_get_size(long)") + ert.prototype("void field_obs_iget(long, int, double*, double*)") + + ert.prototype("double field_ijk_get_double(long, int, int, int)") + + ert.prototype("long field_config_get_grid(long)") + + ert.prototype("long enkf_node_alloc(long)") + ert.prototype("void enkf_node_free(long)") + ert.prototype("long enkf_node_value_ptr(long)") + + ert.prototype("void ecl_grid_get_xyz3(long, int, int, int, double*, double*, double*)", lib=ert.ecl) + + def isHandlerFor(self, ert, key): + enkf_obs = ert.enkf.enkf_main_get_obs(ert.main) + key_list = ert.enkf.enkf_obs_alloc_typed_keylist(enkf_obs, obs_impl_type.FIELD_OBS.value()) + field_obs = ert.getStringList(key_list, free_after_use=True) + return key in field_obs + + def fetch(self, ert, key, parameter, data, comparison_fs): + enkf_obs = ert.enkf.enkf_main_get_obs(ert.main) + obs_vector = ert.enkf.enkf_obs_get_vector(enkf_obs, key) + + num_active = ert.enkf.obs_vector_get_num_active(obs_vector) + if num_active == 1: + report_step = ert.enkf.obs_vector_get_active_report_step(obs_vector) + elif num_active > 1: + history_length = ert.enkf.enkf_main_get_history_length(ert.main) + active = [] + for index in range(history_length): + if ert.enkf.obs_vector_iget_active(obs_vector , index): + active.append(index) + print "Active:", active + report_step = active[0] #todo: enable selection from GUI + else: + return + + fs = ert.enkf.enkf_main_get_fs(ert.main) + state_kw = ert.enkf.obs_vector_get_state_kw(obs_vector) + + ens_size = ert.enkf.enkf_main_get_ensemble_size(ert.main) + config_node = ert.enkf.ensemble_config_get_node(ert.ensemble_config, state_kw) + field_config = ert.enkf.enkf_config_node_get_ref(config_node) + field_obs = ert.enkf.obs_vector_iget_node(obs_vector, report_step) + + i = ert.enkf.field_obs_get_i(field_obs) + j = ert.enkf.field_obs_get_j(field_obs) + k = ert.enkf.field_obs_get_k(field_obs) + obs_size = ert.enkf.field_obs_get_size(field_obs) + grid = ert.enkf.field_config_get_grid(field_config) + + node = ert.enkf.enkf_node_alloc(config_node) + + y_obs = [] + x_obs = [] + x_std = [] + xpos = (ertwrapper.c_double)() + ypos = (ertwrapper.c_double)() + zpos = (ertwrapper.c_double)() + value = (ertwrapper.c_double)() + std = (ertwrapper.c_double)() + for index in range(obs_size): + ert.ecl.ecl_grid_get_xyz3(grid, i[index], j[index], k[index], xpos, ypos , zpos) + y_obs.append(zpos.value) + ert.enkf.field_obs_iget(field_obs, index, value, std) + x_obs.append(value.value) + x_std.append(std.value) + data.checkMaxMin(value.value + std.value) + data.checkMaxMin(value.value - std.value) + data.obs_y = numpy.array(y_obs) + data.obs_x = numpy.array(x_obs) + data.obs_std_x = numpy.array(x_std) + data.obs_std_y = None + + + for member in range(ens_size): + if ert.enkf.enkf_fs_has_node(fs, config_node, report_step, member, ert_state_enum.ANALYZED.value()): + ert.enkf.enkf_fs_fread_node(fs, node, report_step, member, ert_state_enum.ANALYZED.value()) + elif ert.enkf.enkf_fs_has_node(fs, config_node, report_step, member, ert_state_enum.FORECAST.value()): + ert.enkf.enkf_fs_fread_node(fs, node, report_step, member, ert_state_enum.FORECAST.value()) + else: + print "No data found for member %d/%d." % (member, report_step) + continue + + data.x_data[member] = [] + data.y_data[member] = [] + x_data = data.x_data[member] + y_data = data.y_data[member] + + field = ert.enkf.enkf_node_value_ptr(node) + for index in range(obs_size): + value = ert.enkf.field_ijk_get_double(field, i[index] , j[index] , k[index]) + x_data.append(value) + y_data.append(y_obs[index]) + data.checkMaxMin(value) + + data.x_data[member] = numpy.array(x_data) + data.y_data[member] = numpy.array(y_data) + + if not comparison_fs is None: + comp_node = ert.enkf.enkf_node_alloc(config_node) + for member in range(ens_size): + if ert.enkf.enkf_fs_has_node(comparison_fs, config_node, report_step, member, ert_state_enum.ANALYZED.value()): + ert.enkf.enkf_fs_fread_node(comparison_fs, comp_node, report_step, member, ert_state_enum.ANALYZED.value()) + elif ert.enkf.enkf_fs_has_node(comparison_fs, config_node, report_step, member, ert_state_enum.FORECAST.value()): + ert.enkf.enkf_fs_fread_node(comparison_fs, comp_node, report_step, member, ert_state_enum.FORECAST.value()) + else: + print "No data found for member %d/%d." % (member, report_step) + continue + + data.x_comp_data[member] = [] + data.y_comp_data[member] = [] + x_data = data.x_comp_data[member] + y_data = data.y_comp_data[member] + + field = ert.enkf.enkf_node_value_ptr(comp_node) + for index in range(obs_size): + value = ert.enkf.field_ijk_get_double(field, i[index] , j[index] , k[index]) + x_data.append(value) + y_data.append(y_obs[index]) + data.checkMaxMin(value) + + data.x_comp_data[member] = numpy.array(x_data) + data.y_comp_data[member] = numpy.array(y_data) + + ert.enkf.enkf_node_free(comp_node) + + ert.enkf.enkf_node_free(node) + + data.x_data_type = "number" + data.inverted_y_axis = True + + def getConfigurationWidget(self, context_data): + return None + + def configure(self, parameter, context_data): + pass #nothing to configure, yet + + + diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/zoomslider.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/zoomslider.py similarity index 98% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/zoomslider.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/zoomslider.py index 72fd79558c..d33162c698 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/zoomslider.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/plot/zoomslider.py @@ -190,6 +190,7 @@ class ZoomSlider(QFrame): if self.max_value > 1.0: self.max_value = 1 + #print "max:", self.min_value, self.max_value self.emit(SIGNAL('zoomValueChanged(float, float)'), self.min_value, self.max_value) @@ -212,6 +213,7 @@ class ZoomSlider(QFrame): if self.min_value < 0.0: self.min_value = 0.0 + #print "min:", self.min_value, self.max_value self.emit(SIGNAL('zoomValueChanged(float, float)'), self.min_value, self.max_value) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/run/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/legend.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/legend.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/run/legend.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/legend.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/runpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/runpanel.py similarity index 90% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/run/runpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/runpanel.py index 30e1f923bd..dfc44d7eb0 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/runpanel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/runpanel.py @@ -30,7 +30,7 @@ from simulationsdialog import SimulationsDialog class RunWidget(HelpedWidget): """A widget that shows simulation parameters and the possibility to start the simulation""" - run_mode_type = {"ENKF_ASSIMILATION" : 1, "ENSEMBLE_EXPERIMENT" : 2, "ENSEMBLE_PREDICTION" : 3, "INIT_ONLY" : 4, "SMOOTHER" : 5} + run_mode_type = {"ENKF_ASSIMILATION" : 1, "ENSEMBLE_EXPERIMENT" : 2, "ENSEMBLE_PREDICTION" : 3, "INIT_ONLY" : 4} state_enum = {"UNDEFINED" : 0, "SERIALIZED" : 1, "FORECAST" : 2, "ANALYZED" : 4, "BOTH" : 6} def __init__(self, parent=None): @@ -40,9 +40,8 @@ class RunWidget(HelpedWidget): self.modelConnect("ensembleResized()", self.fetchContent) self.modelConnect("runpathChanged()", self.fetchContent) - self.rbAssimilation.toggle() - #self.rbExperiment.toggle() - #self.rbSmoother.toggle() + #self.rbAssimilation.toggle() + self.rbExperiment.toggle() def createPanel(self, parent): """Creates the panel with the simulation parameters.""" @@ -115,9 +114,11 @@ class RunWidget(HelpedWidget): QtGui.QMessageBox.warning(self, "Missing data", "At least one member must be selected!") return - if not ert.main.is_initialized: + member_mask = ert.createBoolVector(self.membersList.count(), selectedMembers) + if not ert.enkf.enkf_main_is_initialized(ert.main, member_mask): QtGui.QMessageBox.warning(self, "Case not initialized", "The case must be initialized before simulation can start!") return + ert.freeBoolVector(member_mask) simFrom = self.simulateFrom.getSelectedValue() @@ -125,13 +126,11 @@ class RunWidget(HelpedWidget): if self.rbAssimilation.isChecked(): mode = self.run_mode_type["ENKF_ASSIMILATION"] - if self.rbExperiment.isChecked(): + else: if simTo == -1: # -1 == End mode = self.run_mode_type["ENSEMBLE_PREDICTION"] else: mode = self.run_mode_type["ENSEMBLE_EXPERIMENT"] - if self.rbSmoother.isChecked(): - mode = self.run_mode_type["SMOOTHER"] state = self.state_enum["ANALYZED"] if self.startState.currentText() == "Forecast" and not simFrom == 0: @@ -184,12 +183,18 @@ class RunWidget(HelpedWidget): self.membersList.selectAll() + def initialize(self, ert): + """Prototype functions""" + ert.prototype("int enkf_main_get_ensemble_size(long)") + ert.prototype("int enkf_main_get_history_length(long)") + ert.prototype("char* model_config_get_runpath_as_char(long)") + ert.prototype("bool enkf_main_is_initialized(long)") def getter(self, ert): """Fetch data from EnKF. Such as number of realizations, runpath and number of timesteps.""" - members = ert.main.ens_size - historyLength = ert.main.get_history_length - runpath = ert.main.model_config.get_runpath_as_char + members = ert.enkf.enkf_main_get_ensemble_size(ert.main) + historyLength = ert.enkf.enkf_main_get_history_length(ert.main) + runpath = ert.enkf.model_config_get_runpath_as_char(ert.model_config) return {"members" : range(members), "history_length" : historyLength, "runpath" : runpath} @@ -205,19 +210,17 @@ class RunWidget(HelpedWidget): def createRadioButtons(self): """Create a toggle between assimilation and experiment.""" radioLayout = QtGui.QVBoxLayout() - radioLayout.setSpacing(3) + radioLayout.setSpacing(2) self.rbExperiment = QtGui.QRadioButton("Ensemble experiment") radioLayout.addWidget(self.rbExperiment) self.rbAssimilation = QtGui.QRadioButton("EnKF assimilation") radioLayout.addWidget(self.rbAssimilation) - self.rbSmoother = QtGui.QRadioButton("Smoother") - radioLayout.addWidget(self.rbSmoother) + self.connect(self.rbAssimilation , QtCore.SIGNAL('toggled(bool)'), lambda : self.rbToggle()) self.connect(self.rbExperiment , QtCore.SIGNAL('toggled(bool)'), lambda : self.rbToggle()) - self.connect(self.rbSmoother , QtCore.SIGNAL('toggled(bool)'), lambda : self.rbToggle()) - + return radioLayout diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulation.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulation.py similarity index 92% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulation.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulation.py index 0a880b913c..25b3b57d70 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulation.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulation.py @@ -314,9 +314,18 @@ class SimulationPanelController: self.selectedSimulations = [] self.view.connect(self.view, QtCore.SIGNAL('simulationsUpdated()'), self.showSelectedSimulations) - def initialize(self, ert): + """Set prototypes for ERT""" if not self.initialized: + ert.prototype("bool job_queue_get_pause(long)", lib = ert.job_queue) + ert.prototype("void job_queue_set_pause_on(long)", lib = ert.job_queue) + ert.prototype("void job_queue_set_pause_off(long)", lib = ert.job_queue) + ert.prototype("void job_queue_user_exit(long)", lib = ert.job_queue) + ert.prototype("long enkf_main_iget_state(long, int)") + ert.prototype("void enkf_state_kill_simulation(long)") + ert.prototype("void enkf_state_resubmit_simulation(long, int)") + ert.prototype("int enkf_state_get_run_status(long)") + ert.prototype("long site_config_get_job_queue(long)") self.initialized = True def setModel(self, ert): @@ -327,39 +336,39 @@ class SimulationPanelController: def kill(self): """Kills the selected simulations.""" for simulation in self.selectedSimulations: - state = self.ert.main.iget_state(simulation.name) - status = state.get_run_status + state = self.ert.enkf.enkf_main_iget_state(self.ert.main, simulation.name) + status = self.ert.enkf.enkf_state_get_run_status(state) #if status == Simulation.RUNNING: - state.kill_simulation + self.ert.enkf.enkf_state_kill_simulation(state) def restart(self, resample): """Restarts the selected simulations. May also resample.""" for simulation in self.selectedSimulations: - state = self.ert.main.iget_state(simulation.name) - status = state.get_run_status + state = self.ert.enkf.enkf_main_iget_state(self.ert.main, simulation.name) + status = self.ert.enkf.enkf_state_get_run_status(state) #if status == Simulation.USER_KILLED: - state.resubmit_simulation(resample) + self.ert.enkf.enkf_state_resubmit_simulation(state , resample) def pause(self, pause): """Pause the job queue after the currently running jobs are finished.""" - job_queue = self.ert.main.site_config.get_job_queue + job_queue = self.ert.enkf.site_config_get_job_queue(self.ert.site_config) if pause: self.statistics.stop() - job_queue.set_pause_on + self.ert.job_queue.job_queue_set_pause_on(job_queue) else: self.statistics.startTiming() - job_queue.set_pause_off + self.ert.job_queue.job_queue_set_pause_off(job_queue) def killAll(self): """Kills all simulations""" killAll = QtGui.QMessageBox.question(self.view, "Remove all jobs?", "Are you sure you want to remove all jobs from the queue?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if killAll == QtGui.QMessageBox.Yes: - job_queue = self.ert.main.site_config.get_job_queue - job_queue.user_exit + job_queue = self.ert.enkf.site_config_get_job_queue(self.ert.site_config) + self.ert.job_queue.job_queue_user_exit(job_queue) def showSelectedSimulations(self): """Update information relating to a single job""" diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulationsdialog.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulationsdialog.py similarity index 90% rename from ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulationsdialog.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulationsdialog.py index c6f51489c1..9f41bd57b6 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/simulationsdialog.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/pages/run/simulationsdialog.py @@ -25,7 +25,6 @@ import time from ert_gui.widgets.util import getItemsFromList from ert.ert.enums import ert_job_status_type from PyQt4.QtGui import QApplication -from ert.util.tvector import BoolVector class SimulationsDialog(QtGui.QDialog): """A dialog that shows the progress of a simulation""" @@ -160,10 +159,17 @@ class SimulationsDialogController: selection = getItemsFromList(self.view.simulationList, lambda item : item.simulation) self.view.simulationPanel.setSimulations(selection) + def initialize(self, ert): + """Protoype ERT functions""" if not self.initialized: + ert.prototype("long enkf_main_iget_state(long, int)") + ert.prototype("int enkf_state_get_run_status(long)") + ert.prototype("long site_config_queue_is_running(long)") + ert.prototype("long enkf_state_get_start_time(long)") + ert.prototype("long enkf_state_get_submit_time(long)") self.initialized = True - + def start(self, **kwargs): """Start the simulation. Two threads are started one for the simulation and one for progress monitoring""" ert = kwargs["ert"] @@ -190,8 +196,11 @@ class SimulationsDialogController: self.runthread = threading.Thread(name="enkf_main_run") def run(): self.view.setRunningState(True) - boolVector = BoolVector.active_mask(str(selectedMembers).strip('[]')) - ert.main.run(boolVector, init_step_parameter, simFrom, state, mode) + boolVector = ert.createBoolVector(memberCount, selectedMembers) + boolPtr = ert.getBoolVectorPtr(boolVector) + + ert.enkf.enkf_main_run(ert.main, mode, boolPtr, init_step_parameter, simFrom, state) + ert.freeBoolVector(boolVector) self.view.setRunningState(False) self.runthread.setDaemon(True) @@ -200,21 +209,21 @@ class SimulationsDialogController: self.pollthread = threading.Thread(name="polling_thread") def poll(): - while not ert.main.site_config.queue_is_running: + while not ert.enkf.site_config_queue_is_running(ert.site_config): time.sleep(0.5) job_start_time = int(time.time()) while(self.runthread.isAlive()): for member in selectedMembers: - state = ert.main.iget_state(member) - status = state.get_run_status + state = ert.enkf.enkf_main_iget_state( ert.main , member) + status = ert.enkf.enkf_state_get_run_status( state ) simulations[member].simulation.setStatus(ert_job_status_type.resolveValue(status)) if not ert_job_status_type.NOT_ACTIVE == status: - start_time = state.get_start_time - submit_time = state.get_submit_time + start_time = ert.enkf.enkf_state_get_start_time(state) + submit_time = ert.enkf.enkf_state_get_submit_time(state) simulations[member].simulation.setStartTime(start_time) simulations[member].simulation.setSubmitTime(submit_time) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/__init__.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/__init__.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/__init__.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/__init__.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/activelabel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/activelabel.py similarity index 96% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/activelabel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/activelabel.py index 223fca5856..56fd67d916 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/activelabel.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/activelabel.py @@ -44,4 +44,4 @@ class ActiveLabel(HelpedWidget): if self_get_from_model is None: self_get_from_model = "" - self.active_label.setText("%s" % self_get_from_model) + self.active_label.setText(self_get_from_model) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/checkbox.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/checkbox.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/checkbox.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/checkbox.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/cogwheel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/cogwheel.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/cogwheel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/cogwheel.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/combochoice.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/combochoice.py similarity index 90% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/combochoice.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/combochoice.py index 6813e8e99a..93ff0d700f 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/combochoice.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/combochoice.py @@ -14,7 +14,7 @@ # See the GNU General Public License at # for more details. -import sys + from PyQt4 import QtGui, QtCore from helpedwidget import * @@ -54,11 +54,7 @@ class ComboChoice(HelpedWidget): break if not indexSet: - self.combo.setCurrentIndex(0) - sys.stderr.write("AssertionError: ComboBox can not be set to: " + str(newValue) + "\n") - #raise AssertionError("ComboBox can not be set to: " + str(newValue)) - - + raise AssertionError("ComboBox can not be set to: " + str(newValue)) def updateList(self, choiceList): """Replace the list of choices with the specified items""" diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/configpanel.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/configpanel.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/configpanel.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/configpanel.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/help.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/help.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/help.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/help.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/helpedwidget.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/helpedwidget.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/helpedwidget.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/helpedwidget.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/pathchooser.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/pathchooser.py similarity index 99% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/pathchooser.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/pathchooser.py index 0c24134f26..b9ee45750e 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/pathchooser.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/pathchooser.py @@ -182,7 +182,7 @@ class PathChooser(HelpedWidget): path = self.getFromModel() if path is None: path = "" - - self.pathLine.setText("%s" % path) + + self.pathLine.setText(path) self.editing = False diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/reloadbutton.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/reloadbutton.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/reloadbutton.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/reloadbutton.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/searchablelist.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/searchablelist.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/searchablelist.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/searchablelist.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/spinnerwidgets.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/spinnerwidgets.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/spinnerwidgets.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/spinnerwidgets.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/stringbox.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/stringbox.py similarity index 98% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/stringbox.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/stringbox.py index 71064308a5..88384e4eee 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/stringbox.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/stringbox.py @@ -56,7 +56,7 @@ class StringBox(HelpedWidget): if self_get_from_model is None: self_get_from_model = "" - self.boxString.setText("%s" % self_get_from_model) + self.boxString.setText(self_get_from_model) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/tablewidgets.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/tablewidgets.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/tablewidgets.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/tablewidgets.py diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/util.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/util.py similarity index 99% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/util.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/util.py index d6c42ebee4..128830af34 100644 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/util.py +++ b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/util.py @@ -22,7 +22,7 @@ import time # The variable @img_prefix should be set to point to a directory # containing icons and images. In the current implementation this # variable is set from the gert_main.py script. -img_prefix = "" +img_prefix = None def resourceIcon(name): """Load an image as an icon""" diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/validateddialog.py b/ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/validateddialog.py similarity index 100% rename from ThirdParty/Ert/devel/python/python/ert_gui/widgets/validateddialog.py rename to ThirdParty/Ert/devel/libenkf/applications/ert_gui/lib/ert_gui/widgets/validateddialog.py 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 index 87eada994b..b5c036cdbf 100644 --- 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 @@ -37,8 +37,6 @@ #include #include -#include -#include #include #include @@ -247,12 +245,7 @@ void enkf_tui_plot_RFT_simIn(enkf_main_type * enkf_main, path_fmt_type * runpath 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 ); + int cell_index = 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) ); //lookup cell + + if(cell_index > -1){ + double pressure_value = ecl_rft_node_iget_pressure( rft_refcase_node , cell_index); // Pressure double_vector_append(RFT_refcase, pressure_value); bool_vector_append(refcase_has_data, true); - } else { + } + else{ double_vector_append(RFT_refcase, 0.0); bool_vector_append(refcase_has_data, false); } @@ -343,19 +337,17 @@ void enkf_tui_plot_RFT_simIn(enkf_main_type * enkf_main, path_fmt_type * runpath else{ for( int nobs = 0; nobs < lines; nobs++){ if( int_vector_iget(active,nobs) > -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); + int cell_index = 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 + double pressure_value = ecl_rft_node_iget_pressure( rftnode , cell_index); // Pressure + double_vector_iset(simulated_pressures,nobs , pressure_value); + if(cell_index > -1) bool_vector_iset(has_data, nobs, true); - } else { - double_vector_iset(simulated_pressures,nobs ,0.0); + else bool_vector_iset(has_data, nobs, false); - } - + } + else { + double_vector_iset(simulated_pressures,nobs ,0.0); + bool_vector_iset(has_data, nobs, false); } } } diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/config_keys.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/config_keys.h index e8f9c452d9..d8a40f9eb1 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/config_keys.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/config_keys.h @@ -110,6 +110,7 @@ extern "C" { #define MAX_RUNNING_LOCAL_KEY "MAX_RUNNING_LOCAL" #define MAX_RUNNING_LSF_KEY "MAX_RUNNING_LSF" #define MAX_RUNNING_RSH_KEY "MAX_RUNNING_RSH" +#define MAX_RUNNING_TORQUE_KEY "MAX_RUNNING_TORQUE" #define MAX_SUBMIT_KEY "MAX_SUBMIT" #define NUM_REALIZATIONS_KEY "NUM_REALIZATIONS" #define OBS_CONFIG_KEY "OBS_CONFIG" diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_config_node.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_config_node.h index 15568a322b..112f53d9d2 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_config_node.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_config_node.h @@ -139,7 +139,6 @@ extern "C" { const char * enkf_config_node_get_min_std_file( const enkf_config_node_type * config_node ); const char * enkf_config_node_get_enkf_outfile( const enkf_config_node_type * conifg_node ); const char * enkf_config_node_get_enkf_infile( const enkf_config_node_type * config_node ); - const char * enkf_config_node_get_init_file_fmt( const enkf_config_node_type * config_node ); char * enkf_config_node_alloc_initfile( const enkf_config_node_type * node , const char * path , int iens); void enkf_config_node_set_internalize(enkf_config_node_type * node, int report_step); diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_main.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_main.h index 7e1c04305b..5a92a734fa 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_main.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_main.h @@ -91,7 +91,6 @@ extern "C" { const char * enkf_main_get_data_file(const enkf_main_type * ); const char ** enkf_main_get_well_list_ref(const enkf_main_type * , int *); - bool enkf_main_get_endian_swap(const enkf_main_type * ); bool enkf_main_get_fmt_file(const enkf_main_type * ); bool enkf_main_has_key(const enkf_main_type * , const char *); diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_node.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_node.h index 630bd43a5b..6875728790 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_node.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/enkf_node.h @@ -108,7 +108,6 @@ extern "C" { bool enkf_node_user_get_vector( enkf_node_type * enkf_node , enkf_fs_type * fs , const char * key , int iens , state_enum state , double_vector_type * values); - bool enkf_node_user_get_no_id(enkf_node_type * enkf_node , enkf_fs_type * fs , const char * key , int report_step, int iens, state_enum state , double * value); bool enkf_node_user_get(enkf_node_type * , enkf_fs_type * , const char * , node_id_type , double * ); enkf_node_type * enkf_node_alloc(const enkf_config_node_type *); enkf_node_type * enkf_node_copyc(const enkf_node_type * ); diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/model_config.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/model_config.h index 2f57e3fde6..ffa0e2cd47 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/model_config.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/model_config.h @@ -74,7 +74,6 @@ extern "C" { const char * model_config_iget_casename( const model_config_type * model_config , int index); //void model_config_set_max_resample( model_config_type * model_config , int max_resample ); //int model_config_get_max_resample(const model_config_type * model_config ); - void model_config_set_max_internal_submit(model_config_type * config, int max_resample); int model_config_get_max_internal_submit( const model_config_type * config ); bool model_config_select_runpath( model_config_type * model_config , const char * path_key); void model_config_add_runpath( model_config_type * model_config , const char * path_key , const char * fmt ); @@ -83,8 +82,7 @@ extern "C" { void model_config_set_refcase( model_config_type * model_config , const ecl_sum_type * refcase ); void model_config_fprintf_config( const model_config_type * model_config , int ens_size ,FILE * stream ); model_config_type * model_config_alloc_empty(); - bool model_config_select_history( model_config_type * model_config , history_source_type source_type, const sched_file_type * sched_file , const ecl_sum_type * refcase); - + #ifdef __cplusplus } #endif diff --git a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/site_config.h b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/site_config.h index 16714d1535..f3b627f844 100644 --- a/ThirdParty/Ert/devel/libenkf/include/ert/enkf/site_config.h +++ b/ThirdParty/Ert/devel/libenkf/include/ert/enkf/site_config.h @@ -58,6 +58,8 @@ typedef struct site_config_struct site_config_type; int site_config_get_max_running_rsh( const site_config_type * site_config); void site_config_set_max_running_local( site_config_type * site_config , int max_running_local); int site_config_get_max_running_local( const site_config_type * site_config ); + void site_config_set_max_running_torque( site_config_type * site_config , int max_running_torque); + int site_config_get_max_running_torque( const site_config_type * site_config ); void site_config_setenv( site_config_type * site_config , const char * variable, const char * value); hash_type * site_config_get_env_hash( const site_config_type * site_config ); void site_config_clear_env( site_config_type * site_config ); diff --git a/ThirdParty/Ert/devel/libenkf/src/enkf_config_node.c b/ThirdParty/Ert/devel/libenkf/src/enkf_config_node.c index c274875712..ce73d26b75 100644 --- a/ThirdParty/Ert/devel/libenkf/src/enkf_config_node.c +++ b/ThirdParty/Ert/devel/libenkf/src/enkf_config_node.c @@ -576,10 +576,6 @@ const char * enkf_config_node_get_enkf_infile( const enkf_config_node_type * con return path_fmt_get_fmt( config_node->enkf_infile_fmt ); } -const char * enkf_config_node_get_init_file_fmt( const enkf_config_node_type * config_node) -{ - return path_fmt_get_fmt( config_node->init_file_fmt ); -} void enkf_config_node_set_min_std( enkf_config_node_type * config_node , enkf_node_type * min_std ) { if (config_node->min_std != NULL) diff --git a/ThirdParty/Ert/devel/libenkf/src/enkf_main.c b/ThirdParty/Ert/devel/libenkf/src/enkf_main.c index 2fc1be833d..8e0f04b9ec 100644 --- a/ThirdParty/Ert/devel/libenkf/src/enkf_main.c +++ b/ThirdParty/Ert/devel/libenkf/src/enkf_main.c @@ -2144,6 +2144,7 @@ enkf_main_type * enkf_main_alloc_empty( ) { enkf_main_init_subst_list( enkf_main ); enkf_main_set_verbose( enkf_main , true ); + printf("enkf_main->subst_list :%p \n",enkf_main->subst_list); return enkf_main; } diff --git a/ThirdParty/Ert/devel/libenkf/src/enkf_node.c b/ThirdParty/Ert/devel/libenkf/src/enkf_node.c index dc0e742490..15ec40cfbc 100644 --- a/ThirdParty/Ert/devel/libenkf/src/enkf_node.c +++ b/ThirdParty/Ert/devel/libenkf/src/enkf_node.c @@ -341,25 +341,22 @@ void enkf_node_ecl_write(const enkf_node_type *enkf_node , const char *path , fo bool enkf_node_user_get(enkf_node_type * enkf_node , enkf_fs_type * fs , const char * key , node_id_type node_id , double * value) { - return enkf_node_user_get_no_id( enkf_node , fs , key , node_id.report_step , node_id.iens , node_id.state , value ); -} - -bool enkf_node_user_get_no_id(enkf_node_type * enkf_node , enkf_fs_type * fs , const char * key , int report_step, int iens, state_enum state , double * value) { - node_id_type node_id = {.report_step = report_step , .iens = iens, .state = state }; bool loadOK; FUNC_ASSERT( enkf_node->user_get ); { loadOK = enkf_node_try_load( enkf_node , fs , node_id); if (loadOK) - return enkf_node->user_get(enkf_node->data , key , report_step, state , value); + return enkf_node->user_get(enkf_node->data , key , node_id.report_step, node_id.state , value); else { *value = 0; return false; } + } } + bool enkf_node_user_get_vector( enkf_node_type * enkf_node , enkf_fs_type * fs , const char * key , int iens , state_enum state , double_vector_type * values) { if (enkf_node->vector_storage) { if (enkf_node_try_load_vector( enkf_node , fs , iens , state)) { diff --git a/ThirdParty/Ert/devel/libenkf/src/field.c b/ThirdParty/Ert/devel/libenkf/src/field.c index a70d77e2f7..8e79942027 100644 --- a/ThirdParty/Ert/devel/libenkf/src/field.c +++ b/ThirdParty/Ert/devel/libenkf/src/field.c @@ -1383,6 +1383,7 @@ void field_update_sum(field_type * sum , field_type * field , double lower_limit */ bool field_user_get(const field_type * field, const char * index_key, int report_step , state_enum state, double * value) { + printf("index_key : %s \n",index_key); const bool internal_value = false; bool valid; int i,j,k; diff --git a/ThirdParty/Ert/devel/libenkf/src/field_config.c b/ThirdParty/Ert/devel/libenkf/src/field_config.c index 70d49c7ea0..c409719aa9 100644 --- a/ThirdParty/Ert/devel/libenkf/src/field_config.c +++ b/ThirdParty/Ert/devel/libenkf/src/field_config.c @@ -954,6 +954,8 @@ bool field_config_parse_user_key__( const char * index_key , int *i , int *j , i *k = int_vector_iget( indices , 2) - 1; } + int_vector_fprintf( indices , stdout , "INDEXLIST" , " %4d"); + int_vector_free( indices ); } if (length == 3) diff --git a/ThirdParty/Ert/devel/libenkf/src/model_config.c b/ThirdParty/Ert/devel/libenkf/src/model_config.c index a8f1faa12f..95867b8d4a 100644 --- a/ThirdParty/Ert/devel/libenkf/src/model_config.c +++ b/ThirdParty/Ert/devel/libenkf/src/model_config.c @@ -286,7 +286,7 @@ int model_config_get_max_internal_submit( const model_config_type * config ) { return config->max_internal_submit; } -void model_config_set_max_internal_submit( model_config_type * model_config , int max_resample ) { +static void model_config_set_max_internal_submit( model_config_type * model_config , int max_resample ) { model_config->max_internal_submit = max_resample; } @@ -330,7 +330,7 @@ model_config_type * model_config_alloc_empty() { } -bool model_config_select_history( model_config_type * model_config , history_source_type source_type, const sched_file_type * sched_file , const ecl_sum_type * refcase) { +static bool model_config_select_history( model_config_type * model_config , history_source_type source_type, const sched_file_type * sched_file , const ecl_sum_type * refcase) { bool selectOK = false; if (source_type == SCHEDULE && sched_file != NULL) { @@ -512,6 +512,7 @@ history_type * model_config_get_history(const model_config_type * config) { } int model_config_get_last_history_restart(const model_config_type * config) { + printf("config->history:%p \n",config->history); return history_get_last_restart( config->history ); } diff --git a/ThirdParty/Ert/devel/libenkf/src/site_config.c b/ThirdParty/Ert/devel/libenkf/src/site_config.c index b112d6d87a..206b19ca2d 100644 --- a/ThirdParty/Ert/devel/libenkf/src/site_config.c +++ b/ThirdParty/Ert/devel/libenkf/src/site_config.c @@ -113,6 +113,10 @@ struct site_config_struct { int max_running_local_site; + int max_running_torque_site; + + + job_driver_type driver_type; job_driver_type driver_type_site; int max_submit; @@ -417,36 +421,45 @@ static void site_config_select_TORQUE_job_queue(site_config_type * site_config) /*****************************************************************/ -/*****************************************************************/ -static int site_config_get_queue_max_running_option(queue_driver_type * driver) { - const char * max_running_string = queue_driver_get_option(driver, MAX_RUNNING); - int max_running = 0; - if(!util_sscanf_int(max_running_string, &max_running)) { - fprintf(stderr, "** Warning: String:%s for max_running is not parsable as int, using 0\n", max_running_string); - } - return max_running; -} +/** + This is quite awkward because the max_running variable is located + both in the job_queue instance, and in each separate driver + individually: + + o If you call set_max_running - i.e. without specifiying a + particular driver, it will tell the queue system to use this + many jobs, and also look up the currently active driver and + update the internal info on that. + + o If you tell a specific driver a value for max_running, it will + update the internal field for that driver, AND the queue IFF the + queue is currently running this driver; otherwise the queue will + be left untouched. + + What a mess. + */ -static void site_config_set_queue_max_running_option(site_config_type * site_config, const char* driver_name, int max_running) { - char* max_running_string = util_alloc_sprintf("%d", max_running); - site_config_set_queue_option(site_config, driver_name, MAX_RUNNING, max_running_string); - free(max_running_string); +void site_config_set_max_running(site_config_type * site_config, int max_running) { + queue_driver_set_max_running(site_config->current_driver, max_running); /* We set the max running of the current driver */ } void site_config_set_max_running_lsf(site_config_type * site_config, int max_running_lsf) { - site_config_set_queue_max_running_option(site_config, LSF_DRIVER_NAME, max_running_lsf); + queue_driver_type * lsf_driver = site_config_get_queue_driver(site_config, LSF_DRIVER_NAME); + queue_driver_set_max_running(lsf_driver, max_running_lsf); + if (!site_config->user_mode) site_config->max_running_lsf_site = max_running_lsf; } int site_config_get_max_running_lsf(const site_config_type * site_config) { queue_driver_type * lsf_driver = site_config_get_queue_driver(site_config, LSF_DRIVER_NAME); - return site_config_get_queue_max_running_option(lsf_driver); + return queue_driver_get_max_running(lsf_driver); } void site_config_set_max_running_rsh(site_config_type * site_config, int max_running_rsh) { - site_config_set_queue_max_running_option(site_config, RSH_DRIVER_NAME, max_running_rsh); + queue_driver_type * rsh_driver = site_config_get_queue_driver(site_config, RSH_DRIVER_NAME); + queue_driver_set_max_running(rsh_driver, max_running_rsh); if (!site_config->user_mode) site_config->max_running_rsh_site = max_running_rsh; @@ -454,11 +467,12 @@ void site_config_set_max_running_rsh(site_config_type * site_config, int max_run int site_config_get_max_running_rsh(const site_config_type * site_config) { queue_driver_type * rsh_driver = site_config_get_queue_driver(site_config, RSH_DRIVER_NAME); - return site_config_get_queue_max_running_option(rsh_driver); + return queue_driver_get_max_running(rsh_driver); } void site_config_set_max_running_local(site_config_type * site_config, int max_running_local) { - site_config_set_queue_max_running_option(site_config, LOCAL_DRIVER_NAME, max_running_local); + queue_driver_type * local_driver = site_config_get_queue_driver(site_config, LOCAL_DRIVER_NAME); + queue_driver_set_max_running(local_driver, max_running_local); if (!site_config->user_mode) site_config->max_running_local_site = max_running_local; @@ -466,7 +480,20 @@ void site_config_set_max_running_local(site_config_type * site_config, int max_r int site_config_get_max_running_local(const site_config_type * site_config) { queue_driver_type * local_driver = site_config_get_queue_driver(site_config, LOCAL_DRIVER_NAME); - return site_config_get_queue_max_running_option(local_driver); + return queue_driver_get_max_running(local_driver); +} + +void site_config_set_max_running_torque(site_config_type * site_config, int max_running_torque) { + queue_driver_type * torque_driver = site_config_get_queue_driver(site_config, TORQUE_DRIVER_NAME); + queue_driver_set_max_running(torque_driver, max_running_torque); + + if (!site_config->user_mode) + site_config->max_running_torque_site = max_running_torque; +} + +int site_config_get_max_running_torque(const site_config_type * site_config) { + queue_driver_type * torque_driver = site_config_get_queue_driver(site_config, TORQUE_DRIVER_NAME); + return queue_driver_get_max_running(torque_driver); } /*****************************************************************/ @@ -748,6 +775,10 @@ bool site_config_init(site_config_type * site_config, const config_type * config } } + /* Torque options */ + if (config_item_set(config, MAX_RUNNING_TORQUE_KEY)) + site_config_set_max_running_torque(site_config, config_get_value_as_int(config, MAX_RUNNING_TORQUE_KEY)); + if (config_item_set(config, QUEUE_SYSTEM_KEY)) { job_driver_type driver_type; @@ -951,18 +982,25 @@ void site_config_fprintf_config(const site_config_type * site_config, FILE * str } { - queue_driver_type * rsh_driver = site_config_get_queue_driver(site_config, RSH_DRIVER_NAME); - hash_type * host_list = hash_safe_cast((void *) queue_driver_get_option(rsh_driver, RSH_HOSTLIST)); - hash_iter_type * iter = hash_iter_alloc(host_list); - while (!hash_iter_is_complete(iter)) { - const char * host_name = hash_iter_get_next_key(iter); - fprintf(stream, CONFIG_KEY_FORMAT, RSH_HOST_KEY); - fprintf(stream, "%s:%d\n", host_name, hash_get_int(host_list, host_name)); + queue_driver_type * rsh_driver = site_config_get_queue_driver( site_config , RSH_DRIVER_NAME ); + hash_type * host_list = hash_safe_cast( (void *) queue_driver_get_option( rsh_driver , RSH_HOSTLIST ) ); + hash_iter_type * iter = hash_iter_alloc( host_list ); + while (!hash_iter_is_complete( iter )) { + const char * host_name = hash_iter_get_next_key( iter ); + fprintf(stream , CONFIG_KEY_FORMAT , RSH_HOST_KEY ); + fprintf(stream , "%s:%d\n" , host_name , hash_get_int( host_list , host_name)); } hash_iter_free(iter); } } - + /* Storing TORQUE settings. */ + { + if (site_config_get_max_running_torque(site_config) != site_config->max_running_torque_site) { + fprintf(stream, CONFIG_KEY_FORMAT, MAX_RUNNING_TORQUE_KEY); + fprintf(stream, CONFIG_INT_FORMAT, site_config_get_max_running_torque(site_config)); + fprintf(stream, "\n"); + } + } fprintf(stream, "\n\n"); } @@ -987,6 +1025,11 @@ void site_config_add_queue_config_items(config_type * config, bool site_mode) { "MAX_RUNNING_LOCAL" }, 1); + // TODO: Hva er dette for noe greier + // stringlist_type * torque_dep = stringlist_alloc_argv_ref((const char *[1]) { + // "MAX_RUNNING_TORQUE"}, 1); + // + if (site_mode) { config_schema_item_set_common_selection_set(item, 3, (const char *[3]) { @@ -1071,7 +1114,10 @@ void site_config_add_config_items(config_type * config, bool site_mode) { item = config_add_schema_item(config, MAX_RUNNING_LOCAL_KEY, false); config_schema_item_set_argc_minmax(item, 1, 1); config_schema_item_iset_type(item, 0, CONFIG_INT); - + + item = config_add_schema_item(config, MAX_RUNNING_TORQUE_KEY, false); + config_schema_item_set_argc_minmax(item, 1, 1); + config_schema_item_iset_type(item, 0, CONFIG_INT); /*****************************************************************/ item = config_add_schema_item(config, QUEUE_OPTION_KEY, false); diff --git a/ThirdParty/Ert/devel/libenkf/tests/CMakeLists.txt b/ThirdParty/Ert/devel/libenkf/tests/CMakeLists.txt index fbfba306bd..7f959cf417 100644 --- a/ThirdParty/Ert/devel/libenkf/tests/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libenkf/tests/CMakeLists.txt @@ -88,20 +88,20 @@ add_executable( enkf_refcase_list enkf_refcase_list.c ) target_link_libraries( enkf_refcase_list enkf ) add_test( enkf_refcase_list ${EXECUTABLE_OUTPUT_PATH}/enkf_refcase_list ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat*/ECLIPSE) add_test( enkf_refcase_list2 ${EXECUTABLE_OUTPUT_PATH}/enkf_refcase_list ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat*/ECLIPSE.*) -set_property( TEST enkf_refcase_list PROPERTY LABELS StatoilData ) -set_property( TEST enkf_refcase_list2 PROPERTY LABELS StatoilData ) +set_property( TEST enkf_refcase_list PROPERTY LABELS Statoil ) +set_property( TEST enkf_refcase_list2 PROPERTY LABELS Statoil ) add_executable( enkf_ecl_config enkf_ecl_config.c ) target_link_libraries( enkf_ecl_config enkf ) add_test( enkf_ecl_config1 ${EXECUTABLE_OUTPUT_PATH}/enkf_ecl_config ) add_test( enkf_ecl_config2 ${EXECUTABLE_OUTPUT_PATH}/enkf_ecl_config ${PROJECT_SOURCE_DIR}/test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE) -set_property( TEST enkf_ecl_config2 PROPERTY LABELS StatoilData ) +set_property( TEST enkf_ecl_config2 PROPERTY LABELS Statoil ) add_executable( enkf_ecl_config_config enkf_ecl_config_config.c ) target_link_libraries( enkf_ecl_config_config enkf ) add_test( enkf_ecl_config_config ${EXECUTABLE_OUTPUT_PATH}/enkf_ecl_config_config ${PROJECT_SOURCE_DIR}/test-data/Statoil/config/ecl_config ) -set_property( TEST enkf_ecl_config_config PROPERTY LABELS StatoilData ) +set_property( TEST enkf_ecl_config_config PROPERTY LABELS Statoil ) add_test( enkf_runpath_list ${EXECUTABLE_OUTPUT_PATH}/enkf_runpath_list ) add_test( enkf_site_config ${EXECUTABLE_OUTPUT_PATH}/enkf_site_config /project/res/etc/ERT/site-config) @@ -111,10 +111,10 @@ add_test( enkf_ensemble_GEN_PARAM ${EXECUTABLE_OUTPUT_PATH}/enkf_ensemble_GEN_P add_test( enkf_ensemble ${EXECUTABLE_OUTPUT_PATH}/enkf_ensemble ) -set_property( TEST enkf_time_map2 PROPERTY LABELS StatoilData ) -set_property( TEST enkf_site_config PROPERTY LABELS StatoilData ) -set_property( TEST enkf_forward_init_SURFACE_FALSE PROPERTY LABELS StatoilData ) -set_property( TEST enkf_forward_init_SURFACE_TRUE PROPERTY LABELS StatoilData ) -set_property( TEST enkf_forward_init_FIELD_FALSE PROPERTY LABELS StatoilData ) -set_property( TEST enkf_forward_init_FIELD_TRUE PROPERTY LABELS StatoilData ) +set_property( TEST enkf_time_map2 PROPERTY LABELS Statoil ) +set_property( TEST enkf_site_config PROPERTY LABELS Statoil ) +set_property( TEST enkf_forward_init_SURFACE_FALSE PROPERTY LABELS Statoil ) +set_property( TEST enkf_forward_init_SURFACE_TRUE PROPERTY LABELS Statoil ) +set_property( TEST enkf_forward_init_FIELD_FALSE PROPERTY LABELS Statoil ) +set_property( TEST enkf_forward_init_FIELD_TRUE PROPERTY LABELS Statoil ) diff --git a/ThirdParty/Ert/devel/libert_util/include/ert/util/test_util.h b/ThirdParty/Ert/devel/libert_util/include/ert/util/test_util.h index 1083b21b08..27bc4a7a6e 100644 --- a/ThirdParty/Ert/devel/libert_util/include/ert/util/test_util.h +++ b/ThirdParty/Ert/devel/libert_util/include/ert/util/test_util.h @@ -98,8 +98,6 @@ extern "C" { void test_util_addr2line(); #endif - void test_install_SIGNALS(void); - #ifdef __cplusplus } #endif diff --git a/ThirdParty/Ert/devel/libert_util/include/ert/util/type_macros.h b/ThirdParty/Ert/devel/libert_util/include/ert/util/type_macros.h index aeefb0d4e9..c4e1156f01 100644 --- a/ThirdParty/Ert/devel/libert_util/include/ert/util/type_macros.h +++ b/ThirdParty/Ert/devel/libert_util/include/ert/util/type_macros.h @@ -95,41 +95,6 @@ const type ## _type * type ## _safe_cast_const( const void * __arg ) { } #define UTIL_SAFE_CAST_HEADER_CONST( type ) const type ## _type * type ## _safe_cast_const( const void * __arg ) - - - -#define UTIL_TRY_CAST_FUNCTION(type , TYPE_ID) \ -type ## _type * type ## _try_cast( void * __arg ) { \ - if (__arg == NULL) \ - return NULL; \ - { \ - type ## _type * arg = (type ## _type *) __arg; \ - if ( arg->__type_id == TYPE_ID) \ - return arg; \ - else \ - return NULL; \ - } \ -} -#define UTIL_TRY_CAST_HEADER( type ) type ## _type * type ## _try_cast( void * __arg ) - - -#define UTIL_TRY_CAST_FUNCTION_CONST(type , TYPE_ID) \ -const type ## _type * type ## _try_cast_const( const void * __arg ) { \ - if (__arg == NULL) \ - return NULL; \ - { \ - const type ## _type * arg = (type ## _type *) __arg; \ - if ( arg->__type_id == TYPE_ID) \ - return arg; \ - else \ - return NULL; \ - } \ -} -#define UTIL_TRY_CAST_HEADER_CONST( type ) const type ## _type * type ## _try_cast_const( const void * __arg ) - - - - #define UTIL_TYPE_ID_DECLARATION int __type_id #define UTIL_TYPE_ID_INIT(var , TYPE_ID) var->__type_id = TYPE_ID; diff --git a/ThirdParty/Ert/devel/libert_util/include/ert/util/vector.h b/ThirdParty/Ert/devel/libert_util/include/ert/util/vector.h index b6f0cee0d9..2f8e44ef89 100644 --- a/ThirdParty/Ert/devel/libert_util/include/ert/util/vector.h +++ b/ThirdParty/Ert/devel/libert_util/include/ert/util/vector.h @@ -24,7 +24,6 @@ extern "C" { #endif #include #include -#include typedef void ( vector_func_type ) (void * , void *); typedef int ( vector_cmp_ftype) (const void * , const void *); @@ -76,7 +75,6 @@ extern "C" { void * vector_pop_back(vector_type * ); void * vector_pop_front(vector_type * ); void vector_sort(vector_type * vector , vector_cmp_ftype * cmp); - int_vector_type * vector_alloc_sort_perm(const vector_type * vector , vector_cmp_ftype * cmp); void vector_inplace_reverse(vector_type * vector); vector_type * vector_alloc_copy(const vector_type * src , bool deep_copy); diff --git a/ThirdParty/Ert/devel/libert_util/include/ert/util/vector_template.h b/ThirdParty/Ert/devel/libert_util/include/ert/util/vector_template.h index 2ae2b65317..5e94d3461a 100644 --- a/ThirdParty/Ert/devel/libert_util/include/ert/util/vector_template.h +++ b/ThirdParty/Ert/devel/libert_util/include/ert/util/vector_template.h @@ -51,7 +51,6 @@ typedef @TYPE@ (@TYPE@_ftype) (@TYPE@); @TYPE@_vector_type * @TYPE@_vector_alloc_copy( const @TYPE@_vector_type * src); void @TYPE@_vector_imul(@TYPE@_vector_type * vector, int index, @TYPE@ factor); void @TYPE@_vector_scale(@TYPE@_vector_type * vector, @TYPE@ factor); - void @TYPE@_vector_div(@TYPE@_vector_type * vector, @TYPE@ divisor); @TYPE@ @TYPE@_vector_reverse_iget(const @TYPE@_vector_type * vector , int index); @TYPE@ @TYPE@_vector_iget(const @TYPE@_vector_type * , int); @TYPE@ @TYPE@_vector_safe_iget(const @TYPE@_vector_type * , int); diff --git a/ThirdParty/Ert/devel/libert_util/src/test_util.c b/ThirdParty/Ert/devel/libert_util/src/test_util.c index 13e60e147b..d2c95ea53e 100644 --- a/ThirdParty/Ert/devel/libert_util/src/test_util.c +++ b/ThirdParty/Ert/devel/libert_util/src/test_util.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -157,7 +156,7 @@ void test_assert_ptr_equal__( const void * p1 , const void * p2 , const char * f void test_assert_ptr_not_equal__( const void * p1 , const void * p2 , const char * file , int line) { bool equal = (p1 == p2); if (equal) - test_error_exit( "%s:%d => Pointers are equal p1:[%p] p2:[%p]\n" , file , line , p1 , p2 ); + test_error_exit( "%s:%d => Pointers are different p1:[%p] p2:[%p]\n" , file , line , p1 , p2 ); } @@ -205,14 +204,6 @@ void test_assert_double_not_equal__( double d1 , double d2, const char * file , test_error_exit( "%s:%d => double values:%15.12g %15.12g are equal.\n" , file , line , d1 , d2); } -/*****************************************************************/ - -void test_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.*/ -} /*****************************************************************/ diff --git a/ThirdParty/Ert/devel/libert_util/src/vector.c b/ThirdParty/Ert/devel/libert_util/src/vector.c index 63ae3a0c4c..99fa0c445e 100644 --- a/ThirdParty/Ert/devel/libert_util/src/vector.c +++ b/ThirdParty/Ert/devel/libert_util/src/vector.c @@ -43,7 +43,6 @@ struct vector_struct { typedef struct { vector_cmp_ftype * user_cmp; node_data_type * data; - int index; } vector_sort_node_type; @@ -556,50 +555,29 @@ static int vector_cmp(const void * s1 , const void * s2) { */ -static vector_sort_node_type * vector_alloc_sort_data( const vector_type * vector , vector_cmp_ftype * cmp) { - vector_sort_node_type * sort_data = util_calloc( vector->size , sizeof * sort_data ); - int i; - - /* Fill up the temporary storage used for sorting */ - for (i = 0; i < vector->size; i++) { - sort_data[i].data = vector->data[i]; - sort_data[i].user_cmp = cmp; - sort_data[i].index = i; - } - - /* Sort the temporary vector */ - qsort(sort_data , vector->size , sizeof * sort_data , vector_cmp); - - return sort_data; -} - void vector_sort(vector_type * vector , vector_cmp_ftype * cmp) { - vector_sort_node_type * sort_data = vector_alloc_sort_data( vector , cmp ); - int i; - /* Recover the sorted vector */ - for (i = 0; i < vector->size; i++) - vector->data[i] = sort_data[i].data; - + vector_sort_node_type * sort_data = util_calloc( vector->size , sizeof * sort_data ); + { + int i; + + /* Fill up the temporary storage used for sorting */ + for (i = 0; i < vector->size; i++) { + sort_data[i].data = vector->data[i]; + sort_data[i].user_cmp = cmp; + } + + /* Sort the temporary vector */ + qsort(sort_data , vector->size , sizeof * sort_data , vector_cmp); + + /* Recover the sorted vector */ + for (i = 0; i < vector->size; i++) + vector->data[i] = sort_data[i].data; + } free( sort_data ); } -int_vector_type * vector_alloc_sort_perm(const vector_type * vector , vector_cmp_ftype * cmp) { - vector_sort_node_type * sort_data = vector_alloc_sort_data( vector , cmp ); - int_vector_type * sort_perm = int_vector_alloc(0,0); - int i; - for (i = 0; i < vector->size; i++) - int_vector_iset( sort_perm , i , sort_data[i].index); - - free( sort_data ); - return sort_perm; -} - - - - - void vector_inplace_reverse(vector_type * vector) { if (vector->size > 0) { node_data_type ** new_data = util_calloc( vector->size , sizeof * new_data ); diff --git a/ThirdParty/Ert/devel/libert_util/src/vector_template.c b/ThirdParty/Ert/devel/libert_util/src/vector_template.c index 5ae8e9bb4b..c032a184c6 100644 --- a/ThirdParty/Ert/devel/libert_util/src/vector_template.c +++ b/ThirdParty/Ert/devel/libert_util/src/vector_template.c @@ -500,15 +500,6 @@ void @TYPE@_vector_scale(@TYPE@_vector_type * vector, @TYPE@ factor) { vector->data[i] *= factor; } - -/* Vector / scalar; seperate _div function to ensure correct integer division. */ -void @TYPE@_vector_div(@TYPE@_vector_type * vector, @TYPE@ divisor) { - int i; - for (i=0; i < vector->size; i++) - vector->data[i] /= divisor; -} - - /* vector + scalar */ void @TYPE@_vector_shift(@TYPE@_vector_type * vector, @TYPE@ delta) { int i; diff --git a/ThirdParty/Ert/devel/libert_util/tests/ert_util_type_vector_test.c b/ThirdParty/Ert/devel/libert_util/tests/ert_util_type_vector_test.c index a3d44d5c3e..78649421f2 100644 --- a/ThirdParty/Ert/devel/libert_util/tests/ert_util_type_vector_test.c +++ b/ThirdParty/Ert/devel/libert_util/tests/ert_util_type_vector_test.c @@ -27,19 +27,6 @@ void assert_equal( bool equal ) { } -void test_div() { - int_vector_type * int_vector = int_vector_alloc( 0 , 100); - int_vector_iset( int_vector , 10 , 100 ); - int_vector_div( int_vector , 10 ); - { - int i; - for (i=0; i < int_vector_size( int_vector ); i++) - test_assert_int_equal( 10 , int_vector_iget( int_vector , i )); - } -} - - - int main(int argc , char ** argv) { int_vector_type * int_vector = int_vector_alloc( 0 , 99); @@ -112,7 +99,6 @@ int main(int argc , char ** argv) { int_vector_free( v1 ); int_vector_free( v2 ); } - - test_div(); + exit(0); } diff --git a/ThirdParty/Ert/devel/libert_util/tests/ert_util_vector_test.c b/ThirdParty/Ert/devel/libert_util/tests/ert_util_vector_test.c index 3ee8d0146a..29a22eeffb 100644 --- a/ThirdParty/Ert/devel/libert_util/tests/ert_util_vector_test.c +++ b/ThirdParty/Ert/devel/libert_util/tests/ert_util_vector_test.c @@ -18,7 +18,6 @@ #include #include -#include #include #include @@ -71,51 +70,10 @@ void test_reverse() { -void test_sort() { - vector_type * v1 = vector_alloc_new(); - vector_type * v2 = vector_alloc_new(); - - vector_append_ref(v1 , "2"); - vector_append_ref(v2 , "2"); - - vector_append_ref(v1 , "0"); - vector_append_ref(v2 , "0"); - - vector_append_ref(v1 , "1"); - vector_append_ref(v2 , "1"); - - vector_append_ref(v1 , "4"); - vector_append_ref(v2 , "4"); - - vector_append_ref(v1 , "3"); - vector_append_ref(v2 , "3"); - - - { - int_vector_type * sort_map = vector_alloc_sort_perm( v1 , (vector_cmp_ftype *) util_strcmp_int ); - vector_sort( v2 , (vector_cmp_ftype *) util_strcmp_int); - - test_assert_int_equal( 1 , int_vector_iget( sort_map , 0 )); - test_assert_int_equal( 2 , int_vector_iget( sort_map , 1 )); - test_assert_int_equal( 0 , int_vector_iget( sort_map , 2 )); - test_assert_int_equal( 4 , int_vector_iget( sort_map , 3 )); - test_assert_int_equal( 3 , int_vector_iget( sort_map , 4 )); - - test_assert_string_equal( "0" , vector_iget(v2 , 0 )); - test_assert_string_equal( "1" , vector_iget(v2 , 1 )); - test_assert_string_equal( "2" , vector_iget(v2 , 2 )); - test_assert_string_equal( "3" , vector_iget(v2 , 3 )); - test_assert_string_equal( "4" , vector_iget(v2 , 4 )); - - int_vector_free( sort_map ); - } -} - int main(int argc , char ** argv) { test_iset( ); test_reverse( ); - test_sort( ); exit(0); } diff --git a/ThirdParty/Ert/devel/libgeometry/tests/CMakeLists.txt b/ThirdParty/Ert/devel/libgeometry/tests/CMakeLists.txt index fcedece5f1..d263b1d252 100644 --- a/ThirdParty/Ert/devel/libgeometry/tests/CMakeLists.txt +++ b/ThirdParty/Ert/devel/libgeometry/tests/CMakeLists.txt @@ -5,5 +5,5 @@ add_test( geo_surface ${EXECUTABLE_OUTPUT_PATH}/geo_surface ${PROJECT_SOURCE_DIR}/test-data/Statoil/Geometry/Surface.irap ${PROJECT_SOURCE_DIR}/test-data/Statoil/Geometry/Surface_incompatible.irap ) -set_property( TEST geo_surface PROPERTY LABELS StatoilData ) +set_property( TEST geo_surface PROPERTY LABELS Statoil ) diff --git a/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/job_queue.h b/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/job_queue.h index 6c670ef579..4694c30649 100644 --- a/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/job_queue.h +++ b/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/job_queue.h @@ -69,7 +69,9 @@ extern "C" { void * job_queue_run_jobs__(void * ); job_status_type job_queue_iget_job_status(const job_queue_type * , int ); const char * job_queue_status_name( job_status_type status ); - + void job_queue_set_max_running( job_queue_type * queue , int max_running ); + int job_queue_inc_max_runnning( job_queue_type * queue, int delta ); + int job_queue_get_max_running( const job_queue_type * queue ); int job_queue_iget_status_summary( const job_queue_type * queue , job_status_type status); time_t job_queue_iget_sim_start( job_queue_type * queue, int job_index); time_t job_queue_iget_submit_time( job_queue_type * queue, int job_index); diff --git a/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/queue_driver.h b/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/queue_driver.h index 06940673da..e842668c9c 100644 --- a/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/queue_driver.h +++ b/ThirdParty/Ert/devel/libjob_queue/include/ert/job_queue/queue_driver.h @@ -40,12 +40,7 @@ extern "C" { {.value = 4 , .name = "TORQUE_DRIVER"} #define JOB_DRIVER_ENUM_SIZE 5 - - /* - The options supported by the base queue_driver. - */ -#define MAX_RUNNING "MAX_RUNNING" - + typedef enum { JOB_QUEUE_NOT_ACTIVE = 1, /* This value is used in external query routines - for jobs which are (currently) not active. */ //JOB_QUEUE_LOADING = 2 , /* This value is used by external routines. Not used in the libjob_queue implementation. */ @@ -134,6 +129,8 @@ extern "C" { void queue_driver_kill_job(queue_driver_type * driver, void * job_data); job_status_type queue_driver_get_status(queue_driver_type * driver, void * job_data); + void queue_driver_set_max_running(queue_driver_type * driver, int max_running); + int queue_driver_get_max_running(const queue_driver_type * driver); const char * queue_driver_get_name(const queue_driver_type * driver); bool queue_driver_set_option(queue_driver_type * driver, const char * option_key, const void * value); diff --git a/ThirdParty/Ert/devel/libjob_queue/src/job_queue.c b/ThirdParty/Ert/devel/libjob_queue/src/job_queue.c index a2bce78ed5..e9f4052104 100644 --- a/ThirdParty/Ert/devel/libjob_queue/src/job_queue.c +++ b/ThirdParty/Ert/devel/libjob_queue/src/job_queue.c @@ -1139,55 +1139,8 @@ static void job_queue_handle_EXIT( job_queue_type * queue , job_queue_node_type } -/*****************************************************************/ -int job_queue_get_max_running_option(queue_driver_type * driver) { - char * max_running_string = (char*)queue_driver_get_option(driver, MAX_RUNNING); - int max_running; - if (!util_sscanf_int(max_running_string, &max_running)) { - fprintf(stderr, "%s: Unable to parse option MAX_RUNNING with value %s to an int", __func__, max_running_string); - } - return max_running; -} - -void job_queue_set_max_running_option(queue_driver_type * driver, int max_running) { - char * max_running_string = util_alloc_sprintf("%d", max_running); - queue_driver_set_option(driver, MAX_RUNNING, max_running_string); - free(max_running_string); -} - - -/** - Observe that if the max number of running jobs is decreased, - nothing will be done to reduce the number of jobs currently - running; but no more jobs will be submitted until the number of - running has fallen below the new limit. - - The updated value will also be pushed down to the current driver. - NOTE: These next three *max_running functions should not be used, rather - use the set_option feature, with MAX_RUNNING. They are (maybe) used by python - therefore not removed. -*/ -int job_queue_get_max_running( const job_queue_type * queue ) { - return job_queue_get_max_running_option(queue->driver); -} - -void job_queue_set_max_running( job_queue_type * queue , int max_running ) { - job_queue_set_max_running_option(queue->driver, max_running); -} - -/* - The return value is the new value for max_running. -*/ -int job_queue_inc_max_runnning( job_queue_type * queue, int delta ) { - job_queue_set_max_running( queue , job_queue_get_max_running( queue ) + delta ); - return job_queue_get_max_running( queue ); -} - -/*****************************************************************/ - - /** If the total number of jobs is not known in advance the job_queue_run_jobs function can be called with @num_total_run == 0. In that case it is paramount @@ -1566,6 +1519,34 @@ bool job_queue_has_driver(const job_queue_type * queue ) { } +/** + Observe that if the max number of running jobs is decreased, + nothing will be done to reduce the number of jobs currently + running; but no more jobs will be submitted until the number of + running has fallen below the new limit. + + The updated value will also be pushed down to the current driver. +*/ + +void job_queue_set_max_running( job_queue_type * queue , int max_running ) { + queue_driver_set_max_running( queue->driver , max_running ); +} + +/* + The return value is the new value for max_running. +*/ +int job_queue_inc_max_runnning( job_queue_type * queue, int delta ) { + job_queue_set_max_running( queue , job_queue_get_max_running( queue ) + delta ); + return job_queue_get_max_running( queue ); +} + +int job_queue_get_max_running( const job_queue_type * queue ) { + return queue_driver_get_max_running( queue->driver ); +} + + +/*****************************************************************/ + job_driver_type job_queue_lookup_driver_name( const char * driver_name ) { if (strcmp( driver_name , "LOCAL") == 0) diff --git a/ThirdParty/Ert/devel/libjob_queue/src/queue_driver.c b/ThirdParty/Ert/devel/libjob_queue/src/queue_driver.c index 48f6781ce4..507130e6eb 100644 --- a/ThirdParty/Ert/devel/libjob_queue/src/queue_driver.c +++ b/ThirdParty/Ert/devel/libjob_queue/src/queue_driver.c @@ -77,7 +77,6 @@ struct queue_driver_struct { */ char * name; /* String name of driver. */ job_driver_type driver_type; /* Enum value for driver. */ - char * max_running_string; int max_running; /* Possible to maintain different max_running values for different drivers; the value 0 is interpreted as no limit - i.e. the queue layer will (try) to send an unlimited number of jobs to the driver. */ @@ -109,7 +108,6 @@ static queue_driver_type * queue_driver_alloc_empty() { driver->has_option = NULL; driver->name = NULL; driver->data = NULL; - driver->max_running_string = NULL; return driver; } @@ -180,74 +178,22 @@ queue_driver_type * queue_driver_alloc(job_driver_type type) { /*****************************************************************/ - -/*****************************************************************/ - -void queue_driver_set_max_running(queue_driver_type * driver, int max_running) { - driver->max_running_string = util_realloc_sprintf(driver->max_running_string,"%d", max_running); - driver->max_running = max_running; -} - -int queue_driver_get_max_running(const queue_driver_type * driver) { - return driver->max_running; -} - -const char * queue_driver_get_name(const queue_driver_type * driver) { - return driver->name; -} - - -/*****************************************************************/ - - -static bool queue_driver_set_generic_option__(queue_driver_type * driver, const char * option_key, const void * value) { - bool option_set = true; - { - if (strcmp(MAX_RUNNING, option_key) == 0) { - int max_running_int = 0; - if (util_sscanf_int(value, &max_running_int)) { - queue_driver_set_max_running(driver, max_running_int); - option_set = true; - } - else - option_set = false; - } else - option_set = false; - } - return option_set; -} - -static void * queue_driver_get_generic_option__(queue_driver_type * driver, const char * option_key) { - if (strcmp(MAX_RUNNING, option_key) == 0) { - return driver->max_running_string; - } else { - util_abort("%s: driver:%s does not support generic option %s\n", __func__, driver->name, option_key); - return NULL; - } -} - -static bool queue_driver_has_generic_option__(queue_driver_type * driver, const char * option_key) { - if (strcmp(MAX_RUNNING, option_key) == 0) - return true; - else - return false; -} - /** Set option - can also be used to perform actions - not only setting of parameters. There is no limit :-) */ bool queue_driver_set_option(queue_driver_type * driver, const char * option_key, const void * value) { - if (queue_driver_set_generic_option__(driver, option_key, value)) { - return true; - } else if (driver->set_option != NULL) + if (driver->set_option != NULL) /* The actual low level set functions can not fail! */ return driver->set_option(driver->data, option_key, value); else { util_abort("%s: driver:%s does not support run time setting of options\n", __func__, driver->name); return false; } - return false; +} + +bool queue_driver_set_string_option(queue_driver_type * driver, const char * option_key, const char * value) { + return queue_driver_set_option(driver, option_key, value); } /*****************************************************************/ @@ -262,16 +208,13 @@ bool queue_driver_has_option(queue_driver_type * driver, const char * option_key /*****************************************************************/ const void * queue_driver_get_option(queue_driver_type * driver, const char * option_key) { - if (queue_driver_has_generic_option__(driver, option_key)) { - return queue_driver_get_generic_option__(driver, option_key); - } else if (driver->get_option != NULL) + if (driver->get_option != NULL) /* The actual low level set functions can not fail! */ return driver->get_option(driver->data, option_key); else { util_abort("%s: driver:%s does not support run time reading of options\n", __func__, driver->name); return NULL; } - return NULL; } /*****************************************************************/ @@ -309,6 +252,23 @@ queue_driver_type * queue_driver_alloc_local() { return driver; } +/*****************************************************************/ + +void queue_driver_set_max_running(queue_driver_type * driver, int max_running) { + driver->max_running = max_running; +} + +int queue_driver_get_max_running(const queue_driver_type * driver) { + return driver->max_running; +} + +const char * queue_driver_get_name(const queue_driver_type * driver) { + return driver->name; +} + + +/*****************************************************************/ + /* These are the functions used by the job_queue layer. */ void * queue_driver_submit_job(queue_driver_type * driver, const char * run_cmd, int num_cpu, const char * run_path, const char * job_name, int argc, const char ** argv) { @@ -337,7 +297,6 @@ void queue_driver_free_driver(queue_driver_type * driver) { void queue_driver_free(queue_driver_type * driver) { queue_driver_free_driver(driver); util_safe_free(driver->name); - util_safe_free(driver->max_running_string); free(driver); } diff --git a/ThirdParty/Ert/devel/libjob_queue/tests/job_queue_test.c b/ThirdParty/Ert/devel/libjob_queue/tests/job_queue_test.c index 41a2990987..1a7361eb68 100644 --- a/ThirdParty/Ert/devel/libjob_queue/tests/job_queue_test.c +++ b/ThirdParty/Ert/devel/libjob_queue/tests/job_queue_test.c @@ -14,7 +14,7 @@ See the GNU General Public License at for more details. - */ +*/ #include #include @@ -27,71 +27,18 @@ #include #include -#include "ert/job_queue/torque_driver.h" void job_queue_set_driver_(job_driver_type driver_type) { - job_queue_type * queue = job_queue_alloc(10, "OK", "ERROR"); - queue_driver_type * driver = queue_driver_alloc(driver_type); - test_assert_false(job_queue_has_driver(queue)); - - job_queue_set_driver(queue, driver); - test_assert_true(job_queue_has_driver(queue)); - - job_queue_free(queue); - queue_driver_free(driver); - + job_queue_type * queue = job_queue_alloc( 10 , "OK" , "ERROR"); + queue_driver_type * driver = queue_driver_alloc( driver_type ); + test_assert_false( job_queue_has_driver( queue )); + + job_queue_set_driver( queue , driver ); + test_assert_true( job_queue_has_driver( queue )); } -void set_option_max_running_max_running_value_set() { - queue_driver_type * driver_torque = queue_driver_alloc(TORQUE_DRIVER); - test_assert_true(queue_driver_set_option(driver_torque, MAX_RUNNING, "42")); - test_assert_string_equal("42", queue_driver_get_option(driver_torque, MAX_RUNNING)); - queue_driver_free(driver_torque); - - - queue_driver_type * driver_lsf = queue_driver_alloc(LSF_DRIVER); - test_assert_true(queue_driver_set_option(driver_lsf, MAX_RUNNING, "72")); - test_assert_string_equal("72", queue_driver_get_option(driver_lsf, MAX_RUNNING)); - queue_driver_free(driver_lsf); -} - -void set_option_max_running_max_running_option_set() { - queue_driver_type * driver_torque = queue_driver_alloc(TORQUE_DRIVER); - test_assert_true(queue_driver_set_option(driver_torque, MAX_RUNNING, "42")); - test_assert_string_equal("42", queue_driver_get_option(driver_torque, MAX_RUNNING)); - queue_driver_free(driver_torque); - -} - -void set_option_invalid_option_returns_false() { - queue_driver_type * driver_torque = queue_driver_alloc(TORQUE_DRIVER); - test_assert_false(queue_driver_set_option(driver_torque, "MAKS_RUNNING", "42")); - queue_driver_free(driver_torque); -} - -void set_option_invalid_value_returns_false() { - queue_driver_type * driver_torque = queue_driver_alloc(TORQUE_DRIVER); - test_assert_false(queue_driver_set_option(driver_torque, "MAX_RUNNING", "2a")); - queue_driver_free(driver_torque); -} - -void set_option_valid_on_specific_driver_returns_true() { - queue_driver_type * driver_torque = queue_driver_alloc(TORQUE_DRIVER); - test_assert_true(queue_driver_set_option(driver_torque, TORQUE_NUM_CPUS_PER_NODE, "33")); - test_assert_string_equal("33", queue_driver_get_option(driver_torque, TORQUE_NUM_CPUS_PER_NODE)); - queue_driver_free(driver_torque); -} - -int main(int argc, char ** argv) { +int main( int argc , char ** argv) { job_queue_set_driver_(LSF_DRIVER); job_queue_set_driver_(TORQUE_DRIVER); - - set_option_max_running_max_running_value_set(); - set_option_max_running_max_running_option_set(); - set_option_invalid_option_returns_false(); - set_option_invalid_value_returns_false(); - - set_option_valid_on_specific_driver_returns_true(); - exit(0); } diff --git a/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_submit_test.c b/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_submit_test.c index 7007b8c2b6..7c06fada7b 100644 --- a/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_submit_test.c +++ b/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_submit_test.c @@ -35,8 +35,8 @@ void test_submit(torque_driver_type * driver, const char * cmd) { } torque_driver_kill_job(driver, job); - printf("Waiting 2 seconds"); - for (int i = 0; i < 2; i++) { + printf("Waiting 5 seconds"); + for (int i = 0; i < 5; i++) { printf("."); fflush(stdout); sleep(1); diff --git a/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_test.c b/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_test.c index 6bffdd3ca0..15340b4e65 100644 --- a/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_test.c +++ b/ThirdParty/Ert/devel/libjob_queue/tests/job_torque_test.c @@ -96,11 +96,9 @@ void create_submit_script_script_according_to_input() { fclose(file_stream); } - int main(int argc, char ** argv) { getoption_nooptionsset_defaultoptionsreturned(); setoption_setalloptions_optionsset(); - setoption_set_typed_options_wrong_format_returns_false(); create_submit_script_script_according_to_input(); exit(0); diff --git a/ThirdParty/Ert/devel/python/python/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/CMakeLists.txt index 4e27dd7af2..970c600891 100644 --- a/ThirdParty/Ert/devel/python/python/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/CMakeLists.txt @@ -1,3 +1 @@ add_subdirectory( ert ) -add_subdirectory( ert_gui ) - diff --git a/ThirdParty/Ert/devel/python/python/ert/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/CMakeLists.txt index 48c01a8417..08727c8c72 100644 --- a/ThirdParty/Ert/devel/python/python/ert/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/ert/CMakeLists.txt @@ -10,4 +10,4 @@ add_subdirectory( rms ) add_subdirectory( sched ) add_subdirectory( util ) add_subdirectory( well ) -add_subdirectory( ert ) + diff --git a/ThirdParty/Ert/devel/python/python/ert/cwrap/cwrap.py b/ThirdParty/Ert/devel/python/python/ert/cwrap/cwrap.py index a94bf5ddb3..e1b7243c2d 100644 --- a/ThirdParty/Ert/devel/python/python/ert/cwrap/cwrap.py +++ b/ThirdParty/Ert/devel/python/python/ert/cwrap/cwrap.py @@ -123,15 +123,7 @@ class CWrapper: return func - def safe_prototype(self,pattern , lib = None): - try: - func = self.prototype(pattern, lib) - except AttributeError: - func = None - sys.stderr.write("****Defunct function call: %s\n" % pattern) - return func - - + def print_types(self): for ctype in self.registered_types.keys(): print "%16s -> %s" % (ctype , self.registered_types[ ctype ]) diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/ecl/CMakeLists.txt index ebf1fd1faf..b61bbe51de 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/CMakeLists.txt @@ -1,15 +1,5 @@ -add_python_package("Python ert.ecl" ${PYTHON_INSTALL_PREFIX}/ert/ecl "ecl_case.py;ecl_rft_cell.py;ecl_default.py;ecl_file.py;ecl_grav_calc.py;ecl_grav.py;ecl_grid.py;ecl_kw.py;ecl.py;ecl_queue.py;ecl_region.py;ecl_rft.py;ecl_subsidence.py;ecl_sum.py;ecl_util.py;fortio.py;__init__.py;libecl.py" True) +add_python_package("Python ert.ecl" ${PYTHON_INSTALL_PREFIX}/ert/ecl "ecl_case.py;ecl_default.py;ecl_file.py;ecl_grav_calc.py;ecl_grav.py;ecl_grid.py;ecl_kw.py;ecl.py;ecl_queue.py;ecl_region.py;ecl_rft.py;ecl_subsidence.py;ecl_sum.py;ecl_util.py;fortio.py;__init__.py;libecl.py" True) - -set( ECL_LOCAL_TARGET "" CACHE FILE "Name of optional external ecl_local module") - -if (EXISTS ${ECL_LOCAL_TARGET}) - if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ecl_local.py") - EXECUTE_PROCESS( COMMAND ${CMAKE_COMMAND} -E create_symlink "${ECL_LOCAL_TARGET}" "${CMAKE_CURRENT_SOURCE_DIR}/ecl_local.py") - message("-- Adding symlink ${CMAKE_CURRENT_SOURCE_DIR}/ecl_local.py -> ${ECL_LOCAL_TARGET}") - endif() -endif() - -if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ecl_local.py") - add_python_package( "Python ert.ecl.ecl_local" ${PYTHON_INSTALL_PREFIX}/ert/ecl "ecl_local.py" True) +if (EXISTS "ecl_local.py") + add_python_file( "Python ert.ecl.ecl_local" ${PYTHON_INSTALL_PREFIX}/ert/ecl "ecl_local.py" True) endif() diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl.py index 7489956b6b..8d4847e8c6 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl.py +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl.py @@ -37,8 +37,7 @@ from ecl_kw import EclKW from ecl_case import EclCase from ecl_file import EclFile from ecl_sum import EclSum -from ecl_rft import EclRFTFile , EclRFT -from ecl_rft_cell import EclRFTCell, EclPLTCell +from ecl_rft import EclRFTFile , EclRFT , EclRFTCell from ecl_grid import EclGrid from ecl_grav import EclGrav from ecl_subsidence import EclSubsidence diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_grid.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_grid.py index b7644f26ed..fa65609ae1 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_grid.py +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_grid.py @@ -93,7 +93,7 @@ class EclGrid(CClass): obj.init_cobj( c_ptr , cfunc.free ) return obj else: - raise IOError("Loading grid from:%s failed" % filename) + return None def equal(self , other , include_lgr = True , verbose = False): diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_local.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_local.py new file mode 100644 index 0000000000..a2c6642432 --- /dev/null +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_local.py @@ -0,0 +1,72 @@ +import os +import socket +import sys +import ert.job_queue.driver as driver + +################################################################# +# Only a quite few of the Linux computers in Statoil are proper LSF +# nodes, in the sense that they can talk directly to the LSF +# demons. When using LSF from a computer which is not properly part of +# the LSF cluster you must first ssh to a node which can serve as LSF +# server, and then issue the LSF commands there. This is controlled by +# the LSF_SERVER option in the LSF driver. +# +# In this configuration file the LSF server to use is determined by +# using the two first characters from the name of the submitting host +# as a lookup key in the server_list dictionary. +# +# If your workstation has proper access to LSF you can set the +# environment variable LOCAL_LSF; in that case the lsf_server variable +# will be left at None and the LSF driver instance will issue the LSF +# commands directly at the calling host without going through ssh. +# +# Observe that the ssh-based scheme requires that you have +# passwordless login to the server used as lsf server. +################################################################# + +server_list = { "be" : "be-grid01.be.statoil.no", + "st" : "st-grid01.st.statoil.no", + "tr" : "tr-grid01.tr.statoil.no", + "stj" : "tr-grid01.tr.statoil.no", + "rio" : "rio-grid01.rio.statoil.no" } + + +def get_lsf_server(): + if os.getenv("LOCAL_LSF"): + # The user has set the LOCAL_LSF environment variable - + # signalling that she has access to a proper LSF node. + return None + else: + host = socket.gethostname() + host_prefix = host.split("-")[0] + lsf_server = server_list.get( host_prefix , None) + # This will silently return None if no appropriate LSF server + # is found. In that case things will blow up at a later stage + # if/when someone tries to use the invalid lsf server. + return lsf_server + + +# The command used to run ECLIPSE. The executable will be called with +# commandline arguments: version data_file num_cpu +ecl_cmd = "/project/res/etc/ERT/Scripts/run_eclipse.py" + +# The ECLIPSE version which will be used, by default. +ecl_version = "2010.2" + +# The resource request passed to the LSF server. In practice every god-damn compute node +# in Statoil will satisfy these needs, so it could just be left as None. +lsf_resource_request = "select[cs && x86_64Linux] rusage[ecl100v2000=1:duration=5]" + +lsf_queue = "normal" +rsh_command = "/usr/bin/ssh" + +driver_options = { driver.LSF_DRIVER : [("LSF_QUEUE" , lsf_queue), + ("LSF_RESOURCE" , lsf_resource_request), + ("LSF_SERVER" , get_lsf_server())], + driver.RSH_DRIVER : [("RSH_COMMAND" , rsh_command)], + driver.LOCAL_DRIVER : []} + +driver_type = driver.LSF_DRIVER + + + diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft.py index 8689e5ecda..d567759a1f 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft.py +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft.py @@ -17,33 +17,18 @@ Module for loading ECLIPSE RFT files. """ +import libecl import ctypes import types -import warnings - -import libecl from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.ctime import ctime -from ecl_rft_cell import EclRFTCell, EclPLTCell +RFT = 1 +PLT = 2 class EclRFTFile(CClass): - """ - The EclRFTFile class is used to load an ECLIPSE RFT file. - - The EclRFTFile serves as a container which can load and hold the - content of an ECLIPSE RFT file. The RFT files will in general - contain data for several wells and several times in one large - container. The EclRFTClass class contains methods get the the RFT - results for a specific time and/or well. - - The EclRFTFile class can in general contain a mix of RFT and PLT - measurements. The class does not really differentiate between - these. - """ - def __new__( cls , case ): c_ptr = cfunc_file.load( case ) if c_ptr: @@ -68,63 +53,29 @@ class EclRFTFile(CClass): else: raise TypeError("Index should be integer type") + + @property def size( self , well = None , date = None): - """ - The number of elements in EclRFTFile container. - - By default the size() method will return the total number of - RFTs/PLTs in the container, but by specifying the optional - arguments date and/or well the function will only count the - number of well measurements matching that time or well - name. The well argument can contain wildcards. - - rftFile = ecl.EclRFTFile( "ECLIPSE.RFT" ) - print "Total number of RFTs : %d" % rftFile.size( ) - print "RFTs matching OP* : %d" % rftFile.size( well = "OP*" ) - print "RFTs at 01/01/2010 : %d" % rftFile.size( date = datetime.date( 2010 , 1 , 1 )) - - """ - if date: - cdate = ctime( date ) - else: - cdate = -1 - - return cfunc_file.get_size( self , well , cdate) - + return cfunc_file.get_size( self , well , -1) @property def num_wells( self ): - """ - Returns the total number of distinct wells in the RFT file. - """ return cfunc_file.get_num_wells( self ) @property def headers(self): - """ - Returns a list of two tuples (well_name , date) for the whole file. - """ header_list = [] for i in (range(cfunc_file.get_size( self , None , -1))): rft = self.iget( i ) + print rft header_list.append( (rft.well , rft.date) ) return header_list - def iget(self , index): - """ - Will lookup RFT @index - equivalent to [@index]. - """ return self.__getitem__( index ) - def get(self , well_name , date ): - """ - Will look up the RFT object corresponding to @well and @date. - - Returns None if no matching RFT can be found. - """ c_ptr = cfunc_file.get_rft( self , well_name , ctime( date )) if c_ptr: return EclRFT( c_ptr , self) @@ -136,56 +87,13 @@ class EclRFTFile(CClass): class EclRFT(CClass): - """The EclRFT class contains the information for *one* RFT. - - The ECLIPSE RFT file can contain three different types of RFT like - objects which are lumped together; the EclRFTClass is a container - for such objects. The three different object types which can be - found in an RFT file are: - - 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. - - In addition to the measurements specific for RFT and PLT each cell - has coordinates, pressure and depth. - """ def __init__(self , c_ptr , parent): self.init_cref( c_ptr , parent ) + def __len__(self): - """ - The number of completed cells in this RFT. - """ return cfunc_rft.get_size( self ) - def is_RFT(self): - """ - Is instance an RFT; in that case all the cells will be EclRFTCell instances. - """ - return cfunc_rft.is_RFT( self ) - - def is_PLT(self): - """ - Is instance a PLT; in that case all the cells will be EclPLTCell instances. - """ - return cfunc_rft.is_PLT( self ) - - def is_SEGMENT(self): - """ - Is this a SEGMENT - not implemented. - """ - return cfunc_rft.is_SEGMENT( self ) - - def is_MSW(self): - """ - Is this well a MSW well. Observe that the test ONLY applies to PLTs. - """ - return cfunc_rft.is_MSW( self ) @property @@ -194,129 +102,146 @@ class EclRFT(CClass): # RFT = 1 # PLT = 2 # Segment = 3 -- Not properly implemented - """ - Deprecated - use query methods: is_RFT(), is_PLT() and is_SEGMENT() instead. - """ - warnings.warn("The property type is deprecated, use the query methods is_RFT(), is_PLT() and is_SEGMENT() instead.") return cfunc_rft.get_type( self ) @property def well(self): - """ - The name of the well we are considering. - """ return cfunc_rft.get_well( self ) @property def date(self): - """ - The date when this RFT/PLT/... was recorded. - """ return cfunc_rft.get_date( self ) @property def size(self): - """ - The number of completed cells. - """ return self.__len__() - def __cell_ref( self , cell_ptr ): - if self.is_RFT(): - return EclRFTCell.ref( cell_ptr , self ) - elif self.is_PLT(): - return EclPLTCell.ref( cell_ptr , self ) + def __make_node( self , index ): + i = ctypes.c_int() + j = ctypes.c_int() + k = ctypes.c_int() + pressure = cfunc_rft.iget_pressure( self, index ) + depth = cfunc_rft.iget_depth( self, index ) + cfunc_rft.iget_ijk( self, index , ctypes.byref(i), ctypes.byref(j) , ctypes.byref(k)) + + + if self.type == RFT: + swat = cfunc_rft.iget_swat( self, index ) + sgas = cfunc_rft.iget_sgas( self, index ) + return EclRFTCell.RFTCell( i,j,k,depth , pressure,swat,sgas) else: - raise NotImplementedError("Only RFT and PLT cells are implemented") + orat = cfunc_rft.iget_orat( self, index ) + wrat = cfunc_rft.iget_wrat( self, index ) + grat = cfunc_rft.iget_grat( self, index ) + return EclRFTCell.PLTCell( i,j,k,depth , pressure,orat,grat,wrat) - - def assert_cell_index( self , index ): + def __getitem__(self , index): if isinstance( index , types.IntType): length = self.__len__() if index < 0 or index >= length: raise IndexError + else: + return self.__make_node( index ) else: raise TypeError("Index should be integer type") - - def __getitem__(self , index): - """Implements the [] operator to return the cells. - - To get the object related to cell nr 5: - - cell = rft[4] - - The return value from the __getitem__() method is either an - EclRFTCell instance or a EclPLTCell instance, depending on the - type of this particular RFT object. - """ - self.assert_cell_index( index ) - cell_ptr = cfunc_rft.iget_cell( self , index ) - return self.__cell_ref( cell_ptr ) - - def iget( self , index ): return self.__getitem__( index ) - - def iget_sorted( self , index ): - """ - Will return the cell nr @index in the list of sorted cells. - - See method sort() for further documentation. - """ - self.assert_cell_index( index ) - cell_ptr = cfunc_rft.iget_cell_sorted( self , index ) - return self.__cell_ref( cell_ptr ) - - - def sort(self): - """ - Will sort cells in RFT; currently only applies to MSW wells. - - By default the cells in the RFT come in the order they are - specified in the ECLIPSE input file; that is not necessarily - in a suitable order. In the case of MSW wells it is possible - to sort the connections after distance along the wellpath. To - access the cells in sort order you have two options: - - 1. Sort the cells using the sort() method, and then - subsequently access them sequentially: - - rft.sort() - for cell in rft: - print cell - - 2. Let the rft object stay unsorted, but access the cells - using the iget_sorted() method: - - for i in range(len(rft)): - cell = rft.iget_sorted( i ) - - Currently only MSW/PLTs are sorted, based on the CONLENST - keyword; for other wells the sort() method does nothing. - """ - cfunc_rft.sort_cells( self ) - # ijk are zero offset def ijkget( self , ijk ): - """ - Will look up the cell based on (i,j,k). - - If the cell (i,j,k) is not part of this RFT/PLT None will be - returned. The (i,j,k) input values should be zero offset, - i.e. you must subtract 1 from the (i,j,k) values given in the ECLIPSE input. - """ - cell_ptr = cfunc_rft.lookup_ijk( self , ijk[0] , ijk[1] , ijk[2]) - if cell_ptr: - return self.__cell_ref( cell_ptr ) + index = cfunc_rft.lookup_ijk( self , ijk[0] , ijk[1] , ijk[2]) + if index >= 0: + return self.iget( index ) else: return None +class EclRFTCell: + def __init__(self , type , i , j , k , depth , pressure): + self.type = type + self.__i = i + self.__j = j + self.__k = k + self.__depth = depth + self.__pressure = pressure + + self.__sgas = None + self.__swat = None + self.__orat = None + self.__wrat = None + self.__grat = None + + @classmethod + def RFTCell( cls , i,j,k,depth,pressure,swat,sgas): + cell = cls(RFT , i,j,k,depth,pressure) + cell.__swat = swat + cell.__sgas = sgas + return cell + + @classmethod + def PLTCell(cls , i,j,k,depth,pressure,orat,grat,wrat): + cell = cls(PLT , i,j,k,depth,pressure) + cell.__orat = orat + cell.__wrat = wrat + cell.__grat = grat + return cell + + @property + def i(self): + return self.__i.value + + @property + def j(self): + return self.__j.value + + @property + def k(self): + return self.__k.value + + @property + def ijk(self): + return (self.__i.value , self.__j.value , self.__k.value) + + @property + def pressure(self): + return self.__pressure + + @property + def depth(self): + return self.__depth + + @property + def PLT(self): + if self.type == PLT: + return True + else: + return False + + @property + def sgas(self): + return self.__sgas + + @property + def swat(self): + return self.__swat + + @property + def orat(self): + return self.__orat + + @property + def grat(self): + return self.__grat + + @property + def wrat(self): + return self.__wrat + + # 2. Creating a wrapper object around the libecl library, @@ -328,31 +253,25 @@ cwrapper.registerType( "ecl_rft" , EclRFT ) cfunc_file = CWrapperNameSpace("ecl_rft_file") cfunc_rft = CWrapperNameSpace("ecl_rft") -cfunc_file.load = cwrapper.prototype("c_void_p ecl_rft_file_alloc_case( char* )") +cfunc_file.load = cwrapper.prototype("long ecl_rft_file_alloc_case( char* )") cfunc_file.has_rft = cwrapper.prototype("bool ecl_rft_file_case_has_rft( char* )") cfunc_file.free = cwrapper.prototype("void ecl_rft_file_free( ecl_rft_file )") cfunc_file.get_size = cwrapper.prototype("int ecl_rft_file_get_size__( ecl_rft_file , char* , time_t)") -cfunc_file.iget = cwrapper.prototype("c_void_p ecl_rft_file_iget_node( ecl_rft_file , int )") +cfunc_file.iget = cwrapper.prototype("long ecl_rft_file_iget_node( ecl_rft_file , int )") cfunc_file.get_num_wells = cwrapper.prototype("int ecl_rft_file_get_num_wells( ecl_rft_file )") -cfunc_file.get_rft = cwrapper.prototype("c_void_p ecl_rft_file_get_well_time_rft( ecl_rft_file , char* , time_t)") +cfunc_file.get_rft = cwrapper.prototype("long ecl_rft_file_get_well_time_rft( ecl_rft_file , char* , time_t)") + +cfunc_rft.get_type = cwrapper.prototype("int ecl_rft_node_get_type( ecl_rft )") +cfunc_rft.get_well = cwrapper.prototype("char* ecl_rft_node_get_well_name( ecl_rft )") +cfunc_rft.get_date = cwrapper.prototype("time_t ecl_rft_node_get_date( ecl_rft )") +cfunc_rft.get_size = cwrapper.prototype("int ecl_rft_node_get_size( ecl_rft )") +cfunc_rft.iget_depth = cwrapper.prototype("double ecl_rft_node_iget_depth( ecl_rft )") +cfunc_rft.iget_pressure = cwrapper.prototype("double ecl_rft_node_iget_pressure(ecl_rft)") +cfunc_rft.iget_ijk = cwrapper.prototype("void ecl_rft_node_iget_ijk( ecl_rft , int , int*, int*, int*)") +cfunc_rft.iget_swat = cwrapper.prototype("double ecl_rft_node_iget_swat(ecl_rft)") +cfunc_rft.iget_sgas = cwrapper.prototype("double ecl_rft_node_iget_sgas(ecl_rft)") +cfunc_rft.iget_orat = cwrapper.prototype("double ecl_rft_node_iget_orat(ecl_rft)") +cfunc_rft.iget_wrat = cwrapper.prototype("double ecl_rft_node_iget_wrat(ecl_rft)") +cfunc_rft.iget_grat = cwrapper.prototype("double ecl_rft_node_iget_grat(ecl_rft)") +cfunc_rft.lookup_ijk = cwrapper.prototype("int ecl_rft_node_lookup_ijk( ecl_rft , int , int , int)") -cfunc_rft.get_type = cwrapper.prototype("int ecl_rft_node_get_type( ecl_rft )") -cfunc_rft.get_well = cwrapper.prototype("char* ecl_rft_node_get_well_name( ecl_rft )") -cfunc_rft.get_date = cwrapper.prototype("time_t ecl_rft_node_get_date( ecl_rft )") -cfunc_rft.get_size = cwrapper.prototype("int ecl_rft_node_get_size( ecl_rft )") -cfunc_rft.iget_cell = cwrapper.prototype("c_void_p ecl_rft_node_iget_cell( ecl_rft )") -cfunc_rft.iget_cell_sorted = cwrapper.prototype("c_void_p ecl_rft_node_iget_cell_sorted( ecl_rft )") -cfunc_rft.sort_cells = cwrapper.prototype("c_void_p ecl_rft_node_inplace_sort_cells( ecl_rft )") -cfunc_rft.iget_depth = cwrapper.prototype("double ecl_rft_node_iget_depth( ecl_rft )") -cfunc_rft.iget_pressure = cwrapper.prototype("double ecl_rft_node_iget_pressure(ecl_rft)") -cfunc_rft.iget_ijk = cwrapper.prototype("void ecl_rft_node_iget_ijk( ecl_rft , int , int*, int*, int*)") -cfunc_rft.iget_swat = cwrapper.prototype("double ecl_rft_node_iget_swat(ecl_rft)") -cfunc_rft.iget_sgas = cwrapper.prototype("double ecl_rft_node_iget_sgas(ecl_rft)") -cfunc_rft.iget_orat = cwrapper.prototype("double ecl_rft_node_iget_orat(ecl_rft)") -cfunc_rft.iget_wrat = cwrapper.prototype("double ecl_rft_node_iget_wrat(ecl_rft)") -cfunc_rft.iget_grat = cwrapper.prototype("double ecl_rft_node_iget_grat(ecl_rft)") -cfunc_rft.lookup_ijk = cwrapper.prototype("c_void_p ecl_rft_node_lookup_ijk( ecl_rft , int , int , int)") -cfunc_rft.is_RFT = cwrapper.prototype("bool ecl_rft_node_is_RFT( ecl_rft )") -cfunc_rft.is_PLT = cwrapper.prototype("bool ecl_rft_node_is_PLT( ecl_rft )") -cfunc_rft.is_SEGMENT = cwrapper.prototype("bool ecl_rft_node_is_SEGMENT( ecl_rft )") -cfunc_rft.is_MSW = cwrapper.prototype("bool ecl_rft_node_is_MSW( ecl_rft )") diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft_cell.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft_cell.py deleted file mode 100644 index 4cd4727ddd..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_rft_cell.py +++ /dev/null @@ -1,217 +0,0 @@ -# Copyright (C) 2011 Statoil ASA, Norway. -# -# The file 'ecl_rft_cell.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 warnings -import ctypes -import types - -import libecl -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass - -class RFTCell(CClass): - """The RFTCell is a base class for the cells which are part of an RFT/PLT. - - The RFTCell class contains the elements which are common to both - RFT and PLT. The list of common elements include the corrdinates - (i,j,k) the pressure and the depth of the cell. Actual user access - should be based on the derived classes EclRFTCell and EclPLTCell. - - Observe that from june 2013 the properties i,j and k which return - offset 1 coordinate values are deprecated, and you should rather - use the methods get_i(), get_j() and get_k() which return offset 0 - coordinate values. - """ - - - def warn(self , old , new): - msg = """ - -The cell property:%s has been deprecated, and the method:%s() should -be used instead. Observe that the new method %s() returns coordinate -values starting at 0, whereas the old property %s returned values -starting at 1; hence you must adapt the calling code when you change -from %s -> %s() -""" % (old , new , new , old , old , new) - warnings.warn( msg , DeprecationWarning ) - - @property - def i(self): - self.warn("i" , "get_i") - return self.get_i() + 1 - - @property - def j(self): - self.warn("j" , "get_j") - return self.get_j() + 1 - - @property - def k(self): - self.warn("k" , "get_k") - return self.get_k() + 1 - - @property - def ijk(self): - self.warn("ijk" , "get_ijk") - return (self.get_i() + 1 , self.get_j() + 1 , self.get_k() + 1) - - def get_i(self): - return cfunc.get_i( self ) - - def get_j(self): - return cfunc.get_j( self ) - - def get_k(self): - return cfunc.get_k( self ) - - def get_ijk(self): - return (cfunc.get_i( self ) , cfunc.get_j( self ) , cfunc.get_k( self )) - - @property - def pressure(self): - return cfunc.get_pressure( self ) - - @property - def depth(self): - return cfunc.get_depth( self ) - - -################################################################# - - -class EclRFTCell(RFTCell): - - @classmethod - def new(cls , i , j , k , depth , pressure , swat , sgas ): - cell = EclRFTCell() - c_ptr = cfunc.alloc_RFT( i,j,k,depth,pressure,swat,sgas) - cell.init_cobj( c_ptr , cfunc.free ) - return cell - - @classmethod - def ref(cls, c_ptr , parent): - cell = EclRFTCell() - cell.init_cref( c_ptr , parent ) - return cell - - @property - def swat(self): - return cfunc.get_swat( self ) - - @property - def sgas(self): - return cfunc.get_sgas( self ) - - @property - def soil(self): - return 1 - (cfunc.get_sgas( self ) + cfunc.get_swat( self )) - - -################################################################# - - -class EclPLTCell(RFTCell): - - @classmethod - def new(self , i , j , k , depth , pressure , orat , grat , wrat , conn_start , flowrate , oil_flowrate , gas_flowrate , water_flowrate ): - cell = EclPLTCell() - c_ptr = cfunc.alloc_PLT( i,j,k,depth,pressure,orat , grat , wrat , conn_start , flowrate , oil_flowrate , gas_flowrate , water_flowrate) - cell.init_cobj( c_ptr , cfunc.free ) - return cell - - @classmethod - def ref(cls, c_ptr , parent): - cell = EclPLTCell() - cell.init_cref( c_ptr , parent ) - return cell - - @property - def orat(self): - return cfunc.get_orat( self ) - - @property - def grat(self): - return cfunc.get_grat( self ) - - @property - def wrat(self): - return cfunc.get_wrat( self ) - - @property - def conn_start(self): - """Will return the length from wellhead(?) to connection. - - For MSW wells this property will return the distance from a - fixed point (wellhead) to the current connection. This value - will be used to sort the completed cells along the well - path. In the case of non MSW wells this will just return a - fixed default value. - """ - return cfunc.get_conn_start( self ) - - @property - def flowrate(self): - return cfunc.get_flowrate( self ) - - @property - def oil_flowrate(self): - return cfunc.get_oil_flowrate( self ) - - @property - def gas_flowrate(self): - return cfunc.get_gas_flowrate( self ) - - @property - def water_flowrate(self): - return cfunc.get_water_flowrate( self ) - - -################################################################# - - -cwrapper = CWrapper( libecl.lib ) -cwrapper.registerType( "rft_cell" , RFTCell) -cwrapper.registerType( "ecl_rft_cell" , EclRFTCell ) -cwrapper.registerType( "ecl_plt_cell" , EclPLTCell ) - -cfunc = CWrapperNameSpace("ecl_rft_cell") - -cfunc.alloc_RFT = cwrapper.prototype("c_void_p ecl_rft_cell_alloc_RFT( int, int , int , double , double , double , double)") -cfunc.alloc_PLT = cwrapper.prototype("c_void_p ecl_rft_cell_alloc_PLT( int, int , int , double , double , double , double, double , double , double , double , double , double )") -cfunc.free = cwrapper.prototype("void ecl_rft_cell_free( rft_cell )") - -cfunc.get_pressure = cwrapper.prototype("double ecl_rft_cell_get_pressure( rft_cell )") -cfunc.get_depth = cwrapper.prototype("double ecl_rft_cell_get_depth( rft_cell )") -cfunc.get_i = cwrapper.prototype("int ecl_rft_cell_get_i( rft_cell )") -cfunc.get_j = cwrapper.prototype("int ecl_rft_cell_get_j( rft_cell )") -cfunc.get_k = cwrapper.prototype("int ecl_rft_cell_get_k( rft_cell )") - -cfunc.get_swat = cwrapper.prototype("double ecl_rft_cell_get_swat( ecl_rft_cell )") -cfunc.get_soil = cwrapper.prototype("double ecl_rft_cell_get_soil( ecl_rft_cell )") -cfunc.get_sgas = cwrapper.prototype("double ecl_rft_cell_get_sgas( ecl_rft_cell )") - -cfunc.get_orat = cwrapper.prototype("double ecl_rft_cell_get_orat( ecl_plt_cell )") -cfunc.get_grat = cwrapper.prototype("double ecl_rft_cell_get_grat( ecl_plt_cell )") -cfunc.get_wrat = cwrapper.prototype("double ecl_rft_cell_get_wrat( ecl_plt_cell )") - -cfunc.get_conn_start = cwrapper.prototype("double ecl_rft_cell_get_connection_start( ecl_plt_cell )") - -cfunc.get_flowrate = cwrapper.prototype("double ecl_rft_cell_get_flowrate( ecl_plt_cell )") -cfunc.get_oil_flowrate = cwrapper.prototype("double ecl_rft_cell_get_oil_flowrate( ecl_plt_cell )") -cfunc.get_gas_flowrate = cwrapper.prototype("double ecl_rft_cell_get_gas_flowrate( ecl_plt_cell )") -cfunc.get_water_flowrate = cwrapper.prototype("double ecl_rft_cell_get_water_flowrate( ecl_plt_cell )") - - diff --git a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_sum.py b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_sum.py index 308ef6ebc2..d687e329e2 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_sum.py +++ b/ThirdParty/Ert/devel/python/python/ert/ecl/ecl_sum.py @@ -33,7 +33,6 @@ from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.stringlist import StringList from ert.util.ctime import ctime -from ert.ert.erttypes import time_vector, double_vector import numpy @@ -508,7 +507,7 @@ class EclSMSPECNode( CClass ): class EclSum( CClass ): - def __new__( cls , load_case , join_string = ":" , include_restart = True, c_ptr = None, parent = None): + def __new__( cls , load_case , join_string = ":" , include_restart = True): """ Loads a new EclSum instance with summary data. @@ -526,24 +525,16 @@ class EclSum( CClass ): loader will, in the case of a restarted ECLIPSE simulation, try to load summary results also from the restarted case. """ + c_ptr = cfunc.fread_alloc( load_case , join_string , include_restart) if c_ptr: obj = object.__new__( cls ) - if parent: - obj.init_cref( c_ptr , parent) - else: - obj.init_cobj( c_ptr , cfunc.free ) + obj.init_cobj( c_ptr , cfunc.free ) return obj else: - c_ptr = cfunc.fread_alloc( load_case , join_string , include_restart) - if c_ptr: - obj = object.__new__( cls ) - obj.init_cobj( c_ptr , cfunc.free ) - return obj - else: - return None + return None - def __init__(self , load_case , join_string = ":" ,include_restart = True , c_ptr = None, parent = None): + def __init__(self , load_case , join_string = ":" ,include_restart = True , c_ptr = None): """ Initialize a new EclSum instance. @@ -1230,15 +1221,9 @@ class EclSum( CClass ): cfunc.fwrite_sum( self ) - def alloc_time_vector(self, report_only): - return time_vector(cfunc.alloc_time_vector(self, report_only)) - - def alloc_data_vector(self, data_index, report_only): - return double_vector(cfunc.alloc_data_vector(self, data_index, report_only)) + - def get_general_var_index(self, key): - return cfunc.get_general_var_index( self , key ) ################################################################# @@ -1295,8 +1280,7 @@ cfunc.get_report_time = cwrapper.prototype("time_t ecl_sum_get_r cfunc.fwrite_sum = cwrapper.prototype("void ecl_sum_fwrite(ecl_sum)") cfunc.set_case = cwrapper.prototype("void ecl_sum_set_case(ecl_sum, char*)") -cfunc.alloc_time_vector = cwrapper.prototype("c_void_p ecl_sum_alloc_time_vector(ecl_sum, bool)") -cfunc.alloc_data_vector = cwrapper.prototype("c_void_p ecl_sum_alloc_data_vector(ecl_sum, int, bool)") + #----------------------------------------------------------------- # smspec node related stuff diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/enkf/CMakeLists.txt index 0ea246117a..cd664575a1 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/CMakeLists.txt @@ -1 +1 @@ -add_python_package("Python ert.enkf" ${PYTHON_INSTALL_PREFIX}/ert/enkf "analysis_config.py;enkf_main.py;ert_templates.py;gen_kw_config.py;model_config.py;ecl_config.py;enkf_node.py;field_config.py;__init__.py;obs_vector.py;enkf_config_node.py;enkf_obs.py;block_obs.py;libenkf.py;plot_config.py;enkf_enum.py;enkf.py;field.py;local_config.py;site_config.py;enkf_fs.py;ens_config.py;gen_data_config.py;time_map.py;ert_template.py;enkf_state.py" True) +add_python_package("Python ert.enkf" ${PYTHON_INSTALL_PREFIX}/ert/enkf "enkf_enum.py;enkf_main.py;enkf.py;ens_config.py;__init__.py;analysis_config.py;libenkf.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/analysis_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/analysis_config.py index 6325c4c21d..567c632451 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/analysis_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/analysis_config.py @@ -23,57 +23,35 @@ import libenkf class AnalysisConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_rerun(self): - return cfunc.get_rerun( self ) - - def set_rerun(self, rerun): - cfunc.set_rerun(self, rerun) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr - @property - def get_rerun_start(self): - return cfunc.get_rerun_start( self ) + + def __del__(self): + if self.owner: + cfunc.free( self ) - def set_rerun_start(self, int): - cfunc.set_rerun_start( self , int) - @property - def get_log_path(self): - return cfunc.get_log_path( self ) + def has_key(self , key): + return cfunc.has_key( self ,key ) - def set_log_path(self, path): - cfunc.set_log_path( self, path) - @property - def get_alpha(self): - return cfunc.get_alpha( self ) - def set_alpha(self, alpha): - cfunc.set_alpha( self , alpha) - - @property - def get_merge_observations(self): - return cfunc.get_merge_observations( self ) - - def set_merge_observations(self, merge_observations): - return cfunc.set_merge_observations( self , merge_observations) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "analysis_config" , AnalysisConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("analysis_config") cfunc.free = cwrapper.prototype("void analysis_config_free( analysis_config )") cfunc.get_rerun = cwrapper.prototype("int analysis_config_get_rerun( analysis_config )") -cfunc.set_rerun = cwrapper.prototype("void analysis_config_set_rerun( analysis_config, bool)") +cfunc.set_rerun = cwrapper.prototype("void analysis_config_set_rerun analysis_config, bool)") cfunc.get_rerun_start = cwrapper.prototype("int analysis_config_get_rerun_start( analysis_config )") cfunc.set_rerun_start = cwrapper.prototype("void analysis_config_set_rerun_start( analysis_config, int)") cfunc.get_log_path = cwrapper.prototype("char* analysis_config_get_log_path( analysis_config)") @@ -81,5 +59,8 @@ cfunc.set_log_path = cwrapper.prototype("void analysis_config_set_log_ cfunc.get_alpha = cwrapper.prototype("double analysis_config_get_alpha(analysis_config)") cfunc.set_alpha = cwrapper.prototype("void analysis_config_set_alpha(analysis_config, double)") cfunc.get_merge_observations = cwrapper.prototype("bool analysis_config_get_merge_observations(analysis_config)") -cfunc.set_merge_observations = cwrapper.prototype("void analysis_config_set_merge_observations(analysis_config, bool)") - +cfunc.set_merge_observations = cwrapper.prototype("void analysis_config_set_merge_observations(analysis_config, int)") +cfunc.get_enkf_mode = cwrapper.prototype("int analysis_config_get_enkf_mode(analysis_config)") +cfunc.set_enkf_mode = cwrapper.prototype("void analysis_config_set_enkf_mode(analysis_config, int)") +cfunc.get_truncation = cwrapper.prototype("double analysis_config_get_truncation(analysis_config)") +cfunc.get_truncation = cwrapper.prototype("void analysis_config_set_truncation(analysis_config, double)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/block_obs.py b/ThirdParty/Ert/devel/python/python/ert/enkf/block_obs.py deleted file mode 100644 index af15b20f8c..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/block_obs.py +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'block_obs.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -import libenkf -class BlockObs(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - def iget_i(self , index): - return cfunc.iget_i( self ,index ) - - def iget_j(self , index): - return cfunc.iget_j( self ,index ) - - def iget_k(self , index): - return cfunc.iget_k( self ,index ) - - def get_size(self): - return cfunc.get_size(self) - - def iget(self, index, value, std): - return cfunc.iget(self, index, value, std) - -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "block_obs" , BlockObs ) -cfunc = CWrapperNameSpace("block_obs") - - -cfunc.free = cwrapper.prototype("void block_obs_free( block_obs )") -cfunc.iget_i = cwrapper.prototype("int block_obs_iget_i(block_obs, int)") -cfunc.iget_j = cwrapper.prototype("int block_obs_iget_j( block_obs, int)") -cfunc.iget_k = cwrapper.prototype("int block_obs_iget_k( block_obs , int)") -cfunc.get_size = cwrapper.prototype("int block_obs_get_size( block_obs )") -cfunc.iget = cwrapper.prototype("void block_obs_iget( block_obs, int, double*, double*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/ecl_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/ecl_config.py index c3e67a3cc9..fffec1a3aa 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/ecl_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/ecl_config.py @@ -20,86 +20,31 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf -import ert.util.libutil -from ert.ecl.ecl_sum import EclSum -from ert.util.stringlist import StringList class EclConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_eclbase(self): - eclbase = cfunc.get_eclbase(self) - return eclbase - - @property - def get_data_file(self): - datafile = cfunc.get_data_file(self) - return datafile - - @property - def get_gridfile(self): - gridfile = cfunc.get_gridfile(self) - return gridfile - - def set_gridfile(self, gridfile): - cfunc.set_gridfile(self, gridfile) - - @property - def get_schedule_file(self): - schedule_file = cfunc.get_schedule_file(self) - return schedule_file - - def set_schedule_file(self, schedule_file): - schedule_file = cfunc.set_schedule_file(self, schedule_file) - - @property - def get_init_section(self): - init_section = cfunc.get_init_section(self) - return init_section - - def set_init_section(self, init_section): - cfunc.set_init_section(self, init_section) - - @property - def get_refcase_name(self): - refcase_name = cfunc.get_refcase_name(self) - return refcase_name - - def load_refcase(self, refcase): - cfunc.load_refcase(self, refcase) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr - @property - def get_static_kw_list(self): - return StringList(c_ptr = cfunc.get_static_kw_list( self ) , parent = self) + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_refcase(self): - refcase = EclSum(self.get_refcase_name, join_string = ":" , include_restart = True, c_ptr = cfunc.get_refcase( self ), parent = self) - return refcase - - def clear_static_kw(self): - cfunc.clear_static_kw(self) - def add_static_kw(self,kw): - cfunc.add_static_kw(self,kw) + def has_key(self , key): + return cfunc.has_key( self ,key ) + - @property - def get_grid(self): - return cfunc.get_grid(self) - @property - def get_sched_file(self): - return cfunc.get_sched_file(self) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "ecl_config" , EclConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("ecl_config") @@ -108,15 +53,13 @@ cfunc.get_eclbase = cwrapper.prototype("char* ecl_config_get_eclbase( ecl cfunc.get_data_file = cwrapper.prototype("char* ecl_config_get_data_file(ecl_config)") cfunc.get_gridfile = cwrapper.prototype("char* ecl_config_get_gridfile(ecl_config)") cfunc.set_gridfile = cwrapper.prototype("void ecl_config_set_grid(ecl_config, char*)") -cfunc.get_schedule_file = cwrapper.prototype("char* ecl_config_get_schedule_file(ecl_config)") -cfunc.set_schedule_file = cwrapper.prototype("void ecl_config_set_schedule_file(ecl_config, char*)") +cfunc.get_schedule = cwrapper.prototype("char* ecl_config_get_schedule_file(ecl_config)") +cfunc.set_schedule = cwrapper.prototype("void ecl_config_set_schedule_file(ecl_config, char*)") cfunc.get_init_section = cwrapper.prototype("char* ecl_config_get_init_section(ecl_config)") cfunc.set_init_section = cwrapper.prototype("void ecl_config_set_init_section(ecl_config, char*)") cfunc.get_refcase_name = cwrapper.prototype("char* ecl_config_get_refcase_name(ecl_config)") -cfunc.load_refcase = cwrapper.prototype("void ecl_config_load_refcase(ecl_config, char*)") +cfunc.set_refcase_name = cwrapper.prototype("void ecl_config_load_refcase(ecl_config, char*)") cfunc.get_static_kw_list = cwrapper.prototype("c_void_p ecl_config_get_static_kw_list(ecl_config)") cfunc.clear_static_kw = cwrapper.prototype("void ecl_config_clear_static_kw(ecl_config)") cfunc.add_static_kw = cwrapper.prototype("void ecl_config_add_static_kw(ecl_config, char*)") cfunc.get_grid = cwrapper.prototype("c_void_p ecl_config_get_grid(ecl_config)") -cfunc.get_refcase = cwrapper.prototype("c_void_p ecl_config_get_refcase(ecl_config)") -cfunc.get_sched_file = cwrapper.prototype("c_void_p ecl_config_get_sched_file(ecl_config)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_config_node.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_config_node.py index a0d07f96b3..0bca2c408b 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_config_node.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_config_node.py @@ -20,76 +20,43 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf -from ert.enkf.gen_data_config import GenDataConfig -from ert.enkf.gen_kw_config import GenKwConfig -from ert.enkf.field_config import FieldConfig -from ert.enkf.enkf_node import EnkfNode - class EnkfConfigNode(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_impl_type( self ): - return cfunc.get_impl_type( self ) - @property - def get_var_type( self ): - return cfunc.get_var_type( self ) + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_ref(self): - return cfunc.get_ref( self) - @property - def get_min_std_file(self): - return cfunc.get_min_std_file( self) - @property - def get_enkf_outfile(self): - return cfunc.get_enkf_outfile( self) - - @property - def field_model(self): - return FieldConfig(c_ptr = cfunc.get_ref( self), parent = self) - - @property - def data_model(self): - return GenDataConfig(c_ptr = cfunc.get_ref( self), parent = self) - - @property - def keyword_model(self): - return GenKwConfig(c_ptr = cfunc.get_ref( self), parent = self) - - @property - def get_enkf_infile(self): - return cfunc.get_enkf_infile( self) - - @property - def alloc_node(self): - node = EnkfNode.alloc(self) - return node - - @property - def get_init_file_fmt(self): - return cfunc.get_init_file_fmt(self) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "enkf_config_node" , EnkfConfigNode ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("enkf_config_node") -################################################################## -################################################################## -cfunc.free = cwrapper.prototype("void enkf_config_node_free( enkf_config_node )") -cfunc.get_ref = cwrapper.prototype("c_void_p enkf_config_node_get_ref(enkf_config_node)") -cfunc.get_impl_type = cwrapper.prototype("c_void_p enkf_config_node_get_impl_type(enkf_config_node)") -cfunc.get_enkf_outfile = cwrapper.prototype("char* enkf_config_node_get_enkf_outfile(enkf_config_node)") -cfunc.get_min_std_file = cwrapper.prototype("char* enkf_config_node_get_min_std_file(enkf_config_node)") -cfunc.get_enkf_infile = cwrapper.prototype("char* enkf_config_node_get_enkf_infile(enkf_config_node)") -cfunc.get_init_file_fmt = cwrapper.prototype("char* enkf_config_node_get_init_file_fmt(enkf_config_node)") -cfunc.get_var_type = cwrapper.prototype("c_void_p enkf_config_node_get_var_type(enkf_config_node)") + + +cfunc.free = cwrapper.prototype("void enkf_config_node_free( enkf_config_node )") +cfunc.get_impl_type = cwrapper.prototype("c_void_p enkf_config_node_get_impl_type(enkf_config_node)") +cfunc.get_ref = cwrapper.prototype("c_void_p enkf_config_node_get_ref(enkf_config_node)") +cfunc.is_valid = cwrapper.prototype("bool enkf_config_node_is_valid(enkf_config_node)") +cfunc.get_min_std_file = cwrapper.prototype("char* enkf_config_node_get_min_std_file(enkf_config_node)") +cfunc.get_enkf_outfile = cwrapper.prototype("char* enkf_config_node_get_enkf_outfile(enkf_config_node)") +cfunc.get_enkf_infile = cwrapper.prototype("char* enkf_config_node_get_enkf_infile(enkf_config_node)") +cfunc.update_gen_kw = cwrapper.prototype("void enkf_config_node_update_gen_kw(enkf_config_node, char*, char*, char*, char*, char*)") +cfunc.update_state_field = cwrapper.prototype("void enkf_config_node_update_state_field(enkf_config_node, int, double, double)") +cfunc.update_parameter_field = cwrapper.prototype("void enkf_config_node_update_parameter_field(enkf_config_node, char*, char*, char*, int, double, double, char*, char*)") +cfunc.update_general_field = cwrapper.prototype("void enkf_config_node_update_general_field(enkf_config_node, char*, char*, char*, char*, int, double, double, char*, char*, char*)") +cfunc.update_gen_data = cwrapper.prototype("void enkf_config_node_update_gen_data(enkf_config_node, int, int, char*, char*, char*, char*, char*, char*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_fs.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_fs.py deleted file mode 100644 index 96e7cc3d8e..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_fs.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'enkf_fs.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 ctypes -from ctypes import c_buffer -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -from ert.ert.enums import enkf_var_type, ert_state_enum -from ert.enkf.time_map import TimeMap -from ert.util.buffer import Buffer -import libenkf -from ert.ert.c_enums import state_enum -from ert.ert.c_enums import var_type -class EnkfFs(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.close ) - - def has_node(self, node_key, var_type, report_step, iens, state): - return cfunc.has_node(self, node_key, var_type, report_step, iens, state) - - def has_vector(self, node_key, var_type, iens, state): - return cfunc.has_vector(self, node_key, var_type, iens, state) - - - def fread_node(self, key, type, step, member, value): - buffer = Buffer(100) - cfunc.fread_node(self, buffer, key, type, step, member, value) - - def fread_vector(self, key, type, member, value): - buffer = Buffer(100) - cfunc.fread_vector(self, buffer, key, type, member, value) - - @property - def get_time_map(self): - return TimeMap(cfunc.get_time_map(self), parent = self) - -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "enkf_fs" , EnkfFs ) - -cfunc = CWrapperNameSpace("enkf_fs") - -cfunc.close = cwrapper.prototype("void enkf_fs_close(enkf_fs)") -cfunc.has_node = cwrapper.prototype("bool enkf_fs_has_node(enkf_fs, char*, c_uint, int, int, c_uint)") -cfunc.has_vector = cwrapper.prototype("bool enkf_fs_has_vector(enkf_fs, char*, c_uint, int, c_uint)") -cfunc.fread_node = cwrapper.prototype("void enkf_fs_fread_node(enkf_fs, buffer, char*, c_uint, int, int, c_uint)") -cfunc.fread_vector = cwrapper.prototype("void enkf_fs_fread_vector(enkf_fs, buffer, char*, c_uint, int, c_uint)") -cfunc.get_time_map = cwrapper.prototype("c_void_p enkf_fs_get_time_map(enkf_fs)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_main.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_main.py index 5ded9202e4..57b4a319e5 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_main.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_main.py @@ -15,29 +15,25 @@ # for more details. import ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from ert.job_queue.job_queue import JobQueue -from ert.enkf.enkf_enum import * -from ert.ert.enums import * -from ert.enkf.ens_config import * -from ert.enkf.ecl_config import * -from ert.enkf.analysis_config import * -from ert.enkf.local_config import * -from ert.enkf.model_config import * -from ert.enkf.enkf_config_node import * -from ert.enkf.gen_kw_config import * -from ert.enkf.gen_data_config import * -from ert.enkf.field_config import * -from ert.enkf.enkf_obs import * -from ert.enkf.plot_config import * -from ert.enkf.site_config import * -from ert.enkf.libenkf import * -from ert.enkf.enkf_fs import * -from ert.enkf.ert_templates import * -from ert.enkf.enkf_state import * -from ert.util.log import * +from ert.cwrap.cwrap import * +from ert.cwrap.cclass import CClass +from ert.util.tvector import * +from ert.job_queue.job_queue import JobQueue +from enkf_enum import * +import ens_config +import ecl_config +import analysis_config +import local_config +import model_config +import enkf_config_node +import gen_kw_config +import gen_data_config +import field_config +import enkf_obs +import plot_config +import site_config +import libenkf +import ert_local class EnKFMain(CClass): @@ -47,13 +43,11 @@ class EnKFMain(CClass): @classmethod - def bootstrap(cls , model_config , site_config , strict = True): + def bootstrap(cls , model_config , site_config = ert_local.site_config): obj = EnKFMain() - obj.c_ptr = cfunc.bootstrap( site_config , model_config , strict , False ) + obj.c_ptr = cfunc.bootstrap( site_config , model_config , True , False ) return obj - - def set_eclbase(self, eclbase): - cfunc.set_eclbase(self, eclbase) + def __del__(self): if self.c_ptr: @@ -64,203 +58,48 @@ class EnKFMain(CClass): @property def ens_size( self ): return cfunc.ens_size( self ) - - @property - def ensemble_config(self): - config = EnsConfig( c_ptr = cfunc.get_ens_config( self ) , parent = self) + + + def sim( self ): + iactive = BoolVector( True ) + iactive[ self.ens_size -1 ] = True + + start_state = enkf_state_enum.ANALYZED + run_mode = enkf_run_enum.ENSEMBLE_EXPERIMENT + start_report = 0 + init_step_parameters = 0 + cfunc.run( self , run_mode , iactive , init_step_parameters , start_report , start_state ) + + def update(self , step_list): + cfunc.update( self , step_list ) + + + @property + def config(self): + config = ens_config.EnsConfig( cfunc.get_ens_config( self )) return config - - @property - def analysis_config(self): - anal_config = AnalysisConfig( c_ptr = cfunc.get_analysis_config( self ), parent = self) - return anal_config - - @property - def model_config(self): - mod_config = ModelConfig( c_ptr = cfunc.get_model_config( self ) , parent = self) - return mod_config - - @property - def logh(self): - mog = Log( c_ptr = cfunc.get_logh( self ), parent = self) - return mog - - @property - def local_config(self): - loc_config = LocalConfig( c_ptr = cfunc.get_local_config( self ), parent = self) - return loc_config - - @property - def site_config(self): - site_conf = SiteConfig( c_ptr = cfunc.get_site_config( self ) , parent = self) - return site_conf - - @property - def ecl_config(self): - ecl_conf = EclConfig( c_ptr = cfunc.get_ecl_config( self ) , parent = self) - return ecl_conf - - @property - def plot_config(self): - plot_conf = PlotConfig( c_ptr = cfunc.get_plot_config( self ), parent = self) - return plot_conf - - def set_eclbase(self, eclbase): - cfunc.set_eclbase(self, eclbase) - - def set_datafile(self, datafile): - cfunc.set_eclbase(self, datafile) - - @property - def get_schedule_prediction_file(self): - schedule_prediction_file = cfunc.get_schedule_prediction_file(self) - return schedule_prediction_file - - def set_schedule_prediction_file(self,file): - cfunc.set_schedule_prediction_file(self,file) - - @property - def get_data_kw(self): - data_kw = cfunc.get_data_kw(self) - return data_kw - - def clear_data_kw(self): - cfunc.set_data_kw(self) - - def add_data_kw(self, key, value): - cfunc.add_data_kw(self, key, value) - - def resize_ensemble(self, value): - cfunc.resize_ensemble(self, value) - - def del_node(self, key): - cfunc.del_node(self, key) - - @property - def get_obs(self): - ob = EnkfObs( c_ptr = cfunc.get_obs( self ), parent = self) - return ob - - def load_obs(self, obs_config_file): - cfunc.load_obs(self, obs_config_file) - - def reload_obs(self): - cfunc.reload_obs(self) - - def set_case_table(self, case_table_file): - cfunc.set_case_table(self, case_table_file) - - @property - def get_pre_clear_runpath(self): - pre_clear = cfunc.get_pre_clear_runpath(self) - return pre_clear - - def set_pre_clear_runpath(self, value): - cfunc.set_pre_clear_runpath(self, value) - - def iget_keep_runpath(self, iens): - ikeep = cfunc.iget_keep_runpath(self, iens) - return ikeep - - def iset_keep_runpath(self, iens, keep_runpath): - cfunc.iset_keep_runpath(self, iens, keep_runpath) - - @property - def get_templates(self): - temp = ErtTemplates( c_ptr = cfunc.get_templates( self ), parent = self) - return temp - - @property - def get_site_config_file(self): - site_conf_file = cfunc.get_site_config_file(self) - return site_conf_file - - def initialize_from_scratch(self, parameter_list, iens1, iens2, force_init = True): - cfunc.initialize_from_scratch(self, parameter_list, iens1, iens2, force_init) - - @property - def get_fs(self): - return EnkfFs(c_ptr = cfunc.get_fs(self), parent = self) - - @property - def get_history_length(self): - return cfunc.get_history_length(self) - - def initialize_from_existing__(self, source_case,source_report_step, source_state, member_mask, ranking_key, node_list): - cfunc.initialize_from_existing__(self, source_case, source_report_step, source_state, member_mask, ranking_key, node_list) - - - def copy_ensemble(self, source_case, source_report_step, source_state, target_case, target_report_step, target_state, member_mask, ranking_key, node_list): - cfunc.copy_ensemble(self, source_case, source_report_step, source_state, target_case, target_report_step, target_state, member_mask, ranking_key, node_list) - def iget_state(self, ens_memb): - i_enkf_state = EnKFState( c_ptr = cfunc.iget_state( self ,ens_memb), parent = self) - return i_enkf_state - - def get_observations(self, user_key, obs_count, obs_x, obs_y, obs_std): - cfunc.get_observations(self, user_key, obs_count, obs_x, obs_y, obs_std) - - def get_observation_count(self, user_key): - return cfunc.get_observation_count(self, user_key) - - @property - def is_initialized(self): - return cfunc.is_initialized(self) - - def run(self, boolPtr, init_step_parameter, simFrom, state, mode): - #{"ENKF_ASSIMILATION" : 1, "ENSEMBLE_EXPERIMENT" : 2, "ENSEMBLE_PREDICTION" : 3, "INIT_ONLY" : 4, "SMOOTHER" : 5} - if mode == 1: - cfunc.run_assimilation(self, boolPtr, init_step_parameter, simFrom, state) - if mode == 2: - cfunc.run_exp(self, boolPtr, True, init_step_parameter, simFrom, state) - if mode == 4: - cfunc.run_exp(self, boolPtr, False, init_step_parameter, simFrom, state) - if mode == 5: - cfunc.run_smoother(self, "AUTOSMOOTHER", True) - - @property - def alloc_caselist(self): - return StringList(c_ptr = cfunc.alloc_caselist(self), parent = self) - - @property - def get_current_fs(self): - return cfunc.get_current_fs(self) - - def user_select_fs(self, input_case): - cfunc.user_select_fs(self, input_case) - - @property - def get_alt_fs(self, fs, read_only, create): - return EnkfFS(cfunc.get_alt_fs(self, fs, read_only, create), parent = self) - - @staticmethod - def create_new_config(config_file, storage_path, case_name, dbase_type, num_realizations): - cfunc.create_new_config(config_file, storage_path, case_name, dbase_type, num_realizations) - - def fprintf_config(self): - cfunc.fprintf_config(self) - ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "enkf_main" , EnKFMain ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("enkf_main") -################################################################## -################################################################## -cfunc.bootstrap = cwrapper.prototype("c_void_p enkf_main_bootstrap(char*, char*, bool , bool)") +cfunc.bootstrap = cwrapper.prototype("c_void_p enkf_main_bootstrap(char*, char*, bool)") cfunc.free = cwrapper.prototype("void enkf_main_free( enkf_main )") +cfunc.run = cwrapper.prototype("void enkf_main_run( enkf_main , int , bool_vector , int , int , int)") cfunc.ens_size = cwrapper.prototype("int enkf_main_get_ensemble_size( enkf_main )") cfunc.get_ens_config = cwrapper.prototype("c_void_p enkf_main_get_ensemble_config( enkf_main )") +cfunc.set_verbose = cwrapper.prototype("void enkf_main_set_verbose( enkf_main , bool )") +cfunc.update = cwrapper.prototype("void enkf_main_UPDATE(enkf_main , int_vector)") cfunc.get_model_config = cwrapper.prototype("c_void_p enkf_main_get_model_config( enkf_main )") cfunc.get_local_config = cwrapper.prototype("c_void_p enkf_main_get_local_config( enkf_main )") -cfunc.get_analysis_config = cwrapper.prototype("c_void_p enkf_main_get_analysis_config( enkf_main)") -cfunc.get_site_config = cwrapper.prototype("c_void_p enkf_main_get_site_config( enkf_main)") -cfunc.get_ecl_config = cwrapper.prototype("c_void_p enkf_main_get_ecl_config( enkf_main)") -cfunc.get_plot_config = cwrapper.prototype("c_void_p enkf_main_get_plot_config( enkf_main)") cfunc.set_eclbase = cwrapper.prototype("void enkf_main_set_eclbase( enkf_main, char*)") cfunc.set_datafile = cwrapper.prototype("void enkf_main_set_data_file( enkf_main, char*)") cfunc.get_schedule_prediction_file = cwrapper.prototype("char* enkf_main_get_schedule_prediction_file( enkf_main )") @@ -268,34 +107,23 @@ cfunc.set_schedule_prediction_file = cwrapper.prototype("void enkf_main_set_sche cfunc.get_data_kw = cwrapper.prototype("c_void_p enkf_main_get_data_kw(enkf_main)") cfunc.clear_data_kw = cwrapper.prototype("void enkf_main_clear_data_kw(enkf_main)") cfunc.add_data_kw = cwrapper.prototype("void enkf_main_add_data_kw(enkf_main, char*, char*)") -cfunc.resize_ensemble = cwrapper.prototype("void enkf_main_resize_ensemble(enkf_main, int)") +cfunc.get_ensemble_size = cwrapper.prototype("int enkf_main_get_ensemble_size(enkf_main)") +cfunc.resize_ensemble = cwrapper.prototype("void enkf_main_resize_ensemble(int)") cfunc.del_node = cwrapper.prototype("void enkf_main_del_node(enkf_main, char*)") cfunc.get_obs = cwrapper.prototype("c_void_p enkf_main_get_obs(enkf_main)") cfunc.load_obs = cwrapper.prototype("void enkf_main_load_obs(enkf_main, char*)") cfunc.reload_obs = cwrapper.prototype("void enkf_main_reload_obs(enkf_main)") cfunc.set_case_table = cwrapper.prototype("void enkf_main_set_case_table(enkf_main, char*)") -cfunc.get_pre_clear_runpath = cwrapper.prototype("bool enkf_main_get_pre_clear_runpath(enkf_main)") +cfunc.get_pre_clear_runpath = cwrapper.prototype("bool enkf_main_get_pre_clear_runpath(enkf_main)"), cfunc.set_pre_clear_runpath = cwrapper.prototype("void enkf_main_set_pre_clear_runpath(enkf_main, bool)") -cfunc.iget_keep_runpath = cwrapper.prototype("int enkf_main_iget_keep_runpath(enkf_main, int)") -cfunc.iset_keep_runpath = cwrapper.prototype("void enkf_main_iset_keep_runpath(enkf_main, int, int_vector)") +cfunc.get_ensemble_size = cwrapper.prototype("int enkf_main_get_ensemble_size(enkf_main)"), +cfunc.iget_keep_runpath = cwrapper.prototype("int enkf_main_iget_keep_runpath(enkf_main, int)"), +cfunc.iset_keep_runpath = cwrapper.prototype("void enkf_main_iset_keep_runpath(enkf_main, int, keep_runpath)") cfunc.get_templates = cwrapper.prototype("c_void_p enkf_main_get_templates(enkf_main)") cfunc.get_site_config_file = cwrapper.prototype("char* enkf_main_get_site_config_file(enkf_main)") -cfunc.initialize_from_scratch = cwrapper.prototype("void enkf_main_initialize_from_scratch(enkf_main, stringlist, int, int, bool)") +cfunc.initialize_from_scratch = cwrapper.prototype("int enkf_main_initialize_from_scratch(enkf_main, stringlist, int, int)") +cfunc.get_ensemble_size = cwrapper.prototype("int enkf_main_get_ensemble_size(enkf_main)") cfunc.get_fs = cwrapper.prototype("c_void_p enkf_main_get_fs(enkf_main)") cfunc.get_history_length = cwrapper.prototype("int enkf_main_get_history_length(enkf_main)") cfunc.initialize_from_existing__ = cwrapper.prototype("void enkf_main_initialize_from_existing__(enkf_main, char*, int, int, bool_vector, char*, stringlist)") cfunc.copy_ensemble = cwrapper.prototype("void enkf_main_copy_ensemble(enkf_main, char*, int, int, char*, int, int, bool_vector, char*, stringlist)") -cfunc.get_observations = cwrapper.prototype("void enkf_main_get_observations(enkf_main, char*, int, long*, double*, double*)") -cfunc.get_observation_count = cwrapper.prototype("int enkf_main_get_observation_count(enkf_main, char*)") -cfunc.get_alt_fs = cwrapper.prototype("c_void_p enkf_main_get_alt_fs(enkf_main , char* , bool , bool)") -cfunc.is_initialized = cwrapper.prototype("bool enkf_main_is_initialized(enkf_main)") -cfunc.iget_state = cwrapper.prototype("c_void_p enkf_main_iget_state(enkf_main, int)") -cfunc.user_select_fs = cwrapper.prototype("void enkf_main_user_select_fs(enkf_main , char*)") -cfunc.get_logh = cwrapper.prototype("void enkf_main_get_logh( enkf_main )") -cfunc.run_exp = cwrapper.prototype("void enkf_main_run_exp( enkf_main, bool_vector, bool, int, int, int)") -cfunc.run_assimilation = cwrapper.prototype("void enkf_main_run_assimilation( enkf_main, bool_vector, int, int, int)") -cfunc.run_smoother = cwrapper.prototype("void enkf_main_run_smoother(enkf_main, char*, bool)") -cfunc.get_current_fs = cwrapper.prototype("char* enkf_main_get_current_fs(enkf_main)") -cfunc.alloc_caselist = cwrapper.prototype("c_void_p enkf_main_alloc_caselist(enkf_main)") -cfunc.fprintf_config = cwrapper.prototype("void enkf_main_fprintf_config(enkf_main)") -cfunc.create_new_config = cwrapper.prototype("void enkf_main_create_new_config(char* , char*, char* , char* , int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_node.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_node.py deleted file mode 100644 index 0b51273fa6..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_node.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'enkf_node.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -from ert.enkf.enkf_fs import EnkfFs -from ert.util.tvector import DoubleVector -import libenkf -class EnkfNode(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @staticmethod - def alloc(config_node): - node = EnkfNode(c_ptr = cfunc.alloc( config_node ) , parent = config_node) - return node - - def user_get(self, fs, key, report_step, iens, state, value): - return cfunc.user_get(self, fs, key, report_step, iens, state, value) - - def user_get_vector( self , fs , key , iens , state , vector): - return cfunc.user_get_vector( self , fs , key , iens , state, vector) - - def value_ptr(self): - cfunc.value_ptr(self) - - @property - def vector_storage(self): - return cfunc.vector_storage(self) -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "enkf_node" , EnkfNode ) - -# 3. Installing the c-functions used to manipulate ecl_kw instances. -# These functions are used when implementing the EclKW class, not -# used outside this scope. -cfunc = CWrapperNameSpace("enkf_node") - - -cfunc.free = cwrapper.prototype("void enkf_node_free( enkf_node )") -cfunc.alloc = cwrapper.prototype("c_void_p enkf_node_alloc( enkf_node)") -cfunc.user_get = cwrapper.prototype("bool enkf_node_user_get_no_id(enkf_node , enkf_fs , char* , int, int , c_uint, double*)") -cfunc.user_get_vector = cwrapper.prototype("bool enkf_node_user_get_vector( enkf_node , enkf_fs , char*, int, c_uint, double_vector)") -cfunc.value_ptr = cwrapper.prototype("void enkf_node_value_ptr(enkf_node)") -cfunc.vector_storage = cwrapper.prototype("bool enkf_node_vector_storage(enkf_node)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_obs.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_obs.py index 0ebf92ff64..2706af6419 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_obs.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_obs.py @@ -20,31 +20,22 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf -from ert.util.stringlist import StringList -from ert.enkf.obs_vector import ObsVector - class EnkfObs(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_config_file(self): - return cfunc.get_config_file(self) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - def alloc_typed_keylist(self, type): - return StringList(c_ptr = cfunc.alloc_typed_keylist(self, type), parent = self) - @property - def has_key(self, key): - return cfunc.has_key(self, key) + def has_key(self , key): + return cfunc.has_key( self ,key ) + - @property - def get_vector(self, key): - return ObsVector(cfunc.get_vector(self,key), parent = self) ################################################################## @@ -59,6 +50,3 @@ cfunc = CWrapperNameSpace("enkf_obs") cfunc.free = cwrapper.prototype("void enkf_obs_free( enkf_obs )") cfunc.get_config_file = cwrapper.prototype("char* enkf_obs_get_config_file( enkf_obs )") -cfunc.alloc_typed_keylist = cwrapper.prototype("c_void_p enkf_obs_alloc_typed_keylist(enkf_obs, int)") -cfunc.has_key = cwrapper.prototype("bool enkf_obs_has_key(enkf_obs, char*)") -cfunc.get_vector = cwrapper.prototype("c_void_p enkf_obs_get_vector(enkf_obs, char*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_state.py b/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_state.py deleted file mode 100644 index 0522ca7cf7..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/enkf_state.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'enkf_state.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -import libenkf -from ert.util.ctime import ctime -#from ert.util.ctime import time_t -class EnKFState(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - def kill_simulation(self): - cfunc.kill_simulation(self) - - def resubmit_simulation(self, sim_number): - cfunc.resubmit_simulation(self, sim_number) - - @property - def get_run_status(self): - return cfunc.get_run_status(self) - - @property - def get_start_time(self): - return cfunc.get_start_time(self) - - @property - def get_submit_time(self): - return cfunc.get_submit_time(self) -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "enkf_state" , EnKFState ) - -cfunc = CWrapperNameSpace("enkf_state") - -################################################################## -################################################################## -cfunc.free = cwrapper.prototype("void enkf_state_free( enkf_state )") -cfunc.kill_simulation = cwrapper.prototype("void enkf_state_kill_simulation(enkf_state)") -cfunc.resubmit_simulation = cwrapper.prototype("void enkf_state_resubmit_simulation(enkf_state, int)") -cfunc.get_run_status = cwrapper.prototype("int enkf_state_get_run_status(enkf_state)") -cfunc.get_start_time = cwrapper.prototype("int enkf_state_get_start_time(enkf_state)") -cfunc.get_submit_time = cwrapper.prototype("int enkf_state_get_submit_time(enkf_state)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/ens_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/ens_config.py index b5a689a9cc..49860688ba 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/ens_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/ens_config.py @@ -18,64 +18,42 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * -from ert.enkf.enkf_enum import * -import ert.enkf.libenkf -from ert.ecl.ecl_grid import EclGrid -from ert.enkf.enkf_config_node import EnkfConfigNode -from ert.util.stringlist import StringList - +from enkf_enum import * +import libenkf class EnsConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + def __del__(self): + if self.owner: + cfunc.free( self ) + + def has_key(self , key): return cfunc.has_key( self ,key ) - def get_node(self, key): - node = EnkfConfigNode( cfunc.get_node(self, key), parent = self) - return node - - @property - def alloc_keylist(self): - key_list = StringList( c_ptr = cfunc.alloc_keylist(self), parent = self) - return key_list - - def add_summary(self, key): - node = EnkfConfigNode( cfunc.add_summary(self, key, 2), parent = self) - return node - def add_gen_kw(self, key): - node = EnkfConfigNode( cfunc.add_gen_kw(self, key), parent = self) - return node - - def add_gen_data(self, key): - node = EnkfConfigNode( cfunc.add_gen_data(self, key), parent = self) - return node - - def add_field(self, key, eclipse_grid): - node = EnkfConfigNode( cfunc.add_field(self, key, eclipse_grid), parent = self) - return node - - def alloc_keylist_from_var_type(self, var_mask): - return StringList(c_ptr = cfunc.alloc_keylist_from_var_type(self,var_mask), parent = self) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "ens_config" , EnsConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("ens_config") -cfunc.free = cwrapper.prototype("void ensemble_config_free( ens_config )") -cfunc.has_key = cwrapper.prototype("bool ensemble_config_has_key( ens_config , char* )") -cfunc.get_node = cwrapper.prototype("c_void_p ensemble_config_get_node( ens_config , char*)") -cfunc.alloc_keylist = cwrapper.prototype("c_void_p ensemble_config_alloc_keylist( ens_config )") -cfunc.add_summary = cwrapper.prototype("c_void_p ensemble_config_add_summary( ens_config, char*, int)") -cfunc.add_gen_kw = cwrapper.prototype("c_void_p ensemble_config_add_gen_kw( ens_config, char*)") -cfunc.add_gen_data = cwrapper.prototype("c_void_p ensemble_config_add_gen_data( ens_config, char*)") -cfunc.add_field = cwrapper.prototype("c_void_p ensemble_config_add_field( ens_config, char*, ecl_grid)") + +cfunc.free = cwrapper.prototype("void ensemble_config_free( ens_config )") +cfunc.has_key = cwrapper.prototype("bool ensemble_config_has_key( ens_config , char* )") +cfunc.get_node = cwrapper.prototype("c_void_p ensemble_config_get_node( ens_config , char*)") +cfunc.alloc_keylist = cwrapper.prototype("c_void_p ensemble_config_alloc_keylist( ens_config )") +cfunc.add_summary = cwrapper.prototype("c_void_p ensemble_config_add_summary( ens_config, char*)") +cfunc.add_gen_kw = cwrapper.prototype("c_void_p ensemble_config_add_gen_kw( ens_config, char*)") +cfunc.add_gen_data = cwrapper.prototype("c_void_p ensemble_config_add_gen_data( ens_config, char*)") +cfunc.add_field = cwrapper.prototype("c_void_p ensemble_config_add_field( ens_config, char*, ecl_grid)") cfunc.alloc_keylist_from_var_type = cwrapper.prototype("c_void_p ensemble_config_alloc_keylist_from_var_type(ens_config, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/ert_template.py b/ThirdParty/Ert/devel/python/python/ert/enkf/ert_template.py index 59d763a6ad..dbb1ee5bd9 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/ert_template.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/ert_template.py @@ -22,32 +22,37 @@ from enkf_enum import * import libenkf class ErtTemplate(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) + + + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_template_file(self): - return cfunc.get_template_file(self) - @property - def get_target_file(self): - return cfunc.get_target_file(self) - @property - def get_args_as_string(self): - return cfunc.get_args_as_string(self) ################################################################## cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "ert_template" , ErtTemplate ) +cwrapper.registerType( "ert_template" , AnalysisConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("ert_template") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void ert_template_free( ert_template )") -cfunc.get_template_file = cwrapper.prototype("char* ert_template_get_template_file(ert_template)") -cfunc.get_target_file = cwrapper.prototype("char* ert_template_get_target_file(ert_template)") -cfunc.get_args_as_string = cwrapper.prototype("char* ert_template_get_args_as_string(ert_template)") +cfunc.alloc_list = cwrapper.prototype("c_void_p ert_templates_alloc_list(long)"), +cfunc.get_template = cwrapper.prototype("c_void_p ert_templates_get_template(long, char*)"), +cfunc.get_template_file = cwrapper.prototype("char* ert_template_get_template_file(long)"), +cfunc.get_target_file = cwrapper.prototype("char* ert_template_get_target_file(long)"), +cfunc.get_args_as_string = cwrapper.prototype("char* ert_template_get_args_as_string(long)"), +cfunc.clear = cwrapper.prototype("void ert_templates_clear(long)"), +cfunc.add_template = cwrapper.prototype("void ert_templates_add_template(long, char*, char*, char*, char*)"),] diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/ert_templates.py b/ThirdParty/Ert/devel/python/python/ert/enkf/ert_templates.py deleted file mode 100644 index fe7170c6f6..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/ert_templates.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'ert_templates.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -import libenkf -from ert.util.stringlist import StringList -from ert.enkf.ert_template import ErtTemplate -class ErtTemplates(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def alloc_list(self): - return StringList(c_ptr = cfunc.alloc_list(self), parent = self) - - def clear(self): - cfunc.clear(self) - - def get_template(self,key): - template = ErtTemplate( cfunc.get_template( self, key ), parent = self) - return template - - @property - def add_template(self, key, template_file, target_file, arg_string): - return ErtTemplate(cfunc.add_template(self, key, template_file, target_file, arg_string), parent = self) - - - -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "ert_templates" , ErtTemplates ) - -cfunc = CWrapperNameSpace("ert_templates") -################################################################## -################################################################## -cfunc.free = cwrapper.prototype("void ert_templates_free( ert_templates )") -cfunc.alloc_list = cwrapper.prototype("c_void_p ert_templates_alloc_list(ert_templates)") -cfunc.get_template = cwrapper.prototype("c_void_p ert_templates_get_template(ert_templates, char*)") -cfunc.clear = cwrapper.prototype("void ert_templates_clear(ert_templates)") -cfunc.add_template = cwrapper.prototype("void ert_templates_add_template(ert_templates, char*, char*, char*, char*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/field.py b/ThirdParty/Ert/devel/python/python/ert/enkf/field.py deleted file mode 100644 index 679f114ebf..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/field.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'field.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -import libenkf -class FieldObs(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - def ijk_get_double(self , i,j,k): - return cfunc.ijk_get_double( self ,i,j,k ) - - - -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "field" , FieldObs ) - -# 3. Installing the c-functions used to manipulate ecl_kw instances. -# These functions are used when implementing the EclKW class, not -# used outside this scope. -cfunc = CWrapperNameSpace("field") - - -cfunc.free = cwrapper.prototype("void field_free( field )") -cfunc.ijk_get_double = cwrapper.prototype("double field_ijk_get_double(field, int, int, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/field_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/field_config.py index 6f333cc876..3ff7b3a1f5 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/field_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/field_config.py @@ -20,59 +20,34 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf -class FieldConfig(CClass): +class GenDataConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_type(self): - return cfunc.get_type(self) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_truncation_mode(self): - return cfunc.get_truncation_mode(self) - @property - def get_truncation_min(self): - return cfunc.get_truncation_min(self) + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_init_transform_name(self): - return cfunc.get_init_transform_name(self) - @property - def get_output_transform_name(self): - return cfunc.get_output_transform_name(self) - @property - def get_truncation_max(self): - return cfunc.get_truncation_max(self) - - @property - def get_nx(self): - return cfunc.get_nx(self) - - @property - def get_ny(self): - return cfunc.get_ny(self) - - @property - def get_nz(self): - return cfunc.get_ny(self) - - def ijk_active(self, i,j,k): - return cfunc.ijk_active(self,i,j,k) ################################################################## + cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "field_config" , FieldConfig ) +cwrapper.registerType( "field_config" , GenDataConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("field_config") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void field_config_free( field_config )") cfunc.get_type = cwrapper.prototype("int field_config_get_type(field_config)") cfunc.get_truncation_mode = cwrapper.prototype("int field_config_get_truncation_mode(field_config)") @@ -80,8 +55,4 @@ cfunc.get_truncation_min = cwrapper.prototype("double field_config_get_tr cfunc.get_truncation_max = cwrapper.prototype("double field_config_get_truncation_max(field_config)") cfunc.get_init_transform_name = cwrapper.prototype("char* field_config_get_init_transform_name(field_config)") cfunc.get_output_transform_name = cwrapper.prototype("char* field_config_get_output_transform_name(field_config)") -cfunc.ijk_active = cwrapper.prototype("bool field_config_ijk_active(field_config, int, int, int)") -cfunc.get_nx = cwrapper.prototype("int field_config_get_nx(field_config)") -cfunc.get_ny = cwrapper.prototype("int field_config_get_ny(field_config)") -cfunc.get_nz = cwrapper.prototype("int field_config_get_nz(field_config)") -cfunc.get_grid = cwrapper.prototype("c_void_p field_config_get_grid(field_config)") +cfunc.get_init_file_fmt = cwrapper.prototype("char* field_config_get_init_file_fmt(field_config)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/gen_data_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/gen_data_config.py index 39144f0580..b5f9f4dd07 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/gen_data_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/gen_data_config.py @@ -20,34 +20,20 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf - class GenDataConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_template_file(self): - return cfunc.get_template_file(self) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_template_key(self): - return cfunc.get_template_key(self) - @property - def get_initial_size(self): - return cfunc.get_initial_size(self) - - @property - def get_output_format(self): - return cfunc.get_output_format(self) - - @property - def get_input_format(self): - return cfunc.get_input_format(self) + def has_key(self , key): + return cfunc.has_key( self ,key ) @@ -67,5 +53,4 @@ cfunc.get_output_format = cwrapper.prototype("c_void_p gen_data_config_get_ cfunc.get_input_format = cwrapper.prototype("c_void_p gen_data_config_get_input_format(gen_data_config)") cfunc.get_template_file = cwrapper.prototype("char* gen_data_config_get_template_file(gen_data_config)") cfunc.get_template_key = cwrapper.prototype("char* gen_data_config_get_template_key(gen_data_config)") -cfunc.get_initial_size = cwrapper.prototype("int gen_data_config_get_initial_size(gen_data_config)") - +cfunc.get_init_file_fmt = cwrapper.prototype("char* gen_data_config_get_init_file_fmt(gen_data_config)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/gen_kw_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/gen_kw_config.py index afe9def000..66cdf2795b 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/gen_kw_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/gen_kw_config.py @@ -18,38 +18,37 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * -from ert.enkf.enkf_enum import * -import ert.enkf.libenkf -from ert.util.stringlist import StringList +from enkf_enum import * +import libenkf class GenKwConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_template_file(self): - return cfunc.get_template_file(self) - @property - def get_parameter_file(self): - return cfunc.get_parameter_file(self) + def has_key(self , key): + return cfunc.has_key( self ,key ) + - @property - def alloc_name_list(self): - return StringList(c_ptr = cfunc.alloc_name_list(self), parent = self) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "gen_kw_config" , GenKwConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("gen_kw_config") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void gen_kw_config_free( gen_kw_config )") cfunc.get_template_file = cwrapper.prototype("char* gen_kw_config_get_template_file(gen_kw_config)") +cfunc.get_init_file_fmt = cwrapper.prototype("char* gen_kw_config_get_init_file_fmt(gen_kw_config)") cfunc.get_parameter_file = cwrapper.prototype("char* gen_kw_config_get_parameter_file(gen_kw_config)") -cfunc.alloc_name_list = cwrapper.prototype("c_void_p gen_kw_config_alloc_name_list(gen_kw_config)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/local_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/local_config.py index 682c03823c..3b28a60050 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/local_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/local_config.py @@ -20,34 +20,33 @@ from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * import libenkf -from ert.util.stringlist import StringList class LocalConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_config_files(self): - config_files = StringList(c_ptr = cfunc.get_config_files(self), parent = self) - return config_files + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) + + + def has_key(self , key): + return cfunc.has_key( self ,key ) + - def clear_config_files(self): - cfunc.clear_config_files(self) - def add_config_file(self, file): - cfunc.add_config_file(self, file) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "local_config" , LocalConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("local_config") -################################################################## -################################################################## cfunc.free = cwrapper.prototype("void local_config_free( local_config )") cfunc.get_config_files = cwrapper.prototype("c_void_p local_config_get_config_files( local_config )") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/model_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/model_config.py index 1f5aea0808..ffb6fd8a11 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/model_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/model_config.py @@ -15,81 +15,48 @@ # for more details. import ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -from ert.job_queue.forward_model import ForwardModel -from libenkf import * -from ert.sched.libsched import * -from ert.sched.history import HistoryType -from ert.sched.sched_file import * -from ert.ecl.ecl_sum import * -from ert.sched.history import * +from ert.cwrap.cwrap import * +from ert.cwrap.cclass import CClass +from ert.util.tvector import * +from enkf_enum import * +import libenkf class ModelConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_enkf_sched_file(self): - return cfunc.get_enkf_sched_file( self ) - - def set_enkf_sched_file(self, file): - cfunc.get_enkf_sched_file( self , file) - - @property - def get_history_source(self): - return HistoryType(c_ptr = cfunc.get_history_source( self ) , parent = self) - - def set_history_source(self, history_source, sched_file, refcase): - return cfunc.select_history(self, history_source, sched_file, refcase) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_max_internal_submit(self): - return cfunc.get_max_internal_submit( self ) - def set_max_internal_submit(self, max): - cfunc.get_max_internal_submit( self , max) + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_forward_model(self): - ford_model = ForwardModel( c_ptr = cfunc.get_forward_model( self ), parent = self) - return ford_model - @property - def get_case_table_file(self): - return cfunc.get_case_table_file(self) - @property - def get_runpath_as_char(self): - return cfunc.get_runpath_as_char(self) - - def select_runpath(self, path_key): - return cfunc.select_runpath(self, path_key) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "model_config" , ModelConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("model_config") -################################################################## -################################################################## -cfunc.free = cwrapper.prototype("void model_config_free( model_config )") -cfunc.get_enkf_sched_file = cwrapper.prototype("char* model_config_get_enkf_sched_file( model_config )") -cfunc.set_enkf_sched_file = cwrapper.prototype("void model_config_set_enkf_sched_file( model_config, char*)") -cfunc.get_history_source = cwrapper.prototype("c_void_p model_config_get_history_source(model_config)") -cfunc.select_history = cwrapper.prototype("bool model_config_select_history(model_config, history_type, c_void_p, ecl_sum)") -cfunc.get_forward_model = cwrapper.prototype("c_void_p model_config_get_forward_model(model_config)") -cfunc.get_max_internal_submit = cwrapper.prototype("int model_config_get_max_internal_submit(model_config)") -cfunc.set_max_internal_submit = cwrapper.prototype("void model_config_set_max_internal_submit(model_config, int)") -cfunc.get_case_table_file = cwrapper.prototype("char* model_config_get_case_table_file(model_config)") -cfunc.get_runpath_as_char = cwrapper.prototype("char* model_config_get_runpath_as_char(model_config)") -cfunc.select_runpath = cwrapper.prototype("void model_config_select_runpath(model_config, char*)") +cfunc.free = cwrapper.prototype("void model_config_free( model_config )") +cfunc.get_enkf_sched_file = cwrapper.prototype("char* model_config_get_enkf_sched_file( model_config )") +cfunc.set_enkf_sched_file = cwrapper.prototype("void model_config_set_enkf_sched_file( model_config, char*)") +cfunc.get_history_source = cwrapper.prototype("int model_config_get_history_source(model_config)") +cfunc.set_history_source = cwrapper.prototype("void model_config_set_history_source(model_config, int)") +cfunc.get_forward_model = cwrapper.prototype("c_void_p model_config_get_forward_model(model_config)") +cfunc.get_max_resample = cwrapper.prototype("int model_config_get_max_resample(model_config)") +cfunc.set_max_resample = cwrapper.prototype("void model_config_set_max_resample(model_config, int)") +cfunc.get_case_table_file = cwrapper.prototype("char* model_config_get_case_table_file(model_config)") +cfunc.get_runpath_as_char = cwrapper.prototype("char* model_config_get_runpath_as_char(model_config)") +cfunc.set_runpath_fmt = cwrapper.prototype("void model_config_set_runpath_fmt(model_config, char*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/obs_vector.py b/ThirdParty/Ert/devel/python/python/ert/enkf/obs_vector.py deleted file mode 100644 index 4bed9d61ac..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/obs_vector.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (C) 2012 Statoil ASA, Norway. -# -# The file 'obs_vector.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * -import libenkf -class ObsVector(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_state_kw(self): - return cfunc.get_state_kw(self) - - def iget_node(self, index): - cfunc.iget_node(self,index) - - @property - def get_num_active(self): - return cfunc.get_num_active(self) - - @property - def iget_active(self, index): - return cfunc.iget_active(self, index) -################################################################## - -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "obs_vector" , ObsVector ) - -# 3. Installing the c-functions used to manipulate ecl_kw instances. -# These functions are used when implementing the EclKW class, not -# used outside this scope. -cfunc = CWrapperNameSpace("obs_vector") - - -cfunc.free = cwrapper.prototype("void obs_vector_free( obs_vector )") -cfunc.get_state_kw = cwrapper.prototype("char* obs_vector_get_state_kw( obs_vector )") -cfunc.iget_node = cwrapper.prototype("void obs_vector_iget_node( obs_vector, int)") -cfunc.get_num_active = cwrapper.prototype("int obs_vector_get_num_active( obs_vector )") -cfunc.iget_active = cwrapper.prototype("bool obs_vector_iget_active( obs_vector, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/plot_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/plot_config.py index db97918529..33ea1c309e 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/plot_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/plot_config.py @@ -19,72 +19,35 @@ from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * from enkf_enum import * -import ert.enkf.libenkf - +import libenkf class PlotConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) + + + def has_key(self , key): + return cfunc.has_key( self ,key ) + - @property - def get_path(self): - return cfunc.get_path(self) - - def set_path(self, path): - cfunc.set_path(self, path) - - @property - def get_driver(self): - return cfunc.get_driver(self) - def set_driver(self, driver): - cfunc.set_driver(self, driver) - - @property - def get_errorbar_max(self): - return cfunc.get_errorbar_max(self) - - def set_errorbar_max(self, max): - cfunc.set_errorbar_max(self, max) - - @property - def get_width(self): - return cfunc.get_width(self) - - def set_width(self, value): - cfunc.set_width(self, value) - - @property - def get_height(self): - return cfunc.get_height(self) - - def set_height(self, value): - cfunc.set_height(self, value) - - @property - def get_viewer(self): - return cfunc.get_viewer(self) - - def set_viewer(self, value): - cfunc.set_viewer(self, value) - - @property - def get_image_type(self): - return cfunc.get_image_type(self) - - def set_image_type(self, value): - cfunc.set_image_type(self, value) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "plot_config" , PlotConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("plot_config") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void plot_config_free( plot_config )") cfunc.get_path = cwrapper.prototype("char* plot_config_get_path(plot_config)") cfunc.set_path = cwrapper.prototype("void plot_config_set_path(plot_config, char*)") @@ -100,4 +63,3 @@ cfunc.get_viewer = cwrapper.prototype("char* plot_config_get_viewer(plo cfunc.set_viewer = cwrapper.prototype("void plot_config_set_viewer(plot_config, char*)") cfunc.get_image_type = cwrapper.prototype("char* plot_config_get_image_type(plot_config)") cfunc.set_image_type = cwrapper.prototype("void plot_config_set_image_type(plot_config, char*)") - diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/site_config.py b/ThirdParty/Ert/devel/python/python/ert/enkf/site_config.py index 6fd69b037c..a91da3a5b9 100644 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/site_config.py +++ b/ThirdParty/Ert/devel/python/python/ert/enkf/site_config.py @@ -15,153 +15,38 @@ # for more details. import ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from enkf_enum import * +from ert.cwrap.cwrap import * +from ert.cwrap.cclass import CClass +from ert.util.tvector import * +from enkf_enum import * import libenkf -from ert.enkf.libenkf import * -from ert.job_queue.ext_joblist import ExtJoblist -from ert.job_queue.job_queue import JobQueue -from ert.util.stringlist import StringList - - - - class SiteConfig(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def get_queue_name(self): - return cfunc.get_queue_name( self ) - def set_job_queue(self, queue): - cfunc.set_job_queue( self , queue) + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_lsf_queue(self): - return cfunc.get_lsf_queue( self ) - def set_lsf_queue(self, queue): - cfunc.set_lsf_queue( self , queue) - @property - def get_max_running_lsf(self): - return cfunc.get_max_running_lsf( self ) - - def set_max_running_lsf(self, max_running): - cfunc.set_max_running_lsf( self , max_running) - - @property - def get_lsf_request(self): - return cfunc.get_lsf_request( self ) - - def set_lsf_request(self, lsf_request): - cfunc.set_lsf_request( self , lsf_request) - - def clear_rsh_host_list(self): - cfunc.set_rsh_host_list( self ) - - @property - def get_rsh_command(self): - return cfunc.get_rsh_command( self ) - - def set_rsh_command(self, rsh_command): - cfunc.set_rsh_command( self , rsh_command) - - @property - def get_max_running_rsh(self): - return cfunc.get_max_running_rsh( self ) - - def set_max_running_rsh(self, max_running): - cfunc.set_max_running_rsh( self , max_running) - - @property - def get_max_running_local(self): - return cfunc.get_max_running_local( self ) - - def set_max_running_local(self, max_running): - cfunc.set_max_running_local( self , max_running) - - @property - def get_job_script(self): - return cfunc.get_job_script( self ) - - def set_job_script(self, job_script): - cfunc.set_job_script( self , job_script) - - @property - def get_env_hash(self): - return cfunc.get_env_hash( self ) - - def setenv(self, var, value): - cfunc.setenv( self , var, value) - - def clear_env(self): - cfunc.clear_env( self ) - - @property - def get_path_variables(self): - return StringList(c_ptr = cfunc.get_path_variables( self ), parent = self) - - @property - def get_path_values(self): - return StringList(c_ptr = cfunc.get_path_values( self ), parent = self) - - def clear_pathvar(self): - cfunc.clear_pathvar( self ) - - def update_pathvar(self, pathvar, value): - cfunc.update_pathvar( self ) - - @property - def get_installed_jobs(self): - installed_jobs = ExtJoblist( cfunc.get_installed_jobs( self ), parent = self) - return installed_jobs - - @property - def get_max_submit(self): - return cfunc.get_max_submit( self ) - - def set_max_submit(self, max): - cfunc.set_max_submit( self , max) - - @property - def get_license_root_path(self): - return cfunc.get_license_root_path( self ) - - def set_license_root_pathmax_submit(self, path): - cfunc.set_license_root_path( self , path) - - @property - def queue_is_running(self): - return cfunc.queue_is_running( self ) - - @property - def get_job_queue(self): - return JobQueue( c_ptr = cfunc.get_job_queue(self), parent = self) - - @property - def get_rsh_host_list(self): - return cfunc.get_rsh_host_list(self) - - def add_rsh_host(self, host, max_running): - cfunc.add_rsh_host(self, host, max_running) ################################################################## cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "site_config" , SiteConfig ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("site_config") -################################################################## -################################################################## cfunc.free = cwrapper.prototype("void site_config_free( site_config )") cfunc.get_queue_name = cwrapper.prototype("char* site_config_get_queue_name(site_config)") @@ -186,14 +71,14 @@ cfunc.get_max_submit = cwrapper.prototype("int site_config_get_max_submit cfunc.set_max_submit = cwrapper.prototype("void site_config_set_max_submit(site_config, int)") cfunc.get_license_root_path = cwrapper.prototype("char* site_config_get_license_root_path(site_config)") cfunc.set_license_root_path = cwrapper.prototype("void site_config_set_license_root_path(site_config, char*)") -cfunc.get_job_script = cwrapper.prototype("char* site_config_get_job_script(site_config)") +cfunc.get_job_script = cwrapper.prototype("char* site_config_get_job_script(site_config)"), cfunc.set_job_script = cwrapper.prototype("void site_config_set_job_script(site_config, char*)") -cfunc.get_env_hash = cwrapper.prototype("c_void_p site_config_get_env_hash(site_config)") -cfunc.clear_env = cwrapper.prototype("void site_config_clear_env(site_config)") +cfunc.get_env_hash = cwrapper.prototype("c_void_p site_config_get_env_hash(site_config)"), +cfunc.clear_env = cwrapper.prototype("void site_config_clear_env(site_config)"), cfunc.setenv = cwrapper.prototype("void site_config_setenv(site_config, char*, char*)") -cfunc.get_path_variables = cwrapper.prototype("c_void_p site_config_get_path_variables(site_config)") -cfunc.get_path_values = cwrapper.prototype("c_void_p site_config_get_path_values(site_config)") -cfunc.clear_pathvar = cwrapper.prototype("void site_config_clear_pathvar(site_config)") +cfunc.get_path_variables = cwrapper.prototype("c_void_p site_config_get_path_variables(site_config)"), +cfunc.get_path_values = cwrapper.prototype("c_void_p site_config_get_path_values(site_config)"), +cfunc.clear_pathvar = cwrapper.prototype("void site_config_clear_pathvar(site_config)"), cfunc.update_pathvar = cwrapper.prototype("void site_config_update_pathvar(site_config, char*, char*)") -cfunc.get_job_queue = cwrapper.prototype("c_void_p site_config_get_job_queue(site_config)") -cfunc.queue_is_running = cwrapper.prototype("bool site_config_queue_is_running(site_config)") +cfunc.get_installed_jobs = cwrapper.prototype("c_void_p site_config_get_installed_jobs(site_config)"), +cfunc.get_license_root_path = cwrapper.prototype("char* site_config_get_license_root_path(site_config)") diff --git a/ThirdParty/Ert/devel/python/python/ert/enkf/time_map.py b/ThirdParty/Ert/devel/python/python/ert/enkf/time_map.py deleted file mode 100644 index 086ca8e6b9..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/enkf/time_map.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'time_map.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.ctime import ctime -from ert.util.tvector import * -from enkf_enum import * -import libenkf -from ert.enkf.libenkf import * -from ert.ert.erttypes import time_t - -class TimeMap(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def iget_sim_days(self, step): - return cfunc.iget_sim_days(self,step) - - def iget(self,step): - return cfunc.iget(self,step) - -################################################################## -cwrapper = CWrapper( libenkf.lib ) -cwrapper.registerType( "time_map" , TimeMap ) - -cfunc = CWrapperNameSpace("time_map") - -################################################################## -################################################################## - -cfunc.free = cwrapper.prototype("void time_map_free( time_map )") -cfunc.iget_sim_days = cwrapper.prototype("double time_map_iget_sim_days(time_map, int)") -cfunc.iget = cwrapper.prototype("int time_map_iget(time_map, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/ert/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/ert/CMakeLists.txt deleted file mode 100644 index 290956e8d9..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/ert/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert.ert" ${PYTHON_INSTALL_PREFIX}/ert/ert "__init__.py;enums.py;erttypes.py;ertwrapper.py;c_enums.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert/ert/c_enums.py b/ThirdParty/Ert/devel/python/python/ert/ert/c_enums.py deleted file mode 100644 index 1b760d2306..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/ert/c_enums.py +++ /dev/null @@ -1,79 +0,0 @@ -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'c_enums.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. -from ctypes import * - -class EnumerationType(type(c_uint)): - def __new__(metacls, name, bases, dict): - if not "_members_" in dict: - _members_ = {} - for key,value in dict.items(): - if not key.startswith("_"): - _members_[key] = value - dict["_members_"] = _members_ - cls = type(c_uint).__new__(metacls, name, bases, dict) - for key,value in cls._members_.items(): - globals()[key] = value - return cls - - def __contains__(self, value): - return value in self._members_.values() - - def __repr__(self): - return "" % self.__name__ - -class Enumeration(c_uint): - __metaclass__ = EnumerationType - _members_ = {} - def __init__(self, value): - for k,v in self._members_.items(): - if v == value: - self.name = k - break - else: - raise ValueError("No enumeration member with value %r" % value) - c_uint.__init__(self, value) - - - @classmethod - def from_param(cls, param): - if isinstance(param, Enumeration): - if param.__class__ != cls: - raise ValueError("Cannot mix enumeration members") - else: - return param - else: - return cls(param) - - def __repr__(self): - return "" % (self.name, self.value, self.__class__) -#------------------------------------------------------------------- -# enum implementations -#------------------------------------------------------------------- - -class state_enum(Enumeration): - UNDEFINED = 0 - SERIALIZED = 1 - FORECAST = 2 - ANALYZED = 4 - BOTH = 6 - -class var_type(Enumeration): - INVALID_VAR = 0 - PARAMETER = 1 - DYNAMIC_STATE = 2 - DYNAMIC_RESULT = 4 - STATIC_STATE = 8 - INDEX_STATE = 16 diff --git a/ThirdParty/Ert/devel/python/python/ert/ert/enums.py b/ThirdParty/Ert/devel/python/python/ert/ert/enums.py index 0825ada781..93af61dcee 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ert/enums.py +++ b/ThirdParty/Ert/devel/python/python/ert/ert/enums.py @@ -161,21 +161,6 @@ enkf_impl_type.GEN_KW = enkf_impl_type("Keyword", 107) enkf_impl_type.SUMMARY = enkf_impl_type("Summary", 110) enkf_impl_type.GEN_DATA = enkf_impl_type("Data", 113) -class enkf_var_type(enum): - #INVALID_VAR = None #, /* */ - PARAMETER = None #, /* A parameter which is updated with enkf: PORO , MULTFLT , ..*/ - DYNAMIC_STATE = None #, /* Dynamic data which are needed for a restart - i.e. pressure and saturations. */ - DYNAMIC_RESULT = None #, /* Dynamic results which are NOT needed for a restart - i.e. well rates. */ - #STATIC_STATE = None #, /* Keywords like XCON++ from eclipse restart files - which are just dragged along */ - #INDEX_STATE = None - -#enkf_var_type.INVALID_VAR -enkf_var_type.PARAMETER = enkf_var_type("Parameter", 1) -enkf_var_type.DYNAMIC_STATE = enkf_var_type("DynamicState", 2) -enkf_var_type.DYNAMIC_RESULT = enkf_var_type("DynamicResult", 4) -#enkf_var_type.STATIC_STATE -#enkf_var_type.INDEX_STATE - class ert_job_status_type(enum): """These "enum" values are all copies from the header file "basic_queue_driver.h".""" @@ -284,17 +269,6 @@ keep_runpath_type.DEFAULT_KEEP = keep_runpath_type("DEFAULT_KEEP", 0) keep_runpath_type.EXPLICIT_DELETE = keep_runpath_type("EXPLICIT_DELETE", 1) keep_runpath_type.EXPLICIT_KEEP = keep_runpath_type("EXPLICIT_KEEP", 2) -class run_mode_type(enum): - ENKF_ASSIMILATION = None - ENSEMBLE_EXPERIMENT = None - SMOOTHER_UPDATE = None - INIT_ONLY = None - -run_mode_type.ENKF_ASSIMILATION = run_mode_type( "ENKF_ASSIMILATION", 1) -run_mode_type.ENKF_EXPERIMENT = run_mode_type( "ENKF_EXPERIMENT", 2) -run_mode_type.SMOOTHER_UPDATE = run_mode_type( "SMOOTHER_UPDATE", 4) -run_mode_type.INIT_ONLY = run_mode_type( "INIT_ONLY", 8) - class history_source_type(enum): SCHEDULE = None REFCASE_SIMULATED = None @@ -312,4 +286,4 @@ class obs_impl_type(enum): obs_impl_type.GEN_OBS = obs_impl_type("GEN_OBS", 1) obs_impl_type.SUMMARY_OBS = obs_impl_type("SUMMARY_OBS", 2) -obs_impl_type.FIELD_OBS = obs_impl_type("FIELD_OBS", 3) +obs_impl_type.FIELD_OBS = obs_impl_type("FIELD_OBS", 3) \ No newline at end of file diff --git a/ThirdParty/Ert/devel/python/python/ert/ert/erttypes.py b/ThirdParty/Ert/devel/python/python/ert/ert/erttypes.py index 456f5a291e..777d6be4de 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ert/erttypes.py +++ b/ThirdParty/Ert/devel/python/python/ert/ert/erttypes.py @@ -23,12 +23,6 @@ import ctypes class time_t(ctypes.c_long): """A convenience class for working with time_t objects.""" -# def __init__(self , c_ptr , parent = None): -# if parent: -# self.init_cref( c_ptr , parent) -# else: -# self.init_cobj( c_ptr , cfunc.free ) - def time(self): """Return this time_t as a time.localtime() object""" diff --git a/ThirdParty/Ert/devel/python/python/ert/ert/ertwrapper.py b/ThirdParty/Ert/devel/python/python/ert/ert/ertwrapper.py index 2d4a823efb..b6528e8349 100644 --- a/ThirdParty/Ert/devel/python/python/ert/ert/ertwrapper.py +++ b/ThirdParty/Ert/devel/python/python/ert/ert/ertwrapper.py @@ -23,9 +23,7 @@ import re import sys import os import erttypes -import ert -#import ert.enkf.enkf as enkf -import ert.enkf.enkf_main as enkf + def RH_version(): RH = open('/etc/redhat-release' , 'r').read().split()[6] @@ -44,9 +42,19 @@ class ErtWrapper: def bootstrap(self, enkf_config , site_config , strict = True): - self.main = enkf.EnKFMain.bootstrap( enkf_config, site_config, strict ) + self.prototype("long enkf_main_bootstrap(char*, char*, bool)") + self.main = self.enkf.enkf_main_bootstrap(site_config, enkf_config, strict) print "\nBootstrap complete!" + + self.plot_config = self.__getErtPointer("enkf_main_get_plot_config") + self.analysis_config = self.__getErtPointer("enkf_main_get_analysis_config") + self.ecl_config = self.__getErtPointer("enkf_main_get_ecl_config") + self.site_config = self.__getErtPointer("enkf_main_get_site_config") + self.ensemble_config = self.__getErtPointer("enkf_main_get_ensemble_config") + self.model_config = self.__getErtPointer("enkf_main_get_model_config") + self.logh = self.__getErtPointer("enkf_main_get_logh") + self.initializeTypes() atexit.register(self.cleanup) @@ -77,7 +85,7 @@ class ErtWrapper: sys.exit("Need a value for environment variable LSF_HOME") self.util = self.__loadLibrary( "libert_util" ) - self.__loadLibrary( "libert_geometry" ) + self.__loadLibrary( "libgeometry" ) self.ecl = self.__loadLibrary( "libecl" ) self.__loadLibrary( "libsched" ) self.__loadLibrary( "librms" ) @@ -125,7 +133,7 @@ class ErtWrapper: prototype expects a string formatted like this: - #type functionName(type, ... ,type)# + "type functionName(type, ... ,type)" where type is a type available to ctypes Some type are automatically converted: @@ -173,6 +181,12 @@ class ErtWrapper: return func def initializeTypes(self): + self.prototype("char* stringlist_iget(long, int)", lib=self.util) + self.prototype("long stringlist_alloc_new()", lib=self.util) + self.prototype("void stringlist_append_copy(long, char*)", lib=self.util) + self.prototype("int stringlist_get_size(long)", lib=self.util) + self.prototype("void stringlist_free(long)", lib=self.util) + self.prototype("long hash_iter_alloc(long)", lib=self.util) self.prototype("char* hash_iter_get_next_key(long)", lib=self.util) self.prototype("char* hash_get(long, char*)", lib=self.util) @@ -184,6 +198,12 @@ class ErtWrapper: self.prototype("char* subst_list_iget_key(long, int)", lib=self.util) self.prototype("char* subst_list_iget_value(long, int)", lib=self.util) + self.prototype("long bool_vector_alloc(int, bool)", lib=self.util) + self.prototype("void bool_vector_iset(long, int, bool)", lib=self.util) + self.prototype("long bool_vector_get_ptr(long)", lib=self.util) + self.prototype("void bool_vector_free(long)", lib=self.util) + + self.prototype("void enkf_main_free(long)") self.prototype("void enkf_main_fprintf_config(long)") self.prototype("void enkf_main_create_new_config(long , char*, char* , char* , int)") @@ -193,6 +213,38 @@ class ErtWrapper: erttypes.double_vector.initialize(self) + def getStringList(self, stringlist_pointer, free_after_use=False): + """Retrieve a list of strings""" + result = [] + + if stringlist_pointer == 0: + return result + + number_of_strings = self.util.stringlist_get_size(stringlist_pointer) + + for index in range(number_of_strings): + result.append(self.util.stringlist_iget(stringlist_pointer, index)) + + if free_after_use: + self.freeStringList(stringlist_pointer) + + return result + + def createStringList(self, list): + """Creates a new string list from the specified list. Remember to free the list after use.""" + sl = self.util.stringlist_alloc_new() + + for item in list: + self.util.stringlist_append_copy(sl , item) + + return sl + + + def freeStringList(self, stringlistpointer): + """Must be used if the stringlist was allocated on the python side""" + self.util.stringlist_free(stringlistpointer) + + def getHash(self, hashpointer, intValue = False, return_type="char*"): """Retrieves a hash as a list of 2 element lists""" if hashpointer == 0: @@ -236,10 +288,27 @@ class ErtWrapper: return func( self.main ) + def createBoolVector(self, size, list): + """Allocates a bool vector""" + mask = self.util.bool_vector_alloc(size , False) + + for index in list: + self.util.bool_vector_iset(mask, index, True) + + return mask + + def getBoolVectorPtr(self, mask): + """Returns the pointer to a bool vector""" + return self.util.bool_vector_get_ptr(mask) + + def freeBoolVector(self, mask): + """Frees an allocated bool vector""" + self.util.bool_vector_free(mask) + def cleanup(self): """Called at atexit to clean up before shutdown""" print "Calling enkf_main_free()" - self.main.__del__ + self.enkf.enkf_main_free(self.main) def nonify(self, s): """Convert an empty string to None.""" @@ -247,7 +316,7 @@ class ErtWrapper: def save(self): """Save the state of ert to a configuration file.""" - self.main.fprintf_config + self.enkf.enkf_main_fprintf_config(self.main) diff --git a/ThirdParty/Ert/devel/python/python/ert/job_queue/driver.py b/ThirdParty/Ert/devel/python/python/ert/job_queue/driver.py index 27b84d9fcb..e0866bfd94 100644 --- a/ThirdParty/Ert/devel/python/python/ert/job_queue/driver.py +++ b/ThirdParty/Ert/devel/python/python/ert/job_queue/driver.py @@ -146,6 +146,7 @@ cfunc.submit = cwrapper.prototype("c_void_p queue_driver_submit_job( cfunc.free_job = cwrapper.prototype("void queue_driver_free_job( driver , job )") cfunc.cget_status = cwrapper.prototype("int job_queue_get_status( driver , job)") cfunc.kill_job = cwrapper.prototype("void queue_driver_kill_job( driver , job )") +cfunc.set_str_option = cwrapper.prototype("void queue_driver_set_string_option( driver , char* , char*)") cfunc.set_max_running = cwrapper.prototype("void queue_driver_set_max_running( driver , int )") cfunc.get_max_running = cwrapper.prototype("int queue_driver_get_max_running( driver )") diff --git a/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_job.py b/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_job.py index 3031e62c35..5cb9458e88 100644 --- a/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_job.py +++ b/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_job.py @@ -18,118 +18,38 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * +from ert.enkf.enkf_enum import * import libjob_queue + class ExtJob(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_private_args_as_string(self): - return cfunc.get_private_args_as_string(self) - - def set_private_args_as_string(self, args): - cfunc.set_private_args_as_string(self, args) - - @property - def get_help_text(self): - return cfunc.get_help_text(self) - - @property - def is_private(self): - return cfunc.is_private(self) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr - @property - def get_config_file(self): - return cfunc.get_config_file(self) - - def set_config_file(self, config_file): - cfunc.set_config_file - @property - def get_stdin_file(self): - return cfunc.get_stdin_file(self) - - def set_stdin_file(self, file): - cfunc.set_stdin_file(self, file) - - @property - def get_stdout_file(self): - return cfunc.get_stdout_file(self) + def __del__(self): + if self.owner: + cfunc.free( self ) - def set_stdout_file(self, file): - cfunc.set_stdout_file(self, file) - - @property - def get_stderr_file(self): - return cfunc.get_stderr_file(self) - def set_stderr_file(self, file): - cfunc.set_stderr_file(self, file) + def has_key(self , key): + return cfunc.has_key( self ,key ) - @property - def get_target_file(self): - return cfunc.get_target_file(self) - def set_target_file(self, file): - cfunc.set_target_file(self, file) - - @property - def get_executable(self): - return cfunc.get_executable(self) - - def set_executable(self, executable): - cfunc.set_executable(self, executable) - - @property - def get_max_running(self): - return cfunc.get_max_running(self) - - def set_max_running(self, max_running): - cfunc.set_max_running(self, max_running) - - @property - def get_max_running_minutes(self): - return cfunc.get_max_running_minutes(self) - - def set_max_running_minutes(self, min): - cfunc.set_max_running_minutes(self, min) - - @property - def get_environment(self): - return cfunc.get_environment(self) - - def set_environment(self, key, value): - cfunc.set_environment(self, key, value) - - def clear_environment(self): - cfunc. clear_environment(self) - - def save(self): - cfunc.save(self) - - @staticmethod - def alloc(name, root_path, private): - job = ExtJob(c_ptr = cfunc.alloc(name, root_path, private)) - return job - - @staticmethod - def fscanf_alloc(name, root_path, private, config_file): - job = ExtJob(c_ptr = cfunc.fscanf_alloc(name, root_path, private, config_file)) - return job ################################################################## cwrapper = CWrapper( libjob_queue.lib ) cwrapper.registerType( "ext_job" , ExtJob ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("ext_job") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void ext_job_free( ext_job )") cfunc.get_help_text = cwrapper.prototype("char* ext_job_get_help_text(ext_job)") cfunc.get_private_args_as_string = cwrapper.prototype("char* ext_job_get_private_args_as_string(ext_job)") diff --git a/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_joblist.py b/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_joblist.py index 855312173b..9199cca390 100644 --- a/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_joblist.py +++ b/ThirdParty/Ert/devel/python/python/ert/job_queue/ext_joblist.py @@ -18,45 +18,36 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * -from ert.enkf.enkf_enum import * -import ert.enkf.libenkf -from ert.util.stringlist import StringList -from ert.job_queue.ext_job import ExtJob +#from enkf_enum import * import libjob_queue class ExtJoblist(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_jobs(self): - return cfunc.get_jobs( self ) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) - @property - def alloc_list(self): - return StringList(c_ptr = cfunc.alloc_list( self ), parent = self) - def del_job(self, job): - return cfunc.del_job(self, job) + def has_key(self , key): + return cfunc.has_key( self ,key ) - def has_job(self, job): - return cfunc.has_job(self, job) - def get_job(self, job): - return ExtJob( c_ptr = cfunc.get_job( self , job), parent = self) - def add_job(self, job_name, new_job): - cfunc.add_job(self, job_name, new_job) ################################################################## cwrapper = CWrapper( libjob_queue.lib ) cwrapper.registerType( "ext_joblist" , ExtJoblist ) + +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("ext_joblist") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void ext_joblist_free( ext_joblist )") cfunc.alloc_list = cwrapper.prototype("c_void_p ext_joblist_alloc_list(ext_joblist)") cfunc.get_job = cwrapper.prototype("c_void_p ext_joblist_get_job(ext_joblist, char*)") diff --git a/ThirdParty/Ert/devel/python/python/ert/job_queue/forward_model.py b/ThirdParty/Ert/devel/python/python/ert/job_queue/forward_model.py index 2dd6db1d17..cf3885d1f1 100644 --- a/ThirdParty/Ert/devel/python/python/ert/job_queue/forward_model.py +++ b/ThirdParty/Ert/devel/python/python/ert/job_queue/forward_model.py @@ -18,44 +18,36 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * -from ert.enkf.enkf_enum import * -from ert.enkf.libenkf import * import libjob_queue -from ert.util.stringlist import StringList -from ert.job_queue.ext_job import ExtJob class ForwardModel(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def alloc_joblist(self): - s = StringList(initial = None, c_ptr = cfunc.alloc_joblist(self)) - return s + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr + + + def __del__(self): + if self.owner: + cfunc.free( self ) + + + def has_key(self , key): + return cfunc.has_key( self ,key ) - def iget_job(self, index): - job = ExtJob( cfunc.iget_job( self, index ), parent = self) - return job - def add_job(self, name): - job = ExtJob( cfunc.add_job( self, name ), parent = self) - return job - def clear(self): - cfunc.clear(self) ################################################################## cwrapper = CWrapper( libjob_queue.lib ) cwrapper.registerType( "forward_model" , ForwardModel ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("forward_model") -################################################################## -################################################################## + + cfunc.free = cwrapper.prototype("void forward_model_free( forward_model )") cfunc.clear = cwrapper.prototype("void forward_model_clear(forward_model)") cfunc.add_job = cwrapper.prototype("c_void_p forward_model_add_job(forward_model, char*)") cfunc.alloc_joblist = cwrapper.prototype("c_void_p forward_model_alloc_joblist(forward_model)") -cfunc.iget_job = cwrapper.prototype("c_void_p forward_model_iget_job( forward_model, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/job_queue/queue.py b/ThirdParty/Ert/devel/python/python/ert/job_queue/queue.py index 517e47e38a..4f99352b50 100644 --- a/ThirdParty/Ert/devel/python/python/ert/job_queue/queue.py +++ b/ThirdParty/Ert/devel/python/python/ert/job_queue/queue.py @@ -29,7 +29,7 @@ from ert.cwrap.cclass import CClass # Need to import this to ensure that the ctime type is registered import ert.util.ctime -from ert.util.ctime import ctime + import libjob_queue @@ -122,53 +122,40 @@ class JobQueue(CClass): # necessary to explitly inform the queue layer when all jobs have # been submitted. - #def __init__(self , driver = None, max_submit = 1 , size = 0, c_ptr = None): - # """ - # SHort doc... - # - # - # - # The @size argument is used to say how many jobs the queue will - # run, in total. -# -# size = 0: That means that you do not tell the queue in -# advance how many jobs you have. The queue will just run -# all the jobs you add, but you have to inform the queue in -# some way that all jobs have been submitted. To achieve -# this you should call the submit_complete() method when all -# jobs have been submitted.# -# -# size > 0: The queue will now exactly how many jobs to run, -# and will continue until this number of jobs have completed -# - it is not necessary to call the submit_complete() method -# in this case. -# """ -# -# OK_file = None -# exit_file = None -# if c_ptr: -# self.init_cobj( c_ptr , cfunc.free_queue ) -# else: -# c_ptr = cfunc.stringlist_alloc( ) -# self.init_cobj( c_ptr , cfunc.free_queue ) -# -# self.jobs = JobList() -# self.size = size -# -# self.exists = exList( self.jobs ) -# self.status = statusList( self.jobs ) -# self.run_time = runtimeList( self.jobs , self ) -# -# self.start( blocking = False ) -# if driver: -# self.driver = driver -# cfunc.set_driver( self , driver.c_ptr ) - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + def __init__(self , driver , max_submit = 1 , size = 0): + """ + SHort doc... + + + + The @size argument is used to say how many jobs the queue will + run, in total. + size = 0: That means that you do not tell the queue in + advance how many jobs you have. The queue will just run + all the jobs you add, but you have to inform the queue in + some way that all jobs have been submitted. To achieve + this you should call the submit_complete() method when all + jobs have been submitted. + + size > 0: The queue will now exactly how many jobs to run, + and will continue until this number of jobs have completed + - it is not necessary to call the submit_complete() method + in this case. + """ + + OK_file = None + exit_file = None + self.init_cobj( c_ptr , cfunc.free_queue ) + self.driver = driver + self.jobs = JobList() + self.size = size + + self.exists = exList( self.jobs ) + self.status = statusList( self.jobs ) + self.run_time = runtimeList( self.jobs , self ) + cfunc.set_driver( self , driver.c_ptr ) + self.start( blocking = False ) def kill_job(self , index): @@ -268,14 +255,8 @@ class JobQueue(CClass): def set_max_running( self , max_running ): self.driver.set_max_running( max_running ) - def user_exit(self): - cfunc.user_exit(self) + #max_running = property( fget = get_max_running , fset = set_max_running ) - def set_pause_on(self): - cfunc.set_pause_on - - def set_pause_off(self): - cfunc.set_pause_off ################################################################# @@ -284,6 +265,7 @@ cwrapper.registerType( "job_queue" , JobQueue ) cfunc = CWrapperNameSpace( "JobQueue" ) cfunc.user_exit = cwrapper.prototype("void job_queue_user_exit( job_queue )") +cfunc.alloc_queue = cwrapper.prototype("c_void_p job_queue_alloc( int , char* , char* )") cfunc.free_queue = cwrapper.prototype("void job_queue_free( job_queue )") cfunc.set_max_running = cwrapper.prototype("void job_queue_set_max_running( job_queue , int)") cfunc.get_max_running = cwrapper.prototype("int job_queue_get_max_running( job_queue )") @@ -299,8 +281,5 @@ cfunc.num_pending = cwrapper.prototype("int job_queue_get_num_pending( job_ cfunc.is_running = cwrapper.prototype("int job_queue_is_running( job_queue )") cfunc.submit_complete = cwrapper.prototype("void job_queue_submit_complete( job_queue )") cfunc.get_job_ptr = cwrapper.prototype("c_void_p job_queue_iget_job( job_queue , int)") -cfunc.iget_sim_start = cwrapper.prototype("int job_queue_iget_sim_start( job_queue , int)") +cfunc.iget_sim_start = cwrapper.prototype("time_t job_queue_iget_sim_start( job_queue , int)") cfunc.get_active_size = cwrapper.prototype("int job_queue_get_active_size( job_queue )") -cfunc.get_pause = cwrapper.prototype("bool job_queue_get_pause(job_queue)") -cfunc.set_pause_on = cwrapper.prototype("void job_queue_set_pause_on(job_queue)") -cfunc.set_pause_off = cwrapper.prototype("void job_queue_set_pause_off(job_queue)") diff --git a/ThirdParty/Ert/devel/python/python/ert/sched/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/sched/CMakeLists.txt index ac122f161d..16885d61a5 100644 --- a/ThirdParty/Ert/devel/python/python/ert/sched/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/ert/sched/CMakeLists.txt @@ -1 +1 @@ -add_python_package("Python ert.sched" ${PYTHON_INSTALL_PREFIX}/ert/sched "__init__.py;libsched.py;sched_file.py;sched.py;history.py" True) +add_python_package("Python ert.sched" ${PYTHON_INSTALL_PREFIX}/ert/sched "__init__.py;libsched.py;sched_file.py;sched.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert/sched/history.py b/ThirdParty/Ert/devel/python/python/ert/sched/history.py deleted file mode 100644 index b694f6f04d..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/sched/history.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'history.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.tvector import * -from ert.ecl.ecl_sum import * -import libsched -class HistoryType(CClass): - - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - def get_source_string(self): - return cfunc.get_source_string(self) - - @staticmethod - def alloc_from_refcase(refcase, use_history): - return HistoryType(cfunc.alloc_from_refcase(refcase, use_history)) - - @staticmethod - def alloc_from_sched_file(sched_file): - return HistoryType(cfunc.alloc_from_sched_file(":", sched_file)) -################################################################## - -cwrapper = CWrapper( libsched.lib ) -cwrapper.registerType( "history_type" , HistoryType ) - -cfunc = CWrapperNameSpace("history_type") - -################################################################## -################################################################## - -cfunc.free = cwrapper.prototype("void history_free( history_type )") -cfunc.get_source_string = cwrapper.prototype("char* history_get_source_string(history_type)") -cfunc.alloc_from_refcase = cwrapper.prototype("c_void_p history_alloc_from_refcase(ecl_sum, bool)") -cfunc.alloc_from_sched_file = cwrapper.prototype("c_void_p history_alloc_from_sched_file(char*, c_void_p)") diff --git a/ThirdParty/Ert/devel/python/python/ert/util/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert/util/CMakeLists.txt index 51ef2295a3..92e1128323 100644 --- a/ThirdParty/Ert/devel/python/python/ert/util/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/python/ert/util/CMakeLists.txt @@ -1,2 +1,2 @@ add_python_package("Python ert.util" ${PYTHON_INSTALL_PREFIX}/ert/util - "ctime.py;hash.py;__init__.py;latex.py;libutil.py;buffer.py;lookup_table.py;matrix.py;stat.py;stringlist.py;tvector.py;util_func.py;log.py" T) + "ctime.py;hash.py;__init__.py;latex.py;libutil.py;lookup_table.py;matrix.py;stat.py;stringlist.py;tvector.py;util_func.py" T) diff --git a/ThirdParty/Ert/devel/python/python/ert/util/buffer.py b/ThirdParty/Ert/devel/python/python/ert/util/buffer.py deleted file mode 100644 index b2111e1223..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert/util/buffer.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'buffer.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 ctypes -from ert.cwrap.cwrap import * -from ert.cwrap.cclass import CClass -from ert.util.ctime import ctime -from ert.util.tvector import * -import libutil -from ert.enkf.libenkf import * -#from ert.job_queue.ext_joblist import ExtJoblist - -class Buffer(CClass): - - def __init__(self , size , parent = None): - c_ptr = cfunc.alloc(size) - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - -################################################################## -cwrapper = CWrapper( libutil.lib ) -cwrapper.registerType( "buffer" , Buffer ) - -cfunc = CWrapperNameSpace("buffer") - -################################################################## -################################################################## - -cfunc.free = cwrapper.prototype("void buffer_free( buffer )") -cfunc.alloc = cwrapper.prototype("c_void_p buffer_alloc(int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/util/ctime.py b/ThirdParty/Ert/devel/python/python/ert/util/ctime.py index 576c65016e..5991d37514 100644 --- a/ThirdParty/Ert/devel/python/python/ert/util/ctime.py +++ b/ThirdParty/Ert/devel/python/python/ert/util/ctime.py @@ -59,9 +59,6 @@ class ctime(ctypes.c_long): def __lt__(self, other): return not self >= other - @property - def stripped(self): - return time.strptime(self, "%Y-%m-%d %H:%M:S%") cwrapper = CWrapper( None ) diff --git a/ThirdParty/Ert/devel/python/python/ert/util/log.py b/ThirdParty/Ert/devel/python/python/ert/util/log.py index 9a1fab28ba..29a597e95d 100644 --- a/ThirdParty/Ert/devel/python/python/ert/util/log.py +++ b/ThirdParty/Ert/devel/python/python/ert/util/log.py @@ -18,41 +18,36 @@ import ctypes from ert.cwrap.cwrap import * from ert.cwrap.cclass import CClass from ert.util.tvector import * -import libutil +from enkf_enum import * +import libenkf class Log(CClass): - def __init__(self , c_ptr , parent = None): - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) - - @property - def get_filename(self): - #return cfunc.get_filename( self ) - return "ert_config.log" - - def reopen(self, filename): - print "Logfile cannot be reopened" - #cfunc.reopen( self , filename) + def __init__(self , c_ptr = None): + self.owner = False + self.c_ptr = c_ptr - @property - def get_level(self): - #return cfunc.get_level( self ) - return 0 + + def __del__(self): + if self.owner: + cfunc.free( self ) + + + def has_key(self , key): + return cfunc.has_key( self ,key ) + + - def set_level(self, level): - cfunc.set_level( self , level) ################################################################## -cwrapper = CWrapper( libutil.lib ) +cwrapper = CWrapper( libenkf.lib ) cwrapper.registerType( "log" , Log ) +# 3. Installing the c-functions used to manipulate ecl_kw instances. +# These functions are used when implementing the EclKW class, not +# used outside this scope. cfunc = CWrapperNameSpace("log") -################################################################## -################################################################## cfunc.free = cwrapper.prototype("void log( log )") -cfunc.get_filename = cwrapper.prototype("char* log_get_filename(log)") -cfunc.reopen = cwrapper.prototype("void log_reopen(log, char*)") -cfunc.get_level = cwrapper.prototype("int log_get_level(log)") -cfunc.set_level = cwrapper.prototype("void log_set_level(log, int)") +cfunc.get_filename = cwrapper.prototype("char* log_get_filename(long)") +cfunc.reset_filename = cwrapper.prototype("void log_reset_filename(long, char*)") +cfunc.get_level = cwrapper.prototype("int log_get_level(long)") +cfunc.set_level = cwrapper.prototype("void log_set_level(long, int)") diff --git a/ThirdParty/Ert/devel/python/python/ert/util/stringlist.py b/ThirdParty/Ert/devel/python/python/ert/util/stringlist.py index d90ee9d975..833e733249 100644 --- a/ThirdParty/Ert/devel/python/python/ert/util/stringlist.py +++ b/ThirdParty/Ert/devel/python/python/ert/util/stringlist.py @@ -54,7 +54,7 @@ class StringList(CClass): # return obj - def __init__( self , initial = None , c_ptr = None, parent = None): + def __init__( self , initial = None , c_ptr = None): """ Creates a new stringlist instance. @@ -73,10 +73,7 @@ class StringList(CClass): ownership of the underlying object. """ if c_ptr: - if parent: - self.init_cref( c_ptr , parent) - else: - self.init_cobj( c_ptr , cfunc.free ) + self.init_cobj( c_ptr , cfunc.free ) else: c_ptr = cfunc.stringlist_alloc( ) self.init_cobj( c_ptr , cfunc.free ) @@ -196,7 +193,7 @@ class StringList(CClass): for s in self: slist.append( s ) return slist - + @property def last(self): """ @@ -237,5 +234,5 @@ cfunc.stringlist_iset = cwrapper.prototype("void stringlist_iset_copy( st cfunc.stringlist_get_size = cwrapper.prototype("int stringlist_get_size( stringlist )") cfunc.contains = cwrapper.prototype("bool stringlist_contains(stringlist , char*)") cfunc.sort = cwrapper.prototype("void stringlist_python_sort( stringlist , int)") -cfunc.pop = cwrapper.safe_prototype("char* stringlist_pop( stringlist )") -cfunc.last = cwrapper.safe_prototype("char* stringlist_get_last( stringlist )") +cfunc.pop = cwrapper.prototype("char* stringlist_pop( stringlist )") +cfunc.last = cwrapper.prototype("char* stringlist_get_last( stringlist )") diff --git a/ThirdParty/Ert/devel/python/python/ert/util/tvector.py b/ThirdParty/Ert/devel/python/python/ert/util/tvector.py index d8d7c874db..4b30ebe5ab 100644 --- a/ThirdParty/Ert/devel/python/python/ert/util/tvector.py +++ b/ThirdParty/Ert/devel/python/python/ert/util/tvector.py @@ -50,10 +50,6 @@ from ert.cwrap.cclass import CClass import numpy - - - - class TVector(CClass): @classmethod @@ -90,8 +86,8 @@ class TVector(CClass): new_obj.init_cobj( c_ptr , new_obj.free ) return new_obj - - def __new__( cls , **kwargs): + + def __new__( cls ): obj = object.__new__( cls ) return obj @@ -233,13 +229,10 @@ class TVector(CClass): subtraction operations: __isub__, __sub__ and __rsub__. """ if type(self) == type(delta): - if self.size == delta.size: - # This is vector + vector operation. - if not add: - self.scale( delta , -1 ) - self.inplace_add( self , delta ) - else: - raise ValueError("Incompatible sizes for add self:%d other:%d" % (self.size , delta.size)) + # This is vector + vector operation. + if not add: + self.scale( delta , -1 ) + self.inplace_add( self , delta ) else: if isinstance( delta , int ) or isinstance( delta, float): if not add: @@ -267,10 +260,7 @@ class TVector(CClass): if type(self) == type(factor): # This is vector * vector operation. - if self.size == factor.size: - self.inplace_mul( self , factor ) - else: - raise ValueError("Incompatible sizes for mul self:%d other:%d" % (self.size , factor.size)) + self.inplace_mul( self , factor ) else: if isinstance( factor , int ) or isinstance( factor, float): self.scale( self , factor ) @@ -330,14 +320,10 @@ class TVector(CClass): def __rmul__(self , factor): return self.__mul__( factor ) - - def __div__(self , divisor): - if isinstance( divisor , int ) or isinstance( divisor , float): - copy = self.__copy__( self ) - copy.div( copy , divisor ) - return copy - else: - raise TypeError("Divisor has wrong type:%s" % type( divisor )) + def __div__(self , factor): + copy = self.deep_copy() + copy /= factor + return copy # No __rdiv__() @@ -375,7 +361,7 @@ class TVector(CClass): def __len__(self): """ - The number of elements in the vector. + The number of elements in the vector." """ return self.get_size( self ) @@ -411,7 +397,6 @@ class TVector(CClass): else: raise IndexError - def min_index( self , reverse = False ): if self.get_size( self ) > 0: return self.get_min_index( self , reverse ) @@ -503,15 +488,11 @@ class TVector(CClass): ################################################################# -# The ctypes type system with CWrapper.registerType() needs access to -# the wrapper object class definitions, and the warpper objects need -# access to the cfunc.xxxx function objects; that is the reason we -# invoke the ugly cls.initialized flag. class DoubleVector(TVector): initialized = False - def __new__( cls , **kwargs ): + def __new__( cls , *arglist ): if not cls.initialized: cls.csort = cfunc.double_vector_sort cls.crsort = cfunc.double_vector_rsort @@ -535,7 +516,6 @@ class DoubleVector(TVector): cls.get_min_index = cfunc.double_vector_get_min_index cls.shift = cfunc.double_vector_shift cls.scale = cfunc.double_vector_scale - cls.div = cfunc.double_vector_div cls.inplace_add = cfunc.double_vector_inplace_add cls.inplace_mul = cfunc.double_vector_inplace_mul cls.cassign = cfunc.double_vector_assign @@ -549,7 +529,7 @@ class DoubleVector(TVector): cls.def_fmt = "%8.4f" cls.initialized = True - obj = TVector.__new__( cls , kwargs ) + obj = TVector.__new__( cls ) return obj @@ -557,7 +537,7 @@ class DoubleVector(TVector): class BoolVector(TVector): initialized = False - def __new__( cls , **kwargs ): + def __new__( cls , *arglist ): if not cls.initialized: cls.csort = cfunc.bool_vector_sort cls.crsort = cfunc.bool_vector_rsort @@ -581,7 +561,6 @@ class BoolVector(TVector): cls.get_min_index = cfunc.bool_vector_get_min_index cls.shift = cfunc.bool_vector_shift cls.scale = cfunc.bool_vector_scale - cls.div = cfunc.bool_vector_div cls.inplace_add = cfunc.bool_vector_inplace_add cls.inplace_mul = cfunc.bool_vector_inplace_mul cls.cassign = cfunc.bool_vector_assign @@ -595,7 +574,7 @@ class BoolVector(TVector): cls.def_fmt = "%8d" cls.initialized = True - obj = TVector.__new__( cls , **kwargs) + obj = TVector.__new__( cls ) return obj @@ -619,17 +598,6 @@ class BoolVector(TVector): new_obj.init_cobj( c_ptr , new_obj.free ) return new_obj - @classmethod - def create_from_list(cls, size, list): - """Allocates a bool vector from a Python list""" - new_obj = BoolVector.__new__(cls) - c_ptr = cfunc.bool_vector_alloc(size , False) - for index in list: - cfunc.bool_vector_iset(c_ptr, index, True) - - #c_ptr = cfunc.bool_vector_data_ptr(mask) - new_obj.init_cobj( c_ptr , new_obj.free ) - return new_obj @@ -639,10 +607,10 @@ class BoolVector(TVector): class IntVector(TVector): initialized = False - def __new__( cls , **kwargs ): + def __new__( cls , *arglist ): if not cls.initialized: cls.csort = cfunc.int_vector_sort - cls.crsort = cfunc.int_vector_rsort + cls.crsort = cfunc.int_vector_rsort cls.alloc = cfunc.int_vector_alloc cls.alloc_copy = cfunc.int_vector_alloc_copy cls.free = cfunc.int_vector_free @@ -663,7 +631,6 @@ class IntVector(TVector): cls.get_min_index = cfunc.int_vector_get_min_index cls.shift = cfunc.int_vector_shift cls.scale = cfunc.int_vector_scale - cls.div = cfunc.int_vector_div cls.inplace_add = cfunc.int_vector_inplace_add cls.inplace_mul = cfunc.int_vector_inplace_mul cls.cassign = cfunc.int_vector_assign @@ -677,7 +644,7 @@ class IntVector(TVector): cls.def_fmt = "%d" cls.initialized = True - obj = TVector.__new__( cls , **kwargs) + obj = TVector.__new__( cls ) return obj @classmethod @@ -701,6 +668,7 @@ class IntVector(TVector): return new_obj + ################################################################# buffer_from_ptr = ctypes.pythonapi.PyBuffer_FromMemory @@ -738,7 +706,6 @@ cfunc.double_vector_get_max_index = cwrapper.prototype("int double_vector_ cfunc.double_vector_get_min_index = cwrapper.prototype("int double_vector_get_min_index( double_vector , bool)") cfunc.double_vector_shift = cwrapper.prototype("void double_vector_shift( double_vector , double )") cfunc.double_vector_scale = cwrapper.prototype("void double_vector_scale( double_vector , double )") -cfunc.double_vector_div = cwrapper.prototype("void double_vector_div( double_vector , double )") cfunc.double_vector_inplace_add = cwrapper.prototype("void double_vector_inplace_add( double_vector , double_vector )") cfunc.double_vector_inplace_mul = cwrapper.prototype("void double_vector_inplace_mul( double_vector , double_vector )") cfunc.double_vector_assign = cwrapper.prototype("void double_vector_set_all( double_vector , double)") @@ -772,7 +739,6 @@ cfunc.int_vector_get_max_index = cwrapper.prototype("int int_vector_get cfunc.int_vector_get_min_index = cwrapper.prototype("int int_vector_get_min_index( int_vector , bool)") cfunc.int_vector_shift = cwrapper.prototype("void int_vector_shift( int_vector , int )") cfunc.int_vector_scale = cwrapper.prototype("void int_vector_scale( int_vector , int )") -cfunc.int_vector_div = cwrapper.prototype("void int_vector_div( int_vector , int )") cfunc.int_vector_inplace_add = cwrapper.prototype("void int_vector_inplace_add( int_vector , int_vector )") cfunc.int_vector_inplace_mul = cwrapper.prototype("void int_vector_inplace_mul( int_vector , int_vector )") cfunc.int_vector_assign = cwrapper.prototype("void int_vector_set_all( int_vector , int)") @@ -785,7 +751,7 @@ cfunc.int_vector_element_size = cwrapper.prototype("int int_vector_ele cfunc.bool_vector_alloc_copy = cwrapper.prototype("c_void_p bool_vector_alloc_copy( bool_vector )") -cfunc.bool_vector_alloc = cwrapper.prototype("c_void_p bool_vector_alloc( int , bool )") +cfunc.bool_vector_alloc = cwrapper.prototype("c_void_p bool_vector_alloc( bool , bool )") cfunc.bool_vector_strided_copy = cwrapper.prototype("c_void_p bool_vector_alloc_strided_copy( bool_vector , bool , bool , bool)") cfunc.bool_vector_free = cwrapper.prototype("void bool_vector_free( bool_vector )") cfunc.bool_vector_iget = cwrapper.prototype("bool bool_vector_iget( bool_vector , bool )") @@ -806,7 +772,6 @@ cfunc.bool_vector_get_max_index = cwrapper.prototype("bool bool_vector_ cfunc.bool_vector_get_min_index = cwrapper.prototype("bool bool_vector_get_min_index( bool_vector , bool)") cfunc.bool_vector_shift = cwrapper.prototype("void bool_vector_shift( bool_vector , bool )") cfunc.bool_vector_scale = cwrapper.prototype("void bool_vector_scale( bool_vector , bool )") -cfunc.bool_vector_div = cwrapper.prototype("void bool_vector_div( bool_vector , bool )") cfunc.bool_vector_inplace_add = cwrapper.prototype("void bool_vector_inplace_add( bool_vector , bool_vector )") cfunc.bool_vector_inplace_mul = cwrapper.prototype("void bool_vector_inplace_mul( bool_vector , bool_vector )") cfunc.bool_vector_assign = cwrapper.prototype("void bool_vector_set_all( bool_vector , bool)") @@ -821,4 +786,3 @@ cfunc.bool_vector_element_size = cwrapper.prototype("int bool_vector_e cfunc.create_active_list = cwrapper.prototype("c_void_p string_util_alloc_active_list( char* )") cfunc.create_active_mask = cwrapper.prototype("c_void_p string_util_alloc_active_mask( char* )") - diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/CMakeLists.txt deleted file mode 100644 index 9df22897b1..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -add_python_package( "Python ert_gui" ${PYTHON_INSTALL_PREFIX}/ert_gui "__init__.py;gert_main.py;newconfig.py" True) -add_subdirectory( pages ) -add_subdirectory( widgets ) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/README.txt b/ThirdParty/Ert/devel/python/python/ert_gui/README.txt deleted file mode 100644 index 203cbbf45b..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/README.txt +++ /dev/null @@ -1,43 +0,0 @@ -How to develop/run the GUI: - -You can run the gui in two ways: - -1a There are CMakeLists.txt files all the ways through the gui filesystem, - and if you build the ert distribution you will get file hierarchy - xxxx/build/python/ert_gui beside the xxxx/build/python/ert hierarchy. - - This is the way the gui should be organized when installed, to invoke the - gui this way: - - gert -v xxxx/build - - Observe that the 'xxxx' part must be an ABSOLUTE path, otherwise the - frontend script will search in the default installation directory. - - -1b Alternatively you can use the gert command to invoke the gui in the source - directory: - - gert -v xxxx/devel/python - - Observe only one 'python' above. - - - -2. You can invoke gui as a python module directly from the source, without - going through the gert frontend script. This requires that set several - environment variables: - - ERT_SITE_CONFIG -> /project/res/etc/ERT/site-config - ERT_SHARE_PATH -> xxxx/devel/libenkf/applications/ert_gui/share - LD_LIBRARY_PATH -> xxxx/build/lib64 - - And in addition you must source the local_csh file in - xxxx/devel/python/test to set the PYTHONPATH correctly. - - -About the ERT_SHARE_PATH variable: the correct value for the ERT_SHARE_PATH -variable is currently xxxx/devel/libenkf/applications/ert_gui/share, so if -you are using alternative 2 you get this one correctly, whereas if you use -alternative 1 it will be set to a generally incorrect value by the gert -frontend script. diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/CMakeLists.txt deleted file mode 100644 index 73e3edd049..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -add_python_package( "Python gui.pages" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages "application.py;__init__.py" True) -add_subdirectory( config ) -add_subdirectory( init ) -add_subdirectory( plot ) -add_subdirectory( run ) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/CMakeLists.txt deleted file mode 100644 index ffe74a9b66..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -add_python_package( "Python ert_gui.pages.config" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/config "__init__.py;analysis.py;configpages.py;eclipse.py;ensemble.py;observations.py;plot.py;queuesystem.py;simulation.py;systemenv.py" True) -add_subdirectory( jobs ) -add_subdirectory( parameters ) -add_subdirectory( simulations ) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/analysis.py b/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/analysis.py deleted file mode 100644 index ffd0839516..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/analysis.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (C) 2011 Statoil ASA, Norway. -# -# The file 'analysis.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. - - -# ---------------------------------------------------------------------------------------------- -# Analysis tab -# ---------------------------------------------------------------------------------------------- -from ert_gui.widgets.checkbox import CheckBox -from ert_gui.widgets.spinnerwidgets import IntegerSpinner, DoubleSpinner, DoubleSpinner -import ert_gui.widgets.tablewidgets -from ert_gui.widgets.pathchooser import PathChooser -from PyQt4 import QtGui -import ert.enkf - -def createAnalysisPage(configPanel, parent): - configPanel.startPage("Analysis") - - r = configPanel.addRow(CheckBox(parent, "ENKF rerun", "config/analysis/enkf_rerun", "Perform rerun")) - r.initialize = lambda ert : ert.main.analysis_config.get_rerun - r.getter = lambda ert : ert.main.analysis_config.get_rerun - r.setter = lambda ert, value : ert.main.analysis_config.set_rerun( value) - - r = configPanel.addRow(IntegerSpinner(parent, "Rerun start", "config/analysis/rerun_start", 0, 100000)) - r.initialize = lambda ert : ert.main.analysis_config.get_rerun_start - r.getter = lambda ert : ert.main.analysis_config.get_rerun_start - r.setter = lambda ert, value : ert.main.analysis_config.set_rerun_start( value) - - r = configPanel.addRow(PathChooser(parent, "ENKF schedule file", "config/analysis/enkf_sched_file")) - r.initialize = lambda ert : ert.main.model_config.get_enkf_sched_file - r.getter = lambda ert : ert.main.model_config.get_enkf_sched_file - r.setter = lambda ert, value : ert.main.model_config.set_enkf_sched_file(str(value)) - - r = configPanel.addRow(ert_gui.widgets.tablewidgets.KeywordList(parent, "Local config", "config/analysis/local_config")) - r.newKeywordPopup = lambda list : QtGui.QFileDialog.getOpenFileName(r, "Select a path", "") - - def get_local_config_files(ert): - local_config = ert.main.local_config - config_files_pointer = ert.main.local_config.get_config_files - return config_files_pointer - - r.initialize = get_local_config_files - r.getter = get_local_config_files - - def add_config_file(ert, value): - local_config = ert.main.local_config - ert.main.local_config.clear_config_files - - for file in value: - ert.main.local_config.add_config_file( file) - - r.setter = add_config_file - - r = configPanel.addRow(PathChooser(parent, "Update log", "config/analysis/update_log")) - r.initialize = lambda ert : ert.main.analysis_config.get_log_path - r.getter = lambda ert : ert.main.analysis_config.get_log_path - r.setter = lambda ert, value : ert.main.analysis_config.set_log_path( str(value)) - - - configPanel.startGroup("EnKF") - - r = configPanel.addRow(DoubleSpinner(parent, "Alpha", "config/analysis/enkf_alpha", 0, 100000, 2)) - r.initialize = lambda ert : ert.main.analysis_config.get_alpha - r.getter = lambda ert : ert.main.analysis_config.get_alpha - r.setter = lambda ert, value : ert.main.analysis_config.set_alpha( value) - - r = configPanel.addRow(CheckBox(parent, "Merge Observations", "config/analysis/enkf_merge_observations", "Perform merge")) - r.initialize = lambda ert : ert.main.analysis_config.get_merge_observations - r.getter = lambda ert : ert.main.analysis_config.get_merge_observations - r.setter = lambda ert, value : ert.main.analysis_config.set_merge_observations( value) - - configPanel.endGroup() - configPanel.endPage() diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/CMakeLists.txt deleted file mode 100644 index 6eda67f87d..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/jobs/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.config.jobs" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/config/jobs "__init__.py;forwardmodelpanel.py;jobsdialog.py;jobspanel.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/CMakeLists.txt deleted file mode 100644 index 0d5db1aa04..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/parameters/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.config.parameters" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/config/parameters "__init__.py;datapanel.py;fieldpanel.py;keywordpanel.py;parameterdialog.py;parametermodels.py;parameterpanel.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/CMakeLists.txt deleted file mode 100644 index 56a1241e5e..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/config/simulations/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.config.simulations" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/config/simulations "__init__.py;runpathpanel.py;runtemplatepanel.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/CMakeLists.txt deleted file mode 100644 index f1b0339f60..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/init/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.init" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/init "__init__.py;initandcopy.py;initpanel.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/CMakeLists.txt deleted file mode 100644 index 137c02c8b7..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.plot" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/plot "__init__.py;fetcher.py;plotconfig.py;plotfigure.py;plotpanel.py;plotsettings.py;plotview.py;zoomslider.py;ensemblefetcher.py;plotdata.py;plotgenerator.py;plotrenderer.py;plotsettingsxml.py;rftfetcher.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/rftfetcher.py b/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/rftfetcher.py deleted file mode 100644 index de87e4860c..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/plot/rftfetcher.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (C) 2011 Statoil ASA, Norway. -# -# The file 'rftfetcher.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. - - -from fetcher import PlotDataFetcherHandler -import ert.ert.ertwrapper as ertwrapper -import ert.ert.enums as enums -from ert.ert.enums import ert_state_enum, obs_impl_type -import numpy - -class RFTFetcher(PlotDataFetcherHandler): - - def __init__(self): - PlotDataFetcherHandler.__init__(self) - - def initialize(self, ert): - self.initialized = True - - def isHandlerFor(self, ert, key): - enkf_obs = ert.main.get_obs - key_list = enkf_obs.alloc_typed_keylist(obs_impl_type.GEN_OBS.value()) - return key in key_list - - def fetch(self, ert, key, parameter, data, comparison_fs): - enkf_obs = ert.main.get_obs - obs_vector = enkf_obs.get_vector(key) - - num_active = obs_vector.get_num_active - if num_active == 1: - report_step = obs_vector.get_active_report_step - elif num_active > 1: - history_length = ert.main.get_history_length - active = [] - for index in range(history_length): - if obs_vector.iget_active(index): - active.append(index) - print "Active:", active - report_step = active[0] #todo: enable selection from GUI - else: - return - - fs = ert.main.get_fs - state_kw = obs_vector.get_state_kw - - ens_size = ert.main.get_ensemble_size - - config_node = ert.main.ensemble_config.get_node(state_kw) - field_config = config_node.get_ref - block_obs = obs_vector.iget_node(report_step) - - obs_size = block_obs.get_size - grid = field_config.get_grid - - node = config_node.alloc_node - - y_obs = [] - x_obs = [] - x_std = [] - xpos = (ertwrapper.c_double)() - ypos = (ertwrapper.c_double)() - zpos = (ertwrapper.c_double)() - value = (ertwrapper.c_double)() - std = (ertwrapper.c_double)() - for index in range(obs_size): - grid.get_xyz3(block_obs.iget_i(index),block_obs.iget_j(index),block_obs.iget_k(index), xpos, ypos , zpos) - y_obs.append(zpos.value) - block_obs.iget(index, value, std) - x_obs.append(value.value) - x_std.append(std.value) - data.checkMaxMin(value.value + std.value) - data.checkMaxMin(value.value - std.value) - data.obs_y = numpy.array(y_obs) - data.obs_x = numpy.array(x_obs) - data.obs_std_x = numpy.array(x_std) - data.obs_std_y = None - var_type = enums.enkf_var_type.DYNAMIC_RESULT - - for member in range(ens_size): - if node.vector_storage: - if fs.has_vector(config_node, member, ert_state_enum.ANALYZED.value()): - fs.fread_vector(node, member, ert_state_enum.ANALYZED.value()) - elif fs.has_vector(config_node, member, ert_state_enum.FORECAST.value()): - fs.fread_vector(node, member, ert_state_enum.FORECAST.value()) - else: - print "No data found for member %d/%d." % (member, report_step) - continue - else: - if fs.has_node(config_node, var_type, report_step, member, ert_state_enum.ANALYZED.value()): - fs.fread_node(node, var_type, report_step, member, ert_state_enum.ANALYZED.value()) - elif fs.has_node(config_node, var_type, report_step, member, ert_state_enum.FORECAST.value()): - fs.fread_node(node, var_type, report_step, member, ert_state_enum.FORECAST.value()) - else: - print "No data found for member %d/%d." % (member, report_step) - continue - - data.x_data[member] = [] - data.y_data[member] = [] - x_data = data.x_data[member] - y_data = data.y_data[member] - - field = node.value_ptr - for index in range(obs_size): - value = field.ijk_get_double(i[index] , j[index] , k[index]) - x_data.append(value) - y_data.append(y_obs[index]) - data.checkMaxMin(value) - - data.x_data[member] = numpy.array(x_data) - data.y_data[member] = numpy.array(y_data) - - if not comparison_fs is None: - comp_node = config_node.alloc - for member in range(ens_size): - if comparison_fs.has_node(config_node, report_step, member, ert_state_enum.ANALYZED.value()): - comparison_fs.fread_node(comp_node, report_step, member, ert_state_enum.ANALYZED.value()) - elif comparison_fs.has_node(config_node, report_step, member, ert_state_enum.FORECAST.value()): - comparison_fs.fread_node(comp_node, report_step, member, ert_state_enum.FORECAST.value()) - else: - print "No data found for member %d/%d." % (member, report_step) - continue - - data.x_comp_data[member] = [] - data.y_comp_data[member] = [] - x_data = data.x_comp_data[member] - y_data = data.y_comp_data[member] - - field = ert.enkf.enkf_node_value_ptr(comp_node) - for index in range(obs_size): - value = field.ijk_get_double(block_obs.iget_i(index),block_obs.iget_j(index),block_obs.iget_k(index)) - x_data.append(value) - y_data.append(y_obs[index]) - data.checkMaxMin(value) - - data.x_comp_data[member] = numpy.array(x_data) - data.y_comp_data[member] = numpy.array(y_data) - - comp_node.free - - node.free - - data.x_data_type = "number" - data.inverted_y_axis = True - - def getConfigurationWidget(self, context_data): - return None - - def configure(self, parameter, context_data): - pass #nothing to configure, yet - - - diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/CMakeLists.txt deleted file mode 100644 index 4594781ddb..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/pages/run/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_python_package( "Python ert_gui.pages.run" ${PYTHON_INSTALL_PREFIX}/ert_gui/pages/run "__init__.py;runpanel.py;simulation.py;simulationsdialog.py;legend.py" True) diff --git a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/CMakeLists.txt b/ThirdParty/Ert/devel/python/python/ert_gui/widgets/CMakeLists.txt deleted file mode 100644 index 95ee1e73ca..0000000000 --- a/ThirdParty/Ert/devel/python/python/ert_gui/widgets/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_python_package( "Python ert_gui.widgets" ${PYTHON_INSTALL_PREFIX}/ert_gui/widgets "__init__.py;activelabel.py;checkbox.py;cogwheel.py;combochoice.py;configpanel.py;helpedwidget.py;help.py;pathchooser.py;reloadbutton.py;searchablelist.py;spinnerwidgets.py;stringbox.py;tablewidgets.py;util.py;validateddialog.py" True) - diff --git a/ThirdParty/Ert/devel/python/test/CMakeLists.txt b/ThirdParty/Ert/devel/python/test/CMakeLists.txt index 013b813580..ddb67a7448 100644 --- a/ThirdParty/Ert/devel/python/test/CMakeLists.txt +++ b/ThirdParty/Ert/devel/python/test/CMakeLists.txt @@ -1,68 +1,22 @@ -add_python_package("Python test" "${PYTHON_INSTALL_PREFIX}/test" "ecl_isosurf.py;enkf_test.py;ens_config_test.py;file_test.py;fortio_test.py;grav_test.py;grdecl_test.py;grid_test0.py;grid_test.py;import_test.py;job_test.py;kw_test.py;large_mem_test.py;latex_test.py;petrel_kw.py;poly_test.py;region_test.py;restart_test.py;rft_test.py;sched_test.py;stringlist_test.py;sum_test.py;test_all.py;test_fast.py;test_util.py;troll_test.py;util_test.py;ctest_run.py" True) +add_python_package("Python test" "${PYTHON_INSTALL_PREFIX}/test" "ecl_isosurf.py;enkf_test.py;ens_config_test.py;file_test.py;fortio_test.py;grav_test.py;grdecl_test.py;grid_test0.py;grid_test.py;import_test.py;job_test.py;kw_test.py;large_mem_test.py;latex_test.py;petrel_kw.py;poly_test.py;region_test.py;restart_test.py;rft_test.py;sched_test.py;stringlist_test.py;sum_test.py;test_all.py;test_fast.py;test_util.py;troll_test.py;util_test.py;ctest_run.py" OFF) -# The test date is located in the current source directory; that is -# the reason we set that as the working directory for the test -# run. The module to import should then be in the default python -# module search path (i.e. current directory), whereas the location of -# the actual ert package is given by the first argument to ctest. +add_test( NAME python.import_all WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} import_test ) -add_test( NAME python.import_all - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} import_test ) +add_test( NAME python.ert.util.stringlist WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} stringlist_test ) -add_test( NAME python.import_local - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} import_local ) - -add_test( NAME python.ert.util.stringlist - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} stringlist_test ) - -add_test( NAME python.ert.util.tvector - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} tvector_test ) - -add_test( NAME python.ert.ecl.ecl_grid - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} grid_test ) - -add_test( NAME python.ert.ecl.ecl_kw - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} kw_test ) - -add_test( NAME python.ert.ecl.ecl_sum - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} sum_test ) - -add_test( NAME python.ert.ecl.ecl_file - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} file_test False) - -add_test( NAME python.ert.ecl.ecl_file_slow - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} file_test True) - -add_test( NAME python.ert.ecl.ecl_rft - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} rft_test) - -add_test( NAME python.ert.ecl.ecl_rft_cell - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} rft_cell_test) +add_test( NAME python.ert.ecl.ecl_grid WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} grid_test ) +add_test( NAME python.ert.ecl.ecl_kw WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} kw_test ) +add_test( NAME python.ert.ecl.ecl_sum WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} sum_test ) +add_test( NAME python.ert.ecl.ecl_file WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} file_test False) +add_test( NAME python.ert.ecl.ecl_file_slow WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ctest_run.py ${PROJECT_BINARY_DIR}/${PYTHON_INSTALL_PREFIX} file_test True) +set_property( TEST python.ert.ecl.ecl_file PROPERTY LABELS Python:Statoil ) +set_property( TEST python.ert.ecl.ecl_file_slow PROPERTY LABELS Python:Statoil:Slow ) +set_property( TEST python.ert.ecl.ecl_sum PROPERTY LABELS Python:Statoil ) +set_property( TEST python.ert.ecl.ecl_kw PROPERTY LABELS Python:Statoil ) +set_property( TEST python.ert.ecl.ecl_grid PROPERTY LABELS Python:Statoil:Slow ) -set_property( TEST python.ert.ecl.ecl_file PROPERTY LABELS Python:StatoilData ) -set_property( TEST python.ert.ecl.ecl_file_slow PROPERTY LABELS Python:StatoilData:Slow ) -set_property( TEST python.ert.ecl.ecl_sum PROPERTY LABELS Python:StatoilData ) -set_property( TEST python.ert.ecl.ecl_kw PROPERTY LABELS Python:StatoilData ) -set_property( TEST python.ert.ecl.ecl_rft PROPERTY LABELS Python:StatoilData ) -set_property( TEST python.ert.ecl.ecl_grid PROPERTY LABELS Python:StatoilData:Slow ) -set_property( TEST python.import_local PROPERTY LABELS Python:StatoilBuild ) - -set_property( TEST python.import_all PROPERTY LABELS Python) +set_property( TEST python.import_all PROPERTY LABELS Python ) set_property( TEST python.ert.util.stringlist PROPERTY LABELS Python ) -set_property( TEST python.ert.util.tvector PROPERTY LABELS Python ) -set_property( TEST python.import_all PROPERTY ENVIRONMENT "ERT_SHARE_PATH=${PROJECT_SOURCE_PATH}/share") - diff --git a/ThirdParty/Ert/devel/python/test/ctest_run.py b/ThirdParty/Ert/devel/python/test/ctest_run.py index 8ca5f144b3..3a92296e4d 100644 --- a/ThirdParty/Ert/devel/python/test/ctest_run.py +++ b/ThirdParty/Ert/devel/python/test/ctest_run.py @@ -5,17 +5,11 @@ import unittest def run_suite( test_suite ): test_result = unittest.TextTestRunner(verbosity = 0).run( test_suite ) - if test_result.errors or test_result.failures: + if test_result.errors: for (test , trace_back) in test_result.errors: sys.stderr.write("=================================================================\n") - sys.stderr.write("Test:%s error \n" % test.id()) + sys.stderr.write("Test:%s failed \n" % test.id()) sys.stderr.write("%s\n" % trace_back) - - for (test , trace_back) in test_result.failures: - sys.stderr.write("=================================================================\n") - sys.stderr.write("Test:%s failure \n" % test.id()) - sys.stderr.write("%s\n" % trace_back) - return False else: return True diff --git a/ThirdParty/Ert/devel/python/test/enkf_test.py b/ThirdParty/Ert/devel/python/test/enkf_test.py index b923a7ce9c..1126f0248f 100644 --- a/ThirdParty/Ert/devel/python/test/enkf_test.py +++ b/ThirdParty/Ert/devel/python/test/enkf_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2012 Statoil ASA, Norway. # -# The file 'enkf_test.py' is part of ERT - Ensemble based Reservoir Tool. +# The file 'sum_test.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 @@ -19,12 +19,10 @@ import datetime import unittest import ert import ert.enkf.enkf as enkf -from ert.util.tvector import * +from ert.util.tvector import * from test_util import approx_equal, approx_equalv -case = "/private/inmyr/ERT-Intro/testcase/ert_config" -site_conf_file = "/project/res/etc/ERT/site-config" -obs_config_file = "/private/inmyr/ERT-Intro/testcase/observations" +case = "../../../libenkf/src/Gurbat/enkf.ext" class EnKFtest( unittest.TestCase ): def setUp(self): @@ -32,43 +30,30 @@ class EnKFtest( unittest.TestCase ): def test_boot( self ): - self.main = enkf.EnKFMain.bootstrap( case, site_conf_file ) + self.main = enkf.EnKFMain.bootstrap( case ) self.assertTrue( self.main , "Load failed" ) del self + def test_enum(self): self.assertEqual( enkf.enkf_state_enum.FORECAST , 2 ) self.assertEqual( enkf.enkf_state_enum.ANALYZED , 4 ) - del self + def test_config( self ): - self.main = enkf.EnKFMain.bootstrap( case, site_conf_file ) - config = self.main.ensemble_config - anal_config = self.main.analysis_config - mod_config = self.main.model_config - loc_config = self.main.local_config - site_conf = self.main.site_config - ecl_conf = self.main.ecl_config - plot_conf = self.main.plot_config - self.main.load_obs(obs_config_file) - ob = self.main.get_obs - temp = self.main.get_templates - enkf_fsout = self.main.get_fs - mem_conf = self.main.iget_member_config(0) - enkf_stat = self.main.iget_state(0) - self.assertTrue( isinstance( config , ert.enkf.ens_config.EnsConfig)) - self.assertTrue( isinstance( anal_config , ert.enkf.analysis_config.AnalysisConfig)) - self.assertTrue( isinstance( mod_config , ert.enkf.model_config.ModelConfig)) - self.assertTrue( isinstance( loc_config , ert.enkf.local_config.LocalConfig)) - self.assertTrue( isinstance( site_conf , ert.enkf.site_config.SiteConfig)) - self.assertTrue( isinstance( ecl_conf , ert.enkf.ecl_config.EclConfig)) - self.assertTrue( isinstance( plot_conf , ert.enkf.plot_config.PlotConfig)) - self.assertTrue( isinstance( ob , ert.enkf.enkf_obs.EnkfObs)) - self.assertTrue( isinstance( temp , ert.enkf.ert_templates.ErtTemplates)) - self.assertTrue( isinstance( enkf_fsout , ert.enkf.enkf_fs.EnkfFs)) - self.assertTrue( isinstance( mem_conf , ert.enkf.member_config.MemberConfig)) - self.assertTrue( isinstance( enkf_stat , ert.enkf.enkf_state.EnKFState)) - del self - + self.main = enkf.EnKFMain.bootstrap( case ) + config = self.main.config + self.assertTrue( isinstance( config , ert.enkf.ens_config.EnsConfig)) + + def test_update(self): + step_list = IntVector(0) + step_list.append(30) + self.main = enkf.EnKFMain.bootstrap( case ) + self.main.update(step_list) + + + #def test_sim(self): + # self.main = enkf.EnKFMain.bootstrap( case ) + # self.main.sim() + unittest.main() -e diff --git a/ThirdParty/Ert/devel/python/test/ens_config_test.py b/ThirdParty/Ert/devel/python/test/ens_config_test.py index 54fd984238..b62cd8948d 100644 --- a/ThirdParty/Ert/devel/python/test/ens_config_test.py +++ b/ThirdParty/Ert/devel/python/test/ens_config_test.py @@ -20,29 +20,19 @@ import unittest import ert import ert.enkf.enkf as enkf from test_util import approx_equal, approx_equalv -from ert.util.stringlist import StringList -case = "/private/inmyr/ERT-Intro/testcase/ert_config" -site_conf_file = "/project/res/etc/ERT/site-config" -obs_config_file = "/private/inmyr/ERT-Intro/testcase/observations" +case = "../../../libenkf/src/Gurbat/enkf.ext" class EnsConfigTest( unittest.TestCase ): def setUp(self): pass def test_key(self): - main = enkf.EnKFMain.bootstrap( case , site_conf_file) + main = enkf.EnKFMain.bootstrap( case ) conf = main.config self.assertTrue( conf.has_key("WWCT:OP_1" )) self.assertFalse( conf.has_key("WWCT:OP_1X" )) - def test_enkf_conf_node(self): - main = enkf.EnKFMain.bootstrap( case , site_conf_file) - conf = main.config - s = StringList(initial = None, c_ptr=conf.alloc_keylist) - self.assertTrue( isinstance( conf.get_node("MULTFLT") , ert.enkf.enkf_config_node.EnkfConfigNode)) - self.assertTrue( isinstance( s , ert.util.stringlist.StringList)) + - - unittest.main() diff --git a/ThirdParty/Ert/devel/python/test/grid_test.py b/ThirdParty/Ert/devel/python/test/grid_test.py index c51c868079..10f35d67df 100644 --- a/ThirdParty/Ert/devel/python/test/grid_test.py +++ b/ThirdParty/Ert/devel/python/test/grid_test.py @@ -33,10 +33,6 @@ egrid_file = "test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.EGRID" grid_file = "test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.GRID" grdecl_file = "test-data/Statoil/ECLIPSE/Gurbat/include/example_grid_sim.GRDECL" -def load_does_not_exist(): - g = ecl.EclGrid( "/does/not/exist.EGRID" ) - - class GridTest( unittest.TestCase ): def setUp(self): @@ -167,10 +163,6 @@ class GridTest( unittest.TestCase ): self.assertTrue( g1.coarse_groups() == 3384) - def testRaiseIOError(self): - self.assertRaises( IOError , load_does_not_exist ) - - def testDual(self): grid = ecl.EclGrid( egrid_file ) @@ -232,7 +224,6 @@ def fast_suite(): suite.addTest( GridTest( 'testACTNUM') ) suite.addTest( GridTest( 'testRect' )) suite.addTest( GridTest( 'testCoarse' )) - suite.addTest( GridTest( 'testRaiseIOError' )) return suite def test_suite(argv): diff --git a/ThirdParty/Ert/devel/python/test/import_local.py b/ThirdParty/Ert/devel/python/test/import_local.py deleted file mode 100644 index f946682e69..0000000000 --- a/ThirdParty/Ert/devel/python/test/import_local.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'import_local.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 - -def test_import( module ): - print "Importing: %s ..." % module , - try: - __import__( module ) - print "OK" - except: - print "failed" - sys.exit(1) - - -test_import("ert.ecl.ecl_local") - - -def test_suite( argv ): - return False diff --git a/ThirdParty/Ert/devel/python/test/import_test.py b/ThirdParty/Ert/devel/python/test/import_test.py index c5002ad5b6..ddb049ec2b 100644 --- a/ThirdParty/Ert/devel/python/test/import_test.py +++ b/ThirdParty/Ert/devel/python/test/import_test.py @@ -14,206 +14,34 @@ # # See the GNU General Public License at # for more details. -import sys + def test_import( module ): print "Importing: %s ..." % module , __import__( module ) - print "OK" + print test_import( "ert" ) -test_import( "ert.config" ) test_import( "ert.cwrap" ) test_import( "ert.ecl" ) -test_import( "ert.enkf" ) -test_import( "ert.ert") +test_import( "ert.util" ) test_import( "ert.geo" ) +test_import( "ert.config" ) test_import( "ert.job_queue" ) test_import( "ert.rms" ) +test_import( "ert.enkf" ) test_import( "ert.sched" ) -test_import( "ert.util" ) test_import( "ert.well") -test_import("ert.config.config") -test_import("ert.config.config_enums") -test_import("ert.config.config_parser") - -test_import("ert.cwrap.cclass") -test_import("ert.cwrap.cenum") -test_import("ert.cwrap.cfile") -test_import("ert.cwrap.clib") -test_import("ert.cwrap.cwrap") - test_import("ert.ecl.ecl") -test_import("ert.ecl.ecl_case") -test_import("ert.ecl.ecl_default") -test_import("ert.ecl.ecl_file") -test_import("ert.ecl.ecl_grav_calc") -test_import("ert.ecl.ecl_grav") -test_import("ert.ecl.ecl_grid") -test_import("ert.ecl.ecl_kw") -test_import("ert.ecl.ecl") -test_import("ert.ecl.ecl_queue") -test_import("ert.ecl.ecl_region") -test_import("ert.ecl.ecl_rft") -test_import("ert.ecl.ecl_rft_cell") -test_import("ert.ecl.ecl_subsidence") -test_import("ert.ecl.ecl_sum") -test_import("ert.ecl.ecl_util") -test_import("ert.ecl.fortio") -test_import("ert.ecl.libecl") - -test_import("ert.enkf.enkf") -test_import("ert.enkf.analysis_config") -test_import("ert.enkf.block_obs") -test_import("ert.enkf.ecl_config") -test_import("ert.enkf.enkf_config_node") -test_import("ert.enkf.enkf_enum") -test_import("ert.enkf.enkf_fs") -test_import("ert.enkf.enkf_main") -test_import("ert.enkf.enkf_node") -test_import("ert.enkf.enkf_obs") -test_import("ert.enkf.enkf") -test_import("ert.enkf.enkf_state") -test_import("ert.enkf.ens_config") -test_import("ert.enkf.ert_template") -test_import("ert.enkf.ert_templates") -test_import("ert.enkf.field_config") -test_import("ert.enkf.field") -test_import("ert.enkf.gen_data_config") -test_import("ert.enkf.gen_kw_config") -test_import("ert.enkf.libenkf") -test_import("ert.enkf.local_config") -test_import("ert.enkf.model_config") -test_import("ert.enkf.obs_vector") -test_import("ert.enkf.plot_config") -test_import("ert.enkf.site_config") -test_import("ert.enkf.time_map") - -test_import("ert.ert.c_enums") -test_import("ert.ert.enums") -test_import("ert.ert.erttypes") -test_import("ert.ert.ertwrapper") - -test_import("ert.geo.geo_polygon") -test_import("ert.geo.geo") -test_import("ert.geo.libgeo") - -test_import("ert.job_queue.job_queue") -test_import("ert.job_queue.driver") -test_import("ert.job_queue.ext_job") -test_import("ert.job_queue.queue") -test_import("ert.job_queue.ext_joblist") -test_import("ert.job_queue.forward_model") -test_import("ert.job_queue.job") -test_import("ert.job_queue.libjob_queue") - -test_import("ert.rms.librms") test_import("ert.rms.rms") - -test_import("ert.sched.history") -test_import("ert.sched.libsched") -test_import("ert.sched.sched_file") -test_import("ert.sched.sched") - -test_import("ert.util.ctime") -test_import("ert.util.latex") -test_import("ert.util.lookup_table") -test_import("ert.util.tvector") -test_import("ert.util.buffer") -#test_import("ert.util.hash") -test_import("ert.util.libutil") -test_import("ert.util.matrix") -test_import("ert.util.stat") -test_import("ert.util.util_func") -test_import("ert.util.log") -test_import("ert.util.stringlist") - -test_import("ert.well.libwell") -test_import("ert.well.well_info") +test_import("ert.enkf.enkf") +test_import("ert.config.config") +test_import("ert.job_queue.job_queue") +test_import("ert.geo.geo") test_import("ert.well.well") -test_import("ert.well.well_state") -test_import("ert.well.well_ts") - -test_import("ert_gui") - -test_import("ert_gui.gert_main") -test_import("ert_gui.newconfig") -test_import("ert_gui.pages") -test_import("ert_gui.widgets") - -test_import("ert_gui.pages.application") -test_import("ert_gui.pages.config") -test_import("ert_gui.pages.init") -test_import("ert_gui.pages.plot") -test_import("ert_gui.pages.run") - -test_import("ert_gui.pages.config.analysis") -test_import("ert_gui.pages.config.configpages") -test_import("ert_gui.pages.config.eclipse") -test_import("ert_gui.pages.config.ensemble") -test_import("ert_gui.pages.config.observations") -test_import("ert_gui.pages.config.plot") -test_import("ert_gui.pages.config.queuesystem") -test_import("ert_gui.pages.config.simulation") -test_import("ert_gui.pages.config.systemenv") -test_import("ert_gui.pages.config.jobs") -test_import("ert_gui.pages.config.parameters") -test_import("ert_gui.pages.config.simulations") - -test_import("ert_gui.pages.config.jobs.forwardmodelpanel") -test_import("ert_gui.pages.config.jobs.jobsdialog") -test_import("ert_gui.pages.config.jobs.jobspanel") - -test_import("ert_gui.pages.config.parameters.datapanel") -test_import("ert_gui.pages.config.parameters.fieldpanel") -test_import("ert_gui.pages.config.parameters.keywordpanel") -test_import("ert_gui.pages.config.parameters.parameterdialog") -test_import("ert_gui.pages.config.parameters.parametermodels") -test_import("ert_gui.pages.config.parameters.parameterpanel") - -test_import("ert_gui.pages.config.simulations.runpathpanel") -test_import("ert_gui.pages.config.simulations.runtemplatepanel") - -test_import("ert_gui.pages.init.initandcopy") -test_import("ert_gui.pages.init.initpanel") - -test_import("ert_gui.pages.plot.ensemblefetcher") -test_import("ert_gui.pages.plot.fetcher") -test_import("ert_gui.pages.plot.plotconfig") -test_import("ert_gui.pages.plot.plotdata") -test_import("ert_gui.pages.plot.plotfigure") -test_import("ert_gui.pages.plot.plotgenerator") -test_import("ert_gui.pages.plot.plotpanel") -test_import("ert_gui.pages.plot.plotrenderer") -test_import("ert_gui.pages.plot.plotsettings") -test_import("ert_gui.pages.plot.plotsettingsxml") -test_import("ert_gui.pages.plot.plotview") -test_import("ert_gui.pages.plot.rftfetcher") -test_import("ert_gui.pages.plot.zoomslider") - -test_import("ert_gui.pages.run.legend") -test_import("ert_gui.pages.run.runpanel") -test_import("ert_gui.pages.run.simulation") -test_import("ert_gui.pages.run.simulationsdialog") - -test_import("ert_gui.widgets.activelabel") -test_import("ert_gui.widgets.checkbox") -test_import("ert_gui.widgets.cogwheel") -test_import("ert_gui.widgets.combochoice") -test_import("ert_gui.widgets.configpanel") -test_import("ert_gui.widgets.helpedwidget") -test_import("ert_gui.widgets.help") -test_import("ert_gui.widgets.pathchooser") -test_import("ert_gui.widgets.reloadbutton") -test_import("ert_gui.widgets.searchablelist") -test_import("ert_gui.widgets.spinnerwidgets") -test_import("ert_gui.widgets.stringbox") -test_import("ert_gui.widgets.tablewidgets") -test_import("ert_gui.widgets.util") -test_import("ert_gui.widgets.validateddialog") def test_suite( argv ): diff --git a/ThirdParty/Ert/devel/python/test/rft_cell_test.py b/ThirdParty/Ert/devel/python/test/rft_cell_test.py deleted file mode 100644 index 9988a1cf56..0000000000 --- a/ThirdParty/Ert/devel/python/test/rft_cell_test.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2013 Statoil ASA, Norway. -# -# The file 'rft_cell_test.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 unittest -import ert.ecl.ecl as ecl -from test_util import approx_equal, approx_equalv - - -RFT_file = "test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.RFT" -PLT_file = "test-data/Statoil/ECLIPSE/RFT/TEST1_1A.RFT" - - - - -def out_of_range(): - rftFile = ecl.EclRFTFile( RFT_file ) - rft = rftFile[100] - - - -class RFTCellTest( unittest.TestCase ): - - def RFTCell(self): - i = 10 - j = 8 - k = 100 - depth = 100 - pressure = 65 - swat = 0.56 - sgas = 0.10 - cell = ecl.EclRFTCell.new( i , j , k , depth , pressure , swat , sgas ) - - self.assertTrue( i == cell.get_i() ) - self.assertTrue( j == cell.get_j() ) - self.assertTrue( k == cell.get_k() ) - - self.assertTrue( approx_equal( pressure , cell.pressure) ) - self.assertTrue( approx_equal( depth , cell.depth )) - self.assertTrue( approx_equal( swat , cell.swat) ) - self.assertTrue( approx_equal( sgas , cell.sgas )) - self.assertTrue( approx_equal( 1 - (sgas + swat) , cell.soil )) - - - - - - def PLTCell(self): - i = 2 - j = 16 - k = 100 - depth = 100 - pressure = 65 - orat = 0.78 - grat = 88 - wrat = 97213 - conn_start = 214 - flowrate = 111 - oil_flowrate = 12 - gas_flowrate = 132 - water_flowrate = 13344 - - cell = ecl.EclPLTCell.new( i , j , k , depth , pressure , orat , grat , wrat , conn_start , flowrate , oil_flowrate , gas_flowrate , water_flowrate) - - - self.assertTrue( i == cell.get_i() ) - self.assertTrue( j == cell.get_j() ) - self.assertTrue( k == cell.get_k() ) - - self.assertTrue( cell.get_i() + 1 == cell.i ) - self.assertTrue( cell.get_j() + 1 == cell.j ) - self.assertTrue( cell.get_k() + 1 == cell.k ) - - - self.assertTrue( approx_equal( pressure , cell.pressure) ) - self.assertTrue( approx_equal( depth , cell.depth )) - self.assertTrue( approx_equal( orat , cell.orat) ) - self.assertTrue( approx_equal( grat , cell.grat )) - self.assertTrue( approx_equal( wrat , cell.wrat )) - - self.assertTrue( approx_equal( conn_start , cell.conn_start) ) - self.assertTrue( approx_equal( flowrate , cell.flowrate )) - self.assertTrue( approx_equal( oil_flowrate , cell.oil_flowrate )) - self.assertTrue( approx_equal( gas_flowrate , cell.gas_flowrate )) - self.assertTrue( approx_equal( water_flowrate , cell.water_flowrate)) - - - - - - -def fast_suite(): - suite = unittest.TestSuite() - suite.addTest( RFTCellTest( 'RFTCell' )) - suite.addTest( RFTCellTest( 'PLTCell' )) - return suite - - - -def test_suite( argv ): - return fast_suite() - - -if __name__ == "__main__": - unittest.TextTestRunner().run( fast_suite() ) - - - diff --git a/ThirdParty/Ert/devel/python/test/rft_test.py b/ThirdParty/Ert/devel/python/test/rft_test.py index 3d4583ccbe..fa9b77aa0f 100644 --- a/ThirdParty/Ert/devel/python/test/rft_test.py +++ b/ThirdParty/Ert/devel/python/test/rft_test.py @@ -16,88 +16,12 @@ # for more details. -import datetime -import unittest import ert.ecl.ecl as ecl -from test_util import approx_equal, approx_equalv -RFT_file = "test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.RFT" -PLT_file = "test-data/Statoil/ECLIPSE/RFT/TEST1_1A.RFT" +rft = ecl.EclRFTFile( "test-data/Statoil/ECLIPSE/Gurbat/ECLIPSE.RFT" ) + +for node in rft: + print rft - - -def out_of_range(): - rftFile = ecl.EclRFTFile( RFT_file ) - rft = rftFile[100] - - - -class RFTTest( unittest.TestCase ): - - def loadRFT( self ): - rftFile = ecl.EclRFTFile( RFT_file ) - - rft = rftFile[0] - cell = rft.ijkget( (32 , 53 , 0) ) - self.assertTrue( isinstance( cell , ecl.EclRFTCell )) - - self.assertEqual( 2 , rftFile.size( ) ) - self.assertEqual( 0 , rftFile.size( well = "OP*")) - self.assertEqual( 0 , rftFile.size( well = "XXX")) - self.assertEqual( 1 , rftFile.size( date = datetime.date( 2000 , 6 , 1 ))) - self.assertEqual( 0 , rftFile.size( date = datetime.date( 2000 , 6 , 17 ))) - - cell = rft.ijkget( (30 , 20 , 1880) ) - self.assertTrue( cell is None ) - - for rft in rftFile: - self.assertTrue( rft.is_RFT() ) - self.assertFalse( rft.is_SEGMENT( )) - self.assertFalse( rft.is_PLT( )) - self.assertFalse( rft.is_MSW( )) - - for cell in rft: - self.assertTrue( isinstance( cell , ecl.EclRFTCell )) - - cell0 = rft.iget_sorted( 0 ) - self.assertTrue( isinstance( cell , ecl.EclRFTCell )) - rft.sort() - - - - def loadPLT( self ): - pltFile = ecl.EclRFTFile( PLT_file ) - plt = pltFile[11] - self.assertTrue( plt.is_PLT() ) - self.assertFalse( plt.is_SEGMENT( )) - self.assertFalse( plt.is_RFT( )) - self.assertFalse( plt.is_MSW( )) - for cell in plt: - self.assertTrue( isinstance( cell , ecl.EclPLTCell )) - - - def exceptions( self ): - self.assertRaises( IndexError , out_of_range ) - - - - -def fast_suite(): - suite = unittest.TestSuite() - suite.addTest( RFTTest( 'loadRFT' )) - suite.addTest( RFTTest( 'loadPLT' )) - suite.addTest( RFTTest( 'exceptions' )) - return suite - - -def test_suite( argv ): - return fast_suite() - - -if __name__ == "__main__": - unittest.TextTestRunner().run( fast_suite() ) - - - diff --git a/ThirdParty/Ert/devel/python/test/tvector_test.py b/ThirdParty/Ert/devel/python/test/tvector_test.py index 71fe3bf93f..f3b5c4b70c 100644 --- a/ThirdParty/Ert/devel/python/test/tvector_test.py +++ b/ThirdParty/Ert/devel/python/test/tvector_test.py @@ -27,24 +27,6 @@ from ert.util.tvector import BoolVector from test_util import approx_equal, approx_equalv -def add_size_error(): - l1 = IntVector() - l2 = IntVector() - - l1[100] = 10 - l2[10] = 1 - l1 += l2 - - -def mul_size_error(): - l1 = IntVector() - l2 = IntVector() - - l1[100] = 10 - l2[10] = 1 - l1 *= l2 - - class TVectorTest( unittest.TestCase ): @@ -87,102 +69,13 @@ class TVectorTest( unittest.TestCase ): - def test_default(self): - l = IntVector( default_value = 100 ) - self.assertTrue( l.default == 100 ) - l[10] = 1 - self.assertTrue( l[0] == 100 ) - self.assertTrue( l[9] == 100 ) - self.assertTrue( l[10] == 1 ) - - l.default = 200 - self.assertTrue( l.default == 200 ) - l[20] = 77 - self.assertTrue( l[19] == 200 ) - - - def test_copy(self): - l1 = IntVector( default_value = 77 ) - l1[99] = 100 - - l2 = l1.copy() - self.assertTrue( l1.default == l2.default ) - self.assertTrue( len(l1) == len(l2)) - self.assertTrue( l1[99] == l2[99] ) - - - def test_div(self): - l1 = IntVector( default_value = 100 ) - l1[99] = 100 - l2 = l1 / 10 - - self.assertTrue( l1.default == l2.default ) - self.assertTrue( len(l1) == len(l2)) - self.assertTrue( l2[99] == 10 ) - self.assertTrue( l2[9] == 10 ) - self.assertTrue( l2[1] == 10 ) - - - def test_add(self): - l1 = IntVector( default_value = 100 ) - l1[99] = 100 - l1 += 100 - - self.assertTrue( l1[99] == 200 ) - self.assertTrue( l1[9] == 200 ) - self.assertTrue( l1[1] == 200 ) - - l2 = IntVector( default_value = 75 ) - l2[99] = 75 - l1 += l2 - - self.assertTrue( l1[99] == 275 ) - self.assertTrue( l1[9] == 275 ) - self.assertTrue( l1[1] == 275 ) - - self.assertRaises( ValueError , add_size_error ) - - - def test_mul(self): - l1 = IntVector( default_value = 100 ) - l1[99] = 100 - l1 *= 2 - - self.assertTrue( l1[99] == 200 ) - self.assertTrue( l1[9] == 200 ) - self.assertTrue( l1[1] == 200 ) - - l2 = IntVector( default_value = 2 ) - l2[99] = 2 - l1 *= l2 - - self.assertTrue( l1[99] == 400 ) - self.assertTrue( l1[9] == 400 ) - self.assertTrue( l1[1] == 400 ) - - self.assertRaises( ValueError , mul_size_error ) - - - - - - def fast_suite(): suite = unittest.TestSuite() suite.addTest( TVectorTest( 'test_activeList' )) suite.addTest( TVectorTest( 'test_activeMask' )) suite.addTest( TVectorTest( 'test_true' )) - suite.addTest( TVectorTest( 'test_default' )) - suite.addTest( TVectorTest( 'test_copy' )) - suite.addTest( TVectorTest( 'test_div' )) - suite.addTest( TVectorTest( 'test_add' )) - suite.addTest( TVectorTest( 'test_mul' )) return suite -def test_suite(argv): - return fast_suite() - - if __name__ == "__main__": unittest.TextTestRunner().run( fast_suite() ) diff --git a/ThirdParty/Ert/devel/share/gui/img/newsplash.jpg b/ThirdParty/Ert/devel/share/gui/img/newsplash.jpg deleted file mode 100644 index 4a605e7321dc830566ff22761877a8751bdb740a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78813 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 I`ZM-l0H%{Vd;kCd