<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Range Archives - Chemical Engineering Site</title>
	<atom:link href="https://chemicalengineeringsite.in/tag/range/feed/" rel="self" type="application/rss+xml" />
	<link>https://chemicalengineeringsite.in/tag/range/</link>
	<description>For Chemical Engineers</description>
	<lastBuildDate>Sun, 24 Aug 2025 14:00:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Cooling Tower Calculator</title>
		<link>https://chemicalengineeringsite.in/cooling-tower-calculator/</link>
					<comments>https://chemicalengineeringsite.in/cooling-tower-calculator/#respond</comments>
		
		<dc:creator><![CDATA[chemicalengineeringsite]]></dc:creator>
		<pubDate>Wed, 27 Aug 2025 12:00:00 +0000</pubDate>
				<category><![CDATA[Calculators]]></category>
		<category><![CDATA[Approach]]></category>
		<category><![CDATA[COC]]></category>
		<category><![CDATA[Colling tower losses]]></category>
		<category><![CDATA[Cooling Tower]]></category>
		<category><![CDATA[Cooling tower blowdown]]></category>
		<category><![CDATA[Range]]></category>
		<guid isPermaLink="false">https://chemicalengineeringsite.in/?p=3870</guid>

					<description><![CDATA[<p>Cooling Tower Calculations Enter operating data; results &#038; water balance update instantly. Export an Excel file with live formulas. Hot Water Temperature (°C) Cold Water Temperature (°C) Wet Bulb Temperature (°C) Circulating Water Flow (m³/h) Silica in Makeup (mg/L) Silica in Circulating (mg/L) Ca Hardness in Makeup (mg/L as CaCO₃) Ca Hardness in Circulating (mg/L [&#8230;]</p>
<p>The post <a href="https://chemicalengineeringsite.in/cooling-tower-calculator/">Cooling Tower Calculator</a> appeared first on <a href="https://chemicalengineeringsite.in">Chemical Engineering Site</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<!-- Cooling Tower Calculator — chemicalengineeringsite.in -->
<div id="ctc" class="ctc-card" role="region" aria-label="Cooling Tower Calculations">
  <div class="ctc-header">
    <h3 class="ctc-title">Cooling Tower Calculations</h3>
    <p class="ctc-sub">Enter operating data; results &#038; water balance update instantly. Export an Excel file with live formulas.</p>
  </div>

  <form class="ctc-form" onsubmit="return false;">
    <div class="ctc-grid">
      <label class="ctc-field">
        <span>Hot Water Temperature (°C)</span>
        <input id="hot" type="number" step="any" placeholder="e.g., 42">
      </label>
      <label class="ctc-field">
        <span>Cold Water Temperature (°C)</span>
        <input id="cold" type="number" step="any" placeholder="e.g., 32">
      </label>
      <label class="ctc-field">
        <span>Wet Bulb Temperature (°C)</span>
        <input id="wb" type="number" step="any" placeholder="e.g., 27">
      </label>
      <label class="ctc-field">
        <span>Circulating Water Flow (m³/h)</span>
        <input id="flow" type="number" step="any" placeholder="e.g., 1200">
      </label>

      <label class="ctc-field">
        <span>Silica in Makeup (mg/L)</span>
        <input id="si_mu" type="number" step="any" placeholder="e.g., 10">
      </label>
      <label class="ctc-field">
        <span>Silica in Circulating (mg/L)</span>
        <input id="si_cw" type="number" step="any" placeholder="e.g., 25">
      </label>
      <label class="ctc-field">
        <span>Ca Hardness in Makeup (mg/L as CaCO₃)</span>
        <input id="ca_mu" type="number" step="any" placeholder="e.g., 80">
      </label>
      <label class="ctc-field">
        <span>Ca Hardness in Circulating (mg/L as CaCO₃)</span>
        <input id="ca_cw" type="number" step="any" placeholder="e.g., 240">
      </label>

      <label class="ctc-field">
        <span>Drift (% of circulation)</span>
        <input id="drift_pct" type="number" step="any" value="0.002">
        <small class="ctc-hint">Typical: 0.002% for good eliminators</small>
      </label>
    </div>

    <div class="ctc-actions">
      <button type="button" id="export" class="ctc-btn" title="Export Excel with formulas"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Export Excel</button>
      <button type="button" id="reset" class="ctc-btn ctc-btn-ghost">Reset</button>
    </div>
  </form>

  <div class="ctc-results">
    <div class="ctc-split">
      <div>
        <h4>Performance</h4>
        <div class="ctc-result"><span>Range (°C)</span><strong id="range">–</strong></div>
        <div class="ctc-result"><span>Approach (°C)</span><strong id="approach">–</strong></div>
        <div class="ctc-result"><span>Efficiency (%)</span><strong id="eff">–</strong></div>
      </div>
      <div>
        <h4>Cycles of Concentration</h4>
        <div class="ctc-result"><span>CoC (Silica)</span><strong id="coc_si">–</strong></div>
        <div class="ctc-result"><span>CoC (Calcium)</span><strong id="coc_ca">–</strong></div>
        <div class="ctc-result"><span>Selected CoC (used)</span><strong id="coc">–</strong></div>
      </div>
      <div>
        <h4>Water Balance (m³/h)</h4>
        <div class="ctc-result"><span>Evaporation Loss, E</span><strong id="evap">–</strong></div>
        <div class="ctc-result"><span>Drift Loss, D</span><strong id="drift">–</strong></div>
        <div class="ctc-result"><span>Blowdown, B</span><strong id="blowdown">–</strong></div>
        <div class="ctc-result"><span>Makeup, M</span><strong id="makeup">–</strong></div>
      </div>
    </div>
  </div>

  <footer class="ctc-footer">
    <small>Assumptions: Evaporation ≈ 0.0018 × Range(°C) × Circulation; Blowdown B = E/(CoC−1) − Drift (≥0); no leaks.</small><br/>
    <small><a href="https://chemicalengineeringsite.in/" target="_blank" rel="noopener">Source: chemicalengineeringsite.in</a></small>
  </footer>
</div>

<style>
  .ctc-card{max-width:1100px;margin:1.25rem auto;padding:1rem;border:1px solid #e6eef6;border-radius:16px;background:#fff;box-shadow:0 6px 20px rgba(2,6,23,.06)}
  .ctc-title{margin:.25rem 0;font-size:1.25rem;color:#0f172a}
  .ctc-sub{margin:0 0 .5rem 0;color:#475569}
  .ctc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
  @media (max-width:900px){.ctc-grid{grid-template-columns:1fr}}
  .ctc-field{display:flex;flex-direction:column;gap:6px}
  .ctc-field span{font-weight:600;color:#0f172a}
  .ctc-field input{padding:.55rem .7rem;border:1px solid #e6eef6;border-radius:10px}
  .ctc-hint{color:#64748b}
  .ctc-actions{display:flex;gap:10px;margin-top:.75rem;flex-wrap:wrap}
  .ctc-btn{border:1px solid #2563eb;background:#2563eb;color:#fff;border-radius:999px;padding:.55rem .9rem;font-weight:600;cursor:pointer}
  .ctc-btn-ghost{background:#fff;color:#2563eb}
  .ctc-results{margin-top:1rem;border-top:1px dashed #e6eef6;padding-top:.75rem}
  .ctc-split{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
  @media (max-width:900px){.ctc-split{grid-template-columns:1fr}}
  .ctc-result{display:flex;justify-content:space-between;gap:10px;margin:.3rem 0}
  .ctc-footer{margin-top:.5rem;color:#475569}
</style>

<!-- SheetJS for Excel export -->
<script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>

<script>
(function(){
  const $ = id => document.getElementById(id);
  const EL = {
    hot:$('hot'), cold:$('cold'), wb:$('wb'), flow:$('flow'),
    si_mu:$('si_mu'), si_cw:$('si_cw'), ca_mu:$('ca_mu'), ca_cw:$('ca_cw'),
    drift_pct:$('drift_pct'),
    range:$('range'), approach:$('approach'), eff:$('eff'),
    coc_si:$('coc_si'), coc_ca:$('coc_ca'), coc:$('coc'),
    evap:$('evap'), drift:$('drift'), blow:$('blowdown'), makeup:$('makeup'),
    btnExport:$('export'), btnReset:$('reset')
  };

  function num(v){ const n = parseFloat(v); return Number.isFinite(n)? n : NaN; }
  function round(v,dp=2){ if(!Number.isFinite(v)) return '–'; const f=Math.pow(10,dp); return (Math.round(v*f)/f).toFixed(dp); }

  function compute(){
    const Th = num(EL.hot.value), Tc = num(EL.cold.value), Twb = num(EL.wb.value), Q = num(EL.flow.value);
    const SiMU = num(EL.si_mu.value), SiCW = num(EL.si_cw.value), CaMU = num(EL.ca_mu.value), CaCW = num(EL.ca_cw.value);
    const driftPct = num(EL.drift_pct.value); // % of circulation

    const Range = (Number.isFinite(Th)&&Number.isFinite(Tc)) ? (Th - Tc) : NaN;
    const Approach = (Number.isFinite(Tc)&&Number.isFinite(Twb)) ? (Tc - Twb) : NaN;
    const Eff = (Number.isFinite(Th)&&Number.isFinite(Tc)&&Number.isFinite(Twb) && (Th - Twb) > 0)
                  ? ((Th - Tc)/(Th - Twb))*100 : NaN;

    const CoC_Si = (Number.isFinite(SiMU)&&SiMU>0 && Number.isFinite(SiCW)) ? (SiCW/SiMU) : NaN;
    const CoC_Ca = (Number.isFinite(CaMU)&&CaMU>0 && Number.isFinite(CaCW)) ? (CaCW/CaMU) : NaN;
    let CoC = NaN;
    if(Number.isFinite(CoC_Si) && Number.isFinite(CoC_Ca)) CoC = Math.min(CoC_Si, CoC_Ca);
    else if(Number.isFinite(CoC_Si)) CoC = CoC_Si;
    else if(Number.isFinite(CoC_Ca)) CoC = CoC_Ca;

    const E = (Number.isFinite(Range)&&Number.isFinite(Q)) ? Math.max(0, 0.0018 * Range * Q) : NaN; // m3/h
    const D = (Number.isFinite(Q)&&Number.isFinite(driftPct)) ? Math.max(0, (driftPct/100) * Q) : NaN;

    let B = NaN;
    if(Number.isFinite(E) && Number.isFinite(D) && Number.isFinite(CoC) && CoC>1){
      B = Math.max(0, (E/(CoC - 1)) - D);
    }

    const M = (Number.isFinite(E)&&Number.isFinite(D)&&Number.isFinite(B)) ? (E + D + B) : NaN;

    // Update UI
    EL.range.textContent = round(Range,2);
    EL.approach.textContent = round(Approach,2);
    EL.eff.textContent = round(Eff,1);

    EL.coc_si.textContent = Number.isFinite(CoC_Si)? round(CoC_Si,3) : '–';
    EL.coc_ca.textContent = Number.isFinite(CoC_Ca)? round(CoC_Ca,3) : '–';
    EL.coc.textContent = Number.isFinite(CoC)? round(CoC,3) : '–';

    EL.evap.textContent = round(E,3);
    EL.drift.textContent = round(D,3);
    EL.blow.textContent = round(B,3);
    EL.makeup.textContent = round(M,3);

    // store for export
    window.__ctc_state = {Th, Tc, Twb, Q, SiMU, SiCW, CaMU, CaCW, driftPct, Range, Approach, Eff, CoC_Si, CoC_Ca, CoC, E, D, B, M};
  }

  // Events
  ['hot','cold','wb','flow','si_mu','si_cw','ca_mu','ca_cw','drift_pct'].forEach(id=>{
    document.getElementById(id).addEventListener('input', compute);
  });

  EL.btnReset.addEventListener('click', ()=>{
    ['hot','cold','wb','flow','si_mu','si_cw','ca_mu','ca_cw'].forEach(id=>document.getElementById(id).value='');
    EL.drift_pct.value='0.002';
    compute();
  });

  // Excel Export (with formulas)
  function exportExcel(){
    const s = window.__ctc_state || {};
    const data = [
      ['Cooling Tower Calculations','','','',''],
      ['Input','Value','','',''],
      ['Hot Water Temperature (°C)', s.Th ?? '','','',''],
      ['Cold Water Temperature (°C)', s.Tc ?? '','','',''],
      ['Wet Bulb Temperature (°C)', s.Twb ?? '','','',''],
      ['Circulating Water Flow (m³/h)', s.Q ?? '','','',''],
      ['Silica in Makeup (mg/L)', s.SiMU ?? '','','',''],
      ['Silica in Circulating (mg/L)', s.SiCW ?? '','','',''],
      ['Ca Hardness in Makeup (mg/L as CaCO₃)', s.CaMU ?? '','','',''],
      ['Ca Hardness in Circulating (mg/L as CaCO₃)', s.CaCW ?? '','','',''],
      ['Drift (% of circulation)', s.driftPct ?? 0.002,'(e.g., 0.002 = 0.002%)','',''],
      ['','','','',''],
      ['Output','Value','Formula','',''],
      ['Range (°C)', {t:'n', f:'B3-B4'}, 'B3-B4','',''],
      ['Approach (°C)', {t:'n', f:'B4-B5'}, 'B4-B5','',''],
      ['Efficiency (%)', {t:'n', f:'IF(B3-B5<=0,"",(B3-B4)/(B3-B5)*100)'}, '(Thot-Tcold)/(Thot-Twb)*100','',''],
      ['CoC (Silica)', {t:'n', f:'IF(B7>0,B8/B7,"")'}, 'SiCW/SiMU','',''],
      ['CoC (Calcium)', {t:'n', f:'IF(B9>0,B10/B9,"")'}, 'CaCW/CaMU','',''],
      ['Selected CoC (used)', {t:'n', f:'IF(AND(ISNUMBER(B16),ISNUMBER(B17)),MIN(B16,B17),IF(ISNUMBER(B16),B16,IF(ISNUMBER(B17),B17,"")))'}, 'min available','',''],
      ['Evaporation (m³/h)', {t:'n', f:'MAX(0,0.0018*B14*B6)'}, '0.0018*Range*Flow','',''],
      ['Drift (m³/h)', {t:'n', f:'MAX(0,(B11/100)*B6)'}, '(Drift%/100)*Flow','',''],
      ['Blowdown (m³/h)', {t:'n', f:'IF(OR(B18="",B18<=1),"",MAX(0,(B19/(B18-1))-B20))'}, 'E/(CoC-1)-Drift','',''],
      ['Makeup (m³/h)', {t:'n', f:'IF(B21="","",B19+B20+B21)'}, 'E + D + B','',''],
      ['','','','',''],
      ['Source: chemicalengineeringsite.in','','','','']
    ];

    const ws = XLSX.utils.aoa_to_sheet(data);
    ws['!cols'] = [{wch:38},{wch:18},{wch:28},{wch:12},{wch:12}];

    // Hyperlink on the last row, first cell
    const lastRow = data.length + 1; // account for 1-indexed Excel rows
    ws[`A${lastRow}`] = { t:'s', v:'Source: chemicalengineeringsite.in', l:{ Target:'https://chemicalengineeringsite.in/' } };

    // Freeze panes: keep headers visible
    ws['!freeze'] = { xSplit: 1, ySplit: 13 };

    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'Cooling Tower');

    const ts = new Date().toISOString().slice(0,19).replace(/[:T]/g,'-');
    XLSX.writeFile(wb, `cooling_tower_calculations_${ts}.xlsx`);
  }

  document.getElementById('export').addEventListener('click', exportExcel);

  // initial
  compute();
})();
</script>
<!-- /Cooling Tower Calculator -->

<p>The post <a href="https://chemicalengineeringsite.in/cooling-tower-calculator/">Cooling Tower Calculator</a> appeared first on <a href="https://chemicalengineeringsite.in">Chemical Engineering Site</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chemicalengineeringsite.in/cooling-tower-calculator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
