gradiente hidraulico

15
An´ alisis y Dise˜ no de Redes de Agua Potable etodo del Gradiente Hidra´ ulico en el Lenguaje de programacion IPython (2.7) Notebook L A T E X 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 cop- utacional EPANET 2.0 vE, las diferencias se encuentran dentro de los argenes permisibles Este programa es una formulaci´ on completaente matricial para el an´ ali- sis 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 pre- siones en cada nodo. Medienate este metodo es posible analizar indistintamente las redes abiertas y cerradas o ambas juntas, encontrando resultados acercados ra- zonablemente L A T E X. 1. Desarrollo del Programa Este programa utiliza el Metodo de Gradiente Hidraulico para el anal- isis y dise˜ no de sistemas de abastecimiento de agua. La cual nos permite el analisis de redes de tuberias para diferentes tipos de tuber´ ıas 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 ´ util. Se toma un ejercicio pr´ actico mostrandose los resultados obtenidos en el preogram desarrollado. 1

Upload: alfredohuaman

Post on 08-Sep-2015

62 views

Category:

Documents


8 download

DESCRIPTION

grad h

TRANSCRIPT

  • 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