Chapter 4 Geotechnical Engineering: Bearing Capacity of Soil#
1. Introduction#

Fig. 22 **Figure 4.8 **: Bearing capacity estimation for shallow foundation.#
Bearing Capacity Methods#
Several classical and extended theories have been developed to estimate the bearing capacity of foundations under various soil conditions. Each theory introduces assumptions and parameters tailored to specific scenarios:
📊 Comparative Table of Bearing Capacity Theories#
Theory |
Applicable Conditions |
Key Assumptions / Features |
Best Use Cases |
---|---|---|---|
Terzaghi |
Strip, square, circular footings; general soils |
Three-zone shear resistance; includes cohesion \(( c' \)), overburden \(( q = \gamma D \)), and width \(( B \)) |
Shallow foundations in cohesive/granular soils |
Rankine |
Cohesionless soils; passive earth pressure |
Frictionless wall; planar failure surface; resultant force parallel to backfill |
Granular soils; pile foundations |
Skempton |
Undrained cohesive soils |
Depth-dependent bearing capacity factors; saturated clays; short-term loading |
Deep foundations in saturated clays |
Meyerhof |
General soils; shallow and deep foundations |
Logarithmic failure surface; includes resistance above pile base; shape and depth factors |
Footings with complex geometries |
Hansen |
Cohesionless soils; plane strain conditions |
Better experimental correlation; conservative estimates; offshore applicability |
Marine and offshore foundations |
Vesic |
Sloped or inclined surfaces; offshore environments |
Extends Terzaghi; accounts for slope effects and inclined loading |
Most used in offshore and sloped terrains |
1. Terzaghi’s Method#
Overview: Terzaghi’s method is one of the earliest and most widely used methods for calculating the bearing capacity of shallow foundations. It is based on the theory of plastic equilibrium in soils.
Equation: $\( q_{ult} = cN_c + qN_q + 0.5\gamma BN_\gamma \)$ where:
\(( q_{ult} \)) = ultimate bearing capacity
\(( c \)) = cohesion of the soil
\(( q \)) = overburden pressure at the foundation level
\(( \gamma \)) = unit weight of the soil
\(( B \)) = width of the foundation
\(( N_c, N_q, N_\gamma \)) = bearing capacity factors, which depend on the internal friction angle ((\phi))
Assumptions:
The soil is homogeneous and isotropic.
The foundation is shallow.
The load is applied vertically and centrally.
2. Meyerhof’s Method#
Overview: Meyerhof’s method extends Terzaghi’s theory by considering the shape and depth of the foundation, as well as the inclination of the load.
Equation: $\( q_{ult} = cN_c + qN_q + 0.5\gamma BN_\gamma \left(1 + 0.3 \frac{B}{L}\right) \)$ where:
\(( L \)) = length of the foundation
Other terms are as defined in Terzaghi’s method.
Assumptions:
Similar to Terzaghi’s method, but includes adjustments for foundation shape and load inclination.
3. Hansen’s Method#
Overview: Hansen’s method further refines the bearing capacity calculation by including shape, depth, and inclination factors for each term in the bearing capacity equation.
Equation: $\( q_{ult} = cN_c s_c d_c i_c + qN_q s_q d_q i_q + 0.5\gamma BN_\gamma s_\gamma d_\gamma i_\gamma \)$ where:
\(( s_c, s_q, s_\gamma \)) = shape factors
\(( d_c, d_q, d_\gamma \)) = depth factors
\(( i_c, i_q, i_\gamma \)) = inclination factors
Other terms are as defined in Terzaghi’s method.
Assumptions:
More comprehensive than Terzaghi’s and Meyerhof’s methods, accounting for various factors affecting bearing capacity.
Interpreting the Results#
Terzaghi’s Method: Provides a basic estimate of bearing capacity, suitable for simple cases with shallow foundations and uniform soil conditions.
Meyerhof’s Method: Offers a more refined estimate by considering the shape and depth of the foundation, making it suitable for a wider range of conditions.
Hansen’s Method: Provides the most comprehensive estimate by including additional factors, making it suitable for complex conditions with varying soil properties and load inclinations.
Recommendations#
Consistency: If the bearing capacities calculated by the different methods are similar, it indicates consistency in the results, and any method can be used based on convenience.
Significant Differences: If there are significant differences between the methods, further investigation and validation of soil parameters are recommended to ensure accurate design.
Bearing Capacity Factors Table#
The following table provides typical values for the bearing capacity factors ((N_c), (N_q), (N_\gamma)) based on the internal friction angle ((\phi)):
(\phi) (degrees) |
(N_c) |
(N_q) |
(N_\gamma) |
---|---|---|---|
0 |
5.14 |
1.00 |
0.00 |
5 |
6.50 |
1.57 |
0.21 |
10 |
8.34 |
2.47 |
0.67 |
15 |
11.00 |
3.90 |
1.41 |
20 |
15.00 |
6.40 |
2.56 |
25 |
20.70 |
10.60 |
4.40 |
30 |
27.70 |
18.40 |
7.40 |
35 |
37.20 |
31.00 |
11.80 |
40 |
50.60 |
52.00 |
18.40 |
45 |
69.30 |
100.00 |
32.40 |
These methods are essential tools in geotechnical engineering for designing safe and stable foundations. Understanding their assumptions and limitations helps engineers choose the appropriate method for their specific project conditions.
References#
The theoretical background and foundational principles of the brearing capacity estimation methods are sufficiently described in [Das, 2021] and [], making them a valuable reference for understanding the assumptions, governing equations.
2. Simulation#
🧱 Bearing Capacity Calculator (Terzaghi, Meyerhof, Hansen)#
This tool estimates the ultimate bearing capacity of soil using three classical methods:
Terzaghi’s Method
Meyerhof’s Method
Hansen’s Method
It allows users to input soil and foundation parameters interactively and compares the results across methods with interpretive guidance.
🔧 Calculation Steps#
Inputs:
Soil properties: cohesion \(( c \)), unit weight \(( \gamma \)), overburden pressure \(( q \))
Foundation dimensions: width \(( B \)), length \(( L \))
Bearing capacity factors: \(( N_c \)), \(( N_q \)), \(( N_\gamma \))
Equations Used:
Terzaghi: \( q_u = c N_c + q N_q + 0.5 \gamma B N_\gamma \)
Meyerhof: \( q_u = c N_c + q N_q + 0.5 \gamma B N_\gamma \left(1 + 0.3 \frac{B}{L}\right) \)
Hansen: \( q_u = c N_c s_c + q N_q s_q + 0.5 \gamma B N_\gamma s_\gamma \) where shape factors \(( s_c, s_q, s_\gamma \)) depend on \(( B/L \))
Interpretation Logic:
Compares results from all three methods
Identifies which method gives highest and lowest capacity
Provides recommendations based on consistency of results
📊 How to Interpret Inputs#
Parameter |
Meaning |
---|---|
|
Soil cohesion (kPa) |
|
Unit weight of soil (kN/m³) |
|
Overburden pressure at foundation depth (kPa) |
|
Width and length of foundation (m) |
|
Bearing capacity factors based on soil friction angle |
📋 How to Interpret Outputs#
Output |
Interpretation |
---|---|
|
Ultimate bearing capacity estimates (kPa) |
Interpretation Section |
Highlights which method gives highest/lowest values and whether results are consistent |
Recommendations |
Suggests further investigation if methods diverge significantly (>50%) |
🧠 Conceptual Insight#
This tool helps compare classic bearing capacity methods and guides foundation design decisions
by integrating soil mechanics theory with interactive analysis.
import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets
from IPython.display import display, Markdown
# Function to calculate bearing capacity using Terzaghi's method
def terzaghi_bearing_capacity(c, gamma, q, B, Nq, Nc, Ngamma):
q_ult = c * Nc + q * Nq + 0.5 * gamma * B * Ngamma
return q_ult
# Function to calculate bearing capacity using Meyerhof's method
def meyerhof_bearing_capacity(c, gamma, q, B, L, Nq, Nc, Ngamma):
q_ult = c * Nc + q * Nq + 0.5 * gamma * B * Ngamma * (1 + 0.3 * (B / L))
return q_ult
# Function to calculate bearing capacity using Hansen's method
def hansen_bearing_capacity(c, gamma, q, B, L, Nq, Nc, Ngamma):
sc = 1 + 0.2 * (B / L)
sq = 1 + 0.2 * (B / L)
sgamma = 1 - 0.4 * (B / L)
q_ult = c * Nc * sc + q * Nq * sq + 0.5 * gamma * B * Ngamma * sgamma
return q_ult
# Function to interpret bearing capacity results and guide users
def interpret_results(terzaghi_q_ult, meyerhof_q_ult, hansen_q_ult):
results = {
"Terzaghi": terzaghi_q_ult,
"Meyerhof": meyerhof_q_ult,
"Hansen": hansen_q_ult
}
max_capacity = max(results.values())
min_capacity = min(results.values())
interpretation = ""
if max_capacity == terzaghi_q_ult:
interpretation += "Terzaghi's method provides the highest bearing capacity.\n"
elif max_capacity == meyerhof_q_ult:
interpretation += "Meyerhof's method provides the highest bearing capacity.\n"
elif max_capacity == hansen_q_ult:
interpretation += "Hansen's method provides the highest bearing capacity.\n"
if min_capacity == terzaghi_q_ult:
interpretation += "Terzaghi's method provides the lowest bearing capacity.\n"
elif min_capacity == meyerhof_q_ult:
interpretation += "Meyerhof's method provides the lowest bearing capacity.\n"
elif min_capacity == hansen_q_ult:
interpretation += "Hansen's method provides the lowest bearing capacity.\n"
interpretation += "\n### Recommendations:\n"
if max_capacity / min_capacity > 1.5:
interpretation += "- There is a significant difference between the methods. Consider further investigation and validation of soil parameters.\n"
else:
interpretation += "- The methods provide similar results. You can choose any method based on convenience and familiarity.\n"
return interpretation
# Interactive widgets for input parameters
c_input = widgets.FloatSlider(
value=25,
min=0,
max=100,
step=1,
description='Cohesion (kPa):',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
gamma_input = widgets.FloatSlider(
value=18,
min=10,
max=25,
step=0.1,
description='Unit Weight (kN/m³):',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
q_input = widgets.FloatSlider(
value=50,
min=0,
max=200,
step=1,
description='Overburden Pressure (kPa):',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
B_input = widgets.FloatSlider(
value=2,
min=0.5,
max=10,
step=0.1,
description='Width of Foundation (m):',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
L_input = widgets.FloatSlider(
value=2,
min=0.5,
max=10,
step=0.1,
description='Length of Foundation (m):',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
Nq_input = widgets.FloatSlider(
value=20,
min=0,
max=100,
step=1,
description='Nq:',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
Nc_input = widgets.FloatSlider(
value=30,
min=0,
max=100,
step=1,
description='Nc:',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
Ngamma_input = widgets.FloatSlider(
value=10,
min=0,
max=100,
step=1,
description='Ngamma:',
layout=widgets.Layout(width='50%'),
style={'description_width': 'initial'}
)
output = widgets.Output()
def update_plot(change=None):
with output:
try:
c = c_input.value
gamma = gamma_input.value
q = q_input.value
B = B_input.value
L = L_input.value
Nq = Nq_input.value
Nc = Nc_input.value
Ngamma = Ngamma_input.value
# Calculate bearing capacities using different methods
terzaghi_q_ult = terzaghi_bearing_capacity(c, gamma, q, B, Nq, Nc, Ngamma)
meyerhof_q_ult = meyerhof_bearing_capacity(c, gamma, q, B, L, Nq, Nc, Ngamma)
hansen_q_ult = hansen_bearing_capacity(c, gamma, q, B, L, Nq, Nc, Ngamma)
# Interpret results and guide users
interpretation = interpret_results(terzaghi_q_ult, meyerhof_q_ult, hansen_q_ult)
# Display results and interpretation
output.clear_output()
display(Markdown(f"### Bearing Capacity Results"))
display(Markdown(f"- **Terzaghi's Method:** {terzaghi_q_ult:.2f} kPa"))
display(Markdown(f"- **Meyerhof's Method:** {meyerhof_q_ult:.2f} kPa"))
display(Markdown(f"- **Hansen's Method:** {hansen_q_ult:.2f} kPa"))
display(Markdown(f"### Interpretation and Recommendations"))
display(Markdown(interpretation))
except Exception as e:
output.clear_output()
display(Markdown(f"❌ **Error:** {e}"))
c_input.observe(update_plot, names='value')
gamma_input.observe(update_plot, names='value')
q_input.observe(update_plot, names='value')
B_input.observe(update_plot, names='value')
L_input.observe(update_plot, names='value')
Nq_input.observe(update_plot, names='value')
Nc_input.observe(update_plot, names='value')
Ngamma_input.observe(update_plot, names='value')
display(widgets.VBox([c_input, gamma_input, q_input, B_input, L_input, Nq_input, Nc_input, Ngamma_input]), output)
update_plot()
3. Self-Assessment#
import ipywidgets as widgets
from IPython.display import display, Markdown, clear_output
# Define quiz questions, options, and correct answers
quiz_data = [
{
"question": "Which of the following parameters is **not** included in Terzaghi’s original bearing capacity equation?",
"options": ["Cohesion (c)", "Overburden pressure (q)", "Length of foundation (L)", "Unit weight of soil (γ)"],
"answer": "Length of foundation (L)"
},
{
"question": "What additional factor does Meyerhof’s method introduce compared to Terzaghi’s?",
"options": ["Soil compressibility", "Foundation shape and depth", "Water table correction", "Soil anisotropy"],
"answer": "Foundation shape and depth"
},
{
"question": "Hansen’s method includes which of the following factors in the bearing capacity equation?",
"options": ["Shape, depth, and inclination factors", "Only shape and depth factors", "Only inclination factors", "None of the above"],
"answer": "Shape, depth, and inclination factors"
},
{
"question": "According to the bearing capacity factor table, what is the value of Nq when the internal friction angle φ = 30°?",
"options": ["10.6", "18.4", "27.7", "7.4"],
"answer": "18.4"
},
{
"question": "In the Python code, what does the function interpret_results() primarily do?",
"options": ["Calculates the average bearing capacity", "Compares results from different methods and provides recommendations", "Plots the bearing capacity values", "Adjusts the input parameters"],
"answer": "Compares results from different methods and provides recommendations"
},
{
"question": "In the simplified Hansen’s method in the code, how is the shape factor sc calculated?",
"options": ["1 + 0.3 B/L", "1 - 0.4 B/L", "1 + 0.2 B/L", "1 + 0.5 B/L"],
"answer": "1 + 0.2 B/L"
},
{
"question": "According to the interpretation logic, when is further investigation recommended?",
"options": ["When all methods give the same result", "When max/min > 1.5", "When max/min < 1.5", "When Terzaghi’s method is the lowest"],
"answer": "When max/min > 1.5"
},
{
"question": "What is the effect of increasing the foundation width B on the bearing capacity?",
"options": ["It decreases the bearing capacity", "It has no effect", "It increases the bearing capacity", "It only affects Hansen’s method"],
"answer": "It increases the bearing capacity"
},
{
"question": "Which of the following is **not** an assumption of Terzaghi’s method?",
"options": ["Soil is homogeneous and isotropic", "Load is applied eccentrically", "Foundation is shallow", "Load is vertical and central"],
"answer": "Load is applied eccentrically"
},
{
"question": "Which method is most suitable for complex soil conditions and inclined loads?",
"options": ["Terzaghi’s Method", "Meyerhof’s Method", "Hansen’s Method", "None of the above"],
"answer": "Hansen’s Method"
}
]
# Function to create a widget for each quiz question
def create_quiz_widget(question, options, correct_answer):
output = widgets.Output()
radio = widgets.RadioButtons(options=options, layout={'width': 'max-content'})
check_button = widgets.Button(description="Check Answer", button_style='info')
def on_check_clicked(b):
with output:
clear_output()
if radio.value == correct_answer:
display(Markdown("✅ **Correct!**"))
else:
display(Markdown(f"❌ **Incorrect.** The correct answer is: **{correct_answer}**"))
check_button.on_click(on_check_clicked)
display(Markdown(f"### {question}"))
display(radio, check_button, output)
# Display all quiz widgets
for q in quiz_data:
create_quiz_widget(q["question"], q["options"], q["answer"])
Which of the following parameters is not included in Terzaghi’s original bearing capacity equation?
What additional factor does Meyerhof’s method introduce compared to Terzaghi’s?
Hansen’s method includes which of the following factors in the bearing capacity equation?
According to the bearing capacity factor table, what is the value of Nq when the internal friction angle φ = 30°?
In the Python code, what does the function interpret_results() primarily do?
In the simplified Hansen’s method in the code, how is the shape factor sc calculated?
According to the interpretation logic, when is further investigation recommended?
What is the effect of increasing the foundation width B on the bearing capacity?
Which of the following is not an assumption of Terzaghi’s method?
Which method is most suitable for complex soil conditions and inclined loads?
import ipywidgets as widgets
from IPython.display import display, Markdown
# Define reflective and conceptual questions
questions = [
"Why do different bearing capacity methods (Terzaghi, Meyerhof, Hansen) yield different results for the same soil and foundation conditions?",
"How would you decide which method to use in a real-world project?",
"What are the potential consequences of overestimating vs. underestimating bearing capacity in foundation design?",
"How does the inclusion of shape, depth, and inclination factors in Hansen’s method improve the accuracy of bearing capacity predictions?",
"How would you validate the soil parameters (e.g., cohesion, unit weight, friction angle) used in bearing capacity calculations?",
"Explain the physical meaning of each term in Terzaghi’s bearing capacity equation.",
"What is the role of the bearing capacity factors Nc, Nq, and Nγ? How do they relate to the internal friction angle φ?",
"Why is the width of the foundation (B) included in the bearing capacity equations?",
"Compare the assumptions made in Terzaghi’s method with those in Meyerhof’s and Hansen’s.",
"How would the presence of groundwater near the foundation level affect bearing capacity?"
]
# Display each question with a text area for user input
for i, q in enumerate(questions, 1):
display(Markdown(f"### Reflective Question {i}"))
display(Markdown(q))
display(widgets.Textarea(
placeholder='Type your answer here...',
layout=widgets.Layout(width='100%', height='100px')
))
Reflective Question 1
Why do different bearing capacity methods (Terzaghi, Meyerhof, Hansen) yield different results for the same soil and foundation conditions?
Reflective Question 2
How would you decide which method to use in a real-world project?
Reflective Question 3
What are the potential consequences of overestimating vs. underestimating bearing capacity in foundation design?
Reflective Question 4
How does the inclusion of shape, depth, and inclination factors in Hansen’s method improve the accuracy of bearing capacity predictions?
Reflective Question 5
How would you validate the soil parameters (e.g., cohesion, unit weight, friction angle) used in bearing capacity calculations?
Reflective Question 6
Explain the physical meaning of each term in Terzaghi’s bearing capacity equation.
Reflective Question 7
What is the role of the bearing capacity factors Nc, Nq, and Nγ? How do they relate to the internal friction angle φ?
Reflective Question 8
Why is the width of the foundation (B) included in the bearing capacity equations?
Reflective Question 9
Compare the assumptions made in Terzaghi’s method with those in Meyerhof’s and Hansen’s.
Reflective Question 10
How would the presence of groundwater near the foundation level affect bearing capacity?