Design of Isolated footing as per IS 456 2000

Design of Isolated Footing as per IS 456 2000 is explained in detail in this post. You can interact with the data base and based on that you can get the design of Isolated footing as per IS 456 2000.

Interactive Isolated Footing Design (IS 456:2000)




body {
font-family: ‘Inter’, sans-serif;
background-color: #f0f4f8;
}
.mono {
font-family: ‘Roboto Mono’, monospace;
}
.result-value {
font-weight: 600;
color: #1d4ed8;
}
.step-card {
background-color: white;
border-radius: 0.75rem;
padding: 1.5rem;
margin-bottom: 1.5rem;
border: 1px solid #e2e8f0;
box-shadow: 0 1px 3px 0 rgba(0,0,0,0.05);
transition: all 0.3s ease-in-out;
}
.input-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
color: #475569;
}
.input-group input {
width: 100%;
padding: 0.5rem 0.75rem;
border: 1px solid #cbd5e1;
border-radius: 0.375rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.input-group input:focus {
outline: none;
border-color: #2563eb;
box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
}
.safe { color: #16a34a; }
.unsafe { color: #dc2626; }
.formula {
font-family: ‘Roboto Mono’, monospace;
font-size: 0.8rem;
background-color: #f1f5f9;
padding: 0.75rem;
border-radius: 0.25rem;
color: #334155;
margin-top: 0.75rem;
display: block;
white-space: pre-wrap;
word-wrap: break-word;
border-left: 3px solid #60a5fa;
}
/* Visualization Styles */
.viz-container {
position: relative;
background-color: #f8fafc;
border: 1px dashed #94a3b8;
border-radius: 0.5rem;
padding: 1.5rem 1rem;
margin-top: 1rem;
}
/* Plan View */
#detailing-drawing-plan {
width: 100%;
aspect-ratio: 1/1;
max-width: 300px;
}
#footing-plan {
width: 100%; height: 100%;
background-color: #e2e8f0;
border: 1px solid #94a3b8;
position: relative;
}
#column-plan {
position: absolute;
background-color: #94a3b8;
border: 1px solid #475569;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}
.rebar-plan {
position: absolute;
background-color: #475569;
}

/* Section View */
#detailing-drawing-section {
width: 100%;
height: 250px;
max-width: 400px;
}
#section-view-container {
width: 100%; height: 100%;
position: relative;
}
#footing-section {
position: absolute;
bottom: 20px;
left: 0;
width: 100%;
background-color: #e2e8f0;
border: 1px solid #94a3b8;
}
#column-section {
position: absolute;
bottom: 20px;
left: 50%;
background-color: #cad3e0;
border-left: 1px solid #94a3b8;
border-right: 1px solid #94a3b8;
border-top: 1px solid #94a3b8;
}
.rebar-section {
position: absolute;
background-color: #475569;
border-radius: 50%;
border: 1px solid #1e293b;
}
.dowel-bar-vert {
position: absolute;
width: 2px;
background-color: #475569;
}
.dowel-bar-foot {
position: absolute;
height: 2px;
background-color: #475569;
}
.rebar-hook {
position: absolute;
width: 2px;
background-color: #475569;
}
.dim-line {
position: absolute;
background-color: #64748b;
}
.dim-line-vert {
width: 1px;
left: -20px;
}
.dim-line-vert::before, .dim-line-vert::after {
content: ”; position: absolute; left: -4px; width: 9px; height: 1px; background-color: #64748b;
}
.dim-line-vert::before { top: 0; }
.dim-line-vert::after { bottom: 0; }
.dim-label {
position: absolute;
font-size: 0.65rem;
font-weight: 500;
color: #475569;
background-color: #f8fafc;
padding: 0 2px;
}
/* BBS Table */
.bbs-table {
width: 100%;
font-size: 0.875rem;
text-align: left;
border-collapse: collapse;
}
.bbs-table th, .bbs-table td {
padding: 0.5rem 0.75rem;
border-bottom: 1px solid #e2e8f0;
}
.bbs-table th {
background-color: #f8fafc;
font-weight: 600;
color: #334155;
}
.shape-drawing {
width: 60px;
height: 30px;
border: 2px solid #475569;
border-top: none;
}
.shape-drawing.dowel {
border-right: none;
border-left: none;
height: 40px;
width: 2px;
margin: 0 auto;
position: relative;
}
.shape-drawing.dowel::after {
content: ”;
position: absolute;
bottom: -2px;
left: -15px;
width: 15px;
height: 2px;
background-color: #475569;
}

Interactive Isolated Footing Design

Creator: Parag Pal

As per Limit State Method of IS 456:2000



Step 1: Determine Size of Footing

The plan area is based on the service load (column load + 10% self-weight) and the soil’s safe bearing capacity to prevent soil failure.

Step 2: Calculate Net Factored Upward Soil Pressure

This is the ultimate pressure the footing must structurally resist. It’s calculated from the factored column load and the actual footing area provided.

Step 3: Shear Design to Determine Footing Depth

The footing’s thickness is governed by its ability to resist shear forces. Both one-way (beam action) and two-way (punching) shear must be checked.

Step 4 & 5: Flexural Design & Development Length

Steel reinforcement is calculated to resist the bending moment caused by the upward soil pressure. The length of the bars must also be sufficient to ensure proper anchorage (development length).

Step 6: Check for Load Transfer

The bearing pressure between the column and footing is checked to prevent crushing. Dowel bars are designed to transfer the load safely.

Quantity Estimation & Costing

Bar Bending Schedule (BBS)

Mark Description Dia (mm) Shape Cut Length (mm) No. of Bars Total Length (m)

Cost Estimation Summary

Final Design Summary & Detailing

Reinforcement Detailing (Plan View)

Reinforcement Detailing (Section View)

document.addEventListener(‘DOMContentLoaded’, () => {
const inputs = document.querySelectorAll(‘input’);
inputs.forEach(input => {
input.addEventListener(‘input’, calculateAll);
});

function createResultRow(label, value, unit) {
return `

${label}: ${value} ${unit}

`;
}

function createStatusRow(label, status) {
const statusClass = status === ‘SAFE’ ? ‘safe’ : ‘unsafe’;
return `

${label}: ${status}

`;
}

function calculateAll() {
// — Get Inputs —
const P = parseFloat(document.getElementById(‘columnLoad’).value) || 0;
const sbc = parseFloat(document.getElementById(‘sbc’).value) || 0;
const b = parseFloat(document.getElementById(‘columnWidth’).value) || 0;
const fck = parseFloat(document.getElementById(‘fck’).value) || 0;
const fy = parseFloat(document.getElementById(‘fy’).value) || 0;
const clearCover = parseFloat(document.getElementById(‘clearCover’).value) || 0;
const concreteRate = parseFloat(document.getElementById(‘concreteRate’).value) || 0;
const steelRate = parseFloat(document.getElementById(‘steelRate’).value) || 0;

// — Step 1 —
const W = P * 1.10;
const A_req = (sbc > 0) ? W / sbc : 0;
const L = Math.ceil(Math.sqrt(A_req) * 10) / 10;
const A_prov = L * L;

document.getElementById(‘step1-results’).innerHTML = `
Area = (Column Load + 10% Self-weight) / SBC
${createResultRow(‘Total Service Load’, W.toFixed(2), ‘kN’)}
${createResultRow(‘Required Area’, A_req.toFixed(2), ‘m²’)}
${createResultRow(‘Calculated Side Length’, Math.sqrt(A_req).toFixed(3), ‘m’)}
${createResultRow(‘Provided Footing Size’, `${L.toFixed(2)}m x ${L.toFixed(2)}m`, ”)}`;

// — Step 2 —
const Pu = 1.5 * P;
const qu = (A_prov > 0) ? Pu / A_prov : 0;
document.getElementById(‘step2-results’).innerHTML = `
qu = (1.5 * Column Load) / Provided Area
${createResultRow(‘Factored Column Load (Pu)’, Pu.toFixed(2), ‘kN’)}
${createResultRow(‘Net Upward Pressure (qu)’, qu.toFixed(2), ‘kN/m²’)}`;

// — Step 3 —
const assumed_pt = 0.3;
let tau_c_val = 0.36 + (0.48 – 0.36) * (assumed_pt – 0.25) / (0.5 – 0.25);
if (fck === 20) tau_c_val = 0.36;
if (fck >= 30) tau_c_val = 0.39;

let d = 0;
const B = L * 1000;
const qu_N_mm2 = qu / 1000;
if ((tau_c_val + qu_N_mm2) > 0) {
d = (qu_N_mm2 * (B – b) / 2) / (tau_c_val + qu_N_mm2);
}

let twoWaySafe = false;
while (!twoWaySafe) {
const ks = 1.0;
const tau_c_punch = Math.min(ks * 0.25 * Math.sqrt(fck), 0.25 * Math.sqrt(fck) * 2);
const b0 = 4 * (b + d);
const Vu2_N = qu_N_mm2 * (B * B – Math.pow(b + d, 2));
const Vc2_N = tau_c_punch * b0 * d;
if (Vu2_N <= Vc2_N) {
twoWaySafe = true;
} else {
d += 10;
}
}
d = Math.ceil(d / 10) * 10;

const Vu1_N_final = qu_N_mm2 * B * ((B – b) / 2 – d);
const Vc1_N_final = tau_c_val * B * d;
const onewayStatusText = Vu1_N_final <= Vc1_N_final ? 'SAFE' : 'UNSAFE';

const ks_final = 1.0;
const tau_c_punch_final = Math.min(ks_final * 0.25 * Math.sqrt(fck), 0.25 * Math.sqrt(fck) * 2);
const b0_final = 4 * (b + d);
const Vu2_N_final = qu_N_mm2 * (B*B – Math.pow(b + d, 2));
const Vc2_N_final = tau_c_punch_final * b0_final * d;
const twowayStatusText = Vu2_N_final <= Vc2_N_final ? 'SAFE' : 'UNSAFE';

const mainBarDia = 12;
const D = Math.ceil((d + clearCover + mainBarDia) / 10) * 10;

document.getElementById('step3-results').innerHTML = `

One-Way Shear Check (Cl. 34.2.4.1)

Vu1 = qu*B*((B-b)/2 - d)
${createResultRow(‘Factored Shear (Vu1)’, (Vu1_N_final / 1000).toFixed(2), ‘kN’)}
${createResultRow(‘Shear Resistance (Vc1)’, (Vc1_N_final / 1000).toFixed(2), ‘kN’)}
${createStatusRow(‘Status’, onewayStatusText)}

Two-Way (Punching) Shear Check (Cl. 31.6.3)

Vu2 = qu*(B² - (b+d)²)
${createResultRow(‘Factored Shear (Vu2)’, (Vu2_N_final / 1000).toFixed(2), ‘kN’)}
${createResultRow(‘Shear Resistance (Vc2)’, (Vc2_N_final / 1000).toFixed(2), ‘kN’)}
${createStatusRow(‘Status’, twowayStatusText)}

Provided Depth

${createResultRow(‘Effective Depth (d)’, d.toFixed(0), ‘mm’)}
${createResultRow(‘Overall Depth (D)’, D.toFixed(0), ‘mm’)}

`;

// — Step 4 & 5 —
const Lc = (B – b) / 2;
const Mu_Nmm = qu_N_mm2 * B * Math.pow(Lc, 2) / 2;
const a = (0.87 * fy) / (B * d * fck);
const c = -Mu_Nmm / (0.87 * fy * d);
const Ast = (-1 + Math.sqrt(1 – 4 * a * c)) / (2 * a);

let tau_bd = 1.4;
if (fck === 20) tau_bd = 1.2;
if (fck >= 30) tau_bd = 1.5;
tau_bd *= 1.6;

const Ld_req = (0.87 * fy * mainBarDia) / (4 * tau_bd);
const Ld_avail = Lc – clearCover;
const ldStatusText = Ld_avail >= Ld_req ? ‘SAFE’ : ‘UNSAFE’;

document.getElementById(‘step4-results’).innerHTML = `
Mu = (qu*B*Lc²)/2 (at column face)
${createResultRow(‘Factored Bending Moment (Mu)’, (Mu_Nmm / 1e6).toFixed(2), ‘kNm’)}
Mu=0.87*fy*Ast*d*(1 - Ast*fy/(B*d*fck))
${createResultRow(‘Required Steel Area (Ast)’, Ast.toFixed(2), ‘mm²’)}
Ld = (φ*σs)/(4*τbd) (Cl. 26.2.1)
${createResultRow(‘Required Dev. Length (Ld)’, Ld_req.toFixed(2), ‘mm’)}
${createResultRow(‘Available Dev. Length’, Ld_avail.toFixed(2), ‘mm’)}
${createStatusRow(‘Dev. Length Status’, ldStatusText)}
`;

// — Step 6 —
const permBearingStress_col = 0.45 * fck;
const A1 = B*B;
const A2 = b*b;
let rootA1A2 = Math.sqrt(A1/A2);
if (rootA1A2 > 2) rootA1A2 = 2;
const permBearingStress_foot = permBearingStress_col * rootA1A2;
const actualBearingPressure = (Pu * 1000) / A2;
const bearingStatusText = actualBearingPressure <= permBearingStress_foot ? 'SAFE' : 'UNSAFE';

const Adowel_min = 0.005 * A2;
document.getElementById('step6-results').innerHTML = `
σ_br = 0.45*fck*sqrt(A1/A2) (Cl. 34.4)
${createResultRow(‘Actual Bearing Pressure’, actualBearingPressure.toFixed(2), ‘N/mm²’)}
${createResultRow(‘Permissible Bearing Stress’, permBearingStress_foot.toFixed(2), ‘N/mm²’)}
${createStatusRow(‘Status’, bearingStatusText)}
A_dowel,min = 0.5% * Column Area
${createResultRow(‘Min. Dowel Area’, Adowel_min.toFixed(2), ‘mm²’)}
`;
const dowelBarDia = 20;

// — Final Summary —
const numBars = Math.ceil(Ast / (Math.PI/4 * mainBarDia*mainBarDia));
const spacing = Math.floor((B – 2 * clearCover – mainBarDia) / (numBars -1));
document.getElementById(‘final-summary-text’).innerHTML = `

Footing Size: ${L.toFixed(2)}m x ${L.toFixed(2)}m

Overall Depth (D): ${D} mm

Main Reinforcement: Provide ${numBars} nos. of ${mainBarDia}mm bars @ ${spacing}mm c/c (Both ways)

Dowel Bars: Provide 4 nos. of ${dowelBarDia}mm bars

`;

// — Quantity & Cost —
const concreteVol = A_prov * (D / 1000);
const mainBarCutLength = B – 2 * clearCover;
const mainBarTotalNo = numBars * 2;
const mainBarTotalLength = mainBarTotalNo * (mainBarCutLength / 1000);
const mainBarUnitWeight = (mainBarDia * mainBarDia) / 162.2;
const mainBarTotalWeight = mainBarTotalLength * mainBarUnitWeight;

const dowelLd = (0.87 * fy * dowelBarDia) / (4 * tau_bd);
const dowelLapLength = 49 * dowelBarDia;
const dowelCutLength = (D – clearCover) + dowelLapLength + (12 * dowelBarDia);
const dowelTotalLength = 4 * (dowelCutLength / 1000);
const dowelUnitWeight = (dowelBarDia * dowelBarDia) / 162.2;
const dowelTotalWeight = dowelTotalLength * dowelUnitWeight;

const totalSteelWeight = mainBarTotalWeight + dowelTotalWeight;

const concreteCost = concreteVol * concreteRate;
const steelCost = totalSteelWeight * steelRate;
const totalCost = concreteCost + steelCost;
const formatter = new Intl.NumberFormat(‘en-IN’, { style: ‘currency’, currency: ‘INR’, minimumFractionDigits: 0 });

document.getElementById(‘bbs-body’).innerHTML = `

01 Main Mesh ${mainBarDia}
${mainBarCutLength} ${mainBarTotalNo} ${mainBarTotalLength.toFixed(2)} 02 Dowel Bars ${dowelBarDia}
${Math.round(dowelCutLength)} 4 ${dowelTotalLength.toFixed(2)}

`;
document.getElementById(‘cost-summary’).innerHTML = `

${createResultRow(‘Concrete Volume’, concreteVol.toFixed(3), ‘m³’)}
${createResultRow(‘Total Steel Weight’, totalSteelWeight.toFixed(2), ‘kg’)}
${createResultRow(‘Concrete Cost’, formatter.format(concreteCost), ”)}
${createResultRow(‘Steel Cost’, formatter.format(steelCost), ”)}

Total Estimated Cost: ${formatter.format(totalCost)}

`;

// — Update Visualizations —
renderPlanView(b, B, clearCover, numBars, mainBarDia);
renderSectionView(b, B, D, clearCover, mainBarDia, dowelBarDia);
}

function renderPlanView(b, B, clearCover, numBars, barDia) {
const footingPlan = document.getElementById(‘footing-plan’);
let rebarContainer = document.getElementById(‘rebar-container-plan’);
if(rebarContainer) rebarContainer.remove();

rebarContainer = document.createElement(‘div’);
rebarContainer.id = ‘rebar-container-plan’;
footingPlan.appendChild(rebarContainer);

const colPlan = document.getElementById(‘column-plan’);
colPlan.style.width = `${(b / B) * 100}%`;
colPlan.style.height = `${(b / B) * 100}%`;

const spacing = (B – 2 * clearCover – barDia) / (numBars – 1);
const barThickness = Math.max(1, (barDia / B) * 100);

for(let i=0; i {
const dowelVert = document.createElement(‘div’);
dowelVert.className = ‘dowel-bar-vert’;
dowelVert.style.left = pos;
dowelVert.style.bottom = `${20 + clearCover*scale + barVisual}`;
dowelVert.style.height = `${footingHeight + 50}px`;
container.appendChild(dowelVert);

const dowelFoot = document.createElement(‘div’);
dowelFoot.className = ‘dowel-bar-foot’;
dowelFoot.style.bottom = `${20 + clearCover*scale + barVisual – dowelVisualDia/2}px`;
dowelFoot.style.width = `${dowelFootLength}px`;
if (index === 0) {
dowelFoot.style.left = `calc(${pos} – ${dowelFootLength}px + ${dowelVisualDia}px)`;
} else {
dowelFoot.style.left = pos;
}
container.appendChild(dowelFoot);
});

const dimLine = document.createElement(‘div’);
dimLine.className = ‘dim-line dim-line-vert’;
dimLine.style.height = `${footingHeight}px`;
dimLine.style.bottom = ’20px’;
container.appendChild(dimLine);

const dimLabel = document.createElement(‘div’);
dimLabel.className = ‘dim-label’;
dimLabel.textContent = `${D}mm`;
dimLabel.style.left = ‘-45px’;
dimLabel.style.top = `${footingHeight/2 – 10}px`;
container.appendChild(dimLabel);
}

calculateAll();
});

Leave a Reply

Your email address will not be published. Required fields are marked *