Design of RCC reinforced beam

Interactive RCC Double reinforced beam design for all civil engineering. Please refer the below video and start providing your input to get design of RCC Double reinforced beam.

Interactive Doubly Reinforced Beam Design (IS 456:2000)




body {
font-family: ‘Inter’, sans-serif;
background-color: #f8fafc; /* slate-50 */
color: #0f172a; /* slate-900 */
}
.input-group {
margin-bottom: 1rem;
}
.input-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 600;
color: #475569; /* slate-600 */
}
.input-group input, .input-group select {
width: 100%;
padding: 0.75rem;
border-radius: 0.5rem;
border: 1px solid #cbd5e1; /* slate-300 */
background-color: white;
}
.result-card {
background-color: white;
border-radius: 0.75rem;
padding: 1.5rem;
margin-bottom: 1rem;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
border-left: 4px solid #3b82f6; /* blue-500 */
}
.result-card.warning {
border-left-color: #f59e0b; /* amber-500 */
}
.result-card.final {
border-left-color: #22c55e; /* green-500 */
}
.formula {
font-family: ‘Courier New’, Courier, monospace;
background-color: #f1f5f9; /* slate-100 */
padding: 0.5rem 1rem;
border-radius: 0.25rem;
color: #1e293b; /* slate-800 */
margin-top: 0.5rem;
display: block;
white-space: pre-wrap;
word-wrap: break-word;
}
.beam-visual-wrapper {
position: relative;
padding: 30px;
}
.beam-container {
position: relative;
border: 2px solid #334155; /* slate-700 */
background-color: #e2e8f0; /* slate-200 */
margin: 0 auto;
}
.rebar {
position: absolute;
border-radius: 50%;
background-color: #475569; /* slate-600 */
border: 1px solid #1e293b;
z-index: 10;
}
.stirrup {
position: absolute;
border: 2px solid #64748b; /* slate-500 */
border-radius: 6px;
z-index: 5;
}
.dim-line {
position: absolute;
background-color: #94a3b8;
}
.dim-line::before, .dim-line::after {
content: ”;
position: absolute;
background-color: #94a3b8;
}
.dim-line.vertical { width: 1px; }
.dim-line.horizontal { height: 1px; }
.dim-line.vertical::before, .dim-line.vertical::after { left: -4px; width: 9px; height: 1px; }
.dim-line.vertical::before { top: 0; }
.dim-line.vertical::after { bottom: 0; }
.dim-line.horizontal::before, .dim-line.horizontal::after { top: -4px; height: 9px; width: 1px; }
.dim-line.horizontal::before { left: 0; }
.dim-line.horizontal::after { right: 0; }
.dim-label {
position: absolute;
color: #475569;
font-size: 0.75rem;
font-weight: 600;
background-color: #f8fafc;
padding: 0 4px;
}

Doubly Reinforced Beam Design Calculator

An Interactive Guide based on IS 456:2000

Input Parameters

M20
M25
M30

Fe 250
Fe 415
Fe 500

Design Calculation Steps

Step 1: Determine Limiting Moment (Mu,lim)

First, we check if the section needs to be doubly reinforced by comparing the applied moment to the section’s limiting moment capacity.

document.addEventListener(‘DOMContentLoaded’, () => {
const inputs = [‘Mu’, ‘b’, ‘D’, ‘cover’, ‘fck’, ‘fy’];
const elements = {};
inputs.forEach(id => {
elements[id] = document.getElementById(id);
elements[id].addEventListener(‘input’, calculate);
});

const steps = {
step1: document.getElementById(‘step1’),
step2: document.getElementById(‘step2’),
step3: document.getElementById(‘step3’),
step4: document.getElementById(‘step4’),
};

const results = {
mulimResult: document.getElementById(‘mulim-result’),
mulimCheck: document.getElementById(‘mulim-check’),
astlimResult: document.getElementById(‘astlim-result’),
mu2Result: document.getElementById(‘mu2-result’),
ascResult: document.getElementById(‘asc-result’),
ast2Result: document.getElementById(‘ast2-result’),
totalAstResult: document.getElementById(‘total-ast-result’),
totalAscResult: document.getElementById(‘total-asc-result’),
beamVisual: document.getElementById(‘beam-visual’),
beamVisualWrapper: document.getElementById(‘beam-visual-wrapper’)
};

function getFsc(d_dash_by_d, fy) {
const fsc_table = {
250: { 0.05: 217, 0.10: 217, 0.15: 217, 0.20: 217 },
415: { 0.05: 355, 0.10: 353, 0.15: 342, 0.20: 329 },
500: { 0.05: 424, 0.10: 412, 0.15: 395, 0.20: 370 }
};
const table = fsc_table[fy];
if (d_dash_by_d = 0.20) return table[0.20];

const lower_key = Object.keys(table).reverse().find(k => k k > d_dash_by_d);

const x1 = parseFloat(lower_key), y1 = table[lower_key];
const x2 = parseFloat(upper_key), y2 = table[upper_key];

return y1 + (y2 – y1) * (d_dash_by_d – x1) / (x2 – x1);
}

function provideBars(area, diaOptions = [25, 20, 16, 12, 10, 8]) {
if (area = 2 && numBars <= 10) {
const providedArea = numBars * areaOfOneBar;
if (providedArea < area * 1.25) { // Find a reasonably efficient option
return {
text: `${numBars} no. of ${dia}mm bars (${providedArea.toFixed(0)} mm²)`,
bars: Array(numBars).fill(dia)
};
}
}
}
return bestOption;
}

function renderVisual(container, wrapper, b, D, tensionBarData, compBarData) {
container.innerHTML = '';
wrapper.innerHTML = `

`;
const beamVisual = wrapper.querySelector(‘#beam-visual’);

const aspectRatio = b/D;
const containerHeight = 280; // in px
const containerWidth = containerHeight * aspectRatio;
beamVisual.style.width = `${containerWidth}px`;
beamVisual.style.height = `${containerHeight}px`;

const scale = containerHeight / D;
const clearCover = 25 * scale; // assume 25mm clear cover for stirrup

// Render Stirrup
const stirrup = document.createElement(‘div’);
stirrup.className = ‘stirrup’;
stirrup.style.width = `${containerWidth – 2 * clearCover}px`;
stirrup.style.height = `${containerHeight – 2 * clearCover}px`;
stirrup.style.top = `${clearCover}px`;
stirrup.style.left = `${clearCover}px`;
beamVisual.appendChild(stirrup);

// Render bars
renderBars(beamVisual, tensionBarData.bars, scale, true);
renderBars(beamVisual, compBarData.bars, scale, false);

// Render Dimensions
const dimLabelB = document.createElement(‘div’);
dimLabelB.className = ‘dim-label’;
dimLabelB.textContent = `${b} mm`;
dimLabelB.style.width = `${containerWidth}px`;
dimLabelB.style.textAlign = ‘center’;
dimLabelB.style.top = `-25px`;
dimLabelB.style.left = `0px`;
beamVisual.appendChild(dimLabelB);

const dimLineB = document.createElement(‘div’);
dimLineB.className = ‘dim-line horizontal’;
dimLineB.style.width = `${containerWidth}px`;
dimLineB.style.top = `-15px`;
dimLineB.style.left = `0px`;
beamVisual.appendChild(dimLineB);

const dimLabelD = document.createElement(‘div’);
dimLabelD.className = ‘dim-label’;
dimLabelD.textContent = `${D} mm`;
dimLabelD.style.height = `${containerHeight}px`;
dimLabelD.style.writingMode = ‘vertical-rl’;
dimLabelD.style.transform = ‘rotate(180deg)’;
dimLabelD.style.textAlign = ‘center’;
dimLabelD.style.left = `-30px`;
dimLabelD.style.top = `0px`;
beamVisual.appendChild(dimLabelD);

const dimLineD = document.createElement(‘div’);
dimLineD.className = ‘dim-line vertical’;
dimLineD.style.height = `${containerHeight}px`;
dimLineD.style.left = `-20px`;
dimLineD.style.top = `0px`;
beamVisual.appendChild(dimLineD);

}

function renderBars(container, bars, scale, isTension) {
const maxBarsPerRow = 5;
const numBars = bars.length;
if (numBars === 0) return;

const rows = [];
if (numBars {
const yPos = isTension
? container.clientHeight – (50 * scale) – (rowIndex * 30 * scale)
: (50 * scale) + (rowIndex * 30 * scale);

const numInRow = row.length;
const spacing = container.clientWidth / (numInRow + 1);

row.forEach((dia, i) => {
const bar = document.createElement(‘div’);
bar.className = ‘rebar’;
const barDiaVisual = Math.max(dia * scale, 6);
bar.style.width = `${barDiaVisual}px`;
bar.style.height = `${barDiaVisual}px`;
bar.style.left = `${(i + 1) * spacing – barDiaVisual / 2}px`;
bar.style.top = `${yPos – barDiaVisual / 2}px`;
container.appendChild(bar);
});
});
}

function calculate() {
const Mu = parseFloat(elements.Mu.value) || 0;
const b = parseFloat(elements.b.value) || 0;
const D = parseFloat(elements.D.value) || 0;
const cover = parseFloat(elements.cover.value) || 0;
const fck = parseFloat(elements.fck.value) || 0;
const fy = parseFloat(elements.fy.value) || 0;

if ([Mu, b, D, cover, fck, fy].some(v => v <= 0) || D <= cover) {
results.mulimResult.innerHTML = '

Please provide all valid inputs. Overall depth must be greater than cover.

‘;
Object.values(steps).forEach((s, i) => i > 0 ? s.classList.add(‘hidden’) : null);
return;
}

const d = D – cover;
const xu_max_ratio = (fy === 250) ? 0.53 : (fy === 415) ? 0.48 : 0.46;
const xu_max = xu_max_ratio * d;

const Mu_lim_val = (0.36 * xu_max_ratio * (1 – 0.42 * xu_max_ratio) * fck * b * d * d) / 1e6;

results.mulimResult.innerHTML = `

Effective Depth, d = ${D} – ${cover} = ${d.toFixed(2)} mm

For Fe${fy}, xu,max = ${xu_max_ratio}d = ${xu_max.toFixed(2)} mm

Mu,lim = 0.36 * xu,max/d * (1 - 0.42 * xu,max/d) * fck * b * d²

Limiting Moment (Mu,lim) = ${Mu_lim_val.toFixed(2)} kNm

`;

if (Mu > Mu_lim_val) {
results.mulimCheck.innerHTML = `

Since Mu (${Mu} kNm) > Mu,lim (${Mu_lim_val.toFixed(2)} kNm), a doubly reinforced section is required.

`;

Object.values(steps).forEach(s => s.classList.remove(‘hidden’));

const Ast_lim = (0.5 * fck / fy) * (1 – Math.sqrt(1 – (4.6 * Mu_lim_val * 1e6) / (fck * b * d * d))) * b * d;
results.astlimResult.innerHTML = `

Ast,lim = ${Ast_lim.toFixed(2)} mm²

`;

const Mu2 = Mu – Mu_lim_val;
results.mu2Result.innerHTML = `

Additional Moment, Mu2 = ${Mu} – ${Mu_lim_val.toFixed(2)} = ${Mu2.toFixed(2)} kNm

`;

const d_dash_by_d = cover / d;
const fsc = getFsc(d_dash_by_d, fy);
const fcc = 0.45 * fck;
const Asc = (Mu2 * 1e6) / ((fsc – fcc) * (d – cover));
const Ast2 = (Asc * (fsc – fcc)) / (0.87 * fy);

results.ascResult.innerHTML = `

For d’/d = ${(d_dash_by_d).toFixed(2)}, Stress in Compression Steel, fsc ≈ ${fsc.toFixed(2)} N/mm²

Asc = Mu2 / [(fsc - 0.45fck) * (d - d')]

Compression Steel (Asc) = ${Asc.toFixed(2)} mm²

`;
results.ast2Result.innerHTML = `
Ast2 = (Asc * (fsc - 0.45fck)) / (0.87 * fy)

Additional Tension Steel (Ast2) = ${Ast2.toFixed(2)} mm²

`;

const total_Ast = Ast_lim + Ast2;
const total_Asc = Asc;
const tensionBarData = provideBars(total_Ast);
const compBarData = provideBars(total_Asc);

results.totalAstResult.innerHTML = `

Tension Steel (Ast)

Ast = Ast,lim + Ast2 = ${Ast_lim.toFixed(0)} + ${Ast2.toFixed(0)}

${total_Ast.toFixed(2)} mm²

Provide: ${tensionBarData.text}

`;

results.totalAscResult.innerHTML = `

Compression Steel (Asc)

${total_Asc.toFixed(2)} mm²

Provide: ${compBarData.text}

`;

renderVisual(results.beamVisual, results.beamVisualWrapper, b, D, tensionBarData, compBarData);

} else {
results.mulimCheck.innerHTML = `

Since Mu (${Mu} kNm) <= Mu,lim (${Mu_lim_val.toFixed(2)} kNm), a singly reinforced section is sufficient. No need for compression reinforcement.

`;
steps.step2.classList.add(‘hidden’);
steps.step3.classList.add(‘hidden’);
steps.step4.classList.add(‘hidden’);
}
}

calculate();
});

Leave a Reply

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