Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ok-landscape
GitHub Repository: Ok-landscape/computational-pipeline
Path: blob/main/latex-templates/templates/civil-engineering/soil_mechanics.tex
51 views
unlisted
1
\documentclass[11pt,a4paper]{article}
2
\usepackage[utf8]{inputenc}
3
\usepackage[T1]{fontenc}
4
\usepackage{amsmath,amssymb}
5
\usepackage{graphicx}
6
\usepackage{booktabs}
7
\usepackage{siunitx}
8
\usepackage{geometry}
9
\geometry{margin=1in}
10
\usepackage{pythontex}
11
\usepackage{hyperref}
12
\usepackage{float}
13
14
\title{Soil Mechanics Analysis\\Effective Stress, Bearing Capacity, and Consolidation}
15
\author{Geotechnical Engineering Research Group}
16
\date{\today}
17
18
\begin{document}
19
\maketitle
20
21
\begin{abstract}
22
This report presents comprehensive geotechnical analysis including effective stress calculations, Mohr-Coulomb failure criteria, bearing capacity design using Terzaghi's theory, one-dimensional consolidation settlement, and slope stability assessment. Computational methods are applied to practical foundation design scenarios with parametric studies examining the influence of soil properties on engineering behavior.
23
\end{abstract}
24
25
\section{Introduction}
26
27
Soil mechanics forms the foundation of geotechnical engineering, governing the design of structures interacting with earth materials. This analysis examines five critical aspects: (1) effective stress profiles accounting for pore water pressure, (2) shear strength characterization via Mohr-Coulomb failure envelopes, (3) shallow foundation bearing capacity, (4) time-dependent consolidation settlement, and (5) slope stability under various loading conditions.
28
29
The principle of effective stress, first articulated by Terzaghi \cite{terzaghi1943}, remains fundamental to understanding soil behavior. Shear strength parameters (cohesion $c$ and friction angle $\phi$) control failure mechanisms \cite{lambe1969}. Bearing capacity theory provides the basis for safe foundation design \cite{meyerhof1963}, while consolidation analysis predicts settlement magnitudes and time scales \cite{taylor1948}.
30
31
\begin{pycode}
32
import numpy as np
33
import matplotlib.pyplot as plt
34
from scipy.integrate import odeint
35
from scipy.optimize import fsolve
36
from scipy import stats
37
plt.rcParams['text.usetex'] = True
38
plt.rcParams['font.family'] = 'serif'
39
40
# Global soil parameters
41
gamma = 18.0 # kN/m³ total unit weight
42
gamma_sat = 20.0 # kN/m³ saturated unit weight
43
gamma_w = 9.81 # kN/m³ water unit weight
44
c = 25.0 # kPa cohesion
45
phi = 30.0 # degrees friction angle
46
phi_rad = np.radians(phi)
47
cv = 2e-7 # m²/s coefficient of consolidation
48
\end{pycode}
49
50
\section{Effective Stress Distribution}
51
52
The effective stress principle states that soil behavior is controlled by effective stress $\sigma'$, defined as:
53
\begin{equation}
54
\sigma' = \sigma - u
55
\end{equation}
56
where $\sigma$ is total stress and $u$ is pore water pressure.
57
58
\begin{pycode}
59
# Effective stress profile
60
z = np.linspace(0, 20, 100) # depth in meters
61
water_table = 5.0 # meters below surface
62
63
# Total stress
64
sigma_total = np.where(z <= water_table, gamma * z,
65
gamma * water_table + gamma_sat * (z - water_table))
66
67
# Pore water pressure
68
u = np.maximum(0, gamma_w * (z - water_table))
69
70
# Effective stress
71
sigma_effective = sigma_total - u
72
73
# Calculate values at specific depths
74
z_eval = np.array([5, 10, 15, 20])
75
sigma_t_eval = np.interp(z_eval, z, sigma_total)
76
u_eval = np.interp(z_eval, z, u)
77
sigma_e_eval = np.interp(z_eval, z, sigma_effective)
78
79
fig, ax = plt.subplots(figsize=(10, 7))
80
ax.plot(sigma_total, z, 'b-', linewidth=2.5, label=r'Total stress $\sigma$')
81
ax.plot(u, z, 'c--', linewidth=2, label=r'Pore pressure $u$')
82
ax.plot(sigma_effective, z, 'r-', linewidth=2.5, label=r"Effective stress $\sigma'$")
83
ax.axhline(water_table, color='cyan', linestyle=':', linewidth=1.5, alpha=0.7, label='Water table')
84
ax.set_xlabel(r'Stress (kPa)', fontsize=12)
85
ax.set_ylabel(r'Depth (m)', fontsize=12)
86
ax.set_title(r'Effective Stress Profile with Water Table at 5 m Depth', fontsize=13)
87
ax.invert_yaxis()
88
ax.legend(loc='lower right', fontsize=11)
89
ax.grid(True, alpha=0.3)
90
plt.tight_layout()
91
plt.savefig('soil_mechanics_plot1.pdf', dpi=150, bbox_inches='tight')
92
plt.close()
93
\end{pycode}
94
95
\begin{figure}[H]
96
\centering
97
\includegraphics[width=0.88\textwidth]{soil_mechanics_plot1.pdf}
98
\caption{Effective stress distribution with depth showing the influence of the water table at 5 m depth. Above the water table, total stress equals effective stress since pore pressure is zero. Below the water table, buoyancy effects reduce effective stress significantly. At 20 m depth, total stress is \py{f"{sigma_t_eval[3]:.1f}"} kPa, pore pressure is \py{f"{u_eval[3]:.1f}"} kPa, and effective stress is \py{f"{sigma_e_eval[3]:.1f}"} kPa. This principle governs compressibility, shear strength, and permeability of saturated soils.}
99
\end{figure}
100
101
\section{Mohr-Coulomb Failure Criterion}
102
103
The Mohr-Coulomb failure envelope defines shear strength $\tau_f$ as:
104
\begin{equation}
105
\tau_f = c + \sigma_n \tan\phi
106
\end{equation}
107
where $c$ is cohesion, $\sigma_n$ is normal effective stress, and $\phi$ is the friction angle.
108
109
\begin{pycode}
110
# Mohr-Coulomb failure envelope
111
sigma_n = np.linspace(0, 500, 100) # kPa normal stress
112
113
# Failure envelope for different soil types
114
c1, phi1 = 25, 30 # clayey sand
115
c2, phi2 = 50, 15 # stiff clay
116
c3, phi3 = 0, 35 # clean sand
117
118
tau_f1 = c1 + sigma_n * np.tan(np.radians(phi1))
119
tau_f2 = c2 + sigma_n * np.tan(np.radians(phi2))
120
tau_f3 = c3 + sigma_n * np.tan(np.radians(phi3))
121
122
# Mohr circles at failure for example stress states
123
sigma_1_ex = 400 # kPa major principal stress
124
sigma_3_ex = 100 # kPa minor principal stress
125
center = (sigma_1_ex + sigma_3_ex) / 2
126
radius = (sigma_1_ex - sigma_3_ex) / 2
127
theta_circle = np.linspace(0, np.pi, 100)
128
circle_x = center + radius * np.cos(theta_circle)
129
circle_y = radius * np.sin(theta_circle)
130
131
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
132
133
# Left panel: failure envelopes
134
ax1.plot(sigma_n, tau_f1, 'r-', linewidth=2.5, label=f'Clayey sand: $c={c1}$ kPa, $\\phi={phi1}°$')
135
ax1.plot(sigma_n, tau_f2, 'b-', linewidth=2.5, label=f'Stiff clay: $c={c2}$ kPa, $\\phi={phi2}°$')
136
ax1.plot(sigma_n, tau_f3, 'g-', linewidth=2.5, label=f'Clean sand: $c={c3}$ kPa, $\\phi={phi3}°$')
137
ax1.set_xlabel(r'Normal stress $\sigma_n$ (kPa)', fontsize=12)
138
ax1.set_ylabel(r'Shear stress $\tau_f$ (kPa)', fontsize=12)
139
ax1.set_title('Mohr-Coulomb Failure Envelopes', fontsize=13)
140
ax1.legend(loc='upper left', fontsize=10)
141
ax1.grid(True, alpha=0.3)
142
ax1.set_xlim([0, 500])
143
ax1.set_ylim([0, 400])
144
145
# Right panel: Mohr circle with failure envelope
146
ax2.plot(sigma_n, tau_f1, 'r-', linewidth=2, label='Failure envelope')
147
ax2.plot(circle_x, circle_y, 'b-', linewidth=2.5, label='Mohr circle')
148
ax2.plot([sigma_3_ex, sigma_1_ex], [0, 0], 'ko', markersize=8)
149
ax2.axhline(0, color='k', linewidth=0.8)
150
ax2.set_xlabel(r'Normal stress $\sigma$ (kPa)', fontsize=12)
151
ax2.set_ylabel(r'Shear stress $\tau$ (kPa)', fontsize=12)
152
ax2.set_title(r'Mohr Circle at Failure ($\sigma_1=400$ kPa, $\sigma_3=100$ kPa)', fontsize=13)
153
ax2.legend(loc='upper left', fontsize=10)
154
ax2.grid(True, alpha=0.3)
155
ax2.set_xlim([0, 500])
156
ax2.set_ylim([0, 250])
157
158
plt.tight_layout()
159
plt.savefig('soil_mechanics_plot2.pdf', dpi=150, bbox_inches='tight')
160
plt.close()
161
\end{pycode}
162
163
\begin{figure}[H]
164
\centering
165
\includegraphics[width=0.98\textwidth]{soil_mechanics_plot2.pdf}
166
\caption{Left: Mohr-Coulomb failure envelopes for three soil types demonstrating how cohesion and friction angle control shear strength. Clayey sand exhibits moderate cohesion and friction. Stiff clay has high cohesion but lower friction. Clean sand has zero cohesion but highest friction angle. Right: Mohr circle representation of stress state at failure tangent to the failure envelope. The principal stresses are \py{f"{sigma_1_ex}"} kPa and \py{f"{sigma_3_ex}"} kPa, giving a deviatoric stress of \py{f"{sigma_1_ex - sigma_3_ex}"} kPa. This graphical method is fundamental for analyzing triaxial test results and determining soil strength parameters.}
167
\end{figure}
168
169
\section{Bearing Capacity Analysis}
170
171
Terzaghi's bearing capacity equation for a shallow strip footing is:
172
\begin{equation}
173
q_u = c N_c + \gamma D_f N_q + \frac{1}{2}\gamma B N_\gamma
174
\end{equation}
175
where $q_u$ is ultimate bearing capacity, $D_f$ is embedment depth, $B$ is footing width, and $N_c$, $N_q$, $N_\gamma$ are bearing capacity factors.
176
177
\begin{pycode}
178
# Bearing capacity factors (Terzaghi for strip footing)
179
Nc = (1/np.tan(phi_rad)) * (np.exp(np.pi * np.tan(phi_rad)) *
180
(np.tan(np.pi/4 + phi_rad/2))**2 - 1)
181
Nq = np.exp(np.pi * np.tan(phi_rad)) * (np.tan(np.pi/4 + phi_rad/2))**2
182
Ngamma = (Nq - 1) * np.tan(1.4 * phi_rad)
183
184
# Foundation parameters
185
B_range = np.linspace(0.5, 5, 50) # m footing width
186
Df = 1.5 # m embedment depth
187
188
# Ultimate bearing capacity for varying width
189
qu = c * Nc + gamma * Df * Nq + 0.5 * gamma * B_range * Ngamma
190
191
# Factor of safety and allowable bearing capacity
192
FS = 3.0
193
qa = qu / FS
194
195
# Parametric study: effect of friction angle
196
phi_values = [25, 30, 35, 40]
197
B_study = 2.0 # m
198
199
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
200
201
# Left: bearing capacity vs width
202
ax1.plot(B_range, qu, 'b-', linewidth=2.5, label='Ultimate capacity $q_u$')
203
ax1.plot(B_range, qa, 'r--', linewidth=2, label=f'Allowable capacity $q_a$ (FS={FS})')
204
ax1.fill_between(B_range, 0, qa, alpha=0.2, color='green', label='Safe zone')
205
ax1.set_xlabel('Footing width $B$ (m)', fontsize=12)
206
ax1.set_ylabel('Bearing capacity (kPa)', fontsize=12)
207
ax1.set_title(f'Bearing Capacity vs. Footing Width ($c={c}$ kPa, $\\phi={phi}°$)', fontsize=13)
208
ax1.legend(loc='upper left', fontsize=10)
209
ax1.grid(True, alpha=0.3)
210
211
# Right: effect of friction angle
212
qu_phi = []
213
for phi_i in phi_values:
214
phi_rad_i = np.radians(phi_i)
215
Nc_i = (1/np.tan(phi_rad_i)) * (np.exp(np.pi * np.tan(phi_rad_i)) *
216
(np.tan(np.pi/4 + phi_rad_i/2))**2 - 1)
217
Nq_i = np.exp(np.pi * np.tan(phi_rad_i)) * (np.tan(np.pi/4 + phi_rad_i/2))**2
218
Ngamma_i = (Nq_i - 1) * np.tan(1.4 * phi_rad_i)
219
qu_i = c * Nc_i + gamma * Df * Nq_i + 0.5 * gamma * B_study * Ngamma_i
220
qu_phi.append(qu_i)
221
222
ax2.plot(phi_values, qu_phi, 'ro-', linewidth=2.5, markersize=10)
223
ax2.set_xlabel('Friction angle $\\phi$ (degrees)', fontsize=12)
224
ax2.set_ylabel('Ultimate bearing capacity $q_u$ (kPa)', fontsize=12)
225
ax2.set_title(f'Effect of Friction Angle ($B={B_study}$ m, $D_f={Df}$ m)', fontsize=13)
226
ax2.grid(True, alpha=0.3)
227
228
plt.tight_layout()
229
plt.savefig('soil_mechanics_plot3.pdf', dpi=150, bbox_inches='tight')
230
plt.close()
231
232
# Calculate specific values for inline reference
233
qu_2m = np.interp(2.0, B_range, qu)
234
qa_2m = qu_2m / FS
235
\end{pycode}
236
237
\begin{figure}[H]
238
\centering
239
\includegraphics[width=0.98\textwidth]{soil_mechanics_plot3.pdf}
240
\caption{Left: Ultimate and allowable bearing capacity variation with footing width showing the significant influence of the size-dependent $N_\gamma$ term. For a 2 m wide footing, ultimate capacity is \py{f"{qu_2m:.0f}"} kPa and allowable capacity is \py{f"{qa_2m:.0f}"} kPa. Right: Bearing capacity sensitivity to friction angle demonstrating exponential increase. A 5° increase from 30° to 35° raises capacity by over 50 percent. These relationships guide foundation sizing in preliminary design. Bearing capacity factors are $N_c=\py{f"{Nc:.2f}"}$, $N_q=\py{f"{Nq:.2f}"}$, $N_\gamma=\py{f"{Ngamma:.2f}"}$ for $\phi=\py{phi}°$.}
241
\end{figure}
242
243
\section{One-Dimensional Consolidation}
244
245
Terzaghi's one-dimensional consolidation theory predicts settlement and its time development. The degree of consolidation $U$ is:
246
\begin{equation}
247
U = 1 - \sum_{m=0}^{\infty} \frac{2}{M^2} \exp\left(-M^2 T_v\right), \quad M = \frac{\pi}{2}(2m+1)
248
\end{equation}
249
where the time factor $T_v = c_v t / H_{dr}^2$, with $c_v$ as the coefficient of consolidation and $H_{dr}$ as the drainage path.
250
251
\begin{pycode}
252
# Consolidation parameters
253
H = 10 # m layer thickness
254
H_dr = H / 2 # m drainage path (double drainage)
255
delta_sigma = 100 # kPa applied load increment
256
Cc = 0.3 # compression index
257
e0 = 0.8 # initial void ratio
258
259
# Time range
260
t_years = np.logspace(-3, 2, 200) # years
261
t_seconds = t_years * 365.25 * 24 * 3600 # convert to seconds
262
263
# Time factor
264
Tv = cv * t_seconds / H_dr**2
265
266
# Degree of consolidation (first 10 terms of series)
267
U = np.zeros_like(Tv)
268
for m in range(10):
269
M = (np.pi / 2) * (2 * m + 1)
270
U += (2 / M**2) * np.exp(-M**2 * Tv)
271
U = 1 - U
272
273
# Ultimate settlement
274
sigma0 = gamma * H / 2 # average effective stress
275
Sc = (Cc / (1 + e0)) * H * np.log10((sigma0 + delta_sigma) / sigma0)
276
277
# Settlement vs time
278
S_t = U * Sc
279
280
# Different cv values for parametric study
281
cv_values = [1e-7, 2e-7, 5e-7, 1e-6] # m²/s
282
283
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
284
285
# Left: settlement vs time
286
ax1.semilogx(t_years, S_t * 1000, 'b-', linewidth=2.5)
287
ax1.axhline(Sc * 1000, color='r', linestyle='--', linewidth=1.5,
288
label=f'Ultimate settlement = {Sc*1000:.1f} mm')
289
ax1.axhline(0.5 * Sc * 1000, color='orange', linestyle=':', linewidth=1.5,
290
label=f'50\\% consolidation')
291
ax1.set_xlabel('Time (years)', fontsize=12)
292
ax1.set_ylabel('Settlement (mm)', fontsize=12)
293
ax1.set_title(f'Consolidation Settlement ($c_v={cv*1e6:.1f}×10^{{-6}}$ m²/s)', fontsize=13)
294
ax1.legend(loc='lower right', fontsize=10)
295
ax1.grid(True, alpha=0.3, which='both')
296
ax1.set_xlim([1e-3, 100])
297
298
# Right: effect of cv on consolidation rate
299
for cv_i in cv_values:
300
Tv_i = cv_i * t_seconds / H_dr**2
301
U_i = np.zeros_like(Tv_i)
302
for m in range(10):
303
M = (np.pi / 2) * (2 * m + 1)
304
U_i += (2 / M**2) * np.exp(-M**2 * Tv_i)
305
U_i = 1 - U_i
306
ax2.semilogx(t_years, U_i * 100, linewidth=2.5,
307
label=f'$c_v={cv_i*1e6:.1f}×10^{{-6}}$ m²/s')
308
309
ax2.axhline(90, color='gray', linestyle='--', linewidth=1, alpha=0.7)
310
ax2.set_xlabel('Time (years)', fontsize=12)
311
ax2.set_ylabel('Degree of consolidation $U$ (\\%)', fontsize=12)
312
ax2.set_title('Effect of Coefficient of Consolidation', fontsize=13)
313
ax2.legend(loc='lower right', fontsize=10)
314
ax2.grid(True, alpha=0.3, which='both')
315
ax2.set_xlim([1e-3, 100])
316
ax2.set_ylim([0, 100])
317
318
plt.tight_layout()
319
plt.savefig('soil_mechanics_plot4.pdf', dpi=150, bbox_inches='tight')
320
plt.close()
321
322
# Calculate t50 and t90
323
idx50 = np.argmin(np.abs(U - 0.5))
324
idx90 = np.argmin(np.abs(U - 0.9))
325
t50 = t_years[idx50]
326
t90 = t_years[idx90]
327
\end{pycode}
328
329
\begin{figure}[H]
330
\centering
331
\includegraphics[width=0.98\textwidth]{soil_mechanics_plot4.pdf}
332
\caption{Left: Settlement progression over time under 100 kPa surcharge on a 10 m thick clay layer with double drainage. Ultimate settlement is \py{f"{Sc*1000:.1f}"} mm. Time for 50\% consolidation is \py{f"{t50:.2f}"} years and for 90\% consolidation is \py{f"{t90:.1f}"} years. Right: Consolidation rate sensitivity to coefficient of consolidation showing that doubling $c_v$ halves the time required for a given degree of consolidation. Lower permeability clays ($c_v \sim 10^{-7}$ m²/s) require decades, while silty clays ($c_v \sim 10^{-6}$ m²/s) consolidate in months. This analysis is essential for staged construction and surcharge preloading design.}
333
\end{figure}
334
335
\section{Slope Stability Analysis}
336
337
Infinite slope stability is analyzed using limit equilibrium. The factor of safety against sliding is:
338
\begin{equation}
339
FS = \frac{c + \gamma z \cos^2\beta \tan\phi}{\gamma z \sin\beta \cos\beta}
340
\end{equation}
341
where $\beta$ is the slope angle and $z$ is the depth of failure surface.
342
343
\begin{pycode}
344
# Infinite slope analysis
345
beta_range = np.linspace(5, 45, 100) # degrees
346
beta_rad = np.radians(beta_range)
347
348
# Slope depth and soil parameters
349
z_slope = 5 # m depth to failure plane
350
351
# Factor of safety for dry slope
352
FS_dry = (c + gamma * z_slope * np.cos(beta_rad)**2 * np.tan(phi_rad)) / \
353
(gamma * z_slope * np.sin(beta_rad) * np.cos(beta_rad))
354
355
# Factor of safety for saturated slope with seepage
356
gamma_eff = gamma_sat - gamma_w
357
FS_sat = (c + gamma_eff * z_slope * np.cos(beta_rad)**2 * np.tan(phi_rad)) / \
358
(gamma_sat * z_slope * np.sin(beta_rad) * np.cos(beta_rad))
359
360
# Critical slope angle (FS = 1 for cohesionless soil)
361
beta_crit_dry = phi
362
beta_crit_sat = np.degrees(np.arctan(gamma_eff / gamma_sat * np.tan(phi_rad)))
363
364
# 2D stability chart: FS vs slope angle and cohesion
365
beta_2d = np.linspace(5, 45, 50)
366
c_2d = np.linspace(0, 50, 50)
367
BETA_2D, C_2D = np.meshgrid(beta_2d, c_2d)
368
BETA_RAD_2D = np.radians(BETA_2D)
369
370
FS_2D = (C_2D + gamma * z_slope * np.cos(BETA_RAD_2D)**2 * np.tan(phi_rad)) / \
371
(gamma * z_slope * np.sin(BETA_RAD_2D) * np.cos(BETA_RAD_2D))
372
373
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
374
375
# Left: FS vs slope angle
376
ax1.plot(beta_range, FS_dry, 'b-', linewidth=2.5, label='Dry slope')
377
ax1.plot(beta_range, FS_sat, 'r-', linewidth=2.5, label='Saturated slope (seepage)')
378
ax1.axhline(1, color='k', linestyle='--', linewidth=1.5, label='FS = 1 (failure)')
379
ax1.axhline(1.5, color='green', linestyle=':', linewidth=1.5, label='FS = 1.5 (typical design)')
380
ax1.axvline(beta_crit_dry, color='b', linestyle=':', linewidth=1, alpha=0.5)
381
ax1.axvline(beta_crit_sat, color='r', linestyle=':', linewidth=1, alpha=0.5)
382
ax1.set_xlabel('Slope angle $\\beta$ (degrees)', fontsize=12)
383
ax1.set_ylabel('Factor of safety FS', fontsize=12)
384
ax1.set_title(f'Infinite Slope Stability ($c={c}$ kPa, $\\phi={phi}°$)', fontsize=13)
385
ax1.legend(loc='upper right', fontsize=10)
386
ax1.grid(True, alpha=0.3)
387
ax1.set_xlim([5, 45])
388
ax1.set_ylim([0, 5])
389
390
# Right: 2D contour plot
391
cs = ax2.contourf(BETA_2D, C_2D, FS_2D, levels=[0, 0.5, 1.0, 1.5, 2.0, 3.0, 5.0, 10.0],
392
cmap='RdYlGn', extend='max')
393
contours = ax2.contour(BETA_2D, C_2D, FS_2D, levels=[1.0, 1.5], colors='black', linewidths=2)
394
ax2.clabel(contours, inline=True, fontsize=10)
395
plt.colorbar(cs, ax=ax2, label='Factor of safety FS')
396
ax2.set_xlabel('Slope angle $\\beta$ (degrees)', fontsize=12)
397
ax2.set_ylabel('Cohesion $c$ (kPa)', fontsize=12)
398
ax2.set_title('Slope Stability Design Chart', fontsize=13)
399
400
plt.tight_layout()
401
plt.savefig('soil_mechanics_plot5.pdf', dpi=150, bbox_inches='tight')
402
plt.close()
403
404
# Evaluate FS at specific slope angles
405
beta_eval = np.array([15, 30, 45])
406
FS_eval_dry = np.interp(beta_eval, beta_range, FS_dry)
407
FS_eval_sat = np.interp(beta_eval, beta_range, FS_sat)
408
\end{pycode}
409
410
\begin{figure}[H]
411
\centering
412
\includegraphics[width=0.98\textwidth]{soil_mechanics_plot5.pdf}
413
\caption{Left: Factor of safety versus slope angle for infinite slope showing critical importance of groundwater. For a 30° slope, dry conditions give FS = \py{f"{FS_eval_dry[1]:.2f}"} while saturated conditions reduce this to FS = \py{f"{FS_eval_sat[1]:.2f}"}. Critical angle for cohesionless dry soil is \py{f"{beta_crit_dry:.0f}"}° and for saturated soil is \py{f"{beta_crit_sat:.0f}"}°. Right: Design chart showing safe (green) and unstable (red) combinations of slope angle and cohesion. Contours at FS = 1.0 (failure) and 1.5 (typical design minimum) provide rapid assessment. This demonstrates why cohesive soils can sustain steeper slopes and why drainage is critical for slope stability.}
414
\end{figure}
415
416
\section{Compressibility and Settlement}
417
418
Soil compressibility governs settlement under foundation loads. The compression index $C_c$ and recompression index $C_r$ define the stress-strain relationship.
419
420
\begin{pycode}
421
# Void ratio vs effective stress (e-log p curve)
422
sigma_v = np.logspace(1, 3, 100) # kPa
423
e0_clay = 1.2
424
Cc_clay = 0.4
425
Cr_clay = 0.05
426
sigma_p = 200 # kPa preconsolidation pressure
427
428
# Void ratio calculation
429
e = np.zeros_like(sigma_v)
430
for i, sig in enumerate(sigma_v):
431
if sig <= sigma_p:
432
e[i] = e0_clay - Cr_clay * np.log10(sig / 50) # reloading
433
else:
434
e_p = e0_clay - Cr_clay * np.log10(sigma_p / 50)
435
e[i] = e_p - Cc_clay * np.log10(sig / sigma_p) # virgin compression
436
437
# Settlement for different OCR values
438
sigma_v0 = 100 # kPa initial stress
439
delta_sigma = 150 # kPa load increment
440
H_layer = 8 # m thickness
441
OCR_values = [1, 2, 4, 8] # overconsolidation ratio
442
443
settlements = []
444
for OCR in OCR_values:
445
sigma_p_i = OCR * sigma_v0
446
if sigma_v0 + delta_sigma <= sigma_p_i:
447
# Recompression only
448
S = (Cr_clay / (1 + e0_clay)) * H_layer * np.log10((sigma_v0 + delta_sigma) / sigma_v0)
449
else:
450
# Recompression + virgin compression
451
S1 = (Cr_clay / (1 + e0_clay)) * H_layer * np.log10(sigma_p_i / sigma_v0)
452
S2 = (Cc_clay / (1 + e0_clay)) * H_layer * np.log10((sigma_v0 + delta_sigma) / sigma_p_i)
453
S = S1 + S2
454
settlements.append(S * 1000) # convert to mm
455
456
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
457
458
# Left: e-log p curve
459
ax1.semilogx(sigma_v, e, 'b-', linewidth=2.5)
460
ax1.axvline(sigma_p, color='r', linestyle='--', linewidth=1.5,
461
label=f'Preconsolidation pressure = {sigma_p} kPa')
462
ax1.set_xlabel('Effective stress $\\sigma_v\'$ (kPa)', fontsize=12)
463
ax1.set_ylabel('Void ratio $e$', fontsize=12)
464
ax1.set_title(f'Compressibility Curve ($C_c={Cc_clay}$, $C_r={Cr_clay}$)', fontsize=13)
465
ax1.legend(loc='upper right', fontsize=10)
466
ax1.grid(True, alpha=0.3, which='both')
467
ax1.set_xlim([10, 1000])
468
469
# Right: settlement vs OCR
470
ax2.bar(range(len(OCR_values)), settlements, color='steelblue', edgecolor='black', linewidth=1.5)
471
ax2.set_xticks(range(len(OCR_values)))
472
ax2.set_xticklabels([f'OCR={ocr}' for ocr in OCR_values])
473
ax2.set_ylabel('Settlement (mm)', fontsize=12)
474
ax2.set_title(f'Settlement vs. Overconsolidation Ratio ($\\Delta\\sigma={delta_sigma}$ kPa)', fontsize=13)
475
ax2.grid(True, alpha=0.3, axis='y')
476
477
for i, s in enumerate(settlements):
478
ax2.text(i, s + 5, f'{s:.1f}', ha='center', fontsize=10, fontweight='bold')
479
480
plt.tight_layout()
481
plt.savefig('soil_mechanics_plot6.pdf', dpi=150, bbox_inches='tight')
482
plt.close()
483
\end{pycode}
484
485
\begin{figure}[H]
486
\centering
487
\includegraphics[width=0.98\textwidth]{soil_mechanics_plot6.pdf}
488
\caption{Left: Void ratio-effective stress relationship showing elastic recompression at low stress (slope $C_r = \py{f"{Cr_clay:.2f}"}$) and virgin compression beyond preconsolidation pressure (slope $C_c = \py{f"{Cc_clay:.2f}"}$). The break in slope at \py{f"{sigma_p}"} kPa indicates stress history. Right: Settlement reduction with increasing overconsolidation ratio (OCR). Normally consolidated clay (OCR=1) settles \py{f"{settlements[0]:.1f}"} mm while heavily overconsolidated clay (OCR=8) settles only \py{f"{settlements[3]:.1f}"} mm under identical loading. This demonstrates why foundation performance depends critically on stress history, motivating preloading and surcharge techniques to reduce post-construction settlement.}
489
\end{figure}
490
491
\section{Results Summary}
492
493
The computational analysis yields the following key engineering parameters:
494
495
\begin{pycode}
496
results = [
497
['Ultimate bearing capacity (B=2m)', f'{qu_2m:.0f} kPa'],
498
['Allowable bearing capacity (FS=3)', f'{qa_2m:.0f} kPa'],
499
['Ultimate consolidation settlement', f'{Sc*1000:.1f} mm'],
500
['Time for 50\\% consolidation', f'{t50:.2f} years'],
501
['Time for 90\\% consolidation', f'{t90:.1f} years'],
502
['Bearing capacity factor $N_c$', f'{Nc:.2f}'],
503
['Bearing capacity factor $N_q$', f'{Nq:.2f}'],
504
['Bearing capacity factor $N_\\gamma$', f'{Ngamma:.2f}'],
505
['Slope FS (30°, dry)', f'{FS_eval_dry[1]:.2f}'],
506
['Slope FS (30°, saturated)', f'{FS_eval_sat[1]:.2f}'],
507
]
508
509
print(r'\begin{table}[H]')
510
print(r'\centering')
511
print(r'\caption{Summary of Computed Geotechnical Parameters}')
512
print(r'\begin{tabular}{@{}lc@{}}')
513
print(r'\toprule')
514
print(r'Parameter & Value \\')
515
print(r'\midrule')
516
for row in results:
517
print(f"{row[0]} & {row[1]} \\\\")
518
print(r'\bottomrule')
519
print(r'\end{tabular}')
520
print(r'\end{table}')
521
\end{pycode}
522
523
\section{Conclusions}
524
525
This comprehensive analysis demonstrates computational methods for five fundamental aspects of soil mechanics. Effective stress analysis reveals that pore water pressure significantly reduces effective stress below the water table, at 20 m depth reducing effective stress by \py{f"{u_eval[3]/sigma_t_eval[3]*100:.1f}"}\% compared to total stress. Mohr-Coulomb failure analysis shows shear strength is controlled by both cohesion ($c = \py{c}$ kPa) and friction angle ($\phi = \py{phi}°$), with clean sands relying entirely on friction while clays exhibit significant cohesion.
526
527
Bearing capacity calculations using Terzaghi's theory yield ultimate capacity $q_u = \py{f"{qu_2m:.0f}"}$ kPa for a 2 m wide footing, giving allowable capacity $q_a = \py{f"{qa_2m:.0f}"}$ kPa with factor of safety FS = \py{f"{FS:.1f}"}. Parametric studies show bearing capacity increases exponentially with friction angle, emphasizing the importance of accurate shear strength characterization.
528
529
One-dimensional consolidation analysis predicts ultimate settlement of \py{f"{Sc*1000:.1f}"} mm under 100 kPa surcharge, with 90\% consolidation requiring \py{f"{t90:.1f}"} years. This time-dependent behavior governs staged construction schedules and surcharge design. Slope stability analysis demonstrates the critical importance of groundwater, with saturation reducing factor of safety from \py{f"{FS_eval_dry[1]:.2f}"} to \py{f"{FS_eval_sat[1]:.2f}"} for a 30° slope, explaining the prevalence of slope failures during heavy rainfall.
530
531
Compressibility analysis shows that overconsolidation ratio dramatically affects settlement, with OCR = 8 reducing settlement by \py{f"{(1 - settlements[3]/settlements[0])*100:.0f}"}\% compared to normally consolidated soil. This stress history effect is exploited in ground improvement through preloading. The integrated computational framework presented here provides quantitative design tools for foundation engineering, earthwork stability, and settlement prediction, forming the basis for safe and economical geotechnical design.
532
533
\bibliographystyle{plain}
534
\begin{thebibliography}{99}
535
536
\bibitem{terzaghi1943}
537
K. Terzaghi, \textit{Theoretical Soil Mechanics}, John Wiley \& Sons, New York, 1943.
538
539
\bibitem{lambe1969}
540
T. W. Lambe and R. V. Whitman, \textit{Soil Mechanics}, John Wiley \& Sons, New York, 1969.
541
542
\bibitem{meyerhof1963}
543
G. G. Meyerhof, "Some Recent Research on the Bearing Capacity of Foundations," \textit{Canadian Geotechnical Journal}, vol. 1, no. 1, pp. 16--26, 1963.
544
545
\bibitem{taylor1948}
546
D. W. Taylor, \textit{Fundamentals of Soil Mechanics}, John Wiley \& Sons, New York, 1948.
547
548
\bibitem{bishop1955}
549
A. W. Bishop, "The Use of the Slip Circle in the Stability Analysis of Slopes," \textit{Géotechnique}, vol. 5, no. 1, pp. 7--17, 1955.
550
551
\bibitem{skempton1957}
552
A. W. Skempton, "Discussion: The Planning and Design of New Hong Kong Airport," \textit{Proceedings of the Institution of Civil Engineers}, vol. 7, pp. 305--307, 1957.
553
554
\bibitem{casagrande1936}
555
A. Casagrande, "The Determination of the Pre-consolidation Load and Its Practical Significance," \textit{Proceedings of the 1st International Conference on Soil Mechanics and Foundation Engineering}, vol. 3, pp. 60--64, 1936.
556
557
\bibitem{bjerrum1967}
558
L. Bjerrum, "Engineering Geology of Norwegian Normally-Consolidated Marine Clays," \textit{Géotechnique}, vol. 17, no. 2, pp. 81--118, 1967.
559
560
\bibitem{das2010}
561
B. M. Das, \textit{Principles of Geotechnical Engineering}, 7th ed., Cengage Learning, 2010.
562
563
\bibitem{vesic1973}
564
A. S. Vesic, "Analysis of Ultimate Loads of Shallow Foundations," \textit{Journal of the Soil Mechanics and Foundations Division}, ASCE, vol. 99, no. SM1, pp. 45--73, 1973.
565
566
\bibitem{janbu1973}
567
N. Janbu, "Slope Stability Computations," in \textit{Embankment Dam Engineering: Casagrande Volume}, R. C. Hirschfeld and S. J. Poulos, Eds., John Wiley \& Sons, 1973, pp. 47--86.
568
569
\bibitem{holtz1981}
570
R. D. Holtz and W. D. Kovacs, \textit{An Introduction to Geotechnical Engineering}, Prentice-Hall, 1981.
571
572
\bibitem{craig2004}
573
R. F. Craig, \textit{Craig's Soil Mechanics}, 7th ed., Spon Press, 2004.
574
575
\bibitem{duncan1970}
576
J. M. Duncan and C.-Y. Chang, "Nonlinear Analysis of Stress and Strain in Soils," \textit{Journal of the Soil Mechanics and Foundations Division}, ASCE, vol. 96, no. SM5, pp. 1629--1653, 1970.
577
578
\bibitem{schofield1968}
579
A. N. Schofield and C. P. Wroth, \textit{Critical State Soil Mechanics}, McGraw-Hill, London, 1968.
580
581
\bibitem{roscoe1968}
582
K. H. Roscoe and J. B. Burland, "On the Generalized Stress-Strain Behaviour of 'Wet' Clay," in \textit{Engineering Plasticity}, J. Heyman and F. A. Leckie, Eds., Cambridge University Press, 1968, pp. 535--609.
583
584
\bibitem{bowles1996}
585
J. E. Bowles, \textit{Foundation Analysis and Design}, 5th ed., McGraw-Hill, 1996.
586
587
\bibitem{peck1974}
588
R. B. Peck, W. E. Hanson, and T. H. Thornburn, \textit{Foundation Engineering}, 2nd ed., John Wiley \& Sons, 1974.
589
590
\bibitem{morgenstern1965}
591
N. R. Morgenstern and V. E. Price, "The Analysis of the Stability of General Slip Surfaces," \textit{Géotechnique}, vol. 15, no. 1, pp. 79--93, 1965.
592
593
\bibitem{wroth1984}
594
C. P. Wroth, "The Interpretation of In Situ Soil Tests," \textit{Géotechnique}, vol. 34, no. 4, pp. 449--489, 1984.
595
596
\end{thebibliography}
597
598
\end{document}
599
600