geolysis 0.2.0__py3-none-any.whl → 0.4.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.
@@ -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)