fmu-pem 0.0.2__tar.gz → 0.0.3__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 (160) hide show
  1. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/.gitignore +10 -0
  2. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/ERT/run_pem.ert +10 -10
  3. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/PKG-INFO +18 -11
  4. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/README.md +16 -9
  5. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/SECURITY.md +2 -2
  6. fmu_pem-0.0.3/documentation/docs/.vitepress/config.mts +59 -0
  7. fmu_pem-0.0.3/documentation/docs/difference-properties.md +28 -0
  8. fmu_pem-0.0.3/documentation/docs/effective-mineral-properties.md +48 -0
  9. fmu_pem-0.0.3/documentation/docs/effective-pressure.md +38 -0
  10. fmu_pem-0.0.3/documentation/docs/ert-configuration.md +17 -0
  11. fmu_pem-0.0.3/documentation/docs/ert.tmLanguage.json +155 -0
  12. fmu_pem-0.0.3/documentation/docs/fluid_properties.md +210 -0
  13. fmu_pem-0.0.3/documentation/docs/images/The-phase-transition-diagram-of-carbon-dioxide.png +0 -0
  14. fmu_pem-0.0.3/documentation/docs/images/brine_properties.png +0 -0
  15. fmu_pem-0.0.3/documentation/docs/images/brine_properties_complete.png +0 -0
  16. fmu_pem-0.0.3/documentation/docs/images/bulk_modulus_vs_brine_salinity.png +0 -0
  17. fmu_pem-0.0.3/documentation/docs/images/bulk_modulus_vs_quartz_fraction.png +0 -0
  18. fmu_pem-0.0.3/documentation/docs/images/co2_properties_complete.png +0 -0
  19. fmu_pem-0.0.3/documentation/docs/images/co2_properties_meshgrid.png +0 -0
  20. fmu_pem-0.0.3/documentation/docs/images/density_vs_brine_salinity.png +0 -0
  21. fmu_pem-0.0.3/documentation/docs/images/fluid_density_comparison.png +0 -0
  22. fmu_pem-0.0.3/documentation/docs/images/gas_properties_complete.png +0 -0
  23. fmu_pem-0.0.3/documentation/docs/images/isotope_analysis.png +0 -0
  24. fmu_pem-0.0.3/documentation/docs/images/oil_properties_complete.png +0 -0
  25. fmu_pem-0.0.3/documentation/docs/images/shear_modulus_vs_quartz_fraction.png +0 -0
  26. fmu_pem-0.0.3/documentation/docs/images/wood_brie.png +0 -0
  27. fmu_pem-0.0.3/documentation/docs/import-sim-results.md +90 -0
  28. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/index.md +4 -1
  29. fmu_pem-0.0.3/documentation/docs/mineral-properties.md +25 -0
  30. fmu_pem-0.0.3/documentation/docs/model-file-formats.md +124 -0
  31. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/pem-configuration.md +44 -15
  32. fmu_pem-0.0.3/documentation/docs/saturated-rock.md +183 -0
  33. fmu_pem-0.0.3/documentation/docs/save-results.md +24 -0
  34. fmu_pem-0.0.3/documentation/docs/use-cases.md +40 -0
  35. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/yaml-edit/YamlEdit.tsx +19 -6
  36. fmu_pem-0.0.3/documentation/docs/yaml-validation.md +20 -0
  37. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/package-lock.json +427 -9
  38. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/package.json +1 -0
  39. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/pyproject.toml +4 -1
  40. fmu_pem-0.0.3/scripts/brie_test.ipynb +93 -0
  41. fmu_pem-0.0.3/scripts/brine_properties.ipynb +273 -0
  42. fmu_pem-0.0.3/scripts/co2_properties.ipynb +392 -0
  43. fmu_pem-0.0.3/scripts/eff_min_props.ipynb +152 -0
  44. fmu_pem-0.0.3/scripts/gas_properties.ipynb +227 -0
  45. fmu_pem-0.0.3/scripts/oil_properties.ipynb +272 -0
  46. fmu_pem-0.0.3/src/fmu/pem/__main__.py +69 -0
  47. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/forward_models/pem_model.py +19 -27
  48. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_functions/__init__.py +2 -2
  49. fmu_pem-0.0.3/src/fmu/pem/pem_functions/density.py +49 -0
  50. fmu_pem-0.0.3/src/fmu/pem/pem_functions/effective_pressure.py +273 -0
  51. fmu_pem-0.0.3/src/fmu/pem/pem_functions/estimate_saturated_rock.py +282 -0
  52. fmu_pem-0.0.3/src/fmu/pem/pem_functions/fluid_properties.py +488 -0
  53. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_functions/mineral_properties.py +77 -74
  54. fmu_pem-0.0.3/src/fmu/pem/pem_functions/pressure_sensitivity.py +430 -0
  55. fmu_pem-0.0.3/src/fmu/pem/pem_functions/regression_models.py +293 -0
  56. fmu_pem-0.0.3/src/fmu/pem/pem_functions/run_friable_model.py +188 -0
  57. fmu_pem-0.0.3/src/fmu/pem/pem_functions/run_patchy_cement_model.py +182 -0
  58. fmu_pem-0.0.2/src/fmu/pem/pem_functions/run_t_matrix_and_pressure.py → fmu_pem-0.0.3/src/fmu/pem/pem_functions/run_t_matrix_model.py +48 -27
  59. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/__init__.py +31 -9
  60. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/cumsum_properties.py +29 -37
  61. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/delta_cumsum_time.py +8 -13
  62. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/enum_defs.py +127 -0
  63. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/export_routines.py +84 -72
  64. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/fipnum_pvtnum_utilities.py +217 -0
  65. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/import_config.py +111 -0
  66. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/import_routines.py +150 -0
  67. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/pem_class_definitions.py +171 -0
  68. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/pem_config_validation.py +730 -0
  69. fmu_pem-0.0.3/src/fmu/pem/pem_utilities/rpm_models.py +575 -0
  70. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/update_grid.py +3 -2
  71. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/pem_utilities/utils.py +90 -38
  72. fmu_pem-0.0.3/src/fmu/pem/run_pem.py +129 -0
  73. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/version.py +16 -3
  74. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/PKG-INFO +18 -11
  75. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/SOURCES.txt +45 -4
  76. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/requires.txt +1 -1
  77. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/conftest.py +5 -8
  78. fmu_pem-0.0.3/tests/data/ert/model/run_pem_condensate.ert +13 -0
  79. fmu_pem-0.0.3/tests/data/ert/model/run_pem_no_condensate.ert +13 -0
  80. fmu_pem-0.0.3/tests/data/share/results/grids/eclipsegrid_pem.roff +0 -0
  81. fmu_pem-0.0.3/tests/data/sim2seis/input/pem/simgrid--carbfraction.roff +0 -0
  82. fmu_pem-0.0.3/tests/data/sim2seis/input/pem/simgrid--coalfraction.roff +0 -0
  83. fmu_pem-0.0.3/tests/data/sim2seis/input/pem/simgrid--vsh.roff +0 -0
  84. fmu_pem-0.0.3/tests/data/sim2seis/model/pem_config_condensate.yml +193 -0
  85. fmu_pem-0.0.3/tests/data/sim2seis/model/pem_config_condensate_multi.yml +182 -0
  86. fmu_pem-0.0.3/tests/data/sim2seis/model/pem_config_no_condensate.yml +195 -0
  87. fmu_pem-0.0.3/tests/data/sim2seis/model/vp_exp_model.pkl +0 -0
  88. fmu_pem-0.0.3/tests/data/sim2seis/model/vs_exp_model.pkl +0 -0
  89. fmu_pem-0.0.3/tests/test_config_file_validation.py +73 -0
  90. fmu_pem-0.0.3/tests/test_density.py +110 -0
  91. fmu_pem-0.0.3/tests/test_ert_hooks.py +137 -0
  92. fmu_pem-0.0.3/tests/test_ert_hooks_condensate.py +121 -0
  93. fmu_pem-0.0.3/tests/test_fipnum_and_pvtnum.py +83 -0
  94. fmu_pem-0.0.3/tests/test_fipnum_pvtnum_utilities.py +117 -0
  95. fmu_pem-0.0.3/tests/test_fluids.py +351 -0
  96. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/test_friable.py +30 -27
  97. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/test_patchy_cement.py +31 -27
  98. fmu_pem-0.0.3/tests/test_pem.py +45 -0
  99. fmu_pem-0.0.3/tests/test_pressure_sensitivity.py +650 -0
  100. fmu_pem-0.0.3/tests/test_regression.py +581 -0
  101. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/test_t_matrix.py +54 -46
  102. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/test_utils.py +22 -15
  103. fmu_pem-0.0.2/documentation/docs/.vitepress/config.mts +0 -30
  104. fmu_pem-0.0.2/documentation/docs/ert-configuration.md +0 -15
  105. fmu_pem-0.0.2/src/fmu/pem/__main__.py +0 -53
  106. fmu_pem-0.0.2/src/fmu/pem/pem_functions/density.py +0 -55
  107. fmu_pem-0.0.2/src/fmu/pem/pem_functions/effective_pressure.py +0 -169
  108. fmu_pem-0.0.2/src/fmu/pem/pem_functions/estimate_saturated_rock.py +0 -90
  109. fmu_pem-0.0.2/src/fmu/pem/pem_functions/fluid_properties.py +0 -286
  110. fmu_pem-0.0.2/src/fmu/pem/pem_functions/regression_models.py +0 -261
  111. fmu_pem-0.0.2/src/fmu/pem/pem_functions/run_friable_model.py +0 -119
  112. fmu_pem-0.0.2/src/fmu/pem/pem_functions/run_patchy_cement_model.py +0 -120
  113. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/enum_defs.py +0 -70
  114. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/import_config.py +0 -93
  115. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/import_routines.py +0 -162
  116. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/pem_class_definitions.py +0 -113
  117. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/pem_config_validation.py +0 -538
  118. fmu_pem-0.0.2/src/fmu/pem/pem_utilities/rpm_models.py +0 -202
  119. fmu_pem-0.0.2/src/fmu/pem/run_pem.py +0 -98
  120. fmu_pem-0.0.2/tests/data/ert/model/run_pem_condensate.ert +0 -11
  121. fmu_pem-0.0.2/tests/data/ert/model/run_pem_no_condensate.ert +0 -11
  122. fmu_pem-0.0.2/tests/data/sim2seis/input/pem/simgrid--ntg_pem.roff +0 -0
  123. fmu_pem-0.0.2/tests/data/sim2seis/input/pem/simgrid.roff +0 -0
  124. fmu_pem-0.0.2/tests/data/sim2seis/model/pem_config_condensate.yml +0 -125
  125. fmu_pem-0.0.2/tests/data/sim2seis/model/pem_config_no_condensate.yml +0 -126
  126. fmu_pem-0.0.2/tests/data/sim2seis/model/vp_exp_model.pkl +0 -0
  127. fmu_pem-0.0.2/tests/data/sim2seis/model/vs_exp_model.pkl +0 -0
  128. fmu_pem-0.0.2/tests/test_config_file_validation.py +0 -33
  129. fmu_pem-0.0.2/tests/test_dry_rock.py +0 -49
  130. fmu_pem-0.0.2/tests/test_ert_hooks.py +0 -201
  131. fmu_pem-0.0.2/tests/test_ert_hooks_condensate.py +0 -173
  132. fmu_pem-0.0.2/tests/test_pem.py +0 -18
  133. fmu_pem-0.0.2/tests/test_regression.py +0 -141
  134. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/.github/workflows/build_test_deploy.yml +0 -0
  135. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/.pre-commit-config.yaml +0 -0
  136. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/LICENSE +0 -0
  137. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/public/fmu_logo_dark_mode.svg +0 -0
  138. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/public/fmu_logo_light_mode.svg +0 -0
  139. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/documentation/docs/yaml-edit/schema.tsx +0 -0
  140. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/setup.cfg +0 -0
  141. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/__init__.py +0 -0
  142. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/__init__.py +0 -0
  143. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/forward_models/__init__.py +0 -0
  144. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/hook_implementations/__init__.py +0 -0
  145. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu/pem/hook_implementations/jobs.py +0 -0
  146. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/dependency_links.txt +0 -0
  147. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/entry_points.txt +0 -0
  148. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/src/fmu_pem.egg-info/top_level.txt +0 -0
  149. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/__init__.py +0 -0
  150. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/fmuconfig/output/global_variables.yml +0 -0
  151. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/fmuconfig/output/global_variables_pred.yml +0 -0
  152. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/input/pem/ECLIPSE.EGRID +0 -0
  153. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/input/pem/ECLIPSE.INIT +0 -0
  154. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/input/pem/ECLIPSE.UNRST +0 -0
  155. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/input/pem/export_grid.roff +0 -0
  156. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/input/pem/export_prop.roff +0 -0
  157. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/model/carbonate_pressure_model_vp_exp.pkl +0 -0
  158. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/model/carbonate_pressure_model_vs_exp.pkl +0 -0
  159. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/model/t_mat_params_exp.pkl +0 -0
  160. {fmu_pem-0.0.2 → fmu_pem-0.0.3}/tests/data/sim2seis/model/t_mat_params_petec.pkl +0 -0
@@ -1,4 +1,6 @@
1
1
  /.venv/
2
+ /venv/
3
+ /venv_external/
2
4
  /.vscode/
3
5
  # Local debug scripts etc
4
6
  Notebooks_and_scripts/
@@ -9,6 +11,9 @@ Notebooks/
9
11
  /dist/
10
12
  /src/fmu_pem.egg-info/
11
13
  **/__pycache__/
14
+ **/*_cache/
15
+ /.idea/
16
+ /.vscode/
12
17
  src/fmu/pem/version.py
13
18
 
14
19
  # npm and node relevant build files
@@ -19,3 +24,8 @@ dist
19
24
  fmu-pem-schema.json
20
25
  **/.vitepress/dist
21
26
  **/.vitepress/cache
27
+ /ERT/storage/
28
+ /ERT/logs/
29
+ /ERT/.runpath_list
30
+ /logs/
31
+ /tests/data/sim2seis/input/pem/venv_ext/
@@ -7,7 +7,8 @@
7
7
 
8
8
  DEFINE <USER> $USER
9
9
  DEFINE <SCRATCH> /scratch/fmu
10
- DEFINE <CONFIG_PATH> /private/hfle/drogon_hfle/dev/rms/model
10
+ DEFINE <CONFIG_PATH> /private/hfle/drogon_hfle/dev/sim2seis/model
11
+ DEFINE <MODEL_PATH> /private/hfle/drogon_hfle/dev/sim2seis/model
11
12
 
12
13
  NUM_REALIZATIONS 1
13
14
  RUNPATH <SCRATCH>/<USER>/fmu_sim2seis_pem/realization-<IENS>/iter-<ITER>
@@ -15,11 +16,9 @@ RUNPATH <SCRATCH>/<USER>/fmu_sim2seis_pem/realization-<IENS>/iter-<ITER>
15
16
  -- Copy required input files for the PEM, directories are automatically created by COPY_FILE
16
17
  FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../fmuconfig/output/global_variables.yml, <TO>=<RUNPATH>/fmuconfig/output/global_variables.yml)
17
18
  FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../fmuconfig/output/global_variables_pred.yml, <TO>=<RUNPATH>/fmuconfig/output/global_variables_pred.yml)
18
- FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem/ECLIPSE.EGRID, <TO>=<RUNPATH>/sim2seis/input/pem/ECLIPSE.EGRID)
19
- FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem/ECLIPSE.INIT, <TO>=<RUNPATH>/sim2seis/input/pem/ECLIPSE.INIT)
20
- FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem/ECLIPSE.UNRST, <TO>=<RUNPATH>/sim2seis/input/pem/ECLIPSE.UNRST)
21
- FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem/export_grid.roff, <TO>=<RUNPATH>/sim2seis/input/pem/export_grid.roff)
22
- FORWARD_MODEL COPY_FILE(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem/export_prop.roff, <TO>=<RUNPATH>/sim2seis/input/pem/export_prop.roff)
19
+
20
+ -- Copy the input file directory, it can vary which volume fraction files that are included in the PEM run
21
+ FORWARD_MODEL COPY_DIRECTORY(<FROM>=<CONFIG_PATH>/../../sim2seis/input/pem, <TO>=<RUNPATH>/sim2seis/input)
23
22
 
24
23
  -- Copy all model files in ../../sim2seis/model for flexibility. The PEM .yml file (new_pem_config.yml) is
25
24
  -- always required, .pkl model files are required if tmatrix model is used in the PEM
@@ -30,12 +29,13 @@ FORWARD_MODEL MAKE_DIRECTORY(<DIRECTORY> = <RUNPATH>/sim2seis/output/pem)
30
29
  FORWARD_MODEL MAKE_DIRECTORY(<DIRECTORY> = <RUNPATH>/share/results/grids)
31
30
 
32
31
  -- Create start directory
33
- FORWARD_MODEL MAKE_DIRECTORY(<DIRECTORY> = <RUNPATH>/rms/model)
32
+ FORWARD_MODEL MAKE_DIRECTORY(<DIRECTORY> = <RUNPATH>/sim2seis/model)
34
33
 
35
34
  -- PEM parameter setting
36
- DEFINE <PEM_STARTDIR> <RUNPATH>/rms/model
37
- DEFINE <RELPATH_PEM> <RUNPATH>/sim2seis/model
35
+ DEFINE <PEM_CONFIGDIR> <RUNPATH>/sim2seis/model
38
36
  DEFINE <PEM_CONFIG_FILE_NAME> new_pem_config.yml
37
+ DEFINE <GLOBAL_PATH> ../../fmuconfig/output
38
+ DEFINE <GLOBAL_CONFIG_FILE> global_variables.yml
39
39
 
40
40
  -- Run the PEM
41
- FORWARD_MODEL PEM(<START_DIR>=<PEM_STARTDIR>, <CONFIG_DIR>=<RELPATH_PEM>, <CONFIG_FILE>=<PEM_CONFIG_FILE_NAME>)
41
+ FORWARD_MODEL PEM(<CONFIG_DIR>=<PEM_CONFIGDIR>, <CONFIG_FILE>=<PEM_CONFIG_FILE_NAME>, <GLOBAL_DIR>=<GLOBAL_PATH>, <GLOBAL_FILE>=<GLOBAL_CONFIG_FILE>, <MODEL_DIR>=<MODEL_PATH>)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmu-pem
3
- Version: 0.0.2
3
+ Version: 0.0.3
4
4
  Summary: pem
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -695,7 +695,7 @@ Requires-Dist: xtgeo>=4.7.1
695
695
  Requires-Dist: fmu-tools
696
696
  Requires-Dist: fmu-config
697
697
  Requires-Dist: fmu-dataio
698
- Requires-Dist: rock-physics-open>=0.1.2
698
+ Requires-Dist: rock-physics-open>=0.3.3
699
699
  Requires-Dist: PyYAML>=6.0.1
700
700
  Requires-Dist: pydantic
701
701
  Requires-Dist: ert>=14.1.10
@@ -716,7 +716,8 @@ Requires-Dist: sphinx_rtd_theme; extra == "docs"
716
716
  Dynamic: license-file
717
717
 
718
718
  > [!WARNING]
719
- > `fmu-pem` is not yet qualified technology, and as of today only applicable for selected pilot test fields.
719
+ > `fmu-pem` is not yet qualified technology, and as of today only applicable for
720
+ selected pilot test fields.
720
721
 
721
722
  **[📚 User documentation](https://equinor.github.io/fmu-pem/)**
722
723
 
@@ -731,25 +732,28 @@ based on the [rock-physics-open](https://github.com/equinor/rock-physics-open) l
731
732
 
732
733
  To install `fmu-pem`, first activate a virtual environment, then type:
733
734
 
734
- ```
735
+ ```shell
735
736
  pip install fmu-pem
736
737
  ```
737
738
 
738
739
  The PEM is controlled by parameter settings in a *yaml-file*, given as part of the
739
- command line arguments, or by the workflow parameter if it is run as an ERT forward model.
740
+ command line arguments, or by the workflow parameter if it is run as an ERT forward
741
+ model.
740
742
 
741
743
  ### Calibration of rock physics models
742
744
 
743
745
  Calibration of the rock physics models is normally carried out in
744
746
  [RokDoc](https://www.ikonscience.com/rokdoc-geoprediction-software-platform/)
745
- prior to running the PEM. Fluid and mineral properties can be found in the RokDoc project, or
746
- from LFP logs, if they are available.
747
+ prior to running the PEM. Fluid and mineral properties can be found in the RokDoc
748
+ project, or from LFP logs, if they are available.
747
749
 
748
- > [!NOTE]
749
- > The fluid models contained in this module may not cover all possible cases. Gas condensate, very heavy oil,
750
- > or reservoir pressure under hydrocarbon bubble point will need additional proprietary code to run.
750
+ > [!NOTE]
751
+ > The fluid models contained in this module may not cover all possible cases. Gas
752
+ condensate, very heavy oil, > or reservoir pressure under hydrocarbon bubble point will
753
+ need additional proprietary code to run.
751
754
  >
752
755
  > Equinor users can install additional proprietary models using
756
+
753
757
  > ```bash
754
758
  > pip install "git+ssh://git@github.com/equinor/rock-physics"`
755
759
  > ```
@@ -757,10 +761,13 @@ from LFP logs, if they are available.
757
761
  ## How to develop fmu-pem?
758
762
 
759
763
  Developing the user interface can be done by:
764
+
760
765
  ```bash
761
766
  cd ./documentation
762
767
  npm ci # Install dependencies
763
768
  npm run create-json-schema # Extract JSON schema from Python code
764
769
  npm run docs:dev # Start local development server
765
770
  ```
766
- The JSON schema itself (type, title, description etc.) comes from the corresponding Pydantic models in the Python code.
771
+
772
+ The JSON schema itself (type, title, description etc.) comes from the corresponding
773
+ Pydantic models in the Python code.
@@ -1,5 +1,6 @@
1
1
  > [!WARNING]
2
- > `fmu-pem` is not yet qualified technology, and as of today only applicable for selected pilot test fields.
2
+ > `fmu-pem` is not yet qualified technology, and as of today only applicable for
3
+ selected pilot test fields.
3
4
 
4
5
  **[📚 User documentation](https://equinor.github.io/fmu-pem/)**
5
6
 
@@ -14,25 +15,28 @@ based on the [rock-physics-open](https://github.com/equinor/rock-physics-open) l
14
15
 
15
16
  To install `fmu-pem`, first activate a virtual environment, then type:
16
17
 
17
- ```
18
+ ```shell
18
19
  pip install fmu-pem
19
20
  ```
20
21
 
21
22
  The PEM is controlled by parameter settings in a *yaml-file*, given as part of the
22
- command line arguments, or by the workflow parameter if it is run as an ERT forward model.
23
+ command line arguments, or by the workflow parameter if it is run as an ERT forward
24
+ model.
23
25
 
24
26
  ### Calibration of rock physics models
25
27
 
26
28
  Calibration of the rock physics models is normally carried out in
27
29
  [RokDoc](https://www.ikonscience.com/rokdoc-geoprediction-software-platform/)
28
- prior to running the PEM. Fluid and mineral properties can be found in the RokDoc project, or
29
- from LFP logs, if they are available.
30
+ prior to running the PEM. Fluid and mineral properties can be found in the RokDoc
31
+ project, or from LFP logs, if they are available.
30
32
 
31
- > [!NOTE]
32
- > The fluid models contained in this module may not cover all possible cases. Gas condensate, very heavy oil,
33
- > or reservoir pressure under hydrocarbon bubble point will need additional proprietary code to run.
33
+ > [!NOTE]
34
+ > The fluid models contained in this module may not cover all possible cases. Gas
35
+ condensate, very heavy oil, > or reservoir pressure under hydrocarbon bubble point will
36
+ need additional proprietary code to run.
34
37
  >
35
38
  > Equinor users can install additional proprietary models using
39
+
36
40
  > ```bash
37
41
  > pip install "git+ssh://git@github.com/equinor/rock-physics"`
38
42
  > ```
@@ -40,10 +44,13 @@ from LFP logs, if they are available.
40
44
  ## How to develop fmu-pem?
41
45
 
42
46
  Developing the user interface can be done by:
47
+
43
48
  ```bash
44
49
  cd ./documentation
45
50
  npm ci # Install dependencies
46
51
  npm run create-json-schema # Extract JSON schema from Python code
47
52
  npm run docs:dev # Start local development server
48
53
  ```
49
- The JSON schema itself (type, title, description etc.) comes from the corresponding Pydantic models in the Python code.
54
+
55
+ The JSON schema itself (type, title, description etc.) comes from the corresponding
56
+ Pydantic models in the Python code.
@@ -2,10 +2,10 @@ If you discover a security vulnerability in this project, please follow the step
2
2
 
3
3
  ### For "non-critical" issues
4
4
 
5
- - **Alternative A:**
5
+ - **Alternative A:**
6
6
  Create a GitHub issue for the vulnerability. Avoid putting sensitive information in the issue.
7
7
 
8
- - **Alternative B:**
8
+ - **Alternative B:**
9
9
  Send an email to the projects maintainer describing the issue.
10
10
 
11
11
  ### For "critical" and time sensitive issues
@@ -0,0 +1,59 @@
1
+ import {readFileSync} from "fs"
2
+ import {defineConfig} from 'vitepress'
3
+
4
+ // Copied from https://github.com/equinor/vscode-lang-ert/blob/master/syntaxes/ert.tmLanguage.json
5
+ const ertLanguageGrammar = JSON.parse(readFileSync("./docs/ert.tmLanguage.json"))
6
+
7
+ // https://vitepress.dev/reference/site-config
8
+ export default defineConfig({
9
+ title: "FMU PEM",
10
+ description: "User documentation for using fmu-pem",
11
+ head: [
12
+ ["link", {rel: "stylesheet", href: "https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css"}]
13
+ ],
14
+ markdown: {
15
+ math: true,
16
+ languages: [ertLanguageGrammar]
17
+ },
18
+ themeConfig: {
19
+ // https://vitepress.dev/reference/default-theme-config
20
+ nav: [
21
+ {text: 'Home', link: '/'},
22
+ ],
23
+ logo: {light: "/fmu_logo_light_mode.svg", dark: "/fmu_logo_dark_mode.svg"},
24
+ sidebar: [
25
+ {
26
+ text: 'Setup',
27
+ items: [
28
+ {
29
+ text: "fmu-PEM manual", link: "/use-cases", items: [
30
+ {text: 'Read and validate YAML file', link: '/yaml-validation'},
31
+ {text: 'Import reservoir simulator results', link: '/import-sim-results'},
32
+ {text: 'Estimate effective mineral properties', link: '/effective-mineral-properties'},
33
+ {text: 'Estimate effective fluid properties', link: '/fluid-properties'},
34
+ {text: 'Estimate effective pressure', link: '/effective-pressure'},
35
+ {text: 'Estimate saturated rock properties', link: '/saturated-rock'},
36
+ {text: '(Optional) estimate difference properties', link: '/difference-properties'},
37
+ {text: 'Save intermediate (optional) and final estimates', link: '/save-results'},
38
+ {text: 'Model file formats', link: '/model-file-formats'},
39
+ ]
40
+ },
41
+ {text: 'ERT configuration', link: '/ert-configuration'},
42
+ {text: 'PEM configuration', link: '/pem-configuration'}
43
+ ]
44
+ },
45
+ {
46
+ text: 'Developer Documentation',
47
+ items: [
48
+ {text: 'Zone-Aware Fluid Properties', link: '/zone-aware-fluids'},
49
+ {text: 'Zone-Based Saturated Rock Properties', link: '/zone-based-saturated-rock'},
50
+ {text: 'Zone Implementation Roadmap', link: '/zone-implementation-roadmap'}
51
+ ]
52
+ }
53
+ ],
54
+ socialLinks: [
55
+ {icon: 'github', link: 'https://github.com/equinor/fmu-pem'}
56
+ ]
57
+ },
58
+ ignoreDeadLinks: true
59
+ })
@@ -0,0 +1,28 @@
1
+ # Calculate difference properties
2
+
3
+ `fmu-pem` is normally used for estimating 4D seismic response, and difference between simulator model time steps
4
+ can be more important than absolute values. In `fmu-sim2seis` workflow, the difference is calculated from absolute
5
+ values in a set of `Vp`, `Vs` and `Rho` parameters, ref. [Save results](./save-results.md). Additional difference
6
+ parameters can be generated in `fmu-pem` for QC or calibration purposes.
7
+
8
+ A section in the YAML configuration file specifies which parameters are selected for difference calculation, and
9
+ what kind of difference attributes should be estimated:
10
+
11
+ ```yaml
12
+ # For 4D parameters: settings for which difference parameters to calculate
13
+ diff_calculation:
14
+ AI: [diffpercent, ratio]
15
+ SI: [diffpercent, ratio]
16
+ VPVS: [ratio]
17
+ TWTPP: [diff]
18
+ DENS: [diffpercent]
19
+ VP: [diffpercent]
20
+ VS: [diffpercent]
21
+ SWAT: [diff]
22
+ SGAS: [diff]
23
+ ```
24
+
25
+ For convenience, it is possible to calculate differences of input parameter, as well, as in the example above for
26
+ `SWAT` and `SGAS`. The three difference attributes that can be selected, are `diff`, `diffpercent` and `ratio`.
27
+
28
+ In the FMU directory structure, the difference estimates are stored in `share/results/grids`.
@@ -0,0 +1,48 @@
1
+ # Effective mineral properties
2
+
3
+ A volume of rock will generally consist of several minerals, each having its own elastic properties. To calculate
4
+ the overall elastic properties of the volume, we need to know the elastic properties of each mineral, the volume
5
+ fractions of the minerals, and we must have a model for how to mix the volume fractions.
6
+
7
+ Default values for the elastic properties of the most common minerals are provided in `fmu-pem`, but they should
8
+ be verified in each case. Shale is often given as the effective mineral properties of a combination of constituents,
9
+ and it can range from a soft marine clay to a stiff, quartz-rich silt.
10
+
11
+
12
+ | Mineral | Density [kg/m^3] | Bulk modulus [GPa] | Shear modulus [GPa] |
13
+ |------------|------------------|--------------------|---------------------|
14
+ | Quartz | 2650.0 | 36.8 | 44.0 |
15
+ | Shale | 2680.0 | 25.0 | 12.0 |
16
+ | Calcite | 2710.0 | 76.8 | 32.0 |
17
+ | Dolomite | 2870.0 | 94.9 | 45.0 |
18
+ | Stevensite | 2490.0 | 32.5 | 45.0 |
19
+
20
+ <span id="table-1-mineral-properties"><strong>Table 1:</strong> Default values of elastic properties for common minerals.</span>
21
+
22
+ More mineral properties can be found in the **Rock Physics Handbook**.
23
+
24
+ Mavko, G., Mukerji, T., & Dvorkin, J. (2020). *The Rock Physics Handbook* (3rd ed.). Cambridge University Press.
25
+
26
+ ## Volume fractions
27
+
28
+ Please make sure that the section on [volume fractions](./import-sim-results.md) is understood, and that the `YAML` file
29
+ contains information about all minerals that should be included in the PEM, and also if they are defined as volume
30
+ fractions or mineral fractions.
31
+
32
+ ## Mix models for effective mineral properties
33
+
34
+ Two models for mixing minerals are available in `fmu-pem`: **Hashin-Shtrikman** and **Voigt-Reuss-Hill** average. The
35
+ difference between them is illustrated in [Figure 1](figure-1-bulk-modulus) and [Figure 2](figure-2-shear-modulus)
36
+ below. In this example, quartz is mixed with a soft marine clay in different proportions. As shown, there is negligible
37
+ difference in effective bulk modulus properties when selecting either Hashin-Shtrikman average or Voigt-Reuss-Hill average.
38
+ The upper and lower bounds of both methods are also included in the plots. The bounds for Hashin-Shtrikman are notably
39
+ narrower than for Voigt and Reuss bounds, with the latter representing the stiffest and softest theoretical combinations,
40
+ respectively.
41
+
42
+ <img src="./images/bulk_modulus_vs_quartz_fraction.png">
43
+ <span id="figure-1-bulk-modulus"><strong>Figure 1:</strong> Bulk modulus for a mix of quartz and marine clay.</span>
44
+ <br><br>
45
+
46
+ <img src="./images/shear_modulus_vs_quartz_fraction.png">
47
+ <span id="figure-2-shear-modulus"><strong>Figure 2:</strong> Shear modulus for a mix of quartz and marine clay.</span>
48
+ <br><br>
@@ -0,0 +1,38 @@
1
+ # Effective pressure
2
+
3
+ The matrix of porous rocks will be affected by the effective stress in terms of porosity, permeability and elastic
4
+ moduli. In this context, we simplify it to regard elastic moduli to be stress sensitive, and to keep porosity
5
+ constant. `fmu-pem` does not include any modelling of permeability.
6
+
7
+ Although effective pressure is the commonly used term, it is somewhat inaccurate, and effective stress is more correct.
8
+ In the `fmu-pem` case, we simplify the stress tensor to an isotropic pressure. To estimate effective pressure, we need to
9
+ know the overburden pressure and the formation pressure at all grid cells. Formation pressure is provided by the
10
+ reservoir simulator model, but overburden pressure is not available there. The best source for overburden pressure is
11
+ provided by drilling or operational geology disciplines, and for most fields, it will be a single one-dimensional model,
12
+ or in some cases one model per structure in the field. The relationship between overburden, formation and effective
13
+ pressures is given as:
14
+
15
+ $$P_{eff} = P_{ob} - \alpha \cdot P_f$$,
16
+
17
+ where $\alpha$ is the formation factor, also known as the Biot coefficient.
18
+
19
+ ## Variation with time
20
+
21
+ As formation pressure is reduced by depletion, the effective pressure will vary with time. In `fmu-pem`, the effective
22
+ pressure is estimated for each time step in the reservoir simulator **.UNRST** file.
23
+
24
+ ## Implementation in `fmu-pem`
25
+
26
+ Two versions of estimation of effective pressure are included in `fmu-pem`: either a constant overburden pressure at
27
+ top reservoir, or a linear depth trend. Formation factor is set to 1.0. These are the settings in the YAML config file:
28
+
29
+ ```yaml
30
+ # Overburden pressure may be set to a constant, but the estimation is improved by using a depth trend
31
+ # Unit is Pa
32
+ pressure:
33
+ type: trend
34
+ intercept: 20.0e6
35
+ gradient: 9174.3
36
+ # type: constant
37
+ # value: 50000000.0
38
+ ```
@@ -0,0 +1,17 @@
1
+ # ERT configuration file
2
+
3
+ You can include `fmu-pem` in your ERT setup by including the following snippet:
4
+
5
+ ````ert
6
+ -- Define your variables:
7
+ DEFINE <CONFIG_PATH> <RUNPATH>/sim2seis/model
8
+ DEFINE <PEM_CONFIG_FILE_NAME> pem_config.yml
9
+ DEFINE <GLOBAL_CONFIG_DIR> ../../fmuconfig/output
10
+ DEFINE <GLOBAL_CONFIG_FILE> global_variables.yml
11
+ DEFINE <MODEL_PATH> /my_fmu_structure/sim2seis/model
12
+
13
+ -- Run the pre-installed ERT forward model:
14
+ FORWARD_MODEL PEM(<CONFIG_DIR>=<CONFIG_PATH>, <CONFIG_FILE>=<PEM_CONFIG_FILE_NAME>, <GLOBAL_DIR>=<GLOBAL_CONFIG_DIR>, <GLOBAL_FILE>=<GLOBAL_CONFIG_FILE>, <MODEL_DIR>=<MODEL_PATH>)
15
+ ````
16
+
17
+ On the next page you will get help on setting up your `pem_config.yml`.
@@ -0,0 +1,155 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
3
+ "name": "ert",
4
+ "patterns": [
5
+ {
6
+ "include": "#sections"
7
+ },
8
+ {
9
+ "include": "#comments"
10
+ },
11
+ {
12
+ "include": "#keywords"
13
+ },
14
+ {
15
+ "include": "#important"
16
+ },
17
+ {
18
+ "include": "#variables"
19
+ },
20
+ {
21
+ "include": "#parameters"
22
+ },
23
+ {
24
+ "include": "#strings"
25
+ },
26
+ {
27
+ "include": "#entities"
28
+ },
29
+ {
30
+ "include": "#endcomments"
31
+ },
32
+ {
33
+ "include": "#numbers"
34
+ },
35
+ {
36
+ "include": "#symbols"
37
+ }
38
+ ],
39
+ "repository": {
40
+ "keywords": {
41
+ "patterns": [
42
+ {
43
+ "name": "keyword.ert",
44
+ "match": "^[A-Z][_A-Z0-9]*"
45
+ }
46
+ ]
47
+ },
48
+ "entities": {
49
+ "patterns": [
50
+ {
51
+ "name": "entity.name.function.ert",
52
+ "match": "[A-Z0-9][._A-Z0-9]*(?=\\()"
53
+ }
54
+ ]
55
+ },
56
+ "parameters": {
57
+ "patterns": [
58
+ {
59
+ "name": "variable.parameter.ert",
60
+ "match": "\\s[$A-Z][_A-Z0-9]*(?=\\s)"
61
+ }
62
+ ]
63
+ },
64
+ "important": {
65
+ "patterns": [
66
+ {
67
+ "name": "support.type.property-name.json",
68
+ "match": "<RUNPATH>|<CONFIG_PATH>"
69
+ }
70
+ ]
71
+ },
72
+ "variables": {
73
+ "patterns": [
74
+ {
75
+ "name": "entity.name.type.ert",
76
+ "match": "<[A-Z][_A-Z0-9]*>"
77
+ }
78
+ ]
79
+ },
80
+ "strings": {
81
+ "name": "string.quoted.double.ert",
82
+ "begin": "\"",
83
+ "end": "\"",
84
+ "patterns": [
85
+ {
86
+ "name": "constant.character.escape.ert",
87
+ "match": "\\\\."
88
+ }
89
+ ]
90
+ },
91
+ "linecomments": {
92
+ "patterns": [
93
+ {
94
+ "name": "comment.line.double-dash.ert",
95
+ "match": "^--.*$"
96
+ }
97
+ ]
98
+ },
99
+ "endcomments": {
100
+ "patterns": [
101
+ {
102
+ "name": "comment.ert",
103
+ "match": "--.*$"
104
+ }
105
+ ]
106
+ },
107
+ "sections": {
108
+ "patterns": [
109
+ {
110
+ "name": "string.ert",
111
+ "match": "--\\sWorkflows"
112
+ }
113
+ ]
114
+ },
115
+ "numbers": {
116
+ "patterns": [
117
+ {
118
+ "match": "(?x)\n(?<!\\$)(?:\n (?:\\b[0-9]+(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # 1.1E+3\n (?:\\b[0-9]+(\\.)[eE][+-]?[0-9]+\\b)| # 1.E+3\n (?:\\B(\\.)[0-9]+[eE][+-]?[0-9]+\\b)| # .1E+3\n (?:\\b[0-9]+[eE][+-]?[0-9]+\\b)| # 1E+3\n (?:\\b[0-9]+(\\.)[0-9]+\\b)| # 1.1\n (?:\\b[0-9]+(\\.)\\B)| # 1.\n (?:\\B(\\.)[0-9]+\\b)| # .1\n (?:\\b[0-9]+\\b(?!\\.)) # 1\n)(?!\\$)",
119
+ "captures": {
120
+ "0": {
121
+ "name": "constant.numeric.decimal.ert"
122
+ },
123
+ "1": {
124
+ "name": "meta.delimiter.decimal.period.ert"
125
+ },
126
+ "2": {
127
+ "name": "meta.delimiter.decimal.period.ert"
128
+ },
129
+ "3": {
130
+ "name": "meta.delimiter.decimal.period.ert"
131
+ },
132
+ "4": {
133
+ "name": "meta.delimiter.decimal.period.ert"
134
+ },
135
+ "5": {
136
+ "name": "meta.delimiter.decimal.period.ert"
137
+ },
138
+ "6": {
139
+ "name": "meta.delimiter.decimal.period.ert"
140
+ }
141
+ }
142
+ }
143
+ ]
144
+ },
145
+ "symbols": {
146
+ "patterns": [
147
+ {
148
+ "match": "=|\/|\\(|\\)|,",
149
+ "name": "storage.type.ert"
150
+ }
151
+ ]
152
+ }
153
+ },
154
+ "scopeName": "source.ert"
155
+ }