VernaStruct
VernaStruct
Verification Manual
Manual index vernastruct.com

VC-03 — Adobe Bearing Wall: Compression, Out-of-Plane Bending, Shear (SBC 902-2024 §806)

Module: vernastruct.modules.walls.service.WallDesignService Code basis: SBC 902-2024 §806 (unburned clay masonry / adobe), TMS 402 simplified axial capacity, ASCE 41 / ICOMOS ISCARSAH damage-factor capacity reduction, SBC 902-2024 §705.2 heritage lateral-load reduction. Status: ✅ PASS — software matches hand calculation exactly after fixing a defect this case uncovered (see §5).


1. Problem statement

An existing single-storey adobe bearing wall in moderate condition carries a roof line load and a wind pressure. This case exercises the full heritage chain: damage-factor reduction, the §705.2 lateral reduction, the §806.3 H/t limit, and (by confirming it is not binding) the §806.7 shear cap.

Input Symbol Value
Wall length L 4.00 m
Wall height h 3.00 m
Wall thickness t 0.55 m
Material Mud brick / Adobe (regional handmade)
Compressive strength f_m 0.12 MPa (field rupture testing, 2024)
Shear strength f_v 0.07 MPa
Design state / damage Existing / Moderate
Damage reduction factor k_d 0.75 (ASCE 41 / ISCARSAH)
Axial line load (roof) p 0.80 t/m
Wind pressure (SBC 301 basis) w 0.50 kPa
Heritage lateral reduction §705.2 → 75% applied
Storeys 1 (H/t ≤ 6 per §806.3)
Moisture protection Provided (§806.2 satisfied)

Unit convention: the walls module converts kN → tonne with 9.81 kN/t (hardcoded in service.py), not core.units.TON_TO_KN = 9.80665. Hand-calc tonne values below use 9.81 to match. Utilization ratios are unaffected (the factor cancels). Unifying this convention is a known cleanup item.

2. Hand calculation

Effective strengths (damage factor k_d = 0.75):

f_m,eff = 0.12 × 0.75 = 0.09 MPa
f_v,eff = 0.07 × 0.75 = 0.0525 MPa
§806.7 cap check: 0.0525 MPa < 0.0827 MPa → cap NOT binding ✓

Slenderness (§806.3, single storey):

h/t = 3.00 / 0.55 = 5.45455 ≤ 6 → OK

Axial (TMS 402 simplified):

A     = L t = 4.00 × 0.55 = 2.20 m²
P_cap = 0.80 f_m,eff A (1 − (h/(40t))²)
      = 0.80 × 0.09e6 × 2.20 × (1 − (3.00/22.0)²)
      = 158 400 × 0.981405 = 155 454.5 N = 155.455 kN = 15.8465 t
P     = p L = 0.80 × 4.00 = 3.20 t
util  = 3.20 / 15.8465 = 0.20194   ← governs

Out-of-plane bending (per metre width, applied wind = 0.50 × 0.75 = 0.375 kPa):

M = w h²/8 = 0.375 × 3.00²/8 = 0.421875 kN·m/m = 0.0430046 t·m/m
S = t²/6 = 0.55²/6 = 0.0504167 m³/m
M_cap = f_m,eff × S = 90 kPa × 0.0504167 = 4.5375 kN·m/m = 0.4625382 t·m/m
util  = 0.421875 / 4.5375 = 0.09298

In-plane shear:

V     = w (h/2) L = 0.375 × 1.50 × 4.00 = 2.25 kN = 0.2293578 t
V_cap = f_v,eff A = 52.5 kPa × 2.20 = 115.50 kN = 11.77370 t
util  = 2.25 / 115.50 = 0.01948

3. Results comparison

Check Hand calc Software (WallDesignService) Match Pass?
Slenderness h/t 5.45455 5.45455 ✅ exact ≤ 6 → PASS
Axial P_applied 3.20000 t 3.20000 t ✅ exact
Axial P_capacity 15.8465 t 15.8465 t ✅ exact util 0.202 → PASS
Bending M_applied 0.0430046 t·m/m 0.0430046 t·m/m ✅ exact
Bending M_capacity 0.4625382 t·m/m 0.4625382 t·m/m ✅ exact (after fix, §5) util 0.093 → PASS
Shear V_applied 0.2293578 t 0.2293578 t ✅ exact
Shear V_capacity 11.77370 t 11.77370 t ✅ exact util 0.019 → PASS
§806.7 shear cap not binding adobe_shear_cap_applied=False
§705.2 reduction 0.375 kPa lateral_reduction_applied=True

Axial compression governs at 20% utilization — a healthy margin typical of massive adobe walls, where slenderness and moisture, not stress, are the real constraints.

4. Reproducing this check

from vernastruct.modules.walls.models import WallInput
from vernastruct.modules.walls.service import WallDesignService

result = WallDesignService().design(WallInput(
    design_state="Existing", existing_damage="Moderate",
    length_m=4.0, height_m=3.0, thickness_m=0.55,
    material_id="mud_brick",
    axial_load_ton_per_m=0.80, lateral_load_kPa=0.50,
    moisture_protection_provided=True,
))
assert result.ok

Pinned as tests/test_verification_cases.py::test_vc03_adobe_wall_compression.

5. Defect found and fixed by this verification case

The first run of this hand calculation exposed a units defect in walls/service.py: the out-of-plane bending capacity was computed as f_m [MPa] × 1e6 × S [m³/m], which yields N·m/m, but the value was treated as kN·m/m — overstating bending capacity by a factor of 1000 (software reported M_cap = 462.5 t·m/m against the correct 0.4625 t·m/m). The error was in the unconservative direction: the out-of-plane bending check could never realistically fail. The pre-existing unit test only asserted M_capacity > 0 and could not catch it.

Fix (2026-07-09): conversion corrected to f_m × 1e3 × S (kPa × m³ = kN·m); all 72 tests pass and the exact-match comparison above is post-fix. The in-plane shear path was checked for the same class of error and is correct.

This is precisely why the verification library exists — and why every case is pinned as a regression test.


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.