Steel Base Plate Design Tutorial (IS 800:2007)

This tutorial demonstrates steel base plate design following IS 800:2007 using the StructEngine-v2 API.

Problem Statement

Design a base plate for a steel column with the following parameters:

  • Column section: ISHB 300 (I-section, H-beam, 300mm depth)

  • Axial load: 1000 kN (factored)

  • Steel grade: E250 (fy = 250 N/mm²)

  • Concrete grade: M25 (fck = 25 N/mm²)

  • Anchor bolts: - Diameter: 20 mm - Grade: 8.8 (high-strength bolts)

  • Design per: IS 800:2007 Clause 7.4

Step 1: Construct Input

Create the input data structure:

from api.app.calculators.steel.base_plate import BasePlateInput

# Base plate design input per IS 800:2007
input_data = BasePlateInput(
    column_section="ISHB300",       # Standard Indian section
    axial_load=1000,                # kN (factored)
    steel_grade="E250",             # fy = 250 N/mm²
    concrete_grade="M25",            # fck = 25 N/mm²
    anchor_bolt_dia=20,             # mm
    anchor_bolt_grade="8.8",         # High-strength bolts
    edge_distance=50                 # mm (minimum per IS 800)
)

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/base_plate/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/base_plate/calculate" \\
     -H "Content-Type: application/json" \\
     -d '{
       "column_section": "ISHB300",
       "axial_load": 1000,
       "steel_grade": "E250",
       "concrete_grade": "M25",
       "anchor_bolt_dia": 20,
       "anchor_bolt_grade": "8.8",
       "edge_distance": 50
     }'

Step 3: Understanding Output

The API returns comprehensive results:

{
    "inputs": { ... },  # Echo of input

    # Material properties
    "fy": 250.0,        # N/mm² (steel)
    "fck": 25.0,        # N/mm² (concrete)

    # Column section properties (ISHB 300)
    "column_depth": 300,      # mm
    "column_width": 250,      # mm
    "column_flange_thickness": 10.8, # mm
    "column_web_thickness": 7.6,    # mm

    # Bearing pressure (IS 800 Clause 7.4.3.1)
    "bearing_pressure": 2.67,        # N/mm²
    "allowable_bearing_pressure": 5.0, # N/mm² (0.45fck per IS 800)
    "bearing_check": "PASS",

    # Base plate dimensions
    "plate_length": 450,      # mm (L)
    "plate_width": 400,       # mm (B)
    "plate_thickness": 25,    # mm (t)
    "plate_area": 180000,     # mm²

    # Anchor bolt design
    "anchor_bolts_count": 4,
    "anchor_bolt_tension": 45,      # kN per bolt
    "anchor_bolt_capacity": 98,     # kN per bolt
    "anchor_bolt_check": "PASS",

    # Weld design (IS 800 Clause 10.5)
    "weld_size": 6,           # mm (fillet weld)
    "weld_length": 2400,      # mm (total)
    "weld_description": "6mm fillet weld all around",

    # Checks
    "bearing_check": "PASS",
    "plate_bending_check": "PASS",
    "anchor_check": "PASS",
    "weld_check": "PASS",
    "status": "PASS",

    # IS code references
    "remarks": [
        "Design complies with IS 800:2007",
        "Bearing: Clause 7.4.3.1",
        "Plate design: Clause 7.4.3.2",
        "Anchor bolts: Clause 10.3.5",
        "Welds: Clause 10.5"
    ]
}

Step 4: IS Code Validation

### 4.1 Bearing Pressure (IS 800 Clause 7.4.3.1)

# Actual bearing pressure
σbr = P / (L × B)
σbr = 1000 × 1000 / (450 × 400)
σbr = 5.56 N/mm²

# Allowable bearing pressure per IS 800 Clause 7.4.3.1
σbr,allow = 0.45 × fck
σbr,allow = 0.45 × 25
σbr,allow = 11.25 N/mm²

# Check: σbr ≤ σbr,allow
# 5.56 ≤ 11.25  ✓

### 4.2 Plate Thickness (IS 800 Clause 7.4.3.2)

# Critical projection 'a' (distance from column face to plate edge)
a = max((L - D)/2, (B - bf)/2)
# For ISHB300: D = 300mm, bf = 250mm
a = max((450-300)/2, (400-250)/2)
a = max(75, 75) = 75 mm

# Required plate thickness per IS 800 Clause 7.4.3.2
t_req = a × (3 × σbr × γm0 / fy)
# γm0 = 1.10 (partial safety factor)
t_req = 75 × (3 × 5.56 × 1.10 / 250)
t_req  23 mm

# Provided: 25mm > Required: 23mm  ✓

### 4.3 Anchor Bolt Design (IS 800 Clause 10.3.5)

# Tension in bolts (if any uplift or combined loading)
# For pure compression: bolts resist only construction/wind loads

# Bolt capacity per IS 800 Table 6
# For grade 8.8, M20 bolt:
# Tensile strength fu,b = 800 N/mm²
# Stress area = 245 mm² (for M20)

Tb = 0.9 × fu,b × As / γmb
# γmb = 1.25 (partial safety factor for bolts)
Tb = 0.9 × 800 × 245 / 1.25
Tb = 141 kN per bolt

# If 4 bolts: Total capacity = 4 × 141 = 564 kN  ✓

### 4.4 Weld Design (IS 800 Clause 10.5)

# Fillet weld size (typically 6-10mm for base plates)
# Weld strength per IS 800 Clause 10.5.7

# Effective throat thickness
t_e = 0.7 × s = 0.7 × 6 = 4.2 mm

# Weld strength per unit length
f_w = fu / (3 × γmw) = 410 / (3 × 1.25)  189 N/mm²

# Strength per mm length
P_w = f_w × t_e = 189 × 4.2  794 N/mm

# Required weld length (all around column perimeter)
L_w = P / P_w = 1000,000 / 794  1260 mm

# Provided: 2 × (D + bf) = 2 × (300 + 250) = 1100 mm
# Plus corner welds ≈ 2400mm total  ✓

Step 5: Complete Working Example

Full Python script:

import requests

def design_base_plate():
    """Complete base plate design example per IS 800:2007."""

    # Input data
    payload = {
        "column_section": "ISHB300",
        "axial_load": 1000,
        "steel_grade": "E250",
        "concrete_grade": "M25",
        "anchor_bolt_dia": 20,
        "anchor_bolt_grade": "8.8",
        "edge_distance": 50
    }

    # API call
    response = requests.post(
        "http://localhost:8000/api/calculators/base_plate/calculate",
        json=payload
    )

    if response.status_code == 200:
        result = response.json()

        # Display results
        print("="*60)
        print("STEEL BASE PLATE DESIGN (IS 800:2007)")
        print("="*60)
        print(f"Column: {payload['column_section']}")
        print(f"Axial load: {payload['axial_load']}kN")
        print(f"Materials: {payload['steel_grade']} steel, {payload['concrete_grade']} concrete")
        print()
        print("RESULTS:")
        print(f"  Plate dimensions: {result['plate_length']}mm × {result['plate_width']}mm")
        print(f"  Plate thickness: {result['plate_thickness']}mm")
        print()
        print("BEARING PRESSURE:")
        print(f"  Actual: {result['bearing_pressure']}N/mm²")
        print(f"  Allowable: {result['allowable_bearing_pressure']}N/mm²")
        print(f"  Check: {result['bearing_check']}")
        print()
        print("ANCHOR BOLTS:")
        print(f"  Count: {result['anchor_bolts_count']} nos.")
        print(f"  Diameter: {payload['anchor_bolt_dia']}mm, Grade {payload['anchor_bolt_grade']}")
        print(f"  Tension per bolt: {result['anchor_bolt_tension']}kN")
        print(f"  Capacity per bolt: {result['anchor_bolt_capacity']}kN")
        print()
        print("WELD:")
        print(f"  {result['weld_description']}")
        print(f"  Size: {result['weld_size']}mm")
        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_base_plate()

Common Pitfalls

  1. Units: Always use kN and mm (not N and m)

  2. Column section: Use standard IS sections (ISHB, ISMB, ISMC, etc.)

  3. Bearing pressure: Don’t forget 0.45fck limit from IS 800 Clause 7.4.3.1

  4. Plate thickness: Critical projection ‘a’ depends on column geometry

  5. Anchor bolts: Grade 8.8 or 10.9 for high-strength, 4.6 for mild steel

  6. Edge distance: Minimum 1.5 × bolt diameter per IS 800

Comparison: Concrete vs. Steel Design

Similarities:

  • Both follow IS codes (IS 456, IS 800)

  • Load factors, safety factors, material properties

  • Input/output structure with Pydantic validation

Differences:

  • Concrete (IS 456): Focus on reinforcement, flexure, shear, deflection

  • Steel (IS 800): Focus on buckling, bearing, connection design, welds

  • Units: Same (kN, mm, MPa) but different stress magnitudes

  • IS clauses: Different clause numbering and design philosophy

Next Steps