Concrete Column Design Tutorial (IS 456:2000)
This tutorial demonstrates reinforced concrete column design following IS 456:2000 using the StructEngine-v2 API.
—
Problem Statement
Design a short rectangular concrete column with the following parameters:
Column dimensions: 300mm × 450mm (B × D)
Unsupported length: 3000mm (both directions)
Loading: - Axial load: 1500 kN (factored) - Moment about major axis: 150 kN-m - Moment about minor axis: 0 kN-m
Materials: - Concrete grade: M30 (fck = 30 N/mm²) - Steel grade: Fe 415 (fy = 415 N/mm²)
Clear cover: 40 mm
Design per: IS 456:2000 Clause 39
—
Step 1: Construct Input
Create the input data structure:
from api.app.calculators.concrete.conc_column_design import ColumnDesignInput
# Column design input per IS 456:2000
input_data = ColumnDesignInput(
width=300, # mm (B)
depth=450, # mm (D)
unsupported_length_x=3000, # mm
unsupported_length_y=3000, # mm
concrete_grade="M30", # fck = 30 N/mm²
steel_grade="Fe415", # fy = 415 N/mm²
axial_load=1500, # kN (factored Pu)
moment_x=150, # kN-m (about major axis)
moment_y=0, # kN-m (about minor axis)
clear_cover=40, # mm
main_bar_diameter=20, # mm (assumed)
tie_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/column_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/column_design/calculate" \\
-H "Content-Type: application/json" \\
-d '{
"width": 300,
"depth": 450,
"unsupported_length_x": 3000,
"unsupported_length_y": 3000,
"concrete_grade": "M30",
"steel_grade": "Fe415",
"axial_load": 1500,
"moment_x": 150,
"moment_y": 0,
"clear_cover": 40,
"main_bar_diameter": 20,
"tie_diameter": 8
}'
—
Step 3: Understanding Output
The API returns comprehensive results:
{
"inputs": { ... }, # Echo of input
# Material properties
"fck": 30.0, # N/mm²
"fy": 415.0, # N/mm²
# Geometric properties
"effective_depth_x": 405, # mm (D - cover - tie - bar_dia/2)
"effective_depth_y": 255, # mm (B - cover - tie - bar_dia/2)
"gross_area": 135000, # mm² (B × D)
# Slenderness check (IS 456 Clause 25.1.2)
"slenderness_ratio_x": 20.0, # lex/D
"slenderness_ratio_y": 20.0, # ley/B
"column_type": "short", # Both < 12 for braced columns
# Effective length (IS 456 Clause 25.2)
"effective_length_x": 3000, # mm (0.65 × unsupported for both ends fixed)
"effective_length_y": 3000, # mm
# Moments (IS 456 Clause 39.7.1)
"moment_min_ecc": 45, # kN-m (Pu × emin, emin = L/500 + D/30)
"moment_slenderness": 0, # kN-m (0 for short columns)
"design_moment_x": 150, # kN-m (max of applied, min_ecc, slenderness)
"design_moment_y": 45, # kN-m (min eccentricity)
# Capacity (IS 456 Clause 39.4)
"axial_capacity": 2850, # kN (Pu,max)
"required_steel_area": 2400, # mm² (Asc)
"min_steel_area": 1080, # mm² (0.8% of Ag)
"max_steel_area": 5400, # mm² (4% of Ag)
"provided_steel_area": 2512, # mm² (8-20mm dia bars)
# Reinforcement details
"main_bars_count": 8,
"main_bars_description": "8 nos. 20mm dia bars",
"ties_spacing": 200, # mm
"ties_description": "8mm dia @ 200mm c/c",
# Checks
"slenderness_check": "PASS", # Short column
"capacity_check": "PASS", # Pu < Pu,max
"steel_check": "PASS", # Min < Asc < Max
"status": "PASS",
# IS code references
"remarks": [
"Design complies with IS 456:2000",
"Column type: Short (slenderness < 12)",
"Capacity: Clause 39.4",
"Slenderness: Clause 25.1.2",
"Minimum eccentricity: Clause 25.4"
]
}
—
Step 4: IS Code Validation
### 4.1 Slenderness Ratio (IS 456 Clause 25.1.2)
# Effective length (assuming both ends restrained)
lex = 0.65 × unsupported_length_x = 0.65 × 3000 = 1950 mm
ley = 0.65 × unsupported_length_y = 0.65 × 3000 = 1950 mm
# Slenderness ratio
λx = lex / D = 1950 / 450 = 4.33
λy = ley / B = 1950 / 300 = 6.5
# Classification (IS 456 Clause 25.1.2)
# Short column if λ < 12 (for braced columns)
# Both 4.33 and 6.5 < 12 → SHORT COLUMN ✓
### 4.2 Minimum Eccentricity (IS 456 Clause 25.4)
# Minimum eccentricity
emin = max(L/500 + D/30, 20mm)
emin_x = max(3000/500 + 450/30, 20) = max(6 + 15, 20) = 21 mm
emin_y = max(3000/500 + 300/30, 20) = max(6 + 10, 20) = 20 mm
# Minimum moment
M_min = Pu × emin
M_min_x = 1500 × 21 / 1000 = 31.5 kN-m
M_min_y = 1500 × 20 / 1000 = 30 kN-m
# Design moment = max(applied, minimum)
Mux = max(150, 31.5) = 150 kN-m ✓
Muy = max(0, 30) = 30 kN-m ✓
### 4.3 Axial Capacity (IS 456 Clause 39.4)
# For short columns with helical/tied reinforcement
Pu,max = 0.4 × fck × Ac + 0.67 × fy × Asc
# Where:
# Ac = Ag - Asc (area of concrete)
# Ag = B × D = 300 × 450 = 135,000 mm²
# Assume Asc = 2400 mm² (to be verified)
Ac = 135,000 - 2400 = 132,600 mm²
Pu,max = 0.4 × 30 × 132,600 + 0.67 × 415 × 2400
Pu,max = 1,591,200 + 667,320
Pu,max = 2,258,520 N = 2258.5 kN
# Check: Pu (1500 kN) < Pu,max (2258.5 kN) ✓
### 4.4 Steel Area Limits (IS 456 Clause 26.5.3.1)
# Minimum steel
Asc,min = 0.8% × Ag = 0.008 × 135,000 = 1080 mm²
# Maximum steel
Asc,max = 4% × Ag = 0.04 × 135,000 = 5400 mm²
# Provided steel (8-20mm bars)
Asc,prov = 8 × π × 10² = 8 × 314 = 2512 mm²
# Check: 1080 < 2512 < 5400 ✓
### 4.5 Tie Spacing (IS 456 Clause 26.5.3.2)
# Maximum tie spacing
s_max = min(
least lateral dimension,
16 × main bar diameter,
300 mm
)
s_max = min(300, 16 × 20, 300) = min(300, 320, 300) = 300 mm
# Provided: 200 mm < 300 mm ✓
—
Step 5: Complete Working Example
Full Python script:
import requests
def design_column():
"""Complete column design example per IS 456:2000."""
# Input data
payload = {
"width": 300,
"depth": 450,
"unsupported_length_x": 3000,
"unsupported_length_y": 3000,
"concrete_grade": "M30",
"steel_grade": "Fe415",
"axial_load": 1500,
"moment_x": 150,
"moment_y": 0,
"clear_cover": 40,
"main_bar_diameter": 20,
"tie_diameter": 8
}
# API call
response = requests.post(
"http://localhost:8000/api/calculators/column_design/calculate",
json=payload
)
if response.status_code == 200:
result = response.json()
# Display results
print("="*60)
print("CONCRETE COLUMN DESIGN (IS 456:2000)")
print("="*60)
print(f"Section: {payload['width']}mm × {payload['depth']}mm")
print(f"Length: {payload['unsupported_length_x']}mm")
print(f"Materials: {payload['concrete_grade']}, {payload['steel_grade']}")
print()
print("LOADING:")
print(f" Axial load: {payload['axial_load']}kN")
print(f" Moment (Mx): {payload['moment_x']}kN-m")
print()
print("SLENDERNESS:")
print(f" Ratio (x): {result['slenderness_ratio_x']}")
print(f" Ratio (y): {result['slenderness_ratio_y']}")
print(f" Type: {result['column_type'].upper()}")
print()
print("CAPACITY:")
print(f" Axial capacity: {result['axial_capacity']}kN")
print(f" Applied load: {payload['axial_load']}kN")
print(f" Utilization: {payload['axial_load']/result['axial_capacity']*100:.1f}%")
print()
print("REINFORCEMENT:")
print(f" Required steel: {result['required_steel_area']}mm²")
print(f" Provided: {result['main_bars_description']}")
print(f" Area: {result['provided_steel_area']}mm²")
print(f" Ties: {result['ties_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_column()
—
Common Pitfalls
Slenderness classification: Always check effective length factors (IS 456 Table 28)
Minimum eccentricity: Don’t forget L/500 + D/30 requirement (Clause 25.4)
Short vs long columns: λ < 12 for short (braced), different formulas apply
Steel limits: 0.8% minimum, 4% maximum (Clause 26.5.3.1)
Tie spacing: Must be ≤ min(least dimension, 16φ, 300mm)
Biaxial bending: Use interaction curves if both Mx and My are significant
—
Comparison: Short vs Long Columns
Short Columns (λ < 12): - No slenderness moment - Design for Pu + M_min_ecc - Simpler analysis
Long Columns (λ ≥ 12): - Additional slenderness moment (IS 456 Clause 39.7.1) - M_add = (Pu × L²) / (2000 × D × 1000) - More complex interaction diagrams
—
See Also
Concrete Beam Design Tutorial (IS 456:2000) - Concrete beam design (IS 456)
Steel Base Plate Design Tutorial (IS 800:2007) - Steel base plate (IS 800)
Section Properties Workflow Tutorial - Calculator chaining workflow
Concrete Design Module - Full concrete module API reference