Module: vernastruct.analysis.timber.check_round_timber_beam
Code basis: NDS (National Design Specification for Wood Construction), allowable-stress format, as implemented for heritage athel-timber roof joists.
Status: ✅ PASS — software matches hand calculation exactly.
A simply-supported round athel-timber joist spans between two masonry walls in a traditional roof, carrying a uniformly distributed service (unfactored) load.
| Input | Symbol | Value |
|---|---|---|
| Trunk diameter | d | 150 mm |
| Span | L | 2.50 m |
| Service UDL | w | 0.060 t/m |
| Material | — | Athel (Traditional Heritage) |
| Modulus of elasticity | E | 7.5 GPa |
| Allowable bending stress | f_b | 7.0 MPa |
| Allowable shear stress | f_v | 0.9 MPa |
| Load duration factor | C_D | 0.9 |
| Moisture factor | C_M | 1.0 |
| Size factor | C_F | 1.0 |
| Creep (long-term) multiplier | k_cr | 2.0 |
| Deflection limit (SLS) | — | L / 360 |
| Deflection limit (long-term) | — | L / 240 |
Unit convention: 1 tonne-force = 9.80665 kN (matches core.units.TON_TO_KN).
Section properties (solid circular, d = 0.150 m):
A = π d² / 4 = π (0.150)² / 4 = 1.767146e-2 m²
I = π d⁴ / 64 = π (0.150)⁴ / 64 = 2.485049e-5 m⁴
Z = π d³ / 32 = π (0.150)³ / 32 = 3.313399e-4 m³
Actions (simply-supported beam, UDL):
w = 0.060 t/m × 9.80665 = 0.58840 kN/m
M = w L² / 8 = 0.58840 × 2.50² / 8 = 0.45969 kN·m = 0.046875 t·m
V = w L / 2 = 0.58840 × 2.50 / 2 = 0.73550 kN = 0.075000 t
Stresses:
σ = M / Z = 459.69 N·m / 3.313399e-4 m³ = 1.3874 MPa
τ = 4V / 3A = 4 × 735.50 N / (3 × 1.767146e-2 m²) = 0.0555 MPa (solid circular section)
Allowable stresses:
f_b,adj = f_b × C_D × C_M × C_F = 7.0 × 0.9 × 1.0 × 1.0 = 6.30 MPa
f_v,adj = f_v × C_M = 0.9 × 1.0 = 0.90 MPa
Deflection:
δ_SLS = 5 w L⁴ / (384 E I)
= 5 × 588.40 N/m × 2.50⁴ / (384 × 7.5e9 Pa × 2.485049e-5 m⁴)
= 1.6057 mm
limit_SLS = L / 360 = 2500 mm / 360 = 6.9444 mm
δ_long-term = δ_SLS × k_cr = 1.6057 × 2.0 = 3.2115 mm
limit_long-term = L / 240 = 2500 / 240 = 10.4167 mm
| Check | Hand calc | Software (check_round_timber_beam) |
Match | Pass? |
|---|---|---|---|---|
| Bending moment M | 0.046875 t·m | 0.046875 t·m | ✅ exact | — |
| Shear V | 0.075000 t | 0.075000 t | ✅ exact | — |
| Bending stress σ | 1.3874 MPa | 1.3874 MPa | ✅ exact | σ ≤ 6.30 → PASS |
| Shear stress τ | 0.0555 MPa | 0.0555 MPa | ✅ exact | τ ≤ 0.90 → PASS |
| SLS deflection | 1.6057 mm | 1.6057 mm | ✅ exact | ≤ 6.9444 → PASS |
| Long-term deflection | 3.2115 mm | 3.2115 mm | ✅ exact | ≤ 10.4167 → PASS |
All four limit-state checks pass by a wide margin (utilization ≈ 22% on bending, the governing check), as expected for a conservatively small joist load.
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.150),
span_m=2.50,
material=athel,
w_service_ton_per_m=0.060,
modifiers=TimberModifiers(CD=0.9, CM=1.0, CF=1.0, k_creep=2.0),
)
assert result.ok
This exact case is pinned as an automated regression test in
tests/test_verification_cases.py::test_vc01_timber_joist_bending —
if any future code change alters these numbers, the test suite will fail.
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.