Está en la página 1de 27

Dinámica de Fluidos Computacionales

Ejercicios para la Segunda Evaluación Departamental


(Parte I)

Osvaldo Benı́tez Vargas


Marzo 8, 2019

Problema 1.- Se grafican las lı́neas de corriente para el flujo incompresible, bi-dimensional, no-viscoso
y estacionario de la siguiente figura 1

Figura 1: Geometrı́a del problema

Para la obtención de las lı́neas de corriente se soluciona numéricamente la ecuación difrerencial que
rige este flujo correspondiente a un flujo potencial:

∂2ψ ∂2ψ
+ =0 (1)
∂x2 ∂y 2
Y las componentes de velocidad se relacionan con la función corriente mediante:
∂ψ
u= (2)
∂y
∂ψ
v=− (3)
∂x
Para la solución numérica de la ecuación 1 se debe emplear 4 esquemas de diferencias finitas:
Point Gauss-Seidel
Line Gauss-Seidel
Point Succesive Over Relaxation (PSOR)

1
Line Succesive Over Relaxation (LSOR)
Comenzando la solución numérica con Point Gauss-Seidel que es un método semiimplı́cito, obtenemos
la siguiente ecuación:

n+1 1 n+1
ψi,j = [ψ n + ψi−1,j + β 2 (ψi,j+1
n n
+ ψi,j−1 )] (4)
2(1 + β 2 ) i+1,j
Para el esquema de Line Gauss-Seidel empleamos la fórmula:
n+1 n+1 n+1 n+1
ψi,j − 2(1 + β 2 )ψi,j + ψi+1,j = −β 2 ψi,j+1
n
− β 2 ψi,j−1 (5)

Para el esquema PSOR hacemos el uso de la variable ω que es el factor de relajación que va de
0<ω<2
0 < ω < 1 = subrelajación
ω = 1 = relajación
1 < ω < 2 = sobrelajación
La implementación del esquema PSOR para la ecuación 1 está dada por:

n+1 n 1 n+1
ψi,j = (1 − ω)ψi,j + [ψ n + ψi−1,j + β 2 (ψi,j+1
n n
+ ψi,j−1 )] (6)
2(1 + β 2 ) i+1,j
Para la implementación LSOR empleamos la fórmula:
n+1 n+1 n+1 n+1
ωψi,j − 2(1 + β 2 )ψi,j + ωψi+1,j = (1 − ω)[2(1 + β 2 )]ψi,j
n
− ωβ 2 ψi,j+1
n
− ωβ 2 ψi,j−1 (7)

Para la solución del problema empleamos un factor ω = 0,5, ω = 1 y ω = 1,5 notando que cuando
existe relajación el esquema PSOR se convierte en Point Gauss-Seidel y el método LSOR se convierte en
Line Gauss-Seidel. Entre más grande sea la relajación, la solución converge más rapido.
Para la solución del problema se propuso un valor de 1000 iteraciones, un valor de error mı́nimo de
0.01 y unos incrementos para ∆x y ∆y de 0,2.
Para el método de LSOR, debido a la implementación de nuestro código, excluimos la solución para
ω > 1 para analizarlo más adelante.
Solucionamos el problema:

Figura 2: Error calculado vs Iteraciones. Estrellas azules Point Gauss-Seidel, Rombos negros Line Gauss-
Seidel, Cı́rculos rojos PSOR ω = 0,5, Cruces verdes PSOR ω = 1,5, Cuadros amarillos LSOR ω = 0,5

2
Figura 3: Lı́neas de corriente y campo de velocidades por Point Gauss-Seidel

Figura 4: Lı́neas de corriente y campo de velocidades por Line Gauss-Seidel

3
Figura 5: Lı́neas de corriente y campo de velocidades por PSOR ω = 0,5

Figura 6: Lı́neas de corriente y campo de velocidades por PSOR ω = 1,5

4
Figura 7: Lı́neas de corriente y campo de velocidades por LSOR ω = 0,5

Con la figura 2 podemos comprobar que entre mayor sea el factor de relajación ω más rápido converge.
Cada implementación convergió a diferentes iteraciones:

Point Gauss-Seidel - 194 iteraciones


Line Gauss-Seidel - 137 iteraciones
Point Succesive Over Relaxation (PSOR) ω = 0,5 - 518 iteraciones
Point Succesive Over Relaxation (PSOR) ω = 1,5 - 80 iteraciones

Line Succesive Over Relaxation (LSOR) ω = 0,5 - 10 iteraciones


Podemos analizar que LSOR con ω = 0,5 convergió más rápido pero con una solución incorrecta. PSOR
con ω = 1,5 fue el que llegó a error mı́nimo con 80 iteraciones debido al factor de sobrerelajación
implementado, mientras que en cambio PSOR con ω = 0,5 tuvo un factor subrelajado llegando a 518
iteraciones.
En base a los diagramas de las lı́neas de corriente y el campo de velocidades podemos observar que el flujo
se desarrolla en cada implementación dependiendo que tan rápido converja, por ejemplo, si reducimos el
número de iteraciones a 100 ó el error mı́nimo a 0,1 obtendrı́amos unas lı́neas de corriente de un flujo
que no está desarrollado completamente en el recinto como se puede observar en la siguiente figura:

5
Figura 8: Solución de Point Gauss-Seidel a 100 iteraciones. Flujo no está desarrollado completamente.

Como se habı́a establecido, por el programa implementado para LSOR, la solución converge en ω = 0,5
pero da una solución erronea visible en la figura 7, mientras que con ω = 1 la solución es la misma que
con Line Gauss-Seidel.
Para observar un flujo completamente desarrollado en el recinto establecemos en el código 10000
iteraciones máximas y un error mı́nimo igual a 1e − 6.

6
Figura 9: Error calculado vs Iteraciones. Estrellas azules Point Gauss-Seidel, Rombos negros Line Gauss-
Seidel, Cı́rculos rojos PSOR ω = 0,5, Cruces verdes PSOR ω = 1,5, Cuadros amarillos LSOR ω = 0,5

Figura 10: Lı́neas de corriente y campo de velocidades por Point Gauss-Seidel

7
Figura 11: Lı́neas de corriente y campo de velocidades por Line Gauss-Seidel

Figura 12: Lı́neas de corriente y campo de velocidades por PSOR ω = 0,5.

8
Figura 13: Lı́neas de corriente y campo de velocidades por PSOR ω = 1,5.

Figura 14: Lı́neas de corriente y campo de velocidades por LSOR ω = 0,5.

9
Problema 2.- Para este problema tenemos unas placas paralelas separadas a una distancia de h =
0,3cm ó h = 0,003m. La placa superior se encuentra estacionaria y la placa inferior tiene una oscilación
igual a u(0, t) = 40cos(1000t). El fluido poseé una viscocidad cinemática de v = 0,000217m2 /s.
La ecuación que rige el perfil de velocidades está dada por:

∂u ∂2u
=v 2 (8)
∂t ∂y

Figura 15: Geometrı́a del problema

Para la aproximación de la ecuación 7, se emplea un algorı́tmo explı́cito usando una aproximación


central para el elemento temporal y para el elemento espacial:
v∆t t
ut+1 = uti + (u − 2uti + uti−1 ) (9)
i
∆x2 i+1
El incremento de tiempo es ∆t = 0,00002s y se aplican 30 divisiones en dirección de y.
Al ejecutar el código obtenemos los siguientes diagramas:

Figura 16: Perfil de velocidades a t = 0,0015s

10
Figura 17: Perfil de velocidades a t = 0,003s

Figura 18: Perfil de velocidades a t = 0,0045s

11
Figura 19: Perfil de velocidades a t = 0,006s

Conforme a las figuras anteriores, se puede observar el perfil de velocidades cada ∆t = 0,0015s
apreciando los cambios que va teniendo dependiendo de la oscilación de la placa. De igual manera, debido
a la viscosidad, la discipación de la velocidad entre las capas superiores del fluido es mı́nima teniendo un
alcance de aproximadamente de 0, 1m.
Por curiosidad podemos incrementar el paso temporal para obtener una mejor aproximación de la
capa lı́mite. Modificamos el paso de tiempo a n = 50.

Figura 20: Perfil de velocidades a t = 0,006s con n = 50

Podemos apreciar que la velocidad incrementa hasta 10e17 indicando que la solución se hizo inestable.

12
Problema 3.- En este prroblema se considera un fluido que se desplaza a través de un canal con una
temperatura de T c = 20C y una temperatura en la salida de T h = 100C, ambas se mantinen constantes.

Figura 21: Geometrı́a del problema

La ecuación que gobierna la transferencia de temperatura es:

∂T ∂T ∂2T
+u =α 2 (10)
∂t ∂x ∂t
Este problema se resolverá usando una diferencia regresiva de primer orden para el término convectivo,
diferencia central para el término de difusión y diferencia progresiva para el elemento temporal:
α∆t n u∆t n
Tit+1 = Tin + (Ti+1 − 2Tin + Ti−1
n
)− (T − Ti−1 n
) (11)
∆ 2 ∆x i
Para la solución de este problema el incremento de tiempo es de ∆t = 0,01s, 20 divisiones a lo largo del
canal. Un coeficiente de difusividad térmica de α = 0,04m2 , la velocidad del flujo de canal de u = 0,2m/s.
Al ejecutar el código tenemos los siguientes diagramas:

Figura 22: Perfil de temperatura a t = 1s

13
Figura 23: Perfil de temperatura a t = 2s

Figura 24: Perfil de temperatura a t = 3s

Dos factores muy importantes influyen en la solución del problema, la difusividad térmica y los valores
de tiempo el cual estamos ploteando. La difusividad térmica tiene una magnitud pequeña provocando
que la transferencia de calor por convección a través del fluido sea lenta. Los valores de tiempo a los que
estamos ploteando son bajos cuando comienza la transferencia de calor. Si damos un valor más grande
de tiempo, t = 10s, podemos observar el cambio en figura siguiente:

14
Figura 25: Perfil de temperatura a t = 10s

Y mejorando el incremento en ∆x:

Figura 26: Perfil de temperatura a t = 15s y ∆x = 55

Esta solución, de igual manera presenta problemas de estabilidad cuando la difusividad térmica es
modificada a valores más grandes y el incremento de tiempo es reducido. En este código, cuando la
solución se convierte en inestable se deja de plotear.

15
Conclusiones

Con la implementación de los códigos pudimos reforzar la teorı́a aprendida en clase sobre métodos de
discretización pudiendo resolver 3 problemas buscando desarrollar la mejor implementación.

PSOR con factor de sobrerelajación resulto ser la mejor opción al converger en la menor cantidad de
tiempo posible y PSOR con subrelajación fue la implementación que tomó más tiempo. Sin embargo,
debido a limitantes en el conocimiento técnico en programación, la implementación LSOR generó ciertos
errores que impidió la la correcta solución del problema para factores con subrelaación y sobrerelajación
esto debido a que es un método implı́cito que requiere la generación de un sistema de ecuaciones lineales
para cada lı́nea de nodos.

Para el problema 2 de la discipación de la velocidad en un fluido entre una capa oscilante y una es-
tacionaria se tuvo cierto cuidado en las unidades de cada valor debido a que causaba a que la velocidad
en la solución no se disipara a los nodos superiores como deberı́a.

En el tercer problema se dió solución a un problema de convección no estacionario en una dimensión. De


igual manera estuvo analizando en qué punto la solución se volvı́a inestable, la continuidad del trabajo
seguirá con buscar en fuentes bibliográficas la manera de poder calcular el lı́mite de la estabilidad en la
solución.

Siempre que se realice una solución numérica se debe corroborar la solución por medio de una solu-
ción analı́tica y de igual forma se tiene que analizar el problema para entender su fı́sica y saber cómo va
será la solución debido a que al programar se pueden cometer errores al llamar datos al código causando
que la solución converja pero que sea erronea.

16
Códigos de las implementaciones.
Problema 1
clear
clc

xmax=5;
ymax=5;

IMAX=25;
JMAX=25;
ITMAX=10000;
Errormin=1e −6;

dx=xmax / (IMAX−1);
dy=ymax / (JMAX−1);

beta = dx / dy ;

Tn=zeros (IMAX,JMAX) ; %Condicion i n i c i a l para e l p r o c e s o i t e r a t i v o

Tn(IMAX, 7 :JMAX)=100;
Tn ( 1 0 :IMAX,JMAX)=100;
U( 1 :IMAX, 1 :JMAX)=0;
V( 1 :IMAX, 1 :JMAX)=0;
Tn1=Tn ;

f o r j =2:JMAX−1
f o r i = 2 : IMAX − 1
Tn1 ( i , j )=(1/(2∗(1+ beta ˆ 2 ) ) ) ∗ ( Tn( i +1, j )
+Tn1 ( i −1, j )+beta ˆ 2 . 0 ∗ ( Tn( i , j +1)+Tn1 ( i , j − 1 ) ) ) ;
end
end
error = 0 . 0 ;
f o r j =2:JMAX−1
f o r i = 2 : IMAX −1
error = error + abs ( Tn1 ( i , j ) − Tn( i , j ) ) ;
end
end

ErrorMaximo=error ;
E r r o r=error / ErrorMaximo ;

i t e r =1;

Tn=zeros (IMAX,JMAX) ; % c o n d i c i o n i n i c i a l para e l p r o c e s o i t e r a t i v o

Tn(IMAX, 7 :JMAX)=100;
Tn ( 1 0 :IMAX,JMAX)=100;

Tn1=Tn ;

%%POINT GAUSS SEIDEL


while E r r o r >= Errormin && i t e r <=ITMAX
f o r j =2:JMAX−1
f o r i =2:IMAX−1

17
Tn1 ( i , j )=(1/(2∗(1+ beta ˆ 2 ) ) ) ∗ ( Tn( i +1, j )+Tn1 ( i −1, j )
+beta ˆ 2 . 0 ∗ ( Tn( i , j +1)+Tn1 ( i , j − 1 ) ) ) ;
U( i , j )=(1/ dx ) ∗ ( Tn1 ( i +1, j )−Tn1 ( i , j ) ) ;
V( i , j )=(1/ dy)∗( −Tn1 ( i , j +1)+Tn1 ( i , j ) ) ;
end
end
error =0;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error+abs ( Tn1 ( i , j )−Tn( i , j ) ) ;
end
end
E r r o r=error / ErrorMaximo ;
i t e r=i t e r +1;
message=s p r i n t f ( ’ %4d %10.12 f ’ , i t e r , E r r o r ) ;
disp ( message ) ;
Tn=Tn1 ;
figure (1)
plot ( i t e r , Error , ’ b∗ ’ )
grid on
xlabel ( ’ I t e r a c i o n e s ’ , ’ F o n t S i z e ’ , 1 0 ) ;
ylabel ( ’ E r r o r ’ , ’ F o n t S i z e ’ , 1 0 ) ;
hold on
end

%G r a f i c a r v a l o r e s de l i n e a de c o r r i e n t e y campo de v e l o c i d a d e s
x = 0 . 0 : dy : xmax ;
y = 0 . 0 : dx : ymax ;
figure (2)
contour ( x , y , Tn)
grid on
view ( 3 6 0 , 2 7 0 ) ;
[ X, Y]=meshgrid ( x , y ) ;
hold on
figure (2)
qw=quiver (X, Y, U, V, ’ LineWidth ’ , 2 )
grid on
view ( 3 6 0 , 2 7 0 ) ;

%LINE GAUSS SEIDEL


a = eye (IMAX∗JMAX,IMAX∗JMAX) ;
i = IMAX ;
f o r j =1:JMAX−2
f o r i=j ∗ i +1: i+j ∗IMAX−2
a ( i +1, i +1−IMAX)=beta ˆ 2 ;
a ( i +1, i +1)= −2∗(1+beta ˆ 2 ) ;
a ( i +1, i )=1;
a ( i +1, i +2)=1;
end
i=IMAX;
end

f o r j =1:JMAX
f o r i =1:IMAX

18
b ( i +( j −1)∗IMAX)=Tn( j , i ) ;
end
end
b=b ( : ) ;
f o r j =1:JMAX−2
f o r i =1:IMAX−2
b ( ( j ∗IMAX)+1+ i )=Tn( j +2, i +1)∗(−beta ˆ 2 ) ;
end
end

n=length ( b ) ;
m=zeros ( n , 1 ) ;
x=zeros ( n , 1 ) ;
f o r k=1:n−1
m( k+1:n)=a ( k+1:n , k ) / a ( k , k ) ;
f o r i=k+1:n
a ( i , k+1:n)=a ( i , k+1:n)−m( i ) ∗ a ( k , k+1:n ) ;
end
b ( k+1:n)=b ( k+1:n)−b ( k ) ∗m( k+1:n ) ;
end
p l= t r i u ( a ) ;
x ( n)=b ( n ) / a ( n , n ) ;
f o r k =n−1: −1:1
b ( 1 : k)=b ( 1 : k)−x ( k+1)∗ p l ( 1 : k , k +1);
x ( k)=b ( k ) / p l ( k , k ) ;
end

x=x ( : ) ;
f o r j =1:JMAX
f o r i =1:IMAX
Tn1 ( j , i ) = x ( i +( j −1)∗IMAX ) ;
end
end
error =0;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error+abs ( Tn1 ( i , j )−Tn( i , j ) ) ;
end
end

ErrorMaximo=error ;
E r r o r=error ;
i t e r =1;
check=Tn1 ;
Tn=Tn1 ;
XX=Tn1 ;
while E r r o r >= Errormin && i t e r <=ITMAX

Tn(IMAX, 7 :JMAX)=100;
Tn ( 1 0 :IMAX,JMAX)=100;
a=eye (IMAX∗JMAX,IMAX∗JMAX) ;
i=IMAX;
f o r j =1:JMAX−2
f o r i=j ∗ i +1: i+j ∗IMAX−2
a ( i +1, i +1−IMAX)=beta ˆ 2 ;

19
a ( i +1, i +1)=−2∗(1+beta ˆ 2 ) ;
a ( i +1, i )=1;
a ( i +1, i +2)=1;
end
i=IMAX;
end
f o r j =1:JMAX
f o r i =1:IMAX
b ( i +( j −1)∗IMAX)=Tn( j , i ) ;
end
end
b=b ( : ) ;
f o r j =1:JMAX−2
f o r i =1:IMAX−2
b ( ( j ∗IMAX)+1+ i )=Tn( j +2, i +1)∗(−beta ˆ 2 ) ;
end
end
n=length ( b ) ;
m=zeros ( n , 1 ) ;
x=zeros ( n , 1 ) ;
f o r k =1:n−1
m( k+1:n)=a ( k+1:n , k ) / a ( k , k ) ;
f o r i=k+1:n
a ( i , k+1:n)=a ( i , k+1:n)−m( i ) ∗ a ( k , k+1:n ) ;
end
b ( k+1:n)=b ( k+1:n)−b ( k ) ∗m( k+1:n ) ;
end
p l= t r i u ( a ) ;
x ( n)=b ( n ) / a ( n , n ) ;
f o r k =n−1: −1:1
b ( 1 : k)=b ( 1 : k)−x ( k+1)∗ p l ( 1 : k , k +1);
x ( k)=b ( k ) / p l ( k , k ) ;
end
x=x ( : ) ;
f o r j =1:JMAX
f o r i =1:IMAX
Tn1 ( j , i ) = x ( i +( j −1)∗IMAX ) ;
end
end
error =0;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error+abs ( Tn1 ( i , j )−XX( i , j ) ) ;
end
end
E r r o r=error / ErrorMaximo ;
i t e r=i t e r +1;
message=s p r i n t f ( ’ %4d %10.6 f ’ , i t e r , E r r o r ) ;
disp ( message ) ;
Tn=Tn1 ;
XX=Tn1 ;
figure (1)
plot ( i t e r , Error , ’ kd ’ )
hold on
grid on

20
xlabel ( ’ I t e r a c i o n e s ’ , ’ F o n t S i z e ’ , 1 0 ) ;
ylabel ( ’ E r r o r ’ , ’ F o n t S i z e ’ , 1 0 ) ;

end
%G r a f i c a r v a l o r e s de l i n e a de c o r r i e n t e y campo de v e l o c i d a d e s
x = 0 . 0 : dy : xmax ;
y = 0 . 0 : dx : ymax ;
figure (3)
contour ( x , y , Tn)
grid on
view ( 3 6 0 , 2 7 0 ) ;
hold on
[ X, Y]=meshgrid ( x , y ) ;
figure (3)
qw=quiver (X, Y, U, V, ’ LineWidth ’ , 2 )
grid on
view ( 3 6 0 , 2 7 0 ) ;

%POINT SUCCESIVE OVER RELAXATION

for f g = 0 . 5 : 1 : 1 . 5
%POINT SUCCESIVE OVER RELAXATION
Tn=zeros (IMAX,JMAX) ; % c o n d i c i o n i n i c i a l para e l p r o c e s o i t e r a t i v o
w=f g ;
Tn(IMAX, 7 :JMAX) = 100 ;
Tn ( 1 0 :IMAX,JMAX) =100 ;
Tn1 = Tn ;

f o r j =2:JMAX−1
f o r i =2:IMAX−1
Tn1 ( i , j )=(1−w) ∗Tn( i , j )+(w/(2∗(1+ beta ˆ 2 ) ) ) ∗ ( Tn( i +1, j )
+Tn1 ( i −1, j )+beta ˆ 2 ∗ (Tn( i , j +1)+Tn1 ( i , j − 1 ) ) ) ;
end
end
error =0;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error+abs ( Tn1 ( i , j )−Tn( i , j ) ) ;
end
end

ErrorMaximo=error ;
E r r o r=error / ErrorMaximo ;

i t e r =1;

Tn=zeros (IMAX,JMAX) ; % c o n d i c i o n i n i c i a l para e l p r o c e s o i t e r a t i v o

Tn(IMAX, 7 :JMAX) = 100 ;


Tn ( 1 0 :IMAX,JMAX) =100 ;
Tn1 = Tn ;

while E r r o r >= Errormin && i t e r <=ITMAX


f o r j =2:JMAX−1
f o r i =2:IMAX−1

21
Tn1 ( i , j )=(1−w) ∗Tn( i , j )+(w/(2∗(1+ beta ˆ 2 ) ) ) ∗ ( Tn( i +1, j )
+Tn1 ( i −1, j )+beta ˆ 2 ∗ (Tn( i , j +1)+Tn1 ( i , j − 1 ) ) ) ;
end
end

error =0;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error abs ( Tn1 ( i , j )−Tn( i , j ) ) ;
end
end

E r r o r=error / ErrorMaximo ;
i t e r=i t e r +1;
message=s p r i n t f ( ’ %4d %10.12 f ’ , i t e r , E r r o r ) ;
disp ( message )
i f w==0.5
figure (1)
plot ( i t e r , Error , ’ r o ’ )
grid on
hold on
else
figure (1)
plot ( i t e r , Error , ’ g+ ’ )
grid on
hold on
end
C o n v e r g e n c i a ( i t e r )= E r r o r ;
Tn=Tn1 ;

end
%G r a f i c a r v a l o r e s de l i n e a de c o r r i e n t e y campo de v e l o c i d a d e s
i f w==0.5
x = 0 . 0 : dy : xmax ;
y = 0 . 0 : dx : ymax ;
figure (5)
contour ( x , y , Tn)
grid on
view ( 3 6 0 , 2 7 0 ) ;
hold on
[ X, Y]=meshgrid ( x , y ) ;
figure (5)
qw=quiver (X, Y, U, V, ’ LineWidth ’ , 2 )
grid on
view ( 3 6 0 , 2 7 0 ) ;
else
x = 0 . 0 : dy : xmax ;
y = 0 . 0 : dx : ymax ;
figure (6)
contour ( x , y , Tn)
grid on
view ( 3 6 0 , 2 7 0 ) ;
hold on
[ X, Y]=meshgrid ( x , y ) ;
figure (6)

22
qw=quiver (X, Y, U, V, ’ LineWidth ’ , 2 )
grid on
view ( 3 6 0 , 2 7 0 ) ;
end

end

%LINE GAUSS SEIDEL+SOR

w= 0 . 5 ;
GG=(1−w)∗2∗(1+ beta ˆ 2 ) ;

Tn(IMAX, 7 :JMAX) = 100 ;


Tn ( 1 0 :IMAX,JMAX) =100 ;
Tn1=Tn ;

a = eye (IMAX∗JMAX,IMAX∗JMAX) ;
i = IMAX ;
f o r j =1:JMAX−2
f o r i=j ∗ i +1: i+j ∗IMAX−2
a ( i +1, i +1−IMAX)=w∗beta ˆ 2 ;
a ( i +1, i +1)=−2∗(1+beta ˆ 2 ) ;
a ( i +1, i )=w ;
a ( i +1, i +2)=w ;
end
i=IMAX;
end

f o r j =1:JMAX
f o r i =1:IMAX
b ( i +( j −1)∗IMAX)=Tn( j , i ) ;
end
end
b=b ( : ) ;
f o r j =1:JMAX−2
f o r i =1:IMAX−2
b ( ( j ∗IMAX)+1+ i )=Tn( j +2, i +1)∗(−w∗betaˆ2)+Tn( j +1, i +1)∗GG;
end
end

n=length ( b ) ;
m=zeros ( n , 1 ) ;
x=zeros ( n , 1 ) ;
f o r k =1:n−1
m( k+1:n)=a ( k+1:n , k ) / a ( k , k ) ;
f o r i=k+1:n
a ( i , k+1:n)=a ( i , k+1:n)−m( i ) ∗ a ( k , k+1:n ) ;
end
b ( k+1:n)=b ( k+1:n)−b ( k ) ∗m( k+1:n ) ;
end
p l= t r i u ( a ) ;
x ( n)=b ( n ) / a ( n , n ) ;
f o r k=n−1: −1:1
b ( 1 : k)=b ( 1 : k)−x ( k+1)∗ p l ( 1 : k , k +1);
x ( k)=b ( k ) / p l ( k , k ) ;

23
end

x=x ( : ) ;
f o r j =1:JMAX
f o r i =1:IMAX
Tn1 ( j , i )=x ( i +( j −1)∗IMAX ) ;
end
end
error =0;
i t e r =1;
f o r j =2:JMAX−1
f o r i =2:IMAX−1
error=error+abs ( Tn1 ( i , j )−Tn( i , j ) ) ;
end
end

ErrorMaximo=error ;
E r r o r=error ;
check=Tn1 ;
Tn=Tn1 ;
XX=Tn1 ;
while Error>= Errormin && i t e r <=ITMAX

Tn(JMAX , i n t 8 ( 1 . 2 / 0 . 2 + 1 ) :IMAX )=100;


Tn( i n t 8 ( 2 / 0 . 2 + 1 ) :JMAX , IMAX)=100;
a = eye (IMAX∗JMAX,IMAX∗JMAX) ;
i=IMAX ;
f o r j =1:JMAX−2
f o r i=j ∗ i +1: i+j ∗IMAX−2
a ( i +1, i +1−IMAX)=w∗beta ˆ 2 ;
a ( i +1, i +1)=−2∗(1+beta ˆ 2 ) ;
a ( i +1, i )=w ;
a ( i +1, i +2)=w ;
end
i=IMAX;
end
f o r j =1:JMAX
f o r i =1:IMAX
b ( i +( j −1)∗IMAX)=Tn( j , i ) ;
end
end
b=b ( : ) ;
f o r j =1:JMAX−2
f o r i =1:IMAX−2
b ( ( j ∗IMAX)+1+ i )=Tn( j +2, i +1)∗(−w∗betaˆ2)+Tn( j +1, i +1)∗GG;
end
end
n=length ( b ) ;
m=zeros ( n , 1 ) ;
x=zeros ( n , 1 ) ;
f o r k =1:n−1
m( k+1:n ) = a ( k+1:n , k ) / a ( k , k ) ;
f o r i=k+1:n
a ( i , k+1:n)=a ( i , k+1:n)−m( i ) ∗ a ( k , k+1:n ) ;
end

24
b ( k+1:n)=b ( k+1:n)−b ( k ) ∗m( k+1:n ) ;
end
p l= t r i u ( a ) ;
x ( n)=b ( n ) / a ( n , n ) ;
f o r k =n−1: −1:1
b ( 1 : k)=b ( 1 : k)−x ( k+1)∗ p l ( 1 : k , k +1);
x ( k)=b ( k ) / p l ( k , k ) ;
end
x=x ( : ) ;
f o r j =1:JMAX
f o r i =1:IMAX
Tn1 ( j , i )=x ( i +( j −1)∗IMAX ) ;
end
end
error = 0 . 0 ;
f o r j =2:JMAX−1
f o r i =2:IMAX −1
error=error+abs ( Tn1 ( i , j )−XX( i , j ) ) ;
end
end
E r r o r=error / ErrorMaximo ;
i t e r=i t e r +1;
message=s p r i n t f ( ’ %4d %10.6 f ’ , i t e r , E r r o r ) ;
disp ( message ) ;
Tn=Tn1 ;
XX=Tn1 ;
figure (1)
plot ( i t e r , Error , ’ sy ’ )
grid on
hold on
end

%G r a f i c a r v a l o r e s de l i n e a de c o r r i e n t e y campo de v e l o c i d a d e s
x = 0 . 0 : dy : xmax ;
y = 0 . 0 : dx : ymax ;
figure (7)
contour ( x , y , Tn)
grid on
view ( 3 6 0 , 2 7 0 ) ;
hold on
[ X, Y]=meshgrid ( x , y ) ;
figure (7)
qw=quiver (X, Y, U, V, ’ LineWidth ’ , 2 )
grid on
view ( 3 6 0 , 2 7 0 ) ;

25
Problema 2
clc
clear

h=0.3 e −2; %l o n g i t u d de l a b a r r a
n=50; %numero de nodos
v = 0 . 0 0 0 2 1 7 ; %c o n s t a n t e de d i f u s i o n
um=40; %v e l o c i d a d d e l f l u j o
t =0.006; %I n t e r v a l o de tiempo
dh=h/n ; %d e l t a s
dt = 0 . 0 0 0 0 2 ;
beta=(dt ∗v ) / ( dh ˆ 2 ) ;
u0=zeros ( 1 , n ) ;
u1=zeros ( 1 , n ) ;
u1 ( 1 ) = 4 0 ;
u0=u1 ;

x=linspace ( 0 , h , n ) ;
f o r j= 1 : t / dt
f o r i= 2 : n−1
u1 ( i )=u0 ( i )+beta ∗ ( u0 ( i +1)−2∗u0 ( i )+u0 ( i − 1 ) ) ;
plot ( u1 , x , ’ k ’ , ’ LineWidth ’ , 2 )
xlabel ( ’ V e l o c i d a d [m/ s ] ’ )
ylabel ( ’ D i s t a n c i a [m] ’ )
grid on
view ( 0 , 9 0 ) ;
end
u1 (1)=um∗ cos ( 1 0 0 0 ∗ j ∗ dt ) ;
%u1 ( end )=0;
u0=u1

%h o l d on
end

26
Problema 3
clear
clc

L=2; %L o n g i t u d
dt = 0 . 0 1 ;
n=55; %D i v i s i o n e s
a = 0 . 0 4 ; %D i f u s i v i d a d t e r m i c a
u = 0 . 2 ; %V e l o c i d a d d e l f l u i d o
t =15;
dx=L/n ;
T0=20∗ o n e s ( 1 , n ) ;
T0 ( : , end)=100;
T1=T0 ;
x=linspace ( 0 , L , n ) ;
i t e r =1;
f o r j= 0 : t / dt
f o r i= 2 : n−1
T1 ( : , i )=T0( i )+(( a∗ dt ) / ( dx ˆ 2 ) ) ∗ ( T0( i + 1 ) . . .
−2∗T0( i )+T0( i −1)) −((u∗ dt ) / dx ) ∗ ( T0( i )−T0( i − 1 ) ) ;
T1( end)=100;
T0=T1 ;
end
T1 ( 1 ) = 2 0 ;
plot ( x , T1 , ’ b ’ , ’ LineWidth ’ , 2 )
xlabel ( ’ Longitud [m] ’ )
ylabel ( ’ Temperatura [ C ] ’ )
grid on
%h o l d on
i t e r=i t e r +1
end

27

También podría gustarte