{"id":24914,"date":"2026-09-24T06:57:28","date_gmt":"2026-09-24T06:57:28","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24914"},"modified":"2026-09-24T07:27:57","modified_gmt":"2026-09-24T07:27:57","slug":"quenching-cooling-rate-estimation-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/quenching-cooling-rate-estimation-calculator\/","title":{"rendered":"Quenching Cooling Rate Estimation Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Quenching Cooling Rate Estimation Calculator<\/strong> is a practical engineering tool for estimating the average cooling rate of a workpiece during heat treatment and quenching. By entering the initial temperature, final temperature, and cooling time, users can quickly calculate the average temperature decrease per unit of time. This calculator supports multiple temperature and time units, making it useful for heat treatment engineers, metallurgists, manufacturers, researchers, and students evaluating quenching processes and thermal behavior.<\/p>\n\n\n\n<div id=\"quenching-cooling-rate-estimator\" data-qcr-widget=\"quenching-cooling-rate\">\n  <style>\n    #quenching-cooling-rate-estimator,\n    #quenching-cooling-rate-estimator * {\n      box-sizing: border-box;\n    }\n\n    #quenching-cooling-rate-estimator {\n      width: 100%;\n      max-width: 980px;\n      margin: 24px auto;\n      padding: 24px;\n      color: #172b4d;\n      background: #ffffff;\n      border: 1px solid #d9e2ec;\n      border-radius: 12px;\n      box-shadow: 0 8px 24px rgba(23, 43, 77, 0.08);\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: 16px;\n      line-height: 1.5;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-header {\n      margin-bottom: 24px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-kicker {\n      margin: 0 0 6px;\n      color: #1769aa;\n      font-size: 0.78rem;\n      font-weight: 700;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-title {\n      margin: 0;\n      color: #102a43;\n      font-size: clamp(1.65rem, 3vw, 2.25rem);\n      line-height: 1.15;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-intro {\n      max-width: 720px;\n      margin: 10px 0 0;\n      color: #52606d;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-panel {\n      padding: 20px;\n      border: 1px solid #d9e2ec;\n      border-radius: 8px;\n      background: #ffffff;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-panel + .qcr-panel,\n    #quenching-cooling-rate-estimator .qcr-result-panel {\n      margin-top: 18px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-panel-heading {\n      margin: 0 0 16px;\n      color: #243b53;\n      font-size: 1.08rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-required-grid,\n    #quenching-cooling-rate-estimator .qcr-process-grid {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 16px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-process-grid {\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    #quenching-cooling-rate-estimator .qcr-field {\n      min-width: 0;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-field label {\n      display: block;\n      margin-bottom: 7px;\n      color: #243b53;\n      font-size: 0.93rem;\n      font-weight: 700;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-control-row {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) 92px;\n      gap: 8px;\n    }\n\n    #quenching-cooling-rate-estimator input,\n    #quenching-cooling-rate-estimator select {\n      width: 100%;\n      min-height: 44px;\n      padding: 9px 11px;\n      color: #172b4d;\n      background: #ffffff;\n      border: 1px solid #9fb3c8;\n      border-radius: 6px;\n      font: inherit;\n    }\n\n    #quenching-cooling-rate-estimator input:focus,\n    #quenching-cooling-rate-estimator select:focus,\n    #quenching-cooling-rate-estimator .qcr-button:focus {\n      outline: 3px solid rgba(23, 105, 170, 0.25);\n      outline-offset: 2px;\n      border-color: #1769aa;\n    }\n\n    #quenching-cooling-rate-estimator input.qcr-invalid,\n    #quenching-cooling-rate-estimator select.qcr-invalid {\n      border-color: #c53030;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-error {\n      min-height: 22px;\n      margin: 6px 0 0;\n      color: #a61b1b;\n      font-size: 0.84rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-field-note,\n    #quenching-cooling-rate-estimator .qcr-section-note {\n      margin: 6px 0 0;\n      color: #5d7790;\n      font-size: 0.84rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-section-note {\n      margin: -8px 0 16px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-button-wrap {\n      display: flex;\n      justify-content: center;\n      margin: 22px 0 2px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-button {\n      width: 320px;\n      min-height: 46px;\n      padding: 10px 20px;\n      color: #ffffff;\n      background: #1769aa;\n      border: 1px solid #1769aa;\n      border-radius: 6px;\n      box-shadow: 0 2px 4px rgba(23, 43, 77, 0.12);\n      cursor: pointer;\n      font: inherit;\n      font-weight: 700;\n      transition: background-color 160ms ease, border-color 160ms ease, box-shadow 160ms ease;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-button:hover {\n      background: #0f558c;\n      border-color: #0f558c;\n      box-shadow: 0 4px 9px rgba(23, 43, 77, 0.16);\n    }\n\n    #quenching-cooling-rate-estimator .qcr-form-error {\n      margin: 14px 0 0;\n      color: #a61b1b;\n      text-align: center;\n      font-size: 0.9rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-panel {\n      background: #ffffff;\n      border-color: #c9d7e6;\n      box-shadow: 0 5px 16px rgba(23, 43, 77, 0.06);\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-panel[hidden],\n    #quenching-cooling-rate-estimator .qcr-summary[hidden] {\n      display: none !important;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-unit-control {\n      display: flex;\n      align-items: center;\n      justify-content: flex-end;\n      gap: 10px;\n      margin: -4px 0 16px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-unit-label {\n      color: #52606d;\n      font-size: 0.88rem;\n      font-weight: 700;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-unit-select {\n      width: 132px;\n      min-height: 38px;\n      padding: 7px 9px;\n      color: #172b4d;\n      background: #ffffff;\n      border: 1px solid #9fb3c8;\n      border-radius: 6px;\n      font: inherit;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-hero {\n      padding: 18px;\n      border-left: 4px solid #1769aa;\n      border-radius: 6px;\n      background: #eef7ff;\n      text-align: center;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-label {\n      margin: 0;\n      color: #486581;\n      font-size: 0.92rem;\n      font-weight: 700;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-value {\n      margin: 2px 0 0;\n      color: #102a43;\n      font-size: clamp(2rem, 6vw, 3.2rem);\n      font-weight: 700;\n      line-height: 1.15;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-result-unit {\n      color: #1769aa;\n      font-size: 1.1rem;\n      font-weight: 700;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-supporting-grid {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 0 24px;\n      margin-top: 20px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-metric {\n      display: flex;\n      justify-content: space-between;\n      gap: 14px;\n      padding: 10px 0;\n      border-bottom: 1px solid #e6edf3;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-metric-label {\n      color: #52606d;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-metric-value {\n      color: #243b53;\n      font-weight: 700;\n      text-align: right;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-formula,\n    #quenching-cooling-rate-estimator .qcr-interpretation,\n    #quenching-cooling-rate-estimator .qcr-note {\n      margin: 20px 0 0;\n      color: #243b53;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-formula {\n      padding: 14px;\n      border: 1px solid #d9e2ec;\n      border-radius: 6px;\n      background: #f7f9fb;\n      font-family: Consolas, \"Courier New\", monospace;\n      font-size: 0.93rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-formula p {\n      margin: 0 0 6px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-formula p:last-child {\n      margin-bottom: 0;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary {\n      margin-top: 20px;\n      padding-top: 18px;\n      border-top: 1px solid #d9e2ec;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary[hidden] {\n      display: none;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary-heading {\n      margin: 0 0 10px;\n      color: #243b53;\n      font-size: 1rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary-list {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 6px 24px;\n      margin: 0;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary-item {\n      display: flex;\n      justify-content: space-between;\n      gap: 14px;\n      padding: 5px 0;\n      color: #52606d;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-summary-item strong {\n      color: #243b53;\n      text-align: right;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-note {\n      padding: 14px;\n      border-left: 3px solid #9fb3c8;\n      background: #f7f9fb;\n      color: #52606d;\n      font-size: 0.9rem;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-note p {\n      margin: 0 0 9px;\n    }\n\n    #quenching-cooling-rate-estimator .qcr-note p:last-child {\n      margin-bottom: 0;\n    }\n\n    @media (max-width: 700px) {\n      #quenching-cooling-rate-estimator {\n        margin: 12px auto;\n        padding: 16px;\n        border-radius: 8px;\n      }\n\n      #quenching-cooling-rate-estimator .qcr-panel {\n        padding: 16px;\n      }\n\n      #quenching-cooling-rate-estimator .qcr-required-grid,\n      #quenching-cooling-rate-estimator .qcr-process-grid,\n      #quenching-cooling-rate-estimator .qcr-supporting-grid,\n      #quenching-cooling-rate-estimator .qcr-summary-list {\n        grid-template-columns: 1fr;\n      }\n\n      #quenching-cooling-rate-estimator .qcr-button {\n        width: 100%;\n      }\n\n      #quenching-cooling-rate-estimator .qcr-result-unit-control {\n        align-items: stretch;\n        flex-direction: column;\n      }\n\n      #quenching-cooling-rate-estimator .qcr-result-unit-select {\n        width: 100%;\n      }\n    }\n\n    @media (max-width: 360px) {\n      #quenching-cooling-rate-estimator .qcr-control-row {\n        grid-template-columns: minmax(0, 1fr) 82px;\n      }\n    }\n  <\/style>\n\n  <form class=\"qcr-form\" novalidate>\n    <section class=\"qcr-panel\" aria-labelledby=\"qcr-required-heading\">\n      <h3 class=\"qcr-panel-heading\" id=\"qcr-required-heading\">Required Inputs<\/h3>\n      <div class=\"qcr-required-grid\">\n        <div class=\"qcr-field\">\n          <label for=\"qcr-initial-temperature\">Initial Temperature<\/label>\n          <div class=\"qcr-control-row\">\n            <input id=\"qcr-initial-temperature\" name=\"initialTemperature\" type=\"number\" inputmode=\"decimal\" step=\"any\" placeholder=\"e.g. 850\" aria-describedby=\"qcr-initial-error\">\n            <select id=\"qcr-initial-unit\" name=\"initialUnit\" aria-label=\"Initial temperature unit\">\n              <option value=\"C\">&deg;C<\/option>\n              <option value=\"F\">&deg;F<\/option>\n              <option value=\"K\">K<\/option>\n            <\/select>\n          <\/div>\n          <p class=\"qcr-error\" id=\"qcr-initial-error\" role=\"alert\"><\/p>\n        <\/div>\n\n        <div class=\"qcr-field\">\n          <label for=\"qcr-final-temperature\">Final Temperature<\/label>\n          <div class=\"qcr-control-row\">\n            <input id=\"qcr-final-temperature\" name=\"finalTemperature\" type=\"number\" inputmode=\"decimal\" step=\"any\" placeholder=\"e.g. 300\" aria-describedby=\"qcr-final-error\">\n            <select id=\"qcr-final-unit\" name=\"finalUnit\" aria-label=\"Final temperature unit\">\n              <option value=\"C\">&deg;C<\/option>\n              <option value=\"F\">&deg;F<\/option>\n              <option value=\"K\">K<\/option>\n            <\/select>\n          <\/div>\n          <p class=\"qcr-error\" id=\"qcr-final-error\" role=\"alert\"><\/p>\n        <\/div>\n\n        <div class=\"qcr-field\">\n          <label for=\"qcr-cooling-time\">Cooling Time<\/label>\n          <div class=\"qcr-control-row\">\n            <input id=\"qcr-cooling-time\" name=\"coolingTime\" type=\"number\" inputmode=\"decimal\" step=\"any\" placeholder=\"e.g. 20\" aria-describedby=\"qcr-time-error\">\n            <select id=\"qcr-time-unit\" name=\"timeUnit\" aria-label=\"Cooling time unit\">\n              <option value=\"s\">s<\/option>\n              <option value=\"min\">min<\/option>\n              <option value=\"ms\">ms<\/option>\n            <\/select>\n          <\/div>\n          <p class=\"qcr-error\" id=\"qcr-time-error\" role=\"alert\"><\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"qcr-button-wrap\">\n        <button class=\"qcr-button\" type=\"button\">Calculate<\/button>\n      <\/div>\n      <p class=\"qcr-form-error\" role=\"alert\" aria-live=\"polite\"><\/p>\n    <\/section>\n\n    <section class=\"qcr-panel\" aria-labelledby=\"qcr-process-heading\">\n      <h3 class=\"qcr-panel-heading\" id=\"qcr-process-heading\">Process Information<\/h3>\n      <p class=\"qcr-section-note\">Optional context for the result summary. These fields do not change the calculation.<\/p>\n      <div class=\"qcr-process-grid\">\n        <div class=\"qcr-field\">\n          <label for=\"qcr-material\">Material Type<\/label>\n          <select id=\"qcr-material\" name=\"material\">\n            <option value=\"\">Select material<\/option>\n            <option value=\"Carbon Steel\">Carbon Steel<\/option>\n            <option value=\"Alloy Steel\">Alloy Steel<\/option>\n            <option value=\"Tool Steel\">Tool Steel<\/option>\n            <option value=\"Stainless Steel\">Stainless Steel<\/option>\n            <option value=\"Aluminum Alloy\">Aluminum Alloy<\/option>\n            <option value=\"Copper Alloy\">Copper Alloy<\/option>\n            <option value=\"Other\">Other<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"qcr-field\">\n          <label for=\"qcr-medium\">Quenching Medium<\/label>\n          <select id=\"qcr-medium\" name=\"medium\">\n            <option value=\"\">Select medium<\/option>\n            <option value=\"Water\">Water<\/option>\n            <option value=\"Brine\">Brine<\/option>\n            <option value=\"Oil\">Oil<\/option>\n            <option value=\"Polymer Solution\">Polymer Solution<\/option>\n            <option value=\"Air\">Air<\/option>\n            <option value=\"Gas\">Gas<\/option>\n            <option value=\"Other\">Other<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"qcr-field\">\n          <label for=\"qcr-thickness\">Workpiece Thickness<\/label>\n          <div class=\"qcr-control-row\">\n            <input id=\"qcr-thickness\" name=\"thickness\" type=\"number\" inputmode=\"decimal\" step=\"any\" placeholder=\"Optional\">\n            <select id=\"qcr-thickness-unit\" name=\"thicknessUnit\" aria-label=\"Workpiece thickness unit\">\n              <option value=\"mm\">mm<\/option>\n              <option value=\"cm\">cm<\/option>\n              <option value=\"in\">in<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <div class=\"qcr-field\">\n          <label for=\"qcr-quenchant-temperature\">Quenchant Temperature<\/label>\n          <div class=\"qcr-control-row\">\n            <input id=\"qcr-quenchant-temperature\" name=\"quenchantTemperature\" type=\"number\" inputmode=\"decimal\" step=\"any\" placeholder=\"Optional\">\n            <select id=\"qcr-quenchant-unit\" name=\"quenchantUnit\" aria-label=\"Quenchant temperature unit\">\n              <option value=\"C\">&deg;C<\/option>\n              <option value=\"F\">&deg;F<\/option>\n              <option value=\"K\">K<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <section class=\"qcr-panel qcr-result-panel\" hidden aria-labelledby=\"qcr-result-heading\" aria-live=\"polite\">\n      <h3 class=\"qcr-panel-heading\" id=\"qcr-result-heading\">Estimated Average Cooling Rate<\/h3>\n      <div class=\"qcr-result-unit-control\">\n        <label class=\"qcr-result-unit-label\" for=\"qcr-result-unit\">Display unit<\/label>\n        <select id=\"qcr-result-unit\" class=\"qcr-result-unit-select\" aria-label=\"Cooling rate display unit\">\n          <option value=\"C\/s\">&deg;C\/s<\/option>\n          <option value=\"C\/min\">&deg;C\/min<\/option>\n          <option value=\"K\/s\">K\/s<\/option>\n          <option value=\"K\/min\">K\/min<\/option>\n          <option value=\"F\/s\">&deg;F\/s<\/option>\n          <option value=\"F\/min\">&deg;F\/min<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"qcr-result-hero\">\n        <p class=\"qcr-result-label\">Average Cooling Rate<\/p>\n        <p class=\"qcr-result-value\"><span class=\"qcr-rate-value\"><\/span> <span class=\"qcr-result-unit\"><\/span><\/p>\n      <\/div>\n\n      <div class=\"qcr-supporting-grid\">\n        <div class=\"qcr-metric\"><span class=\"qcr-metric-label\">Temperature Drop<\/span><span class=\"qcr-metric-value qcr-drop-value\"><\/span><\/div>\n        <div class=\"qcr-metric\"><span class=\"qcr-metric-label\">Cooling Time<\/span><span class=\"qcr-metric-value qcr-time-value\"><\/span><\/div>\n        <div class=\"qcr-metric\"><span class=\"qcr-metric-label\">Initial Temperature<\/span><span class=\"qcr-metric-value qcr-initial-value\"><\/span><\/div>\n        <div class=\"qcr-metric\"><span class=\"qcr-metric-label\">Final Temperature<\/span><span class=\"qcr-metric-value qcr-final-value\"><\/span><\/div>\n        <div class=\"qcr-metric\"><span class=\"qcr-metric-label\">Average Cooling Rate<\/span><span class=\"qcr-metric-value qcr-rate-reference-value\"><\/span><\/div>\n      <\/div>\n\n      <div class=\"qcr-formula\">\n        <p>R = (Ti &#8211; Tf) \/ t<\/p>\n        <p>Temperature Drop = Initial Temperature &#8211; Final Temperature<\/p>\n        <p>Average Cooling Rate = Temperature Drop \/ Cooling Time<\/p>\n      <\/div>\n\n      <p class=\"qcr-interpretation\"><\/p>\n\n      <div class=\"qcr-summary\" hidden>\n        <h4 class=\"qcr-summary-heading\">Process Summary<\/h4>\n        <div class=\"qcr-summary-list\">\n          <div class=\"qcr-summary-item qcr-material-summary\"><span>Material<\/span><strong><\/strong><\/div>\n          <div class=\"qcr-summary-item qcr-medium-summary\"><span>Quenching Medium<\/span><strong><\/strong><\/div>\n          <div class=\"qcr-summary-item qcr-thickness-summary\"><span>Workpiece Thickness<\/span><strong><\/strong><\/div>\n          <div class=\"qcr-summary-item qcr-quenchant-summary\"><span>Quenchant Temperature<\/span><strong><\/strong><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"qcr-note\">\n        <p>Average cooling rate represents the total temperature change divided by elapsed time. Actual quenching rates vary throughout the cooling cycle because heat transfer conditions change with temperature, surface boiling, vapor formation, convection, workpiece geometry, and quenchant conditions.<\/p>\n        <p>For heat-treatment design or metallurgical analysis, cooling curves, CCT\/TTT data, material properties, and validated process measurements may be required.<\/p>\n      <\/div>\n    <\/section>\n  <\/form>\n\n  <script>\n    (function () {\n      var root = document.getElementById(\"quenching-cooling-rate-estimator\");\n      if (!root) {\n        return;\n      }\n\n      var degree = String.fromCharCode(176);\n      var initialInput = root.querySelector(\"#qcr-initial-temperature\");\n      var initialUnit = root.querySelector(\"#qcr-initial-unit\");\n      var finalInput = root.querySelector(\"#qcr-final-temperature\");\n      var finalUnit = root.querySelector(\"#qcr-final-unit\");\n      var timeInput = root.querySelector(\"#qcr-cooling-time\");\n      var timeUnit = root.querySelector(\"#qcr-time-unit\");\n      var material = root.querySelector(\"#qcr-material\");\n      var medium = root.querySelector(\"#qcr-medium\");\n      var thicknessInput = root.querySelector(\"#qcr-thickness\");\n      var thicknessUnit = root.querySelector(\"#qcr-thickness-unit\");\n      var quenchantInput = root.querySelector(\"#qcr-quenchant-temperature\");\n      var quenchantUnit = root.querySelector(\"#qcr-quenchant-unit\");\n      var calculateButton = root.querySelector(\".qcr-button\");\n      var formError = root.querySelector(\".qcr-form-error\");\n      var resultPanel = root.querySelector(\".qcr-result-panel\");\n      var summary = root.querySelector(\".qcr-summary\");\n      var resultUnit = root.querySelector(\".qcr-result-unit-select\");\n      var lastRateCelsiusPerSecond = 0;\n\n      function setError(input, errorSelector, message) {\n        var error = root.querySelector(errorSelector);\n        if (message !== \"\") {\n          input.classList.add(\"qcr-invalid\");\n          input.setAttribute(\"aria-invalid\", \"true\");\n        } else {\n          input.classList.remove(\"qcr-invalid\");\n          input.setAttribute(\"aria-invalid\", \"false\");\n        }\n        error.textContent = message;\n      }\n\n      function parseValue(input) {\n        var text = input.value.trim();\n        var value;\n        if (text === \"\") {\n          return null;\n        }\n        value = Number(text);\n        if (isFinite(value)) {\n          return value;\n        }\n        return null;\n      }\n\n      function toCelsius(value, unit) {\n        if (unit === \"F\") {\n          return (value - 32) * 5 \/ 9;\n        }\n        if (unit === \"K\") {\n          return value - 273.15;\n        }\n        return value;\n      }\n\n      function absoluteZeroMessage(value, unit) {\n        if (unit === \"C\") {\n          if (value < -273.15) {\n            return \"Temperature cannot be below absolute zero.\";\n          }\n        }\n        if (unit === \"F\") {\n          if (value < -459.67) {\n            return \"Temperature cannot be below absolute zero.\";\n          }\n        }\n        if (unit === \"K\") {\n          if (value < 0) {\n            return \"Temperature cannot be below absolute zero.\";\n          }\n        }\n        return \"\";\n      }\n\n      function formatNumber(value) {\n        var absolute;\n        if (!isFinite(value)) {\n          return \"-\";\n        }\n        absolute = Math.abs(value);\n        if (absolute !== 0) {\n          if (absolute < 0.000001) {\n            return value.toExponential(5);\n          }\n        }\n        if (absolute >= 1000000) {\n          return value.toExponential(5);\n        }\n        return Number(value.toPrecision(6)).toString();\n      }\n\n      function temperatureLabel(value) {\n        return formatNumber(value) + \" \" + degree + \"C\";\n      }\n\n      function convertRate(rateCelsiusPerSecond, unit) {\n        if (unit === \"C\/min\") {\n          return rateCelsiusPerSecond * 60;\n        }\n        if (unit === \"K\/min\") {\n          return rateCelsiusPerSecond * 60;\n        }\n        if (unit === \"F\/s\") {\n          return rateCelsiusPerSecond * 1.8;\n        }\n        if (unit === \"F\/min\") {\n          return rateCelsiusPerSecond * 1.8 * 60;\n        }\n        return rateCelsiusPerSecond;\n      }\n\n      function unitLabel(unit) {\n        if (unit === \"C\/s\") {\n          return degree + \"C\/s\";\n        }\n        if (unit === \"C\/min\") {\n          return degree + \"C\/min\";\n        }\n        if (unit === \"K\/s\") {\n          return \"K\/s\";\n        }\n        if (unit === \"K\/min\") {\n          return \"K\/min\";\n        }\n        if (unit === \"F\/s\") {\n          return degree + \"F\/s\";\n        }\n        return degree + \"F\/min\";\n      }\n\n      function renderRate(rateCelsiusPerSecond) {\n        var rate = convertRate(rateCelsiusPerSecond, resultUnit.value);\n        root.querySelector(\".qcr-rate-value\").textContent = formatNumber(rate);\n        root.querySelector(\".qcr-result-unit\").textContent = unitLabel(resultUnit.value);\n      }\n\n      function renderOptionalSummary() {\n        var hasOptional = false;\n        var thicknessValue = parseValue(thicknessInput);\n        var quenchantValue = parseValue(quenchantInput);\n        var rows = [\n          root.querySelector(\".qcr-material-summary\"),\n          root.querySelector(\".qcr-medium-summary\"),\n          root.querySelector(\".qcr-thickness-summary\"),\n          root.querySelector(\".qcr-quenchant-summary\")\n        ];\n        var values = [material.value, medium.value, \"\", \"\"];\n        var i;\n\n        if (thicknessValue !== null) {\n          if (thicknessValue > 0) {\n            values[2] = formatNumber(thicknessValue) + \" \" + thicknessUnit.value;\n          }\n        }\n        if (quenchantValue !== null) {\n          if (absoluteZeroMessage(quenchantValue, quenchantUnit.value) === \"\") {\n            values[3] = temperatureLabel(toCelsius(quenchantValue, quenchantUnit.value));\n          }\n        }\n        for (i = 0; i < rows.length; i += 1) {\n          rows[i].hidden = values[i] === \"\";\n          rows[i].querySelector(\"strong\").textContent = values[i];\n          if (values[i] !== \"\") {\n            hasOptional = true;\n          }\n        }\n        summary.hidden = !hasOptional;\n      }\n\n      resultUnit.addEventListener(\"change\", function () {\n        if (!resultPanel.hidden) {\n          renderRate(lastRateCelsiusPerSecond);\n        }\n      });\n\n      calculateButton.addEventListener(\"click\", function () {\n        var initialValue = parseValue(initialInput);\n        var finalValue = parseValue(finalInput);\n        var timeValue = parseValue(timeInput);\n        var initialError = \"\";\n        var finalError = \"\";\n        var timeError = \"\";\n        var initialCelsius;\n        var finalCelsius;\n        var timeSeconds;\n\n        if (initialValue === null) {\n          if (initialInput.value.trim() === \"\") {\n            initialError = \"Enter an initial temperature.\";\n          } else {\n            initialError = \"Enter a numeric initial temperature.\";\n          }\n        } else {\n          initialError = absoluteZeroMessage(initialValue, initialUnit.value);\n        }\n        if (finalValue === null) {\n          if (finalInput.value.trim() === \"\") {\n            finalError = \"Enter a final temperature.\";\n          } else {\n            finalError = \"Enter a numeric final temperature.\";\n          }\n        } else {\n          finalError = absoluteZeroMessage(finalValue, finalUnit.value);\n        }\n        if (timeValue === null) {\n          if (timeInput.value.trim() === \"\") {\n            timeError = \"Enter a cooling time.\";\n          } else {\n            timeError = \"Enter a numeric cooling time.\";\n          }\n        } else {\n          if (timeValue <= 0) {\n            timeError = \"Cooling time must be greater than zero.\";\n          }\n        }\n\n        setError(initialInput, \"#qcr-initial-error\", initialError);\n        setError(finalInput, \"#qcr-final-error\", finalError);\n        setError(timeInput, \"#qcr-time-error\", timeError);\n        resultPanel.hidden = true;\n\n        if (initialError !== \"\") {\n          formError.textContent = \"Please check the highlighted fields.\";\n          return;\n        }\n        if (finalError !== \"\") {\n          formError.textContent = \"Please check the highlighted fields.\";\n          return;\n        }\n        if (timeError !== \"\") {\n          formError.textContent = \"Please check the highlighted fields.\";\n          return;\n        }\n\n        initialCelsius = toCelsius(initialValue, initialUnit.value);\n        finalCelsius = toCelsius(finalValue, finalUnit.value);\n        timeSeconds = timeValue;\n        if (timeUnit.value === \"min\") {\n          timeSeconds = timeValue * 60;\n        }\n        if (timeUnit.value === \"ms\") {\n          timeSeconds = timeValue * 0.001;\n        }\n\n        if (finalCelsius >= initialCelsius) {\n          setError(finalInput, \"#qcr-final-error\", \"Final temperature must be lower than initial temperature for a cooling calculation.\");\n          formError.textContent = \"Please check the highlighted fields.\";\n          return;\n        }\n\n        lastRateCelsiusPerSecond = (initialCelsius - finalCelsius) \/ timeSeconds;\n        formError.textContent = \"\";\n        root.querySelector(\".qcr-drop-value\").textContent = temperatureLabel(initialCelsius - finalCelsius);\n        root.querySelector(\".qcr-time-value\").textContent = formatNumber(timeSeconds) + \" s\";\n        root.querySelector(\".qcr-initial-value\").textContent = temperatureLabel(initialCelsius);\n        root.querySelector(\".qcr-final-value\").textContent = temperatureLabel(finalCelsius);\n        root.querySelector(\".qcr-rate-reference-value\").textContent = formatNumber(lastRateCelsiusPerSecond) + \" \" + degree + \"C\/s\";\n        root.querySelector(\".qcr-interpretation\").textContent = \"The workpiece experienced an estimated average temperature decrease of \" + formatNumber(lastRateCelsiusPerSecond) + \" \" + degree + \"C per second over the specified cooling interval.\";\n        renderRate(lastRateCelsiusPerSecond);\n        renderOptionalSummary();\n        resultPanel.hidden = false;\n      });\n    }());\n  <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Quenching Cooling Rate Estimation Calculator is a practical engineering tool for estimating the average cooling rate of a workpiece during heat treatment and quenching&#8230;.<\/p>","protected":false},"author":2,"featured_media":24915,"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_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8647],"tags":[8726,4921,8725,8585],"class_list":["post-24914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-cooling-rate","tag-heat-treatment","tag-quenching-calculator","tag-thermal-analysis","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/09\/Quenching-Cooling-Rate-Estimation-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24914"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24915"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24914"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}