{"id":1421,"date":"2026-05-07T06:27:42","date_gmt":"2026-05-07T06:27:42","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1421"},"modified":"2026-06-24T03:46:05","modified_gmt":"2026-06-24T03:46:05","slug":"pool-flow-rate-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-flow-rate-calculator\/","title":{"rendered":"Pool Flow Rate Calculator"},"content":{"rendered":"\n<div id=\"pool-calculator-container\" class=\"pool-calc-wrapper\">\n    <div class=\"calc-header\">\n        \n        <p>Calculate the GPM (Gallons Per Minute) needed for your pool equipment.<\/p>\n    <\/div>\n\n    <!-- Step 1: Volume Estimation -->\n    <div class=\"calc-section\">\n        <h3>1. Pool Volume (Gallons)<\/h3>\n        <div class=\"input-toggle\">\n            <button type=\"button\" class=\"toggle-btn active\" onclick=\"toggleVolumeMode('manual')\">I know my volume<\/button>\n            <button type=\"button\" class=\"toggle-btn\" onclick=\"toggleVolumeMode('estimate')\">Estimate for me<\/button>\n        <\/div>\n\n        <div id=\"manual-volume-input\">\n            <div class=\"input-group\">\n                <label for=\"pool-volume\">Total Gallons:<\/label>\n                <input type=\"number\" id=\"pool-volume\" value=\"15000\" oninput=\"calculateFlow()\">\n            <\/div>\n        <\/div>\n\n        <div id=\"estimate-volume-input\" style=\"display: none;\">\n            <div class=\"input-grid\">\n                <div class=\"input-group\">\n                    <label>Shape:<\/label>\n                    <select id=\"pool-shape\" onchange=\"calculateFlow()\">\n                        <option value=\"7.5\">Rectangle\/Square<\/option>\n                        <option value=\"5.9\">Oval\/Round<\/option>\n                        <option value=\"7.0\">Kidney<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Length (ft):<\/label>\n                    <input type=\"number\" id=\"pool-length\" value=\"30\" oninput=\"calculateFlow()\">\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Width (ft):<\/label>\n                    <input type=\"number\" id=\"pool-width\" value=\"15\" oninput=\"calculateFlow()\">\n                <\/div>\n                <div class=\"input-group\">\n                    <label>Avg. Depth (ft):<\/label>\n                    <input type=\"number\" id=\"pool-depth\" value=\"5\" oninput=\"calculateFlow()\">\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Step 2: Turnover Rate -->\n    <div class=\"calc-section\">\n        <h3>2. Desired Turnover Rate<\/h3>\n        <div class=\"input-group\">\n            <label>Hours to filter entire pool:<\/label>\n            <div class=\"slider-container\">\n                <input type=\"range\" id=\"turnover-slider\" min=\"4\" max=\"24\" value=\"8\" step=\"1\" oninput=\"updateTurnover(this.value)\">\n                <div id=\"turnover-badge\">\n                    <span id=\"turnover-display\">8<\/span> \n                    <span class=\"unit\">Hours<\/span>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Step 3: Results -->\n    <div class=\"result-section\">\n        <div class=\"result-card\">\n            <span class=\"result-label\">Required Flow Rate<\/span>\n            <div class=\"result-value\"><span id=\"gpm-result\">31.3<\/span> <small>GPM<\/small><\/div>\n            <p id=\"gph-display\">1,875 Gallons Per Hour<\/p>\n        <\/div>\n        \n        <div class=\"recommendation-box\">\n            <h4>\ud83d\udca1 Professional Recommendation:<\/h4>\n            <ul id=\"rec-list\">\n                <!-- Injected via JS -->\n            <\/ul>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n\/* CSS Styling with New Color Scheme *\/\n:root {\n    --brand-color: #1ecad3;\n}\n\n.pool-calc-wrapper {\n    max-width: 600px;\n    margin: 20px auto;\n    padding: 25px;\n    background: #ffffff;\n    border: 2px solid #f0f4f7;\n    border-radius: 16px;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    color: #2c3e50;\n    box-shadow: 0 10px 25px rgba(0,0,0,0.05);\n}\n\n.calc-header h2 { margin: 0 0 10px 0; color: var(--brand-color); font-size: 24px; text-align: center; }\n.calc-header p { font-size: 14px; color: #7f8c8d; text-align: center; margin-bottom: 25px; }\n\n.calc-section { margin-bottom: 25px; padding-bottom: 20px; border-bottom: 1px solid #edf2f7; }\n.calc-section h3 { font-size: 15px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 15px; color: #34495e; }\n\n\/* Buttons *\/\n.input-toggle { display: flex; gap: 8px; margin-bottom: 15px; }\n.toggle-btn { \n    flex: 1; padding: 10px; border: 2px solid var(--brand-color); background: transparent; \n    color: var(--brand-color); cursor: pointer; border-radius: 8px; font-weight: 600; font-size: 13px; transition: 0.3s ease;\n}\n.toggle-btn.active { background: var(--brand-color); color: white; }\n\n\/* Inputs *\/\n.input-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }\n.input-group label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 8px; color: #34495e; }\n.input-group input, .input-group select { \n    width: 100%; padding: 12px; border: 1px solid #dcdde1; border-radius: 8px; box-sizing: border-box; font-size: 14px;\n}\n.input-group input:focus { border-color: var(--brand-color); outline: none; }\n\n\/* Turnover Slider Fix *\/\n.slider-container { display: flex; flex-direction: column; align-items: center; gap: 15px; margin-top: 10px; }\n#turnover-slider { \n    width: 100%; -webkit-appearance: none; height: 8px; border-radius: 5px; background: #dcdde1; outline: none; margin: 0;\n}\n#turnover-slider::-webkit-slider-thumb { \n    -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: var(--brand-color); cursor: pointer; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.2);\n}\n\n\/* Visibility Fix for Selected Hours *\/\n#turnover-badge {\n    background: var(--brand-color);\n    color: white;\n    padding: 6px 16px;\n    border-radius: 20px;\n    font-size: 18px;\n    font-weight: 800;\n    box-shadow: 0 4px 10px rgba(30, 202, 211, 0.3);\n}\n#turnover-badge .unit { font-size: 12px; font-weight: 400; text-transform: uppercase; margin-left: 4px; }\n\n\/* Results Area *\/\n.result-section { background: #f8fdfe; border: 1px solid #e0f7f8; border-radius: 12px; padding: 25px; text-align: center; }\n.result-label { font-size: 13px; color: #7f8c8d; text-transform: uppercase; font-weight: 700; }\n.result-value { font-size: 48px; font-weight: 900; color: var(--brand-color); margin: 5px 0; }\n.result-value small { font-size: 20px; color: #2c3e50; }\n#gph-display { font-size: 14px; color: #95a5a6; font-weight: 500; }\n\n.recommendation-box { text-align: left; background: white; padding: 18px; border-radius: 10px; border-left: 5px solid var(--brand-color); margin-top: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.03); }\n.recommendation-box h4 { margin: 0 0 10px 0; font-size: 14px; color: #2c3e50; }\n.recommendation-box ul { margin: 0; padding-left: 20px; font-size: 13px; line-height: 1.8; color: #34495e; }\n\n@media (max-width: 480px) { .input-grid { grid-template-columns: 1fr; } }\n<\/style>\n\n<script>\nlet currentMode = 'manual';\n\nfunction toggleVolumeMode(mode) {\n    currentMode = mode;\n    document.getElementById('manual-volume-input').style.display = (mode === 'manual') ? 'block' : 'none';\n    document.getElementById('estimate-volume-input').style.display = (mode === 'estimate') ? 'block' : 'none';\n    \n    const btns = document.querySelectorAll('.toggle-btn');\n    btns[0].classList.toggle('active', mode === 'manual');\n    btns[1].classList.toggle('active', mode === 'estimate');\n    calculateFlow();\n}\n\nfunction updateTurnover(val) {\n    document.getElementById('turnover-display').innerText = val;\n    calculateFlow();\n}\n\nfunction calculateFlow() {\n    let volume = 0;\n    if (currentMode === 'manual') {\n        volume = parseFloat(document.getElementById('pool-volume').value) || 0;\n    } else {\n        const l = parseFloat(document.getElementById('pool-length').value) || 0;\n        const w = parseFloat(document.getElementById('pool-width').value) || 0;\n        const d = parseFloat(document.getElementById('pool-depth').value) || 0;\n        const multiplier = parseFloat(document.getElementById('pool-shape').value);\n        volume = Math.round(l * w * d * multiplier);\n    }\n\n    const hours = parseFloat(document.getElementById('turnover-slider').value);\n    const gpm = volume \/ (hours * 60);\n    const gph = volume \/ hours;\n\n    document.getElementById('gpm-result').innerText = gpm.toFixed(1);\n    document.getElementById('gph-display').innerText = Math.round(gph).toLocaleString() + ' Gallons Per Hour';\n\n    const recList = document.getElementById('rec-list');\n    let hp = \"0.5 - 0.75 HP\";\n    let filterSize = \"100-150 sq. ft.\";\n\n    if (gpm > 80) {\n        hp = \"2.0+ HP (Variable Speed Highly Recommended)\";\n        filterSize = \"400+ sq. ft.\";\n    } else if (gpm > 50) {\n        hp = \"1.0 - 1.5 HP\";\n        filterSize = \"200-300 sq. ft.\";\n    }\n\n    recList.innerHTML = `\n        <li>Estimated Pool Volume: <strong>${volume.toLocaleString()} Gallons<\/strong><\/li>\n        <li>Recommended Pump Power: <strong>${hp}<\/strong><\/li>\n        <li>Min. Filter Capacity: <strong>${filterSize}<\/strong><\/li>\n    `;\n}\n\n\/\/ Initialize\ncalculateFlow();\n<\/script>\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-turnover-rate-calculator\/\" class=\"aiper-tl-tag\">Pool Turnover Rate Calculator<\/a>\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-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>Calculate the GPM (Gallons Per Minute) needed for your pool equipment. 1. Pool Volume (Gallons) I know my volume Estimate for me Total Gallons: Shape: Rectangle\/SquareOval\/RoundKidney Length (ft): Width (ft): Avg. Depth (ft): 2. Desired Turnover Rate Hours to filter entire pool: 8 Hours Required Flow Rate 31.3 GPM 1,875 Gallons Per Hour \ud83d\udca1 Professional&#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-1421","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":1421,"de":2070,"fr":2071,"es":2072},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1421","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=1421"}],"version-history":[{"count":4,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1421\/revisions"}],"predecessor-version":[{"id":4295,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1421\/revisions\/4295"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}