Gravity Flow Designer User Manual
← Back to the App

Design gravity water schemes, with confidence

Everything you need to plan, calculate, cost, and document a branched gravity water supply network — from your first Source to a finished Bill of Quantities.

Hazen‑Williams hydraulics Real elevation data Feasibility & BOQ built in Works offline

1 Overview

What GravityFlow is, and what it can do for you.

GravityFlow is a design tool for branched (tree-shaped) water supply networks — the kind used for rural and small-town schemes that carry water from a hillside intake or reservoir (or, with an optional pump, a borehole or low-lying source) down to tapstands. You draw the network directly on a satellite map, and GravityFlow instantly tells you whether every pipe and every tapstand will actually get water at a safe pressure and a healthy velocity.

🗺️

Map-based design

Draw sources, tanks, junctions and pipes directly on real satellite or topographic imagery.

📊

Instant hydraulics

Hazen‑Williams headloss, HGL, pressure and velocity — recalculated the moment you hit Calculate.

⚠️

Built-in design checks

Automatic warnings for low pressure, high velocity, loops, and BPTs that won't fill.

💰

Feasibility & costing

Check your source can meet demand over a design horizon, then generate a priced Bill of Quantities.

💾

Real files, real ownership

Your project lives in a plain JSON file on your own computer — open it, save it, take it with you.

🖨️

Professional reports

Print a full design report, a standalone BOQ, or a feasibility report — ready to hand to a client or funder.

2 Core Concepts

The building blocks every GravityFlow network is made from.

Source

Any fixed-head boundary — a spring intake, borehole, or storage reservoir. Every network needs at least one. Its water level sets the starting hydraulic head.

Break Pressure Tank

A mid-network tank that resets the hydraulic grade line to its own water level. Use it to tame excess static pressure on steep terrain. Sources and BPTs both have an optional Tank Volume field, checked against a recommended storage size.

Junction

A demand point — a tapstand or cluster of consumers. Give it a population, and GravityFlow works out its design demand automatically.

Pipe

Connects two nodes. Has a diameter, material, Hazen‑Williams C‑factor, and optional fittings (minor losses) — these are what you tune to fix warnings.

Pressure Reducing Valve

Throttles down to hold a fixed residual pressure just downstream, whatever the arriving head. Unlike a BPT it has no storage — if arriving head ever drops below its target, it passes that lower pressure through instead.

Air Release Valve

A zero-demand pass-through marker for a local high point along a pipe run, where trapped air needs relief. GravityFlow suggests one automatically wherever it finds one.

Scour / Washout Valve

Another zero-demand pass-through marker, for a low point or dead end where sediment settles and periodic flushing is needed. Also suggested automatically.

Pump

Not a node — a switch you enable on any pipe. Lifts water using a simple curve (rated flow/head, shutoff head, efficiency), for boreholes, low-lying intakes, or a booster partway down a scheme.

💡
Networks are trees, not loops. Every network in GravityFlow must branch outward from a single Source with no closed loops — Calculate will flag a "Loop detected" error if two paths ever reconnect. A pump doesn't change this rule: it's still just a pipe, one that adds head instead of losing it, so a pumped main has to fit the same branched-tree shape as everything else.

3 Getting Started

From a blank map to your first calculated network.

  1. Start a project.Click New Project in the top bar and fill in the basics — name, village, current population. You'll be asked where to save; pick any folder on your computer.
  2. Check feasibility first.Click Feasibility Analysis and enter your source's tested dry-season yield. This confirms the source can actually supply your design population before you spend time drawing pipes.
  3. Place your Source.Select the Source tool in the left toolbar and click its real location on the map. Set its ground elevation and water level in the Properties panel (use the Fetch button to pull real elevation data automatically).
  4. Add Junctions and Pipes.Place a Junction for each tapstand/demand point, set its population, then use the Pipe tool to connect everything back to the Source, branch by branch.
  5. Insert a BPT if needed.If a pipe's static pressure would exceed its pressure class on steep ground, add a Break Pressure Tank partway down to reset the head.
  6. Hit Calculate.GravityFlow solves the whole network instantly and lists every warning, with a suggested fix for each one.
  7. Iterate.Resize a pipe, move a BPT, adjust a water level — then Calculate again. Try Auto-Size or Optimize for a quick first pass, then fine-tune by hand.
Save often. Click Save (or press Ctrl+S) any time — see Saving & Files for how GravityFlow keeps your work safe.

4 Toolbar Reference

The left-hand tool rail, top to bottom.

👆
SelectPan the map and click nodes/pipes to view or edit them. Press Esc to return here from any other tool.
Box SelectDrag a rectangle to select multiple nodes/pipes at once, then press Delete to remove them all.
SourceClick the map to place a reservoir/intake. Sets the starting hydraulic head for everything downstream.
BPTPlace a Break Pressure Tank to reset the hydraulic grade line mid-network.
PRVPlace a Pressure Reducing Valve to hold a fixed residual pressure downstream, whatever the arriving head.
JunctionPlace a demand point / tapstand. Give it a population in the Properties panel.
ARVPlace an Air Release Valve — a zero-demand pass-through point. Calculate suggests these automatically at local high points.
ScourPlace a Scour/Washout Valve — another zero-demand pass-through point, for low points and dead ends. Also suggested automatically.
PipeClick a start node, optional bend points, then an end node. Double-click adds a bend mid-draw. Select a pipe afterward to enable a Pump on it.
MeasureClick points to measure a distance in m / km / ft / mi. Double-click, right-click or Enter to finish.
🗑️
DeleteClick any node or pipe to remove it (with confirmation).
ElevationFetch real ground elevation for every node at once from an open elevation service.
🔍
Zoom ToFit the map view to your entire network.
📍
LocateCenter the map on your current GPS location.
🎨
Editing an existing pipe's shape: select a pipe, then click Edit Bends in its Properties panel. Drag the red handles to reshape it, click the line to add a new bend, or right-click a handle to remove it.

5 Sidebar Panels

The right-hand rail — click any icon to open its panel.

PanelWhat it's for
PropertiesEdit whatever node or pipe is currently selected — elevation, water level, population, diameter, material, a pump curve on a pipe, and more.
NetworkSortable tables of every node and pipe in the project — click a row to jump to it on the map.
ResultsSummary totals, all warnings with suggested fixes, and full Node/Pipe results tables. Appears after you click Calculate.
BOQBill of Quantities — pipe lengths and structure counts grouped automatically, plus a Labor / Crew Rates section for construction work items, each with an editable Unit Price and a running Grand Total.
ProfileA longitudinal ground/HGL profile from the Source down to any junction or BPT you pick — the fastest way to see where pressure gets tight.
LayersToggle visibility of node types and of pipes by diameter, so a busy network stays readable.
SettingsDemand defaults (LPCD, peak factor), design velocity/pressure targets, default pipe material, and what shows up when you hover the map.
BasemapSwitch between satellite imagery, street maps, topographic maps, and hillshade terrain (click anywhere on hillshade to read that point's elevation).
LabelsOne switch to show or hide node labels on the map.

BOQ Labor / Crew Rates

Alongside the pipe and structure quantities, the BOQ tab includes a Labor / Crew Rates table for the construction work itself — trenching, pipe laying, backfilling, and structure-building crews. Both Qty and Unit Price are editable: quantity starts out auto-filled from your network (total pipe length, node counts) and rate starts out pre-filled with a generic reference figure, but you can override either — useful if, say, part of the trench run is through rock and needs a different rate than the rest, or you simply want to split one line into two. If your network includes any pump-enabled pipes, a separate Pumps table appears too, with one row per pump and an estimated power draw (kW) — from the actual calculated flow once you've run Calculate, or the rated duty point as a placeholder before that.

Work itemUnitDefault rateQuantity source
Trench excavation (manual)m$2.50Total pipe length
Pipe laying & jointingm$1.50Total pipe length
Backfilling & reinstatementm$1.00Total pipe length
Source / intake structure construction crewno.$150Number of Source nodes
BPT construction crewno.$120Number of BPT nodes
PRV chamber & valve installation crewno.$100Number of PRV nodes
Junction / tapstand construction crewno.$80Number of Junction nodes
Air Release Valve chamber installation crewno.$90Number of ARV nodes
Scour/Washout Valve chamber installation crewno.$90Number of Scour nodes
Pump set installation & electrical connection crewno.$200Number of pump-enabled pipes
Testing & commissioning crewlump sum$300Once per project
Mobilization & site clearance crewlump sum$200Once per project
⚠️
These are generic placeholder rates in USD, not local wage data. They exist so the BOQ has something reasonable to start from, not because they reflect any specific country's actual crew costs. Edit every rate to match real local wages before using the BOQ for actual project costing — like Unit Price on the Pipes/Nodes tables, edits are saved with your project.

6 How the Math Works

The hydraulics engine, in plain terms.

GravityFlow computes headloss with the Hazen‑Williams equation, the industry standard for gravity and municipal water networks:

Headloss (SI units — L, D in metres; Q in m³/s) hf = 10.67 × L × Q1.852 / (C1.852 × D4.87)

Velocity then comes straight from the continuity equation, V = Q / A — notice that velocity depends only on flow and pipe diameter, never directly on how much elevation drop you have. Extra head doesn't make water move faster; it either gets consumed as friction loss, or shows up as residual pressure downstream (or gets absorbed by a BPT).

Elevation, HGL and Pressure

These three numbers are the heart of every result GravityFlow shows you:

700 m 650 m 600 m 550 m 500 m without a BPT… ≈117 m — exceeds PN10 HGL resets here 665 → 604 m Source Ground 700 m · Water level 705 m BPT (ground 600 m) Junction Ground 520 m Pressure = 40 m
Ground elevation Actual Hydraulic Grade Line (HGL) HGL if the BPT weren't there Where the BPT resets it Pressure = HGL − elevation, at a point
  • Elevation — the ground level at a node (from Fetch, or entered manually).
  • HGL (Hydraulic Grade Line) — the height water would rise to at that point, starting from the Source's water level and falling by the headloss of every pipe along the way.
  • Pressure — simply HGL − Elevation. This is what the pipe network actually delivers to a tapstand.

A Break Pressure Tank is the one place this chain breaks deliberately: instead of inheriting the arriving HGL, a BPT resets it to its own water level — which is exactly how you tame a network that would otherwise blow past a pipe's pressure rating on steep ground.

Pipe Materials

Every pipe carries a material, which sets its Hazen‑Williams C‑factor — a roughness rating from 60 (very rough) to about 160 (glass‑smooth). A higher C means a smoother bore, which means less friction headloss for the same flow and diameter — look back at the formula above and notice C sits in the denominator, raised to the 1.852 power, so even a modest difference in C changes headloss noticeably.

MaterialDefault CTypical useNotes
HDPE (High-Density Polyethylene)150Default choice for buried rural gravity mainsSmooth bore that stays smooth for decades, flexible enough to snake around obstacles, welded/fused joints resist leaks better than any other option here — the standard pick unless you have a specific reason not to.
uPVC (unplasticized PVC)150Buried mains, especially where HDPE isn't locally availableSame hydraulic performance as HDPE, but rigid — needs more bends/fittings on uneven ground, and its solvent-welded or push-fit joints are less forgiving of ground movement than HDPE's fusion joints.
GI (Galvanized Iron)100Short exposed/above-ground runs — river crossings, wall penetrations, tapstand risersNoticeably rougher than plastic (and gets rougher with age as the galvanizing wears and the bore corrodes), so the same pipe carries less flow for a given headloss budget — but it survives UV, impact and vandalism that would split a plastic pipe.
DI (Ductile Iron)130High-pressure trunk mains, road/river crossings needing extra strengthSits between plastic and GI on roughness, but its real advantage is mechanical: much higher pressure and impact ratings than any pipe material here, at a higher cost — reach for it where a pipe must survive traffic loading or very high static head, not for routine distribution.
💡
C‑factor is editable per pipe. Changing a pipe's Material in its Properties panel sets a sensible default C automatically, but you can override the Hazen‑Williams C field directly too — useful for modeling an older, part-scaled pipe with a lower effective C than a brand-new one of the same material.

Minor Losses (Fittings)

Friction along the pipe wall isn't the only thing that costs head — every bend, tee and valve adds a small extra loss too, from the turbulence of water changing direction or squeezing through a valve body. GravityFlow adds these as an optional minor loss on top of the Hazen‑Williams friction loss, using the standard resistance‑coefficient method:

Minor loss (K = sum of each fitting's resistance coefficient × count) hminor = ΣK × V2 / 2g

Open a pipe's Properties panel and scroll to Fittings (minor losses) to enter counts for 90° elbows, 45° elbows, branch tees, gate valves and check valves — GravityFlow sums their K‑values and folds the result straight into that pipe's total headloss and the network's pressure calculations. Leave every count at zero (the default) to ignore minor losses entirely, which is a reasonable simplification for long straight rural mains where friction dominates; it's worth turning on for shorter pipes with several fittings, where minor losses can be a meaningful share of the total.

Tank Storage Sizing

Pressure and velocity are about the network's instant behavior, but a Source or BPT's tank also needs enough volume to balance demand over the course of a day — supply rarely matches consumption minute-for-minute, and the tank absorbs the difference. GravityFlow suggests a minimum tank volume for every Source and BPT, based on everything downstream of it:

Recommended volume (default storage factor: 25% of downstream demand) Vrec = downstream average daily demand (m³/day) × storage factor

Note this uses each junction's average daily demand (population × LPCD), not the peaked design flow used for pipe sizing — storage is about the day's total volume, not its busiest instant. Enter a Tank Volume on any Source or BPT to compare it against this recommendation; if it's undersized, Calculate adds a warning. The 25% storage factor is a common rule-of-thumb starting point for rural balancing tanks, not a fire-flow or emergency reserve figure — adjust it under Settings › Design Criteria › Tank storage factor if your design standard calls for something different, and leave the Tank Volume field blank on any node where storage isn't relevant (e.g. a spring intake with no real holding tank).

Pumps

Enable Pump on any pipe's Properties panel to lift water instead of just losing head to friction — for a borehole/tubewell source, a low-lying river intake, or a booster partway down a scheme. The head a pump adds depends on how much flow is passing through it, following a simple parabolic curve through two points you provide: the shutoff head (what it would push against zero flow) and a rated duty point (head at its rated flow):

Pump head added, as a function of flow Q (Qr/Hr = rated point, H0 = shutoff head) H(Q) = H0 − (H0 − Hr) × (Q / Qr)2

That head is added on top of the normal Hazen‑Williams walk down the network — the same friction loss still applies along the pump's own pipe, it just starts from a boosted head rather than the source's raw water level. Because flow through every pipe in a branched tree is already fixed by downstream demand (no iteration needed to find the pump's operating point), GravityFlow can read the head straight off this curve at the pipe's calculated flow. An Efficiency (%) field converts that hydraulic work into an electrical power estimate (shown in the Results tab and the BOQ's Pumps table):

Electrical input power (ρg in SI, η = efficiency as a fraction) P = ρg × Q × H(Q) / η
⚠️
Pump-on conditions only. Every pressure and pipe-class check assumes the pump is running. What happens with the pump off — shutoff head against a closed system, water hammer, check‑valve arrangement — isn't modeled, and Calculate adds a standing reminder whenever a pump is present. Verify those transient conditions separately.

Air Release & Scour Valves

Calculate scans the finished network for two situations and suggests a fix, the same way it suggests a pipe upsize for low pressure:

  • A node sitting higher than both its upstream neighbor and every downstream neighbor — a local summit along the pipe run, where air can collect and block flow — gets an Air Release Valve suggestion.
  • A node sitting lower than its upstream neighbor, and either a dead end or lower than every downstream neighbor too — a low point or dead end where sediment settles — gets a Scour/Washout Valve suggestion.

These are suggestions, not automatic placements: GravityFlow can tell you where, but only you can draw the actual ARV/Scour node in. Once a node is typed as ARV or Scour, it's treated as already addressed and won't be suggested again. This check only looks at node elevations along the tree — it can't spot a summit or sag hiding partway along a single long pipe between two nodes, since pipe bends don't carry their own elevation data.

7 Worked Examples

Five real networks, captured straight from the app — real satellite imagery, real icons, real calculated results. The first four all follow one realistic 1,300-person hillside scheme through different stages of the design process; the fifth is a focused troubleshooting walkthrough.

Example 1 · A Realistic Village Supply

Layout
11 nodes1 Source1 BPT9 Junctions~1,300 people

A single hillside reservoir feeding three branches of tapstands through one Break Pressure Tank — this is what a genuine small-scheme layout looks like once it's past the "toy example" stage. Real elevations were pulled straight from the Elevation tool.

Full 11-node gravity network on satellite imagery, showing one source, one BPT and nine junctions across three branches

The full scheme, fit to view, with the Legend confirming every node type present.

Here's the complete calculated output behind that picture — every node's elevation, HGL and residual pressure, and every pipe's length, diameter, flow and velocity. This is exactly what the Results tab shows after you hit Calculate.

NodeElev (m)HGL (m)Pressure (m)Status
SRC11723.01725.002.00ok
BPT11667.01669.002.00ok
J11632.01663.5731.57ok
J21619.01660.3141.31ok
J31613.01650.0437.04ok
J41627.01665.1438.14ok
J51622.01659.8937.89ok
J61622.01656.3334.33ok
J71648.01665.9617.96ok
J81637.01660.1223.12ok
J91637.01657.5020.50ok
PipeLength (m)DN (mm)Flow (L/s)Velocity (m/s)Headloss (m)Status
P1 (SRC1→BPT1)392.5631.7430.562.141ok
P2 (BPT1→J1)422.3400.8390.675.427ok
P3 (J1→J2)157.0320.6040.753.260ok
P4 (J2→J3)467.3250.3260.6610.271ok
P5 (BPT1→J4)282.6320.4820.603.858ok
P6 (J4→J5)222.4250.3390.695.256ok
P7 (J5→J6)110.8150.1040.593.554ok
P8 (BPT1→J7)283.5320.4230.533.043ok
P9 (J7→J8)173.3200.2280.735.835ok
P10 (J8→J9)104.7150.0910.522.621ok

Notice the pattern: pipes get smaller the further they sit from the Source (63→40→32→25 mm down the J1–J3 branch), because each one only has to carry what's left of the flow after everything upstream of it has already branched off.

Result: Calculated OK — 2.62 km of pipe, 1.74 L/s peak design demand, zero warnings.

Example 2 · Taming Steep Terrain with a BPT

Why the BPT is there

The same scheme drops 56 m from the Source (1723 m) down to BPT1 (1667 m) alone, and keeps falling to around 1613 m at the lowest junction. Left unchecked, that's well over a standard PN10 pipe's 102 m pressure rating — Example 4 shows exactly what that looks like. BPT1 resets the hydraulic grade line right where the slope steepens, so every pipe below it only ever sees a fraction of that static head.

BPT1 selected on the map with its Properties panel open, showing Calculated HGL 1669.00 m and Pressure 2.00 m

BPT1's Properties panel — water level fixed at 1669 m regardless of what arrives from upstream.

Longitudinal ground and hydraulic grade line profile from the Source through BPT1 to junction J7

The Profile tab, Source→J7: the HGL (blue, dashed) visibly resets at BPT1 instead of continuing to fall with the ground.

The pipe straight out of BPT1's reset water level (1669 m) is what every downstream branch actually has to work with — not the Source's original 1725 m:

PipeRouteLength (m)DN (mm)Headloss (m)PN10 rating
P1SRC1 → BPT1392.5632.14102 m — fine, arrives with head to spare
P2BPT1 → J1422.3405.43102 m — well inside
P5BPT1 → J4282.6323.86102 m — well inside
P8BPT1 → J7283.5323.04102 m — well inside

Every branch starts fresh from BPT1's 1669 m, not the Source's 1725 m — that's the entire point of resetting the HGL. Compare this table with Example 4's, where these same branches connect straight to the Source instead.

Result: BPT1 arrives with roughly 56 m of head to spare (fills easily), and every pipe downstream of it stays comfortably within its PN10 rating.

Example 3 · Gentle Terrain: No BPT Needed

Contrast
8 nodes1 Source7 JunctionsOnly 24 m of drop

A BPT is a fix for a specific problem — too much static head — not something every scheme needs by default. This small village sits on a much gentler slope: only 24 m of elevation drop across the whole network, well inside any standard pipe's pressure rating, so a single Source feeding two simple branches is all it takes.

An 8-node gravity network with one source and seven junctions on gentle terrain, no BPT present

Notice the Legend has no "Break Pressure Tank" row at all — none exists in this project.

NodeElev (m)HGL (m)Pressure (m)Status
SRC11656.01658.002.00ok
J11650.01656.806.80ok
J21644.01654.5310.53ok
J31640.01652.5812.58ok
J41644.01657.2513.25ok
J51644.01652.828.82ok
J61635.01648.8813.88ok
J71632.01645.2613.26ok
PipeLength (m)DN (mm)Flow (L/s)Velocity (m/s)Headloss (m)Status
P1 (SRC1→J1)175.3320.3320.411.201ok
P2 (J1→J2)222.4250.2150.442.264ok
P3 (J2→J3)248.0200.1040.331.959warn
P4 (SRC1→J4)78.5320.3970.490.749ok
P5 (J4→J5)235.5250.2990.614.436ok
P6 (J5→J6)157.0150.0910.523.931ok
P7 (J5→J7)235.5150.1040.597.552ok

P3 is the one exception — 0.33 m/s, just under the 0.4 m/s target, on the tail end of the J1–J3 branch. Pressure everywhere is nowhere near the 5–70 m limits either direction, which is exactly what "plenty of margin, no BPT required" looks like in the numbers.

Result: Calculated OK — zero danger warnings. (One short tail pipe reads a little under the velocity target, which is normal and harmless at this scale — see Example 5.)

Example 4 · Steep Terrain Without a BPT

What goes wrong

This is Example 2's exact layout and elevations — same Source, same three branches, same pipe sizes — with only one thing changed: BPT1 removed, so every branch connects straight back to the Source. Nothing else was touched.

The same steep-terrain network as example 2 but with the BPT removed, status bar reading Calculated 4 issues in red

Same shape, same site — but the status bar now reads "Calculated — 4 issue(s)" in red.

Results panel listing residual pressure warnings at every junction and pipe pressure-class violations, with the app suggesting to insert a break-pressure tank

The Results panel, unedited: every junction blows past the 70 m pressure target, and four pipes exceed their PN10 rating. Read the suggested fix — the app arrives at the same answer Example 2 already used.

Compare this node table directly with Example 1's — same elevations, same population, same pipe sizes, only the BPT is gone:

NodeElev (m)HGL (m)Pressure (m)Status
SRC11723.01725.002.00ok
J11632.01716.3384.33high
J21619.01713.0894.08high
J31613.01702.8089.80high
J41627.01716.1789.17high
J51622.01710.9188.91high
J61622.01707.3685.36high
J71648.01718.5770.57high
J81637.01712.7475.74high
J91637.01710.1273.12high
PipeRouteLength (m)DN (mm)Velocity (m/s)Headloss (m)Status
P1SRC1→J1674.3400.678.665ok
P2J1→J2157.0320.753.260danger
P3J2→J3467.3250.6610.271danger
P4SRC1→J4646.9320.608.831ok
P5J4→J5222.4250.695.256danger
P6J5→J6110.8150.593.554danger
P7SRC1→J7598.5320.536.426ok
P8J7→J8173.3200.735.835ok
P9J8→J9104.7150.522.621ok

Every pressure figure roughly triples compared with Example 1 — J2 alone jumps from 41.31 m to 94.08 m. The four danger pipes are the ones whose lowest point sits far enough below the Source that static pressure (no flow at all, worst case) exceeds their PN10 rating of 102 m — note the velocities and headloss barely changed from Example 1's table, since diameters are identical. Only the missing BPT changed.

Result: 4 danger warnings, 9 total — every single junction over-pressured, because nothing ever resets the 100+ m of head falling straight from the Source.

Example 5 · Fixing a Low-Velocity Warning

Troubleshooting

Back to Example 1's scheme. Tail-end branches with very small flow are the most common source of a "Low velocity — risk of sedimentation" warning — here's the exact before/after of spotting and fixing one on pipe P10 (the last few metres of pipe out to J9).

Results panel showing a low velocity warning on pipe P10 at 0.07 m/s, with a suggested fix to downsize from DN40 to DN32

P10 oversized to DN40: velocity collapses to 0.07 m/s and the warning names the exact fix.

Zoomed view of pipe P10 with its Properties panel showing Diameter DN40 and Calculated Velocity 0.07 m/s

Zoomed into P10's own Properties panel — Diameter and Calculated Velocity sit right next to each other.

  1. Read the warningIt names the pipe and its current velocity, and suggests exactly which standard size to switch to.
  2. Open the pipe's PropertiesStep its Diameter down to the suggested size — here, DN40 down to DN15.
  3. RecalculateConfirm the warning clears, and that pressure downstream didn't suffer as a side effect.
Same network after fixing pipe P10 back to DN15, Results panel now showing No warnings in green

P10 back at its correct DN15 — "No warnings", every node and pipe status green.

P10 carries J9 alone — the very last few metres of the network, population 70. Same flow both times; only the diameter changes:

StateDN (mm)Flow (L/s)Velocity (m/s)Headloss (m)Status
Before (oversized)400.0910.070.022warn
After (correct)150.0910.522.621ok

Same 0.091 L/s both rows — the flow never changed, only the pipe it's squeezed through. A wider pipe (DN40) barely trickles at 0.07 m/s and loses almost no head to friction (0.022 m); the narrower, correct DN15 speeds it up to a healthy 0.52 m/s, at the cost of more headloss (2.621 m) — head this branch could easily spare, per Example 1's table.

Tip: downsizing raises velocity but also raises headloss — always recheck downstream pressure isn't pushed below your minimum target before calling it fixed.

8 Saving & Files

Where your work lives, and how to keep it safe.

Auto-save + linked files

Every change is auto-saved in your browser as a safety net. But the real, durable copy of your project is a plain .json file — link one via New Project, Open Project, or the Save button, and GravityFlow keeps writing your changes into it automatically from then on.

The Save button

Click Save (or press Ctrl+S) any time you want to force an immediate write. If no file is linked yet, it asks you where to save one and links it for you.

Reconnecting after a refresh

Browsers don't let a web page silently keep file access across a reload. GravityFlow works around this two ways:

  • If you had a file linked, it tries to silently reconnect on load — or shows a one-click "Resume editing" prompt if the browser needs you to reconfirm access.
  • If you were only relying on the browser's auto-save (no file linked), you'll see an "Unsaved session found" prompt with Open / Discard options.

Exporting

Use the Project menu for one-off exports: Export JSON (a portable copy of the whole project), Export CSV (raw results for spreadsheets), Export KML (open your network in Google Earth), Export EPANET (.inp) (open the same network in EPANET for a second, independent hydraulic check), or Print Report (a full, formatted design report — including the BOQ — ready to save as PDF).

💡
About the EPANET export: EPANET has no "resets the grade line" node type, so Source, Break Pressure Tank and PRV nodes all export as EPANET Reservoirs (fixed-head boundary nodes) at their governing level — the closest faithful match to how GravityFlow treats each of them as always holding a fixed head regardless of arriving flow. Fittings you've entered on a pipe export as its EPANET MinorLoss coefficient, ARV/Scour nodes export as ordinary zero-demand Junctions, and any pump-enabled pipe exports as an EPANET Pump with a 3-point head/flow Curve sampling GravityFlow's own pump curve — not as a plain pipe.
⚠️
Using a local dev/live-reload server? If your linked project file sits inside a folder being watched by a live-reload tool, every save will trigger a page refresh. Save your actual project files outside that folder, or exclude them in the tool's settings.

Importing GPS Waypoints & Tracks (GPX)

If you've surveyed with a handheld GPS unit or a phone app, use Project › Import GPX… to bring that data in. GravityFlow reads both kinds of GPX content in one go:

  • Waypoints (<wpt>) — individual GPS'd points, such as a source, tank, or tapstand location — become purple reference pins, each showing its name, coordinates, and elevation if the file has one.
  • Tracks (<trk>) — a path you walked, such as the pipe route itself — become a dashed purple reference line, showing its total length and point count.

Both are reference only — importing a GPX file never creates a Source, BPT, Junction, or Pipe by itself. Click a pin or line for its details and a Remove button, then use the normal Source/BPT/Junction/Pipe tools to place the real network element at (or along) that spot. Both are saved with your project like everything else, so they'll still be there next time you open it — clear the ones you no longer need as you trace over them.

💡
Why reference-only, not automatic? A waypoint name alone can't reliably tell GravityFlow whether a GPS point was a source, a tank, or a tapstand — and a track has no diameter or material — so rather than guess, it leaves that call to you.

Civil 3D Interoperability (LandXML)

GravityFlow can't open a native Civil 3D .dwg file directly — that's a proprietary binary format with Civil 3D-specific object types, and reading it would require a paid SDK. The practical bridge both ways is LandXML, an open XML format Civil 3D natively imports and exports (Insert › Import LandXML, or right-click Points/Pipe Networks in Toolspace).

  • GravityFlow › Civil 3D: Project › Export LandXML (Civil 3D) writes every node as a survey point and the whole network as a LandXML Pipe Network (structures + pipes with diameter/material), georeferenced as WGS84 geographic coordinates. Bring it into Civil 3D with Import LandXML.
  • Civil 3D › GravityFlow: Project › Import LandXML… reads a LandXML file's points, pipe network structures, and pipes back in as reference pins/lines — the same reference-only overlay GPX import uses, for the same reason (see above).
⚠️
Only georeferenced LandXML imports can be placed on the map. Many Civil 3D site drawings never get assigned a real coordinate system — they just use an arbitrary local grid (e.g. 0,0 near the site entrance). If a file's <CoordinateSystem> isn't WGS84 geographic or a recognizable UTM zone, GravityFlow has no way to know where on Earth those coordinates belong and will refuse the import rather than place it somewhere wrong — assign a real coordinate system to the Civil 3D drawing before exporting if you hit this.

Pipe "invert" in the exported LandXML uses each node's ground elevation as an approximation — GravityFlow doesn't model a separate invert depth below the structure.

9 Keyboard Shortcuts

KeyAction
EscCancel the current draw/edit action and return to the Select tool.
EnterFinish the current Measure while the Measure tool is active.
Delete / BackspaceRemove everything currently highlighted by Box Select.
Ctrl+SSave the project immediately.
Ctrl+ZUndo the last node/pipe edit (also the ↶ button in the top bar).
Ctrl+YRedo (also the ↷ button). Any new edit after an undo clears the redo history.
💡
Undo covers the network, not the settings. It steps back through node and pipe edits — adding, deleting, dragging, resizing, reshaping — including Auto-Size and Optimize as a single step each. Settings-tab values (LPCD, velocity targets, default material, and so on) aren't part of the undo history, since they're project-wide defaults rather than edits to a specific node or pipe.

10 Troubleshooting & FAQ

"Loop detected" error

Gravity networks in GravityFlow must be a branched tree — no pipe may reconnect two paths that both lead back to the same Source. Remove one of the pipes forming the loop.

"BPT may not fill" warning

The head arriving at that Break Pressure Tank is below its ground elevation, so it physically can't fill. Either lower the BPT's site, raise the upstream Source's water level, or upsize the pipe feeding it to cut headloss.

Negative pressure at a junction

Water can't physically reach that point at all — this is always a danger-level warning. Click it for a suggested fix: upsize the bottleneck pipe, raise the upstream water level, or relocate the junction to lower ground.

Why does the map need internet access?

Satellite/street/topographic basemaps, the terrain hillshade layer, the elevation Fetch button, and the place search box all call external map/elevation services and need a connection. Everything else — drawing, calculating, saving, exporting, printing — works completely offline.

Auto-Size made everything worse — why?

Auto-Size only optimizes for velocity; it has no idea what that does to downstream pressure, and can oversize or undersize a pipe if flows are very small. Use it for a rough first pass, then check the Results tab and fine-tune diameters by hand — or try Optimize, which specifically hunts for the pressure bottleneck instead.

What's the difference between a Source and a BPT?

Both have a fixed water level that governs head. A Source is where water enters the network for the first time (a real intake/reservoir). A Break Pressure Tank is a mid-network structure whose only job is to reset the HGL — think of it as a deliberate pressure "circuit breaker" partway down a steep slope.

My source is a borehole/tubewell — can I model that?

Yes — enable Pump on the pipe leaving your Source (the Source's water level then represents the sump/wet-well level, not the delivered pressure). There's no separate "Pump Station" node; the pump lives on the pipe itself, so it works equally well as a booster mid-scheme, not just at the very start.

Why is GravityFlow suggesting an Air Release or Scour Valve here?

Calculate flags local high points (candidate Air Release Valves, to relieve trapped air) and local low points/dead ends (candidate Scour/Washout Valves, for periodic flushing) purely from node elevations along the tree. It's only a suggestion — add the node yourself if you agree, or ignore it if the site doesn't call for one. Once a node is typed as ARV or Scour, it stops being suggested.