geomechpy 0.0.2__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.
- geomechpy/__init__.py +2 -0
- geomechpy/elastic_properties.py +607 -0
- geomechpy/near_wellbore_stresses.py +220 -0
- geomechpy/overburden_stress.py +100 -0
- geomechpy/pore_pressure.py +99 -0
- geomechpy/rock_strength.py +130 -0
- geomechpy/static_elastic_properties.py +294 -0
- geomechpy/stress_calculations.py +192 -0
- geomechpy/toolbox.py +71 -0
- geomechpy/wellbore_stability.py +132 -0
- geomechpy-0.0.2.dist-info/METADATA +34 -0
- geomechpy-0.0.2.dist-info/RECORD +14 -0
- geomechpy-0.0.2.dist-info/WHEEL +4 -0
- geomechpy-0.0.2.dist-info/licenses/LICENSE +165 -0
geomechpy/__init__.py
ADDED
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
import math
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@dataclass(frozen=True)
|
|
6
|
+
class ElasticProperties:
|
|
7
|
+
"""Elastic properties model per depth. Can be populated manually or via converter.
|
|
8
|
+
|
|
9
|
+
Attributes:
|
|
10
|
+
bulk_modulus (float): The bulk modulus (K or B or k) of a substance is a measure of the resistance of a substance to bulk compression. Unit: Pressure
|
|
11
|
+
youngs_modulus (float): Young modulus is a mechanical property of solid materials that measures the tensile or compressive stiffness when the force is applied lengthwise. Unit: Pressure
|
|
12
|
+
lame_parameter (float): Lame parameters is a material-dependent quantity denoted by λ which arises in strain-stress relationships. Unit: Pressure
|
|
13
|
+
shear_modulus (float): Shear modulus is a measure of the elastic shear stiffness of a material and is defined as the ratio of shear stress to the shear strain. Unit: Pressure
|
|
14
|
+
poissons_ratio (float): Poisson's ratio is a measure of the Poisson effect, the deformation of a material in directions perpendicular to the specific direction of loading. Unit: unitless
|
|
15
|
+
p_wave_modulus (float): P-wave modulus is one of the elastic moduli available to describe isotropic homogeneous materials. Unit: Pressure"""
|
|
16
|
+
|
|
17
|
+
bulk_modulus: float
|
|
18
|
+
youngs_modulus: float
|
|
19
|
+
lame_parameter: float
|
|
20
|
+
shear_modulus: float
|
|
21
|
+
poissons_ratio: float
|
|
22
|
+
p_wave_modulus: float
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ElasticPropertiesConverter:
|
|
26
|
+
"""Convert any pair of two elastic properties into all other types of elastic property notations.
|
|
27
|
+
|
|
28
|
+
Reference:
|
|
29
|
+
https://en.wikipedia.org/wiki/Elastic_modulus"""
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def convert_from_bulk_and_youngs(bulk_modulus: float, youngs_modulus: float) -> ElasticProperties:
|
|
33
|
+
"""Convert Bulk and Youngs modulus to other elastic property types.
|
|
34
|
+
|
|
35
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
bulk_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
39
|
+
youngs_modulus (float): Young modulus magnitude Unit: Pressure Unit
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
43
|
+
lame_parameter = 3 * bulk_modulus * (3 * bulk_modulus - youngs_modulus) / (9 * bulk_modulus - youngs_modulus)
|
|
44
|
+
shear_modulus = 3 * bulk_modulus * youngs_modulus / (9 * bulk_modulus - youngs_modulus)
|
|
45
|
+
poissons_ratio = (3 * bulk_modulus - youngs_modulus) / (6 * bulk_modulus)
|
|
46
|
+
p_wave_modulus = 3 * bulk_modulus * (3 * bulk_modulus + youngs_modulus) / (9 * bulk_modulus - youngs_modulus)
|
|
47
|
+
|
|
48
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
49
|
+
|
|
50
|
+
@staticmethod
|
|
51
|
+
def convert_from_bulk_and_lame(bulk_modulus: float, lame_parameter: float) -> ElasticProperties:
|
|
52
|
+
"""Convert Bulk modulus and Lame parameter to other elastic property types.
|
|
53
|
+
|
|
54
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
bulk_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
58
|
+
lame_parameter (float): Lame parameter magnitude Unit: Pressure Unit
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
62
|
+
youngs_modulus = 9 * bulk_modulus * (bulk_modulus - lame_parameter) / (3 * bulk_modulus - lame_parameter)
|
|
63
|
+
shear_modulus = 3 * (bulk_modulus - lame_parameter) / 2
|
|
64
|
+
poissons_ratio = lame_parameter / (3 * bulk_modulus - lame_parameter)
|
|
65
|
+
p_wave_modulus = 3 * bulk_modulus - 2 * lame_parameter
|
|
66
|
+
|
|
67
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
68
|
+
|
|
69
|
+
@staticmethod
|
|
70
|
+
def convert_from_bulk_and_shear(bulk_modulus: float, shear_modulus: float) -> ElasticProperties:
|
|
71
|
+
"""Convert Bulk modulus and Shear modulus to other elastic property types.
|
|
72
|
+
|
|
73
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
bulk_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
77
|
+
shear_modulus (float): Shear modulus magnitude Unit: Pressure Unit
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
81
|
+
youngs_modulus = 9 * bulk_modulus * shear_modulus / (3 * bulk_modulus + shear_modulus)
|
|
82
|
+
lame_parameter = bulk_modulus - 2 * shear_modulus / 3
|
|
83
|
+
poissons_ratio = (3 * bulk_modulus - 2 * shear_modulus) / (2 * (3 * bulk_modulus + shear_modulus))
|
|
84
|
+
p_wave_modulus = bulk_modulus + 4 * shear_modulus / 3
|
|
85
|
+
|
|
86
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
87
|
+
|
|
88
|
+
@staticmethod
|
|
89
|
+
def convert_from_bulk_and_poissons(bulk_modulus: float, poissons_ratio: float) -> ElasticProperties:
|
|
90
|
+
"""Convert Bulk modulus and Poisson's ratio to other elastic property types.
|
|
91
|
+
|
|
92
|
+
Input Unit: Bulk modulus - pressure unit, Poisson's ratio - unitless.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
bulk_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
96
|
+
poissons_ratio (float): Young modulus magnitude Unit: Unitless
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
100
|
+
youngs_modulus = 3 * bulk_modulus * (1 - 2 * poissons_ratio)
|
|
101
|
+
lame_parameter = 3 * bulk_modulus * poissons_ratio / (1 + poissons_ratio)
|
|
102
|
+
shear_modulus = 3 * bulk_modulus * (1 - 2 * poissons_ratio) / (2 * (1 + poissons_ratio))
|
|
103
|
+
p_wave_modulus = 3 * bulk_modulus * (1 - poissons_ratio) / (1 + poissons_ratio)
|
|
104
|
+
|
|
105
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
106
|
+
|
|
107
|
+
@staticmethod
|
|
108
|
+
def convert_from_bulk_and_p_wave(bulk_modulus: float, p_wave_modulus: float) -> ElasticProperties:
|
|
109
|
+
"""Convert Bulk and P-wave modulus to other elastic property types.
|
|
110
|
+
|
|
111
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
bulk_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
115
|
+
p_wave_modulus (float): P-wave modulus magnitude Unit: Pressure Unit
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
119
|
+
youngs_modulus = 9 * bulk_modulus * (p_wave_modulus - bulk_modulus) / (3 * bulk_modulus + p_wave_modulus)
|
|
120
|
+
lame_parameter = (3 * bulk_modulus - p_wave_modulus) / 2
|
|
121
|
+
shear_modulus = (3 * (p_wave_modulus - bulk_modulus)) / 4
|
|
122
|
+
poissons_ratio = (3 * bulk_modulus - p_wave_modulus) / (3 * bulk_modulus + p_wave_modulus)
|
|
123
|
+
|
|
124
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
125
|
+
|
|
126
|
+
@staticmethod
|
|
127
|
+
def convert_from_youngs_and_lame(youngs_modulus: float, lame_parameter: float) -> ElasticProperties:
|
|
128
|
+
"""Convert Young's modulus and Lame parameter to other elastic property types.
|
|
129
|
+
|
|
130
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
youngs_modulus (float): Young's modulus magnitude Unit: Pressure Unit
|
|
134
|
+
lame_parameter (float): Lame parameter magnitude Unit: Pressure Unit
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
138
|
+
R = math.sqrt(youngs_modulus**2 + 9 * lame_parameter**2 + 2 * youngs_modulus * lame_parameter)
|
|
139
|
+
|
|
140
|
+
bulk_modulus = (youngs_modulus + 3 * lame_parameter + R) / 6
|
|
141
|
+
shear_modulus = (youngs_modulus - 3 * lame_parameter + R) / 4
|
|
142
|
+
poissons_ratio = 2 * lame_parameter / (youngs_modulus + lame_parameter + R)
|
|
143
|
+
p_wave_modulus = (youngs_modulus - lame_parameter + R) / 2
|
|
144
|
+
|
|
145
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
146
|
+
|
|
147
|
+
@staticmethod
|
|
148
|
+
def convert_from_youngs_and_shear(youngs_modulus: float, shear_modulus: float) -> ElasticProperties:
|
|
149
|
+
"""Convert Young's and Shear modulus to other elastic property types.
|
|
150
|
+
|
|
151
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
youngs_modulus (float): Young's modulus magnitude Unit: Pressure Unit
|
|
155
|
+
shear_modulus (float): Shear modulus magnitude Unit: Pressure Unit
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
159
|
+
bulk_modulus = youngs_modulus * shear_modulus / (3 * (3 * shear_modulus - youngs_modulus))
|
|
160
|
+
lame_parameter = (shear_modulus * (youngs_modulus - 2 * shear_modulus)) / (3 * shear_modulus - youngs_modulus)
|
|
161
|
+
poissons_ratio = 0.5 * (youngs_modulus / shear_modulus) - 1
|
|
162
|
+
p_wave_modulus = (shear_modulus * (4 * shear_modulus - youngs_modulus)) / (3 * shear_modulus - youngs_modulus)
|
|
163
|
+
|
|
164
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
165
|
+
|
|
166
|
+
@staticmethod
|
|
167
|
+
def convert_from_youngs_and_poissons(youngs_modulus: float, poissons_ratio: float) -> ElasticProperties:
|
|
168
|
+
"""Convert Young's modulus and Poisson's ratio to other elastic property types.
|
|
169
|
+
|
|
170
|
+
Input Unit: Young's modulus - pressure unit, Poisson's ratio - unitless.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
youngs_modulus (float): Bulk modulus magnitude Unit: Pressure Unit
|
|
174
|
+
poissons_ratio (float): Poisson's ratio magnitude Unit: unitless
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
178
|
+
bulk_modulus = youngs_modulus / (3 * (1 - 2 * poissons_ratio))
|
|
179
|
+
lame_parameter = youngs_modulus * poissons_ratio / ((1 + poissons_ratio) * (1 - 2 * poissons_ratio))
|
|
180
|
+
shear_modulus = youngs_modulus / (2 * (1 + poissons_ratio))
|
|
181
|
+
p_wave_modulus = (youngs_modulus * (1 - poissons_ratio)) / ((1 + poissons_ratio) * (1 - 2 * poissons_ratio))
|
|
182
|
+
|
|
183
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
184
|
+
|
|
185
|
+
@staticmethod
|
|
186
|
+
def convert_from_youngs_and_p_wave(youngs_modulus: float, p_wave_modulus: float) -> ElasticProperties:
|
|
187
|
+
"""Convert Young's modulus and P-wave modulus to other elastic property types.
|
|
188
|
+
|
|
189
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
youngs_modulus (float): Young's modulus magnitude Unit: Pressure Unit
|
|
193
|
+
p_wave_modulus (float): P-wave modulus magnitude Unit: Pressure Unit
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
197
|
+
S = math.sqrt(youngs_modulus**2 + 9 * p_wave_modulus**2 - 10 * youngs_modulus * p_wave_modulus)
|
|
198
|
+
|
|
199
|
+
bulk_modulus = (3 * p_wave_modulus - youngs_modulus + S) / 6
|
|
200
|
+
lame_parameter = (p_wave_modulus - youngs_modulus + S) / 4
|
|
201
|
+
shear_modulus = (3 * p_wave_modulus + youngs_modulus - S) / 8
|
|
202
|
+
poissons_ratio = (youngs_modulus - p_wave_modulus + S) / (4 * p_wave_modulus)
|
|
203
|
+
|
|
204
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
205
|
+
|
|
206
|
+
@staticmethod
|
|
207
|
+
def convert_from_lame_and_shear(lame_parameter: float, shear_modulus: float) -> ElasticProperties:
|
|
208
|
+
"""Convert Lame parameter and Shear modulus to other elastic property types.
|
|
209
|
+
|
|
210
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
lame_parameter (float): Lame parameter magnitude Unit: Pressure Unit
|
|
214
|
+
shear_modulus (float): Shear modulus magnitude Unit: Pressure Unit
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
218
|
+
bulk_modulus = lame_parameter + (2 * shear_modulus / 3)
|
|
219
|
+
youngs_modulus = shear_modulus * (3 * lame_parameter + 2 * shear_modulus) / (lame_parameter + shear_modulus)
|
|
220
|
+
poissons_ratio = lame_parameter / (2 * (lame_parameter + shear_modulus))
|
|
221
|
+
p_wave_modulus = lame_parameter + 2 * shear_modulus
|
|
222
|
+
|
|
223
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
224
|
+
|
|
225
|
+
@staticmethod
|
|
226
|
+
def convert_from_lame_and_poissons(lame_parameter: float, poissons_ratio: float) -> ElasticProperties:
|
|
227
|
+
"""Convert Lame parameter and Poisson's ratio to other elastic property types.
|
|
228
|
+
|
|
229
|
+
Input Unit: Lame parameter - pressure unit, Poisson's ratio - unitless.
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
lame_parameter (float): Lame parameter magnitude Unit: Pressure Unit
|
|
233
|
+
poissons_ratio (float): Poisson's ratio magnitude Unit: unitless
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
237
|
+
bulk_modulus = lame_parameter * (1 + poissons_ratio) / (3 * poissons_ratio)
|
|
238
|
+
youngs_modulus = (lame_parameter * (1 + poissons_ratio) * (1 - 2 * poissons_ratio)) / poissons_ratio
|
|
239
|
+
shear_modulus = lame_parameter * (1 - 2 * poissons_ratio) / (2 * poissons_ratio)
|
|
240
|
+
p_wave_modulus = (lame_parameter * (1 - poissons_ratio)) / poissons_ratio
|
|
241
|
+
|
|
242
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
243
|
+
|
|
244
|
+
@staticmethod
|
|
245
|
+
def convert_from_lame_and_p_wave(lame_parameter: float, p_wave_modulus: float) -> ElasticProperties:
|
|
246
|
+
"""Convert Lame parameter and P-wave modulus to other elastic property types.
|
|
247
|
+
|
|
248
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
lame_parameter (float): Lame parameter magnitude Unit: Pressure Unit
|
|
252
|
+
p_wave_modulus (float): P-wave modulus magnitude Unit: Pressure Unit
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
256
|
+
bulk_modulus = (p_wave_modulus + 2 * lame_parameter) / 3
|
|
257
|
+
youngs_modulus = ((p_wave_modulus - lame_parameter) * (p_wave_modulus + 2 * lame_parameter)) / (p_wave_modulus + lame_parameter)
|
|
258
|
+
shear_modulus = (p_wave_modulus - lame_parameter) / 2
|
|
259
|
+
poissons_ratio = lame_parameter / (p_wave_modulus + lame_parameter)
|
|
260
|
+
|
|
261
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
262
|
+
|
|
263
|
+
@staticmethod
|
|
264
|
+
def convert_from_shear_and_poissons(shear_modulus: float, poissons_ratio: float) -> ElasticProperties:
|
|
265
|
+
"""Convert Shear modulus and Poisson's ratio to other elastic property types.
|
|
266
|
+
|
|
267
|
+
Input Unit: Young's modulus - pressure unit, Poisson's ratio - unitless.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
shear_modulus (float): Shear modulus magnitude Unit: Pressure Unit
|
|
271
|
+
poissons_ratio (float): Poisson's ratio magnitude Unit: unitless
|
|
272
|
+
|
|
273
|
+
Returns:
|
|
274
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
275
|
+
bulk_modulus = (2 * shear_modulus * (1 + poissons_ratio)) / (3 * (1 - 2 * poissons_ratio))
|
|
276
|
+
youngs_modulus = 2 * shear_modulus * (1 + poissons_ratio)
|
|
277
|
+
lame_parameter = 2 * shear_modulus * poissons_ratio / (1 - 2 * poissons_ratio)
|
|
278
|
+
p_wave_modulus = (2 * shear_modulus * (1 - poissons_ratio)) / (1 - 2 * poissons_ratio)
|
|
279
|
+
|
|
280
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
281
|
+
|
|
282
|
+
@staticmethod
|
|
283
|
+
def convert_from_shear_and_p_wave(shear_modulus: float, p_wave_modulus: float) -> ElasticProperties:
|
|
284
|
+
"""Convert Shear modulus and P-wave modulus to other elastic property types.
|
|
285
|
+
|
|
286
|
+
Input Unit: Pressure Unit of any type (GPa, psi, Mpsi etc). Pressure unit of both inputs needs to be consistent.
|
|
287
|
+
|
|
288
|
+
Args:
|
|
289
|
+
shear_modulus (float): Shear modulus magnitude Unit: Pressure Unit
|
|
290
|
+
p_wave_modulus (float): P-wave modulus magnitude Unit: Pressure Unit
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
294
|
+
bulk_modulus = p_wave_modulus - (4 / 3) * shear_modulus
|
|
295
|
+
youngs_modulus = (shear_modulus * (3 * p_wave_modulus - 4 * shear_modulus)) / (p_wave_modulus - shear_modulus)
|
|
296
|
+
lame_parameter = p_wave_modulus - 2 * shear_modulus
|
|
297
|
+
poissons_ratio = (p_wave_modulus - 2 * shear_modulus) / (2 * p_wave_modulus - 2 * shear_modulus)
|
|
298
|
+
|
|
299
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
300
|
+
|
|
301
|
+
@staticmethod
|
|
302
|
+
def convert_from_poissons_and_p_wave(poissons_ratio: float, p_wave_modulus: float) -> ElasticProperties:
|
|
303
|
+
"""Convert Poisson's ratio and P-wave modulus to other elastic property types.
|
|
304
|
+
|
|
305
|
+
Input Unit: Poisson's ratio - unitless, P-wave modulus - pressure unit.
|
|
306
|
+
|
|
307
|
+
Args:
|
|
308
|
+
poissons_ratio (float): Poisson's ratio magnitude Unit: unitless
|
|
309
|
+
p_wave_modulus (float): P-wave modulus magnitude Unit: Pressure Unit
|
|
310
|
+
|
|
311
|
+
Returns:
|
|
312
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: consistent with input unit"""
|
|
313
|
+
bulk_modulus = (p_wave_modulus * (1 + poissons_ratio)) / (3 * (1 - poissons_ratio))
|
|
314
|
+
youngs_modulus = (p_wave_modulus * (1 + poissons_ratio) * (1 - 2 * poissons_ratio)) / (1 - poissons_ratio)
|
|
315
|
+
lame_parameter = p_wave_modulus * poissons_ratio / (1 - poissons_ratio)
|
|
316
|
+
shear_modulus = (p_wave_modulus * (1 - 2 * poissons_ratio)) / (2 * (1 - poissons_ratio))
|
|
317
|
+
|
|
318
|
+
return ElasticProperties(bulk_modulus, youngs_modulus, lame_parameter, shear_modulus, poissons_ratio, p_wave_modulus)
|
|
319
|
+
|
|
320
|
+
@staticmethod
|
|
321
|
+
def convert_dynamic_elastic_properties_from_velocity(p_wave_velocity: float, s_wave_velocity: float, density: float) -> ElasticProperties:
|
|
322
|
+
"""Convert P and S Wave Velocity and Bulk Density to all elastic property types.
|
|
323
|
+
|
|
324
|
+
Args:
|
|
325
|
+
p_wave_velocity (float): Compressional Velocity Unit: Velocity Unit m/s
|
|
326
|
+
s_wave_velocity (float): Shear Velocity Unit: Velocity Unit m/s
|
|
327
|
+
density (float): Bulk Density Unit: Density unit kg/m3
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: Pascal [Pa]"""
|
|
331
|
+
shear_modulus = density * s_wave_velocity**2
|
|
332
|
+
p_wave_modulus = density * p_wave_velocity**2
|
|
333
|
+
|
|
334
|
+
return ElasticPropertiesConverter.convert_from_shear_and_p_wave(shear_modulus, p_wave_modulus)
|
|
335
|
+
|
|
336
|
+
@staticmethod
|
|
337
|
+
def convert_dynamic_elastic_properties_from_slowness(p_wave_slowness: float, s_wave_slowness: float, density: float) -> ElasticProperties:
|
|
338
|
+
"""Convert P and S Wave Slowness and Bulk Density to all elastic property types.
|
|
339
|
+
|
|
340
|
+
Args:
|
|
341
|
+
p_wave_slowness (float): Compressional Slowness Unit: us/ft
|
|
342
|
+
s_wave_slowness (float): Shear Slowness Unit: us/ft
|
|
343
|
+
density (float): Bulk Density Unit: kg/m3
|
|
344
|
+
|
|
345
|
+
Returns:
|
|
346
|
+
ElasticProperties: Dataclass containing computed elastic properties. See `ElasticProperties` for details. Unit: Pascal [Pa]"""
|
|
347
|
+
shear_modulus = density * (304800 / s_wave_slowness) ** 2
|
|
348
|
+
p_wave_modulus = density * (304800 / p_wave_slowness) ** 2
|
|
349
|
+
|
|
350
|
+
return ElasticPropertiesConverter.convert_from_shear_and_p_wave(shear_modulus, p_wave_modulus)
|
|
351
|
+
|
|
352
|
+
@staticmethod
|
|
353
|
+
def convert_from_bulk_and_youngs_array(bulk_modulus: list[float], youngs_modulus: list[float]) -> list[ElasticProperties]:
|
|
354
|
+
"""Convert arrays of Bulk and Young's moduli to ElasticProperties entries.
|
|
355
|
+
|
|
356
|
+
Args:
|
|
357
|
+
bulk_modulus (list[float]): Bulk modulus values. Unit: Pressure Unit
|
|
358
|
+
youngs_modulus (list[float]): Young's modulus values. Unit: Pressure Unit
|
|
359
|
+
|
|
360
|
+
Returns:
|
|
361
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
362
|
+
return [
|
|
363
|
+
ElasticPropertiesConverter.convert_from_bulk_and_youngs(bm, ym)
|
|
364
|
+
for bm, ym in zip(bulk_modulus, youngs_modulus, strict=True)
|
|
365
|
+
]
|
|
366
|
+
|
|
367
|
+
@staticmethod
|
|
368
|
+
def convert_from_bulk_and_lame_array(bulk_modulus: list[float], lame_parameter: list[float]) -> list[ElasticProperties]:
|
|
369
|
+
"""Convert arrays of Bulk modulus and Lame parameter to ElasticProperties entries.
|
|
370
|
+
|
|
371
|
+
Args:
|
|
372
|
+
bulk_modulus (list[float]): Bulk modulus values. Unit: Pressure Unit
|
|
373
|
+
lame_parameter (list[float]): Lame parameter values. Unit: Pressure Unit
|
|
374
|
+
|
|
375
|
+
Returns:
|
|
376
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
377
|
+
return [
|
|
378
|
+
ElasticPropertiesConverter.convert_from_bulk_and_lame(bm, lp)
|
|
379
|
+
for bm, lp in zip(bulk_modulus, lame_parameter, strict=True)
|
|
380
|
+
]
|
|
381
|
+
|
|
382
|
+
@staticmethod
|
|
383
|
+
def convert_from_bulk_and_shear_array(bulk_modulus: list[float], shear_modulus: list[float]) -> list[ElasticProperties]:
|
|
384
|
+
"""Convert arrays of Bulk and Shear moduli to ElasticProperties entries.
|
|
385
|
+
|
|
386
|
+
Args:
|
|
387
|
+
bulk_modulus (list[float]): Bulk modulus values. Unit: Pressure Unit
|
|
388
|
+
shear_modulus (list[float]): Shear modulus values. Unit: Pressure Unit
|
|
389
|
+
|
|
390
|
+
Returns:
|
|
391
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
392
|
+
return [
|
|
393
|
+
ElasticPropertiesConverter.convert_from_bulk_and_shear(bm, sm)
|
|
394
|
+
for bm, sm in zip(bulk_modulus, shear_modulus, strict=True)
|
|
395
|
+
]
|
|
396
|
+
|
|
397
|
+
@staticmethod
|
|
398
|
+
def convert_from_bulk_and_poissons_array(bulk_modulus: list[float], poissons_ratio: list[float]) -> list[ElasticProperties]:
|
|
399
|
+
"""Convert arrays of Bulk modulus and Poisson's ratio to ElasticProperties entries.
|
|
400
|
+
|
|
401
|
+
Args:
|
|
402
|
+
bulk_modulus (list[float]): Bulk modulus values. Unit: Pressure Unit
|
|
403
|
+
poissons_ratio (list[float]): Poisson's ratio values. Unit: unitless
|
|
404
|
+
|
|
405
|
+
Returns:
|
|
406
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
407
|
+
return [
|
|
408
|
+
ElasticPropertiesConverter.convert_from_bulk_and_poissons(bm, pr)
|
|
409
|
+
for bm, pr in zip(bulk_modulus, poissons_ratio, strict=True)
|
|
410
|
+
]
|
|
411
|
+
|
|
412
|
+
@staticmethod
|
|
413
|
+
def convert_from_bulk_and_p_wave_array(bulk_modulus: list[float], p_wave_modulus: list[float]) -> list[ElasticProperties]:
|
|
414
|
+
"""Convert arrays of Bulk and P-wave moduli to ElasticProperties entries.
|
|
415
|
+
|
|
416
|
+
Args:
|
|
417
|
+
bulk_modulus (list[float]): Bulk modulus values. Unit: Pressure Unit
|
|
418
|
+
p_wave_modulus (list[float]): P-wave modulus values. Unit: Pressure Unit
|
|
419
|
+
|
|
420
|
+
Returns:
|
|
421
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
422
|
+
return [
|
|
423
|
+
ElasticPropertiesConverter.convert_from_bulk_and_p_wave(bm, pw)
|
|
424
|
+
for bm, pw in zip(bulk_modulus, p_wave_modulus, strict=True)
|
|
425
|
+
]
|
|
426
|
+
|
|
427
|
+
@staticmethod
|
|
428
|
+
def convert_from_youngs_and_lame_array(youngs_modulus: list[float], lame_parameter: list[float]) -> list[ElasticProperties]:
|
|
429
|
+
"""Convert arrays of Young's modulus and Lame parameter to ElasticProperties entries.
|
|
430
|
+
|
|
431
|
+
Args:
|
|
432
|
+
youngs_modulus (list[float]): Young's modulus values. Unit: Pressure Unit
|
|
433
|
+
lame_parameter (list[float]): Lame parameter values. Unit: Pressure Unit
|
|
434
|
+
|
|
435
|
+
Returns:
|
|
436
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
437
|
+
return [
|
|
438
|
+
ElasticPropertiesConverter.convert_from_youngs_and_lame(ym, lp)
|
|
439
|
+
for ym, lp in zip(youngs_modulus, lame_parameter, strict=True)
|
|
440
|
+
]
|
|
441
|
+
|
|
442
|
+
@staticmethod
|
|
443
|
+
def convert_from_youngs_and_shear_array(youngs_modulus: list[float], shear_modulus: list[float]) -> list[ElasticProperties]:
|
|
444
|
+
"""Convert arrays of Young's and Shear moduli to ElasticProperties entries.
|
|
445
|
+
|
|
446
|
+
Args:
|
|
447
|
+
youngs_modulus (list[float]): Young's modulus values. Unit: Pressure Unit
|
|
448
|
+
shear_modulus (list[float]): Shear modulus values. Unit: Pressure Unit
|
|
449
|
+
|
|
450
|
+
Returns:
|
|
451
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
452
|
+
return [
|
|
453
|
+
ElasticPropertiesConverter.convert_from_youngs_and_shear(ym, sm)
|
|
454
|
+
for ym, sm in zip(youngs_modulus, shear_modulus, strict=True)
|
|
455
|
+
]
|
|
456
|
+
|
|
457
|
+
@staticmethod
|
|
458
|
+
def convert_from_youngs_and_poissons_array(youngs_modulus: list[float], poissons_ratio: list[float]) -> list[ElasticProperties]:
|
|
459
|
+
"""Convert arrays of Young's modulus and Poisson's ratio to ElasticProperties entries.
|
|
460
|
+
|
|
461
|
+
Args:
|
|
462
|
+
youngs_modulus (list[float]): Young's modulus values. Unit: Pressure Unit
|
|
463
|
+
poissons_ratio (list[float]): Poisson's ratio values. Unit: unitless
|
|
464
|
+
|
|
465
|
+
Returns:
|
|
466
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
467
|
+
return [
|
|
468
|
+
ElasticPropertiesConverter.convert_from_youngs_and_poissons(ym, pr)
|
|
469
|
+
for ym, pr in zip(youngs_modulus, poissons_ratio, strict=True)
|
|
470
|
+
]
|
|
471
|
+
|
|
472
|
+
@staticmethod
|
|
473
|
+
def convert_from_youngs_and_p_wave_array(youngs_modulus: list[float], p_wave_modulus: list[float]) -> list[ElasticProperties]:
|
|
474
|
+
"""Convert arrays of Young's modulus and P-wave modulus to ElasticProperties entries.
|
|
475
|
+
|
|
476
|
+
Args:
|
|
477
|
+
youngs_modulus (list[float]): Young's modulus values. Unit: Pressure Unit
|
|
478
|
+
p_wave_modulus (list[float]): P-wave modulus values. Unit: Pressure Unit
|
|
479
|
+
|
|
480
|
+
Returns:
|
|
481
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
482
|
+
return [
|
|
483
|
+
ElasticPropertiesConverter.convert_from_youngs_and_p_wave(ym, pw)
|
|
484
|
+
for ym, pw in zip(youngs_modulus, p_wave_modulus, strict=True)
|
|
485
|
+
]
|
|
486
|
+
|
|
487
|
+
@staticmethod
|
|
488
|
+
def convert_from_lame_and_shear_array(lame_parameter: list[float], shear_modulus: list[float]) -> list[ElasticProperties]:
|
|
489
|
+
"""Convert arrays of Lame parameter and Shear modulus to ElasticProperties entries.
|
|
490
|
+
|
|
491
|
+
Args:
|
|
492
|
+
lame_parameter (list[float]): Lame parameter values. Unit: Pressure Unit
|
|
493
|
+
shear_modulus (list[float]): Shear modulus values. Unit: Pressure Unit
|
|
494
|
+
|
|
495
|
+
Returns:
|
|
496
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
497
|
+
return [
|
|
498
|
+
ElasticPropertiesConverter.convert_from_lame_and_shear(lp, sm)
|
|
499
|
+
for lp, sm in zip(lame_parameter, shear_modulus, strict=True)
|
|
500
|
+
]
|
|
501
|
+
|
|
502
|
+
@staticmethod
|
|
503
|
+
def convert_from_lame_and_poissons_array(lame_parameter: list[float], poissons_ratio: list[float]) -> list[ElasticProperties]:
|
|
504
|
+
"""Convert arrays of Lame parameter and Poisson's ratio to ElasticProperties entries.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
lame_parameter (list[float]): Lame parameter values. Unit: Pressure Unit
|
|
508
|
+
poissons_ratio (list[float]): Poisson's ratio values. Unit: unitless
|
|
509
|
+
|
|
510
|
+
Returns:
|
|
511
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
512
|
+
return [
|
|
513
|
+
ElasticPropertiesConverter.convert_from_lame_and_poissons(lp, pr)
|
|
514
|
+
for lp, pr in zip(lame_parameter, poissons_ratio, strict=True)
|
|
515
|
+
]
|
|
516
|
+
|
|
517
|
+
@staticmethod
|
|
518
|
+
def convert_from_lame_and_p_wave_array(lame_parameter: list[float], p_wave_modulus: list[float]) -> list[ElasticProperties]:
|
|
519
|
+
"""Convert arrays of Lame parameter and P-wave modulus to ElasticProperties entries.
|
|
520
|
+
|
|
521
|
+
Args:
|
|
522
|
+
lame_parameter (list[float]): Lame parameter values. Unit: Pressure Unit
|
|
523
|
+
p_wave_modulus (list[float]): P-wave modulus values. Unit: Pressure Unit
|
|
524
|
+
|
|
525
|
+
Returns:
|
|
526
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
527
|
+
return [
|
|
528
|
+
ElasticPropertiesConverter.convert_from_lame_and_p_wave(lp, pw)
|
|
529
|
+
for lp, pw in zip(lame_parameter, p_wave_modulus, strict=True)
|
|
530
|
+
]
|
|
531
|
+
|
|
532
|
+
@staticmethod
|
|
533
|
+
def convert_from_shear_and_poissons_array(shear_modulus: list[float], poissons_ratio: list[float]) -> list[ElasticProperties]:
|
|
534
|
+
"""Convert arrays of Shear modulus and Poisson's ratio to ElasticProperties entries.
|
|
535
|
+
|
|
536
|
+
Args:
|
|
537
|
+
shear_modulus (list[float]): Shear modulus values. Unit: Pressure Unit
|
|
538
|
+
poissons_ratio (list[float]): Poisson's ratio values. Unit: unitless
|
|
539
|
+
|
|
540
|
+
Returns:
|
|
541
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
542
|
+
return [
|
|
543
|
+
ElasticPropertiesConverter.convert_from_shear_and_poissons(sm, pr)
|
|
544
|
+
for sm, pr in zip(shear_modulus, poissons_ratio, strict=True)
|
|
545
|
+
]
|
|
546
|
+
|
|
547
|
+
@staticmethod
|
|
548
|
+
def convert_from_shear_and_p_wave_array(shear_modulus: list[float], p_wave_modulus: list[float]) -> list[ElasticProperties]:
|
|
549
|
+
"""Convert arrays of Shear modulus and P-wave modulus to ElasticProperties entries.
|
|
550
|
+
|
|
551
|
+
Args:
|
|
552
|
+
shear_modulus (list[float]): Shear modulus values. Unit: Pressure Unit
|
|
553
|
+
p_wave_modulus (list[float]): P-wave modulus values. Unit: Pressure Unit
|
|
554
|
+
|
|
555
|
+
Returns:
|
|
556
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
557
|
+
return [
|
|
558
|
+
ElasticPropertiesConverter.convert_from_shear_and_p_wave(sm, pw)
|
|
559
|
+
for sm, pw in zip(shear_modulus, p_wave_modulus, strict=True)
|
|
560
|
+
]
|
|
561
|
+
|
|
562
|
+
@staticmethod
|
|
563
|
+
def convert_from_poissons_and_p_wave_array(poissons_ratio: list[float], p_wave_modulus: list[float]) -> list[ElasticProperties]:
|
|
564
|
+
"""Convert arrays of Poisson's ratio and P-wave modulus to ElasticProperties entries.
|
|
565
|
+
|
|
566
|
+
Args:
|
|
567
|
+
poissons_ratio (list[float]): Poisson's ratio values. Unit: unitless
|
|
568
|
+
p_wave_modulus (list[float]): P-wave modulus values. Unit: Pressure Unit
|
|
569
|
+
|
|
570
|
+
Returns:
|
|
571
|
+
list[ElasticProperties]: Computed elastic properties for each input pair."""
|
|
572
|
+
return [
|
|
573
|
+
ElasticPropertiesConverter.convert_from_poissons_and_p_wave(pr, pw)
|
|
574
|
+
for pr, pw in zip(poissons_ratio, p_wave_modulus, strict=True)
|
|
575
|
+
]
|
|
576
|
+
|
|
577
|
+
@staticmethod
|
|
578
|
+
def convert_dynamic_elastic_properties_from_velocity_array(p_wave_velocity: list[float], s_wave_velocity: list[float], density: list[float]) -> list[ElasticProperties]:
|
|
579
|
+
"""Convert arrays of P/S wave velocity and bulk density to ElasticProperties entries.
|
|
580
|
+
|
|
581
|
+
Args:
|
|
582
|
+
p_wave_velocity (list[float]): Compressional velocity values. Unit: m/s
|
|
583
|
+
s_wave_velocity (list[float]): Shear velocity values. Unit: m/s
|
|
584
|
+
density (list[float]): Bulk density values. Unit: kg/m3
|
|
585
|
+
|
|
586
|
+
Returns:
|
|
587
|
+
list[ElasticProperties]: Computed elastic properties for each input set."""
|
|
588
|
+
return [
|
|
589
|
+
ElasticPropertiesConverter.convert_dynamic_elastic_properties_from_velocity(vp, vs, rho)
|
|
590
|
+
for vp, vs, rho in zip(p_wave_velocity, s_wave_velocity, density, strict=True)
|
|
591
|
+
]
|
|
592
|
+
|
|
593
|
+
@staticmethod
|
|
594
|
+
def convert_dynamic_elastic_properties_from_slowness_array(p_wave_slowness: list[float], s_wave_slowness: list[float], density: list[float]) -> list[ElasticProperties]:
|
|
595
|
+
"""Convert arrays of P/S wave slowness and bulk density to ElasticProperties entries.
|
|
596
|
+
|
|
597
|
+
Args:
|
|
598
|
+
p_wave_slowness (list[float]): Compressional slowness values. Unit: us/ft
|
|
599
|
+
s_wave_slowness (list[float]): Shear slowness values. Unit: us/ft
|
|
600
|
+
density (list[float]): Bulk density values. Unit: kg/m3
|
|
601
|
+
|
|
602
|
+
Returns:
|
|
603
|
+
list[ElasticProperties]: Computed elastic properties for each input set."""
|
|
604
|
+
return [
|
|
605
|
+
ElasticPropertiesConverter.convert_dynamic_elastic_properties_from_slowness(dtp, dts, rho)
|
|
606
|
+
for dtp, dts, rho in zip(p_wave_slowness, s_wave_slowness, density, strict=True)
|
|
607
|
+
]
|