Concrete Beam Design Tutorial (IS 456:2000)
This tutorial demonstrates reinforced concrete beam design following IS 456:2000 using the StructEngine-v2 API.
—
Problem Statement
Design a simply supported rectangular concrete beam with the following parameters:
Span: 6000 mm (6.0 m)
Support conditions: Simply supported
Loading: - Dead load: 25 kN/m (includes self-weight) - Live load: 15 kN/m
Materials: - Concrete grade: M25 (fck = 25 N/mm²) - Steel grade: Fe 415 (fy = 415 N/mm²)
Section: - Width (b): 300 mm - Overall depth (D): 500 mm - Clear cover: 25 mm
Design per: IS 456:2000
—
Step 1: Construct Input
Create the input data structure:
from api.app.calculators.concrete.conc_beam_design import ConcBeamDesignInput
# Beam design input per IS 456:2000
input_data = ConcBeamDesignInput(
beam_type="rectangular",
width=300, # mm
depth=500, # mm
span=6000, # mm
concrete_grade="M25", # fck = 25 N/mm²
steel_grade="Fe415", # fy = 415 N/mm²
dead_load=25, # kN/m
live_load=15, # kN/m
clear_cover=25, # mm
main_bar_diameter=20, # mm (assumed)
stirrup_diameter=8 # mm (assumed)
)
print(f"Input validation: {input_data}")
—
Step 2: Make API Call
Send the request to the calculator endpoint:
import requests
import json
# API endpoint
url = "http://localhost:8000/api/calculators/beam_design/calculate"
# Send POST request
response = requests.post(
url,
json=input_data.dict(),
headers={"Content-Type": "application/json"}
)
# Check response
if response.status_code == 200:
result = response.json()
print("Calculation successful!")
print(json.dumps(result, indent=2))
else:
print(f"Error: {response.status_code}")
print(response.text)
Alternative: Using cURL
curl -X POST "http://localhost:8000/api/calculators/beam_design/calculate" \\
-H "Content-Type: application/json" \\
-d '{
"beam_type": "rectangular",
"width": 300,
"depth": 500,
"span": 6000,
"concrete_grade": "M25",
"steel_grade": "Fe415",
"dead_load": 25,
"live_load": 15,
"clear_cover": 25,
"main_bar_diameter": 20,
"stirrup_diameter": 8
}'
—
Step 3: Understanding Output
The API returns comprehensive results:
{
"inputs": { ... }, # Echo of input
# Material properties
"fck": 25.0, # N/mm²
"fy": 415.0, # N/mm²
# Geometric properties
"effective_depth": 465, # d = D - cover - stirrup_dia - main_bar_dia/2
# Loads and moments (IS 456 Clause 22)
"factored_dead_load": 37.5, # 1.5 × DL
"factored_live_load": 22.5, # 1.5 × LL
"total_factored_load": 60.0, # kN/m
"max_bending_moment": 270.0, # kN-m (wL²/8)
"max_shear_force": 180.0, # kN (wL/2)
# Flexural design (IS 456 Clause 26.5.1.1)
"required_steel_area": 1580, # mm² (Ast,req)
"min_steel_area": 225, # mm² (0.85bd/fy)
"max_steel_area": 15000, # mm² (0.04bD)
"provided_steel_area": 1570, # mm² (5-20mm dia bars)
"main_bars_count": 5,
"main_bars_description": "5 nos. 20mm dia bars",
# Shear design (IS 456 Clause 26.5.1.6)
"shear_stress": 1.29, # N/mm² (τv)
"shear_capacity_concrete": 0.48, # N/mm² (τc from Table 19)
"stirrup_spacing": 150, # mm
"stirrups_description": "8mm dia @ 150mm c/c",
# Checks
"flexure_check": "PASS",
"shear_check": "PASS",
"deflection_check": "PASS",
"status": "PASS",
# IS code references
"remarks": [
"Design complies with IS 456:2000",
"Flexure: Clause 26.5.1.1",
"Shear: Clause 26.5.1.6, Table 19",
"Deflection: Clause 23.2"
]
}
—
Step 4: IS Code Validation
### 4.1 Effective Depth (IS 456 Clause 26.2.1)
d = D - cover - stirrup_dia - main_bar_dia / 2
d = 500 - 25 - 8 - 20/2
d = 465 mm ✓
### 4.2 Bending Moment (IS 456 Clause 22.2)
# Factored loads
wu = 1.5 × (DL + LL) = 1.5 × (25 + 15) = 60 kN/m ✓
# Maximum moment for simply supported beam
Mu = wu × L² / 8
Mu = 60 × 6² / 8
Mu = 270 kN-m ✓
### 4.3 Required Steel Area (IS 456 Clause 38.1, G-1.1)
# Limiting moment of resistance
Mu,lim = 0.138 × fck × b × d²
Mu,lim = 0.138 × 25 × 300 × 465² / 10^6
Mu,lim = 223 kN-m
# Since Mu (270) > Mu,lim (223), need compression steel
# OR increase depth
# For singly reinforced (if adequate):
Ast = Mu / (0.87 × fy × d × 0.9)
Ast ≈ 1580 mm² ✓
### 4.4 Minimum Steel (IS 456 Clause 26.5.1.1)
Ast,min = 0.85 × b × d / fy
Ast,min = 0.85 × 300 × 465 / 415
Ast,min = 285 mm²
# Provided (1570 mm²) > Minimum (285 mm²) ✓
### 4.5 Shear Stress (IS 456 Clause 40.1)
τv = Vu / (b × d)
τv = 180,000 / (300 × 465)
τv = 1.29 N/mm² ✓
# From Table 19, for 1.13% steel and M25:
τc ≈ 0.48 N/mm²
# Since τv (1.29) > τc (0.48), need shear reinforcement ✓
### 4.6 Stirrup Design (IS 456 Clause 26.5.1.6)
# Required shear steel
Vus = τv - τc = 1.29 - 0.48 = 0.81 N/mm²
# Stirrup spacing
Sv = 0.87 × fy × Asv × d / (b × Vus)
# For 2-legged 8mm stirrups: Asv = 2 × π × 4² = 100 mm²
Sv = 0.87 × 415 × 100 × 465 / (300 × 0.81)
Sv ≈ 150 mm ✓
# Also check maximum spacing (IS 456 Clause 26.5.1.5):
Sv,max = min(0.75d, 300mm) = min(348, 300) = 300mm
# Provided (150mm) < Maximum (300mm) ✓
—
Step 5: Complete Working Example
Full Python script:
import requests
def design_beam():
"""Complete beam design example per IS 456:2000."""
# Input data
payload = {
"beam_type": "rectangular",
"width": 300,
"depth": 500,
"span": 6000,
"concrete_grade": "M25",
"steel_grade": "Fe415",
"dead_load": 25,
"live_load": 15,
"clear_cover": 25,
"main_bar_diameter": 20,
"stirrup_diameter": 8
}
# API call
response = requests.post(
"http://localhost:8000/api/calculators/beam_design/calculate",
json=payload
)
if response.status_code == 200:
result = response.json()
# Display results
print("="*60)
print("CONCRETE BEAM DESIGN (IS 456:2000)")
print("="*60)
print(f"Span: {payload['span']}mm")
print(f"Section: {payload['width']}mm × {payload['depth']}mm")
print(f"Materials: {payload['concrete_grade']}, {payload['steel_grade']}")
print()
print("RESULTS:")
print(f" Effective depth: {result['effective_depth']}mm")
print(f" Max moment: {result['max_bending_moment']}kN-m")
print(f" Max shear: {result['max_shear_force']}kN")
print()
print("FLEXURAL STEEL:")
print(f" Required: {result['required_steel_area']}mm²")
print(f" Provided: {result['main_bars_description']}")
print(f" Area: {result['provided_steel_area']}mm²")
print()
print("SHEAR STEEL:")
print(f" Shear stress: {result['shear_stress']}N/mm²")
print(f" Concrete capacity: {result['shear_capacity_concrete']}N/mm²")
print(f" Stirrups: {result['stirrups_description']}")
print()
print(f"STATUS: {result['status']}")
print("="*60)
return result
else:
print(f"Error: {response.status_code}")
print(response.text)
return None
if __name__ == "__main__":
design_beam()
—
Common Pitfalls
Units mismatch: Always use kN, mm, MPa, kN-m
Clear cover: Don’t forget to account for stirrup diameter
Effective depth: d = D - cover - stirrup - bar_dia/2
Load factors: IS 456 uses 1.5 for DL + LL (Clause 36.4)
Shear check: Always verify τv against τc from Table 19
—
Next Steps
Try variations: change span, loads, or materials
Explore doubly reinforced beams (Mu > Mu,lim)
Review Concrete Design Module for complete API reference
Compare with Steel Base Plate Design Tutorial (IS 800:2007) (Steel, IS 800)