Ruralwater

GPLv3 license

Hydraulic engineering webapp.

Purpose of the project

Open source webapp to allow the design of rural water supplies for non-specialists.

Motivation

This project exists because the design of rural water supplies poses challenges to optimize the investment costs and limit the running costs.
This may be particularly interesting in the case of humanitarian interventions (say in rural communities of Africa, Asia, Latin America), where the funds may be limited and where personnel deployed by humanitarian organizations may not have an engineering professional background.
More information on our website and its quickstart (2019 version, will be updated soon).

How to install ‘ruralwater’ on your local machine

These steps will get you a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites:
  • Python 3.7+

  • Redis

Remark: if, for any reason, you do not want to install redis on your local machine, then, once you have cloned the repository, edit the following setting inside file webapp.core.settings.redis.py: USE_REDIS = True and set it to False.
Installation:
We have created a setup script that should install ruralwater on your local machine in a single command. If this fails, we detailed below the manual installation process.
Once python (and optionally redis) are installed on your local machine and you have cloned the repository, follow the steps below:
  • clone the development branch on you local machine

  • run the script setup_linux_complete.sh (linux) or setup_win_complete.ps1 (windows)

  • Navigate to localhost (http://127.0.0.1:8000/)

You will now see “ruralwater” up and running.
If anything went wrong, then apologise us and follow the steps below.

Manual installation

Once python (and optionally redis) are installed on your local machine and you have cloned the repository, follow the steps below:
  • clone the “development” branch on you local machine

  • create and activate a virtual environment

  • install the requirements at requirements/development.txt

  • run the script setup_linux_database.sh (linux) or setup_win_database.ps1 (windows)

  • Navigate to localhost (http://127.0.0.1:8000/)

You will now see “ruralwater” up and running.

More specifically, setup_*_database implements the following operations:
  • generates the database (using the django framework)

  • populates the database with the hydraulic hardware data

  • creates a superuser and two mock users:

    1. ‘demo’, who is the superuser, with password: pippo121

    2. ‘cat’, with password: meow

    3. ‘dog’, with password: bark

What is ‘hydraulic hardware’? The hydraulic hardware data are the data of the commercially available water pipes, and a selection of some water pumps and diesel engines available from manufacturers. Data include bores of pipes and plate data of pumps and engines. These data are needed since the software algorithms needs them to run its algorithms.

Contributing

The package is open to contributions.
The mission of this project is stated at our website.
Additional information may be found in the following documents:
  • XXX for an introduction to the ‘application programming interface’ exposed by the ‘business logic’

  • For contributors more interested in “test-driven development” XXX provides the description of the tests currently included in this repository.

  • XXX provides the issues tracker.

More documentation on the project can be found here:

Current status of the project

The project at present (october 2020) is a ‘proof of concept’. Contributions are welcomed especially in the following fields:
  • the algorithm to optimize the design of dendridic gravity-fed water supplies

  • the design of the user interface, more specifically the javascript for the client side controls to define the water supply.|

Tech/framework used

Ruralwater is built with:

Tests

If you desire to test the entire webapp, do the following:
  • cd into the ‘webapp’ folder

  • run: python manage.py runserver

  • run: python manage.py test

Remark: it is necessary to run the server before running the tests, as it is shown in the above code snippet, becasue the tests must access those “hydraulic hardware data” referred to above (section hydraulic_hardware)
More information about testing may be found in the testing forlder and specifically inside the file howto_casestudies.md.
If you desire to simply thest the ‘business logic’ (not the entire webapp), then do the following:
  • cd into the ‘webapp’ folder

  • run: python manage.py runserver

Authors

Manual

Hydraulics

Note: Once you have read through all the documentation, you can then see business
Ruralwater models two kinds of rural water supplies: “gravity” and “from a borehole”, also known as “station” (short form for “pump station from borehole”).
Remark in all the images in this page, the vertical dimension has

been enhaced to make it more evident all calculations based on altimetric elevation and hydraulic energy. So, the slopes of the pathways appear very steep, much more than the reality found walking on the ground.

here is a pdf file pdf

_images/5_pathways_overbank.svg

What the software does

The software tackles two distinct kinds of hydraulic problems:

  • the hydraulic design problem - given the required water flow, find the pipes that will provide such water at the minimum cost

  • the hydraulic check problem - given the pipes, find the water flows and perform a control to see whether the working conditions do not exceed the rated limits of the installed hydraulic hardware.

Gravity

Warning

Linear programming techniques work well for pipe sizing problems involving branched systems with one directional flow (see Robinson, 1976). However, discrete pipe and discrete pipe pressure classes mean that in a hilly profile we have to design a gravity system by use of systematic search of the best solution. We outline that cost of pipes and hydraulic friction depend heavily of the second and fifth power of the pipes’ radii, so it is warranted that a suitable design may result in remarkable gains on the invested money.

The physical system

In a gravity water supply we have a water spring and a network of pipes, shaped as a tree, which brings the water to a number of water reservoirs at a lower elevation than the spring itself.

Warning

Remark: in this document, for the sake of clarity, we espose the hydaulic thory unsing as an example a simple water supply made of a spring, a single junction that bisects in two and two water tanks. The whole system is made of three trenches. In a real system the topology may be more complex than this; there may be more junctions. Also, some water tanks may receive water and then discarge it in another water supply, as if they were “springs”. We kept this example simple to ease the reader getting used to the water supply; in the next section, algorithms, we will instead make use of a “generic” water supply, made of a “generic” number of junctions.

General concepts

The names in bold below correspond to those used by the classes of the software.

The ‘topology’ of the water supply system
A tree represents the water supply system composed of its pathways from the source to each water reservoir. A pathway represents the trench along which the pipes are laid down.
A pathway has a ‘tail end’ and a ‘head end’ and water flows from tail to head. A pathway has an altimetric profile associated with it.
Since the pathways are laid down as the branches of a tree, then each pathway may have ‘children’ pathways that branch off its head end.
The network is a tree; therefore water flows in a unique path and direction towards each reservoir.

The ‘water demand’ in the water supply system
Water abstraction takes place only at the reservoirs; indeed, we assume that the users live ‘nearby’ the reservoirs. One may imagine that the reservoirs are placed in the centre of the various village neighbourhoods (or near a school, near the market, near the location where the village houses or huts are more scattered). There are no water abstractions along the pathway. Therefore water flow along each pathway remains constant along the pathway itself.

The ‘independent parts’ in the water supply system (a.k.a. the ‘pressure zones’)
Let’s imagine that we have a spring that serves two villages located in a valley, and the second village is further downstream in the valley. In this case the topology of the water supply will be: (1) a pathway from the spring to the ‘nearest village’ and a second pathway from the ‘nearest’ to the ‘farthest village’. In this case, all the water that reaches the second village (the farthest) will flow through the reservoir of the first (the closest) village. This is a common scenario and more complex topologies could also exists, like in the images of the tutorial, where there is a Y-shaped water supply, and one of the reservoirs feeds another village, more far away. Remark: in all such cases, the water reservoir behaves like a ‘spring’ for any other pathway that abstracts water from such reservoir and transports it further away downstream. Therefore a tree of pathways may be split into one or more disjoint pressure zones.
From the point of view of hydraulic equations, every pathway whose head end is a reservoir gives rise to an independent water supply system stemming from each of its child pathways. In fact, from the point of view of solving the hydraulic equations, a reservoir is identical to the spring: it is “what provides water” into the “downstream” pipes (otherwise said: it provides water into the downstream section of the water supply). This independent system is called a pressure zone. Each pressure zone is independent of the others and their hydraulic energy equations are solved separately.
How water flow is controlled in the water supply system
Nothing controls the water flow better than the law of gravity. Since we are talking about reliable solutions and intrinsic technology, with as little maintenance as possible, we avoid using ‘gate-valves’ installed along the pathways and then partially closed to the required amount of water. Instead, the pipes have no gate-valves, the flow flows continuously along the 24 hours and fills the water reservoirs. The water flow is set by the diameters of the commercial pipes and by the continuous flow under gravity. The next section introduces the equations of flow under the pure force of gravity.

The equations that model the system

The gravity water supply is modelled by two kinds of equations:
  • the continuity of water flows.

  • the continuity of hydraulic energy.

Continuity of water flows:
For each pathway, its water flow is the sum of the water flows in its children pathways plus the water flow, if any, required at its head end. If such water flow at the head end exists, then the head end is a reservoir and each of the children pathways represents the source for a “separated” or “independent” water supply.

Continuity of hydraulic energy:
This is the law of Bernoulli. For each pathway, the hydraulic energy at its head end is equal to the energy at the tail end minus the hydraulic friction in the pathway due to its water flow and to the sequence of pipes laid down along the trench.

Example
Imagine you have the following gravity water supply:
  • there is a spring

  • from th spring the pipeline goes to a junction where the pipe branches in two

  • the two branches go to Tank1 and Tank2 respectively.

This is therefore a Y-shaped water supply, a typical configuration where one source, the spring, must be shared by two villages or by two water tanks at the opposite ends of a larger village.
The equations that describe this system are:
  • the conservation of water flows

  • the energy difference in each of the 3 branches is the hydraulic friction in the pipes

These equations are written below:

We start with the conservation of flows:

\[\begin{eqnarray} Q_{Spring\rightarrow{Tee}} = Q_{Tee\rightarrow{Tank1}} + Q_{Tee\rightarrow{Tank2}} \end{eqnarray}\]

Next comes the conservation of energy:

\[\begin{split}\begin{eqnarray} Z_{Spring} - kQ_{Spring\rightarrow{Tee}}^2(\sum_{j=1,...,segments} {\frac{L_j}{D^5_j}}) = H_{Tee} \\ H_{Tee} - kQ_{Tee\rightarrow{Tank1}}^2(\sum_{j=1,...,segments} {\frac{L_j}{D^5_j}}) = Z_{Tank1} \\ H_{Tee} - kQ_{Tee\rightarrow{Tank2}}^2(\sum_{j=1,...,segments} {\frac{L_j}{D^5_j}}) = Z_{Tank2} \end{eqnarray}\end{split}\]
Where the symbols represent:
\(Z_{Spring}\) is the elevation of the spring
\(H_{Tee}\) is the hydraulic energy at the junction of the Y-shaped pathways
\(Z_{Tank1}\) and \(Z_{Tank2}\) are the elevations of the two water tanks where the water flows to
for each segment, \(L_j\) and \(D_j\) represent xxx and \(j\) is the index over the piped segments. A piped segment is a stretch along which the same pipe is used.
Example explaining the piped segments: Imagine to have one pathway is long 1000 meters and that we use a ‘2 inches pipe rated for 60 meters of water pressure’ (short-handed as 2”PN6 pipe) for 600 meters followed by a ‘3 inches with the same pressure rating’ (short-handed 3”PN6) in the remaining 400 meters of the pathway pathlength. Then, we have two segments and the symbols in the above sum would bear the values of:

\(L_1\) would be 600 \(D_1\) would be the internal diameter of a 2 inches pipe \(L_2\) would be 600 \(D_2\) would be the internal diameter of a 2 inches pipe

In the ‘hydraulic design problem’ the unknowns are: \(Q_{Spring\rightarrow{Tee}}\) \(Q_{Tee\rightarrow{Tank1}}\) \(Q_{Tee\rightarrow{Tank2}}\) The known data are all the other symbols. Therefore we have 4 equations and 4 unknowns and the system can be solved.

Check

With reference to the above equations, the hydraulic check problem is the problem of solving the above equation, where the unknowns are the water flows.

Design

This requires much more engineering judgement than the hydraulic check.
Let’s investigate the tree of pipes. In such condition there is an interesting problem of economics. At each pathway, the hydraulic energy at its tail end and head end should remain close to the ground elevation so that the pressure along the pathway remains low and all the pipes may be selected from those commercial pipes belonging to the lowest rated pressure class. If this is the case then each pathway may be solved separately with the technique of the “simplex”. pressures.
However, real life cases may involve hilly profiles. The pathway may cross a deep valley. This is the case when the villages are scattered on the other flank of a valley from that were the water spring is located. In such cases, the values of hydraulic energy at tail and head ends of the pathways must be kept “far above” the ground elevation if a head end lies in the middle of a valley that is crossed by the water supply. In this case an interesting (and difficult) problem of optimization arises: is is preferable to burn more hydraulic energy through friction in the pipe sections with higher pressure rating or the opposite? The solution depends, case by case, from the amount of water required and from the elevation profile along the pathways. This problem of optimization cannot be solved using the “simplex” method. In fact, it is not a “convex problem” due to the discontinuities introduced by the existence of both discrete diameters and discrete pressure ratings. See :ref: algorithms_gravity_design how this translates in an algorithm.
base.svg

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

_images/Y_shaped_pathways.svg

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

_images/Y_waterflow_right.svg

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

_images/Y_waterflow_left.svg

Borehole’s station

I link with the module gravity now i link with the class GravityDesign and even the method solve_hydraulic_design_problem()

I want to refer to the equations (system_of_equations) and to the algorithm (the_algorithm)

We now move to the second typology of rural water supply system: a small pumping station that connects a borehole, with a water reservoir which is far from the borehole and usually at higher that that of the site where the borehole is located.

We deal with two kinds of borehole stations: with and without electric power. The reason is because this software is dedicated to rural solutions and, as such, it must consider the case where electric power is not available.

Remark: with ‘not available’ here we mean an arrangement that works entirely *without electric power. With ‘electricless’ we mean a solution that is not *making use of electric power because it is preferred to have a rural plant

Where electric current is not available, it can nonetheless be produced by an electric generator set.

However, when we speak of ‘electricless’ pumping station, we mean that the presence of electric power is intentionally avoided (and so it is avoided to use an electric generator) despite it can always be generated even in remote area by a generating set. The logic is that electric power is both a difficult subject and it introduces complexity in the hardware and the need for spare parts.

The key point is that electric power might be tricky in a rural context. Knowledge about how to run the maintenance of an electric pumping station is hard and could be not available locally; perhaps the spare parts could be difficult to find on the local market. For these reasons, this software allows you to design a pumping station composed of electricity-free parts, and more precisely: a diesel engine with manual start, that drives directly a pump, with no need of electric motor in the pump (since it is driven directly by the engine through a system of belts and pulleys) nor of electric start in the diesel engine itself (which is indeed started manually with a handle keyed on the crankshaft). Readers who have experience in humanitarian water supply interventions in rural areas of the world will recognise in this ‘electricless’ station the arrangement with a Listeroid diesel engine and a monopump. We provide more information about such equipment in these pages: LINK engine and LINK pump.

  • the ‘electric’ arrangement, where we may use electric power.

IMPORTANT: this a work in progress so the sections below are now kept as stubs for future implementation.

Electric Station

Check problem

TODO

Design problem

We examine the case of a feeder. The feeder entails an interesting problem of economics.

Will it be preferable to adopt small bore feeders (and therefore limit the cost of pipes) and consequently have a high hydraulic energy to overcome (and therefore install more expensive pumps) or adopt the opposite solution (larger pipes and smaller pumps)?

Electricless Station

Check problem

TODO

Design problem

TODO

Note

If only I had written down why I had done this. Life would be so much simpler. Documentation allows you to transfer the why behind code. Much in the same way code comments explain the why, and not the how, documentation serves the same purpose

Algorithms

Gravity

Warning

So far, in the fydraulcis section, we described the theory using a simple water supply composed of a simple Y shape and three trenches. REF FIGURE LA PRIMA Now onwards, we follow a more generic approach, typical of mathematiccs, to describe the algorithm and we will consider a water supply system of a generic tree topology: it may therefore makde of more tahn 3 threnches. Starting from FIGURE we see a susystem of 7 trenches. In real life cases, this case of seven trenches and 5 reserovirs is likely one of the most difficutl cases you could face. Hpwever, the algorithm we describe here are balid of any numer of trenches and any topology, provied it has the topological shape of a tree.

As seen in Gravity, the network of pipes is shaped as a tree. Ruralwater models the network of pipes as a directed acyclic graph (i.e.: a tree) whose nodes are the pathways.

here is a pdf file pdf

Check problem

The hydraulic check problem algorithm is the following:
  • create the hydraulic energy equations of the law of Bernoulli, where the known data are: the friction per unit water flow, the elevation at the spring and at all the reservoirs.

  • create the water flow continuity equations for each pathway that has children.

  • the unknowns are: the water flow in each pathway

  • create the symbolic equations of the law of Bernoulli

  • create the symbolic equations of the law conservation of water flow

  • consider the equations above as a system of equations and solve it.

  • once the system of equation is solved, consider the water flow obtained in each pathway and calculate the hydraulic energy along each pathway.

  • detect if at any point in any of the pathways, the resulting water pressure (hydraulic energy minus elevation) exceeds the pressure limit for the pipe used in that position.

Design problem

The algorithm in a nutshell

Before illustrating the algorithm in detail, we outline it. This will make the comprehension of the steps, detailed below, more straightforward. In essence, the hydraulic design problem is an optimization problem, where the objective function is the cost of the piped segments, the variables are the hydraulic energy at each junction where the pipeline bisects and the constraints are the elevation, where the hydraulic energy is tied to be equal to the elevation at the root (the spring) and at the leaves (the reservoirs). The approach we adopt to solve the hydraulic design problem is to perform a “systematic search” (the reader may want to perform a search off the internet about such topics). This means that:

  • the physical water supply is a tree of trunks; a trunk is a trench where the pipes are laid down and a sequence of ‘segments’ which describe the pipe material, its diameter and the pressure it can withstand and the linear length where such pipe is used along the trench. Along the trunk the flow of water is constant, there are no abstraction points. Each trench has a ‘tail end’ which lies upstream (so, closer to the spring) and a ‘head end’. Water always flows from tail to head. Water flow is different from trunk to trunk since a trunk at its head end may bifurcate into two (or more) trunks, whose tail end correspond with the head end of the parent trunk. What we have described it the topology of a tree or, in more technical terms, an acyclic directed graph of node and each trunk is a node.

  • a spurious case of the tree is the water supply system composed by a single trunk. In this case we only have one trench, no bifurcations and the pipes connect a spring to a reservoir.

  • we model the water supply as a tree of trunks. Therefore each trunk is a ‘node’ of a ‘tree’ (aka an acyclic direcyed graph) in mathematical lingo. Each node has an adjancency set which is the list of trunks that stem from a trunk head end.

  • The equations of hydraulics are therefore translated as follows:

  • the continuity of water flow translates as: the water flow in a trunk is the sum of the water flows from each trunk in its adjacency list

  • the continuity of hydraulic energy translates as: for each trunk has a value of energy at its head end and the trunks belongin to its adjacncey list all have this value of energy at theit tails

  • we call a ‘inner junctions’ all the junctions where a trunk bisects into two or more trunks. Therefore, if we keep in mind the description of the tree of trunks, the junctions are the ‘head end’ of the root trunk (whose tail end is the water spring), the tail end of all trunks that discharge water into a reservoir (we can call them leaf trunks by similarity with the tree) and both the ends of all other trunks.

  • we keep the energy fixed at the spring and at the tanks; the fixed value is that of the elevation at such points (spring and tanks),

  • we perform a permutation of all possible values of energy in the the junctions. A permutation is valid only if, for each junction, its parent junction has a higher value of energy, otherwise the water could not flow. Remember that water flows from ‘tail’ to ‘head’ so the ‘tail junction’ must have higher energy than ‘head junction’.

  • for each permutation which is valid, we then solve the hydraulic design problem in each trunk with the tail and head values of energy fixed. The solution inside the single trunk may differ if the elevation profile is hilly and several algorithms are taken in account to try finding the optimal solution.

  • The we collect the cost from each trunk for the current permutation and continue looping in all permutations.

  • Once all permutations have been inspected, we identify the one which leads to the least economic cost.

https://github.com/claudiofinizio/ruralwater/blob/master/_algorithms/GravityDesign._solve_subtree.png

So far for the logical steps of the algorithm. However, when dealing with the ‘actual’ programming language (python) here we describe how we translated the above logic into language instructions:

  • to loop over all permutations we adopted the python’s concept of coroutine.

The overbanking energy, an introductory concept, is now introduced.

Overbanking energy

Water flows from higher to lower hydraulic energy… 💪 Therefore we set recursively the minimum hydraulic energy at a pathway’s tail end to be the energy at the head end plus “some energy” to allow a difference of hydraulic energy along the pathway and therefore the water flow. Typically the overbanking energy is the elevation plus “some energy”, but in the case that the pathway climbs a hill then the overbanking energy is the highest elevation point downstream plus “some energy”.

Steps of the algorithm

The idea is then to perform a “search” by inspecting all possible combinations of hydraulic energy the pathways. This is therefore a permutation. For the allowed value of energy, the root pathway has a tail end energy fixed (it is the elevation), each of the leaves have a head end fixed energy (their elevations). The permutations regard therefore the head energy of the root pathway, the tail energy of the leaves pathways and both tail and head energy of each pathway that are neither root nor leaf. Also, the permutation must be limited to those combinations that allow an energy differential between tail and head end. The goal of the coroutine is exactly to ensure the above conditions. This is so because the coroutine is a generator that allow to loop and ensure the above conditions. Since this process must be valid for each possible topology of the branched network, then the coroutine is in charge of tackling this problem in a generic approach valid for each topology.

Image “5_pathways_overbank - only maxmin hydr energy” shows this idea.

  • the “Tee Up” may have a max energy of X otherwise water could not flow from the spring

  • the “Tee left” must

  • the same logic applies to “Tee right”

  • The pathways are nodes and some of them are leaves.

  • the algorithm breaks down the tree of pathways into the pressure zones

  • for each pressure zone it executes the steps below

  • it sets the hydraulic energy at the tail end of the root node to be identical to the elevation at that end

  • it sets the hydraulic energy at the head end of each leaf node to be identical to the elevation at that end

  • it traverses the tree with a ‘depth-first search’ methodology

  • while performing such depth-first search, it sets the ‘over-banking’ hydraulic energy to each node (apart from the leaves nodes) tail end. QUESTA FRASE IN MAIUSCOLO EST INCOMPLETA : THIS OVERBANKING ENERGY IS SET RECURSIVELY TO BE “A BIT” GREATER THAN THE OVERBANKING ENERGY AT THE LEAF NODES. COSA FAI AI NODI INTERNI? NON LO HA DETTO

  • it permutes through all the combinations of over-banking energy at each non-leaf node. At this point each pathway has a value of tail end and head end hydraulic energy set.

  • it evaluates the most economic pipes for those values of energy; this is the XXX algorithm and is still source of study. The evaluation of which are the most economic pipes cannot be solved by use of the simplex algorithm (as other software do) because we are dealing with hilly profiles (rural indeed) and therefore the pipe pressure classes must be taken in account and the problem to solve becomes non-convex. So, no simplex algorithm of use here…. 😞

  • it sums the economic cost from each pathway

  • it selects the solution which led to the lowest economic cost.

The image below gives an idea:
_images/5_pathways_overbank.svg

Electric Station

Check problem

TODO

Design problem

TODO

Electricless Station

Check problem

TODO

Design problem

TODO

Warning

This is currently a work in progress (API wil not be stable before 1.0) so don’t expect it to be perfect but please submit an issue for any bug you find or any feature you want.

The hydraulic problem

Here we talk about the problem in the hydraulicn theory. See Hydraulics to know what the water engineer must do.

The computer software algorithm

Here we talk about the computer algorithm to tackle the hydraulic theory. See algorithms to know what the computer scientist must do.

Glossary

pathlength

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..

downrange

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum..

elevation

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

hcp

the hydraulic check problem

hdp

the hydraulic design problem

hydraulic_energy

why energy is expressed in meters SPIEGARE NELLA DOCUMENTAIZONE ESTERNA AL CODICE RICORDA CHE WIKIPEDIA LO SPIEGA BENE

swivel_point

Intersection between the HGL from a pipe

..see some-label-name for more detail

Indices and tables