geolysis 0.9.0__py3-none-any.whl → 0.10.1__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.
Files changed (32) hide show
  1. geolysis/__init__.py +3 -3
  2. geolysis/bearing_capacity/abc/__init__.py +21 -0
  3. geolysis/bearing_capacity/abc/_cohl/__init__.py +109 -0
  4. geolysis/bearing_capacity/abc/{cohl → _cohl}/_core.py +25 -8
  5. geolysis/bearing_capacity/abc/_cohl/bowles_abc.py +103 -0
  6. geolysis/bearing_capacity/abc/_cohl/meyerhof_abc.py +100 -0
  7. geolysis/bearing_capacity/abc/_cohl/terzaghi_abc.py +148 -0
  8. geolysis/bearing_capacity/ubc/__init__.py +107 -128
  9. geolysis/bearing_capacity/ubc/_core.py +82 -52
  10. geolysis/bearing_capacity/ubc/_hansen_ubc.py +271 -0
  11. geolysis/bearing_capacity/ubc/_terzaghi_ubc.py +178 -0
  12. geolysis/bearing_capacity/ubc/_vesic_ubc.py +253 -0
  13. geolysis/foundation.py +146 -136
  14. geolysis/soil_classifier.py +386 -290
  15. geolysis/spt.py +323 -257
  16. geolysis/{utils/__init__.py → utils.py} +44 -33
  17. geolysis-0.10.1.dist-info/METADATA +182 -0
  18. geolysis-0.10.1.dist-info/RECORD +22 -0
  19. {geolysis-0.9.0.dist-info → geolysis-0.10.1.dist-info}/WHEEL +1 -1
  20. geolysis/bearing_capacity/abc/cohl/__init__.py +0 -137
  21. geolysis/bearing_capacity/abc/cohl/bowles_abc.py +0 -96
  22. geolysis/bearing_capacity/abc/cohl/meyerhof_abc.py +0 -96
  23. geolysis/bearing_capacity/abc/cohl/terzaghi_abc.py +0 -131
  24. geolysis/bearing_capacity/ubc/hansen_ubc.py +0 -287
  25. geolysis/bearing_capacity/ubc/terzaghi_ubc.py +0 -246
  26. geolysis/bearing_capacity/ubc/vesic_ubc.py +0 -293
  27. geolysis/utils/exceptions.py +0 -65
  28. geolysis/utils/validators.py +0 -119
  29. geolysis-0.9.0.dist-info/METADATA +0 -206
  30. geolysis-0.9.0.dist-info/RECORD +0 -24
  31. {geolysis-0.9.0.dist-info → geolysis-0.10.1.dist-info}/licenses/LICENSE.txt +0 -0
  32. {geolysis-0.9.0.dist-info → geolysis-0.10.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,271 @@
1
+ from geolysis.foundation import Shape
2
+ from geolysis.utils import cos, cot, exp, isclose, pi, round_, sin, tan
3
+
4
+ from ._core import UltimateBearingCapacity
5
+
6
+ __all__ = ["HansenUltimateBearingCapacity"]
7
+
8
+
9
+ class HansenBearingCapacityFactors:
10
+
11
+ @staticmethod
12
+ @round_(ndigits=2)
13
+ def n_c(friction_angle: float) -> float:
14
+ if isclose(friction_angle, 0.0):
15
+ return 5.14
16
+ return cot(friction_angle) * (
17
+ HansenBearingCapacityFactors.n_q(friction_angle) - 1.0
18
+ )
19
+
20
+ @staticmethod
21
+ @round_(ndigits=2)
22
+ def n_q(friction_angle: float) -> float:
23
+ return tan(45.0 + friction_angle / 2.0) ** 2.0 * exp(pi * tan(friction_angle))
24
+
25
+ @staticmethod
26
+ @round_(ndigits=2)
27
+ def n_gamma(friction_angle: float) -> float:
28
+ return (
29
+ 1.8
30
+ * (HansenBearingCapacityFactors.n_q(friction_angle) - 1.0)
31
+ * tan(friction_angle)
32
+ )
33
+
34
+
35
+ class HansenShapeFactors:
36
+
37
+ @staticmethod
38
+ @round_(ndigits=2)
39
+ def s_c(f_width: float, f_length: float, f_shape: Shape) -> float:
40
+ if f_shape == Shape.STRIP:
41
+ return 1.0
42
+ elif f_shape == Shape.RECTANGLE:
43
+ return 1.0 + 0.2 * f_width / f_length
44
+ else: # SQUARE & CIRCLE
45
+ return 1.3
46
+
47
+ @staticmethod
48
+ @round_(ndigits=2)
49
+ def s_q(f_width: float, f_length: float, f_shape: Shape) -> float:
50
+ if f_shape == Shape.STRIP:
51
+ return 1.0
52
+ elif f_shape == Shape.RECTANGLE:
53
+ return 1.0 + 0.2 * f_width / f_length
54
+ else: # SQUARE & CIRCLE
55
+ return 1.2
56
+
57
+ @staticmethod
58
+ @round_(ndigits=2)
59
+ def s_gamma(f_width: float, f_length: float, f_shape: Shape) -> float:
60
+ if f_shape == Shape.STRIP:
61
+ return 1.0
62
+ elif f_shape == Shape.RECTANGLE:
63
+ return 1.0 - 0.4 * f_width / f_length
64
+ elif f_shape == Shape.SQUARE:
65
+ return 0.8
66
+ else: # CIRCLE
67
+ return 0.6
68
+
69
+
70
+ class HansenDepthFactors:
71
+
72
+ @staticmethod
73
+ @round_(ndigits=2)
74
+ def d_c(f_depth: float, f_width: float) -> float:
75
+ return 1.0 + 0.35 * f_depth / f_width
76
+
77
+ @staticmethod
78
+ @round_(ndigits=2)
79
+ def d_q(f_depth: float, f_width: float) -> float:
80
+ return HansenDepthFactors.d_c(f_depth, f_width)
81
+
82
+ @staticmethod
83
+ @round_(ndigits=2)
84
+ def d_gamma() -> float:
85
+ return 1.0
86
+
87
+
88
+ class HansenInclinationFactors:
89
+
90
+ @staticmethod
91
+ @round_(ndigits=2)
92
+ def i_c(
93
+ cohesion: float,
94
+ load_angle: float,
95
+ f_width: float,
96
+ f_length: float,
97
+ ) -> float:
98
+ return 1.0 - sin(load_angle) / (2.0 * cohesion * f_width * f_length)
99
+
100
+ @staticmethod
101
+ @round_(ndigits=2)
102
+ def i_q(load_angle: float) -> float:
103
+ return 1.0 - (1.5 * sin(load_angle)) / cos(load_angle)
104
+
105
+ @staticmethod
106
+ @round_(ndigits=2)
107
+ def i_gamma(load_angle: float) -> float:
108
+ return HansenInclinationFactors.i_q(load_angle) ** 2.0
109
+
110
+
111
+ class HansenUltimateBearingCapacity(UltimateBearingCapacity):
112
+ r"""Ultimate bearing capacity for soils according to `Hansen (1961)`."""
113
+
114
+ @property
115
+ def n_c(self) -> float:
116
+ r"""Bearing capacity factor $N_c$.
117
+
118
+ $$
119
+ N_c = \cot(\phi) \left(N_q - 1\right)
120
+ $$
121
+ """
122
+ return HansenBearingCapacityFactors.n_c(self.friction_angle)
123
+
124
+ @property
125
+ def n_q(self) -> float:
126
+ r"""Bearing capacity factor $N_q$.
127
+
128
+ $$
129
+ N_q = \tan^2\left(45 + \frac{\phi}{2}\right) \cdot e^{\pi \tan(\phi)}
130
+ $$
131
+ """
132
+ return HansenBearingCapacityFactors.n_q(self.friction_angle)
133
+
134
+ @property
135
+ def n_gamma(self) -> float:
136
+ r"""Bearing capacity factor $N_{\gamma}$.
137
+
138
+ $$
139
+ N_{\gamma} = 1.8 \left(N_q - 1\right) \tan(\phi)
140
+ $$
141
+ """
142
+ return HansenBearingCapacityFactors.n_gamma(self.friction_angle)
143
+
144
+ @property
145
+ def s_c(self) -> float:
146
+ r"""Shape factor $S_c$.
147
+
148
+ $$
149
+ s_c = 1.0 \rightarrow \text{Strip footing}
150
+ $$
151
+
152
+ $$
153
+ s_c = 1.0 + 0.2 \frac{B}{L} \rightarrow \text{Rectangular footing}
154
+ $$
155
+
156
+ $$
157
+ s_c = 1.3 \rightarrow \text{Square or circular footing}
158
+ $$
159
+ """
160
+ width, length, shape = self.foundation_size.footing_params()
161
+ return HansenShapeFactors.s_c(width, length, shape)
162
+
163
+ @property
164
+ def s_q(self) -> float:
165
+ r"""Shape factor $S_q$.
166
+
167
+ $$
168
+ s_q = 1.0 \rightarrow \text{Strip footing}
169
+ $$
170
+
171
+ $$
172
+ s_q = 1.0 + 0.2 \cdot \frac{B}{L} \rightarrow \text{Rectangular footing}
173
+ $$
174
+
175
+ $$
176
+ s_q = 1.2 \rightarrow \text{Square or circular footing}
177
+ $$
178
+ """
179
+ width, length, shape = self.foundation_size.footing_params()
180
+ return HansenShapeFactors.s_q(width, length, shape)
181
+
182
+ @property
183
+ def s_gamma(self) -> float:
184
+ r"""Shape factor $S_{\gamma}$.
185
+
186
+ $$
187
+ s_{\gamma} = 1.0 \rightarrow \text{Strip footing}
188
+ $$
189
+
190
+ $$
191
+ s_{\gamma} = 1.0 - 0.4 \frac{B}{L} \rightarrow
192
+ \text{Rectangular footing}
193
+ $$
194
+
195
+ $$
196
+ s_{\gamma} = 0.8 \rightarrow \text{Square footing}
197
+ $$
198
+
199
+ $$
200
+ s_{\gamma} = 0.6 \rightarrow \text{Circular footing}
201
+ $$
202
+ """
203
+ width, length, shape = self.foundation_size.footing_params()
204
+ return HansenShapeFactors.s_gamma(width, length, shape)
205
+
206
+ @property
207
+ def d_c(self) -> float:
208
+ r"""Depth factor $D_c$.
209
+
210
+ $$
211
+ d_c = 1.0 + 0.35 \cdot \frac{D_f}{B}
212
+ $$
213
+ """
214
+ depth = self.foundation_size.depth
215
+ width = self.foundation_size.width
216
+ return HansenDepthFactors.d_c(depth, width)
217
+
218
+ @property
219
+ def d_q(self) -> float:
220
+ r"""Depth factor $D_q$.
221
+
222
+ $$
223
+ d_q = 1.0 + 0.35 \cdot \frac{D_f}{B}
224
+ $$
225
+ """
226
+ depth = self.foundation_size.depth
227
+ width = self.foundation_size.width
228
+ return HansenDepthFactors.d_q(depth, width)
229
+
230
+ @property
231
+ def d_gamma(self) -> float:
232
+ r"""Depth factor $D_{\gamma}$.
233
+
234
+ $$
235
+ d_{\gamma} = 1.0
236
+ $$
237
+ """
238
+ return HansenDepthFactors.d_gamma()
239
+
240
+ @property
241
+ def i_c(self) -> float:
242
+ r"""Inclination factor $I_c$.
243
+
244
+ $$
245
+ I_c = 1 - \frac{\sin(\alpha)}{2cBL}
246
+ $$
247
+ """
248
+ width, length = self.foundation_size.width, self.foundation_size.length
249
+ return HansenInclinationFactors.i_c(
250
+ self.cohesion, self.load_angle, width, length
251
+ )
252
+
253
+ @property
254
+ def i_q(self) -> float:
255
+ r"""Inclination factor $I_q$.
256
+
257
+ $$
258
+ I_q = 1 - \frac{1.5 \sin(\alpha)}{\cos(\alpha)}
259
+ $$
260
+ """
261
+ return HansenInclinationFactors.i_q(self.load_angle)
262
+
263
+ @property
264
+ def i_gamma(self) -> float:
265
+ r"""Inclination factor $I_{\gamma}$.
266
+
267
+ $$
268
+ I_{\gamma} = I_q^2
269
+ $$
270
+ """
271
+ return HansenInclinationFactors.i_gamma(self.load_angle)
@@ -0,0 +1,178 @@
1
+ from abc import ABC
2
+
3
+ from geolysis.utils import cos, cot, deg2rad, exp, isclose, pi, round_, tan
4
+ from ._core import UltimateBearingCapacity
5
+
6
+ __all__ = [
7
+ "TerzaghiUBC4StripFooting",
8
+ "TerzaghiUBC4CircularFooting",
9
+ "TerzaghiUBC4SquareFooting",
10
+ "TerzaghiUBC4RectangularFooting",
11
+ ]
12
+
13
+ from geolysis.foundation import Foundation
14
+
15
+
16
+ class TerzaghiBearingCapacityFactors:
17
+
18
+ @staticmethod
19
+ @round_(ndigits=2)
20
+ def n_c(friction_angle: float) -> float:
21
+ if isclose(friction_angle, 0.0):
22
+ return 5.7
23
+ return cot(friction_angle) * (
24
+ TerzaghiBearingCapacityFactors.n_q(friction_angle) - 1.0
25
+ )
26
+
27
+ @staticmethod
28
+ @round_(ndigits=2)
29
+ def n_q(friction_angle: float) -> float:
30
+ return exp((3.0 * pi / 2.0 - deg2rad(friction_angle)) * tan(
31
+ friction_angle)) / (
32
+ 2.0 * (cos(45.0 + friction_angle / 2.0)) ** 2.0
33
+ )
34
+
35
+ @staticmethod
36
+ @round_(ndigits=2)
37
+ def n_gamma(friction_angle: float) -> float:
38
+ return (TerzaghiBearingCapacityFactors.n_q(
39
+ friction_angle) - 1.0) * tan(
40
+ 1.4 * friction_angle
41
+ )
42
+
43
+
44
+ class TerzaghiUltimateBearingCapacity(UltimateBearingCapacity, ABC):
45
+
46
+ def __init__(
47
+ self,
48
+ friction_angle: float,
49
+ cohesion: float,
50
+ moist_unit_wgt: float,
51
+ foundation_size: Foundation,
52
+ apply_local_shear: bool = False,
53
+ ) -> None:
54
+ r"""
55
+
56
+ - $q_u$ (kPa): Ultimate bearing capacity
57
+ - $c$ (kPa): Cohesion of soil
58
+ - $q$ (kPa): Overburden pressure of soil
59
+ - $\gamma$ (kN/m³): Unit weight of soil
60
+ - $B$ (m): Width of foundation footing
61
+ - $L$ (m): Length of foundation footing
62
+ - $N_c$, $N_q$, $N_{\gamma}$: Bearing capacity factors
63
+
64
+
65
+ :param friction_angle: Internal angle of friction for general
66
+ shear failure (degrees).
67
+ :param cohesion: Cohesion of soil ($kPa$).
68
+ :param moist_unit_wgt: Moist unit weight of soil ($kN/m^3$).
69
+ :param foundation_size: Size of the foundation.
70
+ :param apply_local_shear: Indicate whether bearing capacity
71
+ failure is general shear or local
72
+ shear failure.
73
+ """
74
+ super().__init__(
75
+ friction_angle=friction_angle,
76
+ cohesion=cohesion,
77
+ moist_unit_wgt=moist_unit_wgt,
78
+ foundation_size=foundation_size,
79
+ apply_local_shear=apply_local_shear,
80
+ )
81
+
82
+ @property
83
+ def n_c(self) -> float:
84
+ r"""Bearing capacity factor $N_c$.
85
+
86
+ $$N_c = \cot(\phi) \cdot (N_q - 1)$$
87
+ """
88
+ return TerzaghiBearingCapacityFactors.n_c(self.friction_angle)
89
+
90
+ @property
91
+ def n_q(self) -> float:
92
+ r"""Bearing capacity factor $N_q$.
93
+
94
+ $$
95
+ N_q = \dfrac{e^{(\frac{3\pi}{2} - \phi)\tan\phi}}
96
+ {2\cos^2(45 + \frac{\phi}{2})}
97
+ $$
98
+ """
99
+ return TerzaghiBearingCapacityFactors.n_q(self.friction_angle)
100
+
101
+ @property
102
+ def n_gamma(self) -> float:
103
+ r"""Bearing capacity factor $N_{\gamma}$.
104
+
105
+ $$N_{\gamma} = (N_q - 1) \cdot \tan(1.4\phi)$$
106
+ """
107
+ return TerzaghiBearingCapacityFactors.n_gamma(self.friction_angle)
108
+
109
+
110
+ class TerzaghiUBC4StripFooting(TerzaghiUltimateBearingCapacity):
111
+ r"""Ultimate bearing capacity for strip footing according to
112
+ `Terzaghi 1943`.
113
+
114
+ $$q_u = cN_c + qN_q + 0.5 \gamma BN_{\gamma}$$
115
+ """
116
+
117
+ @round_(ndigits=2)
118
+ def bearing_capacity(self) -> float:
119
+ """Calculates ultimate bearing capacity for strip footing."""
120
+ return (
121
+ self._cohesion_term(1.0)
122
+ + self._surcharge_term()
123
+ + self._embedment_term(0.5)
124
+ )
125
+
126
+
127
+ class TerzaghiUBC4CircularFooting(TerzaghiUltimateBearingCapacity):
128
+ r"""Ultimate bearing capacity for circular footing according to
129
+ `Terzaghi 1943`.
130
+
131
+ $$q_u = 1.3cN_c + qN_q + 0.3 \gamma BN_{\gamma}$$
132
+ """
133
+
134
+ @round_(ndigits=2)
135
+ def bearing_capacity(self) -> float:
136
+ """Calculates ultimate bearing capacity for circular footing."""
137
+ return (
138
+ self._cohesion_term(1.3)
139
+ + self._surcharge_term()
140
+ + self._embedment_term(0.3)
141
+ )
142
+
143
+
144
+ class TerzaghiUBC4RectangularFooting(TerzaghiUltimateBearingCapacity):
145
+ r"""Ultimate bearing capacity for rectangular footing according to
146
+ `Terzaghi 1943`.
147
+
148
+ $$
149
+ q_u = \left(1 + 0.3 \dfrac{B}{L} \right) c N_c + qN_q
150
+ + \left(1 - 0.2 \dfrac{B}{L} \right) 0.5 B \gamma N_{\gamma}
151
+ $$
152
+ """
153
+
154
+ @round_(ndigits=2)
155
+ def bearing_capacity(self) -> float:
156
+ """Calculates ultimate bearing capacity for rectangular footing."""
157
+ width = self.foundation_size.width
158
+ length = self.foundation_size.length
159
+ coh_coef = 1.0 + 0.3 * (width / length)
160
+ emb_coef = (1.0 - 0.2 * (width / length)) / 2.0
161
+
162
+ return (
163
+ self._cohesion_term(coh_coef)
164
+ + self._surcharge_term()
165
+ + self._embedment_term(emb_coef)
166
+ )
167
+
168
+
169
+ class TerzaghiUBC4SquareFooting(TerzaghiUBC4RectangularFooting):
170
+ r"""Ultimate bearing capacity for square footing according to
171
+ `Terzaghi 1943``.
172
+
173
+ $$q_u = 1.3cN_c + qN_q + 0.4 \gamma BN_{\gamma}$$
174
+ """
175
+
176
+ def bearing_capacity(self):
177
+ """Calcalates ultimate bearing capacity for square footing."""
178
+ return super().bearing_capacity()
@@ -0,0 +1,253 @@
1
+ from geolysis.foundation import Shape
2
+ from geolysis.utils import isclose, round_, sin, tan
3
+ from ._core import UltimateBearingCapacity
4
+ from ._hansen_ubc import HansenBearingCapacityFactors
5
+
6
+ __all__ = ["VesicUltimateBearingCapacity"]
7
+
8
+
9
+ class VesicBearingCapacityFactors:
10
+
11
+ @staticmethod
12
+ @round_(ndigits=2)
13
+ def n_c(friction_angle: float) -> float:
14
+ return HansenBearingCapacityFactors.n_c(friction_angle)
15
+
16
+ @staticmethod
17
+ @round_(ndigits=2)
18
+ def n_q(friction_angle: float) -> float:
19
+ return HansenBearingCapacityFactors.n_q(friction_angle)
20
+
21
+ @staticmethod
22
+ @round_(ndigits=2)
23
+ def n_gamma(friction_angle: float) -> float:
24
+ return (
25
+ 2.0
26
+ * (VesicBearingCapacityFactors.n_q(friction_angle) + 1.0)
27
+ * tan(friction_angle)
28
+ )
29
+
30
+
31
+ class VesicShapeFactors:
32
+ @staticmethod
33
+ @round_(ndigits=2)
34
+ def s_c(
35
+ friction_angle: float,
36
+ f_width: float,
37
+ f_length: float,
38
+ f_shape: Shape,
39
+ ) -> float:
40
+ _n_q = VesicBearingCapacityFactors.n_q(friction_angle)
41
+ _n_c = VesicBearingCapacityFactors.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
+ @staticmethod
51
+ @round_(ndigits=2)
52
+ def s_q(
53
+ friction_angle: float,
54
+ f_width: float,
55
+ f_length: float,
56
+ f_shape: Shape,
57
+ ) -> float:
58
+ if f_shape == Shape.STRIP:
59
+ return 1.0
60
+ elif f_shape == Shape.RECTANGLE:
61
+ return 1.0 + (f_width / f_length) * tan(friction_angle)
62
+ else: # SQUARE, CIRCLE
63
+ return 1.0 + tan(friction_angle)
64
+
65
+ @staticmethod
66
+ @round_(ndigits=2)
67
+ def s_gamma(f_width: float, f_length: float, f_shape: Shape) -> float:
68
+ if f_shape == Shape.STRIP:
69
+ return 1.0
70
+ elif f_shape == Shape.RECTANGLE:
71
+ return 1.0 - 0.4 * (f_width / f_length)
72
+ else: # SQUARE, CIRCLE
73
+ return 0.6
74
+
75
+
76
+ class VesicDepthFactors:
77
+
78
+ @staticmethod
79
+ @round_(ndigits=2)
80
+ def d_c(f_depth: float, f_width: float) -> float:
81
+ return 1.0 + 0.4 * f_depth / f_width
82
+
83
+ @staticmethod
84
+ @round_(ndigits=2)
85
+ def d_q(friction_angle: float, f_depth: float, f_width: float) -> float:
86
+ return 1.0 + 2.0 * tan(friction_angle) * (1.0 - sin(friction_angle)) ** 2.0 * (
87
+ f_depth / f_width
88
+ )
89
+
90
+ @staticmethod
91
+ @round_(ndigits=2)
92
+ def d_gamma() -> float:
93
+ return 1.0
94
+
95
+
96
+ class VesicInclinationFactors:
97
+
98
+ @staticmethod
99
+ @round_(ndigits=2)
100
+ def i_c(load_angle: float) -> float:
101
+ return (1.0 - load_angle / 90.0) ** 2.0
102
+
103
+ @staticmethod
104
+ @round_(ndigits=2)
105
+ def i_q(load_angle: float) -> float:
106
+ return VesicInclinationFactors.i_c(load_angle)
107
+
108
+ @staticmethod
109
+ @round_(ndigits=2)
110
+ def i_gamma(friction_angle: float, load_angle: float) -> float:
111
+ if isclose(friction_angle, 0.0):
112
+ return 1.0
113
+ return (1.0 - load_angle / friction_angle) ** 2.0
114
+
115
+
116
+ class VesicUltimateBearingCapacity(UltimateBearingCapacity):
117
+ """Ultimate bearing capacity for soils according to `Vesic (1973)`."""
118
+
119
+ @property
120
+ def n_c(self) -> float:
121
+ r"""Bearing capacity factor $N_c$.
122
+
123
+ $$N_c = \cot(\phi) \left(N_q - 1\right)$$
124
+ """
125
+ return VesicBearingCapacityFactors.n_c(self.friction_angle)
126
+
127
+ @property
128
+ def n_q(self) -> float:
129
+ r"""Bearing capacity factor $N_q$.
130
+
131
+ $$
132
+ N_q = \tan^2\left(45 + \frac{\phi}{2}\right) \cdot
133
+ e^{\pi \tan(\phi)}
134
+ $$
135
+ """
136
+ return VesicBearingCapacityFactors.n_q(self.friction_angle)
137
+
138
+ @property
139
+ def n_gamma(self) -> float:
140
+ r"""Bearing capacity factor $N_{\gamma}$.
141
+
142
+ $$N_{\gamma} = 2(N_q + 1) \tan(\phi)$$
143
+ """
144
+ return VesicBearingCapacityFactors.n_gamma(self.friction_angle)
145
+
146
+ @property
147
+ def s_c(self) -> float:
148
+ r"""Shape factor $S_c$.
149
+
150
+ $$s_c = 1.0 \rightarrow \text{Strip footing}$$
151
+
152
+ $$
153
+ s_c = 1 + \dfrac{B}{L} \cdot \dfrac{N_q}{N_c} \rightarrow
154
+ \text{Rectangular footing}
155
+ $$
156
+
157
+ $$
158
+ s_c &= 1 + \dfrac{N_q}{N_c} \rightarrow
159
+ \text{Square or circular footing}
160
+ $$
161
+ """
162
+ width, length, shape = self.foundation_size.footing_params()
163
+ return VesicShapeFactors.s_c(self.friction_angle, width, length, shape)
164
+
165
+ @property
166
+ def s_q(self) -> float:
167
+ r"""Shape factor $S_q$.
168
+
169
+
170
+ $$s_q = 1.0 \rightarrow \text{Strip footing}$$
171
+
172
+ $$
173
+ s_q = 1 + \dfrac{B}{L} \cdot \tan(\phi) \rightarrow
174
+ \text{Rectangular footing}
175
+ $$
176
+
177
+ $$
178
+ s_q = 1 + \tan(\phi) \rightarrow \text{Square or circular footing}
179
+ $$
180
+ """
181
+ width, length, shape = self.foundation_size.footing_params()
182
+ return VesicShapeFactors.s_q(self.friction_angle, width, length, shape)
183
+
184
+ @property
185
+ def s_gamma(self) -> float:
186
+ r"""Shape factor $S_{\gamma}$.
187
+
188
+ $$s_{\gamma} = 1.0 \rightarrow \text{Strip footing}$$
189
+
190
+ $$
191
+ s_{\gamma} = 1.0 - 0.4 \dfrac{B}{L} \rightarrow
192
+ \text{Rectangular footing}
193
+ $$
194
+
195
+ $$
196
+ s_{\gamma} = 0.6 \rightarrow \text{Square or circular footing}
197
+ $$
198
+ """
199
+ width, length, shape = self.foundation_size.footing_params()
200
+ return VesicShapeFactors.s_gamma(width, length, shape)
201
+
202
+ @property
203
+ def d_c(self) -> float:
204
+ r"""Depth factor $D_c$.
205
+
206
+ $$d_c = 1 + 0.4 \dfrac{D_f}{B}$$
207
+ """
208
+ depth, width = self.foundation_size.depth, self.foundation_size.width
209
+ return VesicDepthFactors.d_c(depth, width)
210
+
211
+ @property
212
+ def d_q(self) -> float:
213
+ r"""Depth factor $D_q$.
214
+
215
+ $$
216
+ d_q = 1 + 2 \tan(\phi) \cdot (1 - \sin(\phi))^2
217
+ \cdot \dfrac{D_f}{B}
218
+ $$
219
+ """
220
+ depth, width = self.foundation_size.depth, self.foundation_size.width
221
+ return VesicDepthFactors.d_q(self.friction_angle, depth, width)
222
+
223
+ @property
224
+ def d_gamma(self) -> float:
225
+ r"""Depth factor $D_{\gamma}$.
226
+
227
+ $$d_{\gamma} = 1.0$$
228
+ """
229
+ return VesicDepthFactors.d_gamma()
230
+
231
+ @property
232
+ def i_c(self) -> float:
233
+ r"""Inclination factor $I_c$.
234
+
235
+ $$i_c = (1 - \dfrac{\alpha}{90})^2$$
236
+ """
237
+ return VesicInclinationFactors.i_c(self.load_angle)
238
+
239
+ @property
240
+ def i_q(self) -> float:
241
+ r"""Inclination factor $I_q$.
242
+
243
+ $$i_q = (1 - \dfrac{\alpha}{90})^2$$
244
+ """
245
+ return VesicInclinationFactors.i_q(self.load_angle)
246
+
247
+ @property
248
+ def i_gamma(self) -> float:
249
+ r"""Inclination factor $I_{\gamma}$.
250
+
251
+ $$i_{\gamma} = \left(1 - \dfrac{\alpha}{\phi} \right)^2$$
252
+ """
253
+ return VesicInclinationFactors.i_gamma(self.friction_angle, self.load_angle)