subscript 1.5.0__tar.gz → 1.6.1__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.
Files changed (324) hide show
  1. {subscript-1.5.0 → subscript-1.6.1}/.github/workflows/codecov.yml +4 -2
  2. {subscript-1.5.0 → subscript-1.6.1}/.github/workflows/subscript.yml +1 -0
  3. {subscript-1.5.0 → subscript-1.6.1}/PKG-INFO +3 -3
  4. subscript-1.6.1/docs/scripts/grav_subs_maps.rst +10 -0
  5. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/summaryplot.rst +1 -1
  6. {subscript-1.5.0 → subscript-1.6.1}/pyproject.toml +3 -2
  7. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/check_swatinit/check_swatinit.py +1 -1
  8. subscript-1.6.1/src/subscript/config_jobs/GRAV_SUBS_MAPS +9 -0
  9. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclcompress/eclcompress.py +2 -2
  10. subscript-1.6.1/src/subscript/grav_subs_maps/grav_subs_maps.py +324 -0
  11. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/interp_relperm/interp_relperm.py +25 -9
  12. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/runeclipse +16 -5
  13. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/restartthinner/restartthinner.py +3 -3
  14. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/version.py +2 -2
  15. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/welltest_dpds/welltest_dpds.py +1 -14
  16. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/PKG-INFO +3 -3
  17. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/SOURCES.txt +12 -0
  18. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/entry_points.txt +1 -0
  19. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/requires.txt +2 -2
  20. subscript-1.6.1/tests/__init__.py +0 -0
  21. {subscript-1.5.0 → subscript-1.6.1}/tests/test_check_swatinit.py +1 -1
  22. {subscript-1.5.0 → subscript-1.6.1}/tests/test_check_swatinit_simulators.py +1 -1
  23. {subscript-1.5.0 → subscript-1.6.1}/tests/test_eclcompress.py +23 -0
  24. subscript-1.6.1/tests/test_grav_subs_maps.py +184 -0
  25. {subscript-1.5.0 → subscript-1.6.1}/tests/test_hook_implementations.py +1 -0
  26. {subscript-1.5.0 → subscript-1.6.1}/tests/test_interp_relperm.py +116 -0
  27. {subscript-1.5.0 → subscript-1.6.1}/tests/test_sunsch.py +2 -19
  28. subscript-1.6.1/tests/testdata_gravity/HIST.EGRID +0 -0
  29. subscript-1.6.1/tests/testdata_gravity/HIST.INIT +0 -0
  30. subscript-1.6.1/tests/testdata_gravity/HIST.UNRST +0 -0
  31. subscript-1.6.1/tests/testdata_gravity/grav_subs_maps_hist.yml +12 -0
  32. subscript-1.6.1/tests/testdata_gravity/grav_subs_points.yml +16 -0
  33. subscript-1.6.1/tests/testdata_gravity/seabed.gri +0 -0
  34. subscript-1.6.1/tests/testdata_gravity/station_coordinates.txt +12 -0
  35. {subscript-1.5.0 → subscript-1.6.1}/.github/workflows/publish.yml +0 -0
  36. {subscript-1.5.0 → subscript-1.6.1}/.gitignore +0 -0
  37. {subscript-1.5.0 → subscript-1.6.1}/.pylintrc +0 -0
  38. {subscript-1.5.0 → subscript-1.6.1}/LICENSE +0 -0
  39. {subscript-1.5.0 → subscript-1.6.1}/README.md +0 -0
  40. {subscript-1.5.0 → subscript-1.6.1}/SECURITY.md +0 -0
  41. {subscript-1.5.0 → subscript-1.6.1}/ci/testkomodo.sh +0 -0
  42. {subscript-1.5.0 → subscript-1.6.1}/docs/Makefile +0 -0
  43. {subscript-1.5.0 → subscript-1.6.1}/docs/_static/equinor-logo.png +0 -0
  44. {subscript-1.5.0 → subscript-1.6.1}/docs/_static/equinor-logo2.jpg +0 -0
  45. {subscript-1.5.0 → subscript-1.6.1}/docs/_static/equinor-logo2.png +0 -0
  46. {subscript-1.5.0 → subscript-1.6.1}/docs/_static/equinor_logo.jpg +0 -0
  47. {subscript-1.5.0 → subscript-1.6.1}/docs/_static/equinor_logo_only.jpg +0 -0
  48. {subscript-1.5.0 → subscript-1.6.1}/docs/_templates/layout.html +0 -0
  49. {subscript-1.5.0 → subscript-1.6.1}/docs/conf.py +0 -0
  50. {subscript-1.5.0 → subscript-1.6.1}/docs/contributing.rst +0 -0
  51. {subscript-1.5.0 → subscript-1.6.1}/docs/history.rst +0 -0
  52. {subscript-1.5.0 → subscript-1.6.1}/docs/index.rst +0 -0
  53. {subscript-1.5.0 → subscript-1.6.1}/docs/make.bat +0 -0
  54. {subscript-1.5.0 → subscript-1.6.1}/docs/overview.rst +0 -0
  55. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/bjobsusers.rst +0 -0
  56. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/casegen_upcars.rst +0 -0
  57. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/check_swatinit.rst +0 -0
  58. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/convert_grid_format.rst +0 -0
  59. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/csv2ofmvol.rst +0 -0
  60. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/csv_merge.rst +0 -0
  61. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/csv_stack.rst +0 -0
  62. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/eclcompress.rst +0 -0
  63. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/ecldiff2roff.rst +0 -0
  64. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/fmu_copy_revision.rst +0 -0
  65. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/fmuobs.rst +0 -0
  66. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/Pack_sim_overview.png +0 -0
  67. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
  68. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/Summaryplot-ert.png +0 -0
  69. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
  70. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
  71. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
  72. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/check_swatinit_scatter.png +0 -0
  73. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/check_swatinit_volplot.png +0 -0
  74. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/ecl-swat-initialization.png +0 -0
  75. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
  76. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
  77. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/interp_relperm.rst +0 -0
  78. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/merge_rft_ertobs.rst +0 -0
  79. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/merge_unrst_files.rst +0 -0
  80. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/ofmvol2csv.rst +0 -0
  81. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/pack_sim.rst +0 -0
  82. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/params2csv.rst +0 -0
  83. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/presentvalue.rst +0 -0
  84. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/prtvol2csv.csv +0 -0
  85. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/prtvol2csv.rst +0 -0
  86. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/restartthinner.rst +0 -0
  87. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/ri_wellmod.rst +0 -0
  88. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/rmsecl_volumetrics.rst +0 -0
  89. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/runeclipse.rst +0 -0
  90. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/sector2fluxnum.rst +0 -0
  91. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/sunsch.rst +0 -0
  92. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/sw_model_utilities.rst +0 -0
  93. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/vfp2csv.rst +0 -0
  94. {subscript-1.5.0 → subscript-1.6.1}/docs/scripts/welltest_dpds.rst +0 -0
  95. {subscript-1.5.0 → subscript-1.6.1}/docs/usage.rst +0 -0
  96. {subscript-1.5.0 → subscript-1.6.1}/setup.cfg +0 -0
  97. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/__init__.py +0 -0
  98. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/bjobsusers/__init__.py +0 -0
  99. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/bjobsusers/bjobsusers.py +0 -0
  100. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/casegen_upcars/__init__.py +0 -0
  101. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
  102. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/casegen_upcars/model.py +0 -0
  103. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/casegen_upcars/udf.py +0 -0
  104. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
  105. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/check_swatinit/__init__.py +0 -0
  106. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/check_swatinit/constants.py +0 -0
  107. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/check_swatinit/pillarmodel.py +0 -0
  108. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/check_swatinit/plotter.py +0 -0
  109. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
  110. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
  111. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
  112. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/CSV_STACK +0 -0
  113. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
  114. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
  115. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
  116. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
  117. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
  118. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
  119. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
  120. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
  121. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
  122. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/PARAMS2CSV +0 -0
  123. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
  124. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/RI_WELLMOD +0 -0
  125. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/SUNSCH +0 -0
  126. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
  127. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/convert_grid_format/__init__.py +0 -0
  128. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
  129. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv2ofmvol/__init__.py +0 -0
  130. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
  131. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv_merge/__init__.py +0 -0
  132. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv_merge/csv_merge.py +0 -0
  133. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv_stack/__init__.py +0 -0
  134. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/csv_stack/csv_stack.py +0 -0
  135. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclcompress/__init__.py +0 -0
  136. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclcompress/allowlist.py +0 -0
  137. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/ecldiff2roff/__init__.py +0 -0
  138. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
  139. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
  140. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
  141. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
  142. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmu_copy_revision/__init__.py +0 -0
  143. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
  144. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmuobs/__init__.py +0 -0
  145. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmuobs/fmuobs.py +0 -0
  146. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmuobs/parsers.py +0 -0
  147. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmuobs/util.py +0 -0
  148. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/fmuobs/writers.py +0 -0
  149. {subscript-1.5.0/src/subscript/hook_implementations → subscript-1.6.1/src/subscript/grav_subs_maps}/__init__.py +0 -0
  150. {subscript-1.5.0/src/subscript/interp_relperm → subscript-1.6.1/src/subscript/hook_implementations}/__init__.py +0 -0
  151. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/hook_implementations/jobs.py +0 -0
  152. {subscript-1.5.0/src/subscript/merge_rft_ertobs → subscript-1.6.1/src/subscript/interp_relperm}/__init__.py +0 -0
  153. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/duf +0 -0
  154. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/eclmanual +0 -0
  155. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/ertwatch +0 -0
  156. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/list_rms_usage +0 -0
  157. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/legacy/nosim +0 -0
  158. {subscript-1.5.0/src/subscript/merge_unrst_files → subscript-1.6.1/src/subscript/merge_rft_ertobs}/__init__.py +0 -0
  159. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
  160. {subscript-1.5.0/src/subscript/ofmvol2csv → subscript-1.6.1/src/subscript/merge_unrst_files}/__init__.py +0 -0
  161. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
  162. {subscript-1.5.0/src/subscript/pack_sim → subscript-1.6.1/src/subscript/ofmvol2csv}/__init__.py +0 -0
  163. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
  164. {subscript-1.5.0/src/subscript/params2csv → subscript-1.6.1/src/subscript/pack_sim}/__init__.py +0 -0
  165. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/pack_sim/pack_sim.py +0 -0
  166. {subscript-1.5.0/src/subscript/presentvalue → subscript-1.6.1/src/subscript/params2csv}/__init__.py +0 -0
  167. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/params2csv/params2csv.py +0 -0
  168. {subscript-1.5.0/src/subscript/prtvol2csv → subscript-1.6.1/src/subscript/presentvalue}/__init__.py +0 -0
  169. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/presentvalue/presentvalue.py +0 -0
  170. {subscript-1.5.0/src/subscript/restartthinner → subscript-1.6.1/src/subscript/prtvol2csv}/__init__.py +0 -0
  171. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/prtvol2csv/prtvol2csv.py +0 -0
  172. {subscript-1.5.0/src/subscript/ri_wellmod → subscript-1.6.1/src/subscript/restartthinner}/__init__.py +0 -0
  173. {subscript-1.5.0/src/subscript/rmsecl_volumetrics → subscript-1.6.1/src/subscript/ri_wellmod}/__init__.py +0 -0
  174. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
  175. {subscript-1.5.0/src/subscript/sector2fluxnum → subscript-1.6.1/src/subscript/rmsecl_volumetrics}/__init__.py +0 -0
  176. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
  177. {subscript-1.5.0/src/subscript/summaryplot → subscript-1.6.1/src/subscript/sector2fluxnum}/__init__.py +0 -0
  178. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/completions.py +0 -0
  179. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
  180. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/flux_obj.py +0 -0
  181. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/flux_util.py +0 -0
  182. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
  183. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
  184. {subscript-1.5.0/src/subscript/sunsch → subscript-1.6.1/src/subscript/summaryplot}/__init__.py +0 -0
  185. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/summaryplot/summaryplot.py +0 -0
  186. {subscript-1.5.0/src/subscript/sw_model_utilities → subscript-1.6.1/src/subscript/sunsch}/__init__.py +0 -0
  187. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sunsch/sunsch.py +0 -0
  188. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sunsch/time_vector.py +0 -0
  189. {subscript-1.5.0/src/subscript/vfp2csv → subscript-1.6.1/src/subscript/sw_model_utilities}/__init__.py +0 -0
  190. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
  191. {subscript-1.5.0/src/subscript/welltest_dpds → subscript-1.6.1/src/subscript/vfp2csv}/__init__.py +0 -0
  192. {subscript-1.5.0 → subscript-1.6.1}/src/subscript/vfp2csv/vfp2csv.py +0 -0
  193. {subscript-1.5.0/tests → subscript-1.6.1/src/subscript/welltest_dpds}/__init__.py +0 -0
  194. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/dependency_links.txt +0 -0
  195. {subscript-1.5.0 → subscript-1.6.1}/src/subscript.egg-info/top_level.txt +0 -0
  196. {subscript-1.5.0 → subscript-1.6.1}/tests/conftest.py +0 -0
  197. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  198. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  199. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  200. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  201. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  202. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  203. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  204. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  205. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  206. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  207. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  208. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  209. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  210. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  211. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  212. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  213. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  214. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  215. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  216. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  217. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  218. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  219. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  220. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  221. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  222. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  223. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  224. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  225. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  226. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/eclipse/model/parameters.txt +0 -0
  227. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/parameters.txt +0 -0
  228. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/rms/README +0 -0
  229. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
  230. {subscript-1.5.0 → subscript-1.6.1}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
  231. {subscript-1.5.0 → subscript-1.6.1}/tests/data/vfp/GasProd.VFP +0 -0
  232. {subscript-1.5.0 → subscript-1.6.1}/tests/data/vfp/pd2.VFP +0 -0
  233. {subscript-1.5.0 → subscript-1.6.1}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
  234. {subscript-1.5.0 → subscript-1.6.1}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
  235. {subscript-1.5.0 → subscript-1.6.1}/tests/test_bjobsusers.py +0 -0
  236. {subscript-1.5.0 → subscript-1.6.1}/tests/test_casegen_upcars.py +0 -0
  237. {subscript-1.5.0 → subscript-1.6.1}/tests/test_convert_grid_format.py +0 -0
  238. {subscript-1.5.0 → subscript-1.6.1}/tests/test_csv2ofmvol.py +0 -0
  239. {subscript-1.5.0 → subscript-1.6.1}/tests/test_csv_merge.py +0 -0
  240. {subscript-1.5.0 → subscript-1.6.1}/tests/test_csv_stack.py +0 -0
  241. {subscript-1.5.0 → subscript-1.6.1}/tests/test_docs.py +0 -0
  242. {subscript-1.5.0 → subscript-1.6.1}/tests/test_ecldiff2roff.py +0 -0
  243. {subscript-1.5.0 → subscript-1.6.1}/tests/test_fmu_copy_revision.py +0 -0
  244. {subscript-1.5.0 → subscript-1.6.1}/tests/test_fmuobs.py +0 -0
  245. {subscript-1.5.0 → subscript-1.6.1}/tests/test_fmuobs_parsers.py +0 -0
  246. {subscript-1.5.0 → subscript-1.6.1}/tests/test_fmuobs_writers.py +0 -0
  247. {subscript-1.5.0 → subscript-1.6.1}/tests/test_merge_rft_ertobs.py +0 -0
  248. {subscript-1.5.0 → subscript-1.6.1}/tests/test_merge_unrst_files.py +0 -0
  249. {subscript-1.5.0 → subscript-1.6.1}/tests/test_ofmvol2csv.py +0 -0
  250. {subscript-1.5.0 → subscript-1.6.1}/tests/test_pack_sim.py +0 -0
  251. {subscript-1.5.0 → subscript-1.6.1}/tests/test_params2csv.py +0 -0
  252. {subscript-1.5.0 → subscript-1.6.1}/tests/test_presentvalue.py +0 -0
  253. {subscript-1.5.0 → subscript-1.6.1}/tests/test_prtvol2csv.py +0 -0
  254. {subscript-1.5.0 → subscript-1.6.1}/tests/test_restartthinner.py +0 -0
  255. {subscript-1.5.0 → subscript-1.6.1}/tests/test_ri_wellmod.py +0 -0
  256. {subscript-1.5.0 → subscript-1.6.1}/tests/test_rmsecl_volumetrics.py +0 -0
  257. {subscript-1.5.0 → subscript-1.6.1}/tests/test_sector2fluxnum.py +0 -0
  258. {subscript-1.5.0 → subscript-1.6.1}/tests/test_subscriptlogger.py +0 -0
  259. {subscript-1.5.0 → subscript-1.6.1}/tests/test_summaryplot.py +0 -0
  260. {subscript-1.5.0 → subscript-1.6.1}/tests/test_sw_model_utilities.py +0 -0
  261. {subscript-1.5.0 → subscript-1.6.1}/tests/test_vfp2csv.py +0 -0
  262. {subscript-1.5.0 → subscript-1.6.1}/tests/test_welltest_dpds.py +0 -0
  263. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
  264. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
  265. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
  266. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
  267. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
  268. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
  269. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
  270. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/ert-doc.csv +0 -0
  271. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/ert-doc.obs +0 -0
  272. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/ert-doc.yml +0 -0
  273. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
  274. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
  275. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_fmuobs/ri-obs.csv +0 -0
  276. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/cfg.yml +0 -0
  277. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
  278. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
  279. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
  280. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/swof_base.inc +0 -0
  281. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
  282. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
  283. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
  284. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
  285. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
  286. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
  287. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
  288. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
  289. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
  290. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
  291. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
  292. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
  293. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
  294. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
  295. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
  296. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
  297. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
  298. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
  299. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
  300. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
  301. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
  302. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
  303. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
  304. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
  305. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
  306. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
  307. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
  308. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
  309. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
  310. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
  311. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
  312. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
  313. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
  314. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
  315. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
  316. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
  317. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/config.yml +0 -0
  318. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/emptyinit.sch +0 -0
  319. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/foo1.sch +0 -0
  320. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/footemplate.sch +0 -0
  321. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/initwithdates.sch +0 -0
  322. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/merge2.sch +0 -0
  323. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/mergeme.sch +0 -0
  324. {subscript-1.5.0 → subscript-1.6.1}/tests/testdata_sunsch/options3.sch +0 -0
@@ -27,6 +27,7 @@ jobs:
27
27
  run: |
28
28
  sudo apt-get install software-properties-common
29
29
  sudo apt-add-repository ppa:opm/ppa
30
+ sudo apt-add-repository ppa:opm/testing
30
31
  sudo apt-get update
31
32
  sudo apt-get install mpi-default-bin
32
33
  sudo apt-get install libopm-simulators-bin
@@ -47,5 +48,6 @@ jobs:
47
48
  pytest tests --disable-warnings --cov=subscript --cov-report=xml
48
49
 
49
50
  - name: Upload coverage to Codecov
50
- run: |
51
- bash <(curl -s https://codecov.io/bash)
51
+ uses: codecov/codecov-action@v4
52
+ with:
53
+ token: ${{ secrets.CODECOV_TOKEN }}
@@ -39,6 +39,7 @@ jobs:
39
39
  run: |
40
40
  sudo apt-get install software-properties-common
41
41
  sudo apt-add-repository ppa:opm/ppa
42
+ sudo apt-add-repository ppa:opm/testing
42
43
  sudo apt-get update
43
44
  sudo apt-get install mpi-default-bin
44
45
  sudo apt-get install libopm-simulators-bin
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: subscript
3
- Version: 1.5.0
3
+ Version: 1.6.1
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
@@ -700,7 +700,7 @@ Description-Content-Type: text/markdown
700
700
  License-File: LICENSE
701
701
  Requires-Dist: resdata
702
702
  Requires-Dist: res2df
703
- Requires-Dist: ert>=2.38.0b7
703
+ Requires-Dist: ert
704
704
  Requires-Dist: fmu-tools
705
705
  Requires-Dist: matplotlib
706
706
  Requires-Dist: numpy<2
@@ -730,7 +730,7 @@ Requires-Dist: types-python-dateutil; extra == "tests"
730
730
  Provides-Extra: docs
731
731
  Requires-Dist: autoapi; extra == "docs"
732
732
  Requires-Dist: sphinx; extra == "docs"
733
- Requires-Dist: sphinx-argparse; extra == "docs"
733
+ Requires-Dist: sphinx-argparse<0.5.0; extra == "docs"
734
734
  Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
735
735
  Requires-Dist: sphinx-copybutton; extra == "docs"
736
736
  Requires-Dist: sphinx-togglebutton; extra == "docs"
@@ -0,0 +1,10 @@
1
+
2
+ GRAV_SUBS_MAPS
3
+ ==============
4
+
5
+ .. argparse::
6
+ :module: subscript.grav_subs_maps.grav_subs_maps
7
+ :func: get_parser
8
+ :prog: grav_subs_maps
9
+
10
+
@@ -3,7 +3,7 @@ SUMMARYPLOT
3
3
  ===========
4
4
 
5
5
  ``summaryplot`` is a command line utility to generate plots from Eclipse
6
- simulations, based on `libecl <http://github.com/equinor/libecl>`_
6
+ simulations, based on `resdata <http://github.com/equinor/resdata>`_
7
7
  for processing Eclipse output files and
8
8
  `matplotlib <http://matplotlib.sourceforge.net>`_ for plotting.
9
9
 
@@ -38,7 +38,7 @@ dynamic = ["version"]
38
38
  dependencies = [
39
39
  "resdata",
40
40
  "res2df",
41
- "ert>=2.38.0b7",
41
+ "ert",
42
42
  "fmu-tools",
43
43
  "matplotlib",
44
44
  "numpy<2",
@@ -72,7 +72,7 @@ tests = [
72
72
  docs = [
73
73
  "autoapi",
74
74
  "sphinx",
75
- "sphinx-argparse",
75
+ "sphinx-argparse<0.5.0",
76
76
  "sphinx-autodoc-typehints",
77
77
  "sphinx-copybutton",
78
78
  "sphinx-togglebutton",
@@ -96,6 +96,7 @@ eclcompress = "subscript.eclcompress.eclcompress:main"
96
96
  ecldiff2roff = "subscript.ecldiff2roff.ecldiff2roff:main"
97
97
  fmu_copy_revision = "subscript.fmu_copy_revision.fmu_copy_revision:main"
98
98
  fmuobs = "subscript.fmuobs.fmuobs:main"
99
+ grav_subs_maps = "subscript.grav_subs_maps.grav_subs_maps:main"
99
100
  interp_relperm = "subscript.interp_relperm.interp_relperm:main"
100
101
  merge_rft_ertobs = "subscript.merge_rft_ertobs.merge_rft_ertobs:main"
101
102
  merge_unrst_files = "subscript.merge_unrst_files.merge_unrst_files:main"
@@ -326,7 +326,7 @@ def qc_flag(qc_frame: pd.DataFrame) -> pd.DataFrame:
326
326
 
327
327
  contact = "OWC" if "OWC" in qc_frame else "GWC"
328
328
 
329
- # Eclipse and libecl does not calculate cell centres to the same decimals.
329
+ # Eclipse and resdata does not calculate cell centres to the same decimals.
330
330
  # Add some tolerance when testing towards fluid contacts.
331
331
  contacttolerance = 1e-4
332
332
 
@@ -0,0 +1,9 @@
1
+ EXECUTABLE grav_subs_maps
2
+
3
+ DEFAULT <ROOT_PATH> "./"
4
+
5
+ ARGLIST "--configfile" <GRAVMAPS_CONFIG> "--root-path" <ROOT_PATH> "--outputdir" <OUTPUT_DIR> <UNRST_FILE>
6
+
7
+ MIN_ARG 2
8
+ MAX_ARG 4
9
+ ARG_TYPE 0 STRING
@@ -312,7 +312,7 @@ def find_keyword_sets(filelines: List[str]) -> List[Tuple[int, int]]:
312
312
  /
313
313
 
314
314
  we are not able to detect anything but the first record (line) without
315
- having a full Eclipse parser (OPM). This means we we only compress the
315
+ having a full Eclipse parser (OPM). This means we only compress the
316
316
  first line. These type of keywords are not important to compress, and we
317
317
  could just as well avoid compressing them altogether.
318
318
 
@@ -336,7 +336,7 @@ def find_keyword_sets(filelines: List[str]) -> List[Tuple[int, int]]:
336
336
  continue
337
337
  # Remove embracing quotes if in a multi-keyword
338
338
  keyword = line.split(" ")[0].strip("'")
339
- if keyword in ALLOWLIST_KEYWORDS:
339
+ if (keyword in ALLOWLIST_KEYWORDS) or keyword.startswith("FIP"):
340
340
  kwstart = lineidx
341
341
  if "/" in line:
342
342
  keywordsets.append((kwstart, lineidx))
@@ -0,0 +1,324 @@
1
+ import argparse
2
+ import logging
3
+ import os
4
+ import sys
5
+ from datetime import date
6
+ from pathlib import Path
7
+ from typing import Any, Dict, List, Optional
8
+
9
+ import xtgeo
10
+ import yaml
11
+ from pydantic import BaseModel, Field, FilePath, field_validator
12
+ from resdata.gravimetry import ResdataGrav, ResdataSubsidence
13
+ from resdata.grid import Grid
14
+ from resdata.resfile import ResdataFile
15
+ from typing_extensions import Annotated
16
+
17
+ import subscript
18
+
19
+ logger = subscript.getLogger(__name__)
20
+
21
+ # Constant for subsidence modelling, not influencing results
22
+ # since subsidence is calculated from porevolume change
23
+ # therefore defaulted
24
+ DUMMY_YOUNGS = 0.5
25
+
26
+ PREFIX_GRAVSURF = "all--delta_gravity_"
27
+ PREFIX_SUBSSURF = "all--subsidence"
28
+
29
+ DESCRIPTION = """
30
+ Modelling maps of gravity change and subsidence from flow
31
+ simulation output (EGRID, INIT and UNRST files).
32
+
33
+ The script reads flow simulation results and a yaml configuration file specifying input
34
+ and calculation parameters. Output is surfaces in irap binary format.
35
+ """
36
+
37
+ EPILOGUE = """
38
+ .. code-block:: yaml
39
+
40
+ # Example config file for grav_subs_maps
41
+
42
+ input:
43
+ diffdates:
44
+ - [2020-07-01, 2018-01-01] # Difference date to model. Must exist in UNRST file.
45
+ seabed_map: seabed.gri # Path to file with seabed, irap binary format.
46
+ # Also used as map template
47
+
48
+ calculations:
49
+ poisson_ratio: 0.45 # For subsidence calulcations, used in Geertsma model
50
+ coarsening: 8 # Coarsening factor for maps to speed up calculations
51
+ phases: ['gas', 'oil','water', 'total'] # One map for each phase specified
52
+
53
+ """
54
+
55
+ CATEGORY = "modelling.reservoir"
56
+
57
+ EXAMPLES = """
58
+ .. code-block:: console
59
+
60
+ FORWARD_MODEL GRAV_SUBS_MAPS(<UNRST_FILE>=<ECLBASE>.UNRST, <GRAV_CONFIG>=grav_subs_maps.yml, <ROOT_PATH>=<CONFIG_PATH>, <OUTPUTDIR>=share/results/maps)
61
+
62
+
63
+ where ``ECLBASE`` is already defined in your ERT config, pointing to the flowsimulator
64
+ basename relative to ``RUNPATH``, grav_subs_maps.yml is a YAML file defining
65
+ the inputs and modelling parameters and ``OUTPUTDIR`` is the path to the output folder.
66
+ ``ROOT_PATH`` is optinal and defaulted to "./". This is the rooth path assumed for
67
+ relative paths in the yml config.
68
+
69
+ The directory to export maps to must exist.
70
+ """ # noqa
71
+
72
+
73
+ class GravInput(BaseModel):
74
+ diffdates: List[List[date]]
75
+ seabed_map: FilePath
76
+
77
+
78
+ class GravCalc(BaseModel):
79
+ poisson_ratio: Annotated[float, Field(strict=True, ge=0, le=0.5)]
80
+ coarsening: Optional[Annotated[int, Field(strict=True, ge=1)]] = None
81
+ phases: List[str]
82
+
83
+ @field_validator("phases")
84
+ @classmethod
85
+ def check_phases(cls, phases: List[str]) -> List[str]:
86
+ allowed_phases = ["oil", "gas", "water", "total"]
87
+ for item in phases:
88
+ assert item in allowed_phases, f"allowed phases are {str(allowed_phases)}"
89
+ return phases
90
+
91
+
92
+ class GravMapsConfig(BaseModel):
93
+ input: GravInput
94
+ calculations: GravCalc
95
+
96
+
97
+ def get_parser() -> argparse.ArgumentParser:
98
+ """Function to create the argument parser that is going to be served to the user.
99
+
100
+ Returns:
101
+ argparse.ArgumentParser: The argument parser to be served
102
+
103
+ """
104
+ parser = argparse.ArgumentParser(
105
+ prog="grav_subs_maps.py",
106
+ description=DESCRIPTION,
107
+ epilog=EPILOGUE,
108
+ formatter_class=argparse.RawTextHelpFormatter,
109
+ )
110
+
111
+ parser.add_argument("UNRSTfile", type=str, help="Path to flowsimulator UNRST file")
112
+ parser.add_argument(
113
+ "-c",
114
+ "-C",
115
+ "--configfile",
116
+ type=str,
117
+ help="Name of YAML config file",
118
+ required=True,
119
+ )
120
+ parser.add_argument(
121
+ "-r",
122
+ "--root-path",
123
+ type=str,
124
+ default="./",
125
+ help=("Root path assumed for relative paths" " in config file."),
126
+ )
127
+ parser.add_argument(
128
+ "-o",
129
+ "--outputdir",
130
+ type=str,
131
+ help="Path to directory for output maps. Directory must exist.",
132
+ default="./",
133
+ )
134
+ parser.add_argument(
135
+ "--version",
136
+ action="version",
137
+ version="%(prog)s (subscript version " + subscript.__version__ + ")",
138
+ )
139
+ return parser
140
+
141
+
142
+ def main() -> None:
143
+ """Invocated from the command line, parsing command line arguments"""
144
+ parser = get_parser()
145
+ args = parser.parse_args()
146
+
147
+ logger.setLevel(logging.INFO)
148
+
149
+ # parse the config file
150
+ if not Path(args.configfile).exists():
151
+ sys.exit("No such file:" + args.configfile)
152
+ config = yaml.safe_load(Path(args.configfile).read_text(encoding="utf8"))
153
+
154
+ # cfg = GravMapsConfig.model_validate(config).model_dump()
155
+
156
+ if not Path(args.outputdir).exists():
157
+ sys.exit("Output folder does not exist:" + args.outputdir)
158
+ if not Path(args.UNRSTfile).exists():
159
+ sys.exit("UNRST file does not exist:" + args.UNRSTfile)
160
+
161
+ main_gravmaps(args.UNRSTfile, config, Path(args.root_path), Path(args.outputdir))
162
+
163
+
164
+ def prepend_root_path_to_relative_files(
165
+ cfg: Dict[str, Any], root_path: Path
166
+ ) -> Dict[str, Any]:
167
+ """Prepend root_path to relative files found paths in a configuration
168
+ dictionary.
169
+
170
+ Note: This function is before prior to validation of the configuration!
171
+
172
+ Will look for filename in the key "input["seabed_map"]"
173
+
174
+ Args:
175
+ cfg: grav_subs_maps configuration dictionary
176
+ root_path: An relative or absolute path to be prepended
177
+
178
+ Returns:
179
+ Modified configuration for interp_relperm
180
+ """
181
+ if (
182
+ "input" in cfg
183
+ and "seabed_map" in cfg["input"]
184
+ and not os.path.isabs(cfg["input"]["seabed_map"])
185
+ ):
186
+ cfg["input"]["seabed_map"] = str(root_path / Path(cfg["input"]["seabed_map"]))
187
+ return cfg
188
+
189
+
190
+ def main_gravmaps(
191
+ unrst_file: str,
192
+ config: Dict[str, Any],
193
+ root_path: Optional[Path],
194
+ output_folder: Path,
195
+ ) -> None:
196
+ """
197
+ Process a configuration, model gravity and subsidence surfaces and write to disk.
198
+
199
+ Args:
200
+ resdata: Path to flow simulation UNRST file
201
+ config: Configuration for modelling
202
+ """
203
+
204
+ if root_path is not None:
205
+ config = prepend_root_path_to_relative_files(config, root_path)
206
+
207
+ cfg = GravMapsConfig.model_validate(config).model_dump()
208
+
209
+ # Read inputs and calculation parameters
210
+ input_diffdates = cfg["input"]["diffdates"]
211
+ map_template = cfg["input"]["seabed_map"]
212
+ coarsening = cfg["calculations"]["coarsening"]
213
+ phases = cfg["calculations"]["phases"]
214
+ poisson_ratio = cfg["calculations"]["poisson_ratio"]
215
+
216
+ # Read seabed map and coarsen
217
+ seabed = xtgeo.surface_from_file(map_template)
218
+ seabed.coarsen(coarsening)
219
+
220
+ if isinstance(unrst_file, str):
221
+ restart_file = unrst_file[:-6] + ".UNRST"
222
+ egrid_file = unrst_file[:-6] + ".EGRID"
223
+ init_file = unrst_file[:-6] + ".INIT"
224
+ grid = Grid(egrid_file)
225
+ init = ResdataFile(init_file)
226
+ rest = ResdataFile(restart_file)
227
+
228
+ restart_index = {}
229
+
230
+ # From restart datetime format to YYYYMMDD as key
231
+ for i, restart_date in enumerate(rest.dates):
232
+ restart_index[restart_date.strftime("%Y%m%d")] = i
233
+
234
+ diffdates = []
235
+ # Convert dates from datetime format to strings
236
+ logger.info("Will do modelling for diffdates: ")
237
+ for diffdate in input_diffdates:
238
+ diff = [diffdate[0].strftime("%Y%m%d"), diffdate[1].strftime("%Y%m%d")]
239
+ diffdates.append(diff)
240
+ logger.info(f"{diffdate[0]}_{diffdate[1]}")
241
+
242
+ grav = ResdataGrav(grid, init)
243
+ subsidence = ResdataSubsidence(grid, init)
244
+
245
+ added_dates = []
246
+
247
+ for diffdate in diffdates:
248
+ for singledate in diffdate: # base and monitor
249
+ rsb = rest.restartView(0)
250
+ if singledate not in added_dates:
251
+ if singledate in restart_index:
252
+ rsb = rest.restartView(restart_index[singledate])
253
+ grav.add_survey_RFIP(singledate, rsb)
254
+ subsidence.add_survey_PRESSURE(singledate, rsb)
255
+ added_dates.append(singledate)
256
+ else:
257
+ logger.error(
258
+ f"Date {singledate} specified but not found in UNRST file."
259
+ )
260
+ sys.exit(1)
261
+ phase_code = {"oil": 1, "gas": 2, "water": 4, "total": 7}
262
+
263
+ # Gravity
264
+ for diffdate in diffdates:
265
+ for phase in phases:
266
+ logger.info(
267
+ f"Calculating delta gravity map from {phase} "
268
+ f"for {diffdate[0]}_{diffdate[1]}"
269
+ )
270
+ dgsim = seabed.copy()
271
+ df_dgsim = dgsim.get_dataframe()
272
+ dgsim_series = []
273
+ for index, row in df_dgsim.iterrows():
274
+ dgsim_series.append(
275
+ grav.eval(
276
+ diffdate[1],
277
+ diffdate[0],
278
+ (row["X_UTME"], row["Y_UTMN"], row["VALUES"]),
279
+ phase_mask=phase_code[phase],
280
+ )
281
+ )
282
+ dgsim.values = dgsim_series
283
+ filename = (
284
+ PREFIX_GRAVSURF
285
+ + phase
286
+ + "--"
287
+ + diffdate[0]
288
+ + "_"
289
+ + diffdate[1]
290
+ + ".gri"
291
+ )
292
+ dgsim.to_file(os.path.join(output_folder, filename))
293
+
294
+ # Subsidence
295
+ for diffdate in diffdates:
296
+ logger.info(f"Calculating subsidence map for {diffdate[0]}_{diffdate[1]}")
297
+ dzsim = seabed.copy()
298
+ df_dzsim = dzsim.get_dataframe()
299
+ dzsim_series = []
300
+ for index, row in df_dzsim.iterrows():
301
+ dzsim_series.append(
302
+ subsidence.eval_geertsma_rporv(
303
+ diffdate[1],
304
+ diffdate[0],
305
+ (row["X_UTME"], row["Y_UTMN"], row["VALUES"]),
306
+ DUMMY_YOUNGS,
307
+ poisson_ratio,
308
+ row["VALUES"],
309
+ )
310
+ )
311
+
312
+ dzsim.values = [i * 100 for i in dzsim_series] # From m to cms
313
+
314
+ filename = PREFIX_SUBSSURF + "--" + diffdate[0] + "_" + diffdate[1] + ".gri"
315
+ dzsim.to_file(os.path.join(output_folder, filename))
316
+
317
+ logger.info(
318
+ "Done; All gravity and subsidence maps written to folder: %s",
319
+ str(output_folder),
320
+ )
321
+
322
+
323
+ if __name__ == "__main__":
324
+ main()
@@ -167,7 +167,10 @@ def make_wateroilgas(dframe: pd.DataFrame, delta_s: float) -> pyscal.WaterOilGas
167
167
  The data must be restricted to only one SATNUM.
168
168
  """
169
169
  dframe = dframe.copy() # Copy since we will modify it.
170
- wog = pyscal.WaterOilGas(swl=dframe["SW"].min(), h=delta_s)
170
+ wog = pyscal.WaterOilGas(
171
+ swl=dframe["SW"].min() if "SW" in dframe.columns else 1.0 - dframe["SG"].max(),
172
+ h=delta_s,
173
+ )
171
174
  if "PCOW" not in dframe:
172
175
  dframe = dframe.assign(PCOW=0)
173
176
  if "PCOG" not in dframe:
@@ -191,6 +194,7 @@ def make_wateroilgas(dframe: pd.DataFrame, delta_s: float) -> pyscal.WaterOilGas
191
194
  .drop_duplicates()
192
195
  .reset_index()
193
196
  )
197
+ wog.wateroil.add_fromtable(wo_dframe)
194
198
  go_dframe = (
195
199
  dframe[["SG", "KRG", "KROG", "PCOG"]]
196
200
  .set_index("SG")
@@ -202,23 +206,33 @@ def make_wateroilgas(dframe: pd.DataFrame, delta_s: float) -> pyscal.WaterOilGas
202
206
  .drop_duplicates()
203
207
  .reset_index()
204
208
  )
209
+ wog.gasoil.add_fromtable(go_dframe)
205
210
  else:
206
- wo_dframe = dframe[["SW", "KRW", "KROW", "PCOW"]].dropna().reset_index()
207
- go_dframe = dframe[["SG", "KRG", "KROG", "PCOG"]].dropna().reset_index()
208
-
209
- wog.wateroil.add_fromtable(wo_dframe)
210
- wog.gasoil.add_fromtable(go_dframe)
211
+ if {"SW", "KRW", "KROW", "PCOW"}.issubset(dframe.columns):
212
+ wog.wateroil.add_fromtable(
213
+ dframe[["SW", "KRW", "KROW", "PCOW"]].dropna().reset_index()
214
+ )
215
+ else:
216
+ wog.wateroil = None
217
+ if {"SG", "KRG", "KROG", "PCOG"}.issubset(dframe.columns):
218
+ wog.gasoil.add_fromtable(
219
+ dframe[["SG", "KRG", "KROG", "PCOG"]].dropna().reset_index()
220
+ )
221
+ else:
222
+ wog.gasoil = None
211
223
 
212
224
  # socr can for floating point reasons become estimated to be larger than
213
225
  # sorw, which means we are in an oil paleo zone setting. This is not
214
226
  # supported by interp_relperm. Reset the property to ensure interpolation
215
227
  # is not affected:
216
- wog.wateroil.socr = wog.wateroil.sorw
228
+ if wog.wateroil:
229
+ wog.wateroil.socr = wog.wateroil.sorw
217
230
 
218
231
  # If sgro > 0, it is a gas condensate object, which cannot be
219
232
  # mixed with non-gas condensate (during interpolation). Avoid pitfalls
220
233
  # in the estimated sgro by always setting it to zero:
221
- wog.gasoil.sgro = 0.0
234
+ if wog.gasoil:
235
+ wog.gasoil.sgro = 0.0
222
236
  return wog
223
237
 
224
238
 
@@ -248,7 +262,9 @@ def make_interpolant(
248
262
  high = make_wateroilgas(high_df.loc[satnum], delta_s)
249
263
  rec = pyscal.SCALrecommendation(low, base, high, "SATNUM " + str(satnum), h=delta_s)
250
264
 
251
- return rec.interpolate(interp_param["param_w"], interp_param["param_g"], h=delta_s)
265
+ return rec.interpolate(
266
+ interp_param.get("param_w", 0.0), interp_param.get("param_g", 0), h=delta_s
267
+ )
252
268
 
253
269
 
254
270
  def get_parser() -> argparse.ArgumentParser:
@@ -8,15 +8,26 @@ use Cwd;
8
8
  use IO::File;
9
9
 
10
10
  # ------------------------------------------------------
11
+ my $hostname = `hostname`;
12
+ my $_balance = `date +%s`;
11
13
 
14
+ $_balance = $_balance % 2;
15
+ my $lisens = "7321\@eclipse1-lic-no.statoil.no:7321\@eclipse2-lic-no.statoil.no";
16
+ if ($_balance == 1) {
17
+ $lisens = "7321\@eclipse2-lic-no.statoil.no:7321\@eclipse1-lic-no.statoil.no";
18
+ }
19
+
20
+ if (index($hostname, "stjohn-") == 0) {
21
+ $lisens = "7321\@stjohn-grid01.stjohn.statoil.no:$lisens";
22
+ } elsif (index($hostname, "rio-") == 0) {
23
+ $lisens = "7321\@rio-grid01.rio.statoil.no:$lisens";
24
+ }
12
25
 
13
26
  my $ecldir = "/prog/res/ecl/grid";
14
27
  my $eclolddir = "/prog/ecl/grid";
15
28
  my $ecltestdir = "/prog/res/ecl/testgrid";
16
29
  my $mpiintelroot = "/prog/res/ecl/grid/tools/linux_x86_64/intel/mpi/2018.1.163";
17
30
 
18
- my $lisens = "7321\@eclipse-lic-no.statoil.no";
19
-
20
31
  my $extconfig = "macros/CONFIG.ECL";
21
32
  my $extmpirun64 = "tools/linux_x86_64/mpich_x86_64/bin/mpirun";
22
33
 
@@ -73,7 +84,7 @@ my $workdir = cwd;
73
84
  my $scriptname = "runeclipse";
74
85
 
75
86
  my $usage =
76
- "usage $scriptname [-p program] [-q que_name] [-v version] [-x] [-i] root";
87
+ "usage $scriptname [-p program] [-q que_name] [-v version] [-x] [-i] root";
77
88
 
78
89
  #
79
90
  # Get command line options:
@@ -400,7 +411,7 @@ sub build_batch {
400
411
  if ($testversion) {
401
412
  print BATCHFIL "echo \"*** RUNNING TEST VERSION $version ****\"\n";
402
413
  }
403
- print BATCHFIL "export LM_LICENSE_FILE=$lisens\n";
414
+ print BATCHFIL "export SLBSLS_LICENSE_FILE=$lisens\n";
404
415
  print BATCHFIL "export F_UFMTENDIAN=big\n";
405
416
  print BATCHFIL "export ARCH=\`uname -m\`\n";
406
417
  print BATCHFIL "cd $workdir\n";
@@ -437,7 +448,7 @@ sub build_parallel_batch {
437
448
  or die "$scriptname: Cannot create batch file $batchfilename\n";
438
449
 
439
450
  print BATCHFIL "#!/bin/sh \n";
440
- print BATCHFIL "export LM_LICENSE_FILE=$lisens\n";
451
+ print BATCHFIL "export SLBSLS_LICENSE_FILE=$lisens\n";
441
452
 
442
453
  # print BATCHFIL
443
454
  # "export FLEXLM_NO_CKOUT_INSTALL_LIC=1\n" ;
@@ -30,9 +30,9 @@ written to the same filename (keeping the original is optional)
30
30
  def find_resdata_app(toolname: str) -> str:
31
31
  """Locate path of apps in resdata.
32
32
 
33
- These have varying suffixes due through the history of libecl Makefiles.
33
+ These have varying suffixes due through the history of resdata Makefiles.
34
34
 
35
- Depending on libecl-version, it has the .x or the .c.x suffix
35
+ Depending on resdata-version, it has the .x or the .c.x suffix
36
36
  We prefer .x.
37
37
 
38
38
  Returns:
@@ -75,7 +75,7 @@ def rd_repacker(rstfilename: str, slicerstindices: list, quiet: bool) -> None:
75
75
  modify the original filename.
76
76
  """
77
77
  out = " >/dev/null" if quiet else ""
78
- # Error early if libecl tools are not available
78
+ # Error early if resdata tools are not available
79
79
  try:
80
80
  find_resdata_app("rd_unpack")
81
81
  find_resdata_app("rd_pack")
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.5.0'
16
- __version_tuple__ = version_tuple = (1, 5, 0)
15
+ __version__ = version = '1.6.1'
16
+ __version_tuple__ = version_tuple = (1, 6, 1)
@@ -7,7 +7,6 @@ from pathlib import Path
7
7
  import numpy as np
8
8
  import pandas as pd
9
9
  from resdata.summary import Summary
10
- from scipy.interpolate import interp1d
11
10
 
12
11
  from subscript import __version__
13
12
 
@@ -419,19 +418,7 @@ def genobs_vec(filen, vec, time):
419
418
  dframe = pd.read_csv(filen, sep="\t")
420
419
  obs_time = dframe["dTime"][1:None].dropna().to_numpy(dtype=float)
421
420
 
422
- gen_data = np.zeros(len(obs_time))
423
-
424
- interp = interp1d(time, vec)
425
-
426
- for idx, timepoint in enumerate(obs_time):
427
- if timepoint < time[0]:
428
- gen_data[idx] = vec[0]
429
- elif timepoint > time[-1]:
430
- gen_data[idx] = vec[-1]
431
- else:
432
- gen_data[idx] = interp(timepoint)
433
-
434
- return gen_data
421
+ return np.interp(obs_time, time, vec)
435
422
 
436
423
 
437
424
  def main():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: subscript
3
- Version: 1.5.0
3
+ Version: 1.6.1
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
@@ -700,7 +700,7 @@ Description-Content-Type: text/markdown
700
700
  License-File: LICENSE
701
701
  Requires-Dist: resdata
702
702
  Requires-Dist: res2df
703
- Requires-Dist: ert>=2.38.0b7
703
+ Requires-Dist: ert
704
704
  Requires-Dist: fmu-tools
705
705
  Requires-Dist: matplotlib
706
706
  Requires-Dist: numpy<2
@@ -730,7 +730,7 @@ Requires-Dist: types-python-dateutil; extra == "tests"
730
730
  Provides-Extra: docs
731
731
  Requires-Dist: autoapi; extra == "docs"
732
732
  Requires-Dist: sphinx; extra == "docs"
733
- Requires-Dist: sphinx-argparse; extra == "docs"
733
+ Requires-Dist: sphinx-argparse<0.5.0; extra == "docs"
734
734
  Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
735
735
  Requires-Dist: sphinx-copybutton; extra == "docs"
736
736
  Requires-Dist: sphinx-togglebutton; extra == "docs"