Module: vernastruct.analysis.timber.check_round_timber_beam
Code basis: NDS allowable-stress format with wet-service factor C_M = 0.8 and
long-term deflection amplification k_cr = 2.0 (NDS 3.5.2, unseasoned timber);
limits L/360 (SLS) and L/240 (long-term).
Status: ✅ PASS — software matches hand calculation exactly; one
reporting-level defect found and fixed (see §5).
Companion case to VC-01, targeting the creep/long-term deflection path: a larger athel joist under a heavy traditional earth-roof load, in wet service (consistent with adobe construction moisture exposure), using unseasoned timber. With k_cr = 2.0 the long-term check must govern: its utilization is always 2·k_cr/3 = 4/3 times the SLS deflection utilization.
| Input | Symbol | Value |
|---|---|---|
| Trunk diameter | d | 200 mm |
| Span | L | 3.50 m |
| Service UDL (earth roof) | w | 0.150 t/m |
| Material | — | Athel (E = 7.5 GPa, f_b = 7.0 MPa, f_v = 0.9 MPa) |
| Load duration factor | C_D | 0.9 |
| Moisture factor (wet service) | C_M | 0.8 |
| Size factor | C_F | 1.0 |
| Creep multiplier (unseasoned) | k_cr | 2.0 |
| Deflection limits | — | L/360 (SLS), L/240 (long-term) |
Unit convention: 1 tonne-force = 9.80665 kN (core.units.TON_TO_KN).
Section properties (solid circular, d = 0.200 m):
A = π d² / 4 = 3.141593e-2 m²
I = π d⁴ / 64 = 7.853982e-5 m⁴
Z = π d³ / 32 = 7.853982e-4 m³
Actions:
w = 0.150 × 9.80665 = 1.4710 kN/m
M = w L² / 8 = 1.4710 × 3.50² / 8 = 2.25246 kN·m = 0.2296875 t·m
V = w L / 2 = 1.4710 × 3.50 / 2 = 2.57425 kN = 0.262500 t
Stresses vs wet-service allowables:
σ = M / Z = 2252.46 / 7.853982e-4 = 2.8679 MPa
f_b,adj = 7.0 × 0.9 × 0.8 × 1.0 = 5.04 MPa → util 0.5690
τ = 4V / 3A = 4 × 2574.25 / (3 × 3.141593e-2) = 0.1093 MPa
f_v,adj = 0.9 × 0.8 = 0.72 MPa → util 0.1517
Deflections:
δ_SLS = 5 w L⁴ / (384 E I)
= 5 × 1470.9975 × 3.50⁴ / (384 × 7.5e9 × 7.853982e-5) = 4.8795 mm
limit_SLS = 3500 / 360 = 9.7222 mm → util 0.5019
δ_LT = k_cr × δ_SLS = 2.0 × 4.8795 = 9.7589 mm
limit_LT = 3500 / 240 = 14.5833 mm → util 0.6692 ← governs
| Check | Hand calc | Software | Match | Pass? |
|---|---|---|---|---|
| Moment M | 0.2296875 t·m | 0.2296875 t·m | ✅ exact | — |
| Shear V | 0.262500 t | 0.262500 t | ✅ exact | — |
| Bending stress σ | 2.8679 MPa | 2.8679 MPa | ✅ exact | ≤ 5.04 → PASS |
| Shear stress τ | 0.1093 MPa | 0.1093 MPa | ✅ exact | ≤ 0.72 → PASS |
| SLS deflection | 4.8795 mm | 4.8795 mm | ✅ exact | ≤ 9.7222 → PASS |
| Long-term deflection | 9.7589 mm | 9.7589 mm | ✅ exact | ≤ 14.5833 → PASS |
| Governing utilization | 0.66918 (long-term) | 0.66918 | ✅ (after fix, §5) | — |
Long-term deflection governs at 67% — the expected controlling limit state for unseasoned round timber under sustained heavy earth-roof loads, and the reason heritage timber assessments must not stop at the short-term check.
from vernastruct.core.sections import RoundTimberSection
from vernastruct.core.materials import TimberMaterial
from vernastruct.core.modifiers import TimberModifiers
from vernastruct.analysis.timber import check_round_timber_beam
athel = TimberMaterial(
id="athel_traditional", display_name_en="Athel (Traditional Heritage)",
display_name_ar="الأثل (تراثي معتمد)",
E_GPa=7.5, rho_kg_m3=700.0, f_b_MPa=7.0, f_v_MPa=0.9,
)
result = check_round_timber_beam(
section=RoundTimberSection(d_m=0.200), span_m=3.50, material=athel,
w_service_ton_per_m=0.150,
modifiers=TimberModifiers(CD=0.9, CM=0.8, CF=1.0, k_creep=2.0),
)
assert result.ok
Pinned as
tests/test_verification_cases.py::test_vc05_timber_longterm_deflection.
All physical quantities matched the hand calculation exactly on first run.
However, the reporting property TimberDesignCheck.utilization_max — used by
the GUI results panel and the full-building PDF/Excel reports — omitted the
long-term deflection ratio from its max(). Since util_LT / util_SLS =
2·k_cr/3, the long-term check governs whenever k_cr > 1.5 (i.e. the default
k_cr = 2.0), so reports systematically understated the governing utilization
(here: reported 0.569 bending instead of the true 0.669). The pass/fail flags
were unaffected — ok always included the long-term check — making this a
reporting defect, not a safety defect.
Fix (2026-07-09): utilization_max now includes
delta_longterm_mm / limit_longterm_mm; all 74 tests pass.
Verification-library score so far: 5 cases → 2 computational unit bugs (VC-03, VC-04) + 1 reporting bug (VC-05) found and fixed.
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.