geolysis 0.2.0__py3-none-any.whl → 0.3.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 +2 -10
- geolysis/core/__init__.py +9 -0
- geolysis/core/abc_4_cohl_soils.py +495 -0
- geolysis/core/constants.py +47 -0
- geolysis/core/estimators.py +549 -0
- geolysis/core/foundation.py +543 -0
- geolysis/core/soil_classifier.py +859 -0
- geolysis/core/spt.py +633 -0
- geolysis/core/utils.py +113 -0
- {geolysis-0.2.0.dist-info → geolysis-0.3.0.dist-info}/LICENSE.txt +1 -1
- geolysis-0.3.0.dist-info/METADATA +223 -0
- geolysis-0.3.0.dist-info/RECORD +14 -0
- {geolysis-0.2.0.dist-info → geolysis-0.3.0.dist-info}/WHEEL +1 -1
- geolysis/bearing_capacity/__init__.py +0 -1
- geolysis/bearing_capacity/abc.py +0 -335
- geolysis/constants.py +0 -19
- geolysis/estimators.py +0 -255
- geolysis/foundation.py +0 -176
- geolysis/soil_classifier.py +0 -658
- geolysis/spt.py +0 -424
- geolysis/utils.py +0 -106
- geolysis-0.2.0.dist-info/METADATA +0 -193
- geolysis-0.2.0.dist-info/RECORD +0 -14
- {geolysis-0.2.0.dist-info → geolysis-0.3.0.dist-info}/top_level.txt +0 -0
geolysis/bearing_capacity/abc.py
DELETED
@@ -1,335 +0,0 @@
|
|
1
|
-
from geolysis.constants import UNITS
|
2
|
-
from geolysis.foundation import FoundationSize
|
3
|
-
from geolysis.utils import FloatOrInt, round_
|
4
|
-
|
5
|
-
__all__ = ["BowlesABC1997", "MeyerhofABC1956", "TerzaghiABC1948"]
|
6
|
-
|
7
|
-
|
8
|
-
class AllowableSettlementError(ValueError):
|
9
|
-
"""
|
10
|
-
Exception raised when actual settlement exceeds allowable settlement.
|
11
|
-
"""
|
12
|
-
|
13
|
-
|
14
|
-
def _chk_settlement(
|
15
|
-
tol_settlement: FloatOrInt, max_tol_settlement: FloatOrInt
|
16
|
-
):
|
17
|
-
if tol_settlement > max_tol_settlement:
|
18
|
-
errmsg = f"Settlement: {tol_settlement} should be less than or equal \
|
19
|
-
Allowable Settlement: {max_tol_settlement}"
|
20
|
-
raise AllowableSettlementError(errmsg)
|
21
|
-
|
22
|
-
|
23
|
-
class BowlesABC1997:
|
24
|
-
"""
|
25
|
-
Allowable bearing capacity for cohesionless soils according to ``Bowles
|
26
|
-
(1997)``.
|
27
|
-
|
28
|
-
:param FloatOrInt avg_corrected_spt_val: Statistical average of corrected SPT N-value
|
29
|
-
(55% energy with overburden pressure correction) within the foundation influence
|
30
|
-
zone i.e. :math:`0.5B` to :math:`2B`.
|
31
|
-
:param FloatOrInt tol_settlement: Tolerable settlement. (mm)
|
32
|
-
:param FoundationSize foundation_size: Size of foundation.
|
33
|
-
|
34
|
-
:ivar float f_depth: Depth of footing. (m)
|
35
|
-
:ivar float f_width: Width of footing. (m)
|
36
|
-
"""
|
37
|
-
|
38
|
-
MAX_TOL_SETTLEMENT = 25.4
|
39
|
-
unit = UNITS.kilo_pascal
|
40
|
-
|
41
|
-
def __init__(
|
42
|
-
self,
|
43
|
-
avg_corrected_spt_val: FloatOrInt,
|
44
|
-
tol_settlement: FloatOrInt,
|
45
|
-
foundation_size: FoundationSize,
|
46
|
-
) -> None:
|
47
|
-
self.avg_corrected_spt_val = avg_corrected_spt_val
|
48
|
-
self.tol_settlement = tol_settlement
|
49
|
-
self.f_depth = foundation_size.depth
|
50
|
-
self.f_width = foundation_size.width
|
51
|
-
|
52
|
-
_chk_settlement(self.tol_settlement, self.MAX_TOL_SETTLEMENT)
|
53
|
-
|
54
|
-
@property
|
55
|
-
def fd(self):
|
56
|
-
r"""
|
57
|
-
Return the depth factor.
|
58
|
-
|
59
|
-
.. math::
|
60
|
-
|
61
|
-
f_d = 1 + 0.33 \cdot \frac{D_f}{B} \le 1.33
|
62
|
-
"""
|
63
|
-
return min(1 + 0.33 * self.f_depth / self.f_width, 1.33)
|
64
|
-
|
65
|
-
@round_(ndigits=2)
|
66
|
-
def abc_cohl_4_isolated_foundation(self):
|
67
|
-
r"""
|
68
|
-
Return allowable bearing capacity for isolated foundation on
|
69
|
-
cohesionless soils.
|
70
|
-
|
71
|
-
for B :math:`\le` 1.2m:
|
72
|
-
|
73
|
-
.. math::
|
74
|
-
|
75
|
-
q_a(kPa) = 19.16(N_1)_{55} f_d\left(\dfrac{S}{25.4}\right)
|
76
|
-
|
77
|
-
for B :math:`\gt` 1.2m:
|
78
|
-
|
79
|
-
.. math::
|
80
|
-
|
81
|
-
q_a(kPa) = 11.8(N_1)_{55}\left(\dfrac{3.28B + 1}{3.28B} \right)^2 f_d
|
82
|
-
\left(\dfrac{S}{25.4}\right)
|
83
|
-
"""
|
84
|
-
|
85
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
86
|
-
|
87
|
-
if self.f_width <= 1.2:
|
88
|
-
abc = (
|
89
|
-
19.16 * self.avg_corrected_spt_val * self.fd * settlement_ratio
|
90
|
-
)
|
91
|
-
|
92
|
-
else:
|
93
|
-
abc = (
|
94
|
-
11.98
|
95
|
-
* self.avg_corrected_spt_val
|
96
|
-
* ((3.28 * self.f_width + 1) / (3.28 * self.f_width)) ** 2
|
97
|
-
* self.fd
|
98
|
-
* settlement_ratio
|
99
|
-
)
|
100
|
-
|
101
|
-
return abc
|
102
|
-
|
103
|
-
@round_(ndigits=2)
|
104
|
-
def abc_cohl_4_raft_foundation(self):
|
105
|
-
r"""
|
106
|
-
Return allowable bearing capacity for raft foundation on cohesionless
|
107
|
-
soils.
|
108
|
-
|
109
|
-
.. math::
|
110
|
-
|
111
|
-
q_a(kPa) = 11.98(N_1)_{55}f_d\left(\dfrac{S}{25.4}\right)
|
112
|
-
"""
|
113
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
114
|
-
return 11.98 * self.avg_corrected_spt_val * self.fd * settlement_ratio
|
115
|
-
|
116
|
-
|
117
|
-
class MeyerhofABC1956:
|
118
|
-
"""
|
119
|
-
Allowable bearing capacity for cohesionless soils according to ``Meyerhof
|
120
|
-
(1956)``.
|
121
|
-
|
122
|
-
:param FloatOrInt avg_uncorrected_spt_val: Average uncorrected SPT N-value within the
|
123
|
-
foundation influence zone i.e. :math:`D_f` to :math:`D_f + 2B`. Only water table
|
124
|
-
correction suggested.
|
125
|
-
:param FloatOrInt tol_settlement: Tolerable settlement. (mm)
|
126
|
-
:param FoundationSize foundation_size: Size of foundation.
|
127
|
-
|
128
|
-
:var float f_depth: Depth of footing. (m)
|
129
|
-
:ivar float f_width: Width of footing. (m)
|
130
|
-
"""
|
131
|
-
|
132
|
-
MAX_TOL_SETTLEMENT = 25.4
|
133
|
-
unit = UNITS.kilo_pascal
|
134
|
-
|
135
|
-
def __init__(
|
136
|
-
self,
|
137
|
-
avg_uncorrected_spt_val: FloatOrInt,
|
138
|
-
tol_settlement: FloatOrInt,
|
139
|
-
foundation_size: FoundationSize,
|
140
|
-
) -> None:
|
141
|
-
self.avg_uncorrected_spt_val = avg_uncorrected_spt_val
|
142
|
-
self.tol_settlement = tol_settlement
|
143
|
-
self.f_depth = foundation_size.depth
|
144
|
-
self.f_width = foundation_size.width
|
145
|
-
|
146
|
-
_chk_settlement(self.tol_settlement, self.MAX_TOL_SETTLEMENT)
|
147
|
-
|
148
|
-
@property
|
149
|
-
def fd(self):
|
150
|
-
r"""
|
151
|
-
Return the depth factor.
|
152
|
-
|
153
|
-
.. math::
|
154
|
-
|
155
|
-
f_d = 1 + 0.33 \cdot \frac{D_f}{B} \le 1.33
|
156
|
-
"""
|
157
|
-
return min(1 + 0.33 * self.f_depth / self.f_width, 1.33)
|
158
|
-
|
159
|
-
@round_(ndigits=2)
|
160
|
-
def abc_cohl_4_isolated_foundation(self):
|
161
|
-
r"""
|
162
|
-
Return allowable bearing capacity for isolated foundation on
|
163
|
-
cohesionless soils.
|
164
|
-
|
165
|
-
for B :math:`\le` 1.2m:
|
166
|
-
|
167
|
-
.. math::
|
168
|
-
|
169
|
-
q_a(kPa) = 12N f_d\left(\dfrac{S}{25.4}\right)
|
170
|
-
|
171
|
-
for B :math:`\gt` 1.2m:
|
172
|
-
|
173
|
-
.. math::
|
174
|
-
|
175
|
-
q_a(kPa) = 8N\left(\dfrac{3.28B + 1}{3.28B} \right)^2 f_d\left(\dfrac{S}{25.4}\right)
|
176
|
-
"""
|
177
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
178
|
-
|
179
|
-
if self.f_width <= 1.2:
|
180
|
-
abc = (
|
181
|
-
12 * self.avg_uncorrected_spt_val * self.fd * settlement_ratio
|
182
|
-
)
|
183
|
-
|
184
|
-
else:
|
185
|
-
abc = (
|
186
|
-
8
|
187
|
-
* self.avg_uncorrected_spt_val
|
188
|
-
* ((3.28 * self.f_width + 1) / (3.28 * self.f_width)) ** 2
|
189
|
-
* self.fd
|
190
|
-
* settlement_ratio
|
191
|
-
)
|
192
|
-
|
193
|
-
return abc
|
194
|
-
|
195
|
-
@round_(ndigits=2)
|
196
|
-
def abc_cohl_4_raft_foundation(self):
|
197
|
-
r"""
|
198
|
-
Return allowable bearing capacity for raft foundation on cohesionless
|
199
|
-
soils.
|
200
|
-
|
201
|
-
.. math::
|
202
|
-
|
203
|
-
q_a(kPa) = 8 N f_d\left(\dfrac{S}{25.4}\right)
|
204
|
-
"""
|
205
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
206
|
-
return 8 * self.avg_uncorrected_spt_val * self.fd * settlement_ratio
|
207
|
-
|
208
|
-
|
209
|
-
class TerzaghiABC1948:
|
210
|
-
"""
|
211
|
-
Allowable bearing capacity for cohesionless soils according to ``Terzaghi &
|
212
|
-
Peck (1948)``.
|
213
|
-
|
214
|
-
:param FloatOrInt lowest_uncorrected_spt_val: Lowest (or average) uncorrected SPT
|
215
|
-
N-values within the foundation influence zone. i.e. :math:`D_f` to :math:`D_f + 2B`
|
216
|
-
:param FloatOrInt tol_settlement: Tolerable settlement. (mm)
|
217
|
-
:param FloatOrInt water_depth: Depth of water below ground surface. (m)
|
218
|
-
:param FoundationSize foundation_size: Size of foundation.
|
219
|
-
|
220
|
-
:var float f_depth: Depth of footing. (m)
|
221
|
-
:ivar float f_width: Width of footing. (m)
|
222
|
-
"""
|
223
|
-
|
224
|
-
MAX_TOL_SETTLEMENT = 25.4
|
225
|
-
unit = UNITS.kilo_pascal
|
226
|
-
|
227
|
-
def __init__(
|
228
|
-
self,
|
229
|
-
lowest_uncorrected_spt_val: FloatOrInt,
|
230
|
-
tol_settlement: FloatOrInt,
|
231
|
-
water_depth: FloatOrInt,
|
232
|
-
foundation_size: FoundationSize,
|
233
|
-
) -> None:
|
234
|
-
self.lowest_uncorrected_spt_val = lowest_uncorrected_spt_val
|
235
|
-
self.tol_settlement = tol_settlement
|
236
|
-
self.water_depth = water_depth
|
237
|
-
self.f_depth = foundation_size.depth
|
238
|
-
self.f_width = foundation_size.width
|
239
|
-
|
240
|
-
_chk_settlement(self.tol_settlement, self.MAX_TOL_SETTLEMENT)
|
241
|
-
|
242
|
-
@property
|
243
|
-
def fd(self):
|
244
|
-
r"""
|
245
|
-
Return the depth factor.
|
246
|
-
|
247
|
-
.. math::
|
248
|
-
|
249
|
-
f_d = 1 + 0.25 \cdot \frac{D_f}{B} \le 1.25
|
250
|
-
"""
|
251
|
-
return min(1 + 0.25 * self.f_depth / self.f_width, 1.25)
|
252
|
-
|
253
|
-
@property
|
254
|
-
def cw(self):
|
255
|
-
r"""
|
256
|
-
Return the water correction factor.
|
257
|
-
|
258
|
-
for surface footing:
|
259
|
-
|
260
|
-
.. math::
|
261
|
-
|
262
|
-
c_w = 2 - \frac{D_w}{2B} \le 2
|
263
|
-
|
264
|
-
for fully submerged footing :math:`d_w \le D_f`
|
265
|
-
|
266
|
-
.. math::
|
267
|
-
|
268
|
-
c_w = 2 - \frac{D_f}{2B} \le 2
|
269
|
-
"""
|
270
|
-
if self.water_depth <= self.f_depth:
|
271
|
-
# for fully submerged footing
|
272
|
-
_cw = 2 - self.f_depth / (2 * self.f_width)
|
273
|
-
else:
|
274
|
-
# for surface footing
|
275
|
-
_cw = 2 - self.water_depth / (2 * self.f_width)
|
276
|
-
|
277
|
-
return min(_cw, 2)
|
278
|
-
|
279
|
-
@round_(ndigits=2)
|
280
|
-
def abc_cohl_4_isolated_foundation(self):
|
281
|
-
r"""
|
282
|
-
Return allowable bearing capacity for isolated foundation on
|
283
|
-
cohesionless soils.
|
284
|
-
|
285
|
-
for B :math:`\le` 1.2m:
|
286
|
-
|
287
|
-
.. math::
|
288
|
-
|
289
|
-
q_a(kPa) = 12N \dfrac{1}{c_w f_d}\left(\dfrac{S}{25.4}\right)
|
290
|
-
|
291
|
-
for B :math:`\gt` 1.2m:
|
292
|
-
|
293
|
-
.. math::
|
294
|
-
|
295
|
-
q_a(kPa) = 8N\left(\dfrac{3.28B + 1}{3.28B} \right)^2\dfrac{1}{c_w f_d}
|
296
|
-
\left(\dfrac{S}{25.4}\right)
|
297
|
-
"""
|
298
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
299
|
-
|
300
|
-
if self.f_width <= 1.2:
|
301
|
-
abc = (
|
302
|
-
12
|
303
|
-
* self.lowest_uncorrected_spt_val
|
304
|
-
* (1 / (self.cw * self.fd))
|
305
|
-
* settlement_ratio
|
306
|
-
)
|
307
|
-
else:
|
308
|
-
abc = (
|
309
|
-
8
|
310
|
-
* self.lowest_uncorrected_spt_val
|
311
|
-
* ((3.28 * self.f_width + 1) / (3.28 * self.f_width)) ** 2
|
312
|
-
* (1 / (self.cw * self.fd))
|
313
|
-
* settlement_ratio
|
314
|
-
)
|
315
|
-
|
316
|
-
return abc
|
317
|
-
|
318
|
-
@round_(ndigits=2)
|
319
|
-
def abc_cohl_4_raft_foundation(self):
|
320
|
-
r"""
|
321
|
-
Return allowable bearing capacity for raft foundation on cohesionless
|
322
|
-
soils.
|
323
|
-
|
324
|
-
.. math::
|
325
|
-
|
326
|
-
q_a(kPa) = 8N\dfrac{1}{c_w f_d}\left(\dfrac{S}{25.4}\right)
|
327
|
-
"""
|
328
|
-
settlement_ratio = self.tol_settlement / self.MAX_TOL_SETTLEMENT
|
329
|
-
|
330
|
-
return (
|
331
|
-
8
|
332
|
-
* self.lowest_uncorrected_spt_val
|
333
|
-
* (1 / (self.cw * self.fd))
|
334
|
-
* settlement_ratio
|
335
|
-
)
|
geolysis/constants.py
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
from dataclasses import dataclass
|
2
|
-
|
3
|
-
ERROR_TOL = 0.01
|
4
|
-
|
5
|
-
|
6
|
-
@dataclass(frozen=True, slots=True)
|
7
|
-
class UNITS:
|
8
|
-
"""SI units manager for values returned by various functions.
|
9
|
-
|
10
|
-
.. note::
|
11
|
-
|
12
|
-
These values are compatible with the `pint <https://pint.readthedocs.io/en/stable/index.html>`_
|
13
|
-
library.
|
14
|
-
"""
|
15
|
-
|
16
|
-
kilo_pascal = "kPa"
|
17
|
-
kilo_newton_per_cubic_metre = "kN/m**3"
|
18
|
-
degrees = "degrees"
|
19
|
-
unitless = ""
|
geolysis/estimators.py
DELETED
@@ -1,255 +0,0 @@
|
|
1
|
-
from geolysis.constants import ERROR_TOL, UNITS
|
2
|
-
from geolysis.utils import arctan, isclose, round_
|
3
|
-
|
4
|
-
__all__ = [
|
5
|
-
"SoilUnitWeightEst",
|
6
|
-
"CompressionIndexEst",
|
7
|
-
"SoilFrictionAngleEst",
|
8
|
-
"UndrainedShearStrengthEst",
|
9
|
-
]
|
10
|
-
|
11
|
-
|
12
|
-
class EstimatorError(ValueError):
|
13
|
-
"""
|
14
|
-
ValueError for estimators.
|
15
|
-
"""
|
16
|
-
|
17
|
-
|
18
|
-
class SoilUnitWeightEst:
|
19
|
-
"""
|
20
|
-
Estimates the ``moist``, ``saturated`` and ``submerged`` unit weight of soil
|
21
|
-
sample from ``SPT N60``.
|
22
|
-
|
23
|
-
:param float spt_n_60: SPT N-value standardized for field procedures considering
|
24
|
-
60% energy.
|
25
|
-
"""
|
26
|
-
|
27
|
-
unit = UNITS.kilo_newton_per_cubic_metre
|
28
|
-
|
29
|
-
def __init__(self, spt_n_60: float):
|
30
|
-
self.spt_n_60 = spt_n_60
|
31
|
-
|
32
|
-
@property
|
33
|
-
@round_(ndigits=2)
|
34
|
-
def moist_wgt(self) -> float:
|
35
|
-
r"""
|
36
|
-
Return the moist unit weight for cohesionless soil. (:math:`kN/m^3`)
|
37
|
-
|
38
|
-
.. math::
|
39
|
-
|
40
|
-
\gamma_{moist} = 16.0 + 0.1 \cdot N_{60}
|
41
|
-
"""
|
42
|
-
return 16.0 + 0.1 * self.spt_n_60
|
43
|
-
|
44
|
-
@property
|
45
|
-
@round_(ndigits=2)
|
46
|
-
def saturated_wgt(self) -> float:
|
47
|
-
r"""
|
48
|
-
Return the saturated unit weight for cohesive soil. (:math:`kN/m^3`)
|
49
|
-
|
50
|
-
.. math::
|
51
|
-
|
52
|
-
\gamma_{sat} = 16.8 + 0.15 \cdot N_{60}
|
53
|
-
"""
|
54
|
-
return 16.8 + 0.15 * self.spt_n_60
|
55
|
-
|
56
|
-
@property
|
57
|
-
@round_(ndigits=2)
|
58
|
-
def submerged_wgt(self) -> float:
|
59
|
-
r"""
|
60
|
-
Return the submerged unit weight for cohesionless soil. (:math:`kN/m^3`)
|
61
|
-
|
62
|
-
.. math::
|
63
|
-
|
64
|
-
\gamma_{sub} = 8.8 + 0.01 \cdot N_{60}
|
65
|
-
"""
|
66
|
-
return 8.8 + 0.01 * self.spt_n_60
|
67
|
-
|
68
|
-
|
69
|
-
class CompressionIndexEst:
|
70
|
-
"""
|
71
|
-
Estimates the compression index of soil from ``liquid limit`` or ``void ratio``.
|
72
|
-
|
73
|
-
The available estimators are ``Terzaghi et al (1967)``, ``Skempton (1994)``,
|
74
|
-
and ``Hough (1957)``.
|
75
|
-
"""
|
76
|
-
|
77
|
-
unit = UNITS.unitless
|
78
|
-
|
79
|
-
@staticmethod
|
80
|
-
@round_(ndigits=3)
|
81
|
-
def terzaghi_et_al_ci_1967(liquid_limit: float) -> float:
|
82
|
-
"""
|
83
|
-
Return the compression index of soil from ``Terzaghi's`` correlation.
|
84
|
-
|
85
|
-
:param float liquid_limit: Water content beyond which soils flow under their
|
86
|
-
own weight. (%)
|
87
|
-
|
88
|
-
:return: Compression index of soil.
|
89
|
-
:rtype: float
|
90
|
-
|
91
|
-
.. math::
|
92
|
-
|
93
|
-
C_i = 0.009 (LL - 10)
|
94
|
-
"""
|
95
|
-
return 0.009 * (liquid_limit - 10.0)
|
96
|
-
|
97
|
-
@staticmethod
|
98
|
-
@round_(ndigits=3)
|
99
|
-
def skempton_ci_1994(liquid_limit: float) -> float:
|
100
|
-
"""
|
101
|
-
Return the compression index of soil from ``Skempton's`` correlation.
|
102
|
-
|
103
|
-
:param float liquid_limit: Water content beyond which soils flows under their
|
104
|
-
own weight. (%)
|
105
|
-
|
106
|
-
:return: Compression index of soil.
|
107
|
-
:rtype: float
|
108
|
-
|
109
|
-
.. math::
|
110
|
-
|
111
|
-
C_i = 0.007 (LL - 10)
|
112
|
-
"""
|
113
|
-
return 0.007 * (liquid_limit - 10.0)
|
114
|
-
|
115
|
-
@staticmethod
|
116
|
-
@round_(ndigits=3)
|
117
|
-
def hough_ci_1957(void_ratio: float) -> float:
|
118
|
-
"""
|
119
|
-
Return the compression index of soil from ``Hough's`` correlation.
|
120
|
-
|
121
|
-
:param float void_ratio: Ratio of the volume of voids to the volume of solids.
|
122
|
-
|
123
|
-
:return: Compression index of soil.
|
124
|
-
:rtype: float
|
125
|
-
|
126
|
-
.. math::
|
127
|
-
|
128
|
-
C_i = 0.29 (e_o - 0.27)
|
129
|
-
"""
|
130
|
-
return 0.29 * (void_ratio - 0.27)
|
131
|
-
|
132
|
-
|
133
|
-
class SoilFrictionAngleEst:
|
134
|
-
r"""
|
135
|
-
Estimates the internal angle of friction from ``SPT N60``.
|
136
|
-
|
137
|
-
For cohesionless soils the coefficient of internal friction (:math:`\phi`) is
|
138
|
-
determined from the minimum value between ``Wolf (1989)`` and ``Kullhawy & Mayne (1990)``.
|
139
|
-
"""
|
140
|
-
|
141
|
-
unit = UNITS.degrees
|
142
|
-
|
143
|
-
@staticmethod
|
144
|
-
@round_(ndigits=3)
|
145
|
-
def wolff_sfa_1989(spt_n_60: float) -> float:
|
146
|
-
r"""
|
147
|
-
Return the internal angle of friction from ``Wolff's`` correlation for
|
148
|
-
granular soils (degrees).
|
149
|
-
|
150
|
-
:param float spt_n_60: SPT N-value standardized for field procedures considering
|
151
|
-
60% energy.
|
152
|
-
|
153
|
-
:return: Internal angle of friction of soil. (degrees)
|
154
|
-
:rtype: float
|
155
|
-
|
156
|
-
.. math::
|
157
|
-
|
158
|
-
\phi = 27.1 + 0.3 \cdot N_{60} - 0.00054 \cdot (N_{60})^2
|
159
|
-
"""
|
160
|
-
return 27.1 + (0.3 * spt_n_60) - (0.00054 * (spt_n_60**2))
|
161
|
-
|
162
|
-
@staticmethod
|
163
|
-
@round_(ndigits=3)
|
164
|
-
def kullhawy_mayne_sfa_1990(
|
165
|
-
spt_n_60: float,
|
166
|
-
eop: float,
|
167
|
-
atm_pressure: float,
|
168
|
-
) -> float:
|
169
|
-
r"""
|
170
|
-
Return the internal angle of friction from ``Kullhawy & Mayne``
|
171
|
-
correlation for cohesionless soils.
|
172
|
-
|
173
|
-
:param float spt_n_60: SPT N-value standardized for field procedures.
|
174
|
-
:param float eop: Effective overburden pressure, should be in the same unit as
|
175
|
-
``atm_pressure``.
|
176
|
-
:param float atm_pressure: Atmospheric pressure, should be in the same unit as
|
177
|
-
``eop``.
|
178
|
-
|
179
|
-
:return: Internal angle of friction of soil. (degrees)
|
180
|
-
:rtype: float
|
181
|
-
|
182
|
-
.. math::
|
183
|
-
|
184
|
-
\phi = \left[tan^{-1}\left(\dfrac{N_{60}}{12.2 + 20.3 \cdot
|
185
|
-
\frac{\sigma_o}{P_a}}\right)\right]^{0.34}
|
186
|
-
"""
|
187
|
-
if isclose(atm_pressure, 0, rel_tol=ERROR_TOL):
|
188
|
-
err_msg = f"atm_pressure cannot be {atm_pressure}"
|
189
|
-
raise EstimatorError(err_msg)
|
190
|
-
|
191
|
-
return arctan(
|
192
|
-
(spt_n_60 / (12.2 + 20.3 * (eop / atm_pressure))) ** 0.34
|
193
|
-
)
|
194
|
-
|
195
|
-
|
196
|
-
class UndrainedShearStrengthEst:
|
197
|
-
"""
|
198
|
-
Undrained shear strength of soil estimators.
|
199
|
-
|
200
|
-
The available estimators are ``Stroud (1974)`` and ``Skempton (1957)``.
|
201
|
-
"""
|
202
|
-
|
203
|
-
unit = UNITS.kilo_pascal
|
204
|
-
|
205
|
-
@staticmethod
|
206
|
-
@round_(ndigits=3)
|
207
|
-
def stroud_uss_1974(spt_n_60: float, k=3.5) -> float:
|
208
|
-
r"""
|
209
|
-
Return the undrained shear strength using ``Stroud's`` correlation.
|
210
|
-
|
211
|
-
:param float spt_n_60: SPT N-value standardized for field procedures.
|
212
|
-
:param float k: stroud constants. defaults to 3.5
|
213
|
-
|
214
|
-
:raises EstimatorError: If ``k`` is not in the specified range.
|
215
|
-
|
216
|
-
:return: Undrained shear strength of soil. (:math:`kN/m^2`)
|
217
|
-
:rtype: float
|
218
|
-
|
219
|
-
.. math::
|
220
|
-
|
221
|
-
C_u = k \cdot N_{60}
|
222
|
-
|
223
|
-
:math:`3.5 \le k \le 6.5`
|
224
|
-
"""
|
225
|
-
if 3.5 <= k <= 6.5:
|
226
|
-
return k * spt_n_60
|
227
|
-
|
228
|
-
err_msg = f"k should be in the range 3.5 <= k <= 6.5 not {k}"
|
229
|
-
raise EstimatorError(err_msg)
|
230
|
-
|
231
|
-
@staticmethod
|
232
|
-
@round_(ndigits=3)
|
233
|
-
def skempton_uss_1957(eop: float, plasticity_index: float) -> float:
|
234
|
-
r"""
|
235
|
-
Return the undrained shear strength using ``Skempton's`` correlation.
|
236
|
-
|
237
|
-
:param float eop: Effective overburden pressure. (:math:`kN/m^2`)
|
238
|
-
:param float plasticity_index: Range of water content over which soil remains
|
239
|
-
in plastic condition.
|
240
|
-
|
241
|
-
:return: Undrained shear strength of soil. (:math:`kN/m^2`)
|
242
|
-
:rtype: float
|
243
|
-
|
244
|
-
.. math::
|
245
|
-
|
246
|
-
C_u = \sigma_o (0.11 + 0.0037 \cdot PI)
|
247
|
-
|
248
|
-
.. note::
|
249
|
-
|
250
|
-
The value of the ratio :math:`\frac{C_u}{\sigma_o}` determined in a
|
251
|
-
consolidated-undrained test on undisturbed samples is generally greater
|
252
|
-
than actual value because of anisotropic consolidation in the field.
|
253
|
-
The actual value is best determined by ``in-situ shear vane test``.
|
254
|
-
"""
|
255
|
-
return eop * (0.11 + 0.0037 * plasticity_index)
|