subscript 1.0.0__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {subscript-1.0.0 → subscript-1.1.0}/.github/workflows/subscript.yml +2 -6
- {subscript-1.0.0 → subscript-1.1.0}/PKG-INFO +2 -2
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/eclcompress.rst +1 -3
- {subscript-1.0.0 → subscript-1.1.0}/pyproject.toml +11 -1
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/co2_containment/co2_calculation.py +15 -15
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclcompress/eclcompress.py +12 -47
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/restartthinner/restartthinner.py +13 -13
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/flux_obj.py +14 -14
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/flux_util.py +7 -7
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +13 -13
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/summaryplot/summaryplot.py +13 -13
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/version.py +2 -2
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/welltest_dpds/welltest_dpds.py +3 -3
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/PKG-INFO +2 -2
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/SOURCES.txt +0 -1
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/requires.txt +1 -1
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_eclcompress.py +0 -39
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_presentvalue.py +4 -4
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_summaryplot.py +2 -2
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_welltest_dpds.py +6 -6
- subscript-1.0.0/setup.py +0 -15
- {subscript-1.0.0 → subscript-1.1.0}/.flake8 +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/.github/workflows/codecov.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/.github/workflows/publish.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/.gitignore +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/.pylintrc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/LICENSE +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/README.md +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/SECURITY.md +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/ci/testkomodo.sh +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/Makefile +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_static/equinor-logo.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_static/equinor-logo2.jpg +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_static/equinor-logo2.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_static/equinor_logo.jpg +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_static/equinor_logo_only.jpg +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/_templates/layout.html +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/conf.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/contributing.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/history.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/index.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/make.bat +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/overview.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/bjobsusers.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/casegen_upcars.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/check_swatinit.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/co2_containment.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/convert_grid_format.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/csv2ofmvol.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/csv_merge.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/csv_stack.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/ecldiff2roff.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/fmu_copy_revision.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/fmuobs.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/co2_containment_A.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/interp_relperm.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/ofmvol2csv.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/pack_sim.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/params2csv.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/presentvalue.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/prtvol2csv.csv +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/prtvol2csv.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/restartthinner.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/ri_wellmod.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/runeclipse.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/runrms.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/sector2fluxnum.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/summaryplot.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/sunsch.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/sw_model_utilities.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/vfp2csv.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/scripts/welltest_dpds.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/docs/usage.rst +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/setup.cfg +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/bjobsusers/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/bjobsusers/bjobsusers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/casegen_upcars/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/casegen_upcars/model.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/casegen_upcars/udf.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/check_swatinit/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/check_swatinit/check_swatinit.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/check_swatinit/constants.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/check_swatinit/plotter.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/co2_containment/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/co2_containment/calculate.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/co2_containment/co2_containment.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/CSV_STACK +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/SUNSCH +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/convert_grid_format/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv_merge/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv_merge/csv_merge.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv_stack/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/csv_stack/csv_stack.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclcompress/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclcompress/allowlist.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmuobs/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmuobs/fmuobs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmuobs/parsers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmuobs/util.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/fmuobs/writers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/hook_implementations/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/hook_implementations/jobs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/interp_relperm/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/interp_relperm/interp_relperm.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/duf +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/eclmanual +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/ertwatch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/list_rms_usage +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/nosim +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/legacy/runeclipse +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/merge_rft_ertobs/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ofmvol2csv/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/pack_sim/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/pack_sim/pack_sim.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/params2csv/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/params2csv/params2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/presentvalue/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/presentvalue/presentvalue.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/prtvol2csv/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/prtvol2csv/prtvol2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/restartthinner/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ri_wellmod/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/rmsecl_volumetrics/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/runrms/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/runrms/runrms.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/completions.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/summaryplot/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sunsch/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sunsch/sunsch.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sunsch/time_vector.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sw_model_utilities/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/vfp2csv/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/vfp2csv/vfp2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript/welltest_dpds/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/dependency_links.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/entry_points.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/src/subscript.egg-info/top_level.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/__init__.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/conftest.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/parameters.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/rms/README +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/vfp/GasProd.VFP +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/vfp/pd2.VFP +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_bjobsusers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_casegen_upcars.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_check_swatinit.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_check_swatinit_simulators.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_co2_calculate.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_co2_containment.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_convert_grid_format.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_csv2ofmvol.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_csv_merge.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_csv_stack.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_docs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_ecldiff2roff.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_fmu_copy_revision.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_fmuobs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_fmuobs_parsers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_fmuobs_writers.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_hook_implementations.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_interp_relperm.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_merge_rft_ertobs.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_ofmvol2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_pack_sim.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_params2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_prtvol2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_restartthinner.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_ri_wellmod.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_rmsecl_volumetrics.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_runrms.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_sector2fluxnum.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_subscriptlogger.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_sunsch.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_sw_model_utilities.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/test_vfp2csv.py +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_runrms/runrms.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/config_v2.yml +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/foo1.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/footemplate.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/merge2.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/mergeme.sch +0 -0
- {subscript-1.0.0 → subscript-1.1.0}/tests/testdata_sunsch/options3.sch +0 -0
|
@@ -66,7 +66,7 @@ jobs:
|
|
|
66
66
|
|
|
67
67
|
- name: Lint with black
|
|
68
68
|
if: ${{ always() }}
|
|
69
|
-
run: black --check
|
|
69
|
+
run: black --check src tests
|
|
70
70
|
|
|
71
71
|
- name: Lint with flake8
|
|
72
72
|
if: ${{ always() }}
|
|
@@ -78,11 +78,7 @@ jobs:
|
|
|
78
78
|
|
|
79
79
|
- name: Run tests
|
|
80
80
|
if: ${{ always() }}
|
|
81
|
-
run:
|
|
82
|
-
pytest -n auto tests
|
|
83
|
-
# Check that repository is untainted by test code:
|
|
84
|
-
git status --porcelain
|
|
85
|
-
test -z "$(git status --porcelain)"
|
|
81
|
+
run: pytest -n auto tests
|
|
86
82
|
|
|
87
83
|
- name: Syntax check documentation
|
|
88
84
|
if: ${{ always() }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: subscript
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Equinor's collection of subsurface reservoir modelling scripts
|
|
5
5
|
Author-email: Equinor <rnyb@equinor.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -698,7 +698,7 @@ Requires-Python: >=3.8
|
|
|
698
698
|
Description-Content-Type: text/markdown
|
|
699
699
|
License-File: LICENSE
|
|
700
700
|
Requires-Dist: configsuite
|
|
701
|
-
Requires-Dist:
|
|
701
|
+
Requires-Dist: resdata
|
|
702
702
|
Requires-Dist: ecl2df
|
|
703
703
|
Requires-Dist: ert>=2.38.0b7
|
|
704
704
|
Requires-Dist: fmu-tools
|
|
@@ -76,9 +76,7 @@ Notes
|
|
|
76
76
|
compressed file into account.
|
|
77
77
|
- Eclipse loading time of the compressed file is probably reduced by the
|
|
78
78
|
same factor as the compression factor.
|
|
79
|
-
- Only known compressable keywords are compressed
|
|
80
|
-
to specify particular keywords or a regex instead this can be provided
|
|
81
|
-
directly through the command line.
|
|
79
|
+
- Only known compressable keywords are compressed.
|
|
82
80
|
|
|
83
81
|
|
|
84
82
|
Possible improvements
|
|
@@ -36,7 +36,7 @@ classifiers = [
|
|
|
36
36
|
dynamic = ["version"]
|
|
37
37
|
dependencies = [
|
|
38
38
|
"configsuite",
|
|
39
|
-
"
|
|
39
|
+
"resdata",
|
|
40
40
|
"ecl2df",
|
|
41
41
|
"ert>=2.38.0b7",
|
|
42
42
|
"fmu-tools",
|
|
@@ -125,6 +125,16 @@ CsvStack = "subscript.csv_stack.csv_stack"
|
|
|
125
125
|
FmuObs = "subscript.fmuobs.fmuobs"
|
|
126
126
|
Params2Csv = "subscript.params2csv.params2csv"
|
|
127
127
|
|
|
128
|
+
[tool.setuptools]
|
|
129
|
+
script-files = [
|
|
130
|
+
"src/subscript/legacy/duf",
|
|
131
|
+
"src/subscript/legacy/eclmanual",
|
|
132
|
+
"src/subscript/legacy/ertwatch",
|
|
133
|
+
"src/subscript/legacy/list_rms_usage",
|
|
134
|
+
"src/subscript/legacy/nosim",
|
|
135
|
+
"src/subscript/legacy/runeclipse",
|
|
136
|
+
]
|
|
137
|
+
|
|
128
138
|
[tool.black]
|
|
129
139
|
line-length = 88
|
|
130
140
|
|
|
@@ -5,8 +5,8 @@ from typing import Dict, List, Literal, Optional, Tuple, Union
|
|
|
5
5
|
|
|
6
6
|
import numpy as np
|
|
7
7
|
import xtgeo
|
|
8
|
-
from
|
|
9
|
-
from
|
|
8
|
+
from resdata.grid import Grid
|
|
9
|
+
from resdata.resfile import ResdataFile
|
|
10
10
|
|
|
11
11
|
DEFAULT_CO2_MOLAR_MASS = 44.0
|
|
12
12
|
DEFAULT_WATER_MOLAR_MASS = 18.0
|
|
@@ -235,12 +235,12 @@ class Co2Data:
|
|
|
235
235
|
zone: Optional[np.ndarray] = None
|
|
236
236
|
|
|
237
237
|
|
|
238
|
-
def _try_prop(unrst:
|
|
238
|
+
def _try_prop(unrst: ResdataFile, prop_name: str):
|
|
239
239
|
"""
|
|
240
|
-
Function to determine if a property (prop_name) is part of an
|
|
240
|
+
Function to determine if a property (prop_name) is part of an ResdataFile (unrst)
|
|
241
241
|
|
|
242
242
|
Args:
|
|
243
|
-
unrst (
|
|
243
|
+
unrst (ResdataFile): ResdataFile to fetch property names from
|
|
244
244
|
prop_name (str): The property name to be searched in unrst
|
|
245
245
|
|
|
246
246
|
Returns:
|
|
@@ -255,14 +255,14 @@ def _try_prop(unrst: EclFile, prop_name: str):
|
|
|
255
255
|
|
|
256
256
|
|
|
257
257
|
def _read_props(
|
|
258
|
-
unrst:
|
|
258
|
+
unrst: ResdataFile,
|
|
259
259
|
prop_names: List,
|
|
260
260
|
) -> dict:
|
|
261
261
|
"""
|
|
262
|
-
Reads the properties in prop_names from an
|
|
262
|
+
Reads the properties in prop_names from an ResdataFile named unrst
|
|
263
263
|
|
|
264
264
|
Args:
|
|
265
|
-
unrst (
|
|
265
|
+
unrst (ResdataFile): ResdataFile to read prop_names from
|
|
266
266
|
prop_names (List): List with property names to be read
|
|
267
267
|
|
|
268
268
|
Returns:
|
|
@@ -275,14 +275,14 @@ def _read_props(
|
|
|
275
275
|
|
|
276
276
|
|
|
277
277
|
def _fetch_properties(
|
|
278
|
-
unrst:
|
|
278
|
+
unrst: ResdataFile, properties_to_extract: List
|
|
279
279
|
) -> Tuple[Dict[str, Dict[str, List[np.ndarray]]], List[str]]:
|
|
280
280
|
"""
|
|
281
|
-
Fetches the properties in properties_to_extract from an
|
|
281
|
+
Fetches the properties in properties_to_extract from an ResdataFile
|
|
282
282
|
named unrst
|
|
283
283
|
|
|
284
284
|
Args:
|
|
285
|
-
unrst (
|
|
285
|
+
unrst (ResdataFile): ResdataFile to fetch properties_to_extract from
|
|
286
286
|
properties_to_extract: List with property names to be fetched
|
|
287
287
|
|
|
288
288
|
Returns:
|
|
@@ -362,7 +362,7 @@ def _extract_source_data(
|
|
|
362
362
|
) -> SourceData:
|
|
363
363
|
# pylint: disable-msg=too-many-locals
|
|
364
364
|
"""
|
|
365
|
-
Extracts the properties in properties_to_extract from
|
|
365
|
+
Extracts the properties in properties_to_extract from Grid files
|
|
366
366
|
|
|
367
367
|
Args:
|
|
368
368
|
grid_file (str): Path to EGRID-file
|
|
@@ -376,9 +376,9 @@ def _extract_source_data(
|
|
|
376
376
|
|
|
377
377
|
"""
|
|
378
378
|
print("Start extracting source data")
|
|
379
|
-
grid =
|
|
380
|
-
unrst =
|
|
381
|
-
init =
|
|
379
|
+
grid = Grid(grid_file)
|
|
380
|
+
unrst = ResdataFile(unrst_file)
|
|
381
|
+
init = ResdataFile(init_file)
|
|
382
382
|
properties, dates = _fetch_properties(unrst, properties_to_extract)
|
|
383
383
|
print("Done fetching properties")
|
|
384
384
|
|
|
@@ -6,12 +6,10 @@ import glob
|
|
|
6
6
|
import itertools
|
|
7
7
|
import logging
|
|
8
8
|
import os
|
|
9
|
-
import re
|
|
10
9
|
import shutil
|
|
11
10
|
import textwrap
|
|
12
|
-
import warnings
|
|
13
11
|
from pathlib import Path
|
|
14
|
-
from typing import List,
|
|
12
|
+
from typing import List, Tuple, Union
|
|
15
13
|
|
|
16
14
|
import subscript
|
|
17
15
|
|
|
@@ -79,7 +77,6 @@ def eclcompress(
|
|
|
79
77
|
files: Union[str, List[str]],
|
|
80
78
|
keeporiginal: bool = False,
|
|
81
79
|
dryrun: bool = False,
|
|
82
|
-
eclkw_regexp: Optional[str] = None,
|
|
83
80
|
) -> int:
|
|
84
81
|
"""Run-length encode a set of grdecl files.
|
|
85
82
|
|
|
@@ -89,8 +86,7 @@ def eclcompress(
|
|
|
89
86
|
files: Filenames to be compressed
|
|
90
87
|
keeporiginal: Whether to copy the original to a backup file
|
|
91
88
|
dryrun: If true, only print compression efficiency
|
|
92
|
-
|
|
93
|
-
Default is [A-Z]{2-8}$
|
|
89
|
+
|
|
94
90
|
Returns:
|
|
95
91
|
Number of bytes saved by compression.
|
|
96
92
|
"""
|
|
@@ -98,12 +94,6 @@ def eclcompress(
|
|
|
98
94
|
if not isinstance(files, list):
|
|
99
95
|
files = [files] # List with one element
|
|
100
96
|
|
|
101
|
-
if eclkw_regexp:
|
|
102
|
-
warnings.warn(
|
|
103
|
-
"Providing a keyword regex will be removed in Komodo 2023.11.",
|
|
104
|
-
DeprecationWarning,
|
|
105
|
-
)
|
|
106
|
-
|
|
107
97
|
totalsavings = 0
|
|
108
98
|
|
|
109
99
|
for filename in files:
|
|
@@ -137,7 +127,7 @@ def eclcompress(
|
|
|
137
127
|
# Index the list of strings (the file contents) by the line numbers
|
|
138
128
|
# where Eclipse keywords start, and where the first data record of the keyword
|
|
139
129
|
# ends (compression is not attempted in record 2 and onwards for any keyword)
|
|
140
|
-
keywordsets = find_keyword_sets(filelines
|
|
130
|
+
keywordsets = find_keyword_sets(filelines)
|
|
141
131
|
|
|
142
132
|
if not keywordsets:
|
|
143
133
|
logger.info(
|
|
@@ -299,9 +289,7 @@ def compress_multiple_keywordsets(
|
|
|
299
289
|
return compressedlines
|
|
300
290
|
|
|
301
291
|
|
|
302
|
-
def find_keyword_sets(
|
|
303
|
-
filelines: List[str], eclkw_regexp: Optional[Union[str, Pattern[str]]] = None
|
|
304
|
-
) -> List[Tuple[int, int]]:
|
|
292
|
+
def find_keyword_sets(filelines: List[str]) -> List[Tuple[int, int]]:
|
|
305
293
|
"""Parse list of strings, looking for Eclipse data sets that we want.
|
|
306
294
|
|
|
307
295
|
Example:
|
|
@@ -335,9 +323,6 @@ def find_keyword_sets(
|
|
|
335
323
|
|
|
336
324
|
Args:
|
|
337
325
|
filelines: Eclipse deck lines (not necessarily complete decks)
|
|
338
|
-
eclkw_regexp: Regular expression for locating Eclipse keywords.
|
|
339
|
-
Default is None, in which it uses a predefined allowlist of
|
|
340
|
-
keywords
|
|
341
326
|
|
|
342
327
|
Return:
|
|
343
328
|
2-tuples, with start and end line indices for datasets to
|
|
@@ -346,26 +331,19 @@ def find_keyword_sets(
|
|
|
346
331
|
"""
|
|
347
332
|
keywordsets = []
|
|
348
333
|
kwstart = None
|
|
349
|
-
if eclkw_regexp:
|
|
350
|
-
eclkw_regexp = re.compile(eclkw_regexp)
|
|
351
334
|
|
|
352
335
|
for lineidx, line in enumerate(filelines):
|
|
353
336
|
line = line.strip()
|
|
354
337
|
if not line:
|
|
355
338
|
continue
|
|
356
|
-
if
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
kwstart = lineidx
|
|
365
|
-
if "/" in line:
|
|
366
|
-
keywordsets.append((kwstart, lineidx))
|
|
367
|
-
kwstart = None
|
|
368
|
-
continue
|
|
339
|
+
# Remove embracing quotes if in a multi-keyword
|
|
340
|
+
keyword = line.split(" ")[0].strip("'")
|
|
341
|
+
if keyword in ALLOWLIST_KEYWORDS:
|
|
342
|
+
kwstart = lineidx
|
|
343
|
+
if "/" in line:
|
|
344
|
+
keywordsets.append((kwstart, lineidx))
|
|
345
|
+
kwstart = None
|
|
346
|
+
continue
|
|
369
347
|
if kwstart is not None and line[0:2] == "--":
|
|
370
348
|
# This means we found a comment section within a data set
|
|
371
349
|
# In that case it is vital to preserve the current line
|
|
@@ -453,14 +431,6 @@ def get_parser() -> argparse.ArgumentParser:
|
|
|
453
431
|
"no files are specified on the command line."
|
|
454
432
|
),
|
|
455
433
|
)
|
|
456
|
-
parser.add_argument(
|
|
457
|
-
"--eclkw_regexp",
|
|
458
|
-
help=(
|
|
459
|
-
"Regular expression to determine which Eclipse keyword "
|
|
460
|
-
"to recognize. Default is None, using instead a list of known "
|
|
461
|
-
"compressable keywords."
|
|
462
|
-
),
|
|
463
|
-
)
|
|
464
434
|
parser.add_argument(
|
|
465
435
|
"--version",
|
|
466
436
|
action="version",
|
|
@@ -506,7 +476,6 @@ def main():
|
|
|
506
476
|
args.files,
|
|
507
477
|
keeporiginal=args.keeporiginal,
|
|
508
478
|
dryrun=args.dryrun,
|
|
509
|
-
eclkw_regexp=args.eclkw_regexp,
|
|
510
479
|
)
|
|
511
480
|
|
|
512
481
|
|
|
@@ -515,7 +484,6 @@ def main_eclcompress(
|
|
|
515
484
|
wildcardfile: str,
|
|
516
485
|
keeporiginal: bool = False,
|
|
517
486
|
dryrun: bool = False,
|
|
518
|
-
eclkw_regexp: Optional[str] = None,
|
|
519
487
|
) -> None:
|
|
520
488
|
"""Implements the command line functionality
|
|
521
489
|
|
|
@@ -525,8 +493,6 @@ def main_eclcompress(
|
|
|
525
493
|
keeporiginal: Whether a backup file should be left behind
|
|
526
494
|
dryrun: Nothing written to disk, only statistics for
|
|
527
495
|
compression printed to terminal.
|
|
528
|
-
eclkw_regexp: Regular expression for locating Eclipse keywords.
|
|
529
|
-
Default is None
|
|
530
496
|
"""
|
|
531
497
|
# A list of wildcards on the command line should always be compressed:
|
|
532
498
|
if grdeclfiles:
|
|
@@ -558,7 +524,6 @@ def main_eclcompress(
|
|
|
558
524
|
globbedfiles,
|
|
559
525
|
keeporiginal=keeporiginal,
|
|
560
526
|
dryrun=dryrun,
|
|
561
|
-
eclkw_regexp=eclkw_regexp,
|
|
562
527
|
)
|
|
563
528
|
savings_mb = savings / 1024.0 / 1024.0
|
|
564
529
|
print(f"eclcompress finished. Saved {savings_mb:.1f} Mb from compression")
|
|
@@ -10,7 +10,7 @@ from pathlib import Path
|
|
|
10
10
|
|
|
11
11
|
import numpy
|
|
12
12
|
import pandas
|
|
13
|
-
from
|
|
13
|
+
from resdata.resfile import ResdataFile
|
|
14
14
|
|
|
15
15
|
from subscript import __version__
|
|
16
16
|
|
|
@@ -26,8 +26,8 @@ written to the same filename (keeping the original is optional)
|
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def
|
|
30
|
-
"""Locate path of apps in
|
|
29
|
+
def find_resdata_app(toolname: str) -> str:
|
|
30
|
+
"""Locate path of apps in resdata.
|
|
31
31
|
|
|
32
32
|
These have varying suffixes due through the history of libecl Makefiles.
|
|
33
33
|
|
|
@@ -61,10 +61,10 @@ def date_slicer(slicedates: list, restartdates: list, restartindices: list) -> d
|
|
|
61
61
|
return slicedatemap
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
def
|
|
64
|
+
def rd_repacker(rstfilename: str, slicerstindices: list, quiet: bool) -> None:
|
|
65
65
|
"""
|
|
66
66
|
Wrapper for ecl_unpack.x and ecl_pack.x utilities. These
|
|
67
|
-
utilities are from
|
|
67
|
+
utilities are from resdata.
|
|
68
68
|
|
|
69
69
|
First unpacking a UNRST file, then deleting dates the dont't want, then
|
|
70
70
|
pack the remainding files into a new UNRST file
|
|
@@ -79,11 +79,11 @@ def ecl_repacker(rstfilename: str, slicerstindices: list, quiet: bool) -> None:
|
|
|
79
79
|
out = ""
|
|
80
80
|
# Error early if libecl tools are not available
|
|
81
81
|
try:
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
find_resdata_app("rd_unpack")
|
|
83
|
+
find_resdata_app("rd_pack")
|
|
84
84
|
except IOError:
|
|
85
85
|
sys.exit(
|
|
86
|
-
"ERROR:
|
|
86
|
+
"ERROR: rd_unpack.x and/or rd_pack.x not found.\n"
|
|
87
87
|
"These tools are required and must be installed separately"
|
|
88
88
|
)
|
|
89
89
|
|
|
@@ -99,13 +99,13 @@ def ecl_repacker(rstfilename: str, slicerstindices: list, quiet: bool) -> None:
|
|
|
99
99
|
)
|
|
100
100
|
os.chdir(tempdir)
|
|
101
101
|
os.system(
|
|
102
|
-
|
|
102
|
+
find_resdata_app("rd_unpack") + " " + os.path.basename(rstfilename) + out
|
|
103
103
|
)
|
|
104
104
|
unpackedfiles = glob.glob("*.X*")
|
|
105
105
|
for file in unpackedfiles:
|
|
106
106
|
if int(file.split(".X")[1]) not in slicerstindices:
|
|
107
107
|
os.remove(file)
|
|
108
|
-
os.system(
|
|
108
|
+
os.system(find_resdata_app("rd_pack") + " *.X*" + out)
|
|
109
109
|
# We are inside the tmp directory, move file one step up:
|
|
110
110
|
os.rename(
|
|
111
111
|
os.path.join(os.getcwd(), os.path.basename(rstfilename)),
|
|
@@ -120,7 +120,7 @@ def get_restart_indices(rstfilename: str) -> list:
|
|
|
120
120
|
"""Extract a list of RST indices for a filename"""
|
|
121
121
|
if Path(rstfilename).exists():
|
|
122
122
|
# This function segfaults if file does not exist
|
|
123
|
-
return
|
|
123
|
+
return ResdataFile.file_report_list(str(rstfilename))
|
|
124
124
|
raise FileNotFoundError(f"{rstfilename} not found")
|
|
125
125
|
|
|
126
126
|
|
|
@@ -134,7 +134,7 @@ def restartthinner(
|
|
|
134
134
|
"""
|
|
135
135
|
Thin an existing UNRST file to selected number of restarts.
|
|
136
136
|
"""
|
|
137
|
-
rst =
|
|
137
|
+
rst = ResdataFile(filename)
|
|
138
138
|
restart_indices = get_restart_indices(filename)
|
|
139
139
|
restart_dates = [
|
|
140
140
|
rst.iget_restart_sim_time(index) for index in range(0, len(restart_indices))
|
|
@@ -177,7 +177,7 @@ def restartthinner(
|
|
|
177
177
|
if not quiet:
|
|
178
178
|
print(f"Info: Backing up {filename} to {backupname}")
|
|
179
179
|
shutil.copyfile(filename, backupname)
|
|
180
|
-
|
|
180
|
+
rd_repacker(filename, slicerstindices, quiet)
|
|
181
181
|
print(f"Written to {filename}")
|
|
182
182
|
|
|
183
183
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
from
|
|
6
|
-
from
|
|
4
|
+
from resdata import ResDataType
|
|
5
|
+
from resdata.grid import ResdataRegion
|
|
6
|
+
from resdata.resfile import ResdataKW
|
|
7
7
|
|
|
8
8
|
from subscript.sector2fluxnum import flux_util
|
|
9
9
|
|
|
@@ -20,9 +20,9 @@ class Fluxnum:
|
|
|
20
20
|
|
|
21
21
|
Creates a non-initialized FLUXNUM keyword
|
|
22
22
|
"""
|
|
23
|
-
int_type =
|
|
23
|
+
int_type = ResDataType.RD_INT
|
|
24
24
|
self.grid = grid
|
|
25
|
-
self.fluxnum_kw =
|
|
25
|
+
self.fluxnum_kw = ResdataKW("FLUXNUM", grid.getGlobalSize(), int_type)
|
|
26
26
|
self.included_wells = []
|
|
27
27
|
self.dummy_lgr_cell = []
|
|
28
28
|
self.dummy_lgr_well = []
|
|
@@ -44,7 +44,7 @@ class Fluxnum:
|
|
|
44
44
|
|
|
45
45
|
Initializes inner region used to define the FLUXNUM
|
|
46
46
|
"""
|
|
47
|
-
self.inner_region =
|
|
47
|
+
self.inner_region = ResdataRegion(self.grid, False)
|
|
48
48
|
self.inner_region.select_all()
|
|
49
49
|
|
|
50
50
|
def set_lgr_box_region(self, i, j, k):
|
|
@@ -54,7 +54,7 @@ class Fluxnum:
|
|
|
54
54
|
Only works for Box regions
|
|
55
55
|
|
|
56
56
|
"""
|
|
57
|
-
self.lgr_region =
|
|
57
|
+
self.lgr_region = ResdataRegion(self.grid, False)
|
|
58
58
|
ijk_list = flux_util.unpack_ijk(i, j, k)
|
|
59
59
|
|
|
60
60
|
# Drags lgr boundaries one cell from box region
|
|
@@ -91,11 +91,11 @@ class Fluxnum:
|
|
|
91
91
|
print("ERROR: FLUXNUM input file not found!")
|
|
92
92
|
sys.exit(1)
|
|
93
93
|
|
|
94
|
-
int_type =
|
|
94
|
+
int_type = ResDataType.RD_INT
|
|
95
95
|
|
|
96
96
|
with open(fluxnum_file, "r", encoding="utf8") as file_handle:
|
|
97
|
-
self.fluxnum_kw =
|
|
98
|
-
file_handle, "FLUXNUM",
|
|
97
|
+
self.fluxnum_kw = ResdataKW.read_grdecl(
|
|
98
|
+
file_handle, "FLUXNUM", rd_type=int_type
|
|
99
99
|
)
|
|
100
100
|
|
|
101
101
|
def get_fluxnum_kw(self):
|
|
@@ -203,11 +203,11 @@ class FluxnumBox(Fluxnum):
|
|
|
203
203
|
self.set_outer_region(i_start, i_end, j_start, j_end, k_start, k_end)
|
|
204
204
|
|
|
205
205
|
def set_inner_region(self, i_start, i_end, j_start, j_end, k_start, k_end):
|
|
206
|
-
self.inner_region =
|
|
206
|
+
self.inner_region = ResdataRegion(self.grid, False)
|
|
207
207
|
self.inner_region.select_box((i_start, j_start, k_start), (i_end, j_end, k_end))
|
|
208
208
|
|
|
209
209
|
def set_outer_region(self, i_start, i_end, j_start, j_end, k_start, k_end):
|
|
210
|
-
self.outer_region =
|
|
210
|
+
self.outer_region = ResdataRegion(self.grid, False)
|
|
211
211
|
self.outer_region.select_box((i_start, j_start, k_start), (i_end, j_end, k_end))
|
|
212
212
|
self.outer_region.invert()
|
|
213
213
|
|
|
@@ -247,8 +247,8 @@ class FluxnumFipnum(Fluxnum):
|
|
|
247
247
|
raise Exception("ERROR: FIPNUM input file not found!")
|
|
248
248
|
|
|
249
249
|
with open(fipnum_file, "r", encoding="utf8") as file_handle:
|
|
250
|
-
fipnum =
|
|
251
|
-
file_handle, "FIPNUM",
|
|
250
|
+
fipnum = ResdataKW.read_grdecl(
|
|
251
|
+
file_handle, "FIPNUM", rd_type=ResDataType.RD_INT
|
|
252
252
|
)
|
|
253
253
|
|
|
254
254
|
else:
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
from
|
|
1
|
+
from resdata.grid import ResdataRegion
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
def filter_region(
|
|
5
5
|
grid, idx_i, idx_j, idx_k, fipnum, fipnum_kw, combine_operator="intersect"
|
|
6
6
|
):
|
|
7
7
|
# Filter out the selected grid cells
|
|
8
|
-
region =
|
|
9
|
-
region1 =
|
|
10
|
-
region_i =
|
|
11
|
-
region_j =
|
|
12
|
-
region_k =
|
|
13
|
-
region_fip =
|
|
8
|
+
region = ResdataRegion(grid, False)
|
|
9
|
+
region1 = ResdataRegion(grid, False)
|
|
10
|
+
region_i = ResdataRegion(grid, False)
|
|
11
|
+
region_j = ResdataRegion(grid, False)
|
|
12
|
+
region_k = ResdataRegion(grid, False)
|
|
13
|
+
region_fip = ResdataRegion(grid, False)
|
|
14
14
|
|
|
15
15
|
# Create selected regions for each filter type
|
|
16
16
|
if idx_i:
|
|
@@ -3,8 +3,8 @@ import datetime
|
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
5
|
import cwrap
|
|
6
|
-
from
|
|
7
|
-
from
|
|
6
|
+
from resdata.grid import Grid
|
|
7
|
+
from resdata.resfile import FortIO, ResdataFile
|
|
8
8
|
|
|
9
9
|
from subscript.sector2fluxnum import completions, datafile_obj, flux_obj, fluxfile_obj
|
|
10
10
|
|
|
@@ -105,11 +105,11 @@ def sector_to_fluxnum(args):
|
|
|
105
105
|
print("Reading grid ...")
|
|
106
106
|
if args.egrid:
|
|
107
107
|
args.egrid = os.path.abspath(args.egrid).split(".")[0:1]
|
|
108
|
-
grid =
|
|
108
|
+
grid = Grid(f"{args.egrid[0]}.EGRID")
|
|
109
109
|
else:
|
|
110
|
-
grid =
|
|
110
|
+
grid = Grid(f"{args.ECLIPSE_CASE[0]}.EGRID")
|
|
111
111
|
|
|
112
|
-
init =
|
|
112
|
+
init = ResdataFile(f"{args.ECLIPSE_CASE[0]}.INIT")
|
|
113
113
|
|
|
114
114
|
# Finding well completions
|
|
115
115
|
completion_list, well_list = completions.get_completion_list(
|
|
@@ -170,9 +170,9 @@ def sector_to_fluxnum(args):
|
|
|
170
170
|
# Needs the coordinates from the
|
|
171
171
|
print("Generating new FLUX file...")
|
|
172
172
|
|
|
173
|
-
grid_coarse =
|
|
174
|
-
grid_fine =
|
|
175
|
-
flux_fine =
|
|
173
|
+
grid_coarse = Grid(f"{args.test[0]}.EGRID")
|
|
174
|
+
grid_fine = Grid(f"{args.test[0]}.EGRID")
|
|
175
|
+
flux_fine = ResdataFile(f"{args.test[0]}.FLUX")
|
|
176
176
|
|
|
177
177
|
else:
|
|
178
178
|
print("Executing DUMPFLUX NOSIM run ...")
|
|
@@ -187,15 +187,15 @@ def sector_to_fluxnum(args):
|
|
|
187
187
|
# Needs the coordinates from the
|
|
188
188
|
print("Generating new FLUX file...")
|
|
189
189
|
|
|
190
|
-
grid_coarse =
|
|
191
|
-
grid_fine =
|
|
192
|
-
flux_fine =
|
|
190
|
+
grid_coarse = Grid(f"DUMPFLUX_{eclipse_case_root}.EGRID")
|
|
191
|
+
grid_fine = Grid(f"DUMPFLUX_{eclipse_case_root}.EGRID")
|
|
192
|
+
flux_fine = ResdataFile(f"DUMPFLUX_{eclipse_case_root}.FLUX")
|
|
193
193
|
|
|
194
194
|
# Reads restart file
|
|
195
195
|
if args.restart:
|
|
196
|
-
rst_coarse =
|
|
196
|
+
rst_coarse = ResdataFile(f"{args.restart[0]}.UNRST")
|
|
197
197
|
else:
|
|
198
|
-
rst_coarse =
|
|
198
|
+
rst_coarse = ResdataFile(f"{args.ECLIPSE_CASE[0]}.UNRST")
|
|
199
199
|
|
|
200
200
|
flux_object_fine = fluxfile_obj.Fluxfile(grid_fine, flux_fine)
|
|
201
201
|
|
|
@@ -32,12 +32,12 @@ from typing import Optional
|
|
|
32
32
|
|
|
33
33
|
import matplotlib.pyplot
|
|
34
34
|
import numpy as np
|
|
35
|
-
from ecl.eclfile import EclFile # type: ignore
|
|
36
|
-
from ecl.grid import EclGrid # type: ignore
|
|
37
|
-
from ecl.summary import EclSum # type: ignore
|
|
38
35
|
|
|
39
36
|
# Get rid of FutureWarning from pandas/plotting.py
|
|
40
37
|
from pandas.plotting import register_matplotlib_converters
|
|
38
|
+
from resdata.grid import Grid # type: ignore
|
|
39
|
+
from resdata.resfile import ResdataFile # type: ignore
|
|
40
|
+
from resdata.summary import Summary # type: ignore
|
|
41
41
|
|
|
42
42
|
import subscript
|
|
43
43
|
|
|
@@ -146,7 +146,7 @@ def summaryplotter(
|
|
|
146
146
|
Will plot Eclipse summary vectors to screen or dump to file based on kwargs.
|
|
147
147
|
|
|
148
148
|
Args:
|
|
149
|
-
|
|
149
|
+
summaryfiles: List of Summary objects
|
|
150
150
|
datafiles: List of Eclipse DATA files
|
|
151
151
|
vectors: List of strings, with Eclipse summary vectors
|
|
152
152
|
parameterfiles:
|
|
@@ -161,7 +161,7 @@ def summaryplotter(
|
|
|
161
161
|
logcolourby:
|
|
162
162
|
"""
|
|
163
163
|
rstfiles = [] # EclRst objects
|
|
164
|
-
gridfiles = [] #
|
|
164
|
+
gridfiles = [] # Grid objects
|
|
165
165
|
parametervalues = [] # Vector of values pr. realization for colouring
|
|
166
166
|
|
|
167
167
|
if parameterfiles is None:
|
|
@@ -169,7 +169,7 @@ def summaryplotter(
|
|
|
169
169
|
|
|
170
170
|
if datafiles and not summaryfiles:
|
|
171
171
|
logger.info("Reloading summary files from disk")
|
|
172
|
-
summaryfiles = [
|
|
172
|
+
summaryfiles = [Summary(datafile) for datafile in datafiles]
|
|
173
173
|
|
|
174
174
|
if maxlabels == 0:
|
|
175
175
|
nolegend = True
|
|
@@ -308,8 +308,8 @@ def summaryplotter(
|
|
|
308
308
|
logger.info("Loading grid and restart file %s", rstfile)
|
|
309
309
|
# TODO: Allow some of the rstfiles to be missing
|
|
310
310
|
# TODO: Handle missing rstfiles gracefully
|
|
311
|
-
rst =
|
|
312
|
-
grid =
|
|
311
|
+
rst = ResdataFile(rstfile)
|
|
312
|
+
grid = Grid(gridfile)
|
|
313
313
|
rstfiles.append(rst)
|
|
314
314
|
gridfiles.append(grid)
|
|
315
315
|
logger.info("RST loading done")
|
|
@@ -574,24 +574,24 @@ def summaryplotter(
|
|
|
574
574
|
def split_vectorsdatafiles(vectorsdatafiles):
|
|
575
575
|
"""
|
|
576
576
|
Takes a list of strings and determines which of the arguments are Eclipse runs
|
|
577
|
-
(by attempting to construct an
|
|
578
|
-
vector names/wildcards (that is, those that are not openable as
|
|
577
|
+
(by attempting to construct an Summary object), and which are summary
|
|
578
|
+
vector names/wildcards (that is, those that are not openable as Summary)
|
|
579
579
|
|
|
580
580
|
Args:
|
|
581
581
|
vectorsdatafiles (list): List of strings
|
|
582
582
|
|
|
583
583
|
Returns:
|
|
584
|
-
tuple: 4-tuple of lists, with
|
|
584
|
+
tuple: 4-tuple of lists, with Summary-filenames, datafilename-strings,
|
|
585
585
|
vector-strings, parameterfilename-strings
|
|
586
586
|
"""
|
|
587
|
-
summaryfiles = [] #
|
|
587
|
+
summaryfiles = [] # Summary instances corresponding to datafiles
|
|
588
588
|
datafiles = [] # strings
|
|
589
589
|
vectors = [] # strings
|
|
590
590
|
parameterfiles = [] # strings
|
|
591
591
|
|
|
592
592
|
for vecdata in vectorsdatafiles:
|
|
593
593
|
try:
|
|
594
|
-
sumfn =
|
|
594
|
+
sumfn = Summary(vecdata)
|
|
595
595
|
datafiles.append(vecdata)
|
|
596
596
|
|
|
597
597
|
summaryfiles.append(sumfn)
|