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 ADDED
@@ -0,0 +1,2 @@
1
+ """GeomechPy - The geomechpy Python library aims to provide a comprehensive set of functions to build a Geomechanics workflow"""
2
+ __version__ = "0.0.2"
@@ -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
+ ]