{"id":1238,"date":"2026-02-10T13:17:31","date_gmt":"2026-02-10T13:17:31","guid":{"rendered":"https:\/\/boshiya.com\/?page_id=1238"},"modified":"2026-02-10T13:40:53","modified_gmt":"2026-02-10T13:40:53","slug":"heat-exchanger-bundle-weight-calculator","status":"publish","type":"page","link":"https:\/\/boshiya.com\/pt\/bundle-puller\/heat-exchanger-bundle-weight-calculator\/","title":{"rendered":"Calculadora de peso do pacote do trocador de calor"},"content":{"rendered":"\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-2377f36\" data-block-id=\"2377f36\"><style>.stk-2377f36 {margin-bottom:0px !important;}.stk-2377f36-column{--stk-columns-spacing:30px !important;}<\/style><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-2377f36-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-811012d\" data-v=\"4\" data-block-id=\"811012d\"><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-811012d-container stk--no-background stk--no-padding\"><div class=\"has-text-align-center stk-block-content stk-inner-blocks stk-811012d-inner-blocks\"><div class=\"ct-breadcrumbs\" data-source=\"rankmath\" ><nav aria-label=\"breadcrumbs\" class=\"rank-math-breadcrumb\"><p><span class=\"last\">Home<\/span><\/p><\/nav><\/div><\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-stackable-columns alignfull stk-block-columns stk-block stk-00aa465\" data-block-id=\"00aa465\"><div class=\"stk-row stk-inner-blocks stk-block-content stk-content-align stk-00aa465-column alignfull\">\n<div class=\"wp-block-stackable-column stk-block-column stk-column stk-block stk-f5daccc\" data-v=\"4\" data-block-id=\"f5daccc\"><div class=\"stk-column-wrapper stk-block-column__content stk-container stk-f5daccc-container stk--no-background stk--no-padding\"><div class=\"stk-block-content stk-inner-blocks stk-f5daccc-inner-blocks\">\n<section id=\"bsy-weight-calc\">\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap');\n\n#bsy-weight-calc{--wc-bg:#000018;--wc-surface:#0a0f2e;--wc-border:#1a2248;--wc-amber:#d4a24e;--wc-amber-dim:rgba(212,162,78,.12);--wc-amber-glow:rgba(212,162,78,.25);--wc-text:#e8e6e1;--wc-muted:#7a7e8f;--wc-white:#fff;--wc-green:#34d399;--wc-red:#f87171;--wc-radius:8px;font-family:'IBM Plex Sans',system-ui,sans-serif !important;background:var(--wc-bg) !important;color:var(--wc-text) !important;padding:40px 20px !important;margin:0 !important;width:100% !important;box-sizing:border-box !important;line-height:1.6 !important}\n#bsy-weight-calc *,#bsy-weight-calc *::before,#bsy-weight-calc *::after{box-sizing:border-box !important;margin:0;padding:0}\n#bsy-weight-calc h1,#bsy-weight-calc h2,#bsy-weight-calc h3,#bsy-weight-calc h4{margin:0 !important;padding:0 !important;border:none !important;background:none !important;font-family:'IBM Plex Sans',system-ui,sans-serif !important;letter-spacing:normal !important;text-transform:none !important;-webkit-text-fill-color:unset !important}\n#bsy-weight-calc h1.wc-title{font-size:32px !important;font-weight:700 !important;color:var(--wc-white) !important;line-height:1.2 !important;margin-bottom:10px !important}\n#bsy-weight-calc h2.wc-panel-label{font-family:'IBM Plex Mono',monospace !important;font-size:11px !important;letter-spacing:1.5px;text-transform:uppercase;color:var(--wc-amber) !important;margin-bottom:20px !important}\n#bsy-weight-calc h4.wc-result-label{font-family:'IBM Plex Mono',monospace !important;font-size:12px !important;color:var(--wc-amber) !important;text-transform:uppercase;letter-spacing:1.5px;margin-top:8px !important}\n#bsy-weight-calc h4.wc-rec-title{font-size:12px !important;color:var(--wc-green) !important;text-transform:uppercase;letter-spacing:1px;font-weight:600;margin-bottom:6px !important;font-family:'IBM Plex Mono',monospace !important}\n#bsy-weight-calc h3.wc-section-head{font-size:14px !important;font-weight:600 !important;color:var(--wc-amber) !important;margin-bottom:12px !important;margin-top:18px !important;padding-top:14px !important;border-top:1px solid var(--wc-border) !important}\n\n#bsy-weight-calc .wc-wrap{max-width:960px;margin:0 auto}\n#bsy-weight-calc .wc-header{text-align:center;margin-bottom:36px}\n#bsy-weight-calc .wc-badge{display:inline-block;font-family:'IBM Plex Mono',monospace !important;font-size:11px !important;letter-spacing:2px;text-transform:uppercase;color:var(--wc-amber) !important;background:var(--wc-amber-dim);border:1px solid rgba(212,162,78,.2);padding:5px 14px;border-radius:20px;margin-bottom:16px}\n#bsy-weight-calc .wc-subtitle{font-size:15px !important;color:var(--wc-muted) !important;max-width:620px;margin:0 auto}\n#bsy-weight-calc .wc-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}\n#bsy-weight-calc .wc-panel{background:var(--wc-surface);border:1px solid var(--wc-border);border-radius:var(--wc-radius);padding:28px 24px;position:relative;overflow:hidden}\n#bsy-weight-calc .wc-panel::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--wc-amber),transparent);opacity:.3}\n#bsy-weight-calc .wc-field{margin-bottom:14px}\n#bsy-weight-calc .wc-field-label{display:block;font-size:13px !important;font-weight:500 !important;color:var(--wc-text) !important;margin-bottom:5px}\n#bsy-weight-calc .wc-field-hint{font-size:11px !important;color:var(--wc-muted) !important;margin-top:2px}\n#bsy-weight-calc .wc-input{width:100%;height:44px;background:rgba(255,255,255,.04);border:1.5px solid var(--wc-border);border-radius:6px;padding:0 14px;font-family:'IBM Plex Mono',monospace !important;font-size:15px !important;color:var(--wc-white) !important;outline:none;transition:border-color .2s}\n#bsy-weight-calc .wc-input:focus{border-color:var(--wc-amber)}\n#bsy-weight-calc .wc-input::placeholder{color:rgba(122,126,143,.6)}\n#bsy-weight-calc .wc-select{width:100%;height:44px;background:rgba(255,255,255,.04);border:1.5px solid var(--wc-border);border-radius:6px;padding:0 12px;font-family:'IBM Plex Sans',system-ui,sans-serif !important;font-size:14px !important;color:var(--wc-white) !important;outline:none;cursor:pointer;-webkit-appearance:none;appearance:none;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%237a7e8f' fill='none' stroke-width='1.5'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 14px center}\n#bsy-weight-calc .wc-select:focus{border-color:var(--wc-amber)}\n#bsy-weight-calc .wc-select option{background:#0a0f2e;color:#fff;padding:8px}\n#bsy-weight-calc .wc-row-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n#bsy-weight-calc .wc-btn{width:100%;height:48px;background:var(--wc-amber) !important;color:var(--wc-bg) !important;border:none;border-radius:6px;font-family:'IBM Plex Sans',system-ui,sans-serif !important;font-size:15px !important;font-weight:600 !important;cursor:pointer;transition:all .2s;margin-top:10px}\n#bsy-weight-calc .wc-btn:hover{box-shadow:0 4px 20px var(--wc-amber-glow)}\n\n#bsy-weight-calc .wc-result-empty{display:flex;align-items:center;justify-content:center;min-height:420px;text-align:center;color:var(--wc-muted);font-size:14px}\n#bsy-weight-calc .wc-gauge{text-align:center;margin-bottom:20px}\n#bsy-weight-calc .wc-gauge-num{font-family:'IBM Plex Mono',monospace !important;font-size:52px !important;font-weight:700 !important;line-height:1 !important;margin-bottom:4px}\n#bsy-weight-calc .wc-gauge-unit{font-size:14px !important;color:var(--wc-muted) !important;font-family:'IBM Plex Mono',monospace !important}\n#bsy-weight-calc .wc-breakdown{border-top:1px solid var(--wc-border);padding-top:14px;margin-top:14px}\n#bsy-weight-calc .wc-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;font-size:14px !important}\n#bsy-weight-calc .wc-row-label{color:var(--wc-muted)}\n#bsy-weight-calc .wc-row-val{font-family:'IBM Plex Mono',monospace !important;color:var(--wc-white);font-weight:500}\n#bsy-weight-calc .wc-row.total{border-top:1px solid var(--wc-border);margin-top:6px;padding-top:10px}\n#bsy-weight-calc .wc-row.total .wc-row-val{color:var(--wc-amber);font-size:16px !important;font-weight:700}\n#bsy-weight-calc .wc-rec-box{background:rgba(52,211,153,.06);border:1px solid rgba(52,211,153,.2);border-radius:6px;padding:14px 16px;margin-top:14px}\n#bsy-weight-calc .wc-rec-box p{font-size:14px !important;color:var(--wc-text) !important;line-height:1.5 !important;margin:0 !important}\n#bsy-weight-calc .wc-note-box{border-left:3px solid var(--wc-amber);background:var(--wc-amber-dim);padding:12px 16px;border-radius:0 6px 6px 0;margin-top:14px;font-size:12px !important;color:var(--wc-text) !important;line-height:1.5 !important}\n\n#bsy-weight-calc .wc-bar-stack{margin:16px 0 8px}\n#bsy-weight-calc .wc-bar-track{display:flex;height:20px;border-radius:4px;overflow:hidden;background:rgba(255,255,255,.04)}\n#bsy-weight-calc .wc-bar-seg{height:100%;transition:width .6s ease;display:flex;align-items:center;justify-content:center;font-family:'IBM Plex Mono',monospace !important;font-size:10px !important;color:var(--wc-bg);font-weight:600;min-width:0;overflow:hidden;white-space:nowrap}\n#bsy-weight-calc .wc-legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px}\n#bsy-weight-calc .wc-legend-item{display:flex;align-items:center;gap:5px;font-size:11px !important;color:var(--wc-muted)}\n#bsy-weight-calc .wc-legend-dot{width:8px;height:8px;border-radius:2px;flex-shrink:0}\n\n#bsy-weight-calc .wc-result-anim{animation:wcReveal .5s ease}\n@keyframes wcReveal{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}\n\n@media(max-width:700px){\n#bsy-weight-calc .wc-grid{grid-template-columns:1fr}\n#bsy-weight-calc h1.wc-title{font-size:26px !important}\n#bsy-weight-calc .wc-panel{padding:24px 18px}\n#bsy-weight-calc .wc-row-pair{grid-template-columns:1fr}\n}\n<\/style>\n\n<div class=\"wc-wrap\">\n  <div class=\"wc-header\">\n    <div class=\"wc-badge\">Engineering Calculator<\/div>\n    <h1 class=\"wc-title\">Heat Exchanger Bundle Weight Calculator<\/h1>\n    <div class=\"wc-subtitle\">Estimate the dry weight of a shell-and-tube bundle from design parameters. Based on TEMA-standard geometry and real material densities.<\/div>\n  <\/div>\n\n  <div class=\"wc-grid\">\n    <!-- INPUT PANEL -->\n    <div class=\"wc-panel\">\n      <h2 class=\"wc-panel-label\">Bundle Parameters<\/h2>\n\n      <div class=\"wc-row-pair\">\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Number of Tubes<\/label>\n          <input type=\"number\" class=\"wc-input\" id=\"wcTubes\" placeholder=\"e.g. 500\">\n        <\/div>\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Tube Length (mm)<\/label>\n          <input type=\"number\" class=\"wc-input\" id=\"wcLength\" placeholder=\"e.g. 6000\">\n        <\/div>\n      <\/div>\n\n      <div class=\"wc-row-pair\">\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Tube OD<\/label>\n          <select class=\"wc-select\" id=\"wcOD\">\n            <option value=\"15.88\">\u215d\u2033 \u2014 15.88 mm<\/option>\n            <option value=\"19.05\" selected>\u00be\u2033 \u2014 19.05 mm<\/option>\n            <option value=\"25.40\">1\u2033 \u2014 25.40 mm<\/option>\n            <option value=\"31.75\">1\u00bc\u2033 \u2014 31.75 mm<\/option>\n            <option value=\"38.10\">1\u00bd\u2033 \u2014 38.10 mm<\/option>\n            <option value=\"50.80\">2\u2033 \u2014 50.80 mm<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Tube Wall (BWG)<\/label>\n          <select class=\"wc-select\" id=\"wcBWG\">\n            <option value=\"1.24\">BWG 18 \u2014 1.24 mm<\/option>\n            <option value=\"1.65\">BWG 16 \u2014 1.65 mm<\/option>\n            <option value=\"2.11\" selected>BWG 14 \u2014 2.11 mm<\/option>\n            <option value=\"2.77\">BWG 12 \u2014 2.77 mm<\/option>\n            <option value=\"3.40\">BWG 10 \u2014 3.40 mm<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <div class=\"wc-field\">\n        <label class=\"wc-field-label\">Tube Material<\/label>\n        <select class=\"wc-select\" id=\"wcTubeMat\">\n          <option value=\"7850\" selected>Carbon Steel (SA-179 \/ SA-214)<\/option>\n          <option value=\"8000\">Stainless Steel 304 \/ 304L<\/option>\n          <option value=\"8000\">Stainless Steel 316 \/ 316L<\/option>\n          <option value=\"8940\">Copper (C12200)<\/option>\n          <option value=\"8900\">CuNi 90\/10 (C70600)<\/option>\n          <option value=\"8525\">Admiralty Brass (C44300)<\/option>\n          <option value=\"4510\">Titanium Gr.2<\/option>\n          <option value=\"8890\">Monel 400<\/option>\n          <option value=\"8220\">Inconel 625<\/option>\n        <\/select>\n      <\/div>\n\n      <h3 class=\"wc-section-head\">Tubesheet &amp; Baffles<\/h3>\n\n      <div class=\"wc-row-pair\">\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Bundle OD (mm)<\/label>\n          <input type=\"number\" class=\"wc-input\" id=\"wcBundleDia\" placeholder=\"e.g. 1500\">\n          <div class=\"wc-field-hint\">Outer envelope of the tube array<\/div>\n        <\/div>\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Tubesheet Thk (mm)<\/label>\n          <input type=\"number\" class=\"wc-input\" id=\"wcTSThk\" placeholder=\"e.g. 75\">\n          <div class=\"wc-field-hint\">Per TEMA, typically 50\u2013150 mm<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"wc-row-pair\">\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Number of Baffles<\/label>\n          <input type=\"number\" class=\"wc-input\" id=\"wcBaffles\" placeholder=\"e.g. 12\">\n        <\/div>\n        <div class=\"wc-field\">\n          <label class=\"wc-field-label\">Baffle Thk (mm)<\/label>\n          <select class=\"wc-select\" id=\"wcBaffleThk\">\n            <option value=\"3.18\">\u215b\u2033 \u2014 3.18 mm<\/option>\n            <option value=\"4.76\" selected>3\/16\u2033 \u2014 4.76 mm<\/option>\n            <option value=\"6.35\">\u00bc\u2033 \u2014 6.35 mm<\/option>\n            <option value=\"9.53\">\u215c\u2033 \u2014 9.53 mm<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <div class=\"wc-field\">\n        <label class=\"wc-field-label\">Tubesheet &amp; Baffle Material<\/label>\n        <select class=\"wc-select\" id=\"wcPlateMat\">\n          <option value=\"7850\" selected>Carbon Steel<\/option>\n          <option value=\"8000\">Stainless Steel 304\/316<\/option>\n          <option value=\"4510\">Titanium<\/option>\n        <\/select>\n      <\/div>\n\n      <button class=\"wc-btn\" id=\"wcCalcBtn\" type=\"button\">Calculate Bundle Weight \u2192<\/button>\n    <\/div>\n\n    <!-- RESULT PANEL -->\n    <div class=\"wc-panel\" id=\"wcResultPanel\">\n      <h2 class=\"wc-panel-label\">Weight Breakdown<\/h2>\n      <div class=\"wc-result-empty\" id=\"wcEmpty\">\n        Enter your exchanger parameters<br>then click &#8220;Calculate&#8221;\n      <\/div>\n      <div id=\"wcOutput\" style=\"display:none\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n\n  document.getElementById('wcCalcBtn').addEventListener('click', function(e){\n    e.preventDefault();\n    calculate();\n  });\n\n  function calculate(){\n    var nTubes   = parseFloat(document.getElementById('wcTubes').value);\n    var tubeLen  = parseFloat(document.getElementById('wcLength').value);\n    var od       = parseFloat(document.getElementById('wcOD').value);\n    var wall     = parseFloat(document.getElementById('wcBWG').value);\n    var tubeDen  = parseFloat(document.getElementById('wcTubeMat').value);\n    var bundleDia= parseFloat(document.getElementById('wcBundleDia').value);\n    var tsThk    = parseFloat(document.getElementById('wcTSThk').value);\n    var nBaffles = parseFloat(document.getElementById('wcBaffles').value);\n    var bafThk   = parseFloat(document.getElementById('wcBaffleThk').value);\n    var plateDen = parseFloat(document.getElementById('wcPlateMat').value);\n\n    if(!nTubes||nTubes<=0||!tubeLen||tubeLen<=0){\n      alert('Please enter at least the number of tubes and tube length.');\n      return;\n    }\n\n    \/\/ defaults for optional fields\n    if(!bundleDia||bundleDia<=0) bundleDia = estimateBundleDia(nTubes, od);\n    if(!tsThk||tsThk<=0) tsThk = 75;\n    if(!nBaffles||nBaffles<0) nBaffles = Math.max(1,Math.round(tubeLen\/400));\n    if(!bafThk||bafThk<=0) bafThk = 4.76;\n\n    \/\/ convert mm to meters for calculation\n    var odM       = od \/ 1000;\n    var idM       = (od - 2*wall) \/ 1000;\n    var tubeLenM  = tubeLen \/ 1000;\n    var bundleDiaM= bundleDia \/ 1000;\n    var tsThkM    = tsThk \/ 1000;\n    var bafThkM   = bafThk \/ 1000;\n\n    \/\/ 1) Tubes weight\n    var tubeVol = nTubes * Math.PI \/ 4 * (odM*odM - idM*idM) * tubeLenM;\n    var tubeWt  = tubeVol * tubeDen;\n\n    \/\/ 2) Tubesheets (2 pcs, full circle)\n    var tsArea = Math.PI \/ 4 * bundleDiaM * bundleDiaM;\n    \/\/ subtract tube holes from tubesheet\n    var holeArea = nTubes * Math.PI \/ 4 * odM * odM;\n    var netTSArea = Math.max(tsArea - holeArea, tsArea * 0.4);\n    var tsWt = 2 * netTSArea * tsThkM * plateDen;\n\n    \/\/ 3) Baffles (single segmental, ~25% cut)\n    var baffleCutFactor = 0.75; \/\/ 25% cut means 75% of full disc\n    var bafArea = tsArea * baffleCutFactor;\n    \/\/ subtract tube holes from baffles\n    var netBafArea = Math.max(bafArea - holeArea * baffleCutFactor, bafArea * 0.35);\n    var baffleWt = nBaffles * netBafArea * bafThkM * plateDen;\n\n    \/\/ 4) Tie rods &#038; spacers (TEMA: typically 4-8 rods of 12.7mm diameter)\n    var nRods = bundleDia > 1000 ? 8 : (bundleDia > 500 ? 6 : 4);\n    var rodDia = 0.0127; \/\/ 12.7 mm = 1\/2\"\n    var rodVol = nRods * Math.PI \/ 4 * rodDia * rodDia * tubeLenM;\n    var rodWt = rodVol * plateDen;\n    \/\/ spacers: small tubes around each tie rod between baffles\n    var spacerWt = rodWt * 0.3;\n    var tierodTotal = rodWt + spacerWt;\n\n    \/\/ 5) Misc hardware (pass partition plates, impingement plates, etc.) ~ 5%\n    var miscWt = (tubeWt + tsWt + baffleWt + tierodTotal) * 0.05;\n\n    var totalDry = tubeWt + tsWt + baffleWt + tierodTotal + miscWt;\n\n    \/\/ water-filled weight (tubes + shell-side volume approximation)\n    var waterDen = 1000;\n    var tubeInternalVol = nTubes * Math.PI \/ 4 * idM * idM * tubeLenM;\n    var waterWt = tubeInternalVol * waterDen;\n    var totalWet = totalDry + waterWt;\n\n    \/\/ round display values\n    var d = {\n      tubes:    Math.round(tubeWt),\n      sheets:   Math.round(tsWt),\n      baffles:  Math.round(baffleWt),\n      tierods:  Math.round(tierodTotal),\n      misc:     Math.round(miscWt),\n      totalDry: Math.round(totalDry),\n      water:    Math.round(waterWt),\n      totalWet: Math.round(totalWet)\n    };\n\n    \/\/ find matching BSY model\n    var models = [\n      {name:'BSY-25',max:25000},{name:'BSY-45',max:45000},{name:'BSY-60',max:60000},\n      {name:'BSY-80',max:80000},{name:'BSY-100',max:100000},{name:'BSY-125',max:125000},{name:'BSY-150',max:150000}\n    ];\n    var rec = null;\n    for(var i=0;i<models.length;i++){if(models[i].max>=d.totalDry){rec=models[i];break;}}\n\n    \/\/ bar chart percentages\n    var parts = [\n      {label:'Tubes',    val:d.tubes,   color:'var(--wc-amber)'},\n      {label:'Tubesheets', val:d.sheets, color:'var(--wc-green)'},\n      {label:'Baffles',  val:d.baffles, color:'#6366f1'},\n      {label:'Tie Rods',  val:d.tierods, color:'#f97316'},\n      {label:'Misc',     val:d.misc,    color:'var(--wc-muted)'}\n    ];\n\n    \/\/ color for gauge\n    var gc = d.totalDry<=25000?'var(--wc-green)':d.totalDry<=80000?'var(--wc-amber)':'var(--wc-red)';\n\n    document.getElementById('wcEmpty').style.display='none';\n    var out = document.getElementById('wcOutput');\n    out.style.display='block';\n\n    var html = '<div class=\"wc-result-anim\">';\n    html += '<div class=\"wc-gauge\">';\n    html += '<div class=\"wc-gauge-num\" style=\"color:'+gc+'\">'+d.totalDry.toLocaleString()+'<\/div>';\n    html += '<div class=\"wc-gauge-unit\">kg (estimated dry weight)<\/div>';\n    html += '<h4 class=\"wc-result-label\">Bundle Weight<\/h4>';\n    html += '<\/div>';\n\n    \/\/ stacked bar\n    html += '<div class=\"wc-bar-stack\"><div class=\"wc-bar-track\">';\n    for(var j=0;j<parts.length;j++){\n      var pct = (parts[j].val\/d.totalDry*100);\n      if(pct<1) pct=1;\n      html += '<div class=\"wc-bar-seg\" style=\"width:'+pct.toFixed(1)+'%;background:'+parts[j].color+'\">'+(pct>8?Math.round(pct)+'%':'')+'<\/div>';\n    }\n    html += '<\/div>';\n    html += '<div class=\"wc-legend\">';\n    for(var j=0;j<parts.length;j++){\n      html += '<div class=\"wc-legend-item\"><div class=\"wc-legend-dot\" style=\"background:'+parts[j].color+'\"><\/div>'+parts[j].label+' '+parts[j].val.toLocaleString()+' kg<\/div>';\n    }\n    html += '<\/div><\/div>';\n\n    \/\/ breakdown rows\n    html += '<div class=\"wc-breakdown\">';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Tubes ('+nTubes+' \u00d7 '+od+' mm OD \u00d7 '+wall+' mm wall)<\/span><span class=\"wc-row-val\">'+d.tubes.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Tubesheets (2 \u00d7 '+tsThk+' mm thk)<\/span><span class=\"wc-row-val\">'+d.sheets.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Baffles ('+nBaffles+' \u00d7 '+bafThk+' mm, 25% cut)<\/span><span class=\"wc-row-val\">'+d.baffles.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Tie Rods &amp; Spacers ('+nRods+' rods)<\/span><span class=\"wc-row-val\">'+d.tierods.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Misc Hardware (~5%)<\/span><span class=\"wc-row-val\">'+d.misc.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row total\"><span class=\"wc-row-label\">Total Dry Weight<\/span><span class=\"wc-row-val\">'+d.totalDry.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row\"><span class=\"wc-row-label\">Water Fill (tubes only)<\/span><span class=\"wc-row-val\">+ '+d.water.toLocaleString()+' kg<\/span><\/div>';\n    html += '<div class=\"wc-row total\"><span class=\"wc-row-label\">Estimated Wet Weight<\/span><span class=\"wc-row-val\">'+d.totalWet.toLocaleString()+' kg<\/span><\/div>';\n    html += '<\/div>';\n\n    \/\/ recommendation\n    if(rec){\n      html += '<div class=\"wc-rec-box\">';\n      html += '<h4 class=\"wc-rec-title\">\u2713 Matching BOSHIYA Puller<\/h4>';\n      html += '<p>At '+d.totalDry.toLocaleString()+' kg dry weight, the <strong>'+rec.name+'<\/strong> (rated for '+rec.max.toLocaleString()+' kg) covers this bundle. Factor in fouling and seized conditions \u2014 actual pull force can be 1.5\u20132.5\u00d7 the dry weight.<\/p>';\n      html += '<\/div>';\n    } else {\n      html += '<div class=\"wc-rec-box\">';\n      html += '<h4 class=\"wc-rec-title\">\u2713 Custom Build Recommended<\/h4>';\n      html += '<p>At '+d.totalDry.toLocaleString()+' kg, this exceeds our standard 150-ton range. Contact BOSHIYA engineering for a custom-configured puller.<\/p>';\n      html += '<\/div>';\n    }\n\n    html += '<div class=\"wc-note-box\">This is an engineering estimate based on nominal dimensions and standard TEMA geometry. Actual weight depends on exact tube count after drilling, pass partition plates, floating head assembly (if applicable), and corrosion allowances. Always confirm with the exchanger datasheet or weigh the bundle before selecting a puller.<\/div>';\n\n    html += '<a href=\"javascript:void(0)\" class=\"wc-quote-trigger\" style=\"display:inline-block;background:var(--wc-amber);color:var(--wc-bg);font-family:\\'IBM Plex Sans\\',system-ui,sans-serif;font-size:14px;font-weight:600;padding:11px 28px;border-radius:6px;text-decoration:none;margin-top:16px;transition:all .2s;cursor:pointer\" target=\"_blank\">Get a Quote \u2192<\/a>';\n    html += '<\/div>';\n\n    out.innerHTML = html;\n\n    \/\/ Bind Blocksy popup trigger\n    var quoteBtn = out.querySelector('.wc-quote-trigger');\n    if(quoteBtn){\n      quoteBtn.addEventListener('click', function(e){\n        e.preventDefault();\n        var popupEl = document.querySelector('#ct-popup-697');\n        if(popupEl && typeof blocksyOpenMicroPopup === 'function'){\n          blocksyOpenMicroPopup(popupEl);\n        }\n      });\n    }\n  }\n\n  \/\/ estimate bundle OD from tube count and OD (rough square-pitch approximation)\n  function estimateBundleDia(nTubes, tubeOD){\n    var pitch = tubeOD * 1.25; \/\/ TEMA minimum pitch ratio\n    var area = nTubes * pitch * pitch; \/\/ mm^2 per tube on pitch grid\n    var dia = Math.sqrt(area \/ 0.785) * 1.1; \/\/ circle packing ~78.5%, +10% clearance\n    return Math.round(dia);\n  }\n\n})();\n<\/script>\n<\/section>\n<\/div><\/div><\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Engineering Calculator Heat Exchanger Bundle Weight Calculator Estimate the dry weight of a shell-and-tube bundle from design parameters. Based on TEMA-standard geometry and real material densities. Bundle Parameters Number of Tubes Tube Length (mm) Tube OD \u215d\u2033 \u2014 15.88 mm\u00be\u2033 \u2014 19.05 mm1\u2033 \u2014 25.40 mm1\u00bc\u2033 \u2014 31.75 mm1\u00bd\u2033 \u2014 38.10 mm2\u2033 \u2014 50.80 mm [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1107,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_gspb_post_css":"","footnotes":""},"class_list":["post-1238","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/pages\/1238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/comments?post=1238"}],"version-history":[{"count":0,"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/pages\/1238\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/pages\/1107"}],"wp:attachment":[{"href":"https:\/\/boshiya.com\/pt\/wp-json\/wp\/v2\/media?parent=1238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}