geolysis 0.4.3__py3-none-any.whl → 0.4.5__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.
@@ -0,0 +1,259 @@
1
+ """ Terzaghi ultimate bearing capacity module.
2
+
3
+ Classes
4
+ =======
5
+
6
+ .. autosummary::
7
+ :toctree: _autosummary
8
+
9
+ TerzaghiUBC4StripFooting
10
+ TerzaghiUBC4CircularFooting
11
+ TerzaghiUBC4SquareFooting
12
+ TerzaghiUBC4RectangularFooting
13
+ """
14
+ from abc import ABC
15
+
16
+ from geolysis.utils import cos, cot, deg2rad, exp, isclose, pi, round_, tan
17
+
18
+ from ._core import UltimateBearingCapacity
19
+
20
+ __all__ = ["TerzaghiUBC4StripFooting",
21
+ "TerzaghiUBC4CircularFooting",
22
+ "TerzaghiUBC4SquareFooting",
23
+ "TerzaghiUBC4RectangularFooting"]
24
+
25
+
26
+ @round_
27
+ def n_c(friction_angle: float) -> float:
28
+ if isclose(friction_angle, 0.0):
29
+ return 5.7
30
+ return cot(friction_angle) * (n_q(friction_angle) - 1.0)
31
+
32
+
33
+ @round_
34
+ def n_q(friction_angle: float) -> float:
35
+ return (exp((3.0 * pi / 2.0 - deg2rad(friction_angle))
36
+ * tan(friction_angle))
37
+ / (2.0 * (cos(45.0 + friction_angle / 2.0)) ** 2.0))
38
+
39
+
40
+ @round_
41
+ def n_gamma(friction_angle: float) -> float:
42
+ return (n_q(friction_angle) - 1.0) * tan(1.4 * friction_angle)
43
+
44
+
45
+ class TerzaghiUltimateBearingCapacity(UltimateBearingCapacity, ABC):
46
+
47
+ @property
48
+ def n_c(self) -> float:
49
+ r"""Bearing capacity factor :math:`N_c`.
50
+
51
+ :Equation:
52
+
53
+ .. math:: N_c = \cot(\phi) \cdot (N_q - 1)
54
+ """
55
+ return n_c(self.friction_angle)
56
+
57
+ @property
58
+ def n_q(self) -> float:
59
+ r"""Bearing capacity factor :math:`N_q`.
60
+
61
+ :Equation:
62
+
63
+ .. math::
64
+
65
+ N_q = \dfrac{e^{(\frac{3\pi}{2} - \phi)\tan\phi}}
66
+ {2\cos^2(45 + \frac{\phi}{2})}
67
+ """
68
+ return n_q(self.friction_angle)
69
+
70
+ @property
71
+ def n_gamma(self) -> float:
72
+ r"""Bearing capacity factor :math:`N_{\gamma}`.
73
+
74
+ :Equation:
75
+
76
+ .. math:: N_{\gamma} &= (N_q - 1) \cdot \tan(1.4\phi)
77
+ """
78
+ return n_gamma(self.friction_angle)
79
+
80
+
81
+ class TerzaghiUBC4StripFooting(TerzaghiUltimateBearingCapacity):
82
+ r"""Ultimate bearing capacity for strip footing according to
83
+ ``Terzaghi 1943``.
84
+
85
+ :Equation:
86
+
87
+ .. math:: q_u = cN_c + qN_q + 0.5 \gamma BN_{\gamma}
88
+
89
+ .. list-table::
90
+ :widths: auto
91
+ :header-rows: 1
92
+
93
+ * - Symbol
94
+ - Description
95
+ - Unit
96
+ * - :math:`q_u`
97
+ - Ultimate bearing capacity
98
+ - :math:`kPa`
99
+ * - :math:`c`
100
+ - Cohesion of soil
101
+ - :math:`kPa`
102
+ * - :math:`q`
103
+ - Overburden pressure of soil
104
+ - :math:`kPa`
105
+ * - :math:`\gamma`
106
+ - Unit weight of soil
107
+ - :math:`kN/m^3`
108
+ * - :math:`B`
109
+ - Width of foundation footing
110
+ - :math:`m`
111
+ * - :math:`N_c`, :math:`N_q`, :math:`N_{\gamma}`
112
+ - Bearing capacity factors
113
+ - —
114
+ """
115
+
116
+ @round_
117
+ def bearing_capacity(self) -> float:
118
+ """Calculates ultimate bearing capacity for strip footing."""
119
+ return (self._cohesion_term(1.0)
120
+ + self._surcharge_term()
121
+ + self._embedment_term(0.5))
122
+
123
+
124
+ class TerzaghiUBC4CircularFooting(TerzaghiUltimateBearingCapacity):
125
+ r"""Ultimate bearing capacity for circular footing according to
126
+ ``Terzaghi 1943``.
127
+
128
+ :Equation:
129
+
130
+ .. math:: q_u = 1.3cN_c + qN_q + 0.3 \gamma BN_{\gamma}
131
+
132
+ .. list-table::
133
+ :widths: auto
134
+ :header-rows: 1
135
+
136
+ * - Symbol
137
+ - Description
138
+ - Unit
139
+ * - :math:`q_u`
140
+ - Ultimate bearing capacity
141
+ - :math:`kPa`
142
+ * - :math:`c`
143
+ - Cohesion of soil
144
+ - :math:`kPa`
145
+ * - :math:`q`
146
+ - Overburden pressure of soil
147
+ - :math:`kPa`
148
+ * - :math:`\gamma`
149
+ - Unit weight of soil
150
+ - :math:`kN/m^3`
151
+ * - :math:`B`
152
+ - Width of foundation footing
153
+ - :math:`m`
154
+ * - :math:`N_c`, :math:`N_q`, :math:`N_{\gamma}`
155
+ - Bearing capacity factors
156
+ - —
157
+ """
158
+
159
+ @round_
160
+ def bearing_capacity(self) -> float:
161
+ """Calculates ultimate bearing capacity for circular footing."""
162
+ return (self._cohesion_term(1.3)
163
+ + self._surcharge_term()
164
+ + self._embedment_term(0.3))
165
+
166
+
167
+ class TerzaghiUBC4RectangularFooting(TerzaghiUltimateBearingCapacity):
168
+ r"""Ultimate bearing capacity for rectangular footing according to
169
+ ``Terzaghi 1943``.
170
+
171
+ :Equation:
172
+
173
+ .. math::
174
+
175
+ q_u = \left(1 + 0.3 \dfrac{B}{L} \right) c N_c + qN_q
176
+ + \left(1 - 0.2 \dfrac{B}{L} \right) 0.5 B \gamma N_{\gamma}
177
+
178
+ .. list-table::
179
+ :widths: auto
180
+ :header-rows: 1
181
+
182
+ * - Symbol
183
+ - Description
184
+ - Unit
185
+ * - :math:`q_u`
186
+ - Ultimate bearing capacity
187
+ - :math:`kPa`
188
+ * - :math:`c`
189
+ - Cohesion of soil
190
+ - :math:`kPa`
191
+ * - :math:`q`
192
+ - Overburden pressure of soil
193
+ - :math:`kPa`
194
+ * - :math:`\gamma`
195
+ - Unit weight of soil
196
+ - :math:`kN/m^3`
197
+ * - :math:`B`
198
+ - Width of foundation footing
199
+ - :math:`m`
200
+ * - :math:`L`
201
+ - Length of foundation footing
202
+ - :math:`m`
203
+ * - :math:`N_c`, :math:`N_q`, :math:`N_{\gamma}`
204
+ - Bearing capacity factors
205
+ - —
206
+ """
207
+
208
+ @round_
209
+ def bearing_capacity(self) -> float:
210
+ """Calculates ultimate bearing capacity for rectangular footing."""
211
+ width = self.foundation_size.width
212
+ length = self.foundation_size.length
213
+ coh_coef = 1.0 + 0.3 * (width / length)
214
+ emb_coef = (1.0 - 0.2 * (width / length)) / 2.0
215
+
216
+ return (self._cohesion_term(coh_coef)
217
+ + self._surcharge_term()
218
+ + self._embedment_term(emb_coef))
219
+
220
+
221
+ class TerzaghiUBC4SquareFooting(TerzaghiUBC4RectangularFooting):
222
+ r"""Ultimate bearing capacity for square footing according to
223
+ ``Terzaghi 1943``.
224
+
225
+ :Equation:
226
+
227
+ .. math:: q_u = 1.3cN_c + qN_q + 0.4 \gamma BN_{\gamma}
228
+
229
+ .. list-table::
230
+ :widths: auto
231
+ :header-rows: 1
232
+
233
+ * - Symbol
234
+ - Description
235
+ - Unit
236
+ * - :math:`q_u`
237
+ - Ultimate bearing capacity
238
+ - :math:`kPa`
239
+ * - :math:`c`
240
+ - Cohesion of soil
241
+ - :math:`kPa`
242
+ * - :math:`q`
243
+ - Overburden pressure of soil
244
+ - :math:`kPa`
245
+ * - :math:`\gamma`
246
+ - Unit weight of soil
247
+ - :math:`kN/m^3`
248
+ * - :math:`B`
249
+ - Width of foundation footing
250
+ - :math:`m`
251
+ * - :math:`N_c`, :math:`N_q`, :math:`N_{\gamma}`
252
+ - Bearing capacity factors
253
+ - —
254
+ """
255
+
256
+ def bearing_capacity(self):
257
+ """Calcalates ultimate bearing capacity for square footing.
258
+ """
259
+ return super().bearing_capacity()
@@ -0,0 +1,303 @@
1
+ """Vesic ultimate bearing capacity module.
2
+
3
+ Classes
4
+ =======
5
+
6
+ .. autosummary::
7
+ :toctree: _autosummary
8
+
9
+ VesicUltimateBearingCapacity
10
+ """
11
+ from geolysis.foundation import Shape
12
+ from geolysis.utils import isclose, round_, sin, tan
13
+
14
+ from . import hansen_ubc
15
+ from ._core import UltimateBearingCapacity
16
+
17
+ __all__ = ["VesicUltimateBearingCapacity"]
18
+
19
+
20
+ @round_
21
+ def n_c(friction_angle: float) -> float:
22
+ return hansen_ubc.n_c(friction_angle)
23
+
24
+
25
+ @round_
26
+ def n_q(friction_angle: float) -> float:
27
+ return hansen_ubc.n_q(friction_angle)
28
+
29
+
30
+ @round_
31
+ def n_gamma(friction_angle: float) -> float:
32
+ return 2.0 * (n_q(friction_angle) + 1.0) * tan(friction_angle)
33
+
34
+
35
+ @round_
36
+ def s_c(friction_angle: float,
37
+ f_width: float,
38
+ f_length: float,
39
+ f_shape: Shape) -> float:
40
+ _n_q = n_q(friction_angle)
41
+ _n_c = n_c(friction_angle)
42
+
43
+ if f_shape == Shape.STRIP:
44
+ return 1.0
45
+ elif f_shape == Shape.RECTANGLE:
46
+ return 1.0 + (f_width / f_length) * (_n_q / _n_c)
47
+ else: # SQUARE, CIRCLE
48
+ return 1.0 + (_n_q / _n_c)
49
+
50
+
51
+ @round_
52
+ def s_q(friction_angle: float,
53
+ f_width: float,
54
+ f_length: float,
55
+ f_shape: Shape) -> float:
56
+ if f_shape == Shape.STRIP:
57
+ return 1.0
58
+ elif f_shape == Shape.RECTANGLE:
59
+ return 1.0 + (f_width / f_length) * tan(friction_angle)
60
+ else: # SQUARE, CIRCLE
61
+ return 1.0 + tan(friction_angle)
62
+
63
+
64
+ @round_
65
+ def s_gamma(f_width: float, f_length: float, f_shape: Shape) -> float:
66
+ if f_shape == Shape.STRIP:
67
+ return 1.0
68
+ elif f_shape == Shape.RECTANGLE:
69
+ return 1.0 - 0.4 * (f_width / f_length)
70
+ else: # SQUARE, CIRCLE
71
+ return 0.6
72
+
73
+
74
+ @round_
75
+ def d_c(f_depth: float, f_width: float) -> float:
76
+ return 1.0 + 0.4 * f_depth / f_width
77
+
78
+
79
+ @round_
80
+ def d_q(friction_angle: float, f_depth: float, f_width: float) -> float:
81
+ return (1.0 + 2.0 * tan(friction_angle)
82
+ * (1.0 - sin(friction_angle)) ** 2.0
83
+ * (f_depth / f_width))
84
+
85
+
86
+ @round_
87
+ def d_gamma() -> float:
88
+ return 1.0
89
+
90
+
91
+ @round_
92
+ def i_c(load_angle: float) -> float:
93
+ return (1.0 - load_angle / 90.0) ** 2.0
94
+
95
+
96
+ @round_
97
+ def i_q(load_angle: float) -> float:
98
+ return i_c(load_angle)
99
+
100
+
101
+ @round_
102
+ def i_gamma(friction_angle: float, load_angle: float) -> float:
103
+ if isclose(friction_angle, 0.0):
104
+ return 1.0
105
+ return (1.0 - load_angle / friction_angle) ** 2.0
106
+
107
+
108
+ class VesicUltimateBearingCapacity(UltimateBearingCapacity):
109
+ r"""Ultimate bearing capacity for soils according to ``Vesic (1973)``.
110
+
111
+ :Equation:
112
+
113
+ .. math::
114
+
115
+ q_u = cN_c s_c d_c i_c + qN_q s_q d_q i_q
116
+ + 0.5 \gamma B N_{\gamma} s_{\gamma} d_{\gamma} i_{\gamma}
117
+
118
+ .. list-table::
119
+ :widths: auto
120
+ :header-rows: 1
121
+
122
+ * - Symbol
123
+ - Description
124
+ - Unit
125
+ * - :math:`q_u`
126
+ - Ultimate bearing capacity
127
+ - :math:`kPa`
128
+ * - :math:`c`
129
+ - Cohesion of soil
130
+ - :math:`kPa`
131
+ * - :math:`q`
132
+ - Overburden pressure of soil
133
+ - :math:`kPa`
134
+ * - :math:`\gamma`
135
+ - Unit weight of soil
136
+ - :math:`kN/m^3`
137
+ * - :math:`B`
138
+ - Width of foundation footing
139
+ - :math:`m`
140
+ * - :math:`N_c`, :math:`N_q`, :math:`N_{\gamma}`
141
+ - Bearing capacity factors
142
+ - —
143
+ * - :math:`s_c`, :math:`s_q`, :math:`s_{\gamma}`
144
+ - Shape factors
145
+ - —
146
+ * - :math:`d_c`, :math:`d_q`, :math:`d_{\gamma}`
147
+ - Depth factors
148
+ - —
149
+ * - :math:`i_c`, :math:`i_q`, :math:`i_{\gamma}`
150
+ - Inclination factors
151
+ - —
152
+ """
153
+
154
+ @property
155
+ def n_c(self) -> float:
156
+ r"""Bearing capacity factor :math:`N_c`.
157
+
158
+ :Equation:
159
+
160
+ .. math:: N_c = \cot(\phi) \left(N_q - 1\right)
161
+ """
162
+ return n_c(self.friction_angle)
163
+
164
+ @property
165
+ def n_q(self) -> float:
166
+ r"""Bearing capacity factor :math:`N_q`.
167
+
168
+ :Equation:
169
+
170
+ .. math:: N_q = \tan^2\left(45 + \frac{\phi}{2}\right) \cdot
171
+ e^{\pi \tan(\phi)}
172
+ """
173
+ return n_q(self.friction_angle)
174
+
175
+ @property
176
+ def n_gamma(self) -> float:
177
+ r"""Bearing capacity factor :math:`N_{\gamma}`.
178
+
179
+ :Equation:
180
+
181
+ .. math:: N_{\gamma} = 2(N_q + 1) \tan(\phi)
182
+ """
183
+ return n_gamma(self.friction_angle)
184
+
185
+ @property
186
+ def s_c(self) -> float:
187
+ r"""Shape factor :math:`S_c`.
188
+
189
+ :Equation:
190
+
191
+ .. math::
192
+
193
+ s_c &= 1.0 \rightarrow \text{Strip footing}
194
+
195
+ s_c &= 1 + \dfrac{B}{L} \cdot \dfrac{N_q}{N_c} \rightarrow
196
+ \text{Rectangular footing}
197
+
198
+ s_c &= 1 + \dfrac{N_q}{N_c} \rightarrow
199
+ \text{Square or circular footing}
200
+ """
201
+ width, length, shape = self.foundation_size.footing_params()
202
+ return s_c(self.friction_angle, width, length, shape)
203
+
204
+ @property
205
+ def s_q(self) -> float:
206
+ r"""Shape factor :math:`S_q`.
207
+
208
+ :Equation:
209
+
210
+ .. math::
211
+
212
+ s_q &= 1.0 \rightarrow \text{Strip footing}
213
+
214
+ s_q &= 1 + \dfrac{B}{L} \cdot \tan(\phi) \rightarrow
215
+ \text{Rectangular footing}
216
+
217
+ s_q &= 1 + \tan(\phi) \rightarrow \text{Square or circular footing}
218
+ """
219
+ width, length, shape = self.foundation_size.footing_params()
220
+ return s_q(self.friction_angle, width, length, shape)
221
+
222
+ @property
223
+ def s_gamma(self) -> float:
224
+ r"""Shape factor :math:`S_{\gamma}`.
225
+
226
+ :Equation:
227
+
228
+ .. math::
229
+
230
+ s_{\gamma} &= 1.0 \rightarrow \text{Strip footing}
231
+
232
+ s_{\gamma} &= 1.0 - 0.4 \dfrac{B}{L} \rightarrow
233
+ \text{Rectangular footing}
234
+
235
+ s_{\gamma} &= 0.6 \rightarrow \text{Square or circular footing}
236
+ """
237
+ width, length, shape = self.foundation_size.footing_params()
238
+ return s_gamma(width, length, shape)
239
+
240
+ @property
241
+ def d_c(self) -> float:
242
+ r"""Depth factor :math:`D_c`.
243
+
244
+ :Equation:
245
+
246
+ .. math:: d_c = 1 + 0.4 \dfrac{D_f}{B}
247
+ """
248
+ depth, width = self.foundation_size.depth, self.foundation_size.width
249
+ return d_c(depth, width)
250
+
251
+ @property
252
+ def d_q(self) -> float:
253
+ r"""Depth factor :math:`D_q`.
254
+
255
+ :Equation:
256
+
257
+ .. math::
258
+
259
+ d_q = 1 + 2 \tan(\phi) \cdot (1 - \sin(\phi))^2
260
+ \cdot \dfrac{D_f}{B}
261
+ """
262
+ depth, width = self.foundation_size.depth, self.foundation_size.width
263
+ return d_q(self.friction_angle, depth, width)
264
+
265
+ @property
266
+ def d_gamma(self) -> float:
267
+ r"""Depth factor :math:`D_{\gamma}`.
268
+
269
+ :Equation:
270
+
271
+ .. math:: d_{\gamma} = 1.0
272
+ """
273
+ return d_gamma()
274
+
275
+ @property
276
+ def i_c(self) -> float:
277
+ r"""Inclination factor :math:`I_c`.
278
+
279
+ :Equation:
280
+
281
+ .. math:: i_c = (1 - \dfrac{\alpha}{90})^2
282
+ """
283
+ return i_c(self.load_angle)
284
+
285
+ @property
286
+ def i_q(self) -> float:
287
+ r"""Inclination factor :math:`I_q`.
288
+
289
+ :Equation:
290
+
291
+ .. math:: i_q = (1 - \dfrac{\alpha}{90})^2
292
+ """
293
+ return i_q(self.load_angle)
294
+
295
+ @property
296
+ def i_gamma(self) -> float:
297
+ r"""Inclination factor :math:`I_{\gamma}`.
298
+
299
+ :Equation:
300
+
301
+ .. math:: i_{\gamma} = \left(1 - \dfrac{\alpha}{\phi} \right)^2
302
+ """
303
+ return i_gamma(self.friction_angle, self.load_angle)