Bridging the gap between theoretical metallurgy and practical application — calculators, selectors and expert-reviewed guides for welders, inspectors, engineers and students.
Arc energy E = V × A × 60 / (1000 × S). EN 1011-1 heat input Q = k × E. ASME Section IX QW-409.1 and AWS D1.1 use arc energy without the thermal efficiency factor (J/in). For pulsed or waveform-controlled processes, use instantaneous energy or power instead.
Carbon Equivalent & Preheat
Enter the chemical composition (wt %) from the mill test certificate.
Guidance only. Actual preheat depends on hydrogen level, restraint and combined thickness — use AWS D1.1 Annex H, EN 1011-2 or your qualified WPS. Cr-Mo steels such as P91 have code-mandated minimums regardless of CE.
Filler Metal Selector
Pick both base metals. Works for similar and dissimilar joints.
Common AWS classifications shown (A5.1, A5.4, A5.5, A5.9, A5.10, A5.14, A5.18, A5.28). Confirm against service conditions, PWHT requirements and the qualified WPS.
Weld Metal Estimator
Estimate deposited metal and consumable required for equal-leg fillet welds.
`:''}`;
}
bm1.onchange=bm2.onchange=renderFiller; renderFiller();
/* ---------- deposit ---------- */
function calcDep(){
const L=+$('#dLeg').value, len=+$('#dLen').value, rf=+$('#dRf').value/100, rho=+$('#dMat').value, eff=+$('#dEff').value;
const A = L*L/2*(1+rf); // mm²
const m = A*len*1000*rho/1e6; // kg (mm² × mm × g/cm³ → /1e6 kg... A*len(mm)*rho/1e6)
$('#dA').innerHTML = fmt(A,1)+' mm²';
$('#dM').innerHTML = fmt(m)+' kg';
$('#dC').innerHTML = fmt(m/eff)+' kg';
}
['#dLeg','#dLen','#dRf','#dMat','#dEff'].forEach(i=>$(i).addEventListener('input',calcDep)); calcDep();
/* ---------- converter ---------- */
const CONV = [
{a:'in', b:'mm', f:x=>x*25.4, r:x=>x/25.4, va:0.375},
{a:'ksi', b:'MPa', f:x=>x*6.894757, r:x=>x/6.894757, va:70},
{a:'°F', b:'°C', f:x=>(x-32)*5/9, r:x=>x*9/5+32, va:400},
{a:'ft·lbf', b:'J', f:x=>x*1.355818, r:x=>x/1.355818, va:20},
{a:'kJ/in', b:'kJ/mm', f:x=>x/25.4, r:x=>x*25.4, va:30},
{a:'CFH', b:'L/min', f:x=>x*0.471947, r:x=>x/0.471947, va:35}
];
const cg=$('#convGrid');
CONV.forEach(c => {
const row=document.createElement('div');
row.style.cssText='display:grid;grid-template-columns:1fr auto 1fr;gap:12px;align-items:end';
row.innerHTML=`⇄`;
const [ia,ib]=$$('input',row);
const r4=x=>+x.toFixed(4);
ia.value=c.va; ib.value=r4(c.f(c.va));
ia.oninput=()=>ib.value = ia.value===''?'':r4(c.f(+ia.value));
ib.oninput=()=>ia.value = ib.value===''?'':r4(c.r(+ib.value));
cg.appendChild(row);
});
/* ---------- defects ---------- */
const DEF = [
{id:'por', n:'Porosity', sev:'Volumetric', d:'Gas pores trapped in the solidifying weld metal — scattered, clustered, linear or elongated (wormhole).',
c:['Inadequate or excessive shielding gas flow','Drafts / wind disturbing the gas shield','Moisture in flux, coating or on joint','Oil, paint, rust or galvanising on the base metal','Excessive arc length or contaminated tip/nozzle'],
f:['Set gas flow correctly (typ. 15–20 L/min for GMAW) and check for leaks','Screen the work area from drafts','Bake / store low-hydrogen consumables properly','Clean joint to bright metal 25 mm either side','Shorten arc; clean nozzle of spatter'],
ndt:['RT','UT','VT'], svg:'por'},
{id:'lof', n:'Lack of Fusion', sev:'Planar', d:'Weld metal fails to fuse with the base metal or a previous bead — a planar, often critical flaw.',
c:['Heat input too low for thickness','Incorrect torch / electrode angle','Travel speed too fast or too slow (rolling over puddle)','Short-circuit transfer on thick sections','Mill scale or oxide on sidewalls'],
f:['Increase current / use spray or pulse transfer','Direct the arc at the sidewall','Adjust travel so the arc stays at the leading edge of the pool','Grind and clean between passes','Widen bevel angle for access'],
ndt:['UT','PAUT','RT (limited)'], svg:'lof'},
{id:'ip', n:'Incomplete Penetration', sev:'Planar', d:'Weld metal does not extend through the joint thickness, leaving the root unfused.',
c:['Root gap too small or root face too thick','Current too low','Electrode too large for joint','Excessive travel speed'],
f:['Follow WPS joint geometry (gap / land)','Increase amperage on root pass','Use a smaller electrode for the root','Back-gouge and weld from the second side'],
ndt:['RT','UT','VT (if root accessible)'], svg:'ip'},
{id:'uc', n:'Undercut', sev:'Surface', d:'A groove melted into the base metal at the weld toe, left unfilled by weld metal.',
c:['Current or voltage too high','Excessive travel speed','Wrong electrode angle','Too-long arc / excessive weaving'],
f:['Reduce current and voltage','Slow travel; pause at the toes when weaving','Correct the work angle (typ. 45° for fillets)','Blend-grind or repair-weld per code limits'],
ndt:['VT','PT','MT'], svg:'uc'},
{id:'hc', n:'Hydrogen (Cold) Cracking', sev:'Critical', d:'Delayed cracking in the HAZ or weld metal caused by hydrogen, a hardened microstructure and tensile stress together.',
c:['High carbon equivalent / hardenable steel','Moisture-contaminated consumables','No or insufficient preheat','High restraint and thick sections','Rapid cooling'],
f:['Preheat and maintain interpass temperature','Use H4/H8 low-hydrogen consumables, baked correctly','Post-heat / hydrogen bake-out after welding','Reduce restraint; consider buttering','Delay final NDT (often 48 h) to catch delayed cracks'],
ndt:['MT','UT','PT'], svg:'hc'},
{id:'sc', n:'Solidification (Hot) Cracking', sev:'Critical', d:'Centreline cracks forming during solidification as low-melting films are pulled apart.',
c:['High depth-to-width bead ratio','Sulphur / phosphorus contamination','Fully austenitic weld metal (no ferrite)','Concave bead with high restraint','Crater not filled at stop'],
f:['Keep bead width ≥ depth; reduce current / speed','Use filler with 3–10 FN ferrite (stainless)','Use 4043 for crack-sensitive Al alloys','Fill craters / use crater-fill function','Reduce restraint and joint gap'],
ndt:['VT','PT','UT'], svg:'sc'},
{id:'si', n:'Slag Inclusions', sev:'Volumetric', d:'Non-metallic solid trapped in the weld, typically between passes in SMAW, FCAW or SAW.',
c:['Incomplete slag removal between passes','Undercut or notches that trap slag','Low current, cold puddle','Poor bead profile (convex)'],
f:['Thoroughly chip and wire-brush between passes','Grind convex beads before next pass','Increase current slightly','Maintain correct electrode angle and travel'],
ndt:['RT','UT'], svg:'si'},
{id:'bt', n:'Burn-Through / Excess Penetration', sev:'Surface', d:'Molten metal falls through the root, creating holes or excessive root reinforcement.',
c:['Heat input too high','Root gap too large','Travel speed too slow','Thin material without backing'],
f:['Reduce current / use pulsed mode','Control fit-up within WPS tolerance','Increase travel speed','Use copper or ceramic backing'],
ndt:['VT','RT'], svg:'bt'}
];
const SVG = {
base:(inner)=>`${inner}`,
por:()=>SVG.base(''),
lof:()=>SVG.base(''),
ip:()=>SVG.base(''),
uc:()=>``,
hc:()=>SVG.base(''),
sc:()=>SVG.base(''),
si:()=>SVG.base(''),
bt:()=>``
};
const dl=$('#defectList');
DEF.forEach((d,i)=>{ const b=document.createElement('button'); b.className='defect-btn'+(i?'':' on'); b.innerHTML=`${d.n}${d.sev}`; b.onclick=()=>{ $$('.defect-btn').forEach(x=>x.classList.remove('on')); b.classList.add('on'); showDef(d); }; dl.appendChild(b); });
function showDef(d){
$('#defectView').innerHTML=`
${d.sev} imperfection
${d.n}
${d.d}
Likely causes
${d.c.map(x=>`
${x}
`).join('')}
Corrective actions
${d.f.map(x=>`
${x}
`).join('')}
DETECT WITH →${d.ndt.map(x=>`${x}`).join('')}
${SVG[d.svg]()}
Cross-section (schematic)
`;
}
showDef(DEF[0]);
/* ---------- NDT chooser ---------- */
const NDT=[
{a:'VT', n:'Visual Testing', p:'First and most cost-effective method. Finds surface profile defects, undercut, porosity, cracks at surface.', s:{sens:40,cost:95,speed:95}, surf:true, sub:false, mats:['fe','aus','nc'], one:true, rad:false, rec:false},
{a:'PT', n:'Liquid Penetrant', p:'Detects surface-breaking flaws on non-porous materials, including stainless and aluminum.', s:{sens:70,cost:80,speed:60}, surf:true, sub:false, mats:['fe','aus','nc'], one:true, rad:false, rec:false},
{a:'MT', n:'Magnetic Particle', p:'Surface and slightly sub-surface flaws in ferromagnetic materials. Fast and highly sensitive to cracks.', s:{sens:80,cost:80,speed:75}, surf:true, sub:false, mats:['fe'], one:true, rad:false, rec:false, best:'surf-fe'},
{a:'UT', n:'Ultrasonic Testing', p:'Volumetric — excellent for planar flaws (lack of fusion, cracks). Gives depth and through-wall sizing. PAUT/TOFD offer recorded data.', s:{sens:85,cost:60,speed:65}, surf:false, sub:true, mats:['fe','aus'], one:true, rad:false, rec:true, best:'sub'},
{a:'RT', n:'Radiographic Testing', p:'Volumetric — ideal for porosity and slag inclusions. Film or digital image provides a permanent record.', s:{sens:75,cost:40,speed:35}, surf:false, sub:true, mats:['fe','aus','nc'], one:false, rad:true, rec:true},
{a:'ET', n:'Eddy Current', p:'Surface and near-surface flaws in conductive materials; works through thin coatings. ACFM variant for weld toes.', s:{sens:70,cost:65,speed:85}, surf:true, sub:false, mats:['fe','aus'], one:true, rad:false, rec:true}
];
const ng=$('#ndtGrid');
NDT.forEach(m=>{ const el=document.createElement('article'); el.className='ndt'; el.dataset.a=m.a;
el.innerHTML=`Best fit
${m.a}
${m.n}
${m.p}
Sensitivity
Cost-effective
Speed
`;
ng.appendChild(el); });
function filterNDT(){
const mat=$('input[name=mat]:checked').value, loc=$('input[name=loc]:checked').value;
const one=$('#oneSide').checked, noRad=$('#noRad').checked, rec=$('#record').checked;
const fits=[];
NDT.forEach(m=>{
const el=ng.querySelector(`[data-a="${m.a}"]`); let why='';
if(!m.mats.includes(mat)) why = mat==='aus' ? '✕ Not for non-ferromagnetic' : '✕ Material not suitable';
else if(loc==='surf' && !m.surf) why='✕ Better for internal flaws';
else if(loc==='sub' && !m.sub) why='✕ Surface only';
else if(one && !m.one) why='✕ Needs access both sides';
else if(noRad && m.rad) why='✕ Ionising radiation';
else if(rec && !m.rec) why='✕ No permanent record';
el.classList.toggle('off',!!why); el.querySelector('.reason').textContent=why; el.classList.remove('best');
if(!why) fits.push(m);
});
const pref = loc==='surf' ? (mat==='fe'?['MT','PT','ET','VT']:['PT','ET','VT']) : (rec&&!noRad&&!one?['RT','UT']:['UT','RT']);
const top = pref.find(a=>fits.some(f=>f.a===a));
if(top) ng.querySelector(`[data-a="${top}"]`).classList.add('best');
}
$$('#ndtFilters input').forEach(i=>i.addEventListener('change',filterNDT)); filterNDT();
/* ---------- quiz ---------- */
const Q=[
{q:'Which NDT method cannot be used on austenitic stainless steel welds?', o:['Liquid penetrant','Magnetic particle','Ultrasonic','Radiography'], a:1, e:'Austenitic stainless is non-ferromagnetic, so it cannot be magnetised for MT. Use PT for surface flaws.'},
{q:'In the SMAW electrode E7018, what does “70” indicate?', o:['70 °C maximum interpass','70% iron powder','70 ksi minimum tensile strength','Electrode length of 70 mm'], a:2, e:'Per AWS A5.1, the first two digits give minimum tensile strength in ksi (70 ksi ≈ 480 MPa).'},
{q:'With 25 V, 200 A and a travel speed of 10 in/min, what is the heat input per ASME IX?', o:['3 kJ/in','30 kJ/in','50 kJ/in','300 kJ/in'], a:1, e:'H = V × A × 60 / S = 25 × 200 × 60 / 10 = 30,000 J/in = 30 kJ/in.'},
{q:'Which filler metal is most commonly used to join 304 stainless to carbon steel?', o:['ER308L','ER70S-6','ER309L','ER4043'], a:2, e:'ER309L is over-alloyed (≈23Cr-12Ni) to absorb dilution from the carbon steel and still give a crack-resistant austenitic-ferritic deposit.'},
{q:'On an AWS A2.4 weld symbol, a fillet weld symbol placed below the reference line means:', o:['Weld on the arrow side','Weld on the other side','Weld all around','Field weld'], a:0, e:'Below the reference line = arrow side; above = other side. The “all-around” and “field weld” are separate supplementary symbols.'},
{q:'Hydrogen-induced cracking is also commonly known as:', o:['Hot cracking','Cold cracking','Lamellar tearing','Reheat cracking'], a:1, e:'It occurs after the weld cools (often hours later), which is why it is called cold or delayed cracking.'},
{q:'Which imperfection is generally considered the most detrimental?', o:['Scattered porosity','Planar lack of fusion','Slight reinforcement excess','Spatter'], a:1, e:'Planar flaws have sharp tips that concentrate stress and can propagate under load or fatigue.'}
];
let qi=0, score=0;
function renderQ(){
const box=$('#quizBox');
if(qi>=Q.length){
const pct=Math.round(score/Q.length*100);
box.innerHTML=`
Result${score}/${Q.length}
${pct}%
${pct>=72?'Above the typical 72% CWI pass mark — nice work.':'Keep going. Review the explanations and try again.'}