subscript 1.4.0__tar.gz → 1.6.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.
Files changed (328) hide show
  1. {subscript-1.4.0 → subscript-1.6.0}/.github/workflows/codecov.yml +4 -2
  2. {subscript-1.4.0 → subscript-1.6.0}/.github/workflows/subscript.yml +1 -0
  3. {subscript-1.4.0 → subscript-1.6.0}/PKG-INFO +2 -2
  4. {subscript-1.4.0 → subscript-1.6.0}/README.md +1 -1
  5. {subscript-1.4.0 → subscript-1.6.0}/docs/overview.rst +0 -1
  6. subscript-1.6.0/docs/scripts/grav_subs_maps.rst +10 -0
  7. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/summaryplot.rst +1 -1
  8. {subscript-1.4.0 → subscript-1.6.0}/pyproject.toml +1 -1
  9. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/bjobsusers/bjobsusers.py +31 -24
  10. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/check_swatinit/check_swatinit.py +1 -1
  11. subscript-1.6.0/src/subscript/config_jobs/GRAV_SUBS_MAPS +9 -0
  12. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclcompress/allowlist.py +13 -0
  13. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclcompress/eclcompress.py +2 -2
  14. subscript-1.6.0/src/subscript/grav_subs_maps/grav_subs_maps.py +324 -0
  15. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/interp_relperm/interp_relperm.py +25 -9
  16. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/restartthinner/restartthinner.py +3 -3
  17. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/version.py +2 -2
  18. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/welltest_dpds/welltest_dpds.py +1 -14
  19. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/PKG-INFO +2 -2
  20. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/SOURCES.txt +12 -5
  21. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/entry_points.txt +1 -1
  22. {subscript-1.4.0 → subscript-1.6.0}/tests/test_bjobsusers.py +9 -9
  23. {subscript-1.4.0 → subscript-1.6.0}/tests/test_check_swatinit.py +1 -1
  24. {subscript-1.4.0 → subscript-1.6.0}/tests/test_check_swatinit_simulators.py +1 -1
  25. {subscript-1.4.0 → subscript-1.6.0}/tests/test_eclcompress.py +23 -0
  26. subscript-1.6.0/tests/test_grav_subs_maps.py +184 -0
  27. {subscript-1.4.0 → subscript-1.6.0}/tests/test_hook_implementations.py +1 -0
  28. {subscript-1.4.0 → subscript-1.6.0}/tests/test_interp_relperm.py +116 -0
  29. {subscript-1.4.0 → subscript-1.6.0}/tests/test_sunsch.py +2 -19
  30. subscript-1.6.0/tests/testdata_gravity/HIST.EGRID +0 -0
  31. subscript-1.6.0/tests/testdata_gravity/HIST.INIT +0 -0
  32. subscript-1.6.0/tests/testdata_gravity/HIST.UNRST +0 -0
  33. subscript-1.6.0/tests/testdata_gravity/grav_subs_maps_hist.yml +12 -0
  34. subscript-1.6.0/tests/testdata_gravity/grav_subs_points.yml +16 -0
  35. subscript-1.6.0/tests/testdata_gravity/seabed.gri +0 -0
  36. subscript-1.6.0/tests/testdata_gravity/station_coordinates.txt +12 -0
  37. subscript-1.4.0/docs/scripts/runrms.rst +0 -8
  38. subscript-1.4.0/src/subscript/runrms/runrms.py +0 -871
  39. subscript-1.4.0/tests/test_runrms.py +0 -307
  40. subscript-1.4.0/tests/testdata_runrms/runrms.yml +0 -65
  41. {subscript-1.4.0 → subscript-1.6.0}/.github/workflows/publish.yml +0 -0
  42. {subscript-1.4.0 → subscript-1.6.0}/.gitignore +0 -0
  43. {subscript-1.4.0 → subscript-1.6.0}/.pylintrc +0 -0
  44. {subscript-1.4.0 → subscript-1.6.0}/LICENSE +0 -0
  45. {subscript-1.4.0 → subscript-1.6.0}/SECURITY.md +0 -0
  46. {subscript-1.4.0 → subscript-1.6.0}/ci/testkomodo.sh +0 -0
  47. {subscript-1.4.0 → subscript-1.6.0}/docs/Makefile +0 -0
  48. {subscript-1.4.0 → subscript-1.6.0}/docs/_static/equinor-logo.png +0 -0
  49. {subscript-1.4.0 → subscript-1.6.0}/docs/_static/equinor-logo2.jpg +0 -0
  50. {subscript-1.4.0 → subscript-1.6.0}/docs/_static/equinor-logo2.png +0 -0
  51. {subscript-1.4.0 → subscript-1.6.0}/docs/_static/equinor_logo.jpg +0 -0
  52. {subscript-1.4.0 → subscript-1.6.0}/docs/_static/equinor_logo_only.jpg +0 -0
  53. {subscript-1.4.0 → subscript-1.6.0}/docs/_templates/layout.html +0 -0
  54. {subscript-1.4.0 → subscript-1.6.0}/docs/conf.py +0 -0
  55. {subscript-1.4.0 → subscript-1.6.0}/docs/contributing.rst +0 -0
  56. {subscript-1.4.0 → subscript-1.6.0}/docs/history.rst +0 -0
  57. {subscript-1.4.0 → subscript-1.6.0}/docs/index.rst +0 -0
  58. {subscript-1.4.0 → subscript-1.6.0}/docs/make.bat +0 -0
  59. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/bjobsusers.rst +0 -0
  60. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/casegen_upcars.rst +0 -0
  61. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/check_swatinit.rst +0 -0
  62. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/convert_grid_format.rst +0 -0
  63. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/csv2ofmvol.rst +0 -0
  64. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/csv_merge.rst +0 -0
  65. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/csv_stack.rst +0 -0
  66. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/eclcompress.rst +0 -0
  67. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/ecldiff2roff.rst +0 -0
  68. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/fmu_copy_revision.rst +0 -0
  69. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/fmuobs.rst +0 -0
  70. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
  71. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
  72. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
  73. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
  74. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
  75. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
  76. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
  77. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
  78. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
  79. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
  80. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
  81. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/interp_relperm.rst +0 -0
  82. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
  83. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/merge_unrst_files.rst +0 -0
  84. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/ofmvol2csv.rst +0 -0
  85. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/pack_sim.rst +0 -0
  86. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/params2csv.rst +0 -0
  87. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/presentvalue.rst +0 -0
  88. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/prtvol2csv.csv +0 -0
  89. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/prtvol2csv.rst +0 -0
  90. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/restartthinner.rst +0 -0
  91. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/ri_wellmod.rst +0 -0
  92. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
  93. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/runeclipse.rst +0 -0
  94. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/sector2fluxnum.rst +0 -0
  95. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/sunsch.rst +0 -0
  96. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/sw_model_utilities.rst +0 -0
  97. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/vfp2csv.rst +0 -0
  98. {subscript-1.4.0 → subscript-1.6.0}/docs/scripts/welltest_dpds.rst +0 -0
  99. {subscript-1.4.0 → subscript-1.6.0}/docs/usage.rst +0 -0
  100. {subscript-1.4.0 → subscript-1.6.0}/setup.cfg +0 -0
  101. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/__init__.py +0 -0
  102. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/bjobsusers/__init__.py +0 -0
  103. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/casegen_upcars/__init__.py +0 -0
  104. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
  105. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/casegen_upcars/model.py +0 -0
  106. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/casegen_upcars/udf.py +0 -0
  107. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
  108. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/check_swatinit/__init__.py +0 -0
  109. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/check_swatinit/constants.py +0 -0
  110. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
  111. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/check_swatinit/plotter.py +0 -0
  112. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
  113. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
  114. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
  115. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/CSV_STACK +0 -0
  116. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
  117. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
  118. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
  119. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
  120. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
  121. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
  122. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
  123. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
  124. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
  125. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
  126. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
  127. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
  128. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/SUNSCH +0 -0
  129. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
  130. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/convert_grid_format/__init__.py +0 -0
  131. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
  132. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
  133. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
  134. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv_merge/__init__.py +0 -0
  135. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv_merge/csv_merge.py +0 -0
  136. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv_stack/__init__.py +0 -0
  137. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/csv_stack/csv_stack.py +0 -0
  138. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclcompress/__init__.py +0 -0
  139. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
  140. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
  141. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
  142. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
  143. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
  144. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
  145. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
  146. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmuobs/__init__.py +0 -0
  147. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmuobs/fmuobs.py +0 -0
  148. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmuobs/parsers.py +0 -0
  149. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmuobs/util.py +0 -0
  150. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/fmuobs/writers.py +0 -0
  151. {subscript-1.4.0/src/subscript/hook_implementations → subscript-1.6.0/src/subscript/grav_subs_maps}/__init__.py +0 -0
  152. {subscript-1.4.0/src/subscript/interp_relperm → subscript-1.6.0/src/subscript/hook_implementations}/__init__.py +0 -0
  153. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/hook_implementations/jobs.py +0 -0
  154. {subscript-1.4.0/src/subscript/merge_rft_ertobs → subscript-1.6.0/src/subscript/interp_relperm}/__init__.py +0 -0
  155. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/duf +0 -0
  156. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/eclmanual +0 -0
  157. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/ertwatch +0 -0
  158. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/list_rms_usage +0 -0
  159. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/nosim +0 -0
  160. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/legacy/runeclipse +0 -0
  161. {subscript-1.4.0/src/subscript/merge_unrst_files → subscript-1.6.0/src/subscript/merge_rft_ertobs}/__init__.py +0 -0
  162. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
  163. {subscript-1.4.0/src/subscript/ofmvol2csv → subscript-1.6.0/src/subscript/merge_unrst_files}/__init__.py +0 -0
  164. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
  165. {subscript-1.4.0/src/subscript/pack_sim → subscript-1.6.0/src/subscript/ofmvol2csv}/__init__.py +0 -0
  166. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
  167. {subscript-1.4.0/src/subscript/params2csv → subscript-1.6.0/src/subscript/pack_sim}/__init__.py +0 -0
  168. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/pack_sim/pack_sim.py +0 -0
  169. {subscript-1.4.0/src/subscript/presentvalue → subscript-1.6.0/src/subscript/params2csv}/__init__.py +0 -0
  170. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/params2csv/params2csv.py +0 -0
  171. {subscript-1.4.0/src/subscript/prtvol2csv → subscript-1.6.0/src/subscript/presentvalue}/__init__.py +0 -0
  172. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/presentvalue/presentvalue.py +0 -0
  173. {subscript-1.4.0/src/subscript/restartthinner → subscript-1.6.0/src/subscript/prtvol2csv}/__init__.py +0 -0
  174. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/prtvol2csv/prtvol2csv.py +0 -0
  175. {subscript-1.4.0/src/subscript/ri_wellmod → subscript-1.6.0/src/subscript/restartthinner}/__init__.py +0 -0
  176. {subscript-1.4.0/src/subscript/rmsecl_volumetrics → subscript-1.6.0/src/subscript/ri_wellmod}/__init__.py +0 -0
  177. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
  178. {subscript-1.4.0/src/subscript/runrms → subscript-1.6.0/src/subscript/rmsecl_volumetrics}/__init__.py +0 -0
  179. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
  180. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/__init__.py +0 -0
  181. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/completions.py +0 -0
  182. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
  183. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/flux_obj.py +0 -0
  184. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/flux_util.py +0 -0
  185. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
  186. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
  187. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/summaryplot/__init__.py +0 -0
  188. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/summaryplot/summaryplot.py +0 -0
  189. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sunsch/__init__.py +0 -0
  190. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sunsch/sunsch.py +0 -0
  191. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sunsch/time_vector.py +0 -0
  192. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sw_model_utilities/__init__.py +0 -0
  193. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
  194. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/vfp2csv/__init__.py +0 -0
  195. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/vfp2csv/vfp2csv.py +0 -0
  196. {subscript-1.4.0 → subscript-1.6.0}/src/subscript/welltest_dpds/__init__.py +0 -0
  197. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/dependency_links.txt +0 -0
  198. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/requires.txt +0 -0
  199. {subscript-1.4.0 → subscript-1.6.0}/src/subscript.egg-info/top_level.txt +0 -0
  200. {subscript-1.4.0 → subscript-1.6.0}/tests/__init__.py +0 -0
  201. {subscript-1.4.0 → subscript-1.6.0}/tests/conftest.py +0 -0
  202. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  203. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  204. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  205. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  206. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  207. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  208. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  209. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  210. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  211. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  212. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  213. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  214. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  215. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  216. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  217. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  218. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  219. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  220. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  221. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  222. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  223. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  224. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  225. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  226. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  227. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  228. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  229. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  230. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  231. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
  232. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/parameters.txt +0 -0
  233. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/rms/README +0 -0
  234. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
  235. {subscript-1.4.0 → subscript-1.6.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
  236. {subscript-1.4.0 → subscript-1.6.0}/tests/data/vfp/GasProd.VFP +0 -0
  237. {subscript-1.4.0 → subscript-1.6.0}/tests/data/vfp/pd2.VFP +0 -0
  238. {subscript-1.4.0 → subscript-1.6.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
  239. {subscript-1.4.0 → subscript-1.6.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
  240. {subscript-1.4.0 → subscript-1.6.0}/tests/test_casegen_upcars.py +0 -0
  241. {subscript-1.4.0 → subscript-1.6.0}/tests/test_convert_grid_format.py +0 -0
  242. {subscript-1.4.0 → subscript-1.6.0}/tests/test_csv2ofmvol.py +0 -0
  243. {subscript-1.4.0 → subscript-1.6.0}/tests/test_csv_merge.py +0 -0
  244. {subscript-1.4.0 → subscript-1.6.0}/tests/test_csv_stack.py +0 -0
  245. {subscript-1.4.0 → subscript-1.6.0}/tests/test_docs.py +0 -0
  246. {subscript-1.4.0 → subscript-1.6.0}/tests/test_ecldiff2roff.py +0 -0
  247. {subscript-1.4.0 → subscript-1.6.0}/tests/test_fmu_copy_revision.py +0 -0
  248. {subscript-1.4.0 → subscript-1.6.0}/tests/test_fmuobs.py +0 -0
  249. {subscript-1.4.0 → subscript-1.6.0}/tests/test_fmuobs_parsers.py +0 -0
  250. {subscript-1.4.0 → subscript-1.6.0}/tests/test_fmuobs_writers.py +0 -0
  251. {subscript-1.4.0 → subscript-1.6.0}/tests/test_merge_rft_ertobs.py +0 -0
  252. {subscript-1.4.0 → subscript-1.6.0}/tests/test_merge_unrst_files.py +0 -0
  253. {subscript-1.4.0 → subscript-1.6.0}/tests/test_ofmvol2csv.py +0 -0
  254. {subscript-1.4.0 → subscript-1.6.0}/tests/test_pack_sim.py +0 -0
  255. {subscript-1.4.0 → subscript-1.6.0}/tests/test_params2csv.py +0 -0
  256. {subscript-1.4.0 → subscript-1.6.0}/tests/test_presentvalue.py +0 -0
  257. {subscript-1.4.0 → subscript-1.6.0}/tests/test_prtvol2csv.py +0 -0
  258. {subscript-1.4.0 → subscript-1.6.0}/tests/test_restartthinner.py +0 -0
  259. {subscript-1.4.0 → subscript-1.6.0}/tests/test_ri_wellmod.py +0 -0
  260. {subscript-1.4.0 → subscript-1.6.0}/tests/test_rmsecl_volumetrics.py +0 -0
  261. {subscript-1.4.0 → subscript-1.6.0}/tests/test_sector2fluxnum.py +0 -0
  262. {subscript-1.4.0 → subscript-1.6.0}/tests/test_subscriptlogger.py +0 -0
  263. {subscript-1.4.0 → subscript-1.6.0}/tests/test_summaryplot.py +0 -0
  264. {subscript-1.4.0 → subscript-1.6.0}/tests/test_sw_model_utilities.py +0 -0
  265. {subscript-1.4.0 → subscript-1.6.0}/tests/test_vfp2csv.py +0 -0
  266. {subscript-1.4.0 → subscript-1.6.0}/tests/test_welltest_dpds.py +0 -0
  267. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
  268. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
  269. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
  270. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
  271. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
  272. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
  273. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
  274. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
  275. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
  276. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
  277. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
  278. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
  279. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
  280. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
  281. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
  282. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
  283. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
  284. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
  285. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
  286. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
  287. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
  288. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
  289. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
  290. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
  291. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
  292. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
  293. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
  294. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
  295. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
  296. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
  297. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
  298. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
  299. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
  300. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
  301. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
  302. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
  303. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
  304. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
  305. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
  306. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
  307. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
  308. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
  309. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
  310. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
  311. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
  312. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
  313. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
  314. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
  315. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
  316. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
  317. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
  318. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
  319. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
  320. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
  321. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/config.yml +0 -0
  322. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
  323. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/foo1.sch +0 -0
  324. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/footemplate.sch +0 -0
  325. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
  326. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/merge2.sch +0 -0
  327. {subscript-1.4.0 → subscript-1.6.0}/tests/testdata_sunsch/mergeme.sch +0 -0
  328. {subscript-1.4.0 → subscript-1.6.0}/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.4.0
3
+ Version: 1.6.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
@@ -768,7 +768,7 @@ pip install subscript
768
768
  ## Usage
769
769
 
770
770
  As a collection of utilities subscript has many different invocations and
771
- usages. It is recommended to visit the
771
+ use cases. A complete overview can be found in the
772
772
  [documentation](https://equinor.github.io/subscript)
773
773
  for a complete overview.
774
774
 
@@ -30,7 +30,7 @@ pip install subscript
30
30
  ## Usage
31
31
 
32
32
  As a collection of utilities subscript has many different invocations and
33
- usages. It is recommended to visit the
33
+ use cases. A complete overview can be found in the
34
34
  [documentation](https://equinor.github.io/subscript)
35
35
  for a complete overview.
36
36
 
@@ -29,7 +29,6 @@ prtvol2csv ✅ ✅ ⛔️
29
29
  restartthinner ✅ ⛔️ ⛔️
30
30
  ri_wellmod ✅ ✅ ⛔️
31
31
  rmsecl_volumetrics ✅ ⛔️ ⛔️
32
- runrms ✅ ⛔️ ⛔️
33
32
  sector2fluxnum ✅ ⛔️ ⛔️
34
33
  summaryplot ✅ ⛔️ ⛔️
35
34
  sw_model_utilities ✅ ⛔️ ⛔️
@@ -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
 
@@ -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"
@@ -107,7 +108,6 @@ prtvol2csv = "subscript.prtvol2csv.prtvol2csv:main"
107
108
  restartthinner = "subscript.restartthinner.restartthinner:main"
108
109
  ri_wellmod = "subscript.ri_wellmod.ri_wellmod:main"
109
110
  rmsecl_volumetrics = "subscript.rmsecl_volumetrics.rmsecl_volumetrics:main"
110
- runrms = "subscript.runrms.runrms:main"
111
111
  sector2fluxnum = "subscript.sector2fluxnum.sector2fluxnum:main"
112
112
  summaryplot = "subscript.summaryplot.summaryplot:main"
113
113
  sw_model_utilities = "subscript.sw_model_utilities.sw_model_utilities:main"
@@ -11,7 +11,7 @@ from subscript import __version__
11
11
  DESCRIPTION = """
12
12
  Print list of users running on cluster, sorted by number of jobs.
13
13
 
14
- This is statistics derived from the system command `bjobs` and `finger`.
14
+ This is statistics derived from the system command `bjobs` and `pinky`.
15
15
  """
16
16
 
17
17
 
@@ -77,55 +77,62 @@ def get_jobs(status: str, bjobs_function: Callable) -> pd.DataFrame:
77
77
  )
78
78
 
79
79
 
80
- def call_finger(username: str) -> str:
81
- """Call the system utility 'finger' on a specific username
80
+ def call_pinky(username: str) -> str:
81
+ """Call the system utility 'pinky' on a specific username
82
82
 
83
83
  Returns:
84
- Unicode string with the first line of output from 'finger'
84
+ Unicode string with the first line of output from 'pinky'
85
85
  Example return value::
86
86
 
87
- Login: foobert Name: Foo Barrer (FOO BAR COM)"
87
+ Login name: foobert In real life: Foo Barrer (FOO BAR COM)"
88
88
  """
89
- cmd = f"finger -m {username} | head -n 1"
90
- finger_output = None
89
+ cmd = f"pinky -l {username} | head -n 1"
90
+ pinky_output = None
91
91
  try:
92
92
  with open(os.devnull, "w", encoding="utf8") as devnull:
93
- finger_output = (
93
+ pinky_output = (
94
94
  subprocess.check_output(cmd, shell=True, stderr=devnull)
95
95
  .strip()
96
96
  .decode("utf-8")
97
97
  )
98
98
  except AttributeError:
99
99
  pass
100
- if finger_output:
101
- return finger_output
102
- # When finger fails, return something similar and usable
103
- return f"Login: {username} Name: ?? ()"
100
+ if pinky_output:
101
+ return pinky_output
102
+ # When pinky fails, return something similar and usable
103
+ return f"Login name: {username} In real life: ?? ()"
104
104
 
105
105
 
106
- def userinfo(username: str, finger_function: Callable) -> str:
106
+ def userinfo(username: str, pinky_function: Callable) -> str:
107
107
  """Get information on a user based on the username
108
108
 
109
109
  Args:
110
110
  username: user shortname/loginname
111
- finger_function: Function handle that can provide output
112
- from the system finger program (/usr/bin/finger).
111
+ pinky_function: Function handle that can provide output
112
+ from the system pinky program (/usr/bin/pinky).
113
113
  The output must be a Unicode string
114
114
 
115
115
  Returns:
116
- str: String with full user name, organization from finger output and
116
+ str: String with full user name, organization from pinky output and
117
117
  the shortname
118
118
  """
119
- finger_output = finger_function(username)
120
- rex_with_org = re.compile(r".*Login:\s+(.*)\s+Name:\s+(.*)\s+\((.*)\).*")
121
- rex_no_org = re.compile(r".*Login:\s+(.*)\s+Name:\s+(.*)")
122
- if rex_with_org.match(finger_output):
123
- matches = rex_with_org.match(finger_output).groups() # type: ignore
119
+ pinky_output = pinky_function(username)
120
+ rex_with_org = re.compile(
121
+ r".*Login name:\s+(.*)\s+In real life:\s+(.*)\s+\((.*)\).*"
122
+ )
123
+ rex_no_org = re.compile(r".*Login name:\s+(.*)\s+In real life:\s+(.*)")
124
+ if rex_with_org.match(pinky_output):
125
+ matches = rex_with_org.match(pinky_output).groups() # type: ignore
126
+ fullname = matches[1].strip()
124
127
  org = matches[2].strip()
128
+ elif rex_no_org.match(pinky_output):
129
+ matches = rex_no_org.match(pinky_output).groups() # type: ignore
130
+ fullname = matches[1].strip()
131
+ org = ""
125
132
  else:
126
- matches = rex_no_org.match(finger_output).groups() # type: ignore
133
+ fullname = username
127
134
  org = ""
128
- fullname = matches[1].strip()
135
+
129
136
  return f"{fullname} ({org}) ({username})"
130
137
 
131
138
 
@@ -138,7 +145,7 @@ def show_status(status: str = "RUN", title: str = "Running", umax: int = 10) ->
138
145
  print(
139
146
  count[0],
140
147
  userinfo( # lgtm [py/clear-text-logging-sensitive-data]
141
- str(user), call_finger
148
+ str(user), call_pinky
142
149
  ),
143
150
  )
144
151
  print("- - - - - - - - - - -")
@@ -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
@@ -42,6 +42,7 @@ ALLOWLIST_KEYWORDS = {
42
42
  "EXTREPGL",
43
43
  "FIP",
44
44
  "FIPNUM",
45
+ "FLUXNUM",
45
46
  "GASADCO",
46
47
  "GASADEC",
47
48
  "GASCONC",
@@ -66,6 +67,10 @@ ALLOWLIST_KEYWORDS = {
66
67
  "IONROCK",
67
68
  "ISTNUM",
68
69
  "KRNUMMF",
70
+ "KRO",
71
+ "KRORG",
72
+ "KRORW",
73
+ "KRW",
69
74
  "LANGMPL",
70
75
  "LANGMULC",
71
76
  "LANGMULT",
@@ -100,6 +105,7 @@ ALLOWLIST_KEYWORDS = {
100
105
  "LX",
101
106
  "LY",
102
107
  "LZ",
108
+ "MINPVV",
103
109
  "MISCNUM",
104
110
  "MLANG",
105
111
  "MLANGSLV",
@@ -161,6 +167,8 @@ ALLOWLIST_KEYWORDS = {
161
167
  "SATNUM",
162
168
  "SFOAM",
163
169
  "SGAS",
170
+ "SGCR",
171
+ "SGL",
164
172
  "SGLPC",
165
173
  "SGWCR",
166
174
  "SKRO",
@@ -169,11 +177,16 @@ ALLOWLIST_KEYWORDS = {
169
177
  "SKRW",
170
178
  "SKRWR",
171
179
  "SOCRS",
180
+ "SOGCR",
172
181
  "SOLVCONC",
173
182
  "SOLVFRAC",
174
183
  "SOLWNUM",
175
184
  "SORBFRAC",
176
185
  "SORBPRES",
186
+ "SOWCR",
187
+ "SWCR",
188
+ "SWL",
189
+ "SWU",
177
190
  "SPOLY",
178
191
  "SSGCR",
179
192
  "SSGL",
@@ -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()