{"id":20380,"date":"2025-08-22T14:39:31","date_gmt":"2025-08-22T06:39:31","guid":{"rendered":"https:\/\/stark-water.com\/?page_id=20380"},"modified":"2025-08-22T14:51:13","modified_gmt":"2025-08-22T06:51:13","slug":"chlorine-dosage-calculator","status":"publish","type":"page","link":"https:\/\/stark-water.com\/es\/calculadoras-de-tratamiento-del-agua\/chlorine-dosage-calculator\/","title":{"rendered":"Chlorine Dosage Calculator | CT &amp; Contact Time"},"content":{"rendered":"<p>Use this <strong>chlorine dosage calculator<\/strong> to size free chlorine dosing, set the metering pump, and estimate <strong>CT (contact time)<\/strong> and contact tank volume. It supports sodium and calcium hypochlorite stocks and simple volume dilutions.<\/p>\n\n\n\n<?php\n\/\/ Shortcode: [stark_chlorine_calculator]  \u2014 fixed label\/hint wrapping\nadd_shortcode('stark_chlorine_calculator', function () {\nob_start(); ?>\n<div id=\"sw-chlorine\" class=\"swk-wrap\" aria-labelledby=\"swk-title\" role=\"form\">\n  <style>\n    \/* --- Brand-aware design (reads Elementor\/Astra variables, then fallbacks) --- *\/\n    #sw-chlorine {\n      --swk-primary: var(--e-global-color-primary, var(--ast-global-color-0, #0f6ab4));\n      --swk-accent:  var(--e-global-color-accent,  var(--ast-global-color-2, #23a6d5));\n      --swk-bg:      var(--e-global-color-fff, #ffffff);\n      --swk-muted:   rgba(0,0,0,.55);\n      --swk-border:  rgba(0,0,0,.08);\n      --swk-radius:  14px;\n      --swk-shadow:  0 6px 24px rgba(0,0,0,.06);\n      --swk-font:    inherit;\n    }\n    #sw-chlorine { font-family: var(--swk-font); line-height: 1.5; color: #111; }\n    #sw-chlorine .swk-card {\n      background: var(--swk-bg);\n      border: 1px solid var(--swk-border);\n      border-radius: var(--swk-radius);\n      box-shadow: var(--swk-shadow);\n      padding: 18px;\n    }\n    #sw-chlorine h2#swk-title{\n      margin: 0 0 8px;\n      font-size: clamp(20px, 2vw, 24px);\n      letter-spacing: .2px;\n    }\n    #sw-chlorine .swk-sub{ margin: 0 0 14px; color: var(--swk-muted); }\n    #sw-chlorine .swk-header{\n      border-radius: var(--swk-radius);\n      padding: 14px 16px;\n      margin: 0 0 16px;\n      background: linear-gradient(135deg, color-mix(in oklab, var(--swk-primary) 88%, white) 0%, color-mix(in oklab, var(--swk-accent) 80%, white) 100%);\n      color: #fff;\n      border: 1px solid rgba(255,255,255,.25);\n    }\n    #sw-chlorine .swk-header b{ font-weight: 600; }\n\n    \/* GRID: two columns desktop, one column mobile *\/\n    #sw-chlorine .swk-grid{\n      display: grid;\n      gap: 12px;\n      grid-template-columns: minmax(0,1fr) minmax(0,1fr);\n    }\n    @media (max-width: 780px){\n      #sw-chlorine .swk-grid{ grid-template-columns: 1fr; }\n    }\n\n    \/* ROW: allow wrap; align to top so long hints don't collide *\/\n    #sw-chlorine .swk-row{\n      display:flex;\n      gap:10px;\n      align-items:flex-start;       \/* top align *\/\n      flex-wrap:wrap;               \/* allow wrapping *\/\n      min-width:0;                  \/* fix overflow in flex items *\/\n    }\n\n    \/* LABEL + INPUT sizing *\/\n    #sw-chlorine label{\n      flex:0 0 180px;               \/* fixed label column *\/\n      min-width:160px;\n      font-weight:500;\n    }\n    #sw-chlorine input, #sw-chlorine select{\n      flex:1 1 auto;                \/* input takes remaining width *\/\n      min-width:0;                  \/* allow shrinking without overflow *\/\n      padding:10px 12px;\n      border:1px solid var(--swk-border);\n      border-radius:10px;\n      background:#fff;\n      box-sizing:border-box;\n    }\n\n    \/* Full-width rows (hints) *\/\n    #sw-chlorine .swk-row--full{ grid-column:1 \/ -1; }\n\n    #sw-chlorine .swk-hint{ font-size:12px; color:var(--swk-muted); display:block; line-height:1.45; }\n    #sw-chlorine .swk-box{ border:1px solid var(--swk-border); border-radius:12px; padding:14px; }\n    #sw-chlorine .swk-pill{\n      display:inline-block; padding:2px 8px; border-radius:999px;\n      border:1px solid var(--swk-border); background:#f7fafc; font-size:12px; color:#2c5282;\n    }\n    #sw-chlorine .swk-btn{\n      appearance:none; border:1px solid color-mix(in oklab, var(--swk-primary) 75%, black 0%);\n      background:var(--swk-primary); color:#fff; padding:12px 16px; border-radius:12px;\n      cursor:pointer; font-weight:600;\n    }\n    #sw-chlorine .swk-btn:hover{ filter:brightness(1.05); }\n    #sw-chlorine .swk-muted-btn{\n      appearance:none; border:1px solid var(--swk-border); background:#fff; color:#111;\n      padding:10px 12px; border-radius:10px; cursor:pointer;\n    }\n    #sw-chlorine .swk-results{ background:#fbfdff; border:1px solid var(--swk-border); border-radius:14px; padding:16px; }\n    #sw-chlorine ul{ margin:0; padding-left:18px; }\n    #sw-chlorine .swk-actions{ display:flex; gap:10px; flex-wrap:wrap; }\n  <\/style>\n\n  <div class=\"swk-header\">\n    <h2 id=\"swk-title\">Chlorine Dosage &#038; CT Calculator<\/h2>\n    <div class=\"swk-sub\">Compute free chlorine dose, metering pump setpoint, CT, and contact tank volume. Supports liquid sodium hypochlorite, solid hypochlorite stock solutions, and simple volume dilutions.<\/div>\n  <\/div>\n\n  <div class=\"swk-card swk-box\" aria-label=\"Process inputs\">\n    <div class=\"swk-grid\" role=\"group\" aria-labelledby=\"swk-title\">\n      <div class=\"swk-row\">\n        <label for=\"swk-q\">Flow rate<\/label>\n        <input id=\"swk-q\" type=\"number\" step=\"0.0001\" placeholder=\"e.g., 20\" inputmode=\"decimal\" \/>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-q_unit\">Unit<\/label>\n        <select id=\"swk-q_unit\">\n          <option value=\"m3h\">m\u00b3\/h<\/option>\n          <option value=\"gpm\">gpm<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-c_target\">Target free chlorine (mg\/L)<\/label>\n        <input id=\"swk-c_target\" type=\"number\" step=\"0.001\" placeholder=\"e.g., 0.5\" \/>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-c_current\">Current free chlorine (mg\/L)<\/label>\n        <input id=\"swk-c_current\" type=\"number\" step=\"0.001\" value=\"0\" \/>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-c_demand\">Chlorine demand (mg\/L)<\/label>\n        <input id=\"swk-c_demand\" type=\"number\" step=\"0.01\" value=\"0\" \/>\n      <\/div>\n\n      <!-- make hint a full-width row -->\n      <div class=\"swk-row swk-row--full\">\n        <span class=\"swk-hint\">If unknown, start with 0 or a typical range (0.5\u20132.0 mg\/L) and adjust based on online residual.<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"swk-card swk-box\" aria-label=\"Stock solution\">\n    <div style=\"margin-bottom:8px\"><span class=\"swk-pill\">Stock solution definition<\/span><\/div>\n    <div class=\"swk-grid\">\n      <div class=\"swk-row\">\n        <label for=\"swk-mode\">Mode<\/label>\n        <select id=\"swk-mode\">\n          <option value=\"naocl\">Liquid sodium hypochlorite (% available chlorine + density)<\/option>\n          <option value=\"solid\">Solid hypochlorite solution (g\/L \u00d7 % available Cl)<\/option>\n          <option value=\"dilute\">Volume dilution (given stock mg\/L + 1:R)<\/option>\n        <\/select>\n      <\/div>\n      <div><\/div>\n\n      <!-- NaOCl -->\n      <div class=\"swk-row swk-naocl\">\n        <label for=\"swk-naocl-pct\">% available Cl (w\/w as Cl\u2082)<\/label>\n        <input id=\"swk-naocl-pct\" type=\"number\" step=\"0.01\" placeholder=\"e.g., 10 or 12.5\" \/>\n      <\/div>\n      <div class=\"swk-row swk-naocl\">\n        <label for=\"swk-naocl-rho\">Density \u03c1 (kg\/L)<\/label>\n        <input id=\"swk-naocl-rho\" type=\"number\" step=\"0.0001\" placeholder=\"e.g., 1.16\" \/>\n      <\/div>\n\n      <!-- Solid -->\n      <div class=\"swk-row swk-solid\" style=\"display:none\">\n        <label for=\"swk-solid-gpl\">Charge concentration s (g\/L)<\/label>\n        <input id=\"swk-solid-gpl\" type=\"number\" step=\"0.1\" placeholder=\"e.g., 50 (50 g per liter)\" \/>\n      <\/div>\n      <div class=\"swk-row swk-solid\" style=\"display:none\">\n        <label for=\"swk-solid-pct\">% available Cl<\/label>\n        <input id=\"swk-solid-pct\" type=\"number\" step=\"0.1\" placeholder=\"e.g., 65\" \/>\n      <\/div>\n\n      <!-- Dilution -->\n      <div class=\"swk-row swk-dilute\" style=\"display:none\">\n        <label for=\"swk-d0\">Stock C\u2080 (mg\/L as Cl\u2082)<\/label>\n        <input id=\"swk-d0\" type=\"number\" step=\"1\" placeholder=\"e.g., 150000\" \/>\n      <\/div>\n      <div class=\"swk-row swk-dilute\" style=\"display:none\">\n        <label for=\"swk-dratio\">Dilution (1 : R)<\/label>\n        <input id=\"swk-dratio\" type=\"number\" step=\"0.1\" placeholder=\"e.g., 4 means 1:4\" \/>\n      <\/div>\n    <\/div>\n    <div class=\"swk-hint\" id=\"swk-stock-hint\" style=\"margin-top:8px\">Example: 12.5% NaOCl, \u03c1\u22481.20 \u21d2 C \u2248 150,000 mg\/L.<\/div>\n  <\/div>\n\n  <div class=\"swk-card swk-box\" aria-label=\"CT and contact tank (optional)\">\n    <div style=\"margin-bottom:8px\"><span class=\"swk-pill\">CT \/ Contact Tank (optional)<\/span><\/div>\n    <div class=\"swk-grid\">\n      <div class=\"swk-row\">\n        <label for=\"swk-ct\">Target CT (mg\u00b7min\/L)<\/label>\n        <input id=\"swk-ct\" type=\"number\" step=\"0.1\" value=\"0\" \/>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-cout\">Terminal free Cl C<sub>out<\/sub> (mg\/L)<\/label>\n        <input id=\"swk-cout\" type=\"number\" step=\"0.01\" value=\"0.5\" \/>\n      <\/div>\n      <div class=\"swk-row\">\n        <label for=\"swk-bf\">Baffling factor (T\u2081\u2080\/\u03c4)<\/label>\n        <select id=\"swk-bf\">\n          <option value=\"0.15\">Pipe\/Poor: 0.10\u20130.20 (default 0.15)<\/option>\n          <option value=\"0.35\">Multi-baffle basin: 0.30\u20130.50 (default 0.35)<\/option>\n          <option value=\"0.70\">Serpentine \/ near plug-flow: ~0.70<\/option>\n          <option value=\"1.00\">Ideal plug-flow: 1.00<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- make hint a full-width row -->\n      <div class=\"swk-row swk-row--full\">\n        <span class=\"swk-hint\">Set CT to 0 if you only need dosing.<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"swk-actions\" style=\"margin: 14px 0\">\n    <button class=\"swk-btn\" id=\"swk-calc\">Calcule<\/button>\n    <button class=\"swk-muted-btn\" id=\"swk-reset\" type=\"button\">Restablecer<\/button>\n    <button class=\"swk-muted-btn\" id=\"swk-copy\" type=\"button\" title=\"Copy results to clipboard\">Copy results<\/button>\n  <\/div>\n\n  <div id=\"swk-out\" class=\"swk-results\" style=\"display:none\"><\/div>\n  <p class=\"swk-hint\" style=\"margin-top:10px\">\n    Engineering estimate only. Verify on site with residual\/ORP monitoring, jar tests, and applicable drinking water &#038; occupational safety regulations.\n  <\/p>\n<\/div>\n\n<script>\n(function(){\n  const $ = (id)=>document.getElementById(id);\n  const show = (cls, on)=>document.querySelectorAll(cls).forEach(el=>el.style.display=on?'':'none');\n\n  function modeHint(){\n    const m = $('swk-mode').value;\n    show('.swk-naocl', m==='naocl');\n    show('.swk-solid', m==='solid');\n    show('.swk-dilute', m==='dilute');\n    if(m==='naocl') $('swk-stock-hint').textContent='Example: 12.5% NaOCl, \u03c1\u22481.20 \u21d2 C \u2248 150,000 mg\/L.';\n    if(m==='solid') $('swk-stock-hint').textContent='Example: 65% calcium hypochlorite, 50 g\/L stock \u21d2 C \u2248 32,500 mg\/L.';\n    if(m==='dilute') $('swk-stock-hint').textContent='Example: Stock 150,000 mg\/L, 1:4 dilution \u21d2 C \u2248 30,000 mg\/L.';\n  }\n  document.getElementById('swk-mode').addEventListener('change', modeHint); modeHint();\n\n  function toM3h(v, unit){ if(!v) return 0; return unit==='m3h' ? v : v * 0.227124; } \/\/ gpm\u2192m3\/h\n  const fmt = (x,d=3)=> (Number.isFinite(x) ? (Math.abs(x)>=100? x.toFixed(2): x.toFixed(d)) : '-');\n\n  function compute(){\n    const q_in = parseFloat(document.getElementById('swk-q').value);\n    const q = toM3h(q_in, document.getElementById('swk-q_unit').value); \/\/ m3\/h\n    const cT = parseFloat(document.getElementById('swk-c_target').value || 0);\n    const cC = parseFloat(document.getElementById('swk-c_current').value || 0);\n    const cD = parseFloat(document.getElementById('swk-c_demand').value || 0);\n    if(!(q>0) || !(cT>=0) || !(cC>=0) || !(cD>=0)){\n      alert('Please check flow and concentration inputs.'); return;\n    }\n    const Dreq = Math.max(0, cT - cC + cD); \/\/ mg\/L\n\n    let Cstock = 0;\n    const mode = document.getElementById('swk-mode').value;\n    if(mode==='naocl'){\n      const pct = parseFloat(document.getElementById('swk-naocl-pct').value || 0);\n      const rho = parseFloat(document.getElementById('swk-naocl-rho').value || 0);\n      if(!(pct>0) || !(rho>0)){ alert('Enter % available Cl and density.'); return; }\n      Cstock = (pct\/100)*1000000*rho;\n    } else if(mode==='solid'){\n      const gpl = parseFloat(document.getElementById('swk-solid-gpl').value || 0);\n      const pct = parseFloat(document.getElementById('swk-solid-pct').value || 0);\n      if(!(gpl>0) || !(pct>0)){ alert('Enter grams per liter and % available Cl.'); return; }\n      Cstock = gpl * (pct\/100) * 1000;\n    } else {\n      const d0 = parseFloat(document.getElementById('swk-d0').value || 0);\n      const R  = parseFloat(document.getElementById('swk-dratio').value || 0);\n      if(!(d0>0) || !(R>=0)){ alert('Enter stock concentration and dilution ratio.'); return; }\n      Cstock = d0\/(1+R);\n    }\n    if(!(Cstock>0)){ alert('Stock concentration must be > 0.'); return; }\n\n    const pumpLh = Dreq * 1000 * q \/ Cstock; \/\/ L\/h\n    const pumpLmin = pumpLh\/60;\n    const dailyL = pumpLh * 24;\n\n    const CT = parseFloat(document.getElementById('swk-ct').value || 0);\n    const Cout = parseFloat(document.getElementById('swk-cout').value || 0);\n    const BF = parseFloat(document.getElementById('swk-bf').value || 0.15);\n    let Vtank_m3 = 0;\n    if(CT>0 && Cout>0 && BF>0){\n      const Q_lpm = q*1000\/60.0;\n      const V_L = (CT * Q_lpm)\/(Cout * BF);\n      Vtank_m3 = V_L\/1000.0;\n    }\n\n    const html = `\n      <div class=\"swk-grid\">\n        <div>\n          <h3 style=\"margin:0 0 6px\">Dosing Results<\/h3>\n          <ul>\n            <li>Required dose D<sub>req<\/sub>: <b>${fmt(Dreq,3)} mg\/L<\/b> (\u2248 ppm)<\/li>\n            <li>Stock concentration C<sub>stock<\/sub>: <b>${fmt(Cstock,0)} mg\/L<\/b><\/li>\n            <li>Metering pump setpoint: <b>${fmt(pumpLh,3)} L\/h<\/b> (\u2248 ${fmt(pumpLmin,3)} L\/min)<\/li>\n            <li>Estimated chemical usage (24 h): <b>${fmt(dailyL,2)} L\/day<\/b><\/li>\n          <\/ul>\n        <\/div>\n        <div>\n          <h3 style=\"margin:0 0 6px\">CT \/ Contact Tank<\/h3>\n          <ul>\n            <li>Baffling factor (T<sub>10<\/sub>\/\u03c4): <b>${fmt(BF,2)}<\/b><\/li>\n            <li>Target CT: <b>${fmt(CT,1)} mg\u00b7min\/L<\/b> with C<sub>out<\/sub>=<b>${fmt(Cout,2)} mg\/L<\/b><\/li>\n            <li>Recommended contact tank volume: <b>${fmt(Vtank_m3,2)} m\u00b3<\/b><\/li>\n          <\/ul>\n        <\/div>\n      <\/div>\n      <div class=\"swk-hint\" style=\"margin-top:8px\">\n        Tip: for N days of continuous operation, recommended day tank volume \u2265 daily usage \u00d7 N \u00d7 1.2 (20% safety margin).\n      <\/div>\n    `;\n    document.getElementById('swk-out').innerHTML = html;\n    document.getElementById('swk-out').style.display = 'block';\n\n    if(window.dataLayer){ window.dataLayer.push({event:'calc_chlorine', Dreq, Cstock, pumpLh, CT, BF}); }\n    document.getElementById('swk-copy').dataset.clip =\n      `Dose: ${fmt(Dreq,3)} mg\/L | Stock: ${fmt(Cstock,0)} mg\/L | Pump: ${fmt(pumpLh,3)} L\/h | Daily: ${fmt(dailyL,2)} L\/day | Tank: ${fmt(Vtank_m3,2)} m\u00b3`;\n  }\n\n  document.getElementById('swk-calc').addEventListener('click', compute);\n  document.getElementById('swk-reset').addEventListener('click', ()=>{\n    document.querySelectorAll('#sw-chlorine input').forEach(i=>i.value='');\n    document.getElementById('swk-out').style.display='none';\n  });\n  document.getElementById('swk-copy').addEventListener('click', ()=>{\n    const txt = document.getElementById('swk-copy').dataset.clip || '';\n    if(!txt){ alert('No results yet. Click Calculate first.'); return; }\n    navigator.clipboard.writeText(txt).then(()=>{\n      document.getElementById('swk-copy').textContent='Copied';\n      setTimeout(()=>document.getElementById('swk-copy').textContent='Copy results', 1200);\n    });\n  });\n})();\n<\/script>\n<?php\nreturn ob_get_clean();\n});\n\n\n\n<h2>Why use this chlorine dosage calculator<\/h2>\n<ul>\n  <li>Rapid sizing of free chlorine dose and metering pump setpoint.<\/li>\n  <li>Built-in methods for sodium and calcium hypochlorite stocks.<\/li>\n  <li>CT (contact time) estimate to screen contact tank volume.<\/li>\n<\/ul>\n\n<h2>How to read results from the chlorine dosage calculator<\/h2>\n<p>The calculator reports the required dose (mg\/L), the <em>pump setpoint<\/em> in L\/h and L\/min, the\nestimated daily chemical usage, and\u2014if CT inputs are provided\u2014the contact tank volume based on your\nselected baffling factor. Use these values as engineering estimates and validate them on site.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"quickstart\">Quick start \u2014 How to use the Chlorine Dosage Calculator (step-by-step)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enter the&nbsp;<strong>flow rate<\/strong>&nbsp;and choose&nbsp;<em>m\u00b3\/h<\/em>&nbsp;o&nbsp;<em>gpm<\/em>.<\/li>\n\n\n\n<li>Set your&nbsp;<strong>target free chlorine<\/strong>&nbsp;and current residual. If you expect consumption from ammonia\/organics, enter a&nbsp;<strong>chlorine demand<\/strong>&nbsp;(start with 0.5\u20132.0 mg\/L if unknown, then tune with online residual or ORP).<\/li>\n\n\n\n<li>Define the&nbsp;<strong>stock solution<\/strong>:\n<ul class=\"wp-block-list\">\n<li><em>Liquid NaOCl<\/em>: % available chlorine and density (kg\/L)<\/li>\n\n\n\n<li><em>Solid hypochlorite<\/em>: grams per liter and % available chlorine<\/li>\n\n\n\n<li><em>Volume dilution<\/em>: known stock mg\/L and a 1:R dilution<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>(Optional) If you need&nbsp;<strong>CT<\/strong>, enter the target CT, terminal residual \\(C_\\mathrm{out}\\), and choose a&nbsp;<strong>baffling factor<\/strong>&nbsp;that reflects your contactor hydraulics.<\/li>\n\n\n\n<li>Click&nbsp;<strong>Calcule<\/strong>. The tool returns the&nbsp;<strong>required dose<\/strong>,&nbsp;<strong>metering pump setpoint<\/strong>&nbsp;(L\/h, L\/min),&nbsp;<strong>daily chemical usage<\/strong>, and (if CT is enabled) the&nbsp;<strong>recommended contact tank volume<\/strong>.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-1024x683.webp\" alt=\"chlorine dosage calculator1\" class=\"wp-image-20401\" title=\"\" srcset=\"https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-1024x683.webp 1024w, https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-300x200.webp 300w, https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-768x512.webp 768w, https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-18x12.webp 18w, https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1-600x400.webp 600w, https:\/\/stark-water.com\/wp-content\/uploads\/2025\/08\/chlorine-dosage-calculator1.webp 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">chlorine dosage calculator1<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inputs\">Inputs &amp; units<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Flow rate<\/strong>&nbsp;\u2014 process water flow; switchable between m\u00b3\/h and gpm.<\/li>\n\n\n\n<li><strong>Target free chlorine<\/strong>&nbsp;\u2014 desired residual after contact (mg\/L).<\/li>\n\n\n\n<li><strong>Current free chlorine<\/strong>&nbsp;\u2014 measured residual before dosing (mg\/L).<\/li>\n\n\n\n<li><strong>Chlorine demand<\/strong>&nbsp;\u2014 site-specific consumption from ammonia\/organics. If unknown, start at 0 and increase based on residual or jar tests.<\/li>\n\n\n\n<li><strong>Stock definition<\/strong>&nbsp;\u2014 choose NaOCl (% + density), solid (g\/L \u00d7 %), or volume dilution (mg\/L and 1:R).<\/li>\n\n\n\n<li><strong>CT &amp; baffling factor<\/strong>&nbsp;\u2014 CT in mg\u00b7min\/L; baffling factor \\(T_{10}\/\\tau\\) accounts for short-circuiting (see table below).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"method\">Equations &amp; methodology<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">Required dose (mg\/L):\n  Dreq = max(0, Ctarget \u2212 Ccurrent + Cdemand)\n\nStock strength (mg\/L as Cl\u2082):\n  Liquid NaOCl: Cstock = (%AvailCl\/100) \u00d7 1,000,000 \u00d7 \u03c1   (\u03c1 in kg\/L)\n  Solid solution: Cstock = s(g\/L) \u00d7 (%AvailCl\/100) \u00d7 1000\n  Volume dilution: Cstock = C\u2080 \/ (1 + R)\n\nPump setpoint (L\/h):\n  Pump = Dreq \u00d7 1000 \u00d7 Q(m\u00b3\/h) \/ Cstock\n\nEstimated daily usage (L\/day):\n  Daily = Pump \u00d7 24\n\nContact tank volume (m\u00b3):\n  V = (CT \u00d7 Q(L\/min)) \/ (Cout \u00d7 BF) \/ 1000\n<\/pre>\n\n\n\n<p><em>Notes:<\/em>&nbsp;For dilute aqueous solutions, 1 mg\/L \u2248 1 ppm. Choose a conservative baffling factor unless tracer testing is available.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"examples\">Worked examples<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Example A \u2014 Sodium hypochlorite dosing only<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flow = 20 m\u00b3\/h; Target = 0.8 mg\/L; Current = 0.1 mg\/L; Demand = 1.0 mg\/L \u21d2&nbsp;<strong>Dreq = 1.7 mg\/L<\/strong><\/li>\n\n\n\n<li>NaOCl 10% with density \u03c1 = 1.16 kg\/L \u21d2&nbsp;<strong>Cstock \u2248 116,000 mg\/L<\/strong><\/li>\n\n\n\n<li>Pump setpoint = 1.7 \u00d7 1000 \u00d7 20 \/ 116000 \u2248&nbsp;<strong>0.293 L\/h<\/strong>&nbsp;(~0.0049 L\/min)<\/li>\n\n\n\n<li>Daily usage \u2248&nbsp;<strong>7.0 L\/day<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example B \u2014 With CT &amp; contact tank<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using Example A values + CT = 30 mg\u00b7min\/L; Cout = 0.5 mg\/L; BF = 0.35<\/li>\n\n\n\n<li>Q = 20 m\u00b3\/h = 333.3 L\/min \u21d2 V = 30 \u00d7 333.3 \/ (0.5 \u00d7 0.35) \/ 1000 \u2248&nbsp;<strong>57 m\u00b3<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example C \u2014 Solid hypochlorite stock<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Make-up: 50 g\/L of 65% available chlorine \u21d2 Cstock = 50 \u00d7 0.65 \u00d7 1000 =&nbsp;<strong>32,500 mg\/L<\/strong><\/li>\n\n\n\n<li>For Dreq = 1.5 mg\/L and Q = 12 m\u00b3\/h \u21d2 Pump = 1.5 \u00d7 1000 \u00d7 12 \/ 32500 \u2248&nbsp;<strong>0.554 L\/h<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tables\">Reference tables<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sodium hypochlorite \u2014 typical density &amp; strength<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>% available Cl<\/th><th>Approx. density \u03c1 (kg\/L)<\/th><th>Approx. mg\/L as Cl\u2082<\/th><\/tr><\/thead><tbody><tr><td>5%<\/td><td>~1.08<\/td><td>~54,000<\/td><\/tr><tr><td>10%<\/td><td>~1.16<\/td><td>~116,000<\/td><\/tr><tr><td>12.5%<\/td><td>~1.20<\/td><td>~150,000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Always prefer the supplier\u2019s SDS\/COA values.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Baffling factor (T<sub>10<\/sub>\/\u03c4) selection<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Hidr\u00e1ulica<\/th><th>Typical BF<\/th><th>Notas<\/th><\/tr><\/thead><tbody><tr><td>Pipe \/ poor mixing<\/td><td>0.10\u20130.20<\/td><td>Short-circuiting likely; verify when CT credit is critical.<\/td><\/tr><tr><td>Multi-baffle basin<\/td><td>0.30\u20130.50<\/td><td>Common in packaged tanks; moderate mixing.<\/td><\/tr><tr><td>Serpentine \/ near plug-flow<\/td><td>~0.70<\/td><td>Good baffling and velocity control.<\/td><\/tr><tr><td>Ideal plug-flow<\/td><td>1.00<\/td><td>Theoretical upper bound.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Day tank sizing (rule of thumb)<\/h3>\n\n\n\n<p>Recommended day tank volume \u2265&nbsp;<em>daily usage \u00d7 N days \u00d7 1.2<\/em>&nbsp;(20% safety margin). For critical utilities, provide level monitoring and secondary containment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ops\">Best practices &amp; safety<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Verificaci\u00f3n:<\/strong>&nbsp;Control with online free chlorine or ORP, and confirm residual at the end of contact.<\/li>\n\n\n\n<li><strong>Shelf life:<\/strong>&nbsp;Hypochlorite decays with time, heat, light, and metals contamination. Re-check stock strength periodically and adjust the pump setpoint.<\/li>\n\n\n\n<li><strong>Materials:<\/strong>&nbsp;Use compatible plastics (PE, PVC, PP) or lined steel. Avoid copper\/brass\/plain carbon steel in wetted parts.<\/li>\n\n\n\n<li><strong>Containment &amp; ventilation:<\/strong>&nbsp;Provide secondary containment, vented tanks, and local exhaust where appropriate.<\/li>\n\n\n\n<li><strong>Operator safety:<\/strong>&nbsp;Follow PPE requirements and local regulations for chemical storage and handling.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Is mg\/L the same as ppm in this chlorine dosage calculator?<\/h3>\n\n\n\n<p>For dilute aqueous solutions, mg\/L \u2248 ppm. The calculator uses mg\/L to match drinking-water practice.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What if I don\u2019t know the chlorine demand?<\/h3>\n\n\n\n<p>Start with 0 mg\/L and adjust based on online residual, ORP, and jar tests. Raw waters with ammonia\/organics often require additional dose to satisfy demand.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why do I need the density for sodium hypochlorite?<\/h3>\n\n\n\n<p>Percent available chlorine is by weight; density converts to mg\/L as Cl\u2082. If SDS\/COA is unavailable, use the typical values in the table as a starting point.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does this tool handle chloramination?<\/h3>\n\n\n\n<p>No. This calculator assumes free chlorine. Chloramine systems require ammonia feed and breakpoint chemistry; design them separately.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How accurate is the contact tank estimate?<\/h3>\n\n\n\n<p>It\u2019s a planning estimate based on your selected baffling factor. For regulatory CT credit, verify hydraulics with tracer studies and follow local rules.<\/p>\n\n\n\n<h2 id=\"related\">Related tools &#038; products<\/h2>\n<ul>\n  <li><a href=\"\/es\/calculadoras-de-tratamiento-del-agua\/chemical-dilution\/\">Chemical Dilution Calculator<\/a><\/li>\n  <li><a href=\"\/es\/calculadoras-de-tratamiento-del-agua\/ebct-filter-sizing\/\">GAC &#038; Media Filter Sizing (EBCT)<\/a><\/li>\n  <li><a href=\"\/es\/calculadoras-de-tratamiento-del-agua\/ro-sizing\/\">RO Sizing Calculator<\/a><\/li>\n  <li><a href=\"\/es\/calculadoras-de-tratamiento-del-agua\/ro-opex-calculator\/\">Calculadora OPEX<\/a><\/li>\n  <li><a href=\"\/es\/solutions\/\">Chemical Dosing Systems &#038; Contact Tanks<\/a> \u2014 engineered packages from STARK Water<\/li>\n<\/ul>\n\n<!-- Optional mini-CTA -->\n<div style=\"border:1px solid rgba(0,0,0,.08);border-radius:12px;padding:16px;margin-top:12px;\">\n  <strong>Need a complete dosing package?<\/strong>\n  <p>Send us your calculator results and process constraints. STARK engineers design reliable hypochlorite systems with day tanks, metering pumps, double-wall lines, and residual monitoring.<\/p>\n  <p><a href=\"\/es\/request-a-quote\/\" class=\"button\">Request a proposal<\/a> - <a href=\"javascript:window.print()\">Print this page<\/a><\/p>\n<\/div>\n\n<hr>\n<p><em>Engineering disclaimer:<\/em> Results are estimates and must be field-validated. Always follow local drinking-water regulations and safety codes.<\/p>\n\n\n\n<h3>Authoritative references<\/h3>\n<ul>\n  <li><a href=\"https:\/\/www.epa.gov\/ground-water-and-drinking-water\" target=\"_blank\" rel=\"noopener\">US EPA \u2013 Drinking Water Disinfection &#038; CT concepts<\/a><\/li>\n  <li><a href=\"https:\/\/www.who.int\/publications\/i\/item\/9789241549950\" target=\"_blank\" rel=\"noopener\">WHO \u2013 Guidelines for Drinking-water Quality<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Use this chlorine dosage calculator to size free chlorine dosing, set the metering pump, and estimate CT (contact time) and [&hellip;]<\/p>","protected":false},"author":1,"featured_media":20399,"parent":19070,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_joinchat":[],"footnotes":""},"class_list":["post-20380","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/pages\/20380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/comments?post=20380"}],"version-history":[{"count":8,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/pages\/20380\/revisions"}],"predecessor-version":[{"id":51084,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/pages\/20380\/revisions\/51084"}],"up":[{"embeddable":true,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/pages\/19070"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/media\/20399"}],"wp:attachment":[{"href":"https:\/\/stark-water.com\/es\/wp-json\/wp\/v2\/media?parent=20380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}