{"id":24981,"date":"2026-10-27T06:42:03","date_gmt":"2026-10-27T06:42:03","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24981"},"modified":"2026-10-27T06:45:55","modified_gmt":"2026-10-27T06:45:55","slug":"corrosion-rate-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/es\/corrosion-rate-calculator\/","title":{"rendered":"Corrosion Rate Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Corrosion Rate Calculator<\/strong> is a practical online tool designed to help engineers, researchers, and metalworking professionals accurately calculate metal corrosion rates. By entering weight loss, material density, exposed surface area, and exposure time, users can quickly determine corrosion rates in mm\/year, MPY, and other units. This free calculator simplifies corrosion analysis, supports material performance evaluation, and helps assess the durability of metals in various industrial environments. Ideal for corrosion testing, metal fabrication, pipeline maintenance, and industrial engineering applications.<\/p>\n\n\n\n<div id=\"crc-calculator\" class=\"crc-root\" data-crc-widget=\"corrosion-rate\">\n<style>\n#crc-calculator,#crc-calculator *,#crc-calculator *::before,#crc-calculator *::after{box-sizing:border-box}\n#crc-calculator{\n  --crc-bg:#ffffff;--crc-card:#ffffff;--crc-navy:#16202e;--crc-text:#2b3442;--crc-muted:#5b6675;--crc-soft:#737f8e;\n  --crc-line:#d5dbe3;--crc-line-soft:#e6eaf0;--crc-panel:#f6f8fb;--crc-accent:#1d64c8;--crc-accent-dark:#154c9a;--crc-accent-soft:#e8f0fb;\n  --crc-err:#b42318;--crc-err-soft:#fdecea;--crc-warn:#7a5200;--crc-warn-soft:#fff6e0;--crc-ok:#17643f;--crc-ok-soft:#e7f5ee;\n  display:block;width:100%;max-width:1180px;margin:24px auto;padding:28px;background:var(--crc-bg);color:var(--crc-text);\n  border:1px solid var(--crc-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#crc-calculator .crc-wrap{container-type:inline-size;container-name:crc;width:100%}\n#crc-calculator h1,#crc-calculator h2,#crc-calculator h3,#crc-calculator h4,#crc-calculator p,#crc-calculator ul,#crc-calculator ol,#crc-calculator li,#crc-calculator dl,#crc-calculator dt,#crc-calculator dd,#crc-calculator details,#crc-calculator summary,#crc-calculator fieldset,#crc-calculator legend,#crc-calculator label,#crc-calculator header,#crc-calculator section,#crc-calculator article,#crc-calculator aside,#crc-calculator table,#crc-calculator thead,#crc-calculator tbody,#crc-calculator tr,#crc-calculator th,#crc-calculator td,#crc-calculator code{\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#crc-calculator ul,#crc-calculator ol{list-style:none}\n#crc-calculator a{color:var(--crc-accent);text-decoration:underline}\n#crc-calculator sub,#crc-calculator sup{font-size:.72em;line-height:0;position:relative;vertical-align:baseline}\n#crc-calculator sub{bottom:-.25em}\n#crc-calculator sup{top:-.5em}\n#crc-calculator [hidden]{display:none!important}\n#crc-calculator .crc-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}\n#crc-calculator .crc-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;align-items:start}\n#crc-calculator .crc-left,#crc-calculator .crc-right{min-width:0}\n#crc-calculator .crc-card{background:var(--crc-card);border:1px solid var(--crc-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#crc-calculator .crc-card+.crc-card{margin-top:14px}\n#crc-calculator .crc-card-title{margin:0 0 4px;color:var(--crc-navy);font-size:17.5px;font-weight:650;line-height:1.3;display:flex;align-items:center;gap:10px}\n#crc-calculator .crc-step{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:var(--crc-accent-soft);color:var(--crc-accent);font-size:12.8px;font-weight:700}\n#crc-calculator .crc-card-note{color:var(--crc-muted);font-size:14px;margin:0 0 14px}\n#crc-calculator .crc-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px 16px}\n#crc-calculator .crc-field{min-width:0}\n#crc-calculator .crc-label{display:block;font-size:14px;font-weight:600;color:var(--crc-navy);margin:0 0 6px;line-height:1.3}\n#crc-calculator .crc-label i{font-style:italic;font-weight:700;color:var(--crc-accent-dark)}\n#crc-calculator .crc-hint{display:block;color:var(--crc-soft);font-size:12.8px;margin-top:5px;line-height:1.45}\n#crc-calculator .crc-error{display:block;color:var(--crc-err);font-size:13px;margin-top:4px;line-height:1.4}\n#crc-calculator .crc-error:empty{display:none}\n#crc-calculator .crc-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:stretch}\n#crc-calculator input[type=number],#crc-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(--crc-text);background-color:#fff;border:1px solid var(--crc-line);border-radius:11px;box-shadow:none;outline:none;max-width:none;transition:border-color .15s ease,box-shadow .15s ease\n}\n#crc-calculator input[type=number]{-moz-appearance:textfield}\n#crc-calculator input[type=number]::-webkit-inner-spin-button,#crc-calculator input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}\n#crc-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#crc-calculator select.crc-usel{width:auto;min-width:96px;background-color:#eef2f7;font-weight:600;font-size:14px;color:var(--crc-muted)}\n#crc-calculator input:focus,#crc-calculator select:focus{border-color:var(--crc-accent);box-shadow:0 0 0 4px rgba(29,100,200,.17)}\n#crc-calculator input::placeholder{color:#a7b1be;opacity:1}\n#crc-calculator .crc-invalid{border-color:var(--crc-err)!important;box-shadow:0 0 0 3px rgba(180,35,24,.12)!important}\n#crc-calculator .crc-modes{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;border:0;margin:0 0 16px;padding:0;position:relative}\n#crc-calculator .crc-modes legend{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n#crc-calculator .crc-modes input{position:absolute;opacity:0;width:1px;height:1px;margin:0;pointer-events:none}\n#crc-calculator .crc-modes label{display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:58px;padding:9px 12px;border:1px solid var(--crc-line);border-radius:12px;cursor:pointer;background:#fff;transition:border-color .15s,background .15s,box-shadow .15s}\n#crc-calculator .crc-modes label b{font-weight:650;font-size:14.6px;color:var(--crc-navy);line-height:1.25}\n#crc-calculator .crc-modes label small{font-size:12.4px;color:var(--crc-soft);line-height:1.3}\n#crc-calculator .crc-modes input:checked+label{border-color:var(--crc-accent);background:var(--crc-accent-soft);box-shadow:inset 0 0 0 1px var(--crc-accent)}\n#crc-calculator .crc-modes input:focus-visible+label{outline:3px solid rgba(29,100,200,.4);outline-offset:1px}\n#crc-calculator .crc-calcloss{margin-top:12px;padding:10px 12px;border-radius:10px;background:var(--crc-panel);border:1px solid var(--crc-line-soft);font-size:14px;color:var(--crc-navy);font-variant-numeric:tabular-nums}\n#crc-calculator .crc-calcloss:empty{display:none}\n#crc-calculator .crc-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:16px}\n#crc-calculator .crc-btn{-webkit-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:46px;margin:0;padding:10px 18px;border-radius:999px;border:1px solid var(--crc-line);background:#fff;color:var(--crc-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;height:auto;text-align:center;transition:background .15s,border-color .15s,color .15s}\n#crc-calculator .crc-btn:hover{border-color:var(--crc-accent);color:var(--crc-accent-dark)}\n#crc-calculator .crc-btn[disabled]{opacity:.5;cursor:not-allowed}\n#crc-calculator .crc-btn[disabled]:hover{border-color:var(--crc-line);color:var(--crc-navy)}\n#crc-calculator .crc-btn-primary{background:var(--crc-accent);border-color:var(--crc-accent);color:#fff;min-width:200px}\n#crc-calculator .crc-btn-primary:hover{background:var(--crc-accent-dark);border-color:var(--crc-accent-dark);color:#fff}\n#crc-calculator .crc-btn-secondary{background:var(--crc-accent-soft);border-color:#c6d8f2;color:var(--crc-accent-dark)}\n#crc-calculator .crc-btn:focus-visible{outline:3px solid rgba(29,100,200,.4);outline-offset:2px}\n#crc-calculator .crc-placeholder{color:var(--crc-muted);font-size:14.5px;padding:18px;border:1px dashed var(--crc-line);border-radius:12px;background:var(--crc-panel);margin-top:12px}\n#crc-calculator .crc-hero{margin-top:12px;border-radius:14px;padding:16px 18px;background:var(--crc-accent-soft);border:1px solid #9fc0ea}\n#crc-calculator .crc-hero-label{font-size:13px;font-weight:650;color:var(--crc-accent-dark);letter-spacing:.03em;text-transform:uppercase}\n#crc-calculator .crc-hero-value{font-size:clamp(28px,3.4vw,36px);font-weight:750;color:var(--crc-navy);letter-spacing:-.015em;line-height:1.15;margin-top:4px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}\n#crc-calculator .crc-hero-value span{font-size:.5em;font-weight:650;color:var(--crc-muted);letter-spacing:0;margin-left:6px}\n#crc-calculator .crc-hero-sub{font-size:13px;color:var(--crc-muted);margin-top:4px}\n#crc-calculator .crc-conv{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px}\n#crc-calculator .crc-conv div{border:1px solid var(--crc-line-soft);background:var(--crc-panel);border-radius:12px;padding:10px 12px;min-width:0}\n#crc-calculator .crc-conv dt{font-size:12.4px;font-weight:650;color:var(--crc-muted)}\n#crc-calculator .crc-conv dd{font-size:18px;font-weight:700;color:var(--crc-navy);font-variant-numeric:tabular-nums;overflow-wrap:anywhere;margin-top:2px}\n@container crc (min-width:560px){\n  #crc-calculator .crc-modes{grid-template-columns:repeat(2,minmax(0,1fr))}\n  #crc-calculator .crc-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}\n  #crc-calculator .crc-conv{grid-template-columns:repeat(4,minmax(0,1fr))}\n}\n@media (max-width:700px){\n  #crc-calculator{padding:18px 14px;border-radius:16px;margin:12px auto}\n  #crc-calculator .crc-card{padding:16px 14px;border-radius:14px}\n}\n@media (prefers-reduced-motion:reduce){#crc-calculator *{transition:none!important}}\n@media print{#crc-calculator .crc-actions{display:none!important}}\n<\/style>\n<div class=\"crc-wrap\">\n<div class=\"crc-layout\">\n<form class=\"crc-left\" id=\"crc-form\" novalidate onsubmit=\"return false;\">\n<section class=\"crc-card\" aria-labelledby=\"crc-h-weight\">\n<h2 class=\"crc-card-title\" id=\"crc-h-weight\"><span class=\"crc-step\" aria-hidden=\"true\">1<\/span>Weight loss<\/h2>\n<p class=\"crc-card-note\">Enter the measured mass loss directly, or enter the specimen weight before and after exposure (after cleaning).<\/p>\n<fieldset class=\"crc-modes\">\n<legend>Weight input mode<\/legend>\n<input type=\"radio\" id=\"crc-m-direct\" name=\"crc-mode\" value=\"direct\" checked><label for=\"crc-m-direct\"><b>Direct Weight Loss<\/b><small>Enter the measured mass loss<\/small><\/label>\n<input type=\"radio\" id=\"crc-m-if\" name=\"crc-mode\" value=\"if\"><label for=\"crc-m-if\"><b>Initial \/ Final Weight<\/b><small>Weight loss = initial \u2212 final<\/small><\/label>\n<\/fieldset>\n<div class=\"crc-field\" id=\"crc-p-direct\">\n<label class=\"crc-label\" for=\"crc-wl\">Weight loss (<i>W<\/i>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-wl\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 120\" aria-describedby=\"crc-wl-err\"><select class=\"crc-usel\" id=\"crc-wl-u\" aria-label=\"Weight loss unit\"><option value=\"mg\" selected>mg<\/option><option value=\"g\">g<\/option><option value=\"kg\">kg<\/option><\/select><\/div>\n<span class=\"crc-error\" id=\"crc-wl-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<div id=\"crc-p-if\" hidden>\n<div class=\"crc-grid crc-grid-2\">\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-wi\">Initial weight (<i>W<\/i><sub>0<\/sub>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-wi\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 25.1234\" aria-describedby=\"crc-wi-err\"><select class=\"crc-usel\" id=\"crc-wi-u\" aria-label=\"Initial weight unit\"><option value=\"g\" selected>g<\/option><option value=\"mg\">mg<\/option><option value=\"kg\">kg<\/option><\/select><\/div>\n<span class=\"crc-error\" id=\"crc-wi-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-wf\">Final weight (<i>W<\/i><sub>1<\/sub>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-wf\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 25.0034\" aria-describedby=\"crc-wf-hint crc-wf-err\"><select class=\"crc-usel\" id=\"crc-wf-u\" aria-label=\"Final weight unit\"><option value=\"g\" selected>g<\/option><option value=\"mg\">mg<\/option><option value=\"kg\">kg<\/option><\/select><\/div>\n<span class=\"crc-hint\" id=\"crc-wf-hint\">Weigh after removing corrosion products.<\/span>\n<span class=\"crc-error\" id=\"crc-wf-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<\/div>\n<p class=\"crc-calcloss\" id=\"crc-calcloss\" aria-live=\"polite\"><\/p>\n<\/div>\n<\/section>\n<section class=\"crc-card\" aria-labelledby=\"crc-h-mat\">\n<h2 class=\"crc-card-title\" id=\"crc-h-mat\"><span class=\"crc-step\" aria-hidden=\"true\">2<\/span>Material density<\/h2>\n<div class=\"crc-grid crc-grid-2\">\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-mat\">Material<\/label>\n<select id=\"crc-mat\" aria-describedby=\"crc-mat-hint\">\n<option value=\"carbon\" selected>Carbon Steel (7.85 g\/cm\u00b3)<\/option>\n<option value=\"stainless\">Stainless Steel (7.90 g\/cm\u00b3)<\/option>\n<option value=\"aluminum\">Aluminum (2.70 g\/cm\u00b3)<\/option>\n<option value=\"copper\">Copper (8.96 g\/cm\u00b3)<\/option>\n<option value=\"brass\">Brass (8.50 g\/cm\u00b3)<\/option>\n<option value=\"titanium\">Titanium (4.51 g\/cm\u00b3)<\/option>\n<option value=\"custom\">Custom Material<\/option>\n<\/select>\n<\/div>\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-dens\">Density (<i>D<\/i>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-dens\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" value=\"7.85\" aria-describedby=\"crc-mat-hint crc-dens-err\"><select class=\"crc-usel\" id=\"crc-dens-u\" aria-label=\"Density unit\"><option value=\"gcm3\" selected>g\/cm\u00b3<\/option><option value=\"kgm3\">kg\/m\u00b3<\/option><\/select><\/div>\n<span class=\"crc-error\" id=\"crc-dens-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<\/div>\n<span class=\"crc-hint\" id=\"crc-mat-hint\">Preset densities are approximate reference values. Use the measured or specified density of your alloy when known; editing the density switches the material to Custom.<\/span>\n<\/section>\n<section class=\"crc-card\" aria-labelledby=\"crc-h-exp\">\n<h2 class=\"crc-card-title\" id=\"crc-h-exp\"><span class=\"crc-step\" aria-hidden=\"true\">3<\/span>Surface area and exposure time<\/h2>\n<div class=\"crc-grid crc-grid-2\">\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-area\">Exposed surface area (<i>A<\/i>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-area\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 50\" aria-describedby=\"crc-area-hint crc-area-err\"><select class=\"crc-usel\" id=\"crc-area-u\" aria-label=\"Surface area unit\"><option value=\"mm2\">mm\u00b2<\/option><option value=\"cm2\" selected>cm\u00b2<\/option><option value=\"m2\">m\u00b2<\/option><option value=\"in2\">in\u00b2<\/option><\/select><\/div>\n<span class=\"crc-hint\" id=\"crc-area-hint\">Total area in contact with the environment, including edges.<\/span>\n<span class=\"crc-error\" id=\"crc-area-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<div class=\"crc-field\">\n<label class=\"crc-label\" for=\"crc-time\">Exposure duration (<i>T<\/i>)<\/label>\n<div class=\"crc-row\"><input id=\"crc-time\" type=\"number\" inputmode=\"decimal\" step=\"any\" min=\"0\" placeholder=\"e.g. 720\" aria-describedby=\"crc-time-hint crc-time-err\"><select class=\"crc-usel\" id=\"crc-time-u\" aria-label=\"Exposure duration unit\"><option value=\"h\" selected>Hours<\/option><option value=\"d\">Days<\/option><option value=\"w\">Weeks<\/option><option value=\"y\">Years<\/option><\/select><\/div>\n<span class=\"crc-hint\" id=\"crc-time-hint\">1 year = 365 days = 8,760 hours.<\/span>\n<span class=\"crc-error\" id=\"crc-time-err\" aria-live=\"polite\"><\/span>\n<\/div>\n<\/div>\n<\/section>\n<div class=\"crc-actions\">\n<button type=\"button\" class=\"crc-btn crc-btn-primary\" id=\"crc-calc\">Calculate<\/button>\n<\/div>\n<\/form>\n<div class=\"crc-right\">\n<section class=\"crc-card\" id=\"crc-results\" aria-labelledby=\"crc-h-res\" tabindex=\"-1\" hidden>\n<h2 class=\"crc-card-title\" id=\"crc-h-res\"><span class=\"crc-step\" aria-hidden=\"true\">4<\/span>Corrosion rate results<\/h2>\n<div id=\"crc-res-body\"><\/div>\n<p class=\"crc-sr\" id=\"crc-live\" aria-live=\"polite\"><\/p>\n<\/section>\n<\/div>\n<\/div>\n<\/div>\n<script>\n(function () {\n  \"use strict\";\n  \/* =====================================================================\n     CONSTANTS AND UNIT CONVERSIONS\n     Formula: CR (mm\/year) = 87.6 x W \/ (D x A x T)\n       W = weight loss in mg, D = density in g\/cm3,\n       A = exposed area in cm2, T = exposure time in hours.\n     87.6 = (1\/1000 mg->g) x (10 cm->mm) x (8760 h\/year).\n     Every input is converted to these units BEFORE the formula is applied.\n     ===================================================================== *\/\n  var K = 87.6;\n  var MM_TO_UM = 1000;          \/* 1 mm\/year = 1000 um\/year   *\/\n  var MM_TO_MPY = 39.3701;      \/* 1 mm\/year = 39.3701 mils\/year *\/\n  var MM_TO_IPY = 0.0393701;    \/* 1 mm\/year = 0.0393701 in\/year *\/\n  var W_TO_MG = { mg: 1, g: 1000, kg: 1000000 };            \/* mass   -> mg    *\/\n  var D_TO_GCM3 = { gcm3: 1, kgm3: 0.001 };                 \/* density-> g\/cm3 *\/\n  var A_TO_CM2 = { mm2: 0.01, cm2: 1, m2: 10000, in2: 6.4516 }; \/* area -> cm2 *\/\n  var T_TO_H = { h: 1, d: 24, w: 168, y: 8760 };            \/* time -> hours (365 d\/year) *\/\n  var MATS = {\n    carbon: { name: \"Carbon Steel\", d: 7.85 }, stainless: { name: \"Stainless Steel\", d: 7.90 },\n    aluminum: { name: \"Aluminum\", d: 2.70 }, copper: { name: \"Copper\", d: 8.96 },\n    brass: { name: \"Brass\", d: 8.50 }, titanium: { name: \"Titanium\", d: 4.51 },\n    custom: { name: \"Custom Material\", d: null }\n  };\n  var FIELDS = [\"crc-wl\", \"crc-wi\", \"crc-wf\", \"crc-dens\", \"crc-area\", \"crc-time\"];\n  \/* =====================================================================\n     NUMBER FORMATTING (never displays NaN or Infinity)\n     ===================================================================== *\/\n  function isNum(v) { return typeof v === \"number\" ? isFinite(v) : false; }\n  var SUP = { \"0\": \"\u2070\", \"1\": \"\u00b9\", \"2\": \"\u00b2\", \"3\": \"\u00b3\", \"4\": \"\u2074\", \"5\": \"\u2075\", \"6\": \"\u2076\", \"7\": \"\u2077\", \"8\": \"\u2078\", \"9\": \"\u2079\", \"-\": \"\u207b\", \"+\": \"\" };\n  function sup(s) { var o = \"\", i, c; for (i = 0; i < s.length; i++) { c = s.charAt(i); o += SUP[c] !== undefined ? SUP[c] : c; } return o; }\n  function group(s) {\n    var neg = s.charAt(0) === \"-\", out = \"\";\n    if (neg) { s = s.slice(1); }\n    while (s.length > 3) { out = \",\" + s.slice(-3) + out; s = s.slice(0, -3); }\n    return (neg ? \"-\" : \"\") + s + out;\n  }\n  \/* Adaptive display: `sig` significant figures; scientific notation for very small\/large values *\/\n  function fmt(v, sig) {\n    if (!isNum(v)) { return \"\u2014\"; }\n    if (sig === undefined) { sig = 4; }\n    if (v === 0) { return \"0\"; }\n    var a = Math.abs(v);\n    if (a < 1e-4 ? true : a >= 1e9) {\n      var p = v.toExponential(sig - 1).split(\"e\");\n      return String(Number(p[0])) + \" \u00d7 10\" + sup(String(Number(p[1])));\n    }\n    var s = String(Number(v.toPrecision(sig)));\n    if (s.indexOf(\"e\") >= 0) { return s; }\n    var parts = s.split(\".\");\n    parts[0] = group(parts[0]);\n    return parts.join(\".\");\n  }\n  \/* =====================================================================\n     CORE CALCULATION (pure function, base units in, results out)\n     ===================================================================== *\/\n  function corrosionRate(lossMg, densGcm3, areaCm2, hours) {\n    var cr = K * lossMg \/ (densGcm3 * areaCm2 * hours);\n    var r = {\n      mmy: cr, umy: cr * MM_TO_UM, mpy: cr * MM_TO_MPY, ipy: cr * MM_TO_IPY,\n      massRate: lossMg \/ hours, perArea: lossMg \/ areaCm2,\n      num: K * lossMg, den: densGcm3 * areaCm2 * hours\n    };\n    var k;\n    for (k in r) { if (Object.prototype.hasOwnProperty.call(r, k)) { if (!isNum(r[k])) { return null; } } }\n    return r;\n  }\n  \/* =====================================================================\n     USER INTERFACE\n     ===================================================================== *\/\n  function init() {\n    var root = document.getElementById(\"crc-calculator\");\n    if (!root) { return; }\n    if (root.getAttribute(\"data-crc-init\") === \"1\") { return; }\n    root.setAttribute(\"data-crc-init\", \"1\");\n    function q(id) { return root.querySelector(\"#\" + id); }\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, touched: {}, liveTimer: null, shown: false };\n    function mode() { var r = root.querySelector('input[name=\"crc-mode\"]:checked'); return r ? r.value : \"direct\"; }\n    function setMode(m) { var r = q(m === \"if\" ? \"crc-m-if\" : \"crc-m-direct\"); if (r) { r.checked = true; } updatePanels(); }\n    function updatePanels() { var m = mode(); q(\"crc-p-direct\").hidden = m !== \"direct\"; q(\"crc-p-if\").hidden = m !== \"if\"; }\n    \/* ---------- reading inputs ---------- *\/\n    function readField(id) {\n      var el = q(id), s = String(el.value).trim();\n      if (s === \"\") { return { empty: true, bad: el.validity ? el.validity.badInput : false, val: null }; }\n      var n = Number(s);\n      if (!isNum(n)) { return { empty: false, bad: true, val: null }; }\n      return { empty: false, bad: false, val: n };\n    }\n    \/* Validates one numeric field. allowZero: zero accepted (weight loss, final weight). *\/\n    function checkField(id, label, allowZero, E, missing) {\n      var r = readField(id), cap = label.charAt(0).toUpperCase() + label.slice(1);\n      if (r.bad) { E[id] = \"Enter a valid number for the \" + label + \".\"; return null; }\n      if (r.empty) { E[id] = \"Enter the \" + label + \".\"; missing.push(label); return null; }\n      if (r.val < 0) { E[id] = cap + \" cannot be negative.\"; return null; }\n      if (allowZero ? false : r.val === 0) { E[id] = cap + \" must be greater than zero.\"; return null; }\n      return r.val;\n    }\n    function validate() {\n      var E = {}, missing = [], v = { mode: mode() }, x;\n      \/* Weight loss -> mg *\/\n      if (v.mode === \"direct\") {\n        v.wlU = q(\"crc-wl-u\").value;\n        x = checkField(\"crc-wl\", \"weight loss\", true, E, missing);\n        if (x !== null) { v.wlIn = x; v.lossMg = x * W_TO_MG[v.wlU]; }\n      } else {\n        v.wiU = q(\"crc-wi-u\").value; v.wfU = q(\"crc-wf-u\").value;\n        var wi = checkField(\"crc-wi\", \"initial weight\", false, E, missing);\n        var wf = checkField(\"crc-wf\", \"final weight\", true, E, missing);\n        if (wi !== null ? wf !== null : false) {\n          v.wiIn = wi; v.wfIn = wf;\n          v.wiMg = wi * W_TO_MG[v.wiU]; v.wfMg = wf * W_TO_MG[v.wfU];\n          if (v.wfMg > v.wiMg) {\n            E[\"crc-wf\"] = \"Final weight (\" + fmt(v.wfMg, 8) + \" mg) cannot exceed initial weight (\" + fmt(v.wiMg, 8) + \" mg). Check the values and units.\";\n          } else {\n            \/* round off binary floating-point noise from the subtraction *\/\n            v.lossMg = Number((v.wiMg - v.wfMg).toPrecision(12));\n          }\n        }\n      }\n      \/* Density -> g\/cm3 *\/\n      v.dU = q(\"crc-dens-u\").value; v.mat = q(\"crc-mat\").value;\n      x = checkField(\"crc-dens\", \"material density\", false, E, missing);\n      if (x !== null) { v.dIn = x; v.dens = x * D_TO_GCM3[v.dU]; }\n      \/* Area -> cm2 *\/\n      v.aU = q(\"crc-area-u\").value;\n      x = checkField(\"crc-area\", \"exposed surface area\", false, E, missing);\n      if (x !== null) { v.aIn = x; v.area = x * A_TO_CM2[v.aU]; }\n      \/* Time -> hours *\/\n      v.tU = q(\"crc-time-u\").value;\n      x = checkField(\"crc-time\", \"exposure duration\", false, E, missing);\n      if (x !== null) { v.tIn = x; v.hours = x * T_TO_H[v.tU]; }\n      v.E = E; v.missing = missing; v.ok = Object.keys(E).length === 0;\n      return v;\n    }\n    function anyEntered() {\n      var ids = mode() === \"direct\" ? [\"crc-wl\", \"crc-area\", \"crc-time\"] : [\"crc-wi\", \"crc-wf\", \"crc-area\", \"crc-time\"];\n      return ids.some(function (id) { return String(q(id).value).trim() !== \"\"; });\n    }\n    \/* ---------- error display ---------- *\/\n    function showErrors(E, force) {\n      FIELDS.forEach(function (id) {\n        var m = E[id] ? (force ? E[id] : (state.touched[id] ? E[id] : \"\")) : \"\";\n        var el = q(id), er = q(id + \"-err\");\n        er.textContent = m;\n        if (m) { el.classList.add(\"crc-invalid\"); el.setAttribute(\"aria-invalid\", \"true\"); }\n        else { el.classList.remove(\"crc-invalid\"); el.removeAttribute(\"aria-invalid\"); }\n      });\n    }\n    function updateLossHint(v) {\n      var box = q(\"crc-calcloss\");\n      if (v.mode === \"if\" ? isNum(v.lossMg) : false) { box.textContent = \"Calculated weight loss: \" + fmt(v.wiMg, 8) + \" \u2212 \" + fmt(v.wfMg, 8) + \" = \" + fmt(v.lossMg, 8) + \" mg (\" + fmt(v.lossMg \/ 1000, 8) + \" g)\"; }\n      else { box.textContent = \"\"; }\n    }\n    \/* ---------- material presets ---------- *\/\n    function presetInUnit(key, unit) {\n      var d = MATS[key].d;\n      if (d === null) { return null; }\n      return unit === \"kgm3\" ? String(Math.round(d * 1000)) : d.toFixed(2);\n    }\n    function applyPreset() {\n      var key = q(\"crc-mat\").value, val = presetInUnit(key, q(\"crc-dens-u\").value);\n      if (val !== null) { q(\"crc-dens\").value = val; }\n    }\n    function syncMaterialToDensity() {\n      var key = q(\"crc-mat\").value;\n      if (key === \"custom\") { return; }\n      var pv = presetInUnit(key, q(\"crc-dens-u\").value), cur = String(q(\"crc-dens\").value).trim();\n      if (cur === \"\" ? true : Number(cur) !== Number(pv)) { q(\"crc-mat\").value = \"custom\"; }\n    }\n    \/* =====================================================================\n       RESULTS\n       ===================================================================== *\/\n    function renderPlaceholder(v) {\n      var body = q(\"crc-res-body\"), text;\n      clear(body);\n      if (!anyEntered()) { text = \"Enter your test data to calculate the corrosion rate.\"; }\n      else if (v.missing.length ? v.missing.length === Object.keys(v.E).length : false) { text = \"Still needed: \" + v.missing.join(\", \") + \".\"; }\n      else { text = \"Correct the highlighted inputs to see results.\"; }\n      body.appendChild(h(\"p\", { class: \"crc-placeholder\", text: text }));\n    }\n    function renderResults() {\n      var L = state.last, v = L.v, r = L.r, body = q(\"crc-res-body\");\n      clear(body);\n      body.appendChild(h(\"div\", { class: \"crc-hero\" }, [\n        h(\"div\", { class: \"crc-hero-label\", text: \"Corrosion rate\" }),\n        h(\"div\", { class: \"crc-hero-value\" }, [fmt(r.mmy), h(\"span\", { text: \"mm\/year\" })]),\n        h(\"div\", { class: \"crc-hero-sub\", text: \"Average equivalent uniform corrosion penetration rate\" })\n      ]));\n      var conv = h(\"dl\", { class: \"crc-conv\" });\n      [[\"Millimeters per year\", fmt(r.mmy) + \" mm\/y\"], [\"Micrometers per year\", fmt(r.umy) + \" \u00b5m\/y\"], [\"Mils per year\", fmt(r.mpy) + \" MPY\"], [\"Inches per year\", fmt(r.ipy) + \" in\/y\"]].forEach(function (c) {\n        conv.appendChild(h(\"div\", {}, [h(\"dt\", { text: c[0] }), h(\"dd\", { text: c[1] })]));\n      });\n      body.appendChild(conv);\n    }\n    \/* =====================================================================\n       RUN (real-time and on Calculate)\n       ===================================================================== *\/\n    function run(force) {\n      if (force) { FIELDS.forEach(function (f) { state.touched[f] = true; }); }\n      var v = validate();\n      showErrors(v.E, force);\n      updateLossHint(v);\n      var r = v.ok ? corrosionRate(v.lossMg, v.dens, v.area, v.hours) : null;\n      \/* Results appear only after Calculate is clicked (or Enter pressed);\n         after that they keep updating as inputs change. *\/\n      if (force ? r !== null : false) { state.shown = true; q(\"crc-results\").hidden = false; }\n      if (!state.shown) {\n        state.last = null;\n        if (force) {\n          var f0 = root.querySelector(\".crc-invalid\");\n          if (f0) { try { f0.focus(); } catch (e) { \/* ignore *\/ } }\n        }\n        return;\n      }\n      if (!r) {\n        state.last = null;\n        renderPlaceholder(v);\n        if (force) {\n          var first = root.querySelector(\".crc-invalid\");\n          if (first) { try { first.focus(); } catch (e) { \/* ignore *\/ } }\n        }\n        announce(\"\");\n        return;\n      }\n      state.last = { v: v, r: r, time: new Date() };\n      renderResults();\n      announce(\"Corrosion rate \" + fmt(r.mmy) + \" millimeters per year, \" + fmt(r.mpy) + \" MPY.\");\n      if (force) { scrollToResults(); }\n    }\n    function announce(t) {\n      if (state.liveTimer) { clearTimeout(state.liveTimer); }\n      state.liveTimer = setTimeout(function () { q(\"crc-live\").textContent = t; }, 700);\n    }\n    function scrollToResults() {\n      var el = q(\"crc-results\"), rect = el.getBoundingClientRect();\n      var 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 resetAll() {\n      setMode(\"direct\");\n      [\"crc-wl\", \"crc-wi\", \"crc-wf\", \"crc-area\", \"crc-time\"].forEach(function (id) { q(id).value = \"\"; });\n      q(\"crc-wl-u\").value = \"mg\"; q(\"crc-wi-u\").value = \"g\"; q(\"crc-wf-u\").value = \"g\";\n      q(\"crc-mat\").value = \"carbon\"; q(\"crc-dens-u\").value = \"gcm3\"; applyPreset();\n      q(\"crc-area-u\").value = \"cm2\"; q(\"crc-time-u\").value = \"h\";\n      state.touched = {};\n      state.shown = false; q(\"crc-results\").hidden = true;\n      run(false);\n    }\n    \/* =====================================================================\n       EVENTS (bound once)\n       ===================================================================== *\/\n    var form = q(\"crc-form\");\n    form.addEventListener(\"input\", function (e) {\n      var t = e.target;\n      if (!t) { return; }\n      if (FIELDS.indexOf(t.id) >= 0) { state.touched[t.id] = true; }\n      if (t.id === \"crc-dens\") { syncMaterialToDensity(); }\n      run(false);\n    });\n    form.addEventListener(\"change\", function (e) {\n      var t = e.target;\n      if (!t) { return; }\n      if (t.name === \"crc-mode\") { updatePanels(); }\n      if (t.id === \"crc-mat\") { applyPreset(); state.touched[\"crc-dens\"] = true; }\n      if (t.id === \"crc-dens-u\") { if (q(\"crc-mat\").value !== \"custom\") { applyPreset(); } }\n      run(false);\n    });\n    form.addEventListener(\"focusout\", function (e) {\n      var t = e.target;\n      if (t ? FIELDS.indexOf(t.id) >= 0 : false) { if (String(t.value).trim() !== \"\") { state.touched[t.id] = true; run(false); } }\n    });\n    form.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Enter\" ? (e.target ? e.target.tagName === \"INPUT\" : false) : false) { e.preventDefault(); run(true); }\n    });\n    q(\"crc-calc\").addEventListener(\"click\", function () { run(true); });\n    root.crcEngine = { corrosionRate: corrosionRate };\n    resetAll();\n  }\n  if (document.getElementById(\"crc-calculator\")) { init(); }\n  else if (document.readyState === \"loading\") { document.addEventListener(\"DOMContentLoaded\", init); }\n  else { init(); }\n})();\n<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Corrosion Rate Calculator is a practical online tool designed to help engineers, researchers, and metalworking professionals accurately calculate metal corrosion rates. By entering weight&#8230;<\/p>","protected":false},"author":2,"featured_media":24982,"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":[8779,8782,8781,8780,8783],"class_list":["post-24981","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-corrosion-rate","tag-corrosion-rate-calculator","tag-corrosion-testing","tag-metal-corrosion","tag-weight-loss-calculation","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/10\/Corrosion-Rate-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24981","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=24981"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24981\/revisions"}],"predecessor-version":[{"id":24984,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/posts\/24981\/revisions\/24984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media\/24982"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/media?parent=24981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/categories?post=24981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/es\/wp-json\/wp\/v2\/tags?post=24981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}