rock-physics-open 0.3.0__py3-none-any.whl → 0.3.1__py3-none-any.whl
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.
Potentially problematic release.
This version of rock-physics-open might be problematic. Click here for more details.
- rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py +0 -12
- rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py +0 -16
- rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py +6 -4
- rock_physics_open/equinor_utilities/std_functions/backus_ave.py +16 -1
- rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py +10 -2
- rock_physics_open/equinor_utilities/std_functions/gassmann.py +32 -7
- rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py +36 -7
- rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py +9 -1
- rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py +22 -6
- rock_physics_open/equinor_utilities/std_functions/reflection_eq.py +28 -6
- rock_physics_open/equinor_utilities/std_functions/rho.py +12 -2
- rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py +25 -4
- rock_physics_open/equinor_utilities/std_functions/walton.py +8 -1
- rock_physics_open/equinor_utilities/std_functions/wood_brie.py +20 -3
- rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py +16 -9
- rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py +21 -2
- rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py +21 -2
- rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py +23 -12
- rock_physics_open/equinor_utilities/various_utilities/hs_average.py +20 -1
- rock_physics_open/equinor_utilities/various_utilities/pressure.py +9 -1
- rock_physics_open/equinor_utilities/various_utilities/reflectivity.py +26 -10
- rock_physics_open/equinor_utilities/various_utilities/timeshift.py +15 -2
- rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py +40 -24
- rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py +24 -2
- rock_physics_open/sandstone_models/friable_models.py +6 -7
- rock_physics_open/sandstone_models/patchy_cement_model.py +15 -0
- rock_physics_open/ternary_plots/ternary_plot_utilities.py +3 -3
- rock_physics_open/version.py +2 -2
- {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/METADATA +2 -2
- {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/RECORD +33 -35
- rock_physics_open/equinor_utilities/machine_learning_utilities/friable_pressure_models.py +0 -230
- rock_physics_open/equinor_utilities/machine_learning_utilities/patchy_cement_pressure_models.py +0 -280
- {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/WHEEL +0 -0
- {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/licenses/LICENSE +0 -0
- {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
3
|
+
|
|
1
4
|
from rock_physics_open.equinor_utilities import std_functions
|
|
2
5
|
|
|
3
6
|
|
|
4
|
-
def gassmann_model(
|
|
7
|
+
def gassmann_model(
|
|
8
|
+
k_min: npt.NDArray[np.float64],
|
|
9
|
+
k_fl: npt.NDArray[np.float64],
|
|
10
|
+
rho_fl: npt.NDArray[np.float64],
|
|
11
|
+
k_dry: npt.NDArray[np.float64],
|
|
12
|
+
mu: npt.NDArray[np.float64],
|
|
13
|
+
rho_dry: npt.NDArray[np.float64],
|
|
14
|
+
por: npt.NDArray[np.float64],
|
|
15
|
+
) -> tuple[
|
|
16
|
+
npt.NDArray[np.float64],
|
|
17
|
+
npt.NDArray[np.float64],
|
|
18
|
+
npt.NDArray[np.float64],
|
|
19
|
+
npt.NDArray[np.float64],
|
|
20
|
+
npt.NDArray[np.float64],
|
|
21
|
+
npt.NDArray[np.float64],
|
|
22
|
+
npt.NDArray[np.float64],
|
|
23
|
+
]:
|
|
5
24
|
"""
|
|
6
25
|
Gassmann model to go from dry rock to saturated state.
|
|
7
26
|
|
|
@@ -25,7 +44,7 @@ def gassmann_model(k_min, k_fl, rho_fl, k_dry, mu, rho_dry, por):
|
|
|
25
44
|
Returns
|
|
26
45
|
-------
|
|
27
46
|
tuple
|
|
28
|
-
vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu :
|
|
47
|
+
vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : np.ndarray
|
|
29
48
|
vp_sat, vs_sat: saturated velocities [m/s], rho_sat: saturated density [kg/m^3], ai_sat: saturated acoustic
|
|
30
49
|
impedance [kg/m^3 x m/s], vpvs_sat: saturated velocity ratio [unitless], k_sat, mu: saturated bulk modulus and
|
|
31
50
|
shear modulus (the latter unchanged from dry state) [Pa].
|
|
@@ -1,17 +1,28 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
3
|
+
|
|
1
4
|
from rock_physics_open.equinor_utilities import std_functions
|
|
2
5
|
|
|
3
6
|
|
|
4
7
|
def gassmann_sub_model(
|
|
5
|
-
k_min,
|
|
6
|
-
k_fl_orig,
|
|
7
|
-
rho_fl_orig,
|
|
8
|
-
k_fl_sub,
|
|
9
|
-
rho_fl_sub,
|
|
10
|
-
k_sat_orig,
|
|
11
|
-
mu,
|
|
12
|
-
rho_sat_orig,
|
|
13
|
-
por,
|
|
14
|
-
)
|
|
8
|
+
k_min: npt.NDArray[np.float64],
|
|
9
|
+
k_fl_orig: npt.NDArray[np.float64],
|
|
10
|
+
rho_fl_orig: npt.NDArray[np.float64],
|
|
11
|
+
k_fl_sub: npt.NDArray[np.float64],
|
|
12
|
+
rho_fl_sub: npt.NDArray[np.float64],
|
|
13
|
+
k_sat_orig: npt.NDArray[np.float64],
|
|
14
|
+
mu: npt.NDArray[np.float64],
|
|
15
|
+
rho_sat_orig: npt.NDArray[np.float64],
|
|
16
|
+
por: npt.NDArray[np.float64],
|
|
17
|
+
) -> tuple[
|
|
18
|
+
npt.NDArray[np.float64],
|
|
19
|
+
npt.NDArray[np.float64],
|
|
20
|
+
npt.NDArray[np.float64],
|
|
21
|
+
npt.NDArray[np.float64],
|
|
22
|
+
npt.NDArray[np.float64],
|
|
23
|
+
npt.NDArray[np.float64],
|
|
24
|
+
npt.NDArray[np.float64],
|
|
25
|
+
]:
|
|
15
26
|
"""
|
|
16
27
|
Gassmann model to go from one saturated state to another.
|
|
17
28
|
|
|
@@ -24,7 +35,7 @@ def gassmann_sub_model(
|
|
|
24
35
|
rho_fl_orig : np.ndarray
|
|
25
36
|
Original fluid density [lg/m^3].
|
|
26
37
|
k_fl_sub : np.ndarray
|
|
27
|
-
|
|
38
|
+
Substituted fluid bulk modulus [Pa].
|
|
28
39
|
rho_fl_sub : np.ndarray
|
|
29
40
|
Substituted fluid density [lg/m^3].
|
|
30
41
|
k_sat_orig : np.ndarray
|
|
@@ -39,7 +50,7 @@ def gassmann_sub_model(
|
|
|
39
50
|
Returns
|
|
40
51
|
-------
|
|
41
52
|
tuple
|
|
42
|
-
vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu :
|
|
53
|
+
vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : np.ndarray
|
|
43
54
|
vp_sat, vs_sat: saturated velocities [m/s], rho_sat: saturated density [kg/m^3], ai_sat: saturated acoustic
|
|
44
55
|
impedance [kg/m^3 x m/s], vpvs_sat: saturated velocity ratio [unitless], k_sat, mu: saturated bulk modulus and
|
|
45
56
|
shear modulus (the latter unchanged from dry state) [Pa].
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
3
|
+
|
|
1
4
|
from rock_physics_open.equinor_utilities import std_functions
|
|
2
5
|
|
|
3
6
|
|
|
4
|
-
def hs_average(
|
|
7
|
+
def hs_average(
|
|
8
|
+
k1: npt.NDArray[np.float64],
|
|
9
|
+
mu1: npt.NDArray[np.float64],
|
|
10
|
+
rhob1: npt.NDArray[np.float64],
|
|
11
|
+
k2: npt.NDArray[np.float64],
|
|
12
|
+
mu2: npt.NDArray[np.float64],
|
|
13
|
+
rhob2: npt.NDArray[np.float64],
|
|
14
|
+
f: npt.NDArray[np.float64],
|
|
15
|
+
) -> tuple[
|
|
16
|
+
npt.NDArray[np.float64],
|
|
17
|
+
npt.NDArray[np.float64],
|
|
18
|
+
npt.NDArray[np.float64],
|
|
19
|
+
npt.NDArray[np.float64],
|
|
20
|
+
npt.NDArray[np.float64],
|
|
21
|
+
npt.NDArray[np.float64],
|
|
22
|
+
npt.NDArray[np.float64],
|
|
23
|
+
]:
|
|
5
24
|
"""
|
|
6
25
|
BMix of two phases by Hashin-Shtrikman model. Derived properties are also returned.
|
|
7
26
|
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
def pressure(
|
|
5
|
+
def pressure(
|
|
6
|
+
rho: npt.NDArray[np.float64],
|
|
7
|
+
tvd_msl: npt.NDArray[np.float64],
|
|
8
|
+
water_depth: float,
|
|
9
|
+
p_form: float,
|
|
10
|
+
tvd_p_form: float,
|
|
11
|
+
n: float,
|
|
12
|
+
) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]]:
|
|
5
13
|
"""
|
|
6
14
|
Function to estimate overburden pressure and vertical effective stress (lithostatic pressure)
|
|
7
15
|
based on density.
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
+
from typing import Literal, cast
|
|
2
|
+
|
|
1
3
|
import numpy as np
|
|
4
|
+
import numpy.typing as npt
|
|
2
5
|
|
|
3
6
|
from rock_physics_open.equinor_utilities import gen_utilities, std_functions
|
|
4
7
|
|
|
5
8
|
|
|
6
|
-
def reflectivity(
|
|
9
|
+
def reflectivity(
|
|
10
|
+
vp_inp: npt.NDArray[np.float64],
|
|
11
|
+
vs_inp: npt.NDArray[np.float64],
|
|
12
|
+
rho_inp: npt.NDArray[np.float64],
|
|
13
|
+
theta: float = 0.0,
|
|
14
|
+
k: float = 2.0,
|
|
15
|
+
model: Literal["AkiRichards", "SmithGidlow"] = "AkiRichards",
|
|
16
|
+
) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.bool_]]:
|
|
7
17
|
"""
|
|
8
18
|
Reflectivity model according to Aki and Richards or Smith and Gidlow for weak contrasts
|
|
9
19
|
and angles less than critical angle.
|
|
@@ -35,12 +45,17 @@ def reflectivity(vp_inp, vs_inp, rho_inp, theta=0.0, k=2.0, model="AkiRichards")
|
|
|
35
45
|
idx_inp: index to accepted part of the input arrays [bool].
|
|
36
46
|
"""
|
|
37
47
|
|
|
38
|
-
vp, vs, rho,
|
|
39
|
-
|
|
48
|
+
vp, vs, rho, theta_, k_ = cast(
|
|
49
|
+
list[npt.NDArray[np.float64]],
|
|
50
|
+
gen_utilities.dim_check_vector((vp_inp, vs_inp, rho_inp, theta, k)),
|
|
40
51
|
)
|
|
41
52
|
|
|
42
|
-
idx_inp, (vp, vs, rho,
|
|
43
|
-
[
|
|
53
|
+
idx_inp, (vp, vs, rho, theta_, k_) = cast(
|
|
54
|
+
tuple[npt.NDArray[np.bool_], list[npt.NDArray[np.float64]]],
|
|
55
|
+
gen_utilities.filter_input_log(
|
|
56
|
+
[vp, vs, rho, theta_, k_],
|
|
57
|
+
positive=True,
|
|
58
|
+
),
|
|
44
59
|
)
|
|
45
60
|
|
|
46
61
|
if np.any(~idx_inp):
|
|
@@ -69,16 +84,17 @@ def reflectivity(vp_inp, vs_inp, rho_inp, theta=0.0, k=2.0, model="AkiRichards")
|
|
|
69
84
|
> 1
|
|
70
85
|
) * "s"
|
|
71
86
|
raise ValueError(
|
|
72
|
-
"{0:} reflectivity: Missing or illegal values in input log{1:}: {2:}interpolation of input log{1:} "
|
|
73
|
-
|
|
87
|
+
"{0:} reflectivity: Missing or illegal values in input log{1:}: {2:}interpolation of input log{1:} is needed\n".format(
|
|
88
|
+
model, log_str, pl_str
|
|
89
|
+
)
|
|
74
90
|
)
|
|
75
91
|
|
|
76
92
|
if model == "AkiRichards":
|
|
77
|
-
refl_coef = std_functions.aki_richards(vp, vs, rho,
|
|
93
|
+
refl_coef = std_functions.aki_richards(vp, vs, rho, theta_, k_)
|
|
78
94
|
elif model == "SmithGidlow":
|
|
79
|
-
refl_coef = std_functions.smith_gidlow(vp, vs, rho,
|
|
95
|
+
refl_coef = std_functions.smith_gidlow(vp, vs, rho, theta_, k_)
|
|
80
96
|
else:
|
|
81
|
-
raise ValueError(
|
|
97
|
+
raise ValueError( # pyright: ignore[reportUnreachable] | Kept for backward compatibility
|
|
82
98
|
f'{__file__}: unknown model: {model}, should be one of "AkiRichards", "SmithGidlow"'
|
|
83
99
|
)
|
|
84
100
|
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
def time_shift_pp(
|
|
5
|
+
def time_shift_pp(
|
|
6
|
+
tvd: npt.NDArray[np.float64],
|
|
7
|
+
vp_base: npt.NDArray[np.float64],
|
|
8
|
+
vp_mon: npt.NDArray[np.float64],
|
|
9
|
+
multiplier: int,
|
|
10
|
+
) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]]:
|
|
5
11
|
"""
|
|
6
12
|
Cumulative time shift calculation for 4D case. According to Equinor standard
|
|
7
13
|
the time shift is negative for an increase in velocity from base to monitor
|
|
@@ -43,7 +49,14 @@ def time_shift_pp(tvd, vp_base, vp_mon, multiplier):
|
|
|
43
49
|
return owt_pp_shift, twt_pp_shift
|
|
44
50
|
|
|
45
51
|
|
|
46
|
-
def time_shift_ps(
|
|
52
|
+
def time_shift_ps(
|
|
53
|
+
tvd: npt.NDArray[np.float64],
|
|
54
|
+
vp_base: npt.NDArray[np.float64],
|
|
55
|
+
vp_mon: npt.NDArray[np.float64],
|
|
56
|
+
vs_base: npt.NDArray[np.float64],
|
|
57
|
+
vs_mon: npt.NDArray[np.float64],
|
|
58
|
+
multiplier: int,
|
|
59
|
+
) -> npt.NDArray[np.float64]:
|
|
47
60
|
"""
|
|
48
61
|
Cumulative time shift calculation for 4D case. According to Equinor standard
|
|
49
62
|
the time shift is negative for an increase in velocity from base to monitor
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from typing import Literal, cast
|
|
2
3
|
|
|
3
4
|
import numpy as np
|
|
5
|
+
import numpy.typing as npt
|
|
4
6
|
import pandas as pd
|
|
5
7
|
from sklearn.metrics import r2_score
|
|
6
8
|
|
|
@@ -8,18 +10,18 @@ from .display_result_statistics import disp_result_stats
|
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
def vp_vs_rho_stats(
|
|
11
|
-
vp_observed,
|
|
12
|
-
vs_observed,
|
|
13
|
-
rho_observed,
|
|
14
|
-
vp_estimated,
|
|
15
|
-
vs_estimated,
|
|
16
|
-
rho_estimated,
|
|
17
|
-
fname,
|
|
18
|
-
estimated_set_names,
|
|
19
|
-
well_names,
|
|
20
|
-
file_mode="a",
|
|
21
|
-
disp_results=True,
|
|
22
|
-
):
|
|
13
|
+
vp_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
14
|
+
vs_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
15
|
+
rho_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
16
|
+
vp_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
17
|
+
vs_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
18
|
+
rho_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
19
|
+
fname: str,
|
|
20
|
+
estimated_set_names: str | list[str],
|
|
21
|
+
well_names: str | list[str],
|
|
22
|
+
file_mode: Literal["a", "w"] = "a",
|
|
23
|
+
disp_results: bool = True,
|
|
24
|
+
) -> None:
|
|
23
25
|
"""
|
|
24
26
|
Utility to estimate statistics between vp-vs-rho sets - observed and estimated values. The results are displayed
|
|
25
27
|
on screen (optional) and saved to a .csv file. If the file exists, the results will be appended.
|
|
@@ -83,33 +85,42 @@ def vp_vs_rho_stats(
|
|
|
83
85
|
]
|
|
84
86
|
est_frame = pd.DataFrame(columns=est_frame_columns, index=estimated_set_names)
|
|
85
87
|
est_frame.index.name = "Estimated set name"
|
|
86
|
-
est_frame.iloc[:, 0] = well_names
|
|
88
|
+
est_frame.iloc[:, 0] = well_names # pyright: ignore[reportArgumentType]
|
|
87
89
|
|
|
88
90
|
# If inputs are found to satisfy expectations in _verify, and they are numpy arrays, cast to lists, and run through
|
|
89
91
|
if isinstance(vp_observed, np.ndarray):
|
|
90
92
|
vp_observed = [vp_observed]
|
|
93
|
+
if isinstance(vs_observed, np.ndarray):
|
|
91
94
|
vs_observed = [vs_observed]
|
|
95
|
+
if isinstance(rho_observed, np.ndarray):
|
|
92
96
|
rho_observed = [rho_observed]
|
|
97
|
+
if isinstance(vp_estimated, np.ndarray):
|
|
93
98
|
vp_estimated = [vp_estimated]
|
|
99
|
+
if isinstance(vs_estimated, np.ndarray):
|
|
94
100
|
vs_estimated = [vs_estimated]
|
|
101
|
+
if isinstance(rho_estimated, np.ndarray):
|
|
95
102
|
rho_estimated = [rho_estimated]
|
|
96
103
|
|
|
97
104
|
for i in range(len(vp_observed)):
|
|
98
|
-
res = []
|
|
105
|
+
res: list[float] = []
|
|
99
106
|
for obs, est in zip(
|
|
100
107
|
[vp_observed[i], vs_observed[i], rho_observed[i]],
|
|
101
108
|
[vp_estimated[i], vs_estimated[i], rho_estimated[i]],
|
|
102
109
|
):
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
)
|
|
110
|
+
rmae = float(
|
|
111
|
+
np.mean(np.abs((est.flatten() - obs.flatten()) / obs.flatten()))
|
|
112
|
+
)
|
|
113
|
+
rrmse: float = np.sqrt(
|
|
114
|
+
np.mean(np.square((est.flatten() - obs.flatten()) / obs.flatten()))
|
|
108
115
|
)
|
|
109
|
-
|
|
116
|
+
r2 = cast(float, r2_score(obs.flatten(), est.flatten()))
|
|
117
|
+
|
|
118
|
+
res.append(rmae)
|
|
119
|
+
res.append(rrmse)
|
|
120
|
+
res.append(r2)
|
|
110
121
|
|
|
111
122
|
res_dict = dict(zip(est_frame_columns[1:], res))
|
|
112
|
-
est_frame.iloc[i, 1:] = res_dict
|
|
123
|
+
est_frame.iloc[i, 1:] = res_dict # pyright: ignore[reportArgumentType]
|
|
113
124
|
if disp_results:
|
|
114
125
|
disp_result_stats(
|
|
115
126
|
estimated_set_names[i], res, est_frame_columns[1:], values_only=True
|
|
@@ -122,7 +133,12 @@ def vp_vs_rho_stats(
|
|
|
122
133
|
est_frame.to_csv(fname, mode=file_mode)
|
|
123
134
|
|
|
124
135
|
|
|
125
|
-
def _verify(
|
|
136
|
+
def _verify(
|
|
137
|
+
*args: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
|
|
138
|
+
set_names: list[str],
|
|
139
|
+
well_names: list[str],
|
|
140
|
+
file_mode: Literal["a", "w"],
|
|
141
|
+
):
|
|
126
142
|
"""Verify that arguments are either numpy arrays or lists of numpy arrays.
|
|
127
143
|
Raises
|
|
128
144
|
------
|
|
@@ -142,7 +158,7 @@ def _verify(*args, set_names=None, well_names=None, file_mode=None):
|
|
|
142
158
|
if isinstance(arg, np.ndarray):
|
|
143
159
|
arg = [arg]
|
|
144
160
|
for this_arg in arg:
|
|
145
|
-
if not isinstance(this_arg, np.ndarray):
|
|
161
|
+
if not isinstance(this_arg, np.ndarray): # pyright: ignore[reportUnnecessaryIsInstance] | For backward compatibility
|
|
146
162
|
raise ValueError(f"{__file__}: input not numpy array: {type(arg)}")
|
|
147
163
|
if np.any(np.isnan(this_arg)):
|
|
148
164
|
raise ValueError(f"{__file__}: input contains NaNs")
|
|
@@ -151,4 +167,4 @@ def _verify(*args, set_names=None, well_names=None, file_mode=None):
|
|
|
151
167
|
if not len(arg) == len(set_names) == len(well_names):
|
|
152
168
|
raise ValueError(f"{__file__}: mismatch in argument lengths")
|
|
153
169
|
if not (file_mode == "a" or file_mode == "w"):
|
|
154
|
-
raise ValueError(f'{__file__}: file_mode must be one of ["a", "w"]')
|
|
170
|
+
raise ValueError(f'{__file__}: file_mode must be one of ["a", "w"]') # pyright: ignore[reportUnreachable] | For backward compatibility
|
|
@@ -1,9 +1,31 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import numpy.typing as npt
|
|
3
|
+
|
|
1
4
|
from rock_physics_open.equinor_utilities import std_functions
|
|
2
5
|
|
|
3
6
|
|
|
4
7
|
def min_3_voigt_reuss_hill(
|
|
5
|
-
vp1
|
|
6
|
-
|
|
8
|
+
vp1: npt.NDArray[np.float64],
|
|
9
|
+
vs1: npt.NDArray[np.float64],
|
|
10
|
+
rhob1: npt.NDArray[np.float64],
|
|
11
|
+
f1: npt.NDArray[np.float64],
|
|
12
|
+
vp2: npt.NDArray[np.float64],
|
|
13
|
+
vs2: npt.NDArray[np.float64],
|
|
14
|
+
rhob2: npt.NDArray[np.float64],
|
|
15
|
+
f2: npt.NDArray[np.float64],
|
|
16
|
+
vp3: npt.NDArray[np.float64],
|
|
17
|
+
vs3: npt.NDArray[np.float64],
|
|
18
|
+
rhob3: npt.NDArray[np.float64],
|
|
19
|
+
f3: npt.NDArray[np.float64],
|
|
20
|
+
) -> tuple[
|
|
21
|
+
npt.NDArray[np.float64],
|
|
22
|
+
npt.NDArray[np.float64],
|
|
23
|
+
npt.NDArray[np.float64],
|
|
24
|
+
npt.NDArray[np.float64],
|
|
25
|
+
npt.NDArray[np.float64],
|
|
26
|
+
npt.NDArray[np.float64],
|
|
27
|
+
npt.NDArray[np.float64],
|
|
28
|
+
]:
|
|
7
29
|
"""
|
|
8
30
|
Mix of three phases by Voigt-Reuss-Hill model. The fractions should add up to 1 with input of vp, vs and rho.
|
|
9
31
|
|
|
@@ -124,7 +124,7 @@ def friable_model_dry(k_min, mu_min, phi, p_eff, phi_c, coord_num_func, n, shear
|
|
|
124
124
|
Critical porosity [fraction].
|
|
125
125
|
coord_num_func : str
|
|
126
126
|
Indication if coordination number should be calculated from porosity or kept constant.
|
|
127
|
-
n : float
|
|
127
|
+
n : float | None
|
|
128
128
|
Coordination number [unitless].
|
|
129
129
|
shear_red : float
|
|
130
130
|
Shear reduction factor [fraction].
|
|
@@ -135,18 +135,17 @@ def friable_model_dry(k_min, mu_min, phi, p_eff, phi_c, coord_num_func, n, shear
|
|
|
135
135
|
k, mu : (np.ndarray, np.ndarray).
|
|
136
136
|
Bulk modulus k [Pa], shear modulus mu [Pa] of dry rock.
|
|
137
137
|
"""
|
|
138
|
-
# Expand floats to arrays
|
|
139
|
-
phi, phi_c,
|
|
140
|
-
(phi, phi_c,
|
|
138
|
+
# Expand floats to arrays, check for equal length
|
|
139
|
+
phi, phi_c, shear_red, k_min, mu_min, p_eff = gen_utilities.dim_check_vector(
|
|
140
|
+
(phi, phi_c, shear_red, k_min, mu_min, p_eff)
|
|
141
141
|
)
|
|
142
|
-
|
|
143
142
|
# Valid porosity values are less or equal to the critical porosity
|
|
144
143
|
# Use filter_input_log to remove values that do not comply with this
|
|
145
144
|
(
|
|
146
145
|
idx_phi,
|
|
147
|
-
(
|
|
146
|
+
(phi, phi_c, shear_red, k_min, mu_min, p_eff, _),
|
|
148
147
|
) = gen_utilities.filter_input_log(
|
|
149
|
-
(
|
|
148
|
+
(phi, phi_c, shear_red, k_min, mu_min, p_eff, phi_c - phi)
|
|
150
149
|
)
|
|
151
150
|
|
|
152
151
|
# Dry rock properties of high-porosity end member calculated with
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import numpy as np
|
|
2
2
|
|
|
3
3
|
from rock_physics_open.equinor_utilities import std_functions
|
|
4
|
+
from rock_physics_open.equinor_utilities.gen_utilities import (
|
|
5
|
+
dim_check_vector,
|
|
6
|
+
filter_input_log,
|
|
7
|
+
filter_output,
|
|
8
|
+
)
|
|
4
9
|
|
|
5
10
|
from .constant_cement_models import constant_cement_model_dry
|
|
6
11
|
from .friable_models import friable_model_dry
|
|
@@ -299,6 +304,14 @@ def patchy_cement_model_dry(
|
|
|
299
304
|
mu : dry rock shear modulus [Pa],
|
|
300
305
|
rho_dry : dry rock density [kg/m3].,
|
|
301
306
|
"""
|
|
307
|
+
# There are cases which suffer from a lack of consistency check at this stage,
|
|
308
|
+
# add dim_check_vector and filter input/output
|
|
309
|
+
phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff = dim_check_vector(
|
|
310
|
+
(phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff)
|
|
311
|
+
)
|
|
312
|
+
(idx, (phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff)) = (
|
|
313
|
+
filter_input_log((phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff))
|
|
314
|
+
)
|
|
302
315
|
|
|
303
316
|
k_zero, mu_zero = std_functions.hashin_shtrikman_walpole(
|
|
304
317
|
k_cem, mu_cem, k_min, mu_min, FRAC_CEM_UP, bound="lower"
|
|
@@ -366,4 +379,6 @@ def patchy_cement_model_dry(
|
|
|
366
379
|
|
|
367
380
|
rho_dry = (1 - phi - frac_cem) * rho_min + frac_cem * rho_cem
|
|
368
381
|
|
|
382
|
+
k_dry, mu, rho_dry = filter_output(idx, (k_dry, mu, rho_dry))
|
|
383
|
+
|
|
369
384
|
return k_dry, mu, rho_dry
|
|
@@ -183,15 +183,15 @@ def _make_mesh(ax):
|
|
|
183
183
|
# Tick mark text
|
|
184
184
|
xy1 = _ternary_coord_trans(1 - i, i, np.zeros(len(i)))
|
|
185
185
|
for j in range(len(i)):
|
|
186
|
-
text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] - 0.025, "%.1f" % (i[j])))
|
|
186
|
+
text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] - 0.025, "%.1f" % (i[j, 0])))
|
|
187
187
|
xy1 = _ternary_coord_trans(i, np.zeros(len(i)), 1 - i)
|
|
188
188
|
for j in range(len(i)):
|
|
189
189
|
text_handles.append(
|
|
190
|
-
ax.text(xy1[j, 0] - 0.05, xy1[j, 1] + 0.025, "%.1f" % (i[j]))
|
|
190
|
+
ax.text(xy1[j, 0] - 0.05, xy1[j, 1] + 0.025, "%.1f" % (i[j, 0]))
|
|
191
191
|
)
|
|
192
192
|
xy1 = _ternary_coord_trans(np.zeros(len(i)), 1 - i, i)
|
|
193
193
|
for j in range(len(i)):
|
|
194
|
-
text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] + 0.025, "%.1f" % (i[j])))
|
|
194
|
+
text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] + 0.025, "%.1f" % (i[j, 0])))
|
|
195
195
|
plt.setp(text_handles, fontsize=10)
|
|
196
196
|
|
|
197
197
|
return text_handles, line_handles
|
rock_physics_open/version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.3.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 3,
|
|
31
|
+
__version__ = version = '0.3.1'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 3, 1)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rock_physics_open
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Equinor Rock Physics Module
|
|
5
5
|
Author-email: Harald Flesche <hfle@equinor.com>, Eivind Jahren <ejah@equinor.com>, Jimmy Zurcher <jiz@equinor.com>
|
|
6
6
|
Maintainer-email: Harald Flesche <hfle@equinor.com>, Eirik Ola Aksnes <eoaksnes@equinor.com>, Sivert Utne <sutn@equinor.com>, Einar Wigum Arbo <earb@equinor.com>
|
|
@@ -76,7 +76,7 @@ Alternatively, you can update the dependencies in your `pyproject.toml` file:
|
|
|
76
76
|
<!-- x-release-please-start-version -->
|
|
77
77
|
```toml
|
|
78
78
|
dependencies = [
|
|
79
|
-
"rock-physics-open == 0.3.
|
|
79
|
+
"rock-physics-open == 0.3.1",
|
|
80
80
|
]
|
|
81
81
|
```
|
|
82
82
|
<!-- x-release-please-end-version -->
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
rock_physics_open/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
rock_physics_open/version.py,sha256=
|
|
2
|
+
rock_physics_open/version.py,sha256=gGLpQUQx-ty9SEy9PYw9OgJWWzJLBnCpfJOfzL7SjlI,704
|
|
3
3
|
rock_physics_open/equinor_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
rock_physics_open/equinor_utilities/anisotropy.py,sha256=toEsuIW_gHr34gZQpam3sQTl0ap6nAq1pW5hcX9GOHI,4469
|
|
5
5
|
rock_physics_open/equinor_utilities/conversions.py,sha256=d6SGPbzYsmYBvhDqnohg1lPjAeYGOc0z_vdsuFeNlb4,194
|
|
@@ -16,15 +16,13 @@ rock_physics_open/equinor_utilities/gen_utilities/dict_to_float.py,sha256=-fiOsN
|
|
|
16
16
|
rock_physics_open/equinor_utilities/gen_utilities/dim_check_vector.py,sha256=2ebRxWL4XFpnLsbi0j43KQff9ydRyR8hOB1KSqQY8JI,3964
|
|
17
17
|
rock_physics_open/equinor_utilities/gen_utilities/filter_input.py,sha256=K-DUsS8nVOWick6CsnsWrUWnOtzPq5ofc_Z8kPBU_hs,5419
|
|
18
18
|
rock_physics_open/equinor_utilities/gen_utilities/filter_output.py,sha256=iwoHuyzJtksEJKjuLwScd96Bov6SyifU-AqvosZ9VD0,3528
|
|
19
|
-
rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py,sha256=
|
|
19
|
+
rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py,sha256=tXpPTpkviwEbok3Ff8R7m4Og8d97fjdsZaaM599jjEA,469
|
|
20
20
|
rock_physics_open/equinor_utilities/machine_learning_utilities/base_pressure_model.py,sha256=UHBdYODHbXey4IwAhCbedcb5SwGCLkVJK98zKIOaIfY,4722
|
|
21
21
|
rock_physics_open/equinor_utilities/machine_learning_utilities/dummy_vars.py,sha256=y2hWACUX9sk-kRH7FNTaO2-9ZNDHR-HvZzSpIz9ILxM,1479
|
|
22
22
|
rock_physics_open/equinor_utilities/machine_learning_utilities/exponential_model.py,sha256=ZWtA8aNKVDkf8vAyH8IzJx1l8feipxQOGhITo5Ytv0g,3738
|
|
23
|
-
rock_physics_open/equinor_utilities/machine_learning_utilities/
|
|
24
|
-
rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py,sha256=BFGnvnOfLHlBEnEy2BxbLteb4kUnURCNm2OS2m7ejUY,3195
|
|
25
|
-
rock_physics_open/equinor_utilities/machine_learning_utilities/patchy_cement_pressure_models.py,sha256=7F60cS_TrffiMozrVdNkhl2lKcyeSQgQoFsGCDXokEc,8361
|
|
23
|
+
rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py,sha256=a8KJTfeUCNz0zuDKwS4M5ZFIiWdIA8oHvEPxG4FzYvM,2391
|
|
26
24
|
rock_physics_open/equinor_utilities/machine_learning_utilities/polynomial_model.py,sha256=WO6yOoygTD8B73SVWMoS5W-oMTAYm3yo8Ztj-LPR3s4,3673
|
|
27
|
-
rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py,sha256=
|
|
25
|
+
rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py,sha256=7Ocw-tJtedJeuwcmCBQM_pHDmQilvxc2tO_oa-8WIdE,4826
|
|
28
26
|
rock_physics_open/equinor_utilities/machine_learning_utilities/sigmoidal_model.py,sha256=dIPtjPcjCOBJtQwuUfRRci8rgBfFwwcPcbuKPqqL7VM,7315
|
|
29
27
|
rock_physics_open/equinor_utilities/optimisation_utilities/__init__.py,sha256=8IZ_5Yq83YUB7_cxTkC8WeMkQGUHt83IHzA6GJ4rxDc,364
|
|
30
28
|
rock_physics_open/equinor_utilities/optimisation_utilities/opt_subst_utilities.py,sha256=X77V2hi6PKpKwrf9ygPXeIjJxr-LkztucVXlyAjMBHU,14164
|
|
@@ -32,30 +30,30 @@ rock_physics_open/equinor_utilities/snapshot_test_utilities/__init__.py,sha256=l
|
|
|
32
30
|
rock_physics_open/equinor_utilities/snapshot_test_utilities/compare_snapshots.py,sha256=PcbCM29iKtVUyRDB9kEFIbboX4fLT_Co2aaztCyqE20,5729
|
|
33
31
|
rock_physics_open/equinor_utilities/snapshot_test_utilities/snapshots.py,sha256=_UvX78IoPDPTCAbblHD9fH_Yn-LwkDOA9MuU69bPdbM,2691
|
|
34
32
|
rock_physics_open/equinor_utilities/std_functions/__init__.py,sha256=MLOfMxRazS9tGOVvuLkUp-E4b6jRWOP4YCLf8si624c,1121
|
|
35
|
-
rock_physics_open/equinor_utilities/std_functions/backus_ave.py,sha256=
|
|
36
|
-
rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py,sha256=
|
|
37
|
-
rock_physics_open/equinor_utilities/std_functions/gassmann.py,sha256=
|
|
38
|
-
rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py,sha256=
|
|
39
|
-
rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py,sha256=
|
|
40
|
-
rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py,sha256=
|
|
41
|
-
rock_physics_open/equinor_utilities/std_functions/reflection_eq.py,sha256=
|
|
42
|
-
rock_physics_open/equinor_utilities/std_functions/rho.py,sha256=
|
|
43
|
-
rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py,sha256=
|
|
44
|
-
rock_physics_open/equinor_utilities/std_functions/walton.py,sha256=
|
|
45
|
-
rock_physics_open/equinor_utilities/std_functions/wood_brie.py,sha256=
|
|
33
|
+
rock_physics_open/equinor_utilities/std_functions/backus_ave.py,sha256=KPkQrDcUL9DU4BnzcIMvgI61sJcU5aVoT62ZMnbfEpw,1997
|
|
34
|
+
rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py,sha256=KgKe_xHHFRq-eWWBn_506ubGD0O_RmbF2NApWYXNqUM,2435
|
|
35
|
+
rock_physics_open/equinor_utilities/std_functions/gassmann.py,sha256=oLWnGThD55z3nm4wyRDySeIdpTwRtRR-_kGmb5_cI4Q,4325
|
|
36
|
+
rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py,sha256=il6UbxmIskK_cObkTLSma2VPFqswPTLGI1kO8e6x-l4,6856
|
|
37
|
+
rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py,sha256=Ekn4ig6YpkFM0m_Nlx5SwbP7SfT3rOVW2zaxiNQy7CI,1665
|
|
38
|
+
rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py,sha256=Tbmw_OSQaefQoRqOCW1MIjWRlZZVMqSi9UhkYgmwDx8,1521
|
|
39
|
+
rock_physics_open/equinor_utilities/std_functions/reflection_eq.py,sha256=iXuWMGghwhUhyCQgGRm7xS_rhN4k6N042o3nDfgQzl8,3237
|
|
40
|
+
rock_physics_open/equinor_utilities/std_functions/rho.py,sha256=xDIa2x82w2XtkxrgwYYeRnqzT8zWlsfWlp5ntVQpQDs,1696
|
|
41
|
+
rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py,sha256=v1tRVYsH102rE504qJOdkjC2HCrL4FVlU4TI0X0yqKU,3803
|
|
42
|
+
rock_physics_open/equinor_utilities/std_functions/walton.py,sha256=p97TGeHGgEQrrc-c21cb7__0rmlKYgBb82GE1thuwDM,1501
|
|
43
|
+
rock_physics_open/equinor_utilities/std_functions/wood_brie.py,sha256=r4OVEYCVn-v7G2aQ-Yo79T4Zk1xa-Kh9Q8Ll6MJSuyI,2485
|
|
46
44
|
rock_physics_open/equinor_utilities/various_utilities/Equinor_logo.gif,sha256=E9pXxAQig-6chS8Uz3rhFYcNQC4Nk0vbsja0pkZ-lEk,892
|
|
47
45
|
rock_physics_open/equinor_utilities/various_utilities/Equinor_logo.ico,sha256=vXHlDI4DTCgxmm84_FB3BEMK-NORhcSR6wq01sb6QD0,19598
|
|
48
46
|
rock_physics_open/equinor_utilities/various_utilities/__init__.py,sha256=UfxgTybUY_O48gou1DaL2bJYZKTViajN556J4EOjXLs,716
|
|
49
|
-
rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py,sha256=
|
|
50
|
-
rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py,sha256=
|
|
51
|
-
rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py,sha256=
|
|
52
|
-
rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py,sha256=
|
|
53
|
-
rock_physics_open/equinor_utilities/various_utilities/hs_average.py,sha256=
|
|
54
|
-
rock_physics_open/equinor_utilities/various_utilities/pressure.py,sha256=
|
|
55
|
-
rock_physics_open/equinor_utilities/various_utilities/reflectivity.py,sha256=
|
|
56
|
-
rock_physics_open/equinor_utilities/various_utilities/timeshift.py,sha256=
|
|
57
|
-
rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py,sha256=
|
|
58
|
-
rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py,sha256=
|
|
47
|
+
rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py,sha256=8SfCrLhC9nmCTO2NWlEzg2EFJ76lNbA5OXtK15TYs0w,3245
|
|
48
|
+
rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py,sha256=l-7Pfw3wgDkVSWAcMNu_CPocRoUHMIghRVwIXL6qCAs,1757
|
|
49
|
+
rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py,sha256=ZgummAFq9gxVwVKDMfqdG-iUvUnEHdfK6b7iI52BZ3g,1755
|
|
50
|
+
rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py,sha256=JW9KKrLW3qa8TBqDqeFJMjgqLom1pw86qMV-6oUnShw,2209
|
|
51
|
+
rock_physics_open/equinor_utilities/various_utilities/hs_average.py,sha256=2lArjOpwAmZKNuBIwQXppZ7zUo2JlrwzyMdUkQPhI7A,1522
|
|
52
|
+
rock_physics_open/equinor_utilities/various_utilities/pressure.py,sha256=XYw6zu2Lf9VrO4h4i8xRy2guMQSZGR0N1UnIfyhkvDI,3491
|
|
53
|
+
rock_physics_open/equinor_utilities/various_utilities/reflectivity.py,sha256=kxcmooLicw9pGv_TF-O7_uKC44yAqqc0WbcYA4mvpx4,3658
|
|
54
|
+
rock_physics_open/equinor_utilities/various_utilities/timeshift.py,sha256=kX7E4hnusHh5W3aCkaUAezZHn7BRQzVqPZzv2uBpVvU,2709
|
|
55
|
+
rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py,sha256=6M3V57icSKS2yKt5Wi8c6EIuGOoxyfSVt0c9Z5ny14c,6235
|
|
56
|
+
rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py,sha256=c-hnf1FLgpLjFcys_9WRkVHelQ1VYz1Gcf0b8-2Gxt4,2592
|
|
59
57
|
rock_physics_open/fluid_models/__init__.py,sha256=H3jeo69HuZCiuZ_meQe27NXIKTMOq2qiZ_UXKYyFmQs,201
|
|
60
58
|
rock_physics_open/fluid_models/brine_model/__init__.py,sha256=PqVXs5rI421j7xL-Z5pFfNIdC0cUameBJHLOUqEO7wo,86
|
|
61
59
|
rock_physics_open/fluid_models/brine_model/brine_properties.py,sha256=lBnai7l0gr_XGqVIaIPT-WWSudiMfBJAO-_v1FH99uo,5756
|
|
@@ -74,11 +72,11 @@ rock_physics_open/sandstone_models/constant_cement_models.py,sha256=kHRcPEC114uo
|
|
|
74
72
|
rock_physics_open/sandstone_models/constant_cement_optimisation.py,sha256=D9ej8PaQ5iVMaCf0LKDQGgJ6CSl8JEFIaxobwddzs_Y,3745
|
|
75
73
|
rock_physics_open/sandstone_models/contact_cement_model.py,sha256=EVCicRGnW13QBWuvyscFYLy8JpgANPla7ECDeZLfhdA,4488
|
|
76
74
|
rock_physics_open/sandstone_models/curvefit_sandstone_models.py,sha256=pZ7u7bVNYG254fwtyyrD1SMIFn2onHBu_XZCfVfajzI,3988
|
|
77
|
-
rock_physics_open/sandstone_models/friable_models.py,sha256=
|
|
75
|
+
rock_physics_open/sandstone_models/friable_models.py,sha256=cvfLt7GQHn8EKKUk2Z86l-2o-_nXwDXDkQ1ekPQ6L6s,6153
|
|
78
76
|
rock_physics_open/sandstone_models/friable_optimisation.py,sha256=YCg20EJQaQevEmilPWCbuqZ7GycKX84nmlca5W-jfRM,3467
|
|
79
77
|
rock_physics_open/sandstone_models/friable_shalysand_sandyshale_models.py,sha256=eMXRCrGdCC9VyYwjg498M0GTAMlWar18iz5gS7Rz16w,6884
|
|
80
78
|
rock_physics_open/sandstone_models/patchy_cement_fluid_substitution_model.py,sha256=21ujg7K-f7vykKxYwFynPenZLVZkdBAiAEwt4-K4r5I,16123
|
|
81
|
-
rock_physics_open/sandstone_models/patchy_cement_model.py,sha256=
|
|
79
|
+
rock_physics_open/sandstone_models/patchy_cement_model.py,sha256=zKdAAFJXgblCpmihRiEz_8DPd40nniJW97-0daCZoq0,11161
|
|
82
80
|
rock_physics_open/sandstone_models/patchy_cement_optimisation.py,sha256=Tf3jRT0c1r3IgVPUFWTDqh4-XB5381dqeH7CPE27QYg,7017
|
|
83
81
|
rock_physics_open/sandstone_models/unresolved_cemented_sandshale_models.py,sha256=xFF_FrQw_3DoYADK7-3Lecr_KnurNQLsXy-22eN-92c,3901
|
|
84
82
|
rock_physics_open/sandstone_models/unresolved_friable_sandshale_models.py,sha256=HpRBIQw2POoQbJ2DlwoyJSDvKvhJQyhgmkjoGQFo1vE,3671
|
|
@@ -138,10 +136,10 @@ rock_physics_open/ternary_plots/__init__.py,sha256=mrmn0T4G91UPdCTEOr4HSEd1d8ZCR
|
|
|
138
136
|
rock_physics_open/ternary_plots/gen_ternary_plot.py,sha256=uLwoeV19Tfj6Cy18NWcSoOV18DcYBJUYofb8zEYmSzM,1836
|
|
139
137
|
rock_physics_open/ternary_plots/shale_prop_ternary.py,sha256=5-NB4LoXRP7JPQYaJBZwD5mnBLMjisCTEjj2u6u_boE,8228
|
|
140
138
|
rock_physics_open/ternary_plots/ternary_patches.py,sha256=oYaIkCbzC4L19VWBz5iphVdQnpHX9kdy0p2NK65aIIM,7256
|
|
141
|
-
rock_physics_open/ternary_plots/ternary_plot_utilities.py,sha256=
|
|
139
|
+
rock_physics_open/ternary_plots/ternary_plot_utilities.py,sha256=7CM4BuxwUjfPAGLDROBLFs1oiZ48xIZYIrgG46jlM-c,5678
|
|
142
140
|
rock_physics_open/ternary_plots/unconventionals_ternary.py,sha256=KWjcBrjI8Tgr2FYpz1ey-DPuhUeSC7b5mpN8OzwNa4I,1823
|
|
143
|
-
rock_physics_open-0.3.
|
|
144
|
-
rock_physics_open-0.3.
|
|
145
|
-
rock_physics_open-0.3.
|
|
146
|
-
rock_physics_open-0.3.
|
|
147
|
-
rock_physics_open-0.3.
|
|
141
|
+
rock_physics_open-0.3.1.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
142
|
+
rock_physics_open-0.3.1.dist-info/METADATA,sha256=nT1qZefrmIhvMwB4iAF-_yLXV1u9P7OJrivLHxVmzlg,3901
|
|
143
|
+
rock_physics_open-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
144
|
+
rock_physics_open-0.3.1.dist-info/top_level.txt,sha256=zFBbfbv2pshFJvcvcLLigDmlJjjg08iDdb6ABgncaP8,18
|
|
145
|
+
rock_physics_open-0.3.1.dist-info/RECORD,,
|