{"id":24972,"date":"2026-10-23T06:27:58","date_gmt":"2026-10-23T06:27:58","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24972"},"modified":"2026-10-23T06:29:49","modified_gmt":"2026-10-23T06:29:49","slug":"carbon-equivalent-ce-weldability-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/es\/carbon-equivalent-ce-weldability-calculator\/","title":{"rendered":"Carbon Equivalent (CE) Weldability Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The Carbon Equivalent (CE) Weldability Calculator is a practical engineering tool designed to evaluate steel weldability based on chemical composition and alloying elements. Using established formulas such as IIW CEV, AWS Carbon Equivalent, and Pcm, this calculator helps welding engineers estimate carbon equivalent values, assess steel hardenability, and identify potential hydrogen-induced cracking concerns. By entering the percentages of carbon, manganese, chromium, nickel, molybdenum, and other alloying elements, users can quickly calculate carbon equivalent values and evaluate preliminary weldability characteristics. Ideal for welding engineers, metallurgists, steel manufacturers, and fabrication professionals, the Carbon Equivalent (CE) Weldability Calculator supports material selection, welding procedure planning, and quality control. Improve welding efficiency and make informed engineering decisions with reliable, formula-based weldability assessments.<\/p>\n\n\n\n<div id=\"cec-calculator\" class=\"cec-root\" data-cec-widget=\"carbon-equivalent-weldability\">\n<style>\n#cec-calculator,#cec-calculator *,#cec-calculator *::before,#cec-calculator *::after{box-sizing:border-box}\n#cec-calculator{\n  --cec-bg:#ffffff;--cec-card:#ffffff;--cec-navy:#16202e;--cec-text:#2b3442;--cec-muted:#5b6675;--cec-soft:#808b99;\n  --cec-line:#d5dbe3;--cec-line-soft:#e6eaf0;--cec-panel:#f6f8fb;--cec-accent:#1d64c8;--cec-accent-dark:#154c9a;--cec-accent-soft:#e8f0fb;\n  --cec-err:#b42318;--cec-err-soft:#fdecea;--cec-warn:#7a5200;--cec-warn-soft:#fff6e0;--cec-ok:#17643f;--cec-ok-soft:#e7f5ee;\n  display:block;width:100%;max-width:1180px;margin:24px auto;padding:28px;background:var(--cec-bg);color:var(--cec-text);\n  border:1px solid var(--cec-line-soft);border-radius:20px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif;\n  font-size:16px;line-height:1.55;font-weight:400;letter-spacing:normal;text-transform:none;text-indent:0;word-spacing:normal;-webkit-font-smoothing:antialiased;text-align:left;position:relative\n}\n#cec-calculator .cec-wrap{container-type:inline-size;container-name:cec;width:100%}\n#cec-calculator h1,#cec-calculator h2,#cec-calculator h3,#cec-calculator h4,#cec-calculator p,#cec-calculator ul,#cec-calculator ol,#cec-calculator li,#cec-calculator dl,#cec-calculator dt,#cec-calculator dd,#cec-calculator figure,#cec-calculator figcaption,#cec-calculator details,#cec-calculator summary,#cec-calculator fieldset,#cec-calculator legend,#cec-calculator label,#cec-calculator header,#cec-calculator section,#cec-calculator article,#cec-calculator aside,#cec-calculator table,#cec-calculator th,#cec-calculator td{\n  margin:0;padding:0;border:0;background:none;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;font-style:normal;line-height:inherit;text-indent:0;text-transform:none;letter-spacing:normal;text-shadow:none;box-shadow:none;float:none;width:auto;max-width:none;min-width:0\n}\n#cec-calculator ul,#cec-calculator ol{list-style:none}\n#cec-calculator a{color:var(--cec-accent);text-decoration:underline}\n#cec-calculator sub,#cec-calculator sup{font-size:.72em;line-height:0;position:relative;vertical-align:baseline}\n#cec-calculator sub{bottom:-.25em}\n#cec-calculator sup{top:-.5em}\n#cec-calculator [hidden]{display:none!important}\n#cec-calculator .cec-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;align-items:start}\n#cec-calculator .cec-left{container-type:inline-size;container-name:cecl;min-width:0}\n#cec-calculator .cec-right{min-width:0}\n#cec-calculator .cec-card{background:var(--cec-card);border:1px solid var(--cec-line-soft);border-radius:16px;padding:20px;box-shadow:0 1px 2px rgba(22,32,46,.04),0 4px 14px rgba(22,32,46,.05);min-width:0}\n#cec-calculator .cec-card+.cec-card{margin-top:14px}\n#cec-calculator .cec-card-title{margin:0 0 4px;color:var(--cec-navy);font-size:17.5px;font-weight:650;line-height:1.3;display:flex;align-items:center;gap:10px}\n#cec-calculator .cec-step{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:var(--cec-accent-soft);color:var(--cec-accent);font-size:12.8px;font-weight:700}\n#cec-calculator .cec-card-note{color:var(--cec-muted);font-size:14px;margin:0 0 14px}\n#cec-calculator .cec-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px 16px}\n#cec-calculator .cec-elgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 12px}\n#cec-calculator .cec-field{min-width:0}\n#cec-calculator .cec-span{grid-column:1\/-1}\n#cec-calculator .cec-label{display:block;font-size:14px;font-weight:600;color:var(--cec-navy);margin:0 0 6px;line-height:1.3}\n#cec-calculator .cec-label b{font-weight:700;color:var(--cec-accent-dark)}\n#cec-calculator .cec-hint{display:block;color:var(--cec-soft);font-size:12.7px;margin-top:5px;line-height:1.45}\n#cec-calculator .cec-error{display:block;color:var(--cec-err);font-size:13px;margin-top:4px;line-height:1.4}\n#cec-calculator .cec-error:empty{display:none}\n#cec-calculator .cec-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:stretch}\n#cec-calculator .cec-unit{display:inline-flex;align-items:center;justify-content:center;min-width:52px;min-height:46px;padding:0 10px;border-radius:11px;background:#eef2f7;color:var(--cec-muted);font-size:13.5px;font-weight:600;white-space:nowrap}\n#cec-calculator input[type=number],#cec-calculator input[type=text],#cec-calculator select{\n  -webkit-appearance:none;appearance:none;display:block;width:100%;min-height:46px;height:auto;margin:0;padding:10px 12px;font:inherit;font-size:16px;line-height:1.3;\n  color:var(--cec-text);background-color:#fff;border:1px solid var(--cec-line);border-radius:11px;box-shadow:none;outline:none;max-width:none;transition:border-color .15s ease,box-shadow .15s ease\n}\n#cec-calculator input[type=number]{-moz-appearance:textfield}\n#cec-calculator input[type=number]::-webkit-inner-spin-button,#cec-calculator input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}\n#cec-calculator select{padding-right:34px;background-image:linear-gradient(45deg,transparent 50%,#5b6675 50%),linear-gradient(135deg,#5b6675 50%,transparent 50%);background-position:calc(100% - 18px) 20px,calc(100% - 13px) 20px;background-size:5px 5px,5px 5px;background-repeat:no-repeat;cursor:pointer}\n#cec-calculator select.cec-usel{width:auto;min-width:86px;background-color:#eef2f7;font-weight:600;font-size:14px;color:var(--cec-muted)}\n#cec-calculator input:focus,#cec-calculator select:focus{border-color:var(--cec-accent);box-shadow:0 0 0 4px rgba(29,100,200,.17)}\n#cec-calculator input::placeholder{color:#a7b1be;opacity:1}\n#cec-calculator .cec-invalid{border-color:var(--cec-err)!important;box-shadow:0 0 0 3px rgba(180,35,24,.12)!important}\n#cec-calculator .cec-modes{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;border:0;margin:0;padding:0;position:relative}\n#cec-calculator .cec-modes legend{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n#cec-calculator .cec-modes input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}\n#cec-calculator .cec-modes label{display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:58px;padding:9px 12px;border:1px solid var(--cec-line);border-radius:12px;cursor:pointer;background:#fff;transition:border-color .15s,background .15s,box-shadow .15s}\n#cec-calculator .cec-modes label b{font-weight:650;font-size:14.6px;color:var(--cec-navy);line-height:1.25}\n#cec-calculator .cec-modes label small{font-size:12.2px;color:var(--cec-soft);line-height:1.3}\n#cec-calculator .cec-modes input:checked+label{border-color:var(--cec-accent);background:var(--cec-accent-soft);box-shadow:inset 0 0 0 1px var(--cec-accent)}\n#cec-calculator .cec-modes input:focus-visible+label{outline:3px solid rgba(29,100,200,.4);outline-offset:1px}\n#cec-calculator .cec-eq{margin-top:12px;padding:10px 12px;border-radius:10px;background:var(--cec-panel);border:1px solid var(--cec-line-soft);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13.4px;color:var(--cec-navy);overflow-wrap:anywhere}\n#cec-calculator .cec-modedesc{margin-top:8px;font-size:13.4px;color:var(--cec-muted)}\n#cec-calculator .cec-info{padding:12px 14px;border-radius:11px;background:var(--cec-panel);border:1px solid var(--cec-line-soft);font-size:13.5px;color:var(--cec-muted);line-height:1.5}\n#cec-calculator .cec-info strong{color:var(--cec-navy);font-weight:650}\n#cec-calculator .cec-check{display:flex;gap:10px;align-items:flex-start;font-size:14.2px;font-weight:600;color:var(--cec-navy);cursor:pointer;line-height:1.4}\n#cec-calculator .cec-check input{flex:0 0 18px;width:18px;height:18px;margin:2px 0 0;accent-color:var(--cec-accent);cursor:pointer}\n#cec-calculator .cec-check span small{display:block;font-weight:400;color:var(--cec-soft);font-size:12.6px;margin-top:2px}\n#cec-calculator .cec-confirm{margin-top:16px;padding:12px 14px;border:1px solid #f0d9a6;background:var(--cec-warn-soft);border-radius:12px}\n#cec-calculator .cec-actions{display:flex;justify-content:center;margin-top:16px}\n#cec-calculator .cec-btn{-webkit-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;min-height:48px;margin:0;padding:10px 14px;border-radius:999px;border:1px solid var(--cec-line);background:#fff;color:var(--cec-navy);font:inherit;font-size:15px;font-weight:600;line-height:1.2;cursor:pointer;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;width:auto;min-width:200px;height:auto;text-align:center;transition:background .15s,border-color .15s,color .15s}\n#cec-calculator .cec-btn:hover{border-color:var(--cec-accent);color:var(--cec-accent-dark)}\n#cec-calculator .cec-btn[disabled]{opacity:.5;cursor:not-allowed}\n#cec-calculator .cec-btn[disabled]:hover{border-color:var(--cec-line);color:var(--cec-navy)}\n#cec-calculator .cec-btn-primary{background:var(--cec-accent);border-color:var(--cec-accent);color:#fff}\n#cec-calculator .cec-btn-primary:hover{background:var(--cec-accent-dark);border-color:var(--cec-accent-dark);color:#fff}\n#cec-calculator .cec-btn-secondary{background:var(--cec-accent-soft);border-color:#c6d8f2;color:var(--cec-accent-dark)}\n#cec-calculator .cec-btn:focus-visible{outline:3px solid rgba(29,100,200,.4);outline-offset:2px}\n#cec-calculator .cec-form-msg{text-align:center;color:var(--cec-err);font-size:13.8px;margin-top:10px;min-height:1.3em}\n#cec-calculator .cec-form-msg.cec-good{color:var(--cec-ok)}\n#cec-calculator .cec-placeholder{color:var(--cec-muted);font-size:14.5px;padding:18px;border:1px dashed var(--cec-line);border-radius:12px;background:var(--cec-panel);margin-top:12px}\n#cec-calculator .cec-res-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:8px 12px;margin:10px 0 14px}\n#cec-calculator .cec-eyebrow{display:block;font-size:12.2px;font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:var(--cec-soft)}\n#cec-calculator .cec-res-title{display:block;font-size:19px;font-weight:700;color:var(--cec-navy);line-height:1.25}\n#cec-calculator .cec-badge{display:inline-block;padding:3px 11px;border-radius:999px;font-size:12.6px;font-weight:700;line-height:1.5;white-space:normal}\n#cec-calculator .cec-b-low{background:var(--cec-ok-soft);color:var(--cec-ok)}\n#cec-calculator .cec-b-mid{background:var(--cec-warn-soft);color:var(--cec-warn)}\n#cec-calculator .cec-b-high{background:var(--cec-err-soft);color:var(--cec-err)}\n#cec-calculator .cec-b-ne{background:#eef1f5;color:#4d5866}\n#cec-calculator .cec-hero{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}\n#cec-calculator .cec-hero-card{border-radius:13px;padding:13px 15px;border:1px solid var(--cec-line-soft);background:var(--cec-panel);min-width:0;position:relative}\n#cec-calculator .cec-hero-card.cec-primary{background:var(--cec-accent-soft);border-color:#9fc0ea;box-shadow:inset 0 0 0 1px #9fc0ea}\n#cec-calculator .cec-hero-label{font-size:13px;font-weight:650;color:var(--cec-muted);line-height:1.35}\n#cec-calculator .cec-hero-tag{display:inline-block;margin-left:6px;padding:0 7px;border-radius:999px;background:var(--cec-accent);color:#fff;font-size:11px;font-weight:700;vertical-align:1px}\n#cec-calculator .cec-hero-value{font-size:clamp(22px,2.6vw,27px);font-weight:700;color:var(--cec-navy);letter-spacing:-.01em;line-height:1.2;margin-top:4px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}\n#cec-calculator .cec-hero-value.cec-na{font-size:16px;color:var(--cec-soft);font-weight:650}\n#cec-calculator .cec-hero-sub{font-size:12.6px;color:var(--cec-muted);margin-top:4px;line-height:1.45;overflow-wrap:anywhere}\n#cec-calculator .cec-sec{color:var(--cec-navy);font-size:15.2px;font-weight:650;margin:20px 0 8px}\n#cec-calculator .cec-interp p{font-size:14.6px;color:var(--cec-text);line-height:1.6}\n#cec-calculator .cec-interp p+p{margin-top:8px}\n#cec-calculator .cec-params{display:grid;grid-template-columns:minmax(0,1fr);gap:0;border:1px solid var(--cec-line-soft);border-radius:12px;overflow:hidden}\n#cec-calculator .cec-params div{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:10px;padding:8px 12px;font-size:13.6px;border-top:1px solid var(--cec-line-soft)}\n#cec-calculator .cec-params div:first-child{border-top:0}\n#cec-calculator .cec-params dt{color:var(--cec-muted)}\n#cec-calculator .cec-params dd{color:var(--cec-navy);font-weight:600;text-align:right;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}\n#cec-calculator .cec-steps{display:grid;gap:6px}\n#cec-calculator .cec-steps li{padding:7px 12px;background:var(--cec-panel);border:1px dashed var(--cec-line);border-radius:10px;font-size:13.4px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n#cec-calculator .cec-steps li.cec-step-total{background:var(--cec-accent-soft);border-style:solid;border-color:#c9dbf3;font-weight:700;color:var(--cec-navy)}\n#cec-calculator .cec-det{border:1px solid var(--cec-line-soft);border-radius:12px;padding:0;margin-top:8px;background:#fff}\n#cec-calculator .cec-det summary{cursor:pointer;padding:10px 14px;font-weight:650;color:var(--cec-navy);font-size:14.2px;list-style:none;display:flex;justify-content:space-between;gap:10px}\n#cec-calculator .cec-det summary::-webkit-details-marker{display:none}\n#cec-calculator .cec-det summary::after{content:\"+\";color:var(--cec-soft);font-weight:700}\n#cec-calculator .cec-det[open] summary::after{content:\"\u2212\"}\n#cec-calculator .cec-det-body{padding:0 14px 12px}\n#cec-calculator .cec-notes{display:grid;gap:7px}\n#cec-calculator .cec-notes li{padding:9px 12px 9px 14px;border-radius:10px;font-size:13.4px;line-height:1.5;border-left:4px solid #b7c3d2;background:var(--cec-panel)}\n#cec-calculator .cec-notes li.cec-n-e{border-left-color:var(--cec-err);background:var(--cec-err-soft);color:#6e1a12}\n#cec-calculator .cec-notes li.cec-n-w{border-left-color:#d49b16;background:var(--cec-warn-soft);color:#5c4300}\n#cec-calculator .cec-notes li strong{font-weight:650}\n@container cecl (min-width:520px){\n  #cec-calculator .cec-elgrid{grid-template-columns:repeat(3,minmax(0,1fr))}\n  #cec-calculator .cec-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n  #cec-calculator .cec-modes{grid-template-columns:repeat(3,minmax(0,1fr))}\n}\n@media (max-width:700px){\n  #cec-calculator{padding:18px 14px;border-radius:16px;margin:12px auto}\n  #cec-calculator .cec-card{padding:16px 14px;border-radius:14px}\n  #cec-calculator .cec-params div{grid-template-columns:minmax(0,1fr);gap:2px}\n  #cec-calculator .cec-params dd{text-align:left}\n}\n@media (prefers-reduced-motion:reduce){#cec-calculator *{transition:none!important}}\n@media print{#cec-calculator .cec-actions,#cec-calculator .cec-form-msg{display:none!important}#cec-calculator .cec-right{position:static}}\n<\/style>\n<div class=\"cec-wrap\">\n<div class=\"cec-layout\">\n<form class=\"cec-left\" id=\"cec-form\" novalidate onsubmit=\"return false;\">\n<section class=\"cec-card\" aria-labelledby=\"cec-h-method\">\n<h2 class=\"cec-card-title\" id=\"cec-h-method\"><span class=\"cec-step\" aria-hidden=\"true\">1<\/span>Calculation method and material<\/h2>\n<p class=\"cec-card-note\">Choose the formula to calculate. Other formulas are also shown when the entered composition covers them.<\/p>\n<fieldset class=\"cec-modes\">\n<legend>Carbon equivalent formula<\/legend>\n<input type=\"radio\" id=\"cec-m-iiw\" name=\"cec-method\" value=\"iiw\" checked><label for=\"cec-m-iiw\"><b>IIW CEV<\/b><small>Mode A \u00b7 International Institute of Welding<\/small><\/label>\n<input type=\"radio\" id=\"cec-m-aws\" name=\"cec-method\" value=\"aws\"><label for=\"cec-m-aws\"><b>AWS-style CE<\/b><small>Mode B \u00b7 selected AWS-style equation<\/small><\/label>\n<input type=\"radio\" id=\"cec-m-pcm\" name=\"cec-method\" value=\"pcm\"><label for=\"cec-m-pcm\"><b>Pcm<\/b><small>Mode C \u00b7 crack susceptibility index<\/small><\/label>\n<\/fieldset>\n<div class=\"cec-eq\" id=\"cec-eq\" aria-live=\"polite\"><\/div>\n<p class=\"cec-modedesc\" id=\"cec-modedesc\"><\/p>\n<div class=\"cec-grid\" style=\"margin-top:14px\">\n<div class=\"cec-field cec-span\">\n<label class=\"cec-label\" for=\"cec-material\">Material category <span style=\"color:var(--cec-soft);font-weight:400;font-size:12.8px\">(optional, context only)<\/span><\/label>\n<select id=\"cec-material\" aria-describedby=\"cec-matinfo\">\n<option value=\"custom\" selected>Custom Steel Composition<\/option>\n<option value=\"low\">Low Carbon Steel<\/option>\n<option value=\"medium\">Medium Carbon Steel<\/option>\n<option value=\"hsla\">High Strength Low Alloy Steel<\/option>\n<option value=\"structural\">Structural Steel<\/option>\n<option value=\"pipeline\">Pipeline Steel<\/option>\n<\/select>\n<\/div>\n<div class=\"cec-info cec-span\" id=\"cec-matinfo\" aria-live=\"polite\"><\/div>\n<\/div>\n<\/section>\n<section class=\"cec-card\" aria-labelledby=\"cec-h-comp\">\n<h2 class=\"cec-card-title\" id=\"cec-h-comp\"><span class=\"cec-step\" aria-hidden=\"true\">2<\/span>Chemical composition<\/h2>\n<p class=\"cec-card-note\">Enter values in weight percent (wt.%) from the mill test certificate or product analysis. Enter 0 only for a confirmed absence. Blank fields are <strong>not<\/strong> assumed to be zero.<\/p>\n<div class=\"cec-elgrid\" id=\"cec-elgrid\">\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-C\">Carbon (<b>C<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-C\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.18\" aria-describedby=\"cec-C-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-C-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Mn\">Manganese (<b>Mn<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Mn\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 1.20\" aria-describedby=\"cec-Mn-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Mn-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Si\">Silicon (<b>Si<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Si\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.30\" aria-describedby=\"cec-Si-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Si-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Cr\">Chromium (<b>Cr<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Cr\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.20\" aria-describedby=\"cec-Cr-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Cr-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Ni\">Nickel (<b>Ni<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Ni\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.10\" aria-describedby=\"cec-Ni-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Ni-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Mo\">Molybdenum (<b>Mo<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Mo\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.05\" aria-describedby=\"cec-Mo-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Mo-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-V\">Vanadium (<b>V<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-V\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.02\" aria-describedby=\"cec-V-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-V-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field\"><label class=\"cec-label\" for=\"cec-Cu\">Copper (<b>Cu<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-Cu\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.15\" aria-describedby=\"cec-Cu-err\"><span class=\"cec-unit\" aria-hidden=\"true\">wt.%<\/span><\/div><span class=\"cec-error\" id=\"cec-Cu-err\" aria-live=\"polite\"><\/span><\/div>\n<div class=\"cec-field cec-span\"><label class=\"cec-label\" for=\"cec-B\">Boron (<b>B<\/b>)<\/label><div class=\"cec-row\"><input id=\"cec-B\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 0.0005\" aria-describedby=\"cec-B-hint cec-B-err\"><select class=\"cec-usel\" id=\"cec-Bunit\" data-prev=\"wt\" aria-label=\"Boron unit\"><option value=\"wt\" selected>wt.%<\/option><option value=\"ppm\">ppm<\/option><\/select><\/div><span class=\"cec-hint\" id=\"cec-B-hint\">1 ppm = 0.0001 wt.%<\/span><span class=\"cec-error\" id=\"cec-B-err\" aria-live=\"polite\"><\/span><\/div>\n<\/div>\n<div class=\"cec-confirm\">\n<label class=\"cec-check\" for=\"cec-zero\"><input type=\"checkbox\" id=\"cec-zero\"><span>Treat blank elements as zero for a preliminary calculation<small>Applies only to elements left blank. Carbon and manganese must always be entered. Residual elements are rarely exactly zero, so this can underestimate the result.<\/small><\/span><\/label>\n<\/div>\n<\/section>\n<div class=\"cec-actions\">\n<button type=\"button\" class=\"cec-btn cec-btn-primary\" id=\"cec-calc\">Calculate<\/button>\n<\/div>\n<p class=\"cec-form-msg\" id=\"cec-msg\" role=\"status\" aria-live=\"polite\"><\/p>\n<\/form>\n<div class=\"cec-right\">\n<section class=\"cec-card\" id=\"cec-results\" aria-labelledby=\"cec-h-res\" tabindex=\"-1\" hidden>\n<h2 class=\"cec-card-title\" id=\"cec-h-res\"><span class=\"cec-step\" aria-hidden=\"true\">3<\/span>Carbon equivalent results<\/h2>\n<div id=\"cec-res-body\" aria-live=\"polite\"><\/div>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<script>\n(function () {\n  \"use strict\";\n  \/* =====================================================================\n     ELEMENT AND FORMULA DEFINITIONS\n     All concentrations are handled internally in wt.%.\n     Each formula term: [element, multiplier, divisor, display text].\n     ===================================================================== *\/\n  var ELEMS = [\"C\", \"Mn\", \"Si\", \"Cr\", \"Ni\", \"Mo\", \"V\", \"Cu\", \"B\"];\n  var ENAME = { C: \"Carbon\", Mn: \"Manganese\", Si: \"Silicon\", Cr: \"Chromium\", Ni: \"Nickel\", Mo: \"Molybdenum\", V: \"Vanadium\", Cu: \"Copper\", B: \"Boron\" };\n  var ECOL = { C: \"#1d4ed8\", Mn: \"#0e7490\", Si: \"#7c3aed\", Cr: \"#b45309\", Ni: \"#15803d\", Mo: \"#be123c\", V: \"#a16207\", Cu: \"#c2410c\", B: \"#475569\" };\n  var MUST = [\"C\", \"Mn\"];\n  var FORM = {\n    iiw: { id: \"iiw\", name: \"IIW Carbon Equivalent (CEV)\", short: \"IIW CEV\", sym: \"CEV\", color: \"#1d64c8\",\n      eq: \"CEV = C + Mn\/6 + (Cr + Mo + V)\/5 + (Ni + Cu)\/15\",\n      desc: \"Mode A. The International Institute of Welding formula, widely used for carbon-manganese and low-alloy structural steels. Preliminary screening bands are applied to this result only.\",\n      terms: [[\"C\", 1, 1, \"C\"], [\"Mn\", 1, 6, \"Mn\/6\"], [\"Cr\", 1, 5, \"Cr\/5\"], [\"Mo\", 1, 5, \"Mo\/5\"], [\"V\", 1, 5, \"V\/5\"], [\"Ni\", 1, 15, \"Ni\/15\"], [\"Cu\", 1, 15, \"Cu\/15\"]] },\n    aws: { id: \"aws\", name: \"AWS-style Carbon Equivalent (CE)\", short: \"AWS CE\", sym: \"CE\", color: \"#0f8a7e\",\n      eq: \"CE = C + Mn\/6 + Si\/24 + Ni\/40 + Cr\/5 + Mo\/4 + V\/14\",\n      desc: \"Mode B. The selected AWS-style carbon equivalent equation. It is not applicable to every steel grade or to every edition and procedure of AWS D1.1. Check welding procedure requirements against the applicable standard and edition.\",\n      terms: [[\"C\", 1, 1, \"C\"], [\"Mn\", 1, 6, \"Mn\/6\"], [\"Si\", 1, 24, \"Si\/24\"], [\"Ni\", 1, 40, \"Ni\/40\"], [\"Cr\", 1, 5, \"Cr\/5\"], [\"Mo\", 1, 4, \"Mo\/4\"], [\"V\", 1, 14, \"V\/14\"]] },\n    pcm: { id: \"pcm\", name: \"Pcm Crack Susceptibility Index\", short: \"Pcm\", sym: \"Pcm\", color: \"#b26a00\",\n      eq: \"Pcm = C + Si\/30 + Mn\/20 + Cu\/20 + Ni\/60 + Cr\/20 + Mo\/15 + V\/10 + 5B\",\n      desc: \"Mode C. The Ito\u2013Bessyo crack susceptibility parameter, commonly used for low-carbon (about C \u2264 0.12 wt.%) and microalloyed steels. Boron is converted from ppm to wt.% when needed.\",\n      terms: [[\"C\", 1, 1, \"C\"], [\"Si\", 1, 30, \"Si\/30\"], [\"Mn\", 1, 20, \"Mn\/20\"], [\"Cu\", 1, 20, \"Cu\/20\"], [\"Ni\", 1, 60, \"Ni\/60\"], [\"Cr\", 1, 20, \"Cr\/20\"], [\"Mo\", 1, 15, \"Mo\/15\"], [\"V\", 1, 10, \"V\/10\"], [\"B\", 5, 1, \"5B\"]] }\n  };\n  var ORDER = [\"iiw\", \"aws\", \"pcm\"];\n  \/* Ito\u2013Bessyo composition range of the original Pcm study (wt.%) *\/\n  var PCM_RANGE = { C: [0.07, 0.22], Si: [0, 0.6], Mn: [0.4, 1.4], Cu: [0, 0.5], Ni: [0, 1.2], Cr: [0, 1.2], Mo: [0, 0.7], V: [0, 0.12], B: [0, 0.005] };\n  var MAT = {\n    custom: { name: \"Custom Steel Composition\", info: \"Enter the composition exactly as reported on the mill test certificate or product analysis.\" },\n    low: { name: \"Low Carbon Steel\", info: \"Commonly up to about 0.25\u20130.30 wt.% C. Usually the most readily welded group, but thick sections, high restraint or high hydrogen can still cause cold cracking.\" },\n    medium: { name: \"Medium Carbon Steel\", info: \"Roughly 0.30\u20130.60 wt.% C. Carbon dominates every CE formula, hardenability is high, and preheat, controlled heat input and low-hydrogen practice are frequently needed. Some grades need post-weld heat treatment.\" },\n    hsla: { name: \"High Strength Low Alloy Steel\", info: \"Low carbon with microalloying (Nb, V, Ti) and often thermomechanical processing. Pcm is frequently preferred for low-carbon HSLA grades. Nb and Ti are not included in these three formulas.\" },\n    structural: { name: \"Structural Steel\", info: \"Structural product standards (for example EN 10025) often specify a maximum CEV for each grade and thickness. Use the actual certificate chemistry and the standard's own formula and limits.\" },\n    pipeline: { name: \"Pipeline Steel\", info: \"Line pipe specifications such as API 5L \/ ISO 3183 PSL 2 use CE Pcm for C \u2264 0.12 wt.% and CE IIW for C > 0.12 wt.%, each with its own maximum.\" }\n  };\n  var BAND = {\n    low: { t: \"Lower hardenability concern\", c: \"cec-b-low\", r: \"below 0.35%\" },\n    mid: { t: \"Increasing hardenability concern\", c: \"cec-b-mid\", r: \"0.35% to 0.45%\" },\n    high: { t: \"Higher hardenability concern\", c: \"cec-b-high\", r: \"above 0.45%\" }\n  };\n  \/* =====================================================================\n     NUMBER HELPERS (never display NaN or Infinity)\n     ===================================================================== *\/\n  function isNum(v) { return typeof v === \"number\" ? isFinite(v) : false; }\n  function fx(v, d) {\n    if (!isNum(v)) { return \"\u2014\"; }\n    var s = v.toFixed(d);\n    if (Number(s) === 0) { s = (0).toFixed(d); }\n    return s;\n  }\n  function fin(v) {\n    if (!isNum(v)) { return \"\u2014\"; }\n    return String(Number(v.toPrecision(6)));\n  }\n  function r3(v) { return Number(v.toFixed(3)); }\n  function bandOf(v) {\n    var x = r3(v);\n    if (x < 0.35) { return \"low\"; }\n    if (x <= 0.45) { return \"mid\"; }\n    return \"high\";\n  }\n  \/* =====================================================================\n     CALCULATION ENGINE\n     ===================================================================== *\/\n  function compute(fid, d, confirmZero) {\n    var f = FORM[fid], r = { id: fid, ok: false, value: null, terms: [], zero: [], missing: [], hard: [], invalid: [], reason: \"\" };\n    var sum = 0;\n    f.terms.forEach(function (t) {\n      var k = t[0], v = d.val[k];\n      if (d.err[k]) { r.invalid.push(k); return; }\n      if (v === null) {\n        if (MUST.indexOf(k) >= 0) { r.hard.push(k); return; }\n        if (!confirmZero) { r.missing.push(k); return; }\n        r.zero.push(k);\n        v = 0;\n      }\n      var c = v * t[1] \/ t[2];\n      r.terms.push({ k: k, v: v, mult: t[1], div: t[2], txt: t[3], c: c, assumed: r.zero.indexOf(k) >= 0 });\n      sum += c;\n    });\n    if (r.invalid.length) { r.reason = \"Correct invalid input: \" + r.invalid.join(\", \") + \".\"; return r; }\n    if (r.hard.length) { r.reason = \"Enter \" + r.hard.join(\" and \") + \" (\" + (r.hard.length > 1 ? \"they are\" : \"it is\") + \" never assumed to be zero).\"; return r; }\n    if (r.missing.length) { r.reason = \"Missing \" + r.missing.join(\", \") + \". Enter values or confirm treating blanks as zero.\"; return r; }\n    if (!isNum(sum)) { r.reason = \"The inputs produce a non-finite result. Check the values.\"; return r; }\n    r.ok = true; r.value = sum;\n    return r;\n  }\n  \/* =====================================================================\n     USER INTERFACE\n     ===================================================================== *\/\n  function init() {\n    var root = document.getElementById(\"cec-calculator\");\n    if (!root) { return; }\n    if (root.getAttribute(\"data-cec-init\") === \"1\") { return; }\n    root.setAttribute(\"data-cec-init\", \"1\");\n    function q(id) { return root.querySelector(\"#\" + id); }\n    function radio(name) { var e = root.querySelector('input[name=\"' + name + '\"]:checked'); return e ? e.value : \"\"; }\n    function h(tag, a, kids) {\n      var n = document.createElement(tag);\n      if (a) { Object.keys(a).forEach(function (k) { if (k === \"class\") { n.className = a[k]; } else if (k === \"text\") { n.textContent = a[k]; } else if (k === \"html\") { n.innerHTML = a[k]; } else { n.setAttribute(k, a[k]); } }); }\n      add(n, kids);\n      return n;\n    }\n    function add(n, kids) {\n      if (kids === undefined ? true : kids === null) { return; }\n      if (Array.isArray(kids)) { kids.forEach(function (k) { add(n, k); }); return; }\n      if (typeof kids === \"string\" ? true : typeof kids === \"number\") { n.appendChild(document.createTextNode(String(kids))); return; }\n      n.appendChild(kids);\n    }\n    function clear(n) { while (n.firstChild) { n.removeChild(n.firstChild); } }\n    var state = { last: null, live: false, kind: \"selected\", timer: null };\n    \/* ---------- reading and validating inputs ---------- *\/\n    function readData() {\n      var d = { val: {}, err: {}, blank: {}, entered: {}, bUnit: q(\"cec-Bunit\").value, bRaw: null, notes: [] };\n      ELEMS.forEach(function (k) {\n        var el = q(\"cec-\" + k), str = String(el.value).trim();\n        d.val[k] = null;\n        if (str === \"\") {\n          if (el.validity ? el.validity.badInput : false) { d.err[k] = \"Enter a numeric value.\"; }\n          else { d.blank[k] = true; }\n          return;\n        }\n        var n = Number(str);\n        if (!isFinite(n)) { d.err[k] = \"Enter a numeric value.\"; return; }\n        if (n < 0) { d.err[k] = \"Negative concentrations are not allowed. Enter 0 for a confirmed absence.\"; return; }\n        var w = n;\n        if (k === \"B\") {\n          d.bRaw = n;\n          if (d.bUnit === \"ppm\") {\n            if (n > 10000) { d.err.B = \"More than 10,000 ppm (1 wt.%) boron is not plausible for steel. Check the value and unit.\"; return; }\n            w = n \/ 10000;\n          } else if (n > 1) {\n            d.err.B = \"Boron of \" + fin(n) + \" wt.% (= \" + fin(n * 10000) + \" ppm) is not plausible for steel. If the reported value is in ppm, switch the unit to ppm.\";\n            return;\n          }\n        } else if (n > 100) { d.err[k] = \"A concentration cannot exceed 100 wt.%.\"; return; }\n        d.val[k] = w; d.entered[k] = true;\n      });\n      return d;\n    }\n    function setErr(k, msg) {\n      var input = q(\"cec-\" + k), e = q(\"cec-\" + k + \"-err\");\n      if (e) { e.textContent = msg ? msg : \"\"; }\n      if (!input) { return; }\n      if (msg) { input.classList.add(\"cec-invalid\"); input.setAttribute(\"aria-invalid\", \"true\"); }\n      else { input.classList.remove(\"cec-invalid\"); input.removeAttribute(\"aria-invalid\"); }\n    }\n    function clearErrors() { ELEMS.forEach(function (k) { setErr(k, \"\"); }); }\n    function msg(text, good) { var m = q(\"cec-msg\"); m.textContent = text ? text : \"\"; m.className = \"cec-form-msg\" + (good ? \" cec-good\" : \"\"); }\n    \/* ---------- boron unit hint and conversion ---------- *\/\n    function updateBHint() {\n      var el = q(\"cec-B\"), u = q(\"cec-Bunit\").value, str = String(el.value).trim(), hint = q(\"cec-B-hint\");\n      var n = Number(str);\n      if (str === \"\" ? true : (!isFinite(n) ? true : n < 0)) { hint.textContent = \"1 ppm = 0.0001 wt.%. Select the unit used in your analysis report.\"; return; }\n      hint.textContent = u === \"ppm\" ? fin(n) + \" ppm = \" + fin(n \/ 10000) + \" wt.% (used in Pcm)\" : fin(n) + \" wt.% = \" + fin(n * 10000) + \" ppm\";\n    }\n    \/* The unit selector states the unit of the number as reported; the entered\n       number is NOT rescaled on change (prevents 20 ppm becoming 200,000 ppm).\n       The hint always shows the equivalent in the other unit. *\/\n    function onBUnitChange() {\n      var sel = q(\"cec-Bunit\");\n      sel.setAttribute(\"data-prev\", sel.value);\n      q(\"cec-B\").placeholder = sel.value === \"ppm\" ? \"e.g. 5\" : \"e.g. 0.0005\";\n      updateBHint();\n    }\n    \/* ---------- contextual text ---------- *\/\n    function updateMethodText() {\n      var f = FORM[radio(\"cec-method\") ? radio(\"cec-method\") : \"iiw\"];\n      q(\"cec-eq\").textContent = f.eq;\n      q(\"cec-modedesc\").textContent = f.desc;\n    }\n    function updateMaterialInfo() {\n      var m = MAT[q(\"cec-material\").value], box = q(\"cec-matinfo\");\n      clear(box);\n      box.appendChild(h(\"strong\", { text: m.name + \". \" }));\n      box.appendChild(document.createTextNode(m.info + \" No composition values are filled in from this selection.\"));\n    }\n    \/* =====================================================================\n       ENGINEERING NOTES\n       ===================================================================== *\/\n    function buildNotes(d, res, conf) {\n      var N = [];\n      function W(lvl, text) { N.push({ lvl: lvl, text: text }); }\n      var v = d.val, total = 0, anyOk = false, zero = {};\n      ELEMS.forEach(function (k) { if (v[k] !== null) { total += v[k]; } });\n      ORDER.forEach(function (id) { if (res[id] ? res[id].ok : false) { anyOk = true; res[id].zero.forEach(function (k) { zero[k] = true; }); } });\n      if (total > 100) { W(\"e\", \"The entered elements total \" + fx(total, 3) + \" wt.%, which exceeds 100 wt.%. The composition is not physically possible. Check for unit or decimal errors.\"); }\n      if (v.C !== null) {\n        if (v.C > 2.1) { W(\"e\", \"C = \" + fin(v.C) + \" wt.% is above about 2.1 wt.%, the upper limit for steel (cast iron range). These formulas are not applicable.\"); }\n        else if (v.C > 0.6) { W(\"w\", \"C = \" + fin(v.C) + \" wt.% is high-carbon steel, well beyond the carbon-manganese and low-alloy steels these formulas were developed for. Treat the result as indicative only.\"); }\n      }\n      if (v.Cr !== null ? v.Cr >= 10.5 : false) { W(\"e\", \"Cr \u2265 10.5 wt.% indicates a stainless steel. Carbon-equivalent formulas for ferritic steels are not applicable. Use stainless-steel weldability methods, such as constitution diagrams.\"); }\n      else {\n        var hi = [];\n        if (v.Cr !== null ? v.Cr > 5 : false) { hi.push(\"Cr \" + fin(v.Cr)); }\n        if (v.Ni !== null ? v.Ni > 5 : false) { hi.push(\"Ni \" + fin(v.Ni)); }\n        if (v.Mo !== null ? v.Mo > 1.5 : false) { hi.push(\"Mo \" + fin(v.Mo)); }\n        if (v.Mn !== null ? v.Mn > 2 : false) { hi.push(\"Mn \" + fin(v.Mn)); }\n        if (v.V !== null ? v.V > 0.5 : false) { hi.push(\"V \" + fin(v.V)); }\n        if (v.Cu !== null ? v.Cu > 1.5 : false) { hi.push(\"Cu \" + fin(v.Cu)); }\n        if (v.Si !== null ? v.Si > 2 : false) { hi.push(\"Si \" + fin(v.Si)); }\n        if (hi.length) { W(\"w\", \"High alloy content (\" + hi.join(\", \") + \" wt.%) is outside the low-alloy range the linear CE formulas were derived for. The result may not represent hardenability reliably.\"); }\n      }\n      if (d.bRaw !== null ? (d.val.B !== null) : false) {\n        if (d.bUnit === \"wt\" ? d.val.B > 0.01 : false) { W(\"w\", \"Boron = \" + fin(d.val.B) + \" wt.% (\" + fin(d.val.B * 10000) + \" ppm) is unusually high. Boron-treated steels typically contain about 5\u201330 ppm (0.0005\u20130.003 wt.%). Check whether the reported value is actually in ppm.\"); }\n        if (d.bUnit === \"ppm\" ? (d.bRaw > 0 ? d.bRaw < 1 : false) : false) { W(\"w\", \"Boron = \" + fin(d.bRaw) + \" ppm is very low for a reported boron value. If your report gives boron in wt.% (for example 0.0005), switch the unit to wt.%.\"); }\n        if (d.bUnit === \"ppm\") { W(\"i\", \"Boron converted from ppm: \" + fin(d.bRaw) + \" ppm \u00f7 10,000 = \" + fin(d.val.B) + \" wt.%.\"); }\n      }\n      var zk = Object.keys(zero);\n      if (zk.length) { W(\"w\", \"Treated as 0 wt.% at your confirmation: \" + zk.join(\", \") + \". Residual elements are rarely exactly zero, so the results are preliminary and may be underestimated.\"); }\n      if (res.iiw ? res.iiw.ok : false) {\n        var cv = res.iiw.value;\n        if (Math.abs(r3(cv) - 0.35) <= 0.01 ? true : Math.abs(r3(cv) - 0.45) <= 0.01) { W(\"w\", \"IIW CEV is within \u00b10.01 of a screening-band boundary. Analysis tolerance, heat versus product analysis and rounding can move it into the neighbouring band.\"); }\n        if (v.C !== null ? v.C <= 0.12 : false) { W(\"i\", \"For low-carbon steels (C \u2264 0.12 wt.%) Pcm is often preferred. API 5L \/ ISO 3183 PSL 2 line pipe uses CE Pcm for C \u2264 0.12 wt.% and CE IIW above that.\"); }\n      }\n      if (res.pcm ? res.pcm.ok : false) {\n        var out = [];\n        Object.keys(PCM_RANGE).forEach(function (k) {\n          var x = v[k], rg = PCM_RANGE[k];\n          if (x === null) { return; }\n          if (x < rg[0] ? true : x > rg[1]) { out.push(k + \" \" + fin(x) + \" (range \" + rg[0] + \"\u2013\" + rg[1] + \")\"); }\n        });\n        if (out.length) { W(\"w\", \"Outside the composition range of the original Pcm study: \" + out.join(\"; \") + \" wt.%. Pcm may be less representative for this steel.\"); }\n        if (v.C !== null ? v.C > 0.12 : false) { W(\"i\", \"C > 0.12 wt.%: IIW CEV is more commonly used than Pcm at this carbon level. Pcm can understate the alloying effect in conventional C-Mn steels.\"); }\n      }\n      if (res.aws ? res.aws.ok : false) { W(\"i\", \"The AWS-style CE uses the equation selected for this calculator (the same coefficients are known as WES\/JIS Ceq). It is not applicable to every steel grade or to every edition or procedure of AWS D1.1. Check welding procedure requirements against the applicable standard and edition. For example, D1.1's informative preheat guidance uses an IIW-type expression that includes Si.\"); }\n      if (anyOk) {\n        W(\"i\", \"IIW CEV, AWS-style CE and Pcm are different formulas on different scales. Do not compare a value from one formula with a limit written for another.\");\n        W(\"i\", \"Carbon equivalent does not by itself determine weldability, hydrogen cracking risk or preheat. Steel grade and microstructure, plate thickness, heat input, hydrogen level, joint restraint, welding process, cooling conditions and the applicable standards must all be considered.\");\n        W(\"i\", \"Use the analysis basis (heat\/ladle or product analysis) required by the material specification or welding code. Niobium, titanium and other microalloying elements are not included in these formulas.\");\n      }\n      return N;\n    }\n    \/* =====================================================================\n       INTERPRETATION TEXT\n       ===================================================================== *\/\n    function interpretation(res) {\n      var P = [];\n      if (res.iiw ? res.iiw.ok : false) {\n        var b = bandOf(res.iiw.value), B = BAND[b];\n        var tail = b === \"low\" ? \"This suggests comparatively low hardenability. Hydrogen cracking can still occur in thick, highly restrained joints or with high-hydrogen consumables.\" : (b === \"mid\" ? \"Under these illustrative bands, hardenability is increasing. Hydrogen control and, depending on thickness and restraint, preheat or higher heat input are commonly evaluated.\" : \"Under these illustrative bands, the heat-affected zone has a greater tendency to form hard, crack-susceptible microstructures on fast cooling. Low-hydrogen practice, preheat and heat-input control usually need to be assessed against the applicable standard.\");\n        P.push(\"IIW CEV = \" + fx(res.iiw.value, 3) + \"% falls in the illustrative screening band \" + B.r + \": \" + B.t.toLowerCase() + \". \" + tail + \" This is a preliminary educational screening and not an acceptance criterion. It does not label the steel as safe or unsafe to weld.\");\n      } else {\n        P.push(\"Preliminary screening bands are provided for IIW CEV only. IIW CEV was not calculated: \" + (res.iiw ? res.iiw.reason : \"\"));\n      }\n      if (res.pcm ? res.pcm.ok : false) {\n        P.push(\"Pcm = \" + fx(res.pcm.value, 3) + \"%. Pcm weights carbon much more heavily relative to the alloying elements, includes boron, and was derived for low-carbon, low-alloy steels. No universal Pcm threshold is applied here. Some preheat methods combine Pcm with diffusible hydrogen and restraint to form a susceptibility index, and product specifications set their own Pcm maxima.\");\n      }\n      if (res.aws ? res.aws.ok : false) {\n        P.push(\"AWS-style CE = \" + fx(res.aws.value, 3) + \"%. No screening band is applied to this value. Compare it only with criteria written for this exact formula in the governing standard and edition.\");\n      }\n      return P;\n    }\n    \/* =====================================================================\n       RESULTS RENDERING\n       ===================================================================== *\/\n    function heroCard(id, r, selected) {\n      var f = FORM[id];\n      var label = h(\"div\", { class: \"cec-hero-label\" }, [f.name, selected ? h(\"span\", { class: \"cec-hero-tag\", text: \"Selected\" }) : null]);\n      if (r ? r.ok : false) {\n        return h(\"div\", { class: \"cec-hero-card\" + (selected ? \" cec-primary\" : \"\") }, [label, h(\"div\", { class: \"cec-hero-value\", text: f.sym + \" = \" + fx(r.value, 3) + \"%\" }), h(\"div\", { class: \"cec-hero-sub\", text: f.eq })]);\n      }\n      return h(\"div\", { class: \"cec-hero-card\" + (selected ? \" cec-primary\" : \"\") }, [label, h(\"div\", { class: \"cec-hero-value cec-na\", text: \"Not calculated\" }), h(\"div\", { class: \"cec-hero-sub\", text: r ? r.reason : \"Not calculated.\" })]);\n    }\n    function paramsList(rows) {\n      var dl = h(\"dl\", { class: \"cec-params\" });\n      rows.forEach(function (p) { dl.appendChild(h(\"div\", {}, [h(\"dt\", { text: p[0] }), h(\"dd\", { text: p[1] })])); });\n      return dl;\n    }\n    function notesList(warn) {\n      var ul = h(\"ul\", { class: \"cec-notes\" });\n      warn.forEach(function (w) {\n        var tag = w.lvl === \"e\" ? \"Critical: \" : (w.lvl === \"w\" ? \"Warning: \" : \"Note: \");\n        ul.appendChild(h(\"li\", { class: w.lvl === \"e\" ? \"cec-n-e\" : (w.lvl === \"w\" ? \"cec-n-w\" : \"\") }, [h(\"strong\", { text: tag }), w.text]));\n      });\n      return ul;\n    }\n    function stepLines(r) {\n      var f = FORM[r.id], L = [f.eq];\n      r.terms.forEach(function (t) {\n        var vin = fin(t.v) + (t.assumed ? \" (assumed 0)\" : \"\");\n        var expr = t.txt === \"C\" ? \"C = \" + vin : (t.mult !== 1 ? t.mult + \" \u00d7 \" + vin : vin + \" \/ \" + t.div);\n        L.push(t.txt === \"C\" ? expr + \" \u2192 \" + fx(t.c, 4) : t.txt + \" = \" + expr + \" = \" + fx(t.c, 4));\n      });\n      L.push(f.sym + \" = \" + r.terms.map(function (t) { return fx(t.c, 4); }).join(\" + \") + \" = \" + fx(r.value, 4) + \" \u2248 \" + fx(r.value, 3) + \"%\");\n      return L;\n    }\n    function secondary(d, res, method) {\n      var v = d.val, alloy = 0, cnt = 0, zeroAll = {};\n      ELEMS.forEach(function (k) { if (k !== \"C\" ? v[k] !== null : false) { alloy += v[k]; cnt += 1; } });\n      ORDER.forEach(function (id) { if (res[id] ? res[id].ok : false) { res[id].zero.forEach(function (k) { zeroAll[k] = true; }); } });\n      var total = alloy + (v.C !== null ? v.C : 0);\n      var bTxt = v.B !== null ? fin(v.B) + \" wt.% (\" + fin(v.B * 10000) + \" ppm)\" : (d.err.B ? \"Invalid\" : (zeroAll.B ? \"Blank, treated as 0\" : \"Not entered\"));\n      var z = Object.keys(zeroAll);\n      return [\n        [\"Selected calculation method\", FORM[method].name],\n        [\"Calculation formula\", FORM[method].eq],\n        [\"Carbon content\", v.C !== null ? fin(v.C) + \" wt.%\" : (d.err.C ? \"Invalid\" : \"Not entered\")],\n        [\"Total entered alloying elements\", fx(alloy, 4) + \" wt.% (\" + cnt + \" of 8 entered, excluding C)\"],\n        [\"Boron content\", bTxt],\n        [\"Total entered composition\", fx(total, 4) + \" wt.% (balance Fe and other elements \" + fx(Math.max(0, 100 - total), 2) + \" wt.%)\"],\n        [\"Elements treated as zero\", z.length ? z.join(\", \") : \"None\"]\n      ];\n    }\n    function renderResults() {\n      var L = state.last, body = q(\"cec-res-body\");\n      clear(body);\n      if (!L) { body.appendChild(h(\"p\", { class: \"cec-placeholder\", html: \"Enter the composition and press <strong>Calculate<\/strong>.\" })); return; }\n      var res = L.res, method = L.method, iiwOk = res.iiw ? res.iiw.ok : false;\n      var badge = iiwOk ? h(\"span\", { class: \"cec-badge \" + BAND[bandOf(res.iiw.value)].c, text: \"IIW screening: \" + BAND[bandOf(res.iiw.value)].t }) : h(\"span\", { class: \"cec-badge cec-b-ne\", text: \"No IIW screening band\" });\n      body.appendChild(h(\"div\", { class: \"cec-res-head\" }, [h(\"div\", {}, [h(\"span\", { class: \"cec-eyebrow\", text: \"Selected calculation method\" }), h(\"strong\", { class: \"cec-res-title\", text: FORM[method].name })]), badge]));\n      body.appendChild(h(\"div\", { class: \"cec-hero\" }, ORDER.map(function (id) { return heroCard(id, res[id], id === method); })));\n      body.appendChild(h(\"h3\", { class: \"cec-sec\", text: \"Preliminary weldability interpretation\" }));\n      body.appendChild(h(\"div\", { class: \"cec-interp\" }, interpretation(res).map(function (t) { return h(\"p\", { text: t }); })));\n      body.appendChild(h(\"h3\", { class: \"cec-sec\", text: \"Secondary results\" }));\n      body.appendChild(paramsList(secondary(L.d, res, method)));\n      var okIds = ORDER.filter(function (id) { return res[id] ? res[id].ok : false; });\n      if (okIds.length) {\n        body.appendChild(h(\"h3\", { class: \"cec-sec\", text: \"Calculation steps\" }));\n        okIds.forEach(function (id) {\n          var det = h(\"details\", { class: \"cec-det\" }, [h(\"summary\", { text: FORM[id].name })]);\n          if (id === method ? true : okIds.length === 1) { det.open = true; }\n          var ol = h(\"ol\", { class: \"cec-steps\" });\n          var lines = stepLines(res[id]);\n          lines.forEach(function (t, i) { ol.appendChild(h(\"li\", { class: i === lines.length - 1 ? \"cec-step-total\" : \"\", text: t })); });\n          det.appendChild(h(\"div\", { class: \"cec-det-body\" }, ol));\n          body.appendChild(det);\n        });\n      }\n      var notes = buildNotes(L.d, res, L.conf);\n      if (notes.length) {\n        body.appendChild(h(\"h3\", { class: \"cec-sec\", text: \"Engineering notes and limitations\" }));\n        body.appendChild(notesList(notes));\n      }\n    }\n    \/* =====================================================================\n       RUN\n       ===================================================================== *\/\n    function run(kind, fromButton) {\n      var d = readData(), conf = q(\"cec-zero\").checked, method = radio(\"cec-method\") ? radio(\"cec-method\") : \"iiw\";\n      clearErrors();\n      Object.keys(d.err).forEach(function (k) { setErr(k, d.err[k]); });\n      msg(\"\");\n      var ids = [method], res = {};\n      ORDER.forEach(function (id) { res[id] = compute(id, d, conf); });\n      \/* field-specific messages for missing data *\/\n      var need = {};\n      ids.forEach(function (id) {\n        res[id].hard.forEach(function (k) { need[k] = need[k] ? need[k] : { hard: true, f: [] }; need[k].f.push(FORM[id].short); });\n        res[id].missing.forEach(function (k) { need[k] = need[k] ? need[k] : { hard: false, f: [] }; need[k].f.push(FORM[id].short); });\n      });\n      Object.keys(need).forEach(function (k) {\n        var n = need[k];\n        setErr(k, n.hard ? ENAME[k] + \" must be entered for \" + n.f.join(\", \") + \". It is never assumed to be zero.\" : \"Required for \" + n.f.join(\", \") + \". Enter a value, or tick the confirmation to treat blanks as zero.\");\n      });\n      var okCount = ids.filter(function (id) { return res[id].ok; }).length;\n      if (fromButton) {\n        if (!okCount) { msg(\"The selected method could not be calculated. See the highlighted fields.\"); }\n        else { msg(FORM[method].short + \" calculated.\", true); }\n      }\n      state.last = { kind: kind, d: d, res: res, method: method, conf: conf };\n      state.live = true; state.kind = kind;\n      if (fromButton) { q(\"cec-results\").hidden = false; }\n      renderResults();\n      if (fromButton) {\n        var first = root.querySelector(\".cec-invalid\");\n        if (first ? !okCount : false) { try { first.focus(); } catch (e) { \/* ignore *\/ } }\n        else { scrollToResults(); }\n      }\n    }\n    function scrollToResults() {\n      var el = q(\"cec-results\");\n      var rect = el.getBoundingClientRect(), vh = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight;\n      if (rect.top < 0 ? true : rect.top > vh * 0.6) { if (el.scrollIntoView) { el.scrollIntoView({ behavior: \"smooth\", block: \"start\" }); } }\n      try { el.focus({ preventScroll: true }); } catch (e) { \/* ignore *\/ }\n    }\n    function scheduleLive() {\n      if (!state.live) { return; }\n      if (state.timer) { clearTimeout(state.timer); }\n      state.timer = setTimeout(function () { state.timer = null; run(state.kind, false); }, 160);\n    }\n    function resetAll() {\n      ELEMS.forEach(function (k) { q(\"cec-\" + k).value = \"\"; });\n      q(\"cec-Bunit\").value = \"wt\"; q(\"cec-Bunit\").setAttribute(\"data-prev\", \"wt\");\n      q(\"cec-zero\").checked = false; q(\"cec-B\").placeholder = \"e.g. 0.0005\";\n      q(\"cec-material\").value = \"custom\";\n      var r = root.querySelector('input[name=\"cec-method\"][value=\"iiw\"]'); if (r) { r.checked = true; }\n      if (state.timer) { clearTimeout(state.timer); state.timer = null; }\n      state.last = null; state.live = false; state.kind = \"selected\";\n      clearErrors(); msg(\"\");\n      updateBHint(); updateMethodText(); updateMaterialInfo();\n      renderResults(); q(\"cec-results\").hidden = true;\n    }\n    \/* =====================================================================\n       EVENTS (bound once)\n       ===================================================================== *\/\n    var form = q(\"cec-form\");\n    form.addEventListener(\"input\", function (e) {\n      var t = e.target;\n      if (t ? t.id === \"cec-B\" : false) { updateBHint(); }\n      if (t ? t.tagName === \"INPUT\" : false) { if (t.type === \"number\") { scheduleLive(); } }\n    });\n    form.addEventListener(\"change\", function (e) {\n      var t = e.target;\n      if (!t) { return; }\n      if (t.id === \"cec-Bunit\") { onBUnitChange(); scheduleLive(); return; }\n      if (t.id === \"cec-material\") { updateMaterialInfo(); if (state.live) { run(state.kind, false); } return; }\n      if (t.name === \"cec-method\") { updateMethodText(); if (state.live) { run(state.kind, false); } return; }\n      if (t.id === \"cec-zero\") { scheduleLive(); }\n    });\n    form.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Enter\" ? (e.target ? e.target.tagName === \"INPUT\" : false) : false) { e.preventDefault(); run(\"selected\", true); }\n    });\n    q(\"cec-calc\").addEventListener(\"click\", function () { run(\"selected\", true); });\n    root.cecEngine = { compute: compute, FORM: FORM };\n    resetAll();\n  }\n  if (document.getElementById(\"cec-calculator\")) { init(); }\n  else if (document.readyState === \"loading\") { document.addEventListener(\"DOMContentLoaded\", init); }\n  else { init(); }\n})();\n<\/script>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Carbon Equivalent (CE) Weldability Calculator is a practical engineering tool designed to evaluate steel weldability based on chemical composition and alloying elements. Using established&#8230;<\/p>","protected":false},"author":2,"featured_media":24973,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8647],"tags":[8775,8776,8774,8778,8777],"class_list":["post-24972","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-carbon-equivalent-calculator","tag-carbon-equivalent-formula","tag-steel-weldability","tag-weldability-assessment","tag-welding-engineering","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/10\/Carbon-Equivalent-CE-Weldability-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/comments?post=24972"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24972\/revisions"}],"predecessor-version":[{"id":24976,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24972\/revisions\/24976"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media\/24973"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media?parent=24972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/categories?post=24972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/tags?post=24972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}