{"id":24649,"date":"2026-08-17T03:15:00","date_gmt":"2026-08-17T03:15:00","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24649"},"modified":"2026-08-17T03:19:02","modified_gmt":"2026-08-17T03:19:02","slug":"journal-bearing-load-capacity-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/journal-bearing-load-capacity-calculator\/","title":{"rendered":"Journal Bearing Load Capacity Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Journal Bearing Load Capacity Calculator<\/strong> is a practical engineering tool designed to estimate the load-carrying capacity of journal bearings based on key operating parameters. It helps engineers, designers, and maintenance professionals quickly evaluate whether a bearing can safely support the required radial load under specific working conditions. By simplifying bearing load calculations, the Journal Bearing Load Capacity Calculator supports efficient bearing selection, mechanical design, performance evaluation, and troubleshooting while reducing the risk of excessive wear, overheating, and premature bearing failure.<\/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  <title>Journal Bearing Load Capacity Calculator<\/title>\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\/dist\/chart.umd.min.js\"><\/script>\n  <style>\n    \/* All rules scoped to #jblc-root so WordPress theme styles are not affected. *\/\n    #jblc-root {\n      --jblc-bg: #ffffff;\n      --jblc-surface: #ffffff;\n      --jblc-surface-2: #e2e8f0;\n      --jblc-border: #cbd5e1;\n      --jblc-text: #1e293b;\n      --jblc-muted: #64748b;\n      --jblc-accent: #0284c7;\n      --jblc-accent-2: #0369a1;\n      --jblc-success: #16a34a;\n      --jblc-warning: #d97706;\n      --jblc-danger: #dc2626;\n      --jblc-radius: 10px;\n      box-sizing: border-box;\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n      background: #ffffff;\n      color: var(--jblc-text);\n      line-height: 1.5;\n      width: 1000px;\n      max-width: 100%;\n      margin: 0 auto;\n      padding: 20px 16px 32px;\n      display: flex;\n      flex-direction: column;\n      gap: 20px;\n    }\n\n    #jblc-root *,\n    #jblc-root *::before,\n    #jblc-root *::after {\n      box-sizing: border-box;\n    }\n\n    #jblc-root h2,\n    #jblc-root h3 {\n      margin: 0;\n      padding: 0;\n      font-family: inherit;\n      line-height: inherit;\n      color: inherit;\n      background: none;\n      border: none;\n    }\n\n    #jblc-root button {\n      font-family: inherit;\n      line-height: inherit;\n      appearance: none;\n      -webkit-appearance: none;\n    }\n\n    #jblc-root input {\n      font-family: inherit;\n      margin: 0;\n      max-width: none;\n    }\n\n    #jblc-root canvas {\n      max-width: 100%;\n      height: auto;\n    }\n\n    #jblc-root .jblc-panel {\n      background: var(--jblc-surface);\n      border: 1px solid var(--jblc-border);\n      border-radius: var(--jblc-radius);\n      padding: 18px;\n    }\n\n    #jblc-root .jblc-panel-title {\n      margin: 0 0 14px;\n      font-size: 0.75rem;\n      font-weight: 700;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n      color: var(--jblc-accent);\n    }\n\n    #jblc-root .jblc-group {\n      margin-bottom: 18px;\n      padding-bottom: 14px;\n      border-bottom: 1px solid var(--jblc-surface-2);\n    }\n\n    #jblc-root .jblc-group-label {\n      font-size: 0.7rem;\n      font-weight: 600;\n      color: var(--jblc-muted);\n      text-transform: uppercase;\n      letter-spacing: 0.06em;\n      margin-bottom: 10px;\n    }\n\n    #jblc-root .jblc-field { margin-bottom: 12px; }\n\n    #jblc-root .jblc-field-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: baseline;\n      margin-bottom: 6px;\n    }\n\n    #jblc-root .jblc-field-header label {\n      font-size: 0.8125rem;\n      font-weight: 500;\n      color: var(--jblc-text);\n      margin: 0;\n    }\n\n    #jblc-root .jblc-unit {\n      font-size: 0.75rem;\n      color: var(--jblc-muted);\n    }\n\n    #jblc-root .jblc-field-row {\n      display: grid;\n      grid-template-columns: 1fr 88px;\n      gap: 10px;\n      align-items: center;\n    }\n\n    #jblc-root input[type=\"range\"] {\n      width: 100%;\n      accent-color: var(--jblc-accent);\n      cursor: pointer;\n    }\n\n    #jblc-root input[type=\"number\"] {\n      width: 100%;\n      background: #ffffff;\n      border: 1px solid var(--jblc-border);\n      border-radius: 6px;\n      color: var(--jblc-text);\n      padding: 6px 8px;\n      font-size: 0.8125rem;\n      font-variant-numeric: tabular-nums;\n      height: auto;\n      box-shadow: none;\n    }\n\n    #jblc-root input[type=\"number\"]:focus {\n      outline: none;\n      border-color: var(--jblc-accent);\n      box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.2);\n    }\n\n    #jblc-root .jblc-mode-toggle {\n      display: flex;\n      gap: 0;\n      background: #f8fafc;\n      border-radius: 8px;\n      padding: 3px;\n      border: 1px solid var(--jblc-border);\n    }\n\n    #jblc-root .jblc-mode-toggle button {\n      flex: 1;\n      border: none;\n      background: transparent;\n      color: var(--jblc-muted);\n      padding: 8px 10px;\n      font-size: 0.75rem;\n      font-weight: 600;\n      border-radius: 6px;\n      cursor: pointer;\n      transition: background 0.15s, color 0.15s;\n      box-shadow: none;\n      text-transform: none;\n    }\n\n    #jblc-root .jblc-mode-toggle button.jblc-active {\n      background: var(--jblc-accent-2);\n      color: #fff;\n    }\n\n    #jblc-root .jblc-results-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n      gap: 12px;\n      margin-bottom: 16px;\n    }\n\n    #jblc-root .jblc-result-card {\n      background: #f8fafc;\n      border: 1px solid var(--jblc-border);\n      border-radius: 8px;\n      padding: 12px;\n    }\n\n    #jblc-root .jblc-result-card .jblc-label {\n      font-size: 0.6875rem;\n      color: var(--jblc-muted);\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      margin-bottom: 4px;\n    }\n\n    #jblc-root .jblc-result-card .jblc-value {\n      font-size: 1.125rem;\n      font-weight: 700;\n      font-variant-numeric: tabular-nums;\n      color: var(--jblc-accent);\n    }\n\n    #jblc-root .jblc-result-card .jblc-sub {\n      font-size: 0.6875rem;\n      color: var(--jblc-muted);\n      margin-top: 2px;\n    }\n\n    #jblc-root .jblc-status-badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      padding: 8px 14px;\n      border-radius: 999px;\n      font-size: 0.8125rem;\n      font-weight: 600;\n      margin-bottom: 16px;\n    }\n\n    #jblc-root .jblc-status-badge.jblc-ok {\n      background: rgba(34, 197, 94, 0.15);\n      color: var(--jblc-success);\n      border: 1px solid rgba(34, 197, 94, 0.4);\n    }\n\n    #jblc-root .jblc-status-badge.jblc-warn {\n      background: rgba(245, 158, 11, 0.15);\n      color: var(--jblc-warning);\n      border: 1px solid rgba(245, 158, 11, 0.4);\n    }\n\n    #jblc-root .jblc-status-badge.jblc-danger {\n      background: rgba(239, 68, 68, 0.15);\n      color: var(--jblc-danger);\n      border: 1px solid rgba(239, 68, 68, 0.4);\n    }\n\n    #jblc-root .jblc-status-dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: currentColor;\n    }\n\n    #jblc-root .jblc-alerts {\n      margin-bottom: 16px;\n    }\n\n    #jblc-root .jblc-alert {\n      padding: 10px 12px;\n      border-radius: 8px;\n      font-size: 0.8125rem;\n      margin-bottom: 8px;\n      border-left: 3px solid;\n    }\n\n    #jblc-root .jblc-alert.jblc-warning {\n      background: rgba(217, 119, 6, 0.08);\n      border-color: var(--jblc-warning);\n      color: #92400e;\n    }\n\n    #jblc-root .jblc-alert.jblc-danger {\n      background: rgba(220, 38, 38, 0.08);\n      border-color: var(--jblc-danger);\n      color: #991b1b;\n    }\n\n    #jblc-root .jblc-viz { margin-bottom: 16px; }\n\n    #jblc-root .jblc-viz h3 {\n      margin: 0 0 8px;\n      font-size: 0.8125rem;\n      font-weight: 600;\n      color: var(--jblc-muted);\n    }\n\n    #jblc-root .jblc-canvas-wrap {\n      background: #f8fafc;\n      border: 1px solid var(--jblc-border);\n      border-radius: 8px;\n      overflow: hidden;\n    }\n\n    #jblc-root #jblc-bearingCanvas {\n      display: block;\n      width: 100%;\n      height: auto;\n    }\n\n    #jblc-root .jblc-chart-wrap {\n      background: #f8fafc;\n      border: 1px solid var(--jblc-border);\n      border-radius: 8px;\n      padding: 12px;\n      height: 260px;\n    }\n\n    #jblc-root .jblc-formula-note {\n      margin-top: 14px;\n      padding: 10px 12px;\n      background: #f8fafc;\n      border-radius: 8px;\n      border: 1px solid var(--jblc-surface-2);\n      font-size: 0.6875rem;\n      color: var(--jblc-muted);\n      font-family: \"SFMono-Regular\", Consolas, monospace;\n      line-height: 1.6;\n    }\n\n    #jblc-root .jblc-calc-actions {\n      display: flex;\n      justify-content: center;\n      margin-top: 18px;\n      padding-top: 16px;\n      border-top: 1px solid var(--jblc-surface-2);\n    }\n\n    #jblc-root .jblc-calc-btn {\n      background: var(--jblc-accent-2);\n      color: #ffffff;\n      border: none;\n      border-radius: 8px;\n      padding: 12px 48px;\n      font-size: 0.9375rem;\n      font-weight: 700;\n      letter-spacing: 0.04em;\n      cursor: pointer;\n      transition: background 0.15s, transform 0.1s;\n      box-shadow: none;\n      text-transform: none;\n    }\n\n    #jblc-root .jblc-calc-btn:hover {\n      background: #075985;\n      color: #ffffff;\n    }\n\n    #jblc-root .jblc-calc-btn:active {\n      transform: scale(0.98);\n    }\n\n    #jblc-root #jblc-resultsPanel {\n      display: none;\n    }\n\n    #jblc-root #jblc-resultsPanel.jblc-visible {\n      display: block;\n    }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"jblc-root\">\n    <div class=\"jblc-panel\">\n      <h2 class=\"jblc-panel-title\">Input Parameters<\/h2>\n\n      <div class=\"jblc-group\">\n        <div class=\"jblc-group-label\">Calculation Mode<\/div>\n        <div class=\"jblc-mode-toggle\">\n          <button type=\"button\" id=\"jblc-modeLoad\" class=\"jblc-active\">Applied Load (W)<\/button>\n          <button type=\"button\" id=\"jblc-modeEps\">Target \u03b5<\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-group\">\n        <div class=\"jblc-group-label\">Geometry<\/div>\n        <div class=\"jblc-field\">\n          <div class=\"jblc-field-header\"><label>Journal Diameter (d)<\/label><span class=\"jblc-unit\">mm<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-dSlider\" min=\"20\" max=\"200\" step=\"1\" value=\"50\">\n            <input type=\"number\" id=\"jblc-dInput\" min=\"20\" max=\"200\" step=\"1\" value=\"50\">\n          <\/div>\n        <\/div>\n        <div class=\"jblc-field\">\n          <div class=\"jblc-field-header\"><label>Bearing Length (L)<\/label><span class=\"jblc-unit\">mm<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-LSlider\" min=\"10\" max=\"150\" step=\"1\" value=\"50\">\n            <input type=\"number\" id=\"jblc-LInput\" min=\"10\" max=\"150\" step=\"1\" value=\"50\">\n          <\/div>\n        <\/div>\n        <div class=\"jblc-field\">\n          <div class=\"jblc-field-header\"><label>Radial Clearance (c)<\/label><span class=\"jblc-unit\">\u00b5m<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-cSlider\" min=\"20\" max=\"150\" step=\"1\" value=\"50\">\n            <input type=\"number\" id=\"jblc-cInput\" min=\"20\" max=\"150\" step=\"1\" value=\"50\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-group\">\n        <div class=\"jblc-group-label\">Operating Conditions<\/div>\n        <div class=\"jblc-field\">\n          <div class=\"jblc-field-header\"><label>Rotational Speed (N)<\/label><span class=\"jblc-unit\">RPM<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-NSlider\" min=\"100\" max=\"10000\" step=\"50\" value=\"3000\">\n            <input type=\"number\" id=\"jblc-NInput\" min=\"100\" max=\"10000\" step=\"50\" value=\"3000\">\n          <\/div>\n        <\/div>\n        <div class=\"jblc-field\">\n          <div class=\"jblc-field-header\"><label>Dynamic Viscosity (\u03bc)<\/label><span class=\"jblc-unit\">mPa\u00b7s<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-muSlider\" min=\"5\" max=\"100\" step=\"0.5\" value=\"25\">\n            <input type=\"number\" id=\"jblc-muInput\" min=\"5\" max=\"100\" step=\"0.5\" value=\"25\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-group\">\n        <div class=\"jblc-group-label\">Load<\/div>\n        <div class=\"jblc-field\" id=\"jblc-fieldW\">\n          <div class=\"jblc-field-header\"><label>Applied Load (W)<\/label><span class=\"jblc-unit\">N<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-WSlider\" min=\"100\" max=\"20000\" step=\"50\" value=\"5000\">\n            <input type=\"number\" id=\"jblc-WInput\" min=\"100\" max=\"20000\" step=\"50\" value=\"5000\">\n          <\/div>\n        <\/div>\n        <div class=\"jblc-field\" id=\"jblc-fieldEps\" style=\"display:none\">\n          <div class=\"jblc-field-header\"><label>Eccentricity Ratio (\u03b5)<\/label><span class=\"jblc-unit\">0\u20130.99<\/span><\/div>\n          <div class=\"jblc-field-row\">\n            <input type=\"range\" id=\"jblc-epsSlider\" min=\"0.1\" max=\"0.95\" step=\"0.01\" value=\"0.6\">\n            <input type=\"number\" id=\"jblc-epsInput\" min=\"0.1\" max=\"0.95\" step=\"0.01\" value=\"0.6\">\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-formula-note\">\n        v = \u03c0dN\/(60\u00d71000) m\/s \u00b7 p = W\/(dL) MPa \u00b7 \u03c8 = 2c\/d \u00b7 S = p\u03c8\u00b2\/(\u03bc\u03c9) \u00b7 h_min = c(1\u2212\u03b5)\n      <\/div>\n\n      <div class=\"jblc-calc-actions\">\n        <button type=\"button\" class=\"jblc-calc-btn\" id=\"jblc-calcBtn\">Calculate<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"jblc-panel\" id=\"jblc-resultsPanel\">\n      <h2 class=\"jblc-panel-title\">Results &amp; Visualization<\/h2>\n\n      <div id=\"jblc-statusBadge\" class=\"jblc-status-badge jblc-ok\">\n        <span class=\"jblc-status-dot\"><\/span>\n        <span id=\"jblc-statusText\">Hydrodynamic \u2014 Safe Operation<\/span>\n      <\/div>\n\n      <div id=\"jblc-alerts\" class=\"jblc-alerts\"><\/div>\n\n      <div class=\"jblc-results-grid\">\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Sommerfeld No.<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resS\">\u2014<\/div>\n          <div class=\"jblc-sub\">S = p\u03c8\u00b2\/(\u03bc\u03c9)<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">h<sub>min<\/sub><\/div>\n          <div class=\"jblc-value\" id=\"jblc-resHmin\">\u2014<\/div>\n          <div class=\"jblc-sub\">\u00b5m<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Eccentricity \u03b5<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resEps\">\u2014<\/div>\n          <div class=\"jblc-sub\">dimensionless<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Avg Pressure p<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resP\">\u2014<\/div>\n          <div class=\"jblc-sub\">MPa<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Max Pressure<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resPmax\">\u2014<\/div>\n          <div class=\"jblc-sub\">MPa (approx.)<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Friction \u03bc<sub>f<\/sub><\/div>\n          <div class=\"jblc-value\" id=\"jblc-resMuF\">\u2014<\/div>\n          <div class=\"jblc-sub\">dimensionless<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Power Loss<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resPower\">\u2014<\/div>\n          <div class=\"jblc-sub\">W<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Surface Speed<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resV\">\u2014<\/div>\n          <div class=\"jblc-sub\">m\/s<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Clearance Ratio \u03c8<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resPsi\">\u2014<\/div>\n          <div class=\"jblc-sub\">2c\/d<\/div>\n        <\/div>\n        <div class=\"jblc-result-card\">\n          <div class=\"jblc-label\">Attitude Angle<\/div>\n          <div class=\"jblc-value\" id=\"jblc-resPhi\">\u2014<\/div>\n          <div class=\"jblc-sub\">degrees<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-viz\">\n        <h3>Bearing Cross-Section &amp; Pressure Distribution<\/h3>\n        <div class=\"jblc-canvas-wrap\">\n          <canvas id=\"jblc-bearingCanvas\" width=\"560\" height=\"340\"><\/canvas>\n        <\/div>\n      <\/div>\n\n      <div class=\"jblc-viz\">\n        <h3>Minimum Film Thickness vs RPM<\/h3>\n        <div class=\"jblc-chart-wrap\">\n          <canvas id=\"jblc-rpmChart\"><\/canvas>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n  (function () {\n    const root = document.getElementById('jblc-root');\n    if (!root) return;\n    const el = (id) => root.querySelector('#' + id);\n\n    const state = {\n      mode: 'load',\n      d: 50, L: 50, c: 50, N: 3000, mu: 25, W: 5000, eps: 0.6\n    };\n\n    const H_CRIT = 2.5;\n    const S_MIN = 0.002;\n    const S_MAX = 50;\n\n    const pairs = [\n      ['jblc-dSlider', 'jblc-dInput', 'd'],\n      ['jblc-LSlider', 'jblc-LInput', 'L'],\n      ['jblc-cSlider', 'jblc-cInput', 'c'],\n      ['jblc-NSlider', 'jblc-NInput', 'N'],\n      ['jblc-muSlider', 'jblc-muInput', 'mu'],\n      ['jblc-WSlider', 'jblc-WInput', 'W'],\n      ['jblc-epsSlider', 'jblc-epsInput', 'eps']\n    ];\n\n    pairs.forEach(([sliderId, inputId, key]) => {\n      const slider = el(sliderId);\n      const input = el(inputId);\n      slider.addEventListener('input', () => {\n        state[key] = parseFloat(slider.value);\n        input.value = slider.value;\n      });\n      input.addEventListener('input', () => {\n        let v = parseFloat(input.value);\n        if (isNaN(v)) return;\n        v = Math.max(parseFloat(slider.min), Math.min(parseFloat(slider.max), v));\n        state[key] = v;\n        slider.value = v;\n        input.value = v;\n      });\n    });\n\n    const modeLoadBtn = el('jblc-modeLoad');\n    const modeEpsBtn = el('jblc-modeEps');\n    const fieldW = el('jblc-fieldW');\n    const fieldEps = el('jblc-fieldEps');\n\n    modeLoadBtn.addEventListener('click', () => {\n      state.mode = 'load';\n      modeLoadBtn.classList.add('jblc-active');\n      modeEpsBtn.classList.remove('jblc-active');\n      fieldW.style.display = '';\n      fieldEps.style.display = 'none';\n    });\n\n    modeEpsBtn.addEventListener('click', () => {\n      state.mode = 'epsilon';\n      modeEpsBtn.classList.add('jblc-active');\n      modeLoadBtn.classList.remove('jblc-active');\n      fieldW.style.display = 'none';\n      fieldEps.style.display = '';\n    });\n\n    function omega(N) { return (2 * Math.PI * N) \/ 60; }\n\n    function surfaceVelocity(d, N) {\n      return (Math.PI * d * N) \/ (60 * 1000);\n    }\n\n    function clearanceRatio(c, d) {\n      return (2 * c * 1e-3) \/ d;\n    }\n\n    function avgPressure(W, d, L) {\n      return W \/ (d * L);\n    }\n\n    function sommerfeldNumber(p, psi, mu, N) {\n      const muPas = mu * 1e-3;\n      return (p * 1e6 * psi * psi) \/ (muPas * omega(N));\n    }\n\n    function loadFromEpsilon(eps, d, L, c, mu, N) {\n      const R = d \/ 2;\n      const LD = L \/ d;\n      const muPas = mu * 1e-3;\n      const cM = c * 1e-6;\n      const RM = R * 1e-3;\n      const LM = L * 1e-3;\n      const om = omega(N);\n      const K = (Math.PI ** 3 * eps) \/ (48 * Math.sqrt(1 - eps * eps) * Math.max(LD, 0.25));\n      return K * muPas * om * RM ** 3 * LM \/ (cM * cM);\n    }\n\n    function epsilonFromLoad(W, d, L, c, mu, N) {\n      let lo = 0.05, hi = 0.98;\n      for (let i = 0; i < 60; i++) {\n        const mid = (lo + hi) \/ 2;\n        const wMid = loadFromEpsilon(mid, d, L, c, mu, N);\n        if (wMid > W) lo = mid; else hi = mid;\n      }\n      return (lo + hi) \/ 2;\n    }\n\n    function attitudeAngle(eps) {\n      return (Math.atan((Math.PI \/ 4) * Math.sqrt(1 - eps * eps) \/ eps)) * 180 \/ Math.PI;\n    }\n\n    function maxPressure(p, eps, LD) {\n      const factor = (Math.PI \/ (4 * eps * Math.sqrt(1 - eps * eps))) * Math.sqrt(LD);\n      return p * Math.min(factor, 8);\n    }\n\n    function frictionAndPower(W, d, L, c, mu, N, eps) {\n      const R = d \/ 2;\n      const muPas = mu * 1e-3;\n      const cM = c * 1e-6;\n      const RM = R * 1e-3;\n      const LM = L * 1e-3;\n      const om = omega(N);\n      const T = (muPas * om * RM * RM * LM \/ cM) *\n        ((2 * Math.PI * Math.PI * eps) \/ Math.sqrt(1 - eps * eps));\n      const power = T * om;\n      const muF = power \/ (W * surfaceVelocity(d, N));\n      return { muF, power, torque: T };\n    }\n\n    function pressureDistribution(eps, n) {\n      const pts = [];\n      for (let i = 0; i <= n; i++) {\n        const theta = (i \/ n) * 2 * Math.PI;\n        const phi = Math.atan((Math.PI \/ 4) * Math.sqrt(1 - eps * eps) \/ eps);\n        const rel = theta - phi;\n        let pNorm = 0;\n        if (rel > 0 && rel < Math.PI) {\n          pNorm = (Math.sin(rel) * (1 + eps * Math.cos(rel))) \/\n            ((1 + eps * Math.cos(rel)) ** 2);\n          pNorm = Math.max(0, pNorm);\n        }\n        pts.push({ theta, pNorm });\n      }\n      return pts;\n    }\n\n    function fmt(v, dec) {\n      if (!isFinite(v)) return '\u2014';\n      return v.toFixed(dec);\n    }\n\n    function setStatus(level, text) {\n      const badge = el('jblc-statusBadge');\n      badge.className = 'jblc-status-badge jblc-' + level;\n      el('jblc-statusText').textContent = text;\n    }\n\n    function showAlerts(alerts) {\n      el('jblc-alerts').innerHTML = alerts.map(a =>\n        `<div class=\"jblc-alert jblc-${a.type}\">${a.msg}<\/div>`\n      ).join('');\n    }\n\n    function recalculate() {\n      el('jblc-resultsPanel').classList.add('jblc-visible');\n\n      const { d, L, c, N, mu } = state;\n      let W, eps;\n\n      if (state.mode === 'load') {\n        W = state.W;\n        eps = epsilonFromLoad(W, d, L, c, mu, N);\n      } else {\n        eps = state.eps;\n        W = loadFromEpsilon(eps, d, L, c, mu, N);\n        state.W = W;\n        el('jblc-WSlider').value = Math.min(20000, W);\n        el('jblc-WInput').value = fmt(W, 0);\n      }\n\n      const v = surfaceVelocity(d, N);\n      const psi = clearanceRatio(c, d);\n      const p = avgPressure(W, d, L);\n      const S = sommerfeldNumber(p, psi, mu, N);\n      const hMin = c * (1 - eps);\n      const phi = attitudeAngle(eps);\n      const pMax = maxPressure(p, eps, L \/ d);\n      const { muF, power } = frictionAndPower(W, d, L, c, mu, N, eps);\n\n      el('jblc-resS').textContent = fmt(S, 4);\n      el('jblc-resHmin').textContent = fmt(hMin, 2);\n      el('jblc-resEps').textContent = fmt(eps, 3);\n      el('jblc-resP').textContent = fmt(p, 3);\n      el('jblc-resPmax').textContent = fmt(pMax, 3);\n      el('jblc-resMuF').textContent = fmt(muF * 1000, 2) + '\u00d710\u207b\u00b3';\n      el('jblc-resPower').textContent = fmt(power, 1);\n      el('jblc-resV').textContent = fmt(v, 3);\n      el('jblc-resPsi').textContent = fmt(psi, 5);\n      el('jblc-resPhi').textContent = fmt(phi, 1) + '\u00b0';\n\n      const alerts = [];\n      if (hMin < H_CRIT) {\n        alerts.push({\n          type: 'danger',\n          msg: `\u26a0 h_min = ${fmt(hMin, 2)} \u00b5m < ${H_CRIT} \u00b5m \u2014 boundary lubrication \/ wear risk. Increase speed, viscosity, or reduce load.`\n        });\n      }\n      if (S < S_MIN) {\n        alerts.push({\n          type: 'warning',\n          msg: `Sommerfeld number S = ${fmt(S, 4)} is very low \u2014 heavy loading may exceed hydrodynamic capacity.`\n        });\n      }\n      if (S > S_MAX) {\n        alerts.push({\n          type: 'warning',\n          msg: `Sommerfeld number S = ${fmt(S, 4)} is very high \u2014 verify bearing is not under-loaded or misaligned.`\n        });\n      }\n      if (eps > 0.95) {\n        alerts.push({\n          type: 'danger',\n          msg: `Eccentricity \u03b5 = ${fmt(eps, 3)} approaches limit \u2014 metal-to-metal contact risk.`\n        });\n      }\n\n      showAlerts(alerts);\n\n      if (alerts.some(a => a.type === 'danger')) {\n        setStatus('danger', 'Critical \u2014 Lubrication Failure Risk');\n      } else if (alerts.length) {\n        setStatus('warn', 'Caution \u2014 Review Operating Conditions');\n      } else {\n        setStatus('ok', 'Hydrodynamic \u2014 Safe Operation');\n      }\n\n      drawBearing(d, c, eps, phi, pressureDistribution(eps, 72));\n      updateChart(d, L, c, mu, W, N, state.mode);\n    }\n\n    const canvas = el('jblc-bearingCanvas');\n    const ctx = canvas.getContext('2d');\n\n    function drawBearing(d, c, eps, phiDeg, pressurePts) {\n      const W = canvas.width, H = canvas.height;\n      ctx.clearRect(0, 0, W, H);\n\n      const cx = W * 0.38, cy = H * 0.52;\n      const scale = Math.min(W, H) * 0.28;\n      const R = scale;\n      const cExaggerated = Math.max(c \/ d * R * 8, 6);\n      const offset = eps * cExaggerated;\n      const phiRad = phiDeg * Math.PI \/ 180;\n\n      ctx.beginPath();\n      ctx.arc(cx, cy, R + cExaggerated + 4, 0, 2 * Math.PI);\n      ctx.fillStyle = '#cbd5e1';\n      ctx.fill();\n      ctx.strokeStyle = '#64748b';\n      ctx.lineWidth = 2;\n      ctx.stroke();\n\n      ctx.beginPath();\n      ctx.arc(cx, cy, R + cExaggerated, 0, 2 * Math.PI);\n      ctx.fillStyle = 'rgba(56, 189, 248, 0.12)';\n      ctx.fill();\n\n      const jx = cx + offset * Math.sin(phiRad);\n      const jy = cy + offset * Math.cos(phiRad);\n      ctx.beginPath();\n      ctx.arc(jx, jy, R, 0, 2 * Math.PI);\n      ctx.fillStyle = '#94a3b8';\n      ctx.fill();\n      ctx.strokeStyle = '#475569';\n      ctx.lineWidth = 1.5;\n      ctx.stroke();\n\n      const hMinAngle = phiRad + Math.PI;\n      const hx = cx + (R + cExaggerated * (1 - eps)) * Math.sin(hMinAngle);\n      const hy = cy + (R + cExaggerated * (1 - eps)) * Math.cos(hMinAngle);\n      ctx.beginPath();\n      ctx.moveTo(jx + R * Math.sin(hMinAngle), jy + R * Math.cos(hMinAngle));\n      ctx.lineTo(hx, hy);\n      ctx.strokeStyle = '#ef4444';\n      ctx.lineWidth = 2;\n      ctx.setLineDash([4, 3]);\n      ctx.stroke();\n      ctx.setLineDash([]);\n\n      ctx.beginPath();\n      ctx.moveTo(cx, cy - R - cExaggerated - 30);\n      ctx.lineTo(cx, cy - R - cExaggerated - 8);\n      ctx.strokeStyle = '#f59e0b';\n      ctx.lineWidth = 2;\n      ctx.stroke();\n      ctx.beginPath();\n      ctx.moveTo(cx - 6, cy - R - cExaggerated - 14);\n      ctx.lineTo(cx, cy - R - cExaggerated - 6);\n      ctx.lineTo(cx + 6, cy - R - cExaggerated - 14);\n      ctx.fillStyle = '#f59e0b';\n      ctx.fill();\n\n      ctx.beginPath();\n      ctx.arc(jx, jy, R * 0.35, -Math.PI \/ 2, -Math.PI \/ 2 + phiRad);\n      ctx.strokeStyle = '#38bdf8';\n      ctx.lineWidth = 1.5;\n      ctx.stroke();\n\n      ctx.fillStyle = '#475569';\n      ctx.font = '11px sans-serif';\n      ctx.fillText('W \u2193', cx + 8, cy - R - cExaggerated - 32);\n      ctx.fillText(`\u03b5 = ${eps.toFixed(3)}`, cx + R + cExaggerated + 8, cy - 10);\n      ctx.fillText(`\u03c6 = ${phiDeg.toFixed(1)}\u00b0`, jx + R * 0.4, jy - R * 0.5);\n      ctx.fillText(`h_min`, hx + 6, hy);\n\n      drawPressureCurve(W * 0.62, cy, pressurePts, R);\n    }\n\n    function drawPressureCurve(originX, originY, pts, R) {\n      const maxP = Math.max(...pts.map(p => p.pNorm), 0.001);\n      const plotW = canvas.width * 0.32;\n      const plotH = R * 1.6;\n\n      ctx.fillStyle = '#475569';\n      ctx.font = '11px sans-serif';\n      ctx.fillText('Pressure Distribution', originX, originY - plotH \/ 2 - 14);\n\n      ctx.strokeStyle = '#94a3b8';\n      ctx.lineWidth = 1;\n      ctx.strokeRect(originX, originY - plotH \/ 2, plotW, plotH);\n\n      ctx.beginPath();\n      pts.forEach((pt, i) => {\n        const x = originX + (pt.theta \/ (2 * Math.PI)) * plotW;\n        const y = originY + plotH \/ 2 - (pt.pNorm \/ maxP) * (plotH * 0.85);\n        if (i === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y);\n      });\n      ctx.strokeStyle = '#38bdf8';\n      ctx.lineWidth = 2;\n      ctx.stroke();\n\n      ctx.fillStyle = 'rgba(56, 189, 248, 0.15)';\n      ctx.lineTo(originX + plotW, originY + plotH \/ 2);\n      ctx.lineTo(originX, originY + plotH \/ 2);\n      ctx.closePath();\n      ctx.fill();\n\n      ctx.fillStyle = '#64748b';\n      ctx.font = '10px sans-serif';\n      ctx.fillText('0', originX - 4, originY + plotH \/ 2 + 12);\n      ctx.fillText('2\u03c0', originX + plotW - 10, originY + plotH \/ 2 + 12);\n      ctx.fillText('p(\u03b8)', originX + plotW \/ 2 - 10, originY - plotH \/ 2 - 4);\n    }\n\n    let rpmChartInstance = null;\n\n    function updateChart(d, L, c, mu, W, currentN, mode) {\n      const rpms = [];\n      const hMins = [];\n      for (let n = 500; n <= 10000; n += 250) {\n        rpms.push(n);\n        let eps;\n        if (mode === 'load') {\n          eps = epsilonFromLoad(W, d, L, c, mu, n);\n        } else {\n          eps = state.eps;\n        }\n        hMins.push(c * (1 - eps));\n      }\n\n      const hCritLine = rpms.map(() => H_CRIT);\n\n      const chartData = {\n        labels: rpms,\n        datasets: [\n          {\n            label: 'h_min (\u00b5m)',\n            data: hMins,\n            borderColor: '#38bdf8',\n            backgroundColor: 'rgba(56, 189, 248, 0.1)',\n            fill: true,\n            tension: 0.3,\n            pointRadius: 0,\n            borderWidth: 2\n          },\n          {\n            label: `Critical limit (${H_CRIT} \u00b5m)`,\n            data: hCritLine,\n            borderColor: '#ef4444',\n            borderDash: [6, 4],\n            pointRadius: 0,\n            borderWidth: 1.5,\n            fill: false\n          }\n        ]\n      };\n\n      const options = {\n        responsive: true,\n        maintainAspectRatio: false,\n        interaction: { mode: 'index', intersect: false },\n        plugins: {\n          legend: {\n            labels: { color: '#475569', boxWidth: 12, font: { size: 11 } }\n          },\n          tooltip: {\n            callbacks: {\n              title: items => `N = ${items[0].label} RPM`,\n              label: item => `${item.dataset.label}: ${item.raw.toFixed(2)} \u00b5m`\n            }\n          }\n        },\n        scales: {\n          x: {\n            title: { display: true, text: 'Rotational Speed (RPM)', color: '#475569' },\n            ticks: { color: '#64748b', maxTicksLimit: 8 },\n            grid: { color: 'rgba(203, 213, 225, 0.8)' }\n          },\n          y: {\n            title: { display: true, text: 'h_min (\u00b5m)', color: '#475569' },\n            ticks: { color: '#64748b' },\n            grid: { color: 'rgba(203, 213, 225, 0.8)' },\n            min: 0\n          }\n        }\n      };\n\n      if (rpmChartInstance) {\n        rpmChartInstance.data = chartData;\n        rpmChartInstance.options = options;\n        rpmChartInstance.update();\n      } else {\n        rpmChartInstance = new Chart(el('jblc-rpmChart'), {\n          type: 'line',\n          data: chartData,\n          options\n        });\n      }\n\n      const idx = rpms.findIndex(r => r >= currentN);\n      if (idx >= 0 && rpmChartInstance) {\n        rpmChartInstance.setActiveElements([{ datasetIndex: 0, index: idx }]);\n        rpmChartInstance.tooltip.setActiveElements([{ datasetIndex: 0, index: idx }]);\n        rpmChartInstance.update();\n      }\n    }\n\n    el('jblc-calcBtn').addEventListener('click', recalculate);\n  })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Journal Bearing Load Capacity Calculator is a practical engineering tool designed to estimate the load-carrying capacity of journal bearings based on key operating parameters&#8230;.<\/p>","protected":false},"author":2,"featured_media":24650,"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":[8567,2904,8580,8531],"class_list":["post-24649","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bearing-calculator","tag-bearing-design","tag-journal-bearing","tag-load-capacity","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Journal-Bearing-Load-Capacity-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24649","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=24649"}],"version-history":[{"count":2,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24649\/revisions"}],"predecessor-version":[{"id":24652,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24649\/revisions\/24652"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24650"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24649"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}