Facultad de Ingeniería | Universidad de Buenos Aires
2do. Cuatrimestre | 2015
75.12 | Análisis Numérico I
95.10 | Modelación Numérica
95.13 | Métodos Matemáticos y Numéricos
Trabajo Práctico #2
Modelo Parabólico para la Pluma de Contaminación en un Río
Grupo Nº 19
Manuel Kronhaus 91749
Fecha Correcciones Docente
Calificación Final Docente Fecha
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 1 de 16
Introducción
En el presente trabajo se analizó la pluma de contaminación dejada por la descarga de aguas
negras desde un emisario al lecho de un rio.
Se tomaron datos representativos del rio Paraná de las Palmas y la distribución espacial del
contaminante se halló resolviendo la siguiente ecuación diferencial:
� ∙ ���� = � ∙ ���� − ∙ �
�: "concentración media vertical del contaminante"
�: "velocidad media de la corriente"
�: "difusividad lateral" : "tasa de decaimiento"
La difusividad lateral se calculó con la siguiente expresión:
� = ∙ ℎ ∙ " ∙ �
ℎ: "profundidad" : "coeficiente de difusividad lateral"
": "factor de fricción"
La zona en estudio es un tramo relativamente recto de rio, representado como un rectángulo de largo
2 kilómetros y ancho 300 metros. Los valores de los parámetros se detallan a continuación:
ℎ = 10 &
� = 0.8 &)
= 0.3
" = 0.04
= 0.1 1,-.
�/ = 10 012 (concentración
en la desembocadura del emisario)
Planteo del problema
Para resolver la ecuación diferencial se discretizó el rio y se aplicó a cada nodo el método de Crank –
Nicolson (w = 0.5), un método de diferencias finitas usado para la resolución de ecuaciones en
derivadas parciales, junto con la condición inicial del emisario y los valores de frontera.
Condición inicial
�30, �5 = 6�/ � = 50 &0 � ≠ 50 &
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 2 de 16
Condiciones de borde
���� 3�, 05 = ���� 3�, 3005 = 0
Estas condiciones implican que para los nodos i = 1 e i = n de cada paso se imponga la siguiente
igualdad:
�9,:;< = �9;<,:;< =.>. - = 1
�9,:;< = �9?<,:;< =.>. - = @
Siendo n la cantidad de nodos en dirección transversal de la discretización.
A través de la ecuación de Crank – Nicolson y las condiciones de borde se llegó al sistema de
ecuaciones lineales a resolver, hallándose la matriz A del sistema A ∙ � = B.
Figura 1 Discretización implícita de Crank - Nicolson (en azul incógnitas).
� ∙ �9,:;< − �9,:∆� = � ∙ DE ∙ F�9?<,: − 2�9,: H �9;<,:∆� I H 31 − E5 ∙ F�9?<,:;< − 2�9,:;< H �9;<,:;<∆� IJ − ∙ �9,:
Separando de un lado las incógnitas y del otro lado los valores de la concentraciones en el paso
anterior, se obtiene la forma genérica de la matriz A y el vector b, respectivamente.
− �∆� ∙ 31 − E5 ∙ �9?<,:;< H K �∆� H 2�∆� ∙ 31 − E5L ∙ �9,:;< − �∆� ∙ 31 − E5 ∙ �9;<,:;< == �∆� ∙ E ∙ �9?<,: H F �∆� − 2�∆� ∙ E − I ∙ �9,: H �∆� ∙ E ∙ �9;<,:
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 3 de 16
Representando en forma matricial el lado izquierdo de la igualdad e incluyendo la condición de borde:
MNNNNNNNNNNO
1 −1 0 0 0− �∆� ∙ 31 − E5 K �∆� H 2�∆� ∙ 31 − E5L − �∆� ∙ 31 − E5 0 0
0 − �∆� ∙ 31 − E5 K �∆� H 2�∆� ∙ 31 − E5L − �∆� ∙ 31 − E5 00 0 − �∆� ∙ 31 − E5 K �∆� H 2�∆� ∙ 31 − E5L − �∆� ∙ 31 − E5
⋯ 0
⋮ ⋱ ⋮0 ⋯ − �∆� ∙ 31 − E5 K �∆� H 2�∆� ∙ 31 − E5L − �∆� ∙ 31 − E5
0 1 −1 STTTTTTTTTTU
VWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY
∙
MNNNNNNNNO
�<,:;<�,:;<�Z,:;<�[,:;<⋮⋮�9,:;<⋮⋮�\?<,:;<�\,:;< STTTTTTTTU
A
De manera análoga con el lado derecho:
MNNNNNNNNO
0 0 0 0 0�∆� ∙ E F �∆� − 2�∆� ∙ E − I �∆� ∙ E 0 00 �∆� ∙ E F �∆� − 2�∆� ∙ E − I �∆� ∙ E 00 0 �∆� ∙ E F �∆� − 2�∆� ∙ E − I �∆� ∙ E
⋯ 0
⋮ ⋱ ⋮0 ⋯ �∆� ∙ E F �∆� − 2�∆� ∙ E − I �∆� ∙ E
0 0 0 STTTTTTTTU
VWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY
∙
MNNNNNNNNO
�<,:�,:�Z,:�[,:⋮⋮�9,:⋮⋮�\?<,:�\,: STTTTTTTTU
]
Así, el sistema de ecuaciones lineales a resolver para cada paso j será:
A ∙ �̂ ;<_______̀ = ] ∙ �̂___̀
Discretización y resolución del problema
Se discretizó el rio con un paso transversal y longitudinal de 5 metros, ya que se comprobó a base
de prueba y error que este paso es el que mejores resultados arroja.
Se resolvió el sistema hasta 1000 metros aguas abajo del emisario con distintos métodos de
resolución de S.E.L.
Para el método iterativo se tomó como criterio de corte que el error relativo entre iteraciones sea
menor o igual a 10-4.
Resultados
Eliminación Gaussiana:
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 4 de 16
Factorización de Doolittle
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 5 de 16
Método de Gauss-Seidel
Factorización de Cholesky
Una de las condiciones necesarias para realizar la factorización de Cholesky de una matriz es que
esa matriz sea definida positiva. Como la matriz de nuestro problema no es simétrica no se puede
realizar dicha factorización.
Comparación de resultados
Para lograr una comparación más clara de los resultados obtenidos con los distintos métodos se
graficó las concentraciones para distintos cortes transversales (50 m, 100 m, 250 m y 500 m aguas
debajo de la descarga). Se observó que los resultados obtenidos con los métodos directos coinciden
en un 100% mientras que los resultados obtenidos con el método iterativo de Gauss-Seidel difieren
de los otros dos. Esta diferencia se hace más pronunciada en zonas alejadas del emisario, esto se
debe a que las concentraciones allí son menores y los errores de redondeo presentes en los
métodos directos son mayores.
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 6 de 16
Corte a 50 m
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 7 de 16
Corte a 100 m
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 8 de 16
Corte a 250 m
Corte a 500 m
Costo computacional
Se evaluó el costo computacional de cada método hallándose la cantidad de operaciones realizadas
y el tiempo en que tarda para dar los resultados.
La cantidad de operaciones en los métodos directos se aproximó con la siguiente formula:
�a)bac9defgh = F23 @Z H 32 @ − 76 @I ∙ &
Siendo n y m la cantidad de nodos transversales y laterales, respectivamente.
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 9 de 16
En el método indirecto, la cantidad de operaciones está dada por la suma de todas las iteraciones en
cada paso.
Tabla 1 Costo Computacional.
Se observa que el costo computacional en el método indirecto es mucho menor que en los directos.
Distancia mínima del emisario a la costa
Para hallar esta distancia se decidió bajar la discretización a 2 metros para lograr una mayor
precisión.
Se fue acercando hacia la costa la desembocadura del emisario hasta encontrar la distancia mínima
en donde las concentraciones del contaminante sobre la costa no superen los 0.5 mg/l.
Se encontró que la distancia crítica es de 20 metros.
Distancia al emisario en donde la pluma es insignificante
Para este inciso se bajó la discretización en x a 1 metro para una mayor precisión en el resultado.
Se creó un algoritmo que para cada paso en x halle la máxima concentración del contaminante. Si
esa concentración es menor o igual a 0.005 mg/l el algoritmo para y da como resultado la distancia
pedida.
Se encontró que a unos 833 metros del emisario la pluma de contaminación resulta ser
insignificante.
Ensayos de sensibilidad de parámetros
Se resolvió el problema con el método de Gauss-Seidel haciendo variar distintos parámetros para
analizar su influencia en los resultados. En cada caso se compararon tres valores, el original del
problema, uno menor y otro mayor.
• Velocidad media del rio
Para la velocidad media, se tomaron el valor máximo de velocidad del rio Paraná de 5 km/h y
un valor mínimo de 1.8 km/h. Para comparar los resultados, se graficó la evolución de las
concentraciones máximas a lo largo del recorrido de la pluma. Los resultados para los
distintos valores de U no presentaron demasiada diferencia, demostrando así que no se
comete demasiado error al tomar como constante la velocidad de escurrimiento.
Método Tiempo [seg] Cantidad de operaciones
Eliminación Gaussiana 0.018815 31523031
Factorización de Doolittle 0.057109 31523031
Gauss-Seidel 0.363802 1005
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 10 de 16
• Constante de decaimiento
Se procedió de manera análoga a la velocidad con la constante de decaimiento κ. Se
observó una pequeña variación en las concentraciones máximas para κ = 10 1/día.
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 11 de 16
• Coeficiente de difusividad lateral
Se evaluó la evolución transversal de la concentración del contaminante a 100 metros de la
descarga del emisario para tres valores de eT. Se observó una gran variación entre los
resultados obtenidos para una pequeña variación en el valor del parámetro.
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 12 de 16
Conclusiones Generales
La resolución de una pluma de contaminación en un rio nos permitió evaluar los distintos métodos
de resolución de sistema de ecuaciones lineales y al mismo tiempo conocer las características de un
problema común en la ingeniería sanitaria, como lo es el transporte y tratamiento de las aguas
residuales.
Con respecto a los métodos de resolución del problema, se concluyó que el método indirecto de
Gauss-Seidel es el mejor debido a su poco gasto computacional y error en los resultados.
Se pudo verificar el correcto funcionamiento del emisario al no presentarse grandes concentraciones
de contaminante cerca de la orilla habitable y al lograr una rápida difusión longitudinal del
contaminante.
De los parámetros que influyen en la concentración del contaminante se encontró mediante un
ensayo de sensibilidad que la difusividad lateral es el que más influye en los resultados finales,
siendo éste el parámetro a modificar en un futuro si se requiere modificar la dispersión de las
concentraciones.
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 13 de 16
Anexos: Códigos
1. Creación del S.E.L.
clear all %Datos h = 10; U = 1.4; e_T = 0.8; f = 0.04; k = 0.1/86400; C_0 = 10; w = 0.5; D_T = f*e_T*U*h; largo = 1000; ancho = 300; Delta_x = 5; Delta_y = 5; n = ancho/Delta_y + 1; m = largo/Delta_x + 1; %Matriz A for i = 1:n for j = 1:n if i ==1 && j ==1 ||i==n && j== n A(i,j) = 1; elseif i == 1 && j ==2 || i == n && j == n-1 A(i,j) = -1; elseif i>= 2 && i<= n-1 A(i,i-1) = -D_T*(1-w)/(Delta_y)^2; A(i,i) = 2*D_T*(1-w)/(Delta_y)^2 + U/Delta_x; A(i,i+1) = -D_T*(1-w)/(Delta_y)^2; end end end %Matriz B for i = 1:n if i>= 2 && i<= n-1 B(i,i-1) = D_T*w/(Delta_y)^2; B(i,i) = U/Delta_x - 2*D_T*w/(Delta_y)^2 - k; B(i,i+1) = D_T*w/(Delta_y)^2; else B(i,i) = 0; end end save('A','A'); save('B','B');save('Delta_x','Delta_x');save('Delta_y','Delta_y'); save('n','n');save('m','m');save('largo','largo');save('ancho','ancho')
2. Eliminación Gaussiana
clear all load('B.mat'); load('A.mat'); load('Delta_x.mat'); load('m.mat') load ('largo.mat'); load('ancho.mat') load('Delta_y.mat'); load('n.mat');
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 14 de 16
C_0 = 10; % Triangulización (matriz U) for i=2:n U(1,:) = A(1,:); multi(1,1) = 0; multi(i,i-1) = A(i,i-1)/U(i-1,i-1); U(i,:) = A(i,:) - multi(i,i-1)*U(i-1,:); end %Condición inicial for i=1:n if i == 50/Delta_y + 1 C_Gauss(i,1) = C_0; else C_Gauss(i,1) = 0; end end tic %Sustitución inversa for j = 1:m-1 b(:,j) = B*C_Gauss(:,j); for i = 1:n if i==1 si(i,j) = b(1,j); else si(i,j) = b(i,j) - multi(i,i-1)*si(i-1,j); end end C_Gauss(n,j+1) = si(n,j)/U(n,n); for q = 1:n-1 suma = 0; for k = 1:n suma = suma + U(n-q,k)*C_Gauss(k,j+1); end C_Gauss(n-q,j+1) = (si(n-q,j) - suma)/U(n-q,n-q); end end toc Costo = (2/3*n^3 + 3/2*n^2 - 7/6*n)*m; save('U','U');save('multi','multi');save('C_Gauss','C_Gauss') X = 0:Delta_x:largo; Y = 0:Delta_y:ancho; surf(X,Y,C_Gauss)
3. Factorización de Doolittle
clear all load('A.mat');load('B.mat');load('U.mat');load('multi.mat');
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 15 de 16
load('Delta_x.mat');load('Delta_y.mat');load('n.mat');load('m.mat'); load('ancho.mat');load('largo.mat'); C_0 = 10; for j = 1:n for i = 1:n if i==j L(i,i) = 1; elseif i>= j+1 L(i,j) = multi(i,j); end end end for i=1:n if i == 50/Delta_y + 1 C_Doolittle(i,1) = C_0; else C_Doolittle(i,1) = 0; end end tic for j=1:m-1 b(:,j) = B*C_Doolittle(:,j); for i = 1:n suma = 0; for k =1:i-1 suma = suma + L(i,k)*y(k,j); end y(i,j) = b(i,j) - suma; end C_Doolittle(n,j+1) = y(n,j)/U(n,n); for i = 1:n-1 suma = 0; for k = n-i+1:n suma = suma + U(n-i,k)*C_Doolittle(k,j+1); end C_Doolittle(n-i,j+1) = (y(n-i,j) - suma)/U(n-i,n-i); end end toc save('C_Doolittle','C_Doolittle') X = 0:Delta_x:largo; Y = 0:Delta_y:ancho; surf(X,Y,C_Doolittle)
4. Método de Gauss-Seidel
clear all load('A.mat');load('B.mat'); load('Delta_x.mat');load('Delta_y.mat');load('n.mat');load('m.mat');
Modelación Numérica 95.10 T.P. Nro. 2 Grupo Nro. 19
Página 16 de 16
load('ancho.mat');load('largo.mat') C_0 = 10; tolerancia = 0.0001; d = 50; for i=1:n if i == d/Delta_y + 1 C_GS1(i,1) = C_0; else C_GS1(i,1) = 0; end end tic for j = 1:m-1 b(:,j) = B*C_GS1(:,j); for k = 1:1000 GS(n,1) = 0; for i=1:n suma1 = 0; suma2 = 0; for q = 1:i-1 suma1 = suma1 + A(i,q)*GS(q,k+1); end for q = i+1:n suma2 = suma2 + A(i,q)*GS(q,k); end GS(i,k+1) = (b(i,j) - suma1 - suma2)/A(i,i); end error = norm(GS(:,k+1) - GS(:,k),inf)/norm(GS(:,k+1),inf); if error <= tolerancia break end C_GS1(:,j+1) = GS(:,k); end end toc Costo = k*m; save('C_GS1','C_GS1') X = 0:Delta_x:largo; Y = 0:Delta_y:ancho; surf(X,Y,C_GS1)