geolysis 0.10.3__py3-none-any.whl → 0.12.0__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.
- geolysis/__init__.py +1 -1
- geolysis/bearing_capacity/abc/__init__.py +2 -2
- geolysis/bearing_capacity/abc/_cohl/_core.py +35 -11
- geolysis/bearing_capacity/abc/_cohl/bowles_abc.py +15 -46
- geolysis/bearing_capacity/abc/_cohl/meyerhof_abc.py +17 -47
- geolysis/bearing_capacity/abc/_cohl/terzaghi_abc.py +18 -67
- geolysis/bearing_capacity/ubc/__init__.py +5 -2
- geolysis/bearing_capacity/ubc/_core.py +129 -81
- geolysis/bearing_capacity/ubc/_hansen_ubc.py +37 -108
- geolysis/bearing_capacity/ubc/_terzaghi_ubc.py +47 -89
- geolysis/bearing_capacity/ubc/_vesic_ubc.py +78 -114
- geolysis/foundation.py +42 -9
- geolysis/soil_classifier.py +24 -26
- geolysis/spt.py +43 -115
- geolysis/{utils.py → utils/__init__.py} +14 -51
- geolysis/utils/math.py +57 -0
- {geolysis-0.10.3.dist-info → geolysis-0.12.0.dist-info}/METADATA +46 -38
- geolysis-0.12.0.dist-info/RECORD +23 -0
- geolysis-0.10.3.dist-info/RECORD +0 -22
- {geolysis-0.10.3.dist-info → geolysis-0.12.0.dist-info}/WHEEL +0 -0
- {geolysis-0.10.3.dist-info → geolysis-0.12.0.dist-info}/licenses/LICENSE.txt +0 -0
- {geolysis-0.10.3.dist-info → geolysis-0.12.0.dist-info}/top_level.txt +0 -0
geolysis/soil_classifier.py
CHANGED
@@ -35,8 +35,7 @@ class _Clf(tuple, enum.Enum):
|
|
35
35
|
|
36
36
|
|
37
37
|
class USCSSymbol(_Clf):
|
38
|
-
"""
|
39
|
-
Unified Soil Classification System (USCS) symbols and descriptions.
|
38
|
+
"""Unified Soil Classification System (USCS) symbols and descriptions.
|
40
39
|
|
41
40
|
Each member represents a USCS soil type, grading, or plasticity symbol.
|
42
41
|
Aliases are provided where applicable.
|
@@ -354,8 +353,7 @@ class _SizeDistribution:
|
|
354
353
|
Features obtained from the Particle Size Distribution graph.
|
355
354
|
"""
|
356
355
|
|
357
|
-
def __init__(self, d_10: float = 0.0, d_30: float = 0.0,
|
358
|
-
d_60: float = 0.0):
|
356
|
+
def __init__(self, d_10: float = 0.0, d_30: float = 0.0, d_60: float = 0.0):
|
359
357
|
self.d_10 = d_10
|
360
358
|
self.d_30 = d_30
|
361
359
|
self.d_60 = d_60
|
@@ -365,7 +363,7 @@ class _SizeDistribution:
|
|
365
363
|
|
366
364
|
@property
|
367
365
|
def coeff_of_curvature(self) -> float:
|
368
|
-
return (self.d_30
|
366
|
+
return (self.d_30**2.0) / (self.d_60 * self.d_10)
|
369
367
|
|
370
368
|
@property
|
371
369
|
def coeff_of_uniformity(self) -> float:
|
@@ -398,12 +396,12 @@ class PSD:
|
|
398
396
|
"""
|
399
397
|
|
400
398
|
def __init__(
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
399
|
+
self,
|
400
|
+
fines: float,
|
401
|
+
sand: float,
|
402
|
+
d_10: float = 0,
|
403
|
+
d_30: float = 0,
|
404
|
+
d_60: float = 0,
|
407
405
|
):
|
408
406
|
"""
|
409
407
|
:param fines: Percentage of fines in soil sample (%) i.e. The
|
@@ -650,10 +648,10 @@ class USCS:
|
|
650
648
|
"""
|
651
649
|
|
652
650
|
def __init__(
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
651
|
+
self,
|
652
|
+
atterberg_limits: AtterbergLimits,
|
653
|
+
psd: PSD,
|
654
|
+
organic=False,
|
657
655
|
):
|
658
656
|
"""
|
659
657
|
:param atterberg_limits: Atterberg limits of the soil.
|
@@ -780,9 +778,9 @@ class USCS:
|
|
780
778
|
|
781
779
|
|
782
780
|
def create_aashto_classifier(
|
783
|
-
|
784
|
-
|
785
|
-
|
781
|
+
liquid_limit: float,
|
782
|
+
plastic_limit: float,
|
783
|
+
fines: float,
|
786
784
|
) -> AASHTO:
|
787
785
|
"""A helper function that encapsulates the creation of a AASHTO
|
788
786
|
classifier.
|
@@ -807,14 +805,14 @@ def create_aashto_classifier(
|
|
807
805
|
|
808
806
|
|
809
807
|
def create_uscs_classifier(
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
808
|
+
liquid_limit: float,
|
809
|
+
plastic_limit: float,
|
810
|
+
fines: float,
|
811
|
+
sand: float,
|
812
|
+
d_10: float = 0,
|
813
|
+
d_30: float = 0,
|
814
|
+
d_60: float = 0,
|
815
|
+
organic: bool = False,
|
818
816
|
):
|
819
817
|
"""A helper function that encapsulates the creation of a USCS
|
820
818
|
classifier.
|
geolysis/spt.py
CHANGED
@@ -61,9 +61,9 @@ class SPT:
|
|
61
61
|
"""
|
62
62
|
|
63
63
|
def __init__(
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
self,
|
65
|
+
corrected_spt_n_values: Sequence[float],
|
66
|
+
method: SPTDesignMethod.WEIGHTED = "wgt",
|
67
67
|
):
|
68
68
|
"""
|
69
69
|
:param corrected_spt_n_values: Corrected SPT N-values within the
|
@@ -82,12 +82,12 @@ class SPT:
|
|
82
82
|
@corrected_spt_n_values.setter
|
83
83
|
@validate_func_args
|
84
84
|
def corrected_spt_n_values(
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
85
|
+
self,
|
86
|
+
corrected_spt_n_values: Annotated[
|
87
|
+
Sequence[float],
|
88
|
+
MustHaveLengthGreaterThan(1),
|
89
|
+
MustHaveValuesBetween(min_value=1.0, max_value=100.0),
|
90
|
+
],
|
91
91
|
) -> None:
|
92
92
|
self._corrected_spt_n_values = corrected_spt_n_values
|
93
93
|
|
@@ -115,7 +115,7 @@ class SPT:
|
|
115
115
|
sum_wgts = 0.0
|
116
116
|
|
117
117
|
for i, corr_spt_n_val in enumerate(vals, start=1):
|
118
|
-
wgt = 1 / i
|
118
|
+
wgt = 1 / i**2
|
119
119
|
sum_total += wgt * corr_spt_n_val
|
120
120
|
sum_wgts += wgt
|
121
121
|
|
@@ -220,14 +220,14 @@ class EnergyCorrection:
|
|
220
220
|
}
|
221
221
|
|
222
222
|
def __init__(
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
223
|
+
self,
|
224
|
+
recorded_spt_n_value: int,
|
225
|
+
*,
|
226
|
+
energy_percentage=0.6,
|
227
|
+
borehole_diameter=65.0,
|
228
|
+
rod_length=3.0,
|
229
|
+
hammer_type=HammerType.DONUT_1,
|
230
|
+
sampler_type=SamplerType.STANDARD,
|
231
231
|
):
|
232
232
|
"""
|
233
233
|
:param recorded_spt_n_value: Recorded SPT N-value from field.
|
@@ -254,8 +254,7 @@ class EnergyCorrection:
|
|
254
254
|
@recorded_spt_n_value.setter
|
255
255
|
@validate_func_args
|
256
256
|
def recorded_spt_n_value(
|
257
|
-
|
258
|
-
val: Annotated[int, MustBeBetween(min_value=0, max_value=100)]
|
257
|
+
self, val: Annotated[int, MustBeBetween(min_value=0, max_value=100)]
|
259
258
|
) -> None:
|
260
259
|
self._recorded_spt_value = val
|
261
260
|
|
@@ -267,8 +266,7 @@ class EnergyCorrection:
|
|
267
266
|
@energy_percentage.setter
|
268
267
|
@validate_func_args
|
269
268
|
def energy_percentage(
|
270
|
-
|
271
|
-
val: Annotated[float, MustBeBetween(min_value=0.0, max_value=1.0)]
|
269
|
+
self, val: Annotated[float, MustBeBetween(min_value=0.0, max_value=1.0)]
|
272
270
|
) -> None:
|
273
271
|
self._energy_percentage = val
|
274
272
|
|
@@ -280,8 +278,7 @@ class EnergyCorrection:
|
|
280
278
|
@borehole_diameter.setter
|
281
279
|
@validate_func_args
|
282
280
|
def borehole_diameter(
|
283
|
-
|
284
|
-
float, MustBeBetween(min_value=65.0, max_value=200.0)]
|
281
|
+
self, val: Annotated[float, MustBeBetween(min_value=65.0, max_value=200.0)]
|
285
282
|
) -> None:
|
286
283
|
self._borehole_diameter = val
|
287
284
|
|
@@ -302,8 +299,7 @@ class EnergyCorrection:
|
|
302
299
|
@hammer_type.setter
|
303
300
|
@validate_func_args
|
304
301
|
def hammer_type(
|
305
|
-
|
306
|
-
hammer_type: Annotated[HammerType, MustBeMemberOf(HammerType)]
|
302
|
+
self, hammer_type: Annotated[HammerType, MustBeMemberOf(HammerType)]
|
307
303
|
):
|
308
304
|
self._hammer_type = hammer_type
|
309
305
|
|
@@ -313,8 +309,7 @@ class EnergyCorrection:
|
|
313
309
|
|
314
310
|
@sampler_type.setter
|
315
311
|
@validate_func_args
|
316
|
-
def sampler_type(self,
|
317
|
-
val: Annotated[SamplerType, MustBeMemberOf(SamplerType)]):
|
312
|
+
def sampler_type(self, val: Annotated[SamplerType, MustBeMemberOf(SamplerType)]):
|
318
313
|
self._sampler_type = val
|
319
314
|
|
320
315
|
@property
|
@@ -362,10 +357,10 @@ class EnergyCorrection:
|
|
362
357
|
`ENERGY`: 0.6, 0.55, etc
|
363
358
|
"""
|
364
359
|
numerator = (
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
360
|
+
self.hammer_efficiency
|
361
|
+
* self.borehole_diameter_correction
|
362
|
+
* self.sampler_correction
|
363
|
+
* self.rod_length_correction
|
369
364
|
)
|
370
365
|
return numerator / self.energy_percentage
|
371
366
|
|
@@ -406,29 +401,17 @@ class OPC:
|
|
406
401
|
@std_spt_n_value.setter
|
407
402
|
@validate_func_args
|
408
403
|
def std_spt_n_value(
|
409
|
-
|
410
|
-
float, MustBeBetween(min_value=0.0, max_value=100.0)]
|
404
|
+
self, val: Annotated[float, MustBeBetween(min_value=0.0, max_value=100.0)]
|
411
405
|
):
|
412
406
|
self._std_spt_n_value = val
|
413
407
|
|
414
408
|
@round_(ndigits=1)
|
415
409
|
def corrected_spt_n_value(self) -> float:
|
416
|
-
r"""Corrected SPT N-value.
|
417
|
-
|
418
|
-
$$
|
419
|
-
(N_1)_{60} = C_N \cdot N_{60}
|
420
|
-
$$
|
421
|
-
|
422
|
-
!!! note
|
423
|
-
|
424
|
-
`60` is used in this case to represent `60%` hammer
|
425
|
-
efficiency and can be any percentage of hammer efficiency
|
426
|
-
e.g. $N_{55}$ for `55%` hammer efficiency.
|
427
|
-
"""
|
428
|
-
corrected_spt = self.correction() * self.std_spt_n_value
|
410
|
+
r"""Corrected SPT N-value."""
|
429
411
|
# Corrected SPT should not be more
|
430
412
|
# than 2 times the Standardized SPT
|
431
|
-
|
413
|
+
correction = min(self.correction(), 2.0)
|
414
|
+
return correction * self.std_spt_n_value
|
432
415
|
|
433
416
|
@abstractmethod
|
434
417
|
def correction(self) -> float:
|
@@ -447,22 +430,11 @@ class GibbsHoltzOPC(OPC):
|
|
447
430
|
|
448
431
|
@eop.setter
|
449
432
|
@validate_func_args
|
450
|
-
def eop(self, val: Annotated[
|
451
|
-
float, MustBeBetween(min_value=0.0, max_value=280.0)]):
|
433
|
+
def eop(self, val: Annotated[float, MustBeBetween(min_value=0.0, max_value=280.0)]):
|
452
434
|
self._eop = val
|
453
435
|
|
454
436
|
def correction(self) -> float:
|
455
|
-
r"""SPT Correction.
|
456
|
-
|
457
|
-
$$
|
458
|
-
C_N = \dfrac{350}{\sigma_o + 70} \, \sigma_o \le 280kN/m^2
|
459
|
-
$$
|
460
|
-
|
461
|
-
$\frac{N_c}{N_{60}}$ should lie between 0.45 and 2.0, if
|
462
|
-
$\frac{N_c}{N_{60}}$ is greater than 2.0, :math:`N_c` should be
|
463
|
-
divided by 2.0 to obtain the design value used in finding the
|
464
|
-
bearing capacity of the soil.
|
465
|
-
"""
|
437
|
+
r"""SPT Correction."""
|
466
438
|
corr = 350.0 / (self.eop + 70.0)
|
467
439
|
return corr / 2.0 if corr > 2.0 else corr
|
468
440
|
|
@@ -476,22 +448,7 @@ class BazaraaPeckOPC(OPC):
|
|
476
448
|
STD_PRESSURE: Final = 71.8
|
477
449
|
|
478
450
|
def correction(self) -> float:
|
479
|
-
r"""SPT Correction.
|
480
|
-
|
481
|
-
$$
|
482
|
-
C_N = \dfrac{4}{1 + 0.0418 \cdot \sigma_o}, \,
|
483
|
-
\sigma_o \lt 71.8kN/m^2
|
484
|
-
$$
|
485
|
-
|
486
|
-
$$
|
487
|
-
C_N = \dfrac{4}{3.25 + 0.0104 \cdot \sigma_o},
|
488
|
-
\, \sigma_o \gt 71.8kN/m^2
|
489
|
-
$$
|
490
|
-
|
491
|
-
$$
|
492
|
-
C_N = 1 \, , \, \sigma_o = 71.8kN/m^2
|
493
|
-
$$
|
494
|
-
"""
|
451
|
+
r"""SPT Correction."""
|
495
452
|
if isclose(self.eop, self.STD_PRESSURE, rel_tol=0.01):
|
496
453
|
corr = 1.0
|
497
454
|
elif self.eop < self.STD_PRESSURE:
|
@@ -517,12 +474,7 @@ class PeckOPC(OPC):
|
|
517
474
|
self._eop = val
|
518
475
|
|
519
476
|
def correction(self) -> float:
|
520
|
-
r"""SPT Correction.
|
521
|
-
|
522
|
-
$$
|
523
|
-
C_N = 0.77 \log \left(\dfrac{2000}{\sigma_o} \right)
|
524
|
-
$$
|
525
|
-
"""
|
477
|
+
r"""SPT Correction."""
|
526
478
|
return 0.77 * log10(2000.0 / self.eop)
|
527
479
|
|
528
480
|
|
@@ -532,12 +484,7 @@ class LiaoWhitmanOPC(OPC):
|
|
532
484
|
"""
|
533
485
|
|
534
486
|
def correction(self) -> float:
|
535
|
-
r"""SPT Correction.
|
536
|
-
|
537
|
-
$$
|
538
|
-
C_N = \sqrt{\dfrac{100}{\sigma_o}}
|
539
|
-
$$
|
540
|
-
"""
|
487
|
+
r"""SPT Correction."""
|
541
488
|
return sqrt(100.0 / self.eop)
|
542
489
|
|
543
490
|
|
@@ -545,12 +492,7 @@ class SkemptonOPC(OPC):
|
|
545
492
|
"""Overburden Pressure Correction according to `Skempton (1986)`."""
|
546
493
|
|
547
494
|
def correction(self) -> float:
|
548
|
-
r"""SPT Correction.
|
549
|
-
|
550
|
-
$$
|
551
|
-
C_N = \dfrac{2}{1 + 0.01044 \cdot \sigma_o}
|
552
|
-
$$
|
553
|
-
"""
|
495
|
+
r"""SPT Correction."""
|
554
496
|
return 2.0 / (1.0 + 0.01044 * self.eop)
|
555
497
|
|
556
498
|
|
@@ -580,32 +522,20 @@ class DilatancyCorrection:
|
|
580
522
|
@corr_spt_n_value.setter
|
581
523
|
@validate_func_args
|
582
524
|
def corr_spt_n_value(
|
583
|
-
|
584
|
-
float, MustBeBetween(min_value=0.0, max_value=100.0)]
|
525
|
+
self, val: Annotated[float, MustBeBetween(min_value=0.0, max_value=100.0)]
|
585
526
|
):
|
586
527
|
self._corr_spt_n_value = val
|
587
528
|
|
588
529
|
@round_(ndigits=1)
|
589
530
|
def corrected_spt_n_value(self) -> float:
|
590
|
-
r"""Corrected SPT N-value.
|
591
|
-
|
592
|
-
$$
|
593
|
-
(N_1)_{60} = 15 + \dfrac{1}{2}((N_1)_{60} - 15) \, , \,
|
594
|
-
(N_1)_{60} \gt 15
|
595
|
-
$$
|
596
|
-
|
597
|
-
$$
|
598
|
-
(N_1)_{60} = (N_1)_{60} \, , \, (N_1)_{60} \le 15
|
599
|
-
$$
|
600
|
-
"""
|
531
|
+
r"""Corrected SPT N-value."""
|
601
532
|
if self.corr_spt_n_value <= 15.0:
|
602
533
|
return self.corr_spt_n_value
|
603
534
|
return 15.0 + 0.5 * (self.corr_spt_n_value - 15.0)
|
604
535
|
|
605
536
|
|
606
537
|
class OPCType(AbstractStrEnum):
|
607
|
-
"""
|
608
|
-
Enumeration of overburden pressure correction (OPC) methods.
|
538
|
+
"""Enumeration of overburden pressure correction (OPC) methods.
|
609
539
|
|
610
540
|
Each member represents a method used to correct SPT results
|
611
541
|
for the effects of overburden pressure in geotechnical design.
|
@@ -638,18 +568,16 @@ _opctypes = {
|
|
638
568
|
|
639
569
|
@validate_func_args
|
640
570
|
def create_overburden_pressure_correction(
|
641
|
-
|
642
|
-
|
643
|
-
|
571
|
+
std_spt_n_value: float,
|
572
|
+
eop: float,
|
573
|
+
opc_type: Annotated[OPCType | str, MustBeMemberOf(OPCType)] = "gibbs",
|
644
574
|
):
|
645
575
|
"""A factory function that encapsulates the creation of overburden
|
646
576
|
pressure correction.
|
647
577
|
|
648
578
|
:param std_spt_n_value: SPT N-value standardized for field
|
649
579
|
procedures.
|
650
|
-
|
651
580
|
:param eop: Effective overburden pressure ($kPa$).
|
652
|
-
|
653
581
|
:param opc_type: Overburden Pressure Correction type to apply.
|
654
582
|
"""
|
655
583
|
opc_type = OPCType(opc_type)
|
@@ -1,31 +1,12 @@
|
|
1
1
|
import enum
|
2
2
|
import functools
|
3
|
-
import math
|
4
|
-
from math import exp, inf, isclose, log10, pi, sqrt
|
5
|
-
from statistics import fmean as mean
|
6
3
|
from typing import Callable
|
7
4
|
|
8
5
|
from func_validator import ValidationError
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
"inf",
|
14
|
-
"pi",
|
15
|
-
"deg2rad",
|
16
|
-
"rad2deg",
|
17
|
-
"tan",
|
18
|
-
"cot",
|
19
|
-
"sin",
|
20
|
-
"cos",
|
21
|
-
"arctan",
|
22
|
-
"round_",
|
23
|
-
"mean",
|
24
|
-
"exp",
|
25
|
-
"isclose",
|
26
|
-
"log10",
|
27
|
-
"sqrt",
|
28
|
-
]
|
7
|
+
from .math import *
|
8
|
+
|
9
|
+
__all__ = ["AbstractStrEnum", "ValidationError", "add_repr", "round_"]
|
29
10
|
|
30
11
|
|
31
12
|
class StrEnumMeta(enum.EnumMeta):
|
@@ -46,39 +27,21 @@ class AbstractStrEnum(enum.StrEnum, metaclass=StrEnumMeta):
|
|
46
27
|
"""
|
47
28
|
|
48
29
|
|
49
|
-
def
|
50
|
-
"""
|
51
|
-
return math.radians(x)
|
52
|
-
|
53
|
-
|
54
|
-
def rad2deg(x: float, /) -> float:
|
55
|
-
"""Convert angle x from radians to degrees."""
|
56
|
-
return math.degrees(x)
|
57
|
-
|
58
|
-
|
59
|
-
def tan(x: float, /) -> float:
|
60
|
-
"""Return the tangent of x (measured in degrees)."""
|
61
|
-
return math.tan(deg2rad(x))
|
62
|
-
|
63
|
-
|
64
|
-
def cot(x: float, /) -> float:
|
65
|
-
"""Return the cotangent of x (measured in degrees)."""
|
66
|
-
return 1 / tan(x)
|
67
|
-
|
68
|
-
|
69
|
-
def sin(x: float, /) -> float:
|
70
|
-
"""Return the sine of x (measured in degrees)."""
|
71
|
-
return math.sin(deg2rad(x))
|
30
|
+
def add_repr(cls):
|
31
|
+
"""A class decorator that adds a __repr__ method to the class."""
|
72
32
|
|
33
|
+
def __repr__(self) -> str:
|
34
|
+
inst_attrs = self.__dict__
|
35
|
+
attrs = (f"{key.strip('_')}={val}" for key, val in inst_attrs.items())
|
36
|
+
return f"{type(self).__name__}({', '.join(attrs)})"
|
73
37
|
|
74
|
-
def
|
75
|
-
|
76
|
-
return math.cos(deg2rad(x))
|
38
|
+
def __str__(self) -> str:
|
39
|
+
return repr(self)
|
77
40
|
|
41
|
+
cls.__repr__ = __repr__
|
42
|
+
cls.__str__ = __str__
|
78
43
|
|
79
|
-
|
80
|
-
"""Return the arc tangent (measured in degrees) of x."""
|
81
|
-
return rad2deg(math.atan(x))
|
44
|
+
return cls
|
82
45
|
|
83
46
|
|
84
47
|
def round_(ndigits: int) -> Callable:
|
geolysis/utils/math.py
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
import math
|
2
|
+
from math import exp, inf, isclose, log10, pi, sqrt, isinf, atan
|
3
|
+
from statistics import fmean as mean
|
4
|
+
|
5
|
+
__all__ = [
|
6
|
+
"atan",
|
7
|
+
"inf",
|
8
|
+
"isinf",
|
9
|
+
"pi",
|
10
|
+
"deg2rad",
|
11
|
+
"rad2deg",
|
12
|
+
"tandeg",
|
13
|
+
"cotdeg",
|
14
|
+
"sindeg",
|
15
|
+
"cosdeg",
|
16
|
+
"arctandeg",
|
17
|
+
"mean",
|
18
|
+
"exp",
|
19
|
+
"isclose",
|
20
|
+
"log10",
|
21
|
+
"sqrt",
|
22
|
+
]
|
23
|
+
|
24
|
+
|
25
|
+
def deg2rad(x: float, /) -> float:
|
26
|
+
"""Convert angle x from degrees to radians."""
|
27
|
+
return math.radians(x)
|
28
|
+
|
29
|
+
|
30
|
+
def rad2deg(x: float, /) -> float:
|
31
|
+
"""Convert angle x from radians to degrees."""
|
32
|
+
return math.degrees(x)
|
33
|
+
|
34
|
+
|
35
|
+
def tandeg(x: float, /) -> float:
|
36
|
+
"""Return the tangent of x (measured in degrees)."""
|
37
|
+
return math.tan(deg2rad(x))
|
38
|
+
|
39
|
+
|
40
|
+
def cotdeg(x: float, /) -> float:
|
41
|
+
"""Return the cotangent of x (measured in degrees)."""
|
42
|
+
return 1 / tandeg(x)
|
43
|
+
|
44
|
+
|
45
|
+
def sindeg(x: float, /) -> float:
|
46
|
+
"""Return the sine of x (measured in degrees)."""
|
47
|
+
return math.sin(deg2rad(x))
|
48
|
+
|
49
|
+
|
50
|
+
def cosdeg(x: float, /) -> float:
|
51
|
+
"""Return the cosine of x (measured in degrees)."""
|
52
|
+
return math.cos(deg2rad(x))
|
53
|
+
|
54
|
+
|
55
|
+
def arctandeg(x: float, /) -> float:
|
56
|
+
"""Return the arc tangent (measured in degrees) of x."""
|
57
|
+
return rad2deg(math.atan(x))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: geolysis
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.12.0
|
4
4
|
Summary: geolysis is an opensource software for geotechnical engineering analysis and modeling.
|
5
5
|
Author-email: Patrick Boateng <boatengpato.pb@gmail.com>
|
6
6
|
License: MIT License
|
@@ -57,7 +57,8 @@ The `geolysis` python package is among three other projects, `geolysis.excel`,
|
|
57
57
|
`geolysis.gui`, and `geolysis.ai`. More details about these projects are
|
58
58
|
provided [here](https://github.com/geolysis-dev).
|
59
59
|
|
60
|
-
`geolysis` has only one project dependency which
|
60
|
+
`geolysis` has only one project dependency which
|
61
|
+
is [func-validator](https://github.com/patrickboateng/func-validator/)
|
61
62
|
for validating `function` (and `method`) arguments.
|
62
63
|
|
63
64
|
The rest of this **README** provides an overview of the `geolysis` python
|
@@ -83,58 +84,64 @@ $ pip install geolysis
|
|
83
84
|
|
84
85
|
## API Reference
|
85
86
|
|
86
|
-
- [Python API](https://docs.geolysis.io/en/latest/reference/)
|
87
|
-
- [geolysis.bearing_capacity.abc](https://docs.geolysis.io/en/latest/reference/allowable_bearing_capacity/) -
|
87
|
+
- [Python API](https://docs.geolysis.io/en/latest/reference/)
|
88
|
+
- [geolysis.bearing_capacity.abc](https://docs.geolysis.io/en/latest/reference/allowable_bearing_capacity/) -
|
89
|
+
_Allowable bearing capacity
|
88
90
|
estimation_
|
89
|
-
- [geolysis.bearing_capacity.ubc](https://docs.geolysis.io/en/latest/reference/ultimate_bearing_capacity/) -
|
91
|
+
- [geolysis.bearing_capacity.ubc](https://docs.geolysis.io/en/latest/reference/ultimate_bearing_capacity/) -
|
92
|
+
_Ultimate bearing capacity
|
90
93
|
estimation_
|
91
|
-
- [geolysis.foundation](https://docs.geolysis.io/en/latest/reference/foundation/) -
|
92
|
-
|
93
|
-
- [geolysis.
|
94
|
-
|
95
|
-
|
94
|
+
- [geolysis.foundation](https://docs.geolysis.io/en/latest/reference/foundation/) -
|
95
|
+
_Foundation Representation_
|
96
|
+
- [geolysis.soil_classifier](https://docs.geolysis.io/en/latest/reference/soil_classifier/) -
|
97
|
+
_Soil classification_
|
98
|
+
- [geolysis.spt](https://docs.geolysis.io/en/latest/reference/spt/) -
|
99
|
+
_Standard Penetration Test (SPT) Analysis_
|
100
|
+
- [geolysis.utils](https://docs.geolysis.io/en/latest/reference/utils/) -
|
101
|
+
_Utilities_
|
96
102
|
|
97
103
|
## Imports
|
98
104
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
- **Ultimate Bearing Capacity (UBC)**
|
108
|
-
|
109
|
-
```python
|
110
|
-
from geolysis.bearing_capacity.ubc import create_ubc_4_all_soil_types
|
111
|
-
```
|
112
|
-
|
113
|
-
- **Foundation**
|
114
|
-
|
115
|
-
```python
|
116
|
-
from geolysis.foundation import create_foundation
|
117
|
-
```
|
105
|
+
### Bearing Capacity
|
106
|
+
|
107
|
+
- **Allowable Bearing Capacity (ABC)**
|
108
|
+
|
109
|
+
```python
|
110
|
+
from geolysis.bearing_capacity.abc import create_abc_4_cohesionless_soils
|
111
|
+
```
|
118
112
|
|
113
|
+
- **Ultimate Bearing Capacity (UBC)**
|
119
114
|
|
120
|
-
- **Soil Classification**
|
121
|
-
|
122
115
|
```python
|
123
|
-
from geolysis.
|
124
|
-
from geolysis.soil_classifier import create_aashto_classifier
|
116
|
+
from geolysis.bearing_capacity.ubc import create_ubc_4_all_soil_types
|
125
117
|
```
|
126
|
-
|
127
|
-
|
128
|
-
|
118
|
+
|
119
|
+
### Foundation
|
120
|
+
|
121
|
+
```python
|
122
|
+
from geolysis.foundation import create_foundation
|
123
|
+
```
|
124
|
+
|
125
|
+
### Soil Classification
|
126
|
+
|
127
|
+
```python
|
128
|
+
from geolysis.soil_classifier import create_uscs_classifier
|
129
|
+
from geolysis.soil_classifier import create_aashto_classifier
|
130
|
+
```
|
131
|
+
|
132
|
+
### Standard Penetration Test (SPT) Analysis
|
133
|
+
|
129
134
|
```python
|
130
135
|
from geolysis.spt import DilatancyCorrection
|
131
136
|
from geolysis.spt import EnergyCorrection
|
132
137
|
from geolysis.spt import SPT
|
133
138
|
from geolysis.spt import create_overburden_pressure_correction
|
134
139
|
```
|
135
|
-
|
140
|
+
|
136
141
|
## Project Structure
|
137
142
|
|
143
|
+
These are the main components of the project structure
|
144
|
+
|
138
145
|
.
|
139
146
|
├── .github # GitHub Actions
|
140
147
|
├── docs # Documentation files
|
@@ -171,7 +178,8 @@ Check out the full [documentation](https://docs.geolysis.io/en/latest/).
|
|
171
178
|
|
172
179
|
## Contributing
|
173
180
|
|
174
|
-
Check out
|
181
|
+
Check out
|
182
|
+
the [contribution guidelines](https://docs.geolysis.io/en/latest/dev_guide/)
|
175
183
|
|
176
184
|
## License
|
177
185
|
|