VernaStruct
VernaStruct
Verification Manual
Manual index vernastruct.com

VC-04 — Pad Footing: Meyerhof Effective Width, Bearing, Elastic Settlement

Module: vernastruct.modules.foundations.service.FoundationDesignService Code basis: Meyerhof's effective-area method for eccentric loading (B′ = B − 2e, kern limit e ≤ B/6); applied pressure vs presumptive allowable bearing pressure (FS = 3 already included in the soil library values); simplified elastic settlement Δ = q_net·B·Iw / E_s. Status: ✅ PASS — software matches hand calculation exactly after fixing a defect this case uncovered (see §5).


1. Problem statement

A square pad footing under a heritage building column, on medium dense sand, carries a vertical service load with a moment (e.g. from roof eccentricity or lateral action), engaging Meyerhof's effective-width method.

Input Symbol Value
Footing type Pad (isolated)
Width B 1.50 m
Length L 1.50 m
Embedment depth Df 0.80 m
Soil Medium Dense Sand (library)
Allowable bearing pressure q_all 200 kPa (presumptive, FS = 3)
Soil modulus E_s 35 MPa
Vertical service load P 25.0 t
Moment M 2.50 t·m

Module conventions (documented, matched in the hand calc): tonne → kN with 9.81; settlement influence factor Iw = 0.82 (flexible rectangular); soil unit weight 18 kN/m³ for overburden relief; settlement computed on the full width B (not B′); settlement limit 25 mm (heritage default); eccentricity assumed in the B direction only.

2. Hand calculation

Eccentricity (kern check):

e = M / P = 2.50 / 25.0 = 0.1000 m
e_limit = B/6 = 1.50 / 6 = 0.2500 m → e within kern ✓ (no uplift)

Bearing (Meyerhof effective area):

B′ = B − 2e = 1.50 − 0.20 = 1.30 m ;  L′ = L = 1.50 m
A′ = 1.30 × 1.50 = 1.95 m²
P  = 25.0 × 9.81 = 245.25 kN
q  = P / A′ = 245.25 / 1.95 = 125.7692 kPa
util = 125.7692 / 200 = 0.62885   ← governs

Elastic settlement:

q_net = q − γ·Df = 125.7692 − 18 × 0.80 = 111.3692 kPa
Δ = q_net × B × Iw / E_s = 111.3692 × 1.50 × 0.82 / 35 000 kPa
  = 3.9138 mm ≤ 25 mm ✓

3. Results comparison

Check Hand calc Software (FoundationDesignService) Match Pass?
Eccentricity e 0.1000 m 0.1000 m ✅ exact ≤ 0.25 → PASS
Applied pressure q 125.7692 kPa 125.7692 kPa ✅ exact (after fix, §5)
Bearing utilization 0.62885 0.62885 ✅ exact ≤ 1.0 → PASS
Settlement Δ 3.9138 mm 3.9138 mm ✅ exact ≤ 25 → PASS

Bearing governs at 63% utilization — a sensible working level for a serviceably loaded heritage column footing.

Documented limitations: allowable pressure is presumptive (from the soil library, not computed from φ/c via the full Meyerhof N-factor equation); settlement is a one-layer elastic estimate; eccentricity in one direction only. Real projects require a geotechnical report — stated in the soil library header and the report disclaimer.

4. Reproducing this check

from vernastruct.modules.foundations.models import FoundationInput
from vernastruct.modules.foundations.service import FoundationDesignService

result = FoundationDesignService().design(FoundationInput(
    type="pad", width_m=1.50, length_m=1.50, depth_m=0.80,
    soil_id="medium_sand",
    vertical_load_ton=25.0, moment_ton_m=2.50,
))
assert result.ok

Pinned as tests/test_verification_cases.py::test_vc04_meyerhof_pad_footing.

5. Defect found and fixed by this verification case

The first run of this hand calculation exposed a units defect in foundations/service.py, in the pad branch only: the applied pressure was computed as (P [kN] × 1000) / A [m²], yielding Pa, but treated as kPa — overstating the applied bearing pressure by a factor of 1000 (software reported q = 125 769 kPa against the correct 125.77 kPa). The error was in the conservative direction — any realistic pad footing would fail the bearing check — but it made the pad option unusable, and it dragged the settlement estimate up by the same factor. The strip branch was and is correct (kN/m ÷ m = kPa). Every pre-existing unit test used type="strip", so the pad branch had never been numerically exercised.

Fix (2026-07-09): pad pressure corrected to q = P [kN] / A′ [m²] (kPa directly); all 73 tests pass and the exact-match comparison above is post-fix.

Together with VC-03 (walls, 1000× in the opposite direction), this is the second units defect caught by the verification library in two consecutive cases — hand-calculation cross-checking is doing exactly the job the roadmap assigned to it.


Every case in this manual is pinned as an automated regression test that runs on every build — no future change can silently break a verified result. © 2026 Hesham Salama.