{"id":1802,"date":"2026-05-21T03:15:32","date_gmt":"2026-05-21T03:15:32","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1802"},"modified":"2026-10-21T09:16:37","modified_gmt":"2026-10-21T09:16:37","slug":"pool-chemical-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-chemical-calculator\/","title":{"rendered":"Pool Chemical Calculator"},"content":{"rendered":"\n<div class=\"pool-calc-container\">\n    <div class=\"pool-calc-main\">\n        <!-- Step 1: Pool Volume -->\n        <div class=\"pool-calc-section\">\n            <label class=\"pool-calc-label\" for=\"poolVolume\">Step 1: Enter Pool Volume<\/label>\n            <div class=\"pool-calc-input-group\">\n                <input type=\"number\" id=\"poolVolume\" value=\"10000\" min=\"0\" placeholder=\"e.g. 15000\">\n                <select id=\"volumeUnit\">\n                    <option value=\"gallons\">Gallons<\/option>\n                    <option value=\"liters\">Liters<\/option>\n                    <option value=\"m3\">m\u00b3<\/option>\n                <\/select>\n            <\/div>\n            <p class=\"pool-calc-subtext\">\n                Don&#8217;t know? <a href=\"https:\/\/aiper.com\/blogs\/pool-volume-calculator\/\" target=\"_blank\" rel=\"noopener\">Use our pool volume calculator<\/a>\n            <\/p>\n        <\/div>\n\n        <!-- Step 2: Chemical Selection -->\n        <div class=\"pool-calc-section\">\n            <label class=\"pool-calc-label\">Step 2: Select Chemical Parameter<\/label>\n            <div class=\"pool-calc-tabs\">\n                <button type=\"button\" class=\"pool-calc-tab active\" onclick=\"switchParam('chlorine')\">Chlorine<\/button>\n                <button type=\"button\" class=\"pool-calc-tab\" onclick=\"switchParam('ph')\">pH<\/button>\n                <button type=\"button\" class=\"pool-calc-tab\" onclick=\"switchParam('alkalinity')\">Alkalinity<\/button>\n                <button type=\"button\" class=\"pool-calc-tab\" onclick=\"switchParam('calcium')\">Calcium<\/button>\n                <button type=\"button\" class=\"pool-calc-tab\" onclick=\"switchParam('cya')\">CYA<\/button>\n            <\/div>\n\n            <!-- Dynamic Input Panels -->\n            <div id=\"panel-chlorine\" class=\"pool-calc-panel active\">\n                <div class=\"pool-calc-field\">\n                    <label>Current Free Chlorine (ppm)<\/label>\n                    <input type=\"number\" id=\"currentChlorine\" value=\"1\" step=\"0.1\">\n                    <span class=\"field-hint\">Ideal: 1\u20133 ppm (with CYA: 5\u20137% of CYA)<\/span>\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Target Free Chlorine (ppm)<\/label>\n                    <input type=\"number\" id=\"targetChlorine\" value=\"3\" step=\"0.1\">\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Chlorine Source<\/label>\n                    <select id=\"chlorineSource\">\n                        <option value=\"liquid\">Liquid Chlorine (Sodium Hypochlorite 12.5%)\\n<\/option>\n                        <option value=\"calhypo\">Cal-Hypo Granular (68%)<\/option>\n                        <option value=\"dichlor\">Dichlor Granular (56%)<\/option>\n                        <option value=\"trichlor\">Trichlor Tablets (90%)<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            <div id=\"panel-ph\" class=\"pool-calc-panel\">\n                <div class=\"pool-calc-field\">\n                    <label>Current pH<\/label>\n                    <input type=\"number\" id=\"currentPh\" value=\"7.8\" step=\"0.1\">\n                    <span class=\"field-hint\">Ideal: 7.2\u20137.6<\/span>\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Target pH<\/label>\n                    <select id=\"targetPh\">\n                        <option value=\"7.2\">7.2<\/option>\n                        <option value=\"7.3\">7.3<\/option>\n                        <option value=\"7.4\" selected>7.4 (Ideal)<\/option>\n                        <option value=\"7.5\">7.5<\/option>\n                        <option value=\"7.6\">7.6<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            <div id=\"panel-alkalinity\" class=\"pool-calc-panel\">\n                <div class=\"pool-calc-field\">\n                    <label>Current Total Alkalinity (ppm)<\/label>\n                    <input type=\"number\" id=\"currentAlk\" value=\"70\">\n                    <span class=\"field-hint\">Ideal: 80\u2013120 ppm<\/span>\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Target Total Alkalinity (ppm)<\/label>\n                    <input type=\"number\" id=\"targetAlk\" value=\"100\">\n                <\/div>\n            <\/div>\n\n            <div id=\"panel-calcium\" class=\"pool-calc-panel\">\n                <div class=\"pool-calc-field\">\n                    <label>Current Calcium Hardness (ppm)<\/label>\n                    <input type=\"number\" id=\"currentCalc\" value=\"150\">\n                    <span class=\"field-hint\">Ideal: 200\u2013400 ppm<\/span>\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Target Calcium Hardness (ppm)<\/label>\n                    <input type=\"number\" id=\"targetCalc\" value=\"250\">\n                <\/div>\n            <\/div>\n\n            <div id=\"panel-cya\" class=\"pool-calc-panel\">\n                <div class=\"pool-calc-field\">\n                    <label>Current CYA \/ Stabilizer (ppm)<\/label>\n                    <input type=\"number\" id=\"currentCya\" value=\"20\">\n                    <span class=\"field-hint\">Ideal: 30\u201350 ppm<\/span>\n                <\/div>\n                <div class=\"pool-calc-field\">\n                    <label>Target CYA (ppm)<\/label>\n                    <input type=\"number\" id=\"targetCya\" value=\"40\">\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- Step 3: Calculation Controls -->\n        <div class=\"pool-calc-section\">\n            <div class=\"pool-calc-output-unit-row\">\n                <label for=\"outputUnit\">Preferred Output Unit:<\/label>\n                <select id=\"outputUnit\">\n                    <option value=\"lbs\">Pounds (lbs)<\/option>\n                    <option value=\"oz\">Ounces (oz \/ fl oz)<\/option>\n                    <option value=\"cups\">Cups<\/option>\n                    <option value=\"grams\">Grams (g)<\/option>\n                    <option value=\"kg\">Kilograms (kg)<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"pool-calc-actions\">\n                <button type=\"button\" class=\"pool-calc-btn calculate\" onclick=\"calculatePoolChemicals()\">Calculate it<\/button>\n                <button type=\"button\" class=\"pool-calc-btn reset\" onclick=\"resetCalculator()\">Reset<\/button>\n            <\/div>\n        <\/div>\n\n        <!-- Result Display Section -->\n        <div id=\"poolResultWrapper\" class=\"pool-calc-result-box\" style=\"display: none;\">\n            <h3>Recommended Dosage:<\/h3>\n            <div id=\"poolCalcResult\" class=\"pool-calc-result-value\"><\/div>\n            <p id=\"poolCalcNote\" class=\"pool-calc-result-note\"><\/p>\n        <\/div>\n    <\/div>\n\n    <!-- Right Side Reference Table -->\n    <div class=\"pool-calc-sidebar\">\n        <table class=\"pool-calc-table\">\n            <thead>\n                <tr>\n                    <th>Parameter<\/th>\n                    <th>Ideal Range<\/th>\n                <\/tr>\n            <\/thead>\n            <tbody>\n                <tr>\n                    <td><strong>Free Chlorine<\/strong><\/td>\n                    <td>1\u20133 ppm<\/td>\n                <\/tr>\n                <tr>\n                    <td><strong>pH<\/strong><\/td>\n                    <td>7.2\u20137.6<\/td>\n                <\/tr>\n                <tr>\n                    <td><strong>Total Alkalinity<\/strong><\/td>\n                    <td>80\u2013120 ppm<\/td>\n                <\/tr>\n                <tr>\n                    <td><strong>Calcium Hardness<\/strong><\/td>\n                    <td>200\u2013400 ppm<\/td>\n                <\/tr>\n                <tr>\n                    <td><strong>Cyanuric Acid (CYA)<\/strong><\/td>\n                    <td>30\u201350 ppm<\/td>\n                <\/tr>\n            <\/tbody>\n        <\/table>\n    <\/div>\n<\/div>\n\n<style>\n.pool-calc-container {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 30px;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    color: #333;\n    max-width: 900px;\n    margin: 20px auto;\n    background: #ffffff;\n    padding: 20px;\n    border-radius: 8px;\n    box-shadow: 0 4px 15px rgba(0,0,0,0.05);\n}\n.pool-calc-main {\n    flex: 1;\n    min-width: 300px;\n}\n.pool-calc-sidebar {\n    width: 300px;\n}\n@media (max-width: 768px) {\n    .pool-calc-sidebar { width: 100%; }\n}\n.pool-calc-section {\n    margin-bottom: 25px;\n}\n.pool-calc-label {\n    display: block;\n    font-weight: 700;\n    margin-bottom: 8px;\n    font-size: 16px;\n}\n.pool-calc-input-group {\n    display: flex;\n}\n.pool-calc-input-group input {\n    flex: 1;\n    padding: 10px;\n    border: 1px solid #ccc;\n    border-radius: 4px 0 0 4px;\n    font-size: 15px;\n}\n.pool-calc-input-group select {\n    padding: 10px;\n    border: 1px solid #ccc;\n    border-left: none;\n    border-radius: 0 4px 4px 0;\n    background: #f7f7f7;\n    font-size: 15px;\n}\n.pool-calc-subtext {\n    margin: 6px 0 0 0;\n    font-size: 13px;\n    color: #666;\n}\n.pool-calc-subtext a {\n    color: #1ecad3;\n    text-decoration: none;\n    font-weight: 600;\n}\n.pool-calc-subtext a:hover {\n    text-decoration: underline;\n}\n.pool-calc-tabs {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 5px;\n    margin-bottom: 15px;\n    border-bottom: 2px solid #f0f0f0;\n    padding-bottom: 5px;\n}\n.pool-calc-tab {\n    background: #f2f2f2;\n    border: none;\n    padding: 8px 14px;\n    cursor: pointer;\n    border-radius: 4px;\n    font-size: 14px;\n    font-weight: 600;\n    color: #555;\n    transition: all 0.2s ease;\n}\n.pool-calc-tab.active {\n    background: #1ecad3;\n    color: #fff;\n}\n.pool-calc-panel {\n    display: none;\n    background: #f9f9f9;\n    padding: 15px;\n    border-radius: 6px;\n    border-left: 4px solid #1ecad3;\n}\n.pool-calc-panel.active {\n    display: block;\n}\n.pool-calc-field {\n    margin-bottom: 15px;\n}\n.pool-calc-field:last-child {\n    margin-bottom: 0;\n}\n.pool-calc-field label {\n    display: block;\n    font-size: 14px;\n    font-weight: 600;\n    margin-bottom: 5px;\n}\n.pool-calc-field input, .pool-calc-field select {\n    width: 100%;\n    padding: 8px;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    box-sizing: border-box;\n    font-size: 14px;\n}\n.field-hint {\n    display: block;\n    font-size: 12px;\n    color: #777;\n    margin-top: 4px;\n    font-style: italic;\n}\n.pool-calc-output-unit-row {\n    margin-bottom: 15px;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n}\n.pool-calc-output-unit-row label {\n    font-size: 14px;\n    font-weight: 600;\n}\n.pool-calc-output-unit-row select {\n    padding: 6px;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n}\n\/* \u6309\u94ae\u533a\u57df\u5f39\u6027\u76d2\u5e03\u5c40\u5e03\u5c40 *\/\n.pool-calc-actions {\n    display: flex;\n    gap: 10px;\n}\n.pool-calc-btn {\n    border: none;\n    padding: 12px 24px;\n    font-size: 16px;\n    font-weight: bold;\n    border-radius: 4px;\n    cursor: pointer;\n    transition: background 0.2s ease;\n}\n.pool-calc-btn.calculate {\n    background: #1ecad3;\n    color: white;\n    flex: 3; \/* \u8ba9\u8ba1\u7b97\u6309\u94ae\u5360\u4e3b\u8981\u5bbd\u5ea6 *\/\n}\n.pool-calc-btn.calculate:hover {\n    background: #15adb5;\n}\n.pool-calc-btn.reset {\n    background: #e0e0e0;\n    color: #444;\n    flex: 1; \/* \u91cd\u7f6e\u6309\u94ae\u8f83\u5c0f *\/\n}\n.pool-calc-btn.reset:hover {\n    background: #d4d4d4;\n}\n.pool-calc-result-box {\n    margin-top: 20px;\n    padding: 15px;\n    background: #eefcfc;\n    border: 1px solid #bcecf0;\n    border-radius: 6px;\n    text-align: center;\n}\n.pool-calc-result-box h3 {\n    margin: 0 0 8px 0;\n    font-size: 16px;\n    color: #333;\n}\n.pool-calc-result-value {\n    font-size: 24px;\n    font-weight: 800;\n    color: #15adb5;\n}\n.pool-calc-result-note {\n    margin: 6px 0 0 0;\n    font-size: 13px;\n    color: #555;\n}\n.pool-calc-table {\n    width: 100%;\n    border-collapse: collapse;\n    border: 1px solid #f0f0f0;\n}\n.pool-calc-table th {\n    background: #1ecad3;\n    color: white;\n    text-align: left;\n    padding: 12px;\n    font-size: 14px;\n}\n.pool-calc-table td {\n    padding: 12px;\n    border-bottom: 1px solid #f0f0f0;\n    font-size: 14px;\n}\n.pool-calc-table tr:nth-child(even) {\n    background: #fdfdfd;\n}\n<\/style>\n\n<script>\nlet currentParameter = 'chlorine';\n\nfunction switchParam(param) {\n    currentParameter = param;\n    \/\/ \u66f4\u65b0\u6807\u7b7e\u9875\u6837\u5f0f\n    const tabs = document.querySelectorAll('.pool-calc-tab');\n    tabs.forEach(tab => {\n        tab.classList.remove('active');\n        if(tab.innerText.toLowerCase() === param) {\n            tab.classList.add('active');\n        }\n    });\n    \n    \/\/ \u5982\u679c\u662f\u901a\u8fc7\u70b9\u51fb\u4e8b\u4ef6\u89e6\u53d1\uff0c\u786e\u4fdd\u6b63\u786e\u9ad8\u4eae\u5bf9\u5e94\u6309\u94ae\n    if (event && event.target && event.target.classList.contains('pool-calc-tab')) {\n        tabs.forEach(tab => tab.classList.remove('active'));\n        event.target.classList.add('active');\n    }\n\n    \/\/ \u5207\u6362\u9762\u677f\u663e\u793a\n    document.querySelectorAll('.pool-calc-panel').forEach(panel => {\n        panel.classList.remove('active');\n    });\n    document.getElementById('panel-' + param).classList.add('active');\n}\n\nfunction resetCalculator() {\n    \/\/ 1. \u91cd\u7f6e\u7b2c\u4e00\u6b65\uff08\u6c34\u4f53\u4f53\u79ef\uff09\n    document.getElementById('poolVolume').value = \"10000\";\n    document.getElementById('volumeUnit').value = \"gallons\";\n\n    \/\/ 2. \u91cd\u7f6e\u7b2c\u4e8c\u6b65\u4e2d\u6240\u6709\u7684\u6570\u503c\u8f93\u5165\u6846\u548c\u4e0b\u62c9\u6846\n    document.getElementById('currentChlorine').value = \"1\";\n    document.getElementById('targetChlorine').value = \"3\";\n    document.getElementById('chlorineSource').value = \"liquid\";\n\n    document.getElementById('currentPh').value = \"7.8\";\n    document.getElementById('targetPh').value = \"7.4\";\n\n    document.getElementById('currentAlk').value = \"70\";\n    document.getElementById('targetAlk').value = \"100\";\n\n    document.getElementById('currentCalc').value = \"150\";\n    document.getElementById('targetCalc').value = \"250\";\n\n    document.getElementById('currentCya').value = \"20\";\n    document.getElementById('targetCya').value = \"40\";\n\n    \/\/ 3. \u91cd\u7f6e\u7b2c\u4e09\u6b65\u7684\u8f93\u51fa\u5355\u4f4d\u4e0e\u7ed3\u679c\u9762\u677f\n    document.getElementById('outputUnit').value = \"lbs\";\n    document.getElementById('poolResultWrapper').style.display = 'none';\n    document.getElementById('poolCalcResult').innerText = \"\";\n    document.getElementById('poolCalcNote').innerText = \"\";\n\n    \/\/ 4. \u5c06\u9009\u9879\u5361\u5207\u56de\u9ed8\u8ba4\u7684 'chlorine'\n    const firstTab = document.querySelectorAll('.pool-calc-tab')[0];\n    if (firstTab) {\n        currentParameter = 'chlorine';\n        document.querySelectorAll('.pool-calc-tab').forEach(tab => tab.classList.remove('active'));\n        firstTab.classList.add('active');\n        document.querySelectorAll('.pool-calc-panel').forEach(panel => panel.classList.remove('active'));\n        document.getElementById('panel-chlorine').classList.add('active');\n    }\n}\n\nfunction calculatePoolChemicals() {\n    const volumeInput = parseFloat(document.getElementById('poolVolume').value);\n    const volumeUnit = document.getElementById('volumeUnit').value;\n    if (isNaN(volumeInput) || volumeInput <= 0) {\n        alert('Please enter a valid pool volume.');\n        return;\n    }\n\n    let gallons = volumeInput;\n    if (volumeUnit === 'liters') {\n        gallons = volumeInput * 0.264172;\n    } else if (volumeUnit === 'm3') {\n        gallons = volumeInput * 264.172;\n    }\n\n    const outputUnit = document.getElementById('outputUnit').value;\n    let requiredOuncesWeight = 0; \n    let requiredOuncesFluid = 0;  \n    let isLiquid = false;\n    let chemicalName = \"\";\n    let actionWord = \"Add\";\n\n    if (currentParameter === 'chlorine') {\n        const current = parseFloat(document.getElementById('currentChlorine').value) || 0;\n        const target = parseFloat(document.getElementById('targetChlorine').value) || 0;\n        const delta = target - current;\n\n        if (delta <= 0) {\n            showResult(\"0\", \"Your Free Chlorine level is already at or above your target goal.\");\n            return;\n        }\n\n        const source = document.getElementById('chlorineSource').value;\n        if (source === 'liquid') {\n            isLiquid = true;\n            chemicalName = \"Liquid Chlorine (12.5%)\";\n            requiredOuncesFluid = (delta * 10.7) * (gallons \/ 10000);\n        } else if (source === 'calhypo') {\n            chemicalName = \"Cal-Hypo Granular (68%)\";\n            requiredOuncesWeight = (delta * 2.0) * (gallons \/ 10000);\n        } else if (source === 'dichlor') {\n            chemicalName = \"Dichlor Granular (56%)\";\n            requiredOuncesWeight = (delta * 2.4) * (gallons \/ 10000);\n        } else if (source === 'trichlor') {\n            chemicalName = \"Trichlor Tablets (90%)\";\n            requiredOuncesWeight = (delta * 1.5) * (gallons \/ 10000);\n        }\n\n    } else if (currentParameter === 'ph') {\n        const current = parseFloat(document.getElementById('currentPh').value) || 0;\n        const target = parseFloat(document.getElementById('targetPh').value) || 7.4;\n        const delta = current - target;\n\n        if (Math.abs(delta) < 0.05) {\n            showResult(\"0\", \"Your pH levels are balanced close to your target goal.\");\n            return;\n        }\n\n        if (delta > 0) {\n            isLiquid = true;\n            chemicalName = \"Muriatic Acid (31.4%)\";\n            actionWord = \"Add\";\n            requiredOuncesFluid = (delta \/ 0.2) * 10 * (gallons \/ 10000);\n        } else {\n            chemicalName = \"Soda Ash (Sodium Carbonate)\";\n            actionWord = \"Add\";\n            requiredOuncesWeight = (Math.abs(delta) \/ 0.2) * 6 * (gallons \/ 10000);\n        }\n\n    } else if (currentParameter === 'alkalinity') {\n        const current = parseFloat(document.getElementById('currentAlk').value) || 0;\n        const target = parseFloat(document.getElementById('targetAlk').value) || 0;\n        const delta = target - current;\n\n        if (delta <= 0) {\n            showResult(\"0\", \"Total Alkalinity is adequate. (If you need to lower it, use Muriatic Acid targeted in the pH module).\");\n            return;\n        }\n        chemicalName = \"Baking Soda (Sodium Bicarbonate)\";\n        requiredOuncesWeight = (delta \/ 10) * 22.4 * (gallons \/ 10000);\n\n    } else if (currentParameter === 'calcium') {\n        const current = parseFloat(document.getElementById('currentCalc').value) || 0;\n        const target = parseFloat(document.getElementById('targetCalc').value) || 0;\n        const delta = target - current;\n\n        if (delta <= 0) {\n            showResult(\"0\", \"Your Calcium Hardness is sufficient.\");\n            return;\n        }\n        chemicalName = \"Calcium Chloride (94%)\";\n        requiredOuncesWeight = (delta \/ 10) * 19.2 * (gallons \/ 10000);\n\n    } else if (currentParameter === 'cya') {\n        const current = parseFloat(document.getElementById('currentCya').value) || 0;\n        const target = parseFloat(document.getElementById('targetCya').value) || 0;\n        const delta = target - current;\n\n        if (delta <= 0) {\n            showResult(\"0\", \"Your Cyanuric Acid (Stabilizer) level is sufficient.\");\n            return;\n        }\n        chemicalName = \"Cyanuric Acid (Stabilizer)\";\n        requiredOuncesWeight = (delta \/ 10) * 13 * (gallons \/ 10000);\n    }\n\n    let baseOz = isLiquid ? requiredOuncesFluid : requiredOuncesWeight;\n    let finalAmount = 0;\n    let unitLabel = \"\";\n\n    switch(outputUnit) {\n        case 'lbs':\n            finalAmount = baseOz \/ 16;\n            unitLabel = isLiquid ? \"lbs (approx. fluid equivalent)\" : \"lbs\";\n            break;\n        case 'oz':\n            finalAmount = baseOz;\n            unitLabel = isLiquid ? \"fl oz\" : \"oz\";\n            break;\n        case 'cups':\n            finalAmount = baseOz \/ 8;\n            unitLabel = \"cups\";\n            break;\n        case 'grams':\n            finalAmount = baseOz * 28.3495;\n            unitLabel = \"g\";\n            break;\n        case 'kg':\n            finalAmount = (baseOz * 28.3495) \/ 1000;\n            unitLabel = \"kg\";\n            break;\n    }\n\n    let displayAmount = finalAmount > 10 ? finalAmount.toFixed(1) : finalAmount.toFixed(2);\n    if (parseFloat(displayAmount) === 0.00) displayAmount = \"0\";\n\n    showResult(`${actionWord} ${displayAmount} ${unitLabel}`, `of ${chemicalName} to treat your water.`);\n}\n\nfunction showResult(value, note) {\n    document.getElementById('poolResultWrapper').style.display = 'block';\n    document.getElementById('poolCalcResult').innerText = value;\n    document.getElementById('poolCalcNote').innerText = note;\n}\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">How to Balance Pool Water Chemistry<\/h2>\n\n\n\n<div class=\"schema-how-to wp-block-yoast-how-to-block\"><p class=\"schema-how-to-description\">Balancing your pool water chemistry ensures a safe, clear, and comfortable swimming environment while protecting your pool equipment from scaling or corrosion. Follow these core chronological steps to perfectly stabilize your pool water.<\/p> <ol class=\"schema-how-to-steps\"><li class=\"schema-how-to-step\" id=\"how-to-step-1779327678295\"><strong class=\"schema-how-to-step-name\">Test Your Current Pool Water Levels<\/strong> <p class=\"schema-how-to-step-text\">Begin by using a reliable liquid test kit or digital tester to measure the baseline levels of your pool. This provides the foundational data needed to determine precisely which parameters require adjustment before introducing any reactive compounds.<\/p> <\/li><li class=\"schema-how-to-step\" id=\"how-to-step-1779327708504\"><strong class=\"schema-how-to-step-name\">Adjust and Stabilize Total Alkalinity First<\/strong> <p class=\"schema-how-to-step-text\">Address Total Alkalinity before altering other metrics because it acts as a buffer for your pH levels. Bringing alkalinity into the optimal window prevents drastic, unpredictable fluctuations in your water&#8217;s acidity during subsequent chemical additions.<\/p> <\/li><li class=\"schema-how-to-step\" id=\"how-to-step-1779327717985\"><strong class=\"schema-how-to-step-name\">Balance the pH Levels<\/strong> <p class=\"schema-how-to-step-text\">Once alkalinity is stabilized, measure and correct the pH value. Keeping the water within the recommended mildly basic threshold ensures maximum swimmer eye comfort and allows your primary sanitizers to perform at peak disinfection efficiency.<\/p> <\/li><li class=\"schema-how-to-step\" id=\"how-to-step-1779327738006\"><strong class=\"schema-how-to-step-name\">Sanitize with Free Chlorine<\/strong> <p class=\"schema-how-to-step-text\">Introduce your preferred chlorine source to establish a reliable residual baseline. This active sanitizer aggressively destroys pathogens, bacteria, and microscopic organic matter, keeping the water biologically safe and clear.<\/p> <\/li><li class=\"schema-how-to-step\" id=\"how-to-step-1779327752214\"><strong class=\"schema-how-to-step-name\">Establish Cyanuric Acid Stabilizer<\/strong> <p class=\"schema-how-to-step-text\">Add Cyanuric Acid if your pool is outdoors and exposed to open air. This compound binds loosely with free chlorine molecules, shielding them from rapid degradation caused by direct ambient UV sunlight exposure.<\/p> <\/li><li class=\"schema-how-to-step\" id=\"how-to-step-1779327765061\"><strong class=\"schema-how-to-step-name\">Regulate Calcium Hardness Levels<\/strong> <p class=\"schema-how-to-step-text\">Check and adjust the dissolved calcium concentrations at the final stage. Maintaining the correct mineral saturation prevents the water from aggressively leaching calcium from plaster walls or depositing rough crusty scale on interior plumbing surfaces.<\/p> <\/li><\/ol><\/div>\n\n\n\n<div class=\"pool-kb-container\">\n    <h2 class=\"pool-kb-main-title\">Comprehensive Pool Chemistry Guide<\/h2>\n    <p class=\"pool-kb-intro\">Achieving crystal-clear, safe water requires a balance of regular testing, precise chemical adjustments, and proactive maintenance. Explore our comprehensive reference modules below to master your pool chemistry.<\/p>\n\n    <!-- SECTION 1: Ideal Pool Chemical Levels Chart -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">Ideal Pool Chemical Levels Chart<\/h3>\n        <p class=\"pool-kb-text\">Maintaining your pool parameters within established sanitary ranges prevents algae blooms, ensures swimmer comfort, and halts equipment degradation. Review the definitive optimal chemical spectrum below.<\/p>\n        \n        <div class=\"pool-kb-table-responsive\">\n            <table class=\"pool-kb-data-table\">\n                <thead>\n                    <tr>\n                        <th>Chemical Parameter<\/th>\n                        <th>Target Range<\/th>\n                        <th>Primary Purpose<\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody>\n                    <tr>\n                        <td><strong>Free Chlorine<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">1.0 \u2013 3.0 ppm<\/td>\n                        <td>Sanitizes water by actively destroying bacteria, pathogens, and organic waste.<\/td>\n                    <\/tr>\n                    <tr>\n                        <td><strong>pH Level<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">7.2 \u2013 7.6<\/td>\n                        <td>Protects pool components from corrosion and safeguards skin and eye comfort.<\/td>\n                    <\/tr>\n                    <tr>\n                        <td><strong>Total Alkalinity<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">80 \u2013 120 ppm<\/td>\n                        <td>Acts as a powerful alkaline buffer to prevent sudden, erratic shifts in pH.<\/td>\n                    <\/tr>\n                    <tr>\n                        <td><strong>Calcium Hardness<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">200 \u2013 400 ppm<\/td>\n                        <td>Prevents plaster etching and stops mineral scale from crusting pool plumbing.<\/td>\n                    <\/tr>\n                    <tr>\n                        <td><strong>Cyanuric Acid (CYA)<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">30 \u2013 50 ppm<\/td>\n                        <td>Serves as sunscreen for chlorine, shielding free molecules from rapid UV destruction.<\/td>\n                    <\/tr>\n                    <tr>\n                        <td><strong>Total Dissolved Solids<\/strong><\/td>\n                        <td class=\"pool-kb-highlight-cell\">Below 1500 ppm<\/td>\n                        <td>Measures overall chemical accumulation to ensure pure, responsive water balance.<\/td>\n                    <\/tr>\n                <\/tbody>\n            <\/table>\n        <\/div>\n    <\/div>\n\n    <!-- SECTION 2: Pool Chemical Dosage Guide -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">Pool Chemical Dosage Guide<\/h3>\n        <p class=\"pool-kb-text\">Accurate dosing prevents chemical waste and dangerous over-treatment. As a standard baseline rule, treating a standard ten-thousand-gallon pool requires approximately ten point seven fluid ounces of standard liquid chlorine or two ounces of high-strength granular calcium hypochlorite to successfully raise free chlorine levels by exactly one part per million.<\/p>\n        <p class=\"pool-kb-text\">When adjusting water acidity, introducing roughly ten fluid ounces of standard strength muriatic acid will drop your overall pH value by approximately zero point two units in a ten-thousand-gallon body of water. Conversely, raising total alkalinity by ten parts per million requires adding one point four pounds of premium sodium bicarbonate, while bumping calcium levels by that same ten part per million metric requires one point two pounds of granular calcium chloride.<\/p>\n    <\/div>\n\n    <!-- SECTION 3: How Pool Chemicals Work Together -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">How Pool Chemicals Work Together<\/h3>\n        <p class=\"pool-kb-text\">Pool water chemistry operates as an interconnected ecosystem where altering a single parameter triggers a cascading reaction across other metrics. The fundamental relationship exists between total alkalinity and pH, where alkalinity functions as a specialized structural anchor that stabilizes pH, ensuring that subsequent sanitizing treatments do not cause erratic water balance shifts.<\/p>\n        <p class=\"pool-kb-text\">Similarly, your ambient pH value directly dictates the ultimate biological efficiency of your free chlorine. When pH spikes too high, your chlorine becomes sluggish and structurally inhibited, requiring significantly higher concentrations to sanitize the pool, whereas integrating cyanuric acid creates a protective molecular shield that anchors chlorine against solar breakdown without compromising its sanitizing potential.<\/p>\n    <\/div>\n\n    <!-- SECTION 4: Common Pool Chemistry Mistakes -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">Common Pool Chemistry Mistakes<\/h3>\n        <p class=\"pool-kb-text\">A frequent mistake made by pool operators is attempting to fine-tune pH levels before stabilizing total alkalinity, which inevitably leads to frustrating pH bounce where water acidity swings wildly between aggressive and scaling states. Another widespread oversight is adding heavy doses of pool shock directly during peak daylight hours, which allows ambient solar radiation to burn away the active sanitizing elements before they can successfully clean the water.<\/p>\n        <p class=\"pool-kb-text\">Additionally, many owners neglect to track cyanuric acid buildup over time when exclusively utilizing stabilized trichlor chlorine tablets. This continuous accumulation eventually triggers a restrictive condition known as chlorine lock, rendering your primary sanitizer completely inert and leaving the pool highly vulnerable to sudden, severe green algae outbreaks despite high chemical readings.<\/p>\n    <\/div>\n\n    <!-- SECTION 5: Pool Chemical Safety Tips -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">Pool Chemical Safety Tips<\/h3>\n        <p class=\"pool-kb-text\">Safe handling of concentrated swimming pool compounds requires absolute adherence to strict defensive protocols to avoid hazardous chemical reactions. Always store all chemical buckets upright in a well-ventilated, thoroughly dry, climate-controlled environment completely out of reach of children and direct scorching sunlight.<\/p>\n        <p class=\"pool-kb-text\">When diluting chemicals for application, always add the dry chemical directly into a bucket filled with clean pool water, and never pour water into a concentrated chemical mass to prevent explosive thermal splashing. Avoid mixing different types of dry chlorine, such as calcium hypochlorite and trichlor tablets, as combining these formulas can trigger violent chemical combustion and release highly toxic gasses.<\/p>\n    <\/div>\n\n    <!-- SECTION 6: When to Test Your Pool Water -->\n    <div class=\"pool-kb-card\">\n        <h3 class=\"pool-kb-section-title\">When to Test Your Pool Water<\/h3>\n        <p class=\"pool-kb-text\">Establishing a rigorous, consistent testing cadence forms the backbone of preventive pool care. Execute basic testing for pH and free chlorine levels at least twice every single week during periods of active seasonal swimming to capture shifting baseline data before visible cloudiness takes hold.<\/p>\n        <p class=\"pool-kb-text\">Perform a comprehensive analysis of total alkalinity, calcium hardness, and cyanuric acid concentrations once every single month since these parameters shift much more gradually. Always execute immediate emergency water tests following heavy rainstorms, high-occupancy pool parties, or intense heatwaves to rapidly counteract sudden organic contaminants and preserve absolute water clarity.<\/p>\n    <\/div>\n<\/div>\n\n<style>\n\/* \u77e5\u8bc6\u5e93\u6a21\u5757\u72ec\u7acb\u6837\u5f0f\uff0c\u65e0\u9879\u76ee\u7b26\u53f7\uff0c\u5b8c\u7f8e\u9002\u914d #1ecad3 \u4e3b\u9898 *\/\n.pool-kb-container {\n    max-width: 900px;\n    margin: 40px auto;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    color: #333;\n    background: #ffffff;\n    padding: 30px;\n    border-radius: 8px;\n    box-shadow: 0 4px 15px rgba(0,0,0,0.05);\n}\n.pool-kb-main-title {\n    font-size: 26px;\n    font-weight: 800;\n    margin-top: 0;\n    margin-bottom: 12px;\n    color: #222;\n    text-align: center;\n}\n.pool-kb-intro {\n    font-size: 15px;\n    line-height: 1.6;\n    color: #666;\n    text-align: center;\n    margin-bottom: 40px;\n    max-width: 700px;\n    margin-left: auto;\n    margin-right: auto;\n}\n.pool-kb-card {\n    margin-bottom: 35px;\n    padding-bottom: 25px;\n    border-bottom: 1px solid #eaeaea;\n}\n.pool-kb-card:last-child {\n    margin-bottom: 0;\n    padding-bottom: 0;\n    border-bottom: none;\n}\n.pool-kb-section-title {\n    font-size: 20px;\n    font-weight: 700;\n    margin-top: 0;\n    margin-bottom: 14px;\n    color: #15adb5; \/* \u642d\u914d\u8ba1\u7b97\u5668\u4e3b\u9898\u8272\u8c03 *\/\n}\n.pool-kb-text {\n    font-size: 14.5px;\n    line-height: 1.7;\n    color: #444;\n    margin-top: 0;\n    margin-bottom: 14px;\n}\n.pool-kb-text:last-child {\n    margin-bottom: 0;\n}\n\/* \u54cd\u5e94\u5f0f\u6570\u636e\u8868\u683c\u8bbe\u8ba1 *\/\n.pool-kb-table-responsive {\n    width: 100%;\n    overflow-x: auto;\n    margin-top: 15px;\n    border-radius: 6px;\n    border: 1px solid #e0e0e0;\n}\n.pool-kb-data-table {\n    width: 100%;\n    border-collapse: collapse;\n    text-align: left;\n    min-width: 500px;\n}\n.pool-kb-data-table th {\n    background: #1ecad3;\n    color: #ffffff;\n    padding: 12px 16px;\n    font-size: 14.5px;\n    font-weight: 700;\n}\n.pool-kb-data-table td {\n    padding: 12px 16px;\n    border-bottom: 1px solid #f0f0f0;\n    font-size: 14px;\n    color: #444;\n    line-height: 1.5;\n}\n.pool-kb-data-table tr:last-child td {\n    border-bottom: none;\n}\n.pool-kb-data-table tr:nth-child(even) {\n    background: #fcfdfd;\n}\n.pool-kb-highlight-cell {\n    font-weight: 700;\n    color: #15adb5;\n    white-space: nowrap;\n}\n<\/style>\n\n\n\n<h2 class=\"wp-block-heading\">Pool Chemistry FAQs<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1779328140621\"><strong class=\"schema-faq-question\">What is the most important chemical to balance first in a pool?<\/strong> <p class=\"schema-faq-answer\">Total Alkalinity is always the most critical parameter to balance first. Total Alkalinity acts as a protective shield and buffer for your pH level. Adjusting your alkalinity beforehand prevents unpredictable, drastic swings in your pH values when you introduce other treatment compounds later on.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1779333053085\"><strong class=\"schema-faq-question\">Why is my pool cloudy even though the chlorine levels are correct?<\/strong> <p class=\"schema-faq-answer\">Cloudy water despite adequate chlorine often indicates an underlying pH imbalance that renders the sanitizer sluggish, a clogged filtration system, or an early stage algae infestation. It can also mean your Calcium Hardness or Total Dissolved Solids have risen too high, causing active minerals to fall out of solution and suspend in the water.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1779333077653\"><strong class=\"schema-faq-question\">How long should I wait to swim after adding pool chemicals?<\/strong> <p class=\"schema-faq-answer\">The general waiting window is at least twenty to thirty minutes after adding basic balancing chemicals like liquid chlorine, baking soda, or calcium chloride, provided your filtration pump is running at high speed to circulate the water. However, if you are applying heavy shock treatments or concentrated muriatic acid, you must wait at least four hours, or until a comprehensive test confirmation shows free chlorine drops below four parts per million and your pH normalizes.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1779333095767\"><strong class=\"schema-faq-question\">What causes chlorine lock and how can I fix it?<\/strong> <p class=\"schema-faq-answer\">Chlorine lock occurs when your Cyanuric Acid levels rise excessively, usually from the long-term use of stabilized chlorine tablets. This high concentration over-stabilizes the water and prevents free chlorine from oxidizing contaminants. The only dependable remedy to break chlorine lock is partial draining and refilling your swimming pool with fresh, non-stabilized water to physically dilute the cyanuric acid concentration.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1779333302798\"><strong class=\"schema-faq-question\">Can I mix different types of dry chlorine granules together?<\/strong> <p class=\"schema-faq-answer\">You must never mix different types of dry chlorine, such as combining calcium hypochlorite with trichlor or dichlor granules. Mixing these highly concentrated dry formulas triggers an immediate, volatile chemical reaction that can cause violent explosions, intense fire hazards, and the rapid release of dangerous, highly toxic chlorine gas clouds.<\/p> <\/div> <\/div>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">More Tools<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/pool-fill-time-calculator\/\" class=\"aiper-tl-tag\">Pool Fill Time Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-turnover-rate-calculator\/\" class=\"aiper-tl-tag\">Pool Turnover Rate Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-saturation-index-calculator\/\" class=\"aiper-tl-tag\">Pool Saturation Index Calculator<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Related Articles<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/how-to-lower-alkalinity-in-pool\/\" class=\"aiper-tl-tag\">How to Lower Alkalinity in a Pool (and When You Actually Need To)<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-robot-gets-stuck-on-main-drain\/\" class=\"aiper-tl-tag\">Why Does Your Pool Robot Get Stuck on the Main Drain?<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-winterize-inground-pool\/\" class=\"aiper-tl-tag\">How to Winterize an Inground Pool: Step-by-Step<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-get-rid-of-algae-in-pool\/\" class=\"aiper-tl-tag\">The Complete Guide to Pool Algae: How to Identify, Treat, and Prevent Every Type<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.aiper-tool-links{margin:2.5rem 0 1.5rem;padding:1.5rem 1.75rem;background:linear-gradient(135deg,rgba(148,134,247,.04),rgba(30,202,211,.04));border-radius:12px;border:1px solid rgba(148,134,247,.10)}\n.aiper-tl-section{margin-bottom:1.25rem}\n.aiper-tl-section:last-child{margin-bottom:0}\n.aiper-tl-heading{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8899aa;margin:0 0 .65rem}\n.aiper-tl-tags{display:flex;flex-wrap:wrap;gap:.5rem}\n.aiper-tl-tag{display:inline-block;padding:.4rem .95rem;font-size:.82rem;font-weight:500;line-height:1.35;color:#9486f7;background:rgba(148,134,247,.055);border:1px solid rgba(30,202,211,.25);border-radius:22px;text-decoration:none;transition:all .18s}\n.aiper-tl-tag:hover{background:#1ecad3;color:#fff;border-color:#1ecad3;box-shadow:0 2px 10px rgba(30,202,211,.22)}\n<\/style>","protected":false},"excerpt":{"rendered":"<p>Step 1: Enter Pool Volume GallonsLitersm\u00b3 Don&#8217;t know? Use our pool volume calculator Step 2: Select Chemical Parameter Chlorine pH Alkalinity Calcium CYA Current Free Chlorine (ppm) Ideal: 1\u20133 ppm (with CYA: 5\u20137% of CYA) Target Free Chlorine (ppm) Chlorine Source Liquid Chlorine (Sodium Hypochlorite 12.5%)\\nCal-Hypo Granular (68%)Dichlor Granular (56%)Trichlor Tablets (90%) Current pH Ideal:&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1802","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":1802,"de":2112,"fr":2113,"es":2114},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1802","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=1802"}],"version-history":[{"count":6,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1802\/revisions"}],"predecessor-version":[{"id":11901,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1802\/revisions\/11901"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}