gradiente hidraulico
DESCRIPTION
grad hTRANSCRIPT
-
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 esta escrito en el leguaje de PYTHON. Los resultadosobtenidos por este programa fueron comprovados con el programa cop-utacional EPANET 2.0 vE, las diferencias se encuentran dentro de losmargenes permisibles
Este programa es una formulacion completaente matricial para el anali-sis y diseno de redes de abastecimiento de agua potable,se trabaja en porelementos finitos identificando los puntos externos como nodos y a partirde este se trabaja con iteraciones de los caudales en cada tuberia y pre-siones en cada nodo.
Medienate este metodo es posible analizar indistintamente las redesabiertas y cerradas o ambas juntas, encontrando resultados acercados ra-zonablemente LATEX.
1. Desarrollo del Programa
Este programa utiliza el Metodo de Gradiente Hidraulico para el anal-isis y diseno de sistemas de abastecimiento de agua. La cual nos permite elanalisis de redes de tuberias para diferentes tipos de tuberas con diferentestipos de rugosidades absolutas, lo cual es muy util. Se puede ingresar Elnumero de reserborios, perdidas locales por accesorios, tambien se puedeingresar bombas en cualquier tramo lo que hace al programa muy util.
Se toma un ejercicio practico mostrandose los resultados obtenidos enel preogram desarrollado.
1
-
1.1. Ejemplo de Aplicacion
Obtener las presiones en cada nudo y los caudales en cada tubera dela red que se muestra, mediante el metodo del gradiente hidraulico.
El sistema se encuentra en el plano y la cota piezometrica del ?nudo1? es de 80m
1.1.1. Solucion
Identificar los Nudos y enumerarlos, as como las tuberias y asignandoel sentido de los caudales que transitara como en el siguiente grafico.
Donde se muestra la numeracion de tuberias y de nudos, asi como tambienla direccion del caudal, todo esto es asumido segun criterio.
2
-
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. Ni Nf Long. Diam. Per. Ks1 1 2 300 254 0 0.000062 1 3 400 203.2 0 0.000063 2 4 400 203.2 0 0.000064 4 6 500 132.4 0 0.000065 3 5 500 152.4 4 0.000066 5 6 300 152.4 0 0.000067 4 3 300 152.4 0 0.00006
Ni : Nudo InicialNf : Nudo FinalLong.: Longitud de Tuberia (m)Diam.: Diametro de la Tuberia (mm)Per. : Zumatoria de Perdidas LocalesKs : Rugosidad absouta (m)
Datos de Nudo (MSNM) Matriz de Nudos matriznudo
N Nudo CT Qd1 0 02 0 503 0 304 0 405 0 206 0 40
Rugosidad Absoluta de la Tubera[M] La rugosidad Absulutade 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 conla Variable [RSV] que es la(s) Cota(s) Piezometricas conocidas
N Nudo Cota1 1 80
3
-
Definiendo Bombas en la red: Se define el numero de tuberia yla altura de presion del agua en la cual estara la bomba en la red. Serepresenta este simulando si hay una bomba.
N Nudo 1 2 31 0 0 02 0 0 03 0 0 04 0 0 05 0 0 06 0 0 07 0 0 0
Donde:La columna 1: Coeficienta .aLa columna 2: Coeficienta bLa columna 3: Coeficienta c
Se colocan con 0PORQUE NO EXISTE BOMBA.
1.1.3. PROCESO DE PROGRAMACION Y DE CALCU-LO
El codigo de Fuente es de PYTHON NOTEBOOK:
IMPORTACION DE LIBRERIASfrom numpy import *
import numpy as np
from math import *
INGRESO DE DATOS GENERALESg = 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)*1e-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
4
-
km=matrizred [:,5]
ks=matrizred [:,6]
NT=(ni).size # TAMA~NO 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.2032 , 0.2032 , 0.1324 , 0.1524 ,
0.1524 , 0.1524])
Q. Demanda (matriznudo)
At1
5
-
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 1ra columna de matrizred
At1[i][j-1]= -1; #lo Remplaza x -1
j=at[i][1]; #Toma valores de la 2da columna de matrizred
At1[i][j -1]=1; #lo Remplaza x -1
At=At1
At
Out
array ([[-1., 1., 0., 0., 0., 0.],
[-1., 0., 1., 0., 0., 0.],
[ 0., -1., 0., 1., 0., 0.],
[ 0., 0., 0., -1., 0., 1.],
[ 0., 0., -1., 0., 1., 0.],
[ 0., 0., 0., 0., -1., 1.],
[ 0., 0., 1., -1., 0., 0.]])
6
-
MATRIZ DE CONECTIVIDAD TOTAL
A12=matrix(At[0:NT ,1:NN+NS])
A12
Out
matrix ([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[-1., 0., 1., 0., 0.],
[ 0., 0., -1., 0., 1.],
[ 0., -1., 0., 1., 0.],
[ 0., 0., 0., -1., 1.],
[ 0., 1., -1., 0., 0.]])
In
A21=A12.T
A21
Out
matrix ([[ 1., 0., -1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., -1., 0., 1.],
[ 0., 0., 1., -1., 0., 0., -1.],
[ 0., 0., 0., 0., 1., -1., 0.],
[ 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
7
-
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=1e-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)+qi -A21*matrix(Qac).T)
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):
8
-
Qac[i]=abs(Qnext[i,0])
Out
[ 0.2 0.2 0.2 0.2 0.2 0.2 0.2]
[ 0.17233287 0.00766713 0.12233287 0.02654722
0.03345278 0.01345278 0.05578565]
[ 0.12527594 0.05472406 0.07527594 0.02122113
0.03877887 0.01877887 0.01405481]
[ 0.11021138 0.06978862 0.06021138 0.02391225
0.03608775 0.01608775 0.00370087]
[ 0.10613726 0.07386274 0.05613726 0.02488161
0.03511839 0.01511839 0.00874436]
[ 0.10730106 0.07269894 0.05730106 0.02453731
0.03546269 0.01546269 0.00723626]
[ 0.1069416 0.0730584 0.0569416 0.02463502
0.03536498 0.01536498 0.00769342]
[ 0.10704915 0.07295085 0.05704915 0.02460481
0.03539519 0.01539519 0.00755566]
[ 0.1070166 0.0729834 0.0570166 0.02461384
0.03538616 0.01538616 0.00759725]
In
Qnext
Out
matrix ([[ 0.10702641] ,
[ 0.07297359] ,
[ 0.05702641] ,
[ 0.02461111] ,
[ 0.03538889] ,
[ 0.01538889] ,
[ -0.0075847 ]])
In
error
Out
0.015181957586552062
9
-
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, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2])
2. Conclusiones
Con el programa desarrollado se puede simular los diametros de tu-berias para poder obtener presiones velocidades y caudales que esten deacuerdo a la norma, la cual es de mucha ayuda para el diseno de Redesde tuberia de Agua potable eficiente y optimizado.
Vemos que el programa simula correctamente y en las iteraciones respec-tivas.
3. Referencias
1. Diseno de una Red de Abastecimiento de agua ? Metodo del Gradi-ente Hidraulico? Autor- CANCHARI GUTIERREZ, Edmundo
2. Hidraulica de tuberas - Juan Saldarreaga
4. Anexos
Se muestra las imagenes capturadas del Programa
10
-
11
-
12
-
13
-
14
-
15