Stress distribution under loads¶
The classical elastic solutions for stress beneath surface loads — Boussinesq (1885), Westergaard (1938), Newmark / Fadum (1935, 1948) — plus the 2:1 empirical approximation used in everyday practice.
Quick examples¶
import geoeq as ge
# Concentrated point load
ge.boussinesq_point(P=100, z=2, r=0) # 11.94 kPa under the load
ge.boussinesq_point(P=100, z=2, r=3) # 0.66 kPa, off-axis
# Infinite line load (kN per m of line)
ge.boussinesq_line(q=50, z=3, x=0)
# Uniformly loaded strip of width B
ge.boussinesq_strip(q=100, B=2, z=1, x=0)
# Centreline stress under a uniformly loaded circle
ge.boussinesq_circular(q=100, R=2, z=2) # 64.65 kPa — matches Das Table 6.6
# Rectangle B x L (Newmark/Fadum via corner influence)
ge.boussinesq_rect(q=100, B=4, L=6, z=2, position="centre")
Newmark / Fadum influence value¶
For a corner of a \(B \times L\) rectangle at depth \(z\), with \(m = B/z\) and \(n = L/z\):
Stress under the centre of a rectangle is then computed by superposition of four corner-rectangles each of size \((B/2) \times (L/2)\).
Pressure bulb¶
The "pressure bulb" — the locus of points carrying a given percentage of the surface stress — is the picture textbooks use to explain why footings need to consider deep soil:
ge.stress_isobar_plot().Westergaard for stratified media¶
When alternating thin stiff/soft layers prevent lateral straining, Westergaard's solution is more appropriate than Boussinesq:
2:1 approximation¶
The 2:1 spread is empirical but widely used for spread footings up to \(z \approx 2B\):
API reference¶
boussinesq_point
¶
Vertical stress under a point load on a semi-infinite elastic mass.
delta_sigma_z = (3 P / (2 pi z^2)) * (1 / (1 + (r/z)^2))^(5/2)
| PARAMETER | DESCRIPTION |
|---|---|
P
|
Point load (kN).
TYPE:
|
z
|
Depth below ground surface (m).
TYPE:
|
r
|
Radial distance from the line of action (m).
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
delta_sigma
|
Vertical stress increment (kPa).
TYPE:
|
Reference
Boussinesq (1885); Das (2010) Eq. 6.4.
Source code in geoeq/design/boussinesq.py
boussinesq_line
¶
Vertical stress under an infinite line load q (kN/m).
delta_sigma_z = (2 q / pi z) * 1 / (1 + (x/z)^2)^2
Reference
Das (2010) Eq. 6.7.
Source code in geoeq/design/boussinesq.py
boussinesq_strip
¶
Vertical stress under a uniformly loaded infinite strip of width B.
delta_sigma_z = (q / pi) * [ alpha + sin(alpha) cos(alpha + 2 beta) ]
where alpha and beta are the angles subtended at the point by the edges of the strip (Das Eq. 6.10).
| PARAMETER | DESCRIPTION |
|---|---|
q
|
Surface pressure (kPa).
TYPE:
|
B
|
Strip width (m).
TYPE:
|
z
|
Depth (m).
TYPE:
|
x
|
Horizontal distance from the centre of the strip (m).
TYPE:
|
Reference
Das (2010) Eq. 6.10.
Source code in geoeq/design/boussinesq.py
boussinesq_circular
¶
Vertical stress on the centreline beneath a uniformly loaded circle.
delta_sigma_z = q * [ 1 - 1 / (1 + (R/z)^2)^(3/2) ]
Reference
Das (2010) Eq. 6.15.
Source code in geoeq/design/boussinesq.py
newmark_influence
¶
Fadum / Newmark influence value I for a rectangle B x L at depth z.
m = B / z, n = L / z
| RETURNS | DESCRIPTION |
|---|---|
I
|
Dimensionless influence factor (Das Eq. 6.30). The stress at the corner of a uniformly loaded B x L rectangle is q * I.
TYPE:
|
Reference
Fadum (1948); Newmark (1935); Das Eq. 6.30, Table 6.5.
Source code in geoeq/design/boussinesq.py
boussinesq_rect
¶
Vertical stress under a uniformly loaded rectangle B x L.
Uses Fadum (1948) corner influence value, with superposition for 'centre' (4x mB/2 x L/2 sub-rectangles) and 'edge_mid' positions.
| PARAMETER | DESCRIPTION |
|---|---|
q
|
Surface pressure (kPa).
TYPE:
|
B
|
Rectangle dimensions (m). Convention: L >= B.
TYPE:
|
L
|
Rectangle dimensions (m). Convention: L >= B.
TYPE:
|
z
|
Depth below surface (m).
TYPE:
|
position
|
'corner' -- under one corner of the rectangle 'centre' -- under the centre (sum of 4 sub-rectangles) 'edge' -- under the midpoint of a long edge (2 sub-rectangles)
TYPE:
|
Reference
Fadum (1948); Das (2010) Eq. 6.29-6.31.
Source code in geoeq/design/boussinesq.py
westergaard_point
¶
Westergaard vertical stress for a point load on a layered medium.
delta_sigma_z = (P / (pi z^2)) * eta / (eta^2 + (r/z)^2)^(3/2)
where eta = sqrt( (1 - 2mu) / (2 - 2mu) ).
For thinly stratified soils (alternating stiff/soft) the Westergaard solution gives lower stresses than Boussinesq.
Reference
Westergaard (1938); Das (2010) Eq. 6.13.
Source code in geoeq/design/boussinesq.py
stress_2to1
¶
2:1 vertical-spread approximation for a B x L footing.
delta_sigma_z = q * B * L / ((B + z) * (L + z))
Crude but engineering-useful for spread footings up to z ~ 2B.
Reference
Das (2010) Eq. 6.34.
Source code in geoeq/design/boussinesq.py
stress_bulb
¶
Compute a stress-bulb mesh under a point load.
| RETURNS | DESCRIPTION |
|---|---|
dict with keys 'z', 'r', 'sigma' -- 2D grids suitable for contourf.
|
|
Reference
Das (2010) Fig. 6.6 (qualitative isobar pattern).
Source code in geoeq/design/boussinesq.py
stress_isobar_plot
¶
stress_isobar_plot(P: float = 100.0, z_max: float = 8.0, r_max: float = 4.0, levels=None, ax=None, save_as: str = None)
Stress isobars (pressure bulb) beneath a point load.
| PARAMETER | DESCRIPTION |
|---|---|
P
|
Point load (kN).
TYPE:
|
z_max
|
Plot extents (m).
TYPE:
|
r_max
|
Plot extents (m).
TYPE:
|
levels
|
Iso-stress contour levels (kPa).
TYPE:
|
