You are on page 1of 15

Analisis y Diseno de Redes de Agua Potable

Metodo del Gradiente Hidraulico en el Lenguaje


de programacion IPython (2.7) Notebook
LATEX
15 de julio de 2015
Resumen
El programa est
a escrito en el leguaje de PYTHON. Los resultados
obtenidos por este programa fueron comprovados con el programa coputacional EPANET 2.0 vE, las diferencias se encuentran dentro de los
m
argenes permisibles

Este programa es una formulaci


on completaente matricial para el an
alisis y dise
no de redes de abastecimiento de agua potable,se trabaja en por
elementos finitos identificando los puntos externos como nodos y a partir
de este se trabaja con iteraciones de los caudales en cada tuberia y presiones en cada nodo.

Medienate este metodo es posible analizar indistintamente las redes


abiertas y cerradas o ambas juntas, encontrando resultados acercados razonablemente LATEX.

1.

Desarrollo del Programa

Este programa utiliza el Metodo de Gradiente Hidraulico para el analisis y dise


no de sistemas de abastecimiento de agua. La cual nos permite el
analisis de redes de tuberias para diferentes tipos de tuberas con diferentes
tipos de rugosidades absolutas, lo cual es muy util. Se puede ingresar El
numero de reserborios, perdidas locales por accesorios, tambien se puede
ingresar bombas en cualquier tramo lo que hace al programa muy u
til.
Se toma un ejercicio pr
actico mostrandose los resultados obtenidos en
el preogram desarrollado.

1.1.

Ejemplo de Aplicaci
on

Obtener las presiones en cada nudo y los caudales en cada tubera de


la red que se muestra, mediante el metodo del gradiente hidr
aulico.

El sistema se encuentra en el plano y la cota piezometrica del ?nudo


1? es de 80m

1.1.1.

Soluci
on

Identificar los Nudos y enumerarlos, as como las tuberias y asignando


el sentido de los caudales que transitara como en el siguiente grafico.

Donde se muestra la numeracion de tuberias y de nudos, asi como tambien


la direccion del caudal, todo esto es asumido segun criterio.

1.1.2.

DEFINICION DE DATOS DE LA RED

Definiendo la RED El ingreso de Datos se dara con la matriz RED


[ ] La cual estara conformada por la siguiente Matriz
N Tub.
1
2
3
4
5
6
7

Ni
1
1
2
4
3
5
4

Nf
2
3
4
6
5
6
3

Long.
300
400
400
500
500
300
300

Diam.
254
203.2
203.2
132.4
152.4
152.4
152.4

Per.
0
0
0
0
4
0
0

Ks
0.00006
0.00006
0.00006
0.00006
0.00006
0.00006
0.00006

Ni : Nudo Inicial
Nf : Nudo Final
Long.: Longitud de Tuberia (m)
Diam.: Diametro de la Tuberia (mm)
Per. : Zumatoria de Perdidas Locales
Ks : Rugosidad absouta (m)

Datos de Nudo (MSNM) Matriz de Nudos matriznudo


N Nudo
1
2
3
4
5
6

CT
0
0
0
0
0
0

Qd
0
50
30
40
20
40

Rugosidad Absoluta de la Tubera[M] La rugosidad Absuluta


de la Tubera es de acuerdo al material en este caso sera:
ks = 0,006x103

Viscocidad Cinematica [m2/s]


v = 1,14x106

Reserborios que abastecen la red (RSV) Se almacennara con


la Variable [RSV] que es la(s) Cota(s) Piezometricas conocidas
N
1

Nudo
1

Cota
80

Definiendo Bombas en la red: Se define el numero de tuberia y


la altura de presion del agua en la cual estar
a la bomba en la red. Se
representa este simulando si hay una bomba.
N Nudo
1
2
3
4
5
6
7

1
0
0
0
0
0
0
0

2
0
0
0
0
0
0
0

3
0
0
0
0
0
0
0

Donde:
La columna 1: Coeficienta .a
La columna 2: Coeficienta b
La columna 3: Coeficienta c
Se colocan con 0PORQUE NO EXISTE BOMBA.

1.1.3.
LO

PROCESO DE PROGRAMACION Y DE CALCU-

El codigo de Fuente es de PYTHON NOTEBOOK:

IMPORTACION DE LIBRERIAS
from numpy import *
import numpy as np
from math import *

INGRESO DE DATOS GENERALES


g = 9.801
# Aceleracion de la gravedad
Tol = 1E -5;
# Precision
Imax = 20;
# Maximo de iteraciones
temp =15
# TEMPERATURA
Vs =(1.14 - 0.031*( temp -15) + 0.00068*( temp -15)**2)*1 e -6
m =2;
# ecuacion de DARCY - WEBASH
Qi =0.2
# Q semilla
rsv =1
# Numero de Reservorios

DATOS DE LA RED
matrizred = np . genfromtxt ( dRED . txt )
at = array ( matrizred [: ,1:5])
ni = matrizred [: ,0]
LT = matrizred [: ,3]
DT = matrizred [: ,4]*.001

km = matrizred [: ,5]
ks = matrizred [: ,6]
NT =( ni ). size # TAMA ~
N O de elementos
QT = array ([ Qi for i in range (0 , NT )])
NN1 = NT
NN = NN1 - rsv # NN1 numero de nudos del sistema
print ES UNA RED DE : ,NT , TUBERIAS
ES UNA RED DE: 7 TUBERIAS

Q. Demanda (matriznudo)
matriznudo = np . genfromtxt ( datosNUDOM . txt )
nnudo = matriznudo [: ,0]
CT = matriznudo [: ,1:2]
matrizdemanda = matrix ( matriznudo [: ,2]). T
qi =( matrizdemanda )[ rsv : NN1 ]*0.001
NN1 = nnudo . size
NN = NN1 - rsv # NN1 numero de nudos del sistema
NS = rsv
At1 = np . zeros ([ NT , NN1 ])# Crea matriz de zeros de NT * N1
print Numero de Nudos [ NN ]= , NN ,
qi
Out
Numero de Nudos [ NN ]= 5
[[ 0.05] ,
[ 0.03] ,
[ 0.04] ,
[ 0.02] ,
[ 0.04]]

Q. Demanda (matriznudo)
print DT =
DT
Out
DT =
array ([ 0.254 ,
0.1524 ,

0.2032 , 0.2032 ,
0.1524])

Q. Demanda (matriznudo)
At1

0.1324 ,

0.1524 ,

Out

array ([[
[
[
[
[
[
[

0. ,
0. ,
0. ,
0. ,
0. ,
0. ,
0. ,

0. ,
0. ,
0. ,
0. ,
0. ,
0. ,
0. ,

0. ,
0. ,
0. ,
0. ,
0. ,
0. ,
0. ,

0. ,
0. ,
0. ,
0. ,
0. ,
0. ,
0. ,

0. ,
0. ,
0. ,
0. ,
0. ,
0. ,
0. ,

0.] ,
0.] ,
0.] ,
0.] ,
0.] ,
0.] ,
0.]])

Datos de la Bomba
matrizBMB = np . genfromtxt ( datosBMBM . txt )
print matrizBMB
Out

[[
[
[
[
[
[
[

0.
0.
0.
0.
0.
0.
0.

0.
0.
0.
0.
0.
0.
0.

0.]
0.]
0.]
0.]
0.]
0.]
0.]]

MATRIZ DE CONECTIVIDAD
for i in range (0 , NT ):
j = at [ i ][0];
# Toma valores de la 1 ra columna de matrizred
At1 [ i ][ j -1]= -1; # lo Remplaza x -1
j = at [ i ][1];
# Toma valores de la 2 da columna de matrizred
At1 [ i ][ j -1]=1;
# lo Remplaza x -1
At = At1
At
Out

array ([[ -1. , 1. , 0. , 0. , 0. ,


[ -1. , 0. , 1. , 0. , 0. ,
[ 0. , -1. , 0. , 1. , 0. ,
[ 0. , 0. , 0. , -1. , 0. ,
[ 0. , 0. , -1. , 0. , 1. ,
[ 0. , 0. , 0. , 0. , -1. ,
[ 0. , 0. , 1. , -1. , 0. ,

0.] ,
0.] ,
0.] ,
1.] ,
0.] ,
1.] ,
0.]])

MATRIZ DE CONECTIVIDAD TOTAL


A12 = matrix ( At [0: NT ,1: NN + NS ])
A12
Out

matrix ([[ 1. , 0. , 0. , 0. ,
[ 0. , 1. , 0. , 0. ,
[ -1. , 0. , 1. , 0. ,
[ 0. , 0. , -1. , 0. ,
[ 0. , -1. , 0. , 1. ,
[ 0. , 0. , 0. , -1. ,
[ 0. , 1. , -1. , 0. ,

0.] ,
0.] ,
0.] ,
1.] ,
0.] ,
1.] ,
0.]])

In

A21 = A12 . T
A21
Out

matrix ([[
[
[
[
[

1. ,
0. ,
0. ,
0. ,
0. ,

0. , -1. , 0. , 0. , 0. , 0.] ,
1. , 0. , 0. , -1. , 0. , 1.] ,
0. , 1. , -1. , 0. , 0. , -1.] ,
0. , 0. , 0. , 1. , -1. , 0.] ,
0. , 0. , 1. , 0. , 1. , 0.]])

In

A10 = matrix ( At [0: NT ,0: rsv ])


A10
Out

matrix ([[ -1.] ,


[ -1.] ,
[ 0.] ,
[ 0.] ,
[ 0.] ,
[ 0.] ,
[ 0.]])
In

Ho = int ( raw_input ( " COTA de Reservorios : " ))


Ho
Out

[80]
In

I = matrix ( identity ( NT ). astype ( int ))


Ndw = I * m # cambiar 2 segun formula
Qac = QT
Ho

PROCESO ITERATIVO

for u in range (1 , Imax ): # OPTIMIZAR ESTO


ff = zeros ([ NT ])
Re =4* Qac /( pi * DT * Vs )
for i in range (0 , NT ):
KM = km [ i ]
Dt = DT [ i ]
RE = Re [ i ]
tol =1 e -14
f, F = 1, 2
con =0
while ( abs (f - F ) >= tol ):
F=f
f =( -2* log ( KM /(3.7* Dt )+ 2.51/( RE * sqrt ( f )) ,10))** -2
con = con +1
ff [ i ]= f
alfa =(0.08262686* ff * LT )/( DT **5)
beta =(8* Qac * km )/(9.807* pi **2* DT **4)
lamda = mbomba [: ,0]* Qac **2+ mbomba [: ,1]* Qac + mbomba [: ,2]
A1 = alfa * Qac **( m -1)+ beta # +( lamda / Qac )
A11 = matrix ( diag ( A1 ))
Hnext = -(( A21 * Ndw . I * A11 . I * A12 ). I )*( A21 * Ndw . I *( matrix ( Qac ). T + A11 . I * A10 * Ho )+
Qnext =( I - Ndw . I )* matrix ( Qac ). T -( Ndw . I * A11 . I )*( A12 * Hnext + A10 * Ho )
error = sqrt ( sum ( array ( abs (( Qnext -( matrix ( Qac ). T ))))**2))

print ( Qac )
Qac = zeros ([ NT ])
for i in range (0 , NT ):

Qac [ i ]= abs ( Qnext [i ,0])


Out

[ 0.2 0.2 0.2 0.2 0.2


[ 0.17233287 0.00766713
0.03345278 0.01345278
[ 0.12527594 0.05472406
0.03877887 0.01877887
[ 0.11021138 0.06978862
0.03608775 0.01608775
[ 0.10613726 0.07386274
0.03511839 0.01511839
[ 0.10730106 0.07269894
0.03546269 0.01546269
[ 0.1069416
0.0730584
0.03536498 0.01536498
[ 0.10704915 0.07295085
0.03539519 0.01539519
[ 0.1070166
0.0729834
0.03538616 0.01538616
In

Qnext
Out

matrix ([[ 0.10702641] ,


[ 0.07297359] ,
[ 0.05702641] ,
[ 0.02461111] ,
[ 0.03538889] ,
[ 0.01538889] ,
[ -0.0075847 ]])
In

error
Out

0.015181957586552062

0.2 0.2]
0.12233287
0.05578565]
0.07527594
0.01405481]
0.06021138
0.00370087]
0.05613726
0.00874436]
0.05730106
0.00723626]
0.0569416
0.00769342]
0.05704915
0.00755566]
0.0570166
0.00759725]

0.02654722
0.02122113
0.02391225
0.02488161
0.02453731
0.02463502
0.02460481
0.02461384

Presiones en los puntos (metros)


CTT = array ( CT )[ rsv : NN1 ]
Hfinal = Hnext - CTT
Hfinal
Out

matrix ([[
[
[
[
[

76.42702164] ,
73.04051504] ,
71.97667293] ,
63.6820954 ] ,
62.42914032]])

Caudales Resultantes (lt/s)


QT
Out

array ([ 0.2 ,

2.

0.2 ,

0.2 ,

0.2 ,

0.2 ,

0.2 ,

Conclusiones

Con el programa desarrollado se puede simular los diametros de tuberias para poder obtener presiones velocidades y caudales que esten de
acuerdo a la norma, la cual es de mucha ayuda para el dise
no de Redes
de tuberia de Agua potable eficiente y optimizado.
Vemos que el programa simula correctamente y en las iteraciones respectivas.

3.

Referencias

1. Dise
no de una Red de Abastecimiento de agua ? Metodo del Gradi
ente Hidr
aulico? Autor- CANCHARI GUTIERREZ,
Edmundo
2. Hidraulica de tuberas - Juan Saldarreaga

4.

Anexos
Se muestra las imagenes capturadas del Programa

10

0.2])

11

12

13

14

15

You might also like