How to Model Pumps and Pump Curves in EPANET
To model a pump in EPANET, you draw it as a link from its suction node to its delivery node and give it a head curve: pairs of flow and head taken from the manufacturer's sheet. This guide explains how EPANET interprets that curve, which is where most pump models go wrong, and shows each step in PipePilot, a free browser workspace that runs the EPANET 2.3 engine and reads and writes standard .inp files.
How does EPANET represent a pump?
A pump in EPANET is a link that adds head to water flowing from its start node to its end node, and flow through it only goes one way. You describe it either with a head curve or as a constant power device that supplies the same energy (kW or hp) at every flow. In the .inp file these are the HEAD and POWER keywords; a pump with neither stops the run with error 226. For design work, use a head curve.
Everything else is optional. An efficiency curve and energy prices feed only the energy calculation; without an efficiency curve EPANET uses the global pump efficiency.
In PipePilot, pick Add Pump, click the suction node, then the delivery node. Add a curve in the Browser's Data tab under Curves, set its type to PUMP, type the points in the project's units (L/s and m, or gpm and ft), and choose it in the pump's Pump Curve property.
How does EPANET read one, three or many curve points?
EPANET chooses the shape of the curve from the number of points you enter, and the rule in the engine is stricter than the user manual suggests.
| Points entered | What EPANET does |
|---|---|
| One point (design flow, design head) | Adds a shutoff head of 133% of the design head at zero flow and a maximum flow of twice the design flow at zero head, then fits a smooth curve through the three. |
| Three points, the first at zero flow | Fits h = A - B qC through all three: shutoff, design and maximum flow. |
| Two points, four or more, or three where the first is not at zero flow | Joins the points with straight lines. The head of the first point is taken as the shutoff head. |
The EPANET 2.2 manual calls the first of three points a low or zero flow point, but the engine source fits the smooth function only when that flow is exactly zero. Head must also fall from each point to the next, or EPANET rejects the curve with error 227. If the network asks for more flow than the last point, EPANET extends the last segment, even to a negative head, and issues a warning.
What does a single-point curve assume?
A single-point curve assumes a shape that need not match your pump anywhere except at the design point. Take a pump rated at 50 L/s and 40 m. EPANET adds 53.3 m at zero flow and zero head at 100 L/s, and the fit through those three points is:
h = 53.3 - 0.00533 q2 (h in m, q in L/s)
The exponent comes out as 2 for every single-point curve, because the 133% and twice-flow rule always fixes the same proportions. Your pump's real shutoff head and run-out flow may differ, so the results are right at 50 L/s and a guess elsewhere. Where you have the datasheet, enter at least the shutoff head, the design point and the maximum flow.
PipePilot's Model Check flags pumps with a single-point curve. In the Pump Curve window, Convert to 3-point curve replaces the single point with the three points EPANET already derives from it, so results stay the same, and you can then edit them to match the datasheet. If other pumps share the curve, the window lists them, because they change too.
How do you find the pump's operating point?
The pump runs where its head curve crosses the system curve. For a pump lifting between two storage levels, the system curve is h = Hs + k qn, where Hs is the static lift and n is the flow exponent of the headloss formula: 1.852 for Hazen-Williams and 2 for Darcy-Weisbach.
With the pump above, a static lift of 25 m and 15 m of friction at 50 L/s, the curves cross at 50 L/s and 40 m, the design point. Raise the delivery tank level by 5 m, so the static lift is 30 m, and the operating point moves to about 45 L/s at 42.4 m. In a full run the solver finds the pump flow at every time step anyway; a single system curve is a simplification in a looped network, because demands and other sources move it.
PipePilot draws this in Report > Pump Curve.... The window shows the curve type, the equation EPANET will use, and a chart with the curve, the system curve, the points the pump ran at in the last run and the operating point. The system curve comes from the last run, using the nearest tank or reservoir on each side of the pump, or from a static lift and design-flow friction that you type in. If the pump cannot lift the static head at all, the window says there is no operating point.
How do you model a variable speed pump?
You change the pump's relative speed setting, and EPANET shifts the curve by the affinity laws: flow scales with speed and head with speed squared. At a speed of 0.9, the example pump's shutoff head drops from 53.3 m to about 43.2 m. A speed pattern varies the setting hour by hour, and a simple control can set it at a given time, for example LINK P1 0.9 AT TIME 6. PipePilot has Speed and Pattern fields in the pump's properties, and the Pump Curve window warns when the run used a speed other than 1.
How do you switch a pump on tank level?
Write a pair of simple controls on the level of the tank the pump fills:
LINK P1 OPEN IF NODE BT BELOW 1.5LINK P1 CLOSED IF NODE BT ABOVE 4.5
Levels are the height of water above the tank floor, not the water surface elevation. Leave a working band between them; the EPANET manual warns that pressure controls set too close together can make a run unstable. Switching only shows in an extended period run, because a snapshot has no time for the tank to fill or drain.
In PipePilot, enter controls in the Browser under Data, Controls, Simple. EPANET checks the text when you press OK, and a rejected line comes back with EPANET's own message. The Pumped rising main sample uses exactly these two lines.
How do you model duty and standby pumps?
Model each pump as its own link with the same curve, and set the standby pump's Initial Status to Closed. To model a changeover, open the standby and close the duty pump. The PipePilot docs suggest a short pipe with Initial Status CV on each delivery to stand for the non-return valve. EPANET already keeps pump flow one way; the CV pipe makes the valve explicit in the model.
What do "cannot deliver head" and "exceeds maximum flow" mean?
"Cannot deliver head" means the system needs more head than the pump's shutoff head, so EPANET switched the pump off for that time. Check tank levels, elevations and the pump's direction. "Exceeds maximum flow" means the pump ran past the end of its curve, so its head and energy results are extrapolated. Add the real maximum flow point to a single-point curve.
PipePilot's Problems window (Report > Problems...) turns each warning into a row with the cause, steps to fix it and a Zoom to button. Report > Energy shows EPANET's energy table for each pump. If you are still choosing a modelling package, see our comparison of water network design software.
Try it on a sample network
Open PipePilot in your browser (free to use, nothing to install), choose File > Start / Sample Networks and open the Pumped rising main sample, then use Report > Pump Curve on P1 to see the operating point. The Pumps and pump curves docs page covers each step, and Fixing problems lists the pump errors and warnings.
Jagadeesh Gaddam
CEO, Smart Bhujal
Try this in GeoPilot
Run the analysis described in this article with one prompt. No setup required.
Open GeoPilot




