{"id":13076,"date":"2026-11-04T08:18:59","date_gmt":"2026-11-04T08:18:59","guid":{"rendered":"https:\/\/aiper.com\/blogs\/pool-dilution-calculator\/"},"modified":"2026-11-12T04:42:28","modified_gmt":"2026-11-12T04:42:28","slug":"pool-dilution-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-dilution-calculator\/","title":{"rendered":"Pool Dilution Calculator"},"content":{"rendered":"<style>\n.aiper-new-tool,.aiper-new-tool *,.aiper-new-tool *::before,.aiper-new-tool *::after{box-sizing:border-box}\n.aiper-new-tool{max-width:960px;margin:20px auto;color:#2d3748;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;line-height:1.6}\n.aiper-new-tool form{background:#fff;border:1px solid #e2e8f0;border-top:4px solid #1ecad3;border-radius:16px;padding:28px;box-shadow:0 4px 24px rgba(0,0,0,.07);margin:24px 0}\n.aiper-new-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:20px}\n.aiper-new-tool label{display:block;font-size:15px;font-weight:600;color:#2d3748}\n.aiper-new-tool input{display:block;width:100%;min-width:0;padding:13px 14px;border:2px solid #e2e8f0;background:#f8fafc;border-radius:10px;margin-top:7px;font:inherit;color:#2d3748;transition:border-color .2s,box-shadow .2s}\n.aiper-new-tool input:focus{outline:none;border-color:#1ecad3;box-shadow:0 0 0 3px rgba(30,202,211,.15);background:#fff}\n.aiper-new-tool button{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:13px 24px;border:2px solid #1ecad3;border-radius:10px;font:inherit;font-size:15px;font-weight:600;cursor:pointer;margin:24px 10px 0 0;transition:background .2s,box-shadow .2s}\n.aiper-new-tool button[type=submit]{background:#1ecad3;color:#fff;box-shadow:0 4px 12px rgba(30,202,211,.25)}\n.aiper-new-tool button[type=submit]:hover{background:#17a8b0;border-color:#17a8b0;box-shadow:0 6px 16px rgba(30,202,211,.3)}\n.aiper-new-tool button[type=reset]{background:#fff;color:#5a6c7d;border-color:#e2e8f0;box-shadow:none}\n.aiper-new-tool button[type=reset]:hover{background:#f8fafc;border-color:#cbd5e1}\n.aiper-new-tool button:focus-visible{outline:3px solid #169fa6;outline-offset:3px}\n.aiper-new-result{background:#e8fafa;border:1px solid #bceff1;border-radius:12px;padding:22px;margin:24px 0;overflow-wrap:anywhere}\n.aiper-new-result p{margin:8px 0}\n.aiper-new-tool a{color:#0b6e77;text-underline-offset:3px}\n@media(max-width:600px){.aiper-new-tool form{padding:18px 16px}.aiper-new-grid{grid-template-columns:minmax(0,1fr);gap:16px}.aiper-new-tool button{padding:12px 20px}}\n<\/style>\n<div class=\"aiper-new-tool\">\n<p>Estimate partial drain-and-refill water for CYA, calcium hardness, salt, borates or another dissolved reading.<\/p>\n<form id=\"aiper-new-tool\" data-mode=\"pool-dilution-calculator\">\n<div class=\"aiper-new-grid\"><label>Pool volume (US gallons)<input name=\"volume\" type=\"number\" min=\"0\" step=\"any\" required value=\"15000\"><\/label><label>Current concentration (ppm)<input name=\"current\" type=\"number\" min=\"0\" step=\"any\" required value=\"100\"><\/label><label>Target concentration (ppm)<input name=\"target\" type=\"number\" min=\"0\" step=\"any\" required value=\"50\"><\/label><label>Replacement-water concentration (ppm)<input name=\"fill\" type=\"number\" min=\"0\" step=\"any\" required value=\"0\"><\/label><label>Equal drain-and-refill stages<input name=\"stages\" type=\"number\" min=\"0\" step=\"any\" required value=\"1\"><\/label><label>Water surface area (sq ft, optional)<input name=\"area\" type=\"number\" min=\"0\" step=\"any\" required value=\"0\"><\/label><label>Water\/sewer cost per 1,000 US gallons<input name=\"rate\" type=\"number\" min=\"0\" step=\"any\" required value=\"0\"><\/label><\/div>\n<p><button type=\"submit\">Calculate<\/button><button type=\"reset\">Reset<\/button><\/form>\n<div id=\"aiper-new-result\" class=\"aiper-new-result\" aria-live=\"polite\">Enter your values and calculate.<\/div>\n<h2>How the estimate works<\/h2>\n<p>Replacement fraction = (current \u2212 target) \u00f7 (current \u2212 fill). For n equal stages, each stage replaces 1 \u2212 ((target \u2212 fill) \u00f7 (current \u2212 fill))^(1\/n). Mix and retest between stages. The result assumes uniform mixing and no other additions or losses. Test replacement water: hard fill water can prevent the desired hardness target. A target equal to fill-water concentration requires a complete theoretical replacement, not a recommended drain.<\/p>\n<p>Do not drain a pool solely because of an estimate. Groundwater, shell and liner conditions can make draining unsafe. Arrange a qualified local assessment before a large drain.<\/p>\n<h2>Related pool guides<\/h2>\n<ul>\n<li><a href=\"https:\/\/aiper.com\/blogs\/how-to-lower-cyanuric-acid-in-pool-without-draining\/\">How to lower cyanuric acid in pool without draining<\/a><\/li>\n<li><a href=\"https:\/\/aiper.com\/blogs\/how-to-soften-pool-water\/\">How to soften pool water<\/a><\/li>\n<li><a href=\"https:\/\/aiper.com\/blogs\/how-to-drain-a-pool\/\">How to drain a pool<\/a><\/li>\n<\/ul>\n<h2>More pool tools<\/h2>\n<p><a href=\"https:\/\/aiper.com\/blogs\/pool-volume-calculator\/\">Pool volume calculator<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/pool-turnover-rate-calculator\/\">Pump runtime and turnover<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/pool-salt-calculator\/\">Pool salt calculator<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/tools\/\">All calculators<\/a><\/p>\n<p>Keep your finished pool clean: <a href=\"https:\/\/aiper.com\/blogs\/best-aiper-pool-cleaner\/\">compare Aiper pool cleaners<\/a>.<\/p>\n<h2>Units and assumptions<\/h2>\n<p>Volume uses US gallons; dimensions use feet and inches. All budget inputs use the same currency chosen by you. Replace demonstration values with measurements and quotes. Calculations are planning estimates, not equipment specifications or contractor offers.<\/p>\n<p>Unit reference: <a href=\"https:\/\/www.nist.gov\/pml\/special-publication-811\">NIST SI conversion guidance<\/a>.<\/p>\n<\/div>\n<p><script>function calculatePoolTool(mode,v){\nconst n=k=>{if(v[k]===undefined||v[k]===null||String(v[k]).trim()==='')throw Error('Enter a value for '+k);let x=Number(v[k]);if(!Number.isFinite(x)||x<0)throw Error('Enter a non-negative number for '+k);return x};const pos=k=>{let x=n(k);if(x<=0)throw Error(k+' must be greater than zero');return x};let o={};\nif(mode==='pool-maintenance-cost-calculator'){let m=pos('months'),h=n('hours');if(m>12||h>24)throw Error('Months must be 1\u201312 and hours no more than 24');let pump=n('watts')\/1000*h*n('electric')*365.25\/12,water=n('water')*365.25\/84*n('rate')\/1000;let active=n('chem')+n('service')+n('heat')+pump+water;let reserve=n('reserve');o={'Active-month operating cost':active,'Annual operating cost':active*m+n('season'),'Annual repair reserve':reserve,'Annual budget including reserve':active*m+n('season')+reserve,'Average 12-month budget':(active*m+n('season')+reserve)\/12,'Pump electricity per active month':pump,'Top-up water per active month':water};}\nif(mode==='pool-resurfacing-cost-calculator'){let l=pos('length'),w=pos('width'),a=pos('shallow'),b=pos('deep');if(b<a)throw Error('Deep depth must be at least shallow depth');let area=w*Math.hypot(l,b-a)+2*l*(a+b)\/2+w*(a+b)+n('extra'),per=2*(l+w),gal=l*w*(a+b)\/2*7.48051948;let low=n('low'),high=n('high');if(high<low)throw Error('High unit price must be at least low');let fixed=n('prep')+per*n('tile')+n('other')+gal\/1000*n('rate'),c=1+n('cont')\/100;o={'Interior area (sq ft)':area,'Waterline perimeter (ft)':per,'Estimated refill (US gallons)':gal,'Budget low (custom prices)':(area*low+fixed)*c,'Budget high (custom prices)':(area*high+fixed)*c};}\nif(mode==='pool-dilution-calculator'){let V=pos('volume'),c=n('current'),t=n('target'),f=n('fill'),s=pos('stages');if(!Number.isInteger(s)||s>20)throw Error('Use 1\u201320 whole-number stages');if(t>=c)return {'Replacement needed (US gallons)':0};if(f>t)throw Error('Target is below replacement-water concentration and is unreachable by dilution');let fraction=(c-t)\/(c-f);if(f===t&&s>1)throw Error('Reaching fill-water concentration requires one complete theoretical replacement');let r=f===t?1:1-Math.pow((t-f)\/(c-f),1\/s),each=V*r,total=each*s;o={'One-stage replacement (%)':fraction*100,'Each selected stage (%)':r*100,'Water per selected stage (US gallons)':each,'Total water used (US gallons)':total,'Water cost (custom rate)':total\/1000*n('rate')};if(n('area')>0)o['Level drop per stage (inches)']=each\/7.48051948\/n('area')*12;}\nif(mode==='salt-chlorine-generator-calculator'){let V=pos('volume'),loss=n('loss'),h=pos('hours'),m=pos('max');if(h>24||m>100)throw Error('Hours must be no more than 24 and output no more than 100%');let demand=V*3.785411784*loss\/453592.37,required=demand*24\/h\/(m\/100);o={'Daily chlorine demand (lb)':demand,'Minimum rated cell output (lb per 24h)':required};let rated=n('rated');if(rated>0){let setting=demand*24\/h\/rated*100;o['Existing cell required setting (%)']=setting;o['Existing cell at 100% adds (ppm\/day)']=rated*h\/24*453592.37\/(V*3.785411784);o['Existing cell capacity adequate']=setting<=100?'Yes at stated conditions':'No at stated conditions';}}\nif(mode==='pool-deck-calculator'){let l=pos('length'),w=pos('width'),d=pos('deck'),area=(l+2*d)*(w+2*d)-l*w-n('cut');if(area<=0)throw Error('Excluded area must be smaller than deck ring');let waste=1+n('waste')\/100,low=n('low'),high=n('high');if(high<low)throw Error('High price must be at least low');o={'Net deck area (sq ft)':area,'Material area including waste (sq ft)':area*waste,'Concrete including waste (cubic yards)':area*n('thick')\/12\/27*waste,'Outside perimeter (ft)':2*(l+w+4*d),'Installed budget low':area*low,'Installed budget high':area*high};}if(['pool-deck-calculator','pool-resurfacing-cost-calculator'].includes(mode)&&n('low')===0&&n('high')===0){for(let key of Object.keys(o))if(\/budget\/i.test(key))o[key]='Enter local low and high unit prices to estimate cost';}return o;}\nif(typeof module!=='undefined')module.exports=calculatePoolTool;\nif(typeof document!=='undefined'){let form=document.getElementById('aiper-new-tool');form.addEventListener('submit',e=>{e.preventDefault();let result=document.getElementById('aiper-new-result');try{let v=Object.fromEntries(new FormData(form));let o=calculatePoolTool(form.dataset.mode,v);result.replaceChildren();for(let [k,val]of Object.entries(o)){let d=document.createElement('p');d.textContent=k+': '+(typeof val==='number'?val.toLocaleString(undefined,{maximumFractionDigits:3}):val);result.appendChild(d);}}catch(err){result.textContent=err.message;}});form.addEventListener('reset',()=>{document.getElementById('aiper-new-result').textContent='Enter your values and calculate.';});}<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estimate partial drain-and-refill water for CYA, calcium hardness, salt, borates or another dissolved reading. Pool volume (US gallons)Current concentration (ppm)Target concentration (ppm)Replacement-water concentration (ppm)Equal drain-and-refill stagesWater surface area (sq ft, optional)Water\/sewer cost per 1,000 US gallons CalculateReset Enter your values and calculate. How the estimate works Replacement fraction = (current \u2212 target) \u00f7 (current \u2212 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"aiper_reading_time":2,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-13076","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":13076,"es":13217,"fr":13203,"de":13149},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=13076"}],"version-history":[{"count":2,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13076\/revisions"}],"predecessor-version":[{"id":13130,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13076\/revisions\/13130"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}