Conversions Flow Rate Calculator (2024 Guide)

Convert flow rate values instantly, compare the same quantity across units, and preview engineering-friendly equivalents.

Flow rate inputs

Enter Value A and choose the unit you know; Value B updates automatically.

How to Use This Calculator

Provide a flow value using Value A plus the corresponding unit. The tool instantly recalculates Value B whenever you change the number or unit, keeping both sides in sync.

Click Calculate to lock in the conversion, or use inline edits with the 100ms debounce. Presets reset the form to common scenarios, and you can download the reference table after a successful calculation.

Methodology

The calculator normalizes every entry to m³/s internally and reconverts it to the selected destination unit. Equivalent outputs rely on the same base for consistent comparison.

Keep track of unit families (US vs Imperial) and always confirm temperature or density assumptions if you later convert volumetric flow to mass flow.

Engineering notes

Use SI units, preserve dimensional consistency, and verify safety factors before applying conversions in designs.

Key entities: Conversions, Flow, Rate, Value A, Unit A, Value B, Unit B.

Inputs used by this calculator

  • Value A
  • Unit A
  • Value B
  • Unit B

Consistency checks

The tool enforces valid units, numerical inputs, and consistent rounding boundaries.

Full original guide (expanded)

<!-- BODY scripts start (AdSense) -->
  <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?clieng-white shadow-sm sticky top-0 z-50">
      <nav class="container mx-auto px-4 lg:px-6 py-4" aria-label="Primary">
        <div class="flex justify-between items-center">
          <a href="https://calcdomain.com" class="text-2xl font-bold text-blue-600">CalcDomain</a>
          <div class="w-full max-w-md hidden md:block mx-8">
            <div class="relative">
              <input type="search" id="search-input" placeholder="Search for a calculator..." class="w-full py-2 px-4 pr-10 border border-gray-300 rounded-full focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" autocomplete="off" />
              <svg class="w-5 h-5 absolute right-4 top-1/2 -translate-y-1/2 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 0 0114 0z"></path></svg>
              <div id="search-results" class="absolute top-full left-0 right-0 bg-white shadow-lg rounded-lg mt-2 max-h-96 overflow-y-auto z-50 hidden border border-gray-200"></div>
            </div>
          </div>
          <div class="hidden md:flex items-center space-x-6">
            <a href="https://calcdomain.com/search" class="text-gray-700 hover:text-blue-600 transition-colors">Advanced Search</a>
            <a href="https://calcdomain.com/#categories" class="text-gray-700 hover:text-blue-600 transition-colors">Categories</a>
          </div>
          <button id="mobile-menu-toggle" class="md:hidden p-2" aria-controls="mobile-menu" aria-expanded="false" aria-label="Open menu" type="button">
            <svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg>
          </button>
        </div>
        <nav id="mobile-menu" class="md:hidden mt-4 hidden" aria-label="Mobile menu" role="navigation">
          <div class="mb-4">
            <div class="relative">
              <input type="search" id="mobile-search-input" placeholder="Search calculators..." class="w-full py-3 px-4 pr-10 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />
              <svg class="w-5 h-5 absolute right-4 top-1/2 -translate-y-1/2 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 0 0114 0z"></path></svg>
            </div>
          </div>
          <div class="space-y-2">
            <a href="https://calcdomain.com/search" class="block py-2 text-gray-700 hover:text-blue-600">Advanced Search</a>
            <a href="https://calcdomain.com/#categories" class="block py-2 text-gray-700 hover:text-blue-600">Categories</a>
          </div>
        </nav>
      </nav>
    </header>

  <div class="container mx-auto px-4 py-8">
    <!-- Breadcrumb -->
    <nav id="breadcrumb-container" class="text-sm mb-4 text-gray-600">
  <ol class="flex flex-wrap items-center gap-1">
    <li><a href="https://calcdomain.com" class="text-blue-600 hover:underline">Home</a></li>
    <li class="text-gray-400">/</li>
    <li><a href="https://calcdomain.com/categories/math-conversions" class="text-blue-600 hover:underline">Math &amp; Conversion Calculators</a></li>
    <li class="text-gray-400">/</li>
    <li><a href="https://calcdomain.com/subcategories/math-conversions-measurement-unit-conversions" class="text-blue-600 hover:underline">Measurement Unit Conversions: Tools &amp;</a></li>
    <li class="text-gray-400">/</li>
    <li><span class="text-gray-800">Conversions Flow Rate Calculator</span></li>
  </ol>
</nav>

    <div class="flex flex-col lg:flex-row gap-8">
      <main class="w-full lg:w-2/3">
  <h1>Conversions Flow Rate Calculator</h1>
        <div class="bg-white p-6 rounded-lg shadow-md">
          <header class="bg-white shadow-sm sticky top-0 z-50">
      <nav class="container mx-auto px-4 lg:px-6 py-4" aria-label="Primary">
        <div class="flex justify-between items-center">
          <a
            href="https://calcdomain.com"
            class="text-2xl font-bold text-blue-600"
            >CalcDomain</a
          >
          <div class="w-full max-w-md hidden md:block mx-8">
            <div class="relative">
              <input
                type="search"
                id="search-input"
                placeholder="Search for a calculator..."
                class="w-full py-2 px-4 pr-10 border border-gray-300 rounded-full focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
                autocomplete="off"
              />
              <svg
                class="w-5 h-5 absolute right-4 top-1/2 -translate-y-1/2 text-gray-400"
                fill="none"
                stroke="currentColor"
                viewBox="0 0 24 24"
              >
                <path
                  stroke-linecap="round"
                  stroke-linejoin="round"
                  stroke-width="2"
                  d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
                ></path>
              </svg>
              <div
                id="search-results"
                class="absolute top-full left-0 right-0 bg-white shadow-lg rounded-lg mt-2 max-h-96 overflow-y-auto z-50 hidden border border-gray-200"
              ></div>
            </div>
          </div>
          <div class="hidden md:flex items-center space-x-6">
            <a
              href="https://calcdomain.com/search"
              class="text-gray-700 hover:text-blue-600 transition-colors"
              >Advanced Search</a
            >
            <a
              href="https://calcdomain.com/#categories"
              class="text-gray-700 hover:text-blue-600 transition-colors"
              >Categories</a
            >
          </div>
          <button
            id="mobile-menu-toggle"
            class="md:hidden p-2"
            aria-controls="mobile-menu"
            aria-expanded="false"
            aria-label="Open menu"
            type="button"
          >
            <svg
              class="w-6 h-6"
              fill="none"
              stroke="currentColor"
              viewBox="0 0 24 24"
              aria-hidden="true"
            >
              <path
                stroke-linecap="round"
                stroke-linejoin="round"
                stroke-width="2"
                d="M4 6h16M4 12h16M4 18h16"
              ></path>
            </svg>
          </button>
        </div>
        <nav
          id="mobile-menu"
          class="md:hidden mt-4 hidden"
          aria-label="Mobile menu"
          role="navigation"
        >
          <div class="mb-4">
            <div class="relative">
              <input
                type="search"
                id="mobile-search-input"
                placeholder="Search calculators..."
                class="w-full py-3 px-4 pr-10 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
              />
              <svg
                class="w-5 h-5 absolute right-4 top-1/2 -translate-y-1/2 text-gray-400"
                fill="none"
                stroke="currentColor"
                viewBox="0 0 24 24"
                aria-hidden="true"
              >
                <path
                  stroke-linecap="round"
                  stroke-linejoin="round"
                  stroke-width="2"
                  d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
                ></path>
              </svg>
            </div>
          </div>
          <div class="space-y-2">
            <a
              href="https://calcdomain.com/search"
              class="block py-2 text-gray-700 hover:text-blue-600"
              >Advanced Search</a
            >
            <a
              href="https://calcdomain.com/#categories"
              class="block py-2 text-gray-700 hover:text-blue-600"
              >Categories</a
            >
          </div>
        </nav>
      </nav>
    </header>

          <!-- Popular presets -->
          <div class="flex flex-wrap gap-2 mb-5">
            <button class="pill pill-active" data-val="10" data-unit="usgpm">10 US gpm</button>
            <button class="pill" data-val="1" data-unit="m3h">1 m³/h</button>
            <button class="pill" data-val="2.5" data-unit="lps">2.5 L/s</button>
            <button class="pill" data-val="100" data-unit="cfm">100 CFM</button>
          </div>

          <!-- Main converter (A -> B, bi-directional) -->
          <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
            <div class="border rounded-md p-4">
              <label class="block text-sm font-medium mb-1">Value A</label>
              <input id="val-a" type="number" step="0.000001" value="10" class="w-full border rounded-md px-3 py-2 mb-3" />
              <label class="block text-sm font-medium mb-1">Unit A</label>
              <select id="unit-a" class="w-full border rounded-md px-3 py-2">
                <!-- options filled by JS -->
              </select>
            </div>
            <div class="border rounded-md p-4">
              <label class="block text-sm font-medium mb-1">Value B</label>
              <input id="val-b" type="number" step="0.000001" class="w-full border rounded-md px-3 py-2 mb-3" />
              <label class="block text-sm font-medium mb-1">Unit B</label>
              <select id="unit-b" class="w-full border rounded-md px-3 py-2">
                <!-- options filled by JS -->
              </select>
            </div>
          </div>

          <!-- Secondary panel: common equivalents -->
          <h2 class="text-lg font-semibold mb-3">Common equivalents</h2>
          <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6 text-sm">
            <div class="bg-gray-50 border rounded-md p-3">
              <p class="text-xs text-gray-500">L/s</p>
              <p id="out-lps" class="font-semibold text-lg">—</p>
            </div>
            <div class="bg-gray-50 border rounded-md p-3">
              <p class="text-xs text-gray-500">US gpm</p>
              <p id="out-usgpm" class="font-semibold text-lg">—</p>
            </div>
            <div class="bg-gray-50 border rounded-md p-3">
              <p class="text-xs text-gray-500">m³/h</p>
              <p id="out-m3h" class="font-semibold text-lg">—</p>
            </div>
          </div>

          <!-- Quick reference table -->
          <h2 class="text-lg font-semibold mb-3">Quick US gpm → L/s table</h2>
          <div class="overflow-x-auto mb-6">
            <table class="min-w-full text-left text-sm">
              <thead>
                <tr class="bg-gray-100">
                  <th class="py-1 px-2">US gpm</th>
                  <th class="py-1 px-2">L/s</th>
                  <th class="py-1 px-2">m³/h</th>
                </tr>
              </thead>
              <tbody id="tbl-body">
                <!-- rows filled by JS -->
              </tbody>
            </table>
          </div>

          <article class="prose">
            <h2>Formulas & unit definitions</h2>
            <div class="formula-box">
              <p><strong>Base:</strong> this tool uses m³/s internally.</p>
              <ul>
                <li>1 L = 1×10<sup>−3</sup> m³</li>
                <li>1 US gal = 3.785411784 L</li>
                <li>1 Imp gal = 4.54609 L</li>
                <li>1 ft³ = 0.028316846592 m³</li>
                <li>1 in³ = 1.6387064×10<sup>−5</sup> m³</li>
              </ul>
            </div>
            <h3>Examples</h3>
            <p><strong>US gpm → L/s</strong>: L/s = gpm × 3.785411784 ÷ 60 = gpm × 0.0630901964</p>
            <p><strong>m³/h → L/min</strong>: L/min = (m³/h × 1000) ÷ 60 = m³/h × 16.6667</p>
            <h2>FAQ</h2>
            <h3>US vs Imperial gallons?</h3>
            <p>They are different by ~20%. Choose the correct gallon family (US or Imperial) in the dropdowns.</p>
            <h3>When to use L/s vs m³/h?</h3>
            <p>L/s is frequent in lab/process calculations; m³/h is common in HVAC, water, and industrial specifications.</p>
          </article>
        </div>



            <section class="mt-10" id="author">
              <h2 class="text-xl font-semibold mb-4">About the author</h2>
              <div class="bg-gray-50 border border-gray-200 rounded-lg p-4">
                <p class="text-sm text-gray-700">
                  <a href="https://www.linkedin.com/in/ugocandido92821/" class="text-blue-600 hover:underline" target="_blank" rel="noopener">Ugo Candido</a>
                  builds financial tools and educational resources to help
                  readers make better money decisions. He focuses on practical,
                  transparent models that reflect how lenders calculate
                  payments and total cost of ownership.
                </p>
                <p class="text-sm text-gray-700 mt-3">
                  Contact: <a href="mailto:info@calcdomain.com" class="text-blue-600 hover:underline">info@calcdomain.com</a>
                </p>
              </div>
            </section>

            <section class="mt-10" id="editorial-policy">
              <h2 class="text-xl font-semibold mb-4">Editorial policy</h2>
              <div class="bg-gray-50 border border-gray-200 rounded-lg p-4">
                <p class="text-sm text-gray-700">
                  CalcDomain content is created for educational purposes and is
                  reviewed for clarity, accuracy, and transparency. We do not
                  accept paid placements that influence calculator outputs.
                  Inputs and assumptions are shown directly in the interface so
                  you can verify how results are produced.
                </p>
              </div>
            </section>

            <section class="mt-10" id="methodology">
              <h2 class="text-xl font-semibold mb-4">Methodology</h2>
              <div class="bg-gray-50 border border-gray-200 rounded-lg p-4">
                <p class="text-sm text-gray-700">
                  Results use standard formulas and the values you provide.
                  Figures are estimates and may differ from lender quotes.
                  For decisions that require professional guidance, consult a
                  licensed advisor.
                </p>
              </div>
            </section>

        
            <section class="mt-10" id="sources">
              <h2 class="text-xl font-semibold mb-4">Sources</h2>
              <div class="bg-gray-50 border border-gray-200 rounded-lg p-4">
                <ul class="list-disc list-inside text-sm text-gray-700 space-y-1">
                  <li>
                    <a href="https://www.nist.gov/pml/owm/metric-si/si-units" class="text-blue-600 hover:underline" target="_blank" rel="noopener">
                      NIST: The International System of Units (SI)
                    </a>
                  </li>
                  <li>
                    <a href="https://openstax.org/details/books/college-algebra" class="text-blue-600 hover:underline" target="_blank" rel="noopener">
                      OpenStax: College Algebra
                    </a>
                  </li>
                </ul>
              </div>
            </section>

        





<section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Engineering notes</h2><p class="text-sm text-gray-700">Use SI units and keep dimensional consistency. Verify boundary conditions, safety factors, and design limits.</p><p class="text-sm text-gray-700 mt-2">Key entities: Conversions, Flow, Rate, Value A, Unit A, Value B, Unit B.</p></section><section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Inputs used by this calculator</h2><ul class="text-sm text-gray-700 list-disc pl-5"><li>Value A</li><li>Unit A</li><li>Value B</li><li>Unit B</li></ul></section><section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Consistency checks</h2><p class="text-sm text-gray-700">Checks: consistent units, allowed ranges, technical rounding.</p></section><section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Engineering notes</h2><p class="text-sm text-gray-700">Use SI units and keep dimensional consistency. Verify boundary conditions, safety factors, and design limits.</p><p class="text-sm text-gray-700 mt-2">Key entities: Conversions, Flow, Rate, Value A, Unit A, Value B, Unit B.</p></section><section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Inputs used by this calculator</h2><ul class="text-sm text-gray-700 list-disc pl-5"><li>Value A</li><li>Unit A</li><li>Value B</li><li>Unit B</li></ul></section><section class="bg-white p-4 rounded-lg shadow-md mt-6"><h2 class="text-lg font-semibold mb-2">Consistency checks</h2><p class="text-sm text-gray-700">Checks: consistent units, allowed ranges, technical rounding.</p></section><!-- %%EEAT_STRIP%% -->
<!-- %%QUALITY_BLOCKS%% -->
<!-- %%FAQ_JSONLD%% -->
</main>

      <aside class="w-full lg:w-1/3">
        <div class="bg-white p-4 rounded-lg shadow-md mb-6">
          <h2 class="text-lg font-semibold mb-3">Related fluid tools</h2>
          <ul class="space-y-2">
            <li><a href="https://calcdomain.com/gpm-to-lps" class="text-blue-600 hover:underline">GPM to LPS</a></li>
            <li><a href="https://calcdomain.com/viscosity-converter" class="text-blue-600 hover:underline">Viscosity converter</a></li>
            <li><a href="https://calcdomain.com/feet-of-water-to-psi" class="text-blue-600 hover:underline">Feet of water to PSI</a></li>
            <li><a href="https://calcdomain.com/conversions-volume-and-capacity" class="text-blue-600 hover:underline">Volume & capacity</a></li>
            <li><a href="https://calcdomain.com/cubic-feet-to-gallons" class="text-blue-600 hover:underline">Cubic feet to gallons</a></li>
          </ul>
        </div>
        <div class="bg-white p-4 rounded-lg shadow-md">
          <h2 class="text-lg font-semibold mb-3">Engineer’s note</h2>
          <p class="text-sm text-gray-700">State clearly which temperature and density assumptions you use if you later convert volume flow to mass flow.</p>
        </div>
      </aside>
    </div>
  </div>

  <footer class="bg-gray-900 text-white py-12">
    <div class="container mx-auto px-4">
      <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
        <div>
          <h3 class="text-2xl font-bold mb-4">CalcDomain</h3>
          <p class="text-gray-400 mb-4">Your trusted source for free online calculators. Accurate, fast, and reliable calculations for every need.</p>
        </div>
        <div>
          <h4 class="text-lg font-semibold mb-4">Categories</h4>
          <ul class="space-y-2">
            <li><a href="https://calcdomain.com/finance" class="text-gray-400 hover:text-white">Finance</a></li>
            <li><a href="https://calcdomain.com/health-fitness" class="text-gray-400 hover:text-white">Health & Fitness</a></li>
            <li><a href="https://calcdomain.com/math-conversions" class="text-gray-400 hover:text-white">Math & Conversions</a></li>
            <li><a href="https://calcdomain.com/lifestyle-everyday" class="text-gray-400 hover:text-white">Lifestyle & Everyday</a></li>
            <li><a href="https://calcdomain.com/construction-diy" class="text-gray-400 hover:text-white">Construction & DIY</a></li>
          </ul>
        </div>
        <div>
          <h4 class="text-lg font-semibold mb-4">Popular Tools</h4>
          <ul class="space-y-2">
            <li><a href="https://calcdomain.com/mortgage-payment" class="text-gray-400 hover:text-white">Mortgage Calculator</a></li>
            <li><a href="https://calcdomain.com/percentage-calculator" class="text-gray-400 hover:text-white">Percentage Calculator</a></li>
            <li><a href="https://calcdomain.com/bmi-calculator" class="text-gray-400 hover:text-white">BMI Calculator</a></li>
            <li><a href="https://calcdomain.com/auto-loan-calculator" class="text-gray-400 hover:text-white">Auto Loan Calculator</a></li>
            <li><a href="https://calcdomain.com/house-affordability" class="text-gray-400 hover:text-white">House Affordability</a></li>
          </ul>
        </div>
        <div>
          <h4 class="text-lg font-semibold mb-4">Support</h4>
          <ul class="space-y-2">
            <li><a href="https://calcdomain.com/about" class="text-gray-400 hover:text-white">About Us</a></li>
            <li><a href="https://calcdomain.com/contact" class="text-gray-400 hover:text-white">Contact</a></li>
            <li><a href="https://calcdomain.com/privacy" class="text-gray-400 hover:text-white">Privacy Policy</a></li>
            <li><a href="https://calcdomain.com/terms" class="text-gray-400 hover:text-white">Terms of Service</a></li>
            <li><a href="https://calcdomain.com/sitemap.xml" class="text-gray-400 hover:text-white">Site Map</a></li>
          </ul>
        </div>
      </div>
      <div class="border-t border-gray-800 mt-8 pt-8 text-center text-gray-400">
        <p>&copy; 2025 CalcDomain. All Rights Reserved. | Free Online Calculators for Everyone</p>
      </div>
    </div>
  </footer>

  <script src="/assets/js/mobile-menu.js"></script>
  <script src="/search.js"></script>

  <script>
    // ----- Units dictionary: factor to base (m^3/s) -----
    const UNITS = [
      { key: 'm3s',  label: 'm³/s',                  toBase: 1,                     fromBase: 1 },
      { key: 'm3h',  label: 'm³/h',                  toBase: 1/3600,               fromBase: 3600 },
      { key: 'lps',  label: 'L/s',                   toBase: 1e-3,                 fromBase: 1e3 },
      { key: 'lpm',  label: 'L/min',                 toBase: 1e-3/60,              fromBase: 60e3 },
      { key: 'lph',  label: 'L/h',                   toBase: 1e-3/3600,            fromBase: 3600e3 },

      { key: 'usgpm',label: 'US gpm',                toBase: 0.003785411784/60,    fromBase: 60/0.003785411784 },
      { key: 'usgps',label: 'US gal/s',              toBase: 0.003785411784,       fromBase: 1/0.003785411784 },
      { key: 'usgph',label: 'US gal/h',              toBase: 0.003785411784/3600,  fromBase: 3600/0.003785411784 },

      { key: 'imgpm',label: 'Imperial gpm',          toBase: 0.00454609/60,        fromBase: 60/0.00454609 },
      { key: 'imgps',label: 'Imperial gal/s',        toBase: 0.00454609,           fromBase: 1/0.00454609 },
      { key: 'imgph',label: 'Imperial gal/h',        toBase: 0.00454609/3600,      fromBase: 3600/0.00454609 },

      { key: 'ft3s', label: 'ft³/s',                 toBase: 0.028316846592,       fromBase: 1/0.028316846592 },
      { key: 'cfm',  label: 'ft³/min (CFM)',         toBase: 0.028316846592/60,    fromBase: 60/0.028316846592 },
      { key: 'ft3h', label: 'ft³/h',                 toBase: 0.028316846592/3600,  fromBase: 3600/0.028316846592 },

      { key: 'in3s', label: 'in³/s',                 toBase: 1.6387064e-5,         fromBase: 1/1.6387064e-5 },
      { key: 'in3m', label: 'in³/min',               toBase: 1.6387064e-5/60,      fromBase: 60/1.6387064e-5 },
      { key: 'in3h', label: 'in³/h',                 toBase: 1.6387064e-5/3600,    fromBase: 3600/1.6387064e-5 }
    ];

    const unitMap = Object.fromEntries(UNITS.map(u => [u.key, u]));

    // DOM elements
    const valA = document.getElementById('val-a');
    const unitA = document.getElementById('unit-a');
    const valB = document.getElementById('val-b');
    const unitB = document.getElementById('unit-b');

    const outLps = document.getElementById('out-lps');
    const outUSGPM = document.getElementById('out-usgpm');
    const outM3h = document.getElementById('out-m3h');

    const presetBtns = document.querySelectorAll('.pill');

    // Populate selects
    function fillOptions(sel, defaultKey) {
      UNITS.forEach(u => {
        const opt = document.createElement('option');
        opt.value = u.key;
        opt.textContent = u.label;
        if (u.key === defaultKey) opt.selected = true;
        sel.appendChild(opt);
      });
    }
    fillOptions(unitA, 'usgpm');
    fillOptions(unitB, 'lps');

    let isUpdating = false;

    function toBase(value, key) {
      const u = unitMap[key];
      return (value || 0) * u.toBase;
    }
    function fromBase(base, key) {
      const u = unitMap[key];
      return (base || 0) * u.fromBase;
    }

    function refreshSecondary(base) {
      outLps.textContent = fromBase(base, 'lps').toFixed(6);
      outUSGPM.textContent = fromBase(base, 'usgpm').toFixed(4);
      outM3h.textContent = fromBase(base, 'm3h').toFixed(4);
    }

    function updateFromA() {
      if (isUpdating) return;
      isUpdating = true;
      const a = parseFloat(valA.value || 0);
      const base = toBase(a, unitA.value);
      const b = fromBase(base, unitB.value);
      valB.value = (Math.abs(b) < 1e-4 ? b.toExponential(6) : b.toFixed(6)).replace(/0+$/,'').replace(/\.$/,'');
      refreshSecondary(base);
      isUpdating = false;
    }

    function updateFromB() {
      if (isUpdating) return;
      isUpdating = true;
      const b = parseFloat(valB.value || 0);
      const base = toBase(b, unitB.value);
      const a = fromBase(base, unitA.value);
      valA.value = (Math.abs(a) < 1e-4 ? a.toExponential(6) : a.toFixed(6)).replace(/0+$/,'').replace(/\.$/,'');
      refreshSecondary(base);
      isUpdating = false;
    }

    unitA.addEventListener('change', updateFromA);
    unitB.addEventListener('change', updateFromA);
    valA.addEventListener('input', updateFromA);
    valB.addEventListener('input', updateFromB);

    // Presets
    function setPreset(value, key) {
      valA.value = value;
      unitA.value = key;
      unitB.value = (key === 'usgpm') ? 'lps' : 'usgpm';
      updateFromA();
    }
    presetBtns.forEach(btn => {
      btn.addEventListener('click', () => {
        presetBtns.forEach(b => b.classList.remove('pill-active'));
        btn.classList.add('pill-active');
        setPreset(parseFloat(btn.dataset.val), btn.dataset.unit);
      });
    });

    // Quick table
    const tblBody = document.getElementById('tbl-body');
    function buildTable() {
      tblBody.innerHTML = '';
      [1,5,10,25,50,100].forEach(g => {
        const base = toBase(g, 'usgpm');
        const lps = fromBase(base, 'lps');
        const m3h = fromBase(base, 'm3h');
        const tr = document.createElement('tr');
        tr.innerHTML = `<td class="py-1 px-2">${g}</td>
                        <td class="py-1 px-2">${lps.toFixed(4)}</td>
                        <td class="py-1 px-2">${m3h.toFixed(3)}</td>`;
        tblBody.appendChild(tr);
      });
    }

    // init
    buildTable();
    updateFromA();
  </script>

  <script>
    window.MathJax = {
      tex: { inlineMath: [['\\(','\\)'], ['$', '$']], displayMath: [['$','$'], ['\\[','\\]']] },
      svg: { fontCache: 'global' }
    };
  </script>
  <script>
  (function () {
    var loadMathJax = function () {
      if (window.__mathjaxLoading) return;
      window.__mathjaxLoading = true;
      var script = document.createElement("script");
      script.id = "MathJax-script";
      script.async = true;
      script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js";
      document.head.appendChild(script);
    };

    var target = document.querySelector(
      ".formula-box, .mathjax, .math, .formula, [data-mathjax]"
    );

    if (!target) return;

    if ("IntersectionObserver" in window) {
      var observer = new IntersectionObserver(
        function (entries) {
          if (entries.some(function (entry) { return entry.isIntersecting; })) {
            observer.disconnect();
            loadMathJax();
          }
        },
        { rootMargin: "200px" }
      );
      observer.observe(target);
    } else {
      window.addEventListener(
        "load",
        function () {
          setTimeout(loadMathJax, 1000);
        },
        { once: true }
      );
    }
  })();
</script>


<script async src="https://www.googletagmanager.com/gtag/js?id=G-7MB5V1LZRN"></script>
<script>
  window.__cmpLoadQueued = window.__cmpLoadQueued || [];
  window.addEventListener("load", function () {
    var loadCmp = function () {
      var s1 = document.createElement("script");
      s1.src = "https://cmp.gatekeeperconsent.com/min.js";
      s1.async = true;
      s1.setAttribute("data-cfasync", "false");
      document.head.appendChild(s1);

      var s2 = document.createElement("script");
      s2.src = "https://the.gatekeeperconsent.com/cmp.min.js";
      s2.async = true;
      s2.setAttribute("data-cfasync", "false");
      document.head.appendChild(s2);
    };

    if ("requestIdleCallback" in window) {
      requestIdleCallback(loadCmp, { timeout: 2000 });
    } else {
      setTimeout(loadCmp, 1000);
    }
  });
</script>
<script async src="//www.ezojs.com/ezoic/sa.min.js"></script>
<script>
    window.ezstandalone = window.ezstandalone || {};
    ezstandalone.cmd = ezstandalone.cmd || [];
  </script>
Formulas

Base conversions reference:

  • m³/s is the internal base unit for all flow comparisons.
  • 1 L = 1×10⁻³ m³ and 1 m³ = 1000 L.
  • 1 US gallon = 3.785411784 L, 1 Imperial gallon = 4.54609 L.
  • Set frequency constants: 1 h = 3600 s, 1 min = 60 s.

Conversions apply ⟨toBase⟩ and ⟨fromBase⟩ multipliers so every path uses the same m³/s intermediary, therefore preventing drift between units.

Citations
Changelog
  • v1.1.0 — Canonical layout adaptation with conversions hero, quick reference table, and consistent parsing logic.
  • v1.0.0 — Original conversions flow rate guide.
Verified by Ugo Candido Last Updated: 2026-01-19 Version 1.1.0
Version 1.5.0