{"id":24543,"date":"2026-07-21T05:13:23","date_gmt":"2026-07-21T05:13:23","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24543"},"modified":"2026-07-21T05:13:25","modified_gmt":"2026-07-21T05:13:25","slug":"shaft-shoulder-fillet-stress-concentration-checker","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/shaft-shoulder-fillet-stress-concentration-checker\/","title":{"rendered":"Shaft Shoulder Fillet Stress Concentration Checker"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Shaft Shoulder Fillet Stress Concentration Checker<\/strong> is a free online engineering tool designed to evaluate stress concentration factors at shaft shoulder fillets, helping engineers optimize shaft geometry for improved strength and fatigue life. By entering parameters such as shaft diameters, fillet radius, applied loads, and material properties, the <strong>Shaft Shoulder Fillet Stress Concentration Checker<\/strong> quickly estimates the stress concentration factor (Kt) and identifies potential high-stress regions that could lead to fatigue failure. This calculator is ideal for mechanical engineers, machine designers, and students working on rotating shafts, transmission systems, and industrial machinery. With fast, accurate, browser-based calculations, it simplifies shaft design verification, enhances structural reliability, and supports safer mechanical component design.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <meta name=\"description\" content=\"Check stress concentration at a shaft shoulder fillet transition using Peterson empirical formulas for bending, torsion, and axial loading.\" \/>\n  <title>Shaft Shoulder Fillet Stress Concentration Checker<\/title>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;family=JetBrains+Mono:wght@400;500;600&#038;display=swap\" rel=\"stylesheet\" \/>\n  <style>\n    \/*\n      WordPress-safe: all rules are scoped under #ssf-calc only.\n      Paste <style> + #ssf-calc block + <script> into a Custom HTML block;\n      theme styles outside this root are not targeted or overridden.\n    *\/\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');\n\n    #ssf-calc.ssf-root {\n      --ssf-text: #1e293b;\n      --ssf-muted: #64748b;\n      --ssf-label: #334155;\n      --ssf-blue: #1e40af;\n      --ssf-blue-light: #eff6ff;\n      --ssf-border: #cbd5e1;\n      --ssf-green: #15803d;\n      --ssf-green-bg: #f0fdf4;\n      --ssf-green-border: #86efac;\n      --ssf-yellow: #a16207;\n      --ssf-yellow-bg: #fefce8;\n      --ssf-yellow-border: #fde047;\n      --ssf-red: #b91c1c;\n      --ssf-red-bg: #fef2f2;\n      --ssf-red-border: #fca5a5;\n\n      isolation: isolate;\n      contain: layout style;\n      position: relative;\n      z-index: 0;\n      box-sizing: border-box;\n      width: 100%;\n      max-width: 1000px;\n      margin: 0 auto;\n      padding: 2rem 1rem;\n      font-family: Inter, system-ui, sans-serif;\n      font-size: 1rem;\n      line-height: 1.5;\n      color: var(--ssf-text);\n      -webkit-font-smoothing: antialiased;\n      background: #fff;\n    }\n\n    #ssf-calc.ssf-root *,\n    #ssf-calc.ssf-root *::before,\n    #ssf-calc.ssf-root *::after {\n      box-sizing: border-box;\n    }\n\n    #ssf-calc.ssf-root section,\n    #ssf-calc.ssf-root form,\n    #ssf-calc.ssf-root h2,\n    #ssf-calc.ssf-root label,\n    #ssf-calc.ssf-root p,\n    #ssf-calc.ssf-root em,\n    #ssf-calc.ssf-root sub,\n    #ssf-calc.ssf-root button,\n    #ssf-calc.ssf-root input,\n    #ssf-calc.ssf-root select,\n    #ssf-calc.ssf-root svg,\n    #ssf-calc.ssf-root span,\n    #ssf-calc.ssf-root div {\n      font-family: inherit;\n    }\n\n    #ssf-calc.ssf-root h2 {\n      margin: 0 !important;\n      padding: 0 !important;\n      border: none !important;\n      background: none !important;\n      box-shadow: none !important;\n      text-transform: none;\n      letter-spacing: normal;\n      line-height: inherit;\n    }\n\n    #ssf-calc.ssf-root form {\n      margin: 0 !important;\n      padding: 0 !important;\n      border: none !important;\n      background: transparent !important;\n      box-shadow: none !important;\n    }\n\n    #ssf-calc.ssf-root label {\n      font-weight: 500;\n      cursor: default;\n    }\n\n    #ssf-calc.ssf-root p {\n      margin: 0;\n      padding: 0;\n    }\n\n    #ssf-calc.ssf-root em {\n      font-style: italic;\n    }\n\n    #ssf-calc .ssf-layout {\n      display: flex;\n      flex-direction: column;\n      gap: 1.5rem;\n    }\n\n    #ssf-calc .ssf-results-panel {\n      display: none !important;\n    }\n\n    #ssf-calc .ssf-results-panel.ssf-results-panel--visible {\n      display: block !important;\n    }\n\n    #ssf-calc .ssf-panel {\n      border: 1px solid rgba(30, 58, 95, 0.18) !important;\n      border-radius: 0.875rem !important;\n      box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06) !important;\n      background: #fff !important;\n      padding: 1.5rem;\n      margin: 0 !important;\n    }\n\n    @media (min-width: 768px) {\n      #ssf-calc .ssf-panel {\n        padding: 1.75rem;\n      }\n    }\n\n    #ssf-calc .ssf-panel-title {\n      margin: 0 0 1.25rem !important;\n      padding: 0 !important;\n      font-size: 0.8125rem !important;\n      font-weight: 600 !important;\n      color: #1e3a5f !important;\n      text-transform: uppercase;\n      letter-spacing: 0.06em;\n      border: none !important;\n      background: none !important;\n    }\n\n    #ssf-calc .ssf-form > * + * {\n      margin-top: 1.125rem;\n    }\n\n    #ssf-calc .ssf-label {\n      display: block;\n      margin-bottom: 0.375rem;\n      font-size: 0.875rem;\n      font-weight: 500;\n      color: var(--ssf-label);\n    }\n\n    #ssf-calc .ssf-mono {\n      font-family: 'JetBrains Mono', ui-monospace, Consolas, monospace;\n    }\n\n    #ssf-calc .ssf-input-row {\n      display: grid !important;\n      grid-template-columns: minmax(0, 1fr) minmax(5.5rem, auto);\n      gap: 0.5rem;\n      align-items: stretch;\n      width: 100%;\n      min-width: 0;\n    }\n\n    #ssf-calc .ssf-input-row > * {\n      min-width: 0;\n    }\n\n    #ssf-calc .ssf-num-input,\n    #ssf-calc .ssf-unit-select,\n    #ssf-calc .ssf-field-select {\n      height: 2.625rem;\n      margin: 0 !important;\n      border: 1px solid var(--ssf-border) !important;\n      border-radius: 0.5rem !important;\n      background-color: #fff !important;\n      font-size: 0.875rem;\n      color: var(--ssf-text) !important;\n      outline: none;\n      box-shadow: none;\n      appearance: auto;\n      -webkit-appearance: auto;\n    }\n\n    #ssf-calc .ssf-num-input {\n      width: 100% !important;\n      min-width: 0 !important;\n      max-width: none !important;\n      padding: 0 0.75rem;\n      font-family: 'JetBrains Mono', ui-monospace, Consolas, monospace;\n    }\n\n    #ssf-calc .ssf-unit-select,\n    #ssf-calc .ssf-field-select {\n      width: 100% !important;\n      min-width: 5.5rem !important;\n      max-width: none !important;\n      padding: 0 0.625rem;\n      cursor: pointer;\n      overflow: visible !important;\n      text-overflow: clip !important;\n      white-space: nowrap;\n    }\n\n    #ssf-calc .ssf-num-input:focus,\n    #ssf-calc .ssf-unit-select:focus,\n    #ssf-calc .ssf-field-select:focus {\n      outline: none !important;\n      border-color: #2563eb !important;\n      box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15) !important;\n    }\n\n    #ssf-calc .ssf-hint {\n      margin: 0.375rem 0 0;\n      font-size: 0.75rem;\n      color: var(--ssf-muted);\n    }\n\n    #ssf-calc .ssf-ratio-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 0.75rem;\n      margin-bottom: 1rem;\n    }\n\n    #ssf-calc .ssf-ratio-card {\n      padding: 0.875rem;\n      border-radius: 0.625rem;\n      background: #f8fafc;\n      border: 1px solid #e2e8f0;\n      text-align: center;\n    }\n\n    #ssf-calc .ssf-ratio-label {\n      display: block;\n      font-size: 0.75rem;\n      font-weight: 500;\n      color: var(--ssf-muted);\n      margin-bottom: 0.25rem;\n    }\n\n    #ssf-calc .ssf-ratio-value {\n      font-size: 1.125rem;\n      font-weight: 600;\n      color: #1e3a5f;\n    }\n\n    #ssf-calc .ssf-kt-card {\n      padding: 1.25rem;\n      border-radius: 0.75rem;\n      background: linear-gradient(135deg, #1e3a5f 0%, #1e40af 100%);\n      color: #fff;\n      text-align: center;\n      margin-bottom: 1rem;\n      box-shadow: 0 8px 24px rgba(30, 64, 175, 0.25);\n    }\n\n    #ssf-calc .ssf-kt-label {\n      display: block;\n      font-size: 0.8125rem;\n      font-weight: 500;\n      opacity: 0.85;\n      margin-bottom: 0.375rem;\n    }\n\n    #ssf-calc .ssf-kt-value {\n      font-size: 2.5rem;\n      font-weight: 700;\n      font-family: 'JetBrains Mono', ui-monospace, Consolas, monospace;\n      line-height: 1.1;\n    }\n\n    #ssf-calc .ssf-result-row {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      gap: 1rem;\n      padding: 0.625rem 0;\n      border-bottom: 1px solid #f1f5f9;\n      font-size: 0.875rem;\n    }\n\n    #ssf-calc .ssf-result-row:last-child {\n      border-bottom: none;\n    }\n\n    #ssf-calc .ssf-result-label {\n      color: var(--ssf-muted);\n    }\n\n    #ssf-calc .ssf-result-value {\n      font-weight: 600;\n      font-family: 'JetBrains Mono', ui-monospace, Consolas, monospace;\n      color: var(--ssf-text);\n      text-align: right;\n    }\n\n    #ssf-calc .ssf-badge {\n      display: flex;\n      align-items: flex-start;\n      gap: 0.625rem;\n      padding: 0.875rem 1rem;\n      border-radius: 0.625rem;\n      font-size: 0.875rem;\n      font-weight: 500;\n      line-height: 1.45;\n      margin-top: 1rem;\n      border: 1px solid transparent;\n    }\n\n    #ssf-calc .ssf-badge-icon {\n      flex-shrink: 0;\n      width: 1.25rem;\n      height: 1.25rem;\n      margin-top: 0.1rem;\n    }\n\n    #ssf-calc .ssf-badge--low {\n      background: var(--ssf-green-bg);\n      color: var(--ssf-green);\n      border-color: var(--ssf-green-border);\n    }\n\n    #ssf-calc .ssf-badge--moderate {\n      background: var(--ssf-yellow-bg);\n      color: var(--ssf-yellow);\n      border-color: var(--ssf-yellow-border);\n    }\n\n    #ssf-calc .ssf-badge--high {\n      background: var(--ssf-red-bg);\n      color: var(--ssf-red);\n      border-color: var(--ssf-red-border);\n    }\n\n    #ssf-calc .ssf-badge--error {\n      background: #fff7ed;\n      color: #c2410c;\n      border-color: #fdba74;\n    }\n\n    #ssf-calc .ssf-error-msg {\n      margin-top: 0.75rem;\n      padding: 0.75rem 1rem;\n      border-radius: 0.5rem;\n      background: #fff7ed;\n      border: 1px solid #fdba74;\n      color: #c2410c;\n      font-size: 0.8125rem;\n    }\n\n    #ssf-calc .ssf-btn-wrap {\n      display: flex;\n      justify-content: center;\n      padding-top: 0.5rem;\n    }\n\n    #ssf-calc .ssf-calc-btn {\n      display: inline-flex !important;\n      align-items: center;\n      justify-content: center;\n      width: 33.333%;\n      min-width: 8rem;\n      margin: 0 !important;\n      padding: 0.875rem 3rem;\n      font-size: 1rem;\n      font-weight: 600;\n      font-family: inherit;\n      line-height: 1.25;\n      border-radius: 0.5rem !important;\n      cursor: pointer;\n      color: #ffffff !important;\n      background-color: #1e40af !important;\n      border: 1px solid transparent !important;\n      text-decoration: none !important;\n      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n      appearance: none;\n      -webkit-appearance: none;\n    }\n\n    #ssf-calc .ssf-calc-btn:hover,\n    #ssf-calc .ssf-calc-btn:focus {\n      color: #ffffff !important;\n      background-color: #1e3a8a !important;\n      border-color: transparent !important;\n      outline: none !important;\n      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12) !important;\n    }\n\n    #ssf-calc .ssf-calc-btn:focus-visible {\n      outline: 2px solid #2563eb !important;\n      outline-offset: 2px;\n    }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"ssf-calc\" class=\"ssf-root\">\n    <div class=\"ssf-layout\">\n      <section class=\"ssf-panel\" aria-labelledby=\"ssf-inputs-title\">\n        <h2 id=\"ssf-inputs-title\" class=\"ssf-panel-title\">Inputs<\/h2>\n        <form class=\"ssf-form\" id=\"ssf-form\" onsubmit=\"return false;\">\n          <div>\n            <label class=\"ssf-label\" for=\"ssf-D\">Major Diameter (<em>D<\/em>)<\/label>\n            <div class=\"ssf-input-row\">\n              <input class=\"ssf-num-input\" type=\"number\" id=\"ssf-D\" value=\"50\" min=\"0.001\" step=\"any\" \/>\n              <select class=\"ssf-unit-select\" id=\"ssf-D-unit\" aria-label=\"Major diameter unit\">\n                <option value=\"mm\" selected>mm<\/option>\n                <option value=\"in\">in<\/option>\n              <\/select>\n            <\/div>\n          <\/div>\n\n          <div>\n            <label class=\"ssf-label\" for=\"ssf-d\">Minor Diameter (<em>d<\/em>)<\/label>\n            <div class=\"ssf-input-row\">\n              <input class=\"ssf-num-input\" type=\"number\" id=\"ssf-d\" value=\"40\" min=\"0.001\" step=\"any\" \/>\n              <select class=\"ssf-unit-select\" id=\"ssf-d-unit\" aria-label=\"Minor diameter unit\">\n                <option value=\"mm\" selected>mm<\/option>\n                <option value=\"in\">in<\/option>\n              <\/select>\n            <\/div>\n          <\/div>\n\n          <div>\n            <label class=\"ssf-label\" for=\"ssf-r\">Fillet Radius (<em>r<\/em>)<\/label>\n            <div class=\"ssf-input-row\">\n              <input class=\"ssf-num-input\" type=\"number\" id=\"ssf-r\" value=\"3\" min=\"0.001\" step=\"any\" \/>\n              <select class=\"ssf-unit-select\" id=\"ssf-r-unit\" aria-label=\"Fillet radius unit\">\n                <option value=\"mm\" selected>mm<\/option>\n                <option value=\"in\">in<\/option>\n              <\/select>\n            <\/div>\n          <\/div>\n\n          <div>\n            <label class=\"ssf-label\" for=\"ssf-stress\">Nominal Applied Stress (<span id=\"ssf-stress-symbol\">&sigma;<sub>0<\/sub><\/span>)<\/label>\n            <div class=\"ssf-input-row\">\n              <input class=\"ssf-num-input\" type=\"number\" id=\"ssf-stress\" value=\"100\" min=\"0\" step=\"any\" \/>\n              <select class=\"ssf-unit-select\" id=\"ssf-stress-unit\" aria-label=\"Stress unit\">\n                <option value=\"MPa\" selected>MPa<\/option>\n                <option value=\"psi\">psi<\/option>\n              <\/select>\n            <\/div>\n            <p class=\"ssf-hint\">Nominal stress at the smaller section before geometric amplification.<\/p>\n          <\/div>\n\n          <div>\n            <label class=\"ssf-label\" for=\"ssf-loading\">Loading Type<\/label>\n            <select class=\"ssf-field-select\" id=\"ssf-loading\">\n              <option value=\"bending\" selected>Bending<\/option>\n              <option value=\"torsion\">Torsion<\/option>\n              <option value=\"axial\">Axial Tension<\/option>\n            <\/select>\n          <\/div>\n\n          <div class=\"ssf-btn-wrap\">\n            <button type=\"button\" class=\"ssf-calc-btn\" id=\"ssf-calc-btn\">Calculate<\/button>\n          <\/div>\n        <\/form>\n      <\/section>\n\n      <section class=\"ssf-panel ssf-results-panel\" id=\"ssf-results-panel\" aria-labelledby=\"ssf-results-title\">\n        <h2 id=\"ssf-results-title\" class=\"ssf-panel-title\">Results &amp; Summary<\/h2>\n\n        <div class=\"ssf-ratio-grid\">\n          <div class=\"ssf-ratio-card\">\n            <span class=\"ssf-ratio-label\"><em>r<\/em> \/ <em>d<\/em><\/span>\n            <span class=\"ssf-ratio-value ssf-mono\" id=\"ssf-rd-ratio\">\u2014<\/span>\n          <\/div>\n          <div class=\"ssf-ratio-card\">\n            <span class=\"ssf-ratio-label\"><em>D<\/em> \/ <em>d<\/em><\/span>\n            <span class=\"ssf-ratio-value ssf-mono\" id=\"ssf-Dd-ratio\">\u2014<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"ssf-kt-card\">\n          <span class=\"ssf-kt-label\" id=\"ssf-kt-label\">Stress Concentration Factor (K<sub>t<\/sub>)<\/span>\n          <span class=\"ssf-kt-value\" id=\"ssf-kt\">\u2014<\/span>\n        <\/div>\n\n        <div>\n          <div class=\"ssf-result-row\">\n            <span class=\"ssf-result-label\" id=\"ssf-peak-label\">Peak Stress (&sigma;<sub>max<\/sub>)<\/span>\n            <span class=\"ssf-result-value\" id=\"ssf-peak-stress\">\u2014<\/span>\n          <\/div>\n          <div class=\"ssf-result-row\">\n            <span class=\"ssf-result-label\">Nominal Stress<\/span>\n            <span class=\"ssf-result-value\" id=\"ssf-nominal-stress\">\u2014<\/span>\n          <\/div>\n          <div class=\"ssf-result-row\">\n            <span class=\"ssf-result-label\">Shoulder Height <em>h<\/em> = (<em>D<\/em>&minus;<em>d<\/em>)\/2<\/span>\n            <span class=\"ssf-result-value\" id=\"ssf-h-value\">\u2014<\/span>\n          <\/div>\n          <div class=\"ssf-result-row\">\n            <span class=\"ssf-result-label\"><em>h<\/em> \/ <em>r<\/em><\/span>\n            <span class=\"ssf-result-value\" id=\"ssf-hr-ratio\">\u2014<\/span>\n          <\/div>\n        <\/div>\n\n        <div id=\"ssf-status\" class=\"ssf-badge ssf-badge--low\" role=\"status\">\n          <svg class=\"ssf-badge-icon\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n            <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\" clip-rule=\"evenodd\" \/>\n          <\/svg>\n          <span id=\"ssf-status-text\">Enter valid dimensions to calculate.<\/span>\n        <\/div>\n\n        <div id=\"ssf-error\" class=\"ssf-error-msg\" hidden><\/div>\n      <\/section>\n    <\/div>\n  <\/div>\n\n  <script>\n    (function () {\n      'use strict';\n\n      const IN_TO_MM = 25.4;\n      const PSI_TO_MPA = 0.006894757;\n\n      const els = {\n        D: document.getElementById('ssf-D'),\n        d: document.getElementById('ssf-d'),\n        r: document.getElementById('ssf-r'),\n        stress: document.getElementById('ssf-stress'),\n        DUnit: document.getElementById('ssf-D-unit'),\n        dUnit: document.getElementById('ssf-d-unit'),\n        rUnit: document.getElementById('ssf-r-unit'),\n        stressUnit: document.getElementById('ssf-stress-unit'),\n        loading: document.getElementById('ssf-loading'),\n        rdRatio: document.getElementById('ssf-rd-ratio'),\n        DdRatio: document.getElementById('ssf-Dd-ratio'),\n        hrRatio: document.getElementById('ssf-hr-ratio'),\n        hValue: document.getElementById('ssf-h-value'),\n        kt: document.getElementById('ssf-kt'),\n        ktLabel: document.getElementById('ssf-kt-label'),\n        peakStress: document.getElementById('ssf-peak-stress'),\n        peakLabel: document.getElementById('ssf-peak-label'),\n        nominalStress: document.getElementById('ssf-nominal-stress'),\n        stressSymbol: document.getElementById('ssf-stress-symbol'),\n        status: document.getElementById('ssf-status'),\n        statusText: document.getElementById('ssf-status-text'),\n        error: document.getElementById('ssf-error'),\n        calcBtn: document.getElementById('ssf-calc-btn'),\n        resultsPanel: document.getElementById('ssf-results-panel')\n      };\n\n      function updateStressSymbol() {\n        const isTorsion = els.loading.value === 'torsion';\n        els.stressSymbol.innerHTML = isTorsion ? '&tau;<sub>0<\/sub>' : '&sigma;<sub>0<\/sub>';\n      }\n\n      function toMm(value, unit) {\n        return unit === 'in' ? value * IN_TO_MM : value;\n      }\n\n      function toDisplayLength(mm, unit) {\n        return unit === 'in' ? mm \/ IN_TO_MM : mm;\n      }\n\n      function toMpa(value, unit) {\n        return unit === 'psi' ? value * PSI_TO_MPA : value;\n      }\n\n      function toDisplayStress(mpa, unit) {\n        return unit === 'psi' ? mpa \/ PSI_TO_MPA : mpa;\n      }\n\n      function fmt(n, digits) {\n        if (!Number.isFinite(n)) return '\u2014';\n        if (Math.abs(n) >= 1000) return n.toExponential(3);\n        return n.toFixed(digits);\n      }\n\n      function calcCoeffs(hr, mode) {\n        const sqrtHr = Math.sqrt(hr);\n        let C1, C2, C3, C4;\n\n        if (mode === 'torsion') {\n          C1 = 0.905 + 0.783 * sqrtHr - 0.075 * hr;\n          C2 = -0.437 - 1.969 * sqrtHr + 0.553 * hr;\n          C3 = 1.557 + 1.073 * sqrtHr - 0.578 * hr;\n          C4 = -1.061 + 0.171 * sqrtHr + 0.086 * hr;\n          return { C1, C2, C3, C4 };\n        }\n\n        if (hr <= 2.0) {\n          if (mode === 'bending') {\n            C1 = 0.947 + 1.206 * sqrtHr - 0.131 * hr;\n            C2 = 0.022 - 3.405 * sqrtHr + 0.915 * hr;\n            C3 = 0.869 + 1.777 * sqrtHr - 0.555 * hr;\n            C4 = -0.810 + 0.422 * sqrtHr - 0.260 * hr;\n          } else {\n            C1 = 0.926 + 1.157 * sqrtHr - 0.099 * hr;\n            C2 = 0.012 - 3.036 * sqrtHr + 0.961 * hr;\n            C3 = -0.302 + 3.977 * sqrtHr - 1.744 * hr;\n            C4 = 0.365 - 2.098 * sqrtHr + 0.878 * hr;\n          }\n        } else {\n          if (mode === 'bending') {\n            C1 = 1.232 + 0.832 * sqrtHr - 0.008 * hr;\n            C2 = -3.813 + 0.968 * sqrtHr - 0.260 * hr;\n            C3 = 7.423 - 4.868 * sqrtHr + 0.869 * hr;\n            C4 = -3.839 + 3.070 * sqrtHr - 0.600 * hr;\n          } else {\n            C1 = 1.200 + 0.860 * sqrtHr - 0.022 * hr;\n            C2 = -1.805 - 0.346 * sqrtHr - 0.038 * hr;\n            C3 = 2.198 - 0.486 * sqrtHr + 0.165 * hr;\n            C4 = -0.593 - 0.028 * sqrtHr - 0.106 * hr;\n          }\n        }\n\n        return { C1, C2, C3, C4 };\n      }\n\n      function calcKt(D, d, r, mode) {\n        const h = (D - d) \/ 2;\n        const hr = h \/ r;\n        const x = (2 * h) \/ D;\n\n        let hrMin, hrMax;\n        if (mode === 'torsion') {\n          hrMin = 0.25;\n          hrMax = 4.0;\n        } else {\n          hrMin = 0.1;\n          hrMax = 20.0;\n        }\n\n        if (hr < hrMin || hr > hrMax) {\n          return {\n            ok: false,\n            hr,\n            h,\n            message: `h\/r = ${fmt(hr, 3)} is outside the valid range (${hrMin} \\u2264 h\/r \\u2264 ${hrMax}) for ${mode} loading.`\n          };\n        }\n\n        const { C1, C2, C3, C4 } = calcCoeffs(hr, mode);\n        const Kt = C1 + C2 * x + C3 * x * x + C4 * x * x * x;\n\n        if (!Number.isFinite(Kt) || Kt < 1) {\n          return {\n            ok: false,\n            hr,\n            h,\n            message: 'Unable to compute a valid stress concentration factor for these dimensions.'\n          };\n        }\n\n        return { ok: true, Kt, hr, h, x };\n      }\n\n      function setStatus(level, text) {\n        els.status.className = 'ssf-badge ssf-badge--' + level;\n        els.statusText.textContent = text;\n\n        const icons = {\n          low: '<path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\" clip-rule=\"evenodd\" \/>',\n          moderate: '<path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 6a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 6zm0 9a1 1 0 100-2 1 1 0 000 2z\" clip-rule=\"evenodd\" \/>',\n          high: '<path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 6a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 6zm0 9a1 1 0 100-2 1 1 0 000 2z\" clip-rule=\"evenodd\" \/>',\n          error: '<path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 6a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 6zm0 9a1 1 0 100-2 1 1 0 000 2z\" clip-rule=\"evenodd\" \/>'\n        };\n\n        els.status.querySelector('.ssf-badge-icon').innerHTML = icons[level] || icons.error;\n      }\n\n      function calculate() {\n        const Dmm = toMm(parseFloat(els.D.value), els.DUnit.value);\n        const dmm = toMm(parseFloat(els.d.value), els.dUnit.value);\n        const rmm = toMm(parseFloat(els.r.value), els.rUnit.value);\n        const sigma0Mpa = toMpa(parseFloat(els.stress.value), els.stressUnit.value);\n        const mode = els.loading.value;\n        const lenUnit = els.DUnit.value;\n        const stressUnit = els.stressUnit.value;\n\n        els.error.hidden = true;\n        els.error.textContent = '';\n\n        if (![Dmm, dmm, rmm, sigma0Mpa].every(Number.isFinite)) {\n          setStatus('error', 'Please enter valid numeric values for all fields.');\n          return;\n        }\n\n        if (Dmm <= dmm) {\n          els.error.hidden = false;\n          els.error.textContent = 'Validation error: Major diameter D must be greater than minor diameter d (D > d).';\n          setStatus('error', 'Invalid geometry: D must exceed d.');\n          els.kt.textContent = '\u2014';\n          els.peakStress.textContent = '\u2014';\n          return;\n        }\n\n        if (rmm <= 0) {\n          els.error.hidden = false;\n          els.error.textContent = 'Validation error: Fillet radius r must be greater than zero (r > 0).';\n          setStatus('error', 'Invalid geometry: r must be positive.');\n          els.kt.textContent = '\u2014';\n          els.peakStress.textContent = '\u2014';\n          return;\n        }\n\n        if (sigma0Mpa < 0) {\n          els.error.hidden = false;\n          els.error.textContent = 'Nominal stress must be zero or positive.';\n          setStatus('error', 'Invalid stress input.');\n          return;\n        }\n\n        const rd = rmm \/ dmm;\n        const Dd = Dmm \/ dmm;\n        els.rdRatio.textContent = fmt(rd, 4);\n        els.DdRatio.textContent = fmt(Dd, 4);\n\n        const result = calcKt(Dmm, dmm, rmm, mode);\n\n        els.hValue.textContent = fmt(toDisplayLength(result.h, lenUnit), 3) + ' ' + lenUnit;\n        els.hrRatio.textContent = Number.isFinite(result.hr) ? fmt(result.hr, 4) : '\u2014';\n\n        const isTorsion = mode === 'torsion';\n        els.ktLabel.innerHTML = isTorsion\n          ? 'Stress Concentration Factor (K<sub>ts<\/sub>)'\n          : 'Stress Concentration Factor (K<sub>t<\/sub>)';\n        els.stressSymbol.innerHTML = isTorsion ? '&tau;<sub>0<\/sub>' : '&sigma;<sub>0<\/sub>';\n        els.peakLabel.innerHTML = isTorsion\n          ? 'Peak Stress (&tau;<sub>max<\/sub>)'\n          : 'Peak Stress (&sigma;<sub>max<\/sub>)';\n\n        if (!result.ok) {\n          els.kt.textContent = '\u2014';\n          els.peakStress.textContent = '\u2014';\n          els.nominalStress.textContent = fmt(toDisplayStress(sigma0Mpa, stressUnit), 2) + ' ' + stressUnit;\n          els.error.hidden = false;\n          els.error.textContent = result.message;\n          setStatus('error', 'Calculation out of valid range.');\n          return;\n        }\n\n        const peakMpa = result.Kt * sigma0Mpa;\n\n        els.kt.textContent = fmt(result.Kt, 3);\n        els.peakStress.textContent = fmt(toDisplayStress(peakMpa, stressUnit), 2) + ' ' + stressUnit;\n        els.nominalStress.textContent = fmt(toDisplayStress(sigma0Mpa, stressUnit), 2) + ' ' + stressUnit;\n\n        if (result.Kt < 1.5) {\n          setStatus('low', 'Low Stress Concentration \u2014 Fillet geometry is relatively favorable.');\n        } else if (result.Kt <= 2.5) {\n          setStatus('moderate', 'Moderate Stress Concentration \u2014 Review fillet size and loading.');\n        } else {\n          setStatus('high', 'High Stress Concentration \u2014 Consider increasing fillet radius r.');\n        }\n      }\n\n      els.calcBtn.addEventListener('click', function () {\n        els.resultsPanel.classList.add('ssf-results-panel--visible');\n        calculate();\n        els.resultsPanel.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n      });\n\n      els.loading.addEventListener('change', updateStressSymbol);\n      updateStressSymbol();\n    })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Shaft Shoulder Fillet Stress Concentration Checker is a free online engineering tool designed to evaluate stress concentration factors at shaft shoulder fillets, helping engineers&#8230;<\/p>","protected":false},"author":2,"featured_media":24544,"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":[8520],"tags":[2940,8538,8537,8539],"class_list":["post-24543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-shaft-design","tag-shaft-fillet","tag-stress-checker","tag-stress-concentration","pmpro-has-access"],"acf":[],"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/07\/Shaft-Shoulder-Fillet-Stress-Concentration-Checker.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24543"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24543\/revisions"}],"predecessor-version":[{"id":24545,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24543\/revisions\/24545"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24544"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}