Professional Documents
Culture Documents
COMPUTACIONALES
TALLER 1: DIFERENCIAS FINITAS
VALERIA DENISSE BENALCAZAR REALPE
16 de abril de 2018
RESUMEN
El método de diferencias nitas es uno de los métodos numéricos mas utilizados para
encontrar la solución numérico de las ecuaciones que gobiernan el modelo matemático de
un sistema continuo, como en el caso del ujo de uidos. A manera de descripción general,
en una solución obtenida por diferencias nitas, las derivadas son remplazadas por apro-
ximaciones en diferencias nitas convirtiendo un problema de ecuaciones diferenciales de
solución compleja a un problema algebraico que tiene una complejidad mucho menor en
su resolución, generalmente es necesario hacer uso del álgebra matricial. La aplicación
de los métodos numéricos en la resolución de problemas de ujo comienza con el modelo
matemático que describe su comportamiento, el cual muchas veces es de gran comple-
jidad, y su solución mediante las diferencias nitas comienza con una discretización del
dominio, del cual se obtienen puntos llamados nodos en los cuales en los cuales la ecua-
ción es aproximada remplazando las derivadas parciales por aproximaciones en términos
de los valores nodales de la función. Mediante la resolución del esquema podemos obte-
ner una solución del problema cuya aproximación a la real dependerá del principalmente
de las consideraciones que se tomaron para reducir el problema a un sistema de fácil
tratamiento, del grado de exactitud del esquema utilizado, del tipo de malla utilizado,
así como la capacidad de procesamiento de la herramienta utilizada para la solución, la
cual introduce un error adicional a la solución. Debe de considerarse que el método de
diferencias nitas presenta algunos inconvenientes en garantizar la conservación si no se
discretiza adecuadamente el dominio de mallas no uniformes.
3
1 EXACTITUD DE ESQUEMAS DE DIFERENCIAS
FINITAS
f 00 (x) = (cos(x))2 − sin(x) exp (sin(x)) − 0,5k12 cos(k1 x) + 0,8k22 sin(k2 x) (1.1.3)
M x2 00 M x3 000 M x4 4 M x5 5 M x6 6 M x7 7
fi+1 = fi + M x f 0i + fi + fi + fi + fi + fi + fi (1.1.4)
2! 3! 4! 5! 6! 7!
M x2 00 M x3 000 M x4 4 M x5 5 M x6 6 M x7 7
fi−1 = fi − M x f 0i + fi − fi + fi − fi + fi − fi
2! 3! 4! 5! 6! 7!
(1.1.5)
4
(2 M x)2 00 (2 M x)3 000 (2 M x)7 7
fi+2 = fi +2 M x f 0i + fi + fi +....+(2 M x)6 fi 6 + fi (1.1.6)
2! 3! 7!
5
Se realiza las siguientes operaciones para obtener el esquema deseado
0
fi = a fi+1 + b fi−1 + c fi+2 + d fi−2 (1.1.12)
0 4 M x5 5 2 1
− M xfi + fi = (fi−1 − fi+1 ) + (fi+2 − fi−2 ) (1.1.13)
5! 3 12
0 fi−2 − 8 fi−1 + 8 fi+1 − fi+2 M x4 5
fi = + fi (1.1.14)
12 M x 30
60 M x
Para obtener la segunda derivada de los esquemas de segundo cuarto, sexto se multipli-
ca aplica la denición de derivada en la cual D corresponde a la matriz de diferenciación
la cual esta denida por los coecientes que conforman la matriz del sistema 1.1.11.
Aplicando la denición de derivación obtenemos:
00 fi+1 − 2 fi + fi−1
fi = + (M x2 )O (1.1.19)
M x2
Esquema centrado de 4to orden.
6
00 −fi−2 + 16 fi−1 − 30 fi + 16 fi+1 − fi+2
fi = + (M x4 )O (1.1.20)
12 M x2
0 1 3 3 49 3 3 1
fi = fi−3 − fi−2 + fi−1 − fi + fi+1 − fi+2 + fi−3 +(M x6 )O (1.1.21)
90 20 2 18 2 20 90
7
2 ECUACIÓN DE DIFUSIÓN-CONVENCIÓN 1D
φ(x = 0) = φ0 (2.0.2)
φ(x = L) = φL (2.0.3)
P e = 59,988 (2.0.7)
∂2φ
∂φ
= Pe (2.0.8)
∂x2 ∂x
8
Solución analítica:
La ecuación diferencial 2.0.8se resuelve con el método por sustitución y utilizando las
condiciones de frontera para determinar el valor de las constantes que resultan en la
solución general.
φ0 = y
y 0 − P ey = 0
φ = c1 exp(P e x) + c2
0 = c1 + c2
1 = c1 exp(P eL) + c2
1
c1 = exp(P e)−1
exp(P e/L x)
φ= exp(P e)−1
Para el modelo upwind se utiliza CDS para el termino difusivo, para el termino con-
vectivo depende de la dirección de la velocidad, el cual puede ser determinarse con Euler
hacia atrás cuando la dirección es positiva y con Euler hacia atrás cuando la dirección
sea positiva[1], en las condiciones del problema de ujo la velocidad es positiva. por lo
tanto se discretiza el termino convectivo con el esquema de Euler hacia atrás.
∂φ φi−1 − φi
≈ (2.1.1)
∂x Mx
2
∂ φ φ − 2 φi + φi−1
2
≈ i+1 (2.1.2)
∂x M x2
Sustituyendo las ecuaciones 2.1.1 y 2.1.2 en la ecuación 2.0.8obtenemos el modelo upwind:
φi+1 − 2 φi + φi−1 φ − φi
2
− P e i−1 =0 (2.1.3)
Mx Mx
a =M x P e
9
El desarrollo del algoritmo computación para modelo 2.1.4 se aplica para el nodo 2 al
N-1, puesto que se las condiciones de frontera sustituyen las ecuaciones para el nodo 1 y
el N. Obteniéndose la siguiente sistema discreto:
N=2
φ3 − (2 + a)φ2 = 0
N=N-1
φ2 0
−(2 + a) 1
. .
(a + 1) −(2 + a)
1
.. ..
(a + 1) −(2 + a) 1 .. .
..
.
. . .
.. .. ..
.. = ..
(a + 1) −(2 + a) 1
. .
. .
.. ..
(a + 1) −(2 + a) 1
(a + 1) −(2 + a) φN −1 −1
(2.1.5)
El sistema 2.1.5 se resolvió mediante el método de LU, con el cual se obtiene el perl de
velocidad a lo largo del dominio.
Para el modelo utiliza CDS de segundo grado tanto para el termino difusivo como para
el termino convectivo.
∂φ φi+1 − φi−1
≈ (2.2.1)
∂x 2Mx
2
∂ φ φ − 2 φi + φi−1
≈ i+1 (2.2.2)
∂x2 M x2
Sustituyendo las ecuaciones 2.2.1 y 2.2.2 en la ecuación 2.0.8obtenemos el modelo cen-
trado uniforme para el problema de ujo:
φi+1 − 2 φi + φi−1 φ − φi
2
− P e i−1 =0 (2.2.3)
Mx 2Mx
10
El desarrollo del algoritmo computación para modelo 2.2.4 se aplica para el nodo 2 al
N-1, puesto que se las condiciones de frontera sustituyen las ecuaciones para el nodo 1 y
el N. Obteniéndose la siguiente sistema discreto:
N=2
(1 − a)φ3 − 2φ2 = 0
N=N-1
φ2 0
−2 (1 − a)
(1+a) −2 (1-a) .. ...
.
+ (1-a)
(1 a) −2 .. ..
. .
. . ..
.. .. (2.2.5)
. . = .
.. ..
+ (1-a)
(1 a) −2
. .
(1+a) (1-a) .. ..
−2
(a + 1) −2 φN −1 (a − 1)
El sistema 2.2.5 se resolvió mediante el método de LU, con el cual se obtiene el perl de
velocidad a lo largo del dominio.
M xi = xi − xi−1 (2.3.3)
El esquema centrado no uniforme se obtiene del desarrollo de la serie de Taylor extendido
y aplicando el mismo procedimiento descrito en el caso 1 obteniendose de esta manera
la discretizacion tanto para el termino difusivo como para el termino convectivo.
∂φ φi+1 − φi−1
≈ (2.3.4)
∂x M xi (re + 1)
11
∂2φ φi+1 − (re + 1) φi + reφi−1
≈2 (2.3.5)
∂x2 re M x2
Sustituyendo las ecuaciones 2.3.4 y 2.3.5 en la ecuación 2.0.8obtenemos el modelo cen-
trado uniforme para el problema de ujo:
El desarrollo del algoritmo computación para modelo 2.3.7 se aplica para el nodo 2 al
N-1, puesto que se las condiciones de frontera sustituyen las ecuaciones para el nodo 1 y
el N. Obteniéndose la siguiente sistema discreto:
N=2
N=N-1
φ
0
−(re + 1) (1 − a) 2
. .
(a + re) −(re + 1) (1 − a) . .
.
.
(a + re) −(re + 1) (1 − a) . .
. .
. .
.. .. ..
. . . . =
.
.
.
. .
(a + re) −(re + 1) (1 − a)
(1 − a) ... .
(a + re) −(re + 1) .
.
(a + re) −(re + 1) φ (a − 1)
N −1
(2.3.8)
El sistema 2.3.8 se resolvió mediante el método de LU, con el cual se obtiene el perl
de velocidad a lo largo del dominio.
12
3 ECUACIÓN DE DIFUSIÓN-CONVENCIÓN
TRANSITORIA 1D
φ(x = 0) = φ0 (3.0.2)
φ(x = L) = φL (3.0.3)
Γ ∂2φ
∂φ ∂φ
= 2
−u (3.0.6)
∂t ρ ∂x ∂x
Γ
P e∗ = (3.0.7)
ρ
2
∂φ ∂ φ ∂φ
= P e∗ − u (3.0.8)
∂t ∂x2 ∂x
13
3.1. AVANCE TEMPORAL: EULER HACIA DELANTE
Para este modelo utiliza CDS de segundo grado tanto para el termino difusivo como
para el termino convectivo y para el termino transitorio se utiliza Euler hacia adelante
φn+1 − φni
∂φ
≈ i (3.1.1)
∂t Mt
φn − φni−1
∂φ
≈ i+1 (3.1.2)
∂x 2Mx
φn+1
i = (a − b)φni+1 + (1 − a)φni + (a + b)φni−1 (3.1.5)
Mt P e∗ Mt u
a= Mx2
b= Mx
El desarrollo del algoritmo computación para modelo 3.1.5 se aplica para el nodo 2 al
N-1, puesto que se las condiciones de frontera sustituyen las ecuaciones para el nodo 1 y
el N. Obteniéndose la siguiente sistema discreto:
N=2
(a − b)φ3 + (1 − a)φ2 = φn+1
2
N=N-1
(1 − a)φN −1 + (a + b)φN −2 + (a − b) = φn+1
N −1
n+1 n
φ2 φ2 0
(1 − a) (a − b)
.. (a+b) (1 − a) (a − b) .. ...
. .
(a+b) (1 − a) (a − b)
.. .. ..
. . .
.. .. ..
= . . . . + .
..
. .. ..
+
(a b) (1 − a) (a − b)
.. . .
.
(a+b) (1 − a) (a − b) . . .
.
φN −1 (a+b) (1 − a) φN −1 (a − b)
(3.1.6)
14
El sistema 3.1.6 da como resultado un esquema del tipo φn+1 = Aφn + BC , el cual se
=
soluciona utilizando el álgebra matricial básica.
φn+1 − φni
∂φ
≈ i (3.1.7)
∂t Mt
φn − φni−1
∂φ
≈ i+1 (3.1.8)
∂x M xi (re + 1)
φn+1
i = (a − b)φi+1 + (1 − (re + 1) a)φi + (re a + b) φi−1 (3.1.11)
2Mt P e∗ Mt u
a= reMx2
b= (re+1)Mx
El desarrollo del algoritmo computación para modelo 3.1.11 se aplica para el nodo 2
al N-1, puesto que se las condiciones de frontera sustituyen las ecuaciones para el nodo
1 y el N. Obteniéndose la siguiente sistema discreto:
N=2
N=N-1
. . .
(re a + b) (1 − (re + 1)) (a − b)
.. .. ..
(re a + b) (1 − (re + 1)) (a − b)
. . .
(re a + b) (1 − (re + 1))
φN −1 φN −1 (a − b)
(3.1.12)
15
El sistema 3.1.6 da como resultado un esquema del tipo φn+1 = Aφn + BC , el cual se
=
soluciona utilizando el álgebra matricial básica.
∆t
φ∗n+ 1 = φn + f (tn , φn ) (3.2.1)
2 2
∆t
φ∗∗
n+ 1
= φn + f (tn+ 1 , φ∗n+ 1 ) (3.2.2)
2 2 2 2
∆t h i
φ∗n+1 = φn + f (tn , φn ) + 2 f (tn+ 1 , φ∗n+ 1 ) + 2 f (tn+ 1 , φ∗∗
n+ 12
) + f (t 1
n+ 2 , φ∗∗
n+ 12
)
2 2 2 2
(3.2.4)
Se utiliza el sistema resultante para el modelo de avance transitorio con esquema Euler
hacia adelanteφn+1 = Aφn + BC , para el cual los coecientes de la matriz A cambian
=
obteniendo lo siguiente:
∗ n
φ2 φ2 0
(1 − 2a) (a − b)
.. (a+b) (1 − 2a) (a − b) .. .
..
. .
(a+b) (1 − 2a) (a − b)
.. .. ..
. . .
.. .. ..
= . . . . + .
..
. .. ..
+
(a b) (1 − 2a) (a − b)
.. . .
(a+b) (1 − 2a) (a − b) .. ..
.
φN −1 n+1/2 (a+b) (1 − 2a) φN −1 (a − b)
(3.2.5)
16
∗∗ ∗
φ2 φ2 0
(1 − 2a) (a − b)
.. (a+b) (1 − 2a) (a − b) .. .
..
. .
+
.. (a b) (1 − 2a) (a − b) .. ..
. . .
.. .. ..
= . . . +
.. . ..
. .. .
+
(a b) (1 − 2a) (a − b)
.. . ..
(a+b) (1 − 2a) (a − b) ..
. .
φN −1 n+1/2 (a+b) (1 − 2a) φN −1 (a − b)
n+1/2
(3.2.6)
Para los sistemas 3.2.5 y 3.2.6 los términos de la matriz son :
Mt P e∗ Mt u
a= 2Mx2
b= 4Mx
∗ ∗∗
φ2 φ2 0
(1 − 2a) (a − b)
.. (a+b) (1 − 2a) (a − b) .. .
..
. .
+
.. (a b) (1 − 2a) (a − b) .. ..
. . .
.. .. ..
= . . . +
.. . ..
. ..
.
(a+b) (1 − 2a) (a − b)
.. . .
(a+b) (1 − 2a) (a − b) .. ..
.
φN −1 n+1 (a+b) (1 − 2a) φN −1 (a − b)
n+1/2
(3.2.7)
Para los sistemas 3.2.7 los términos de la matriz son :
Mt P e∗ Mt u
a= Mx2
b= 2Mx
n+1 n ∗ ∗∗ ∗
φ2 φ2 φ2 φ2 φ2
.. .. .. .. ..
. . . . .
.. .. .. .. ..
. . . . .
n ∆t
.. =φ + +2
..
.. +2
..
..
. 6
.
.
.
.
.. .. .. .. ..
. . . . .
φN −1 φN −1 φN −1 n+1/2 φN −1 n+1/2 φN −1 n+1
(3.2.8)
17
3.2.2. MODELO CENTRADO NO UNIFORME
Se utiliza el sistema resultante para el modelo de avance transitorio con esquema Euler
hacia adelanteφn+1 = Aφn + BC , para el cual los coecientes de la matriz A cambian
=
obteniendo lo siguiente:
∗ n
φ2 φ2 0
. . .
(re a + b) (1 − (re + 1))
φN −1 φN −1 (a − b)
(3.2.9)
n+1/2
∗∗ ∗
φ2 φ2 0
.. .. ..
. . .
(1 − (re + 1))
(a − b)
(1 − (re + 1)) (a − b)
(re a + b)
.. .. ..
(1 − (re + 1)) (a − b)
(re a + b)
. .
.. .. .. .
.. . . . .. ..
= +
. . .
(re a + b) (1 − (re + 1)) (a − b)
.. .. ..
(re a + b) (1 − (re + 1)) (a − b)
. . .
(re a + b) (1 − (re + 1))
φN −1 φN −1 (a − b)
(3.2.10)
n+1/2 n+1/2
Mt P e∗ Mt u
a= reMx2
b= 2Mx(re+1)
∗ ∗∗
φ2 φ2 0
.. .. ..
. . .
(1 − (re + 1))
(a − b)
(1 − (re + 1)) (a − b)
(re a + b)
.. .. ..
(1 − (re + 1)) (a − b)
(re a + b)
. .
.. .. .. .
.. . . . .. ..
= +
. . .
(re a + b) (1 − (re + 1)) (a − b)
.. .. ..
(re a + b) (1 − (re + 1)) (a − b)
. . .
(re a + b) (1 − (re + 1))
φN −1 φN −1 (a − b)
(3.2.11)
n+1 n+1/2
2Mt P e∗ Mt u
a= reMx2
b= Mx(re+1)
18
n+1 n ∗ ∗∗ ∗
φ2 φ2 φ2 φ2 φ2
.. .. .. .. ..
. . . . .
.. .. .. .. ..
. . . . .
n ∆t
..
=φ + +2
..
.. +2
..
..
. 6
.
.
.
.
.. .. .. .. ..
. . . . .
φN −1 φN −1 φN −1 n+1/2 φN −1 n+1/2 φN −1 n+1
(3.2.12)
19
4 RESULTADOS
4.1. CASO 1: EXACTITUD DE ESQUEMAS DE
DIFERENCIAS FINITAS
20
se logra observar claramente que la rata de disminucion del error es mucho mayor para el
esquema de sexto orden tanto para la primera derivada como para la segunda, sin embargo
la diferencia con el de 4to orden en la segunda derivada no es muy signiticativo, mientras
que en la primera derivada esa difrencia es mas evidente.
21
4.2. CASO 2: ECUACIÓN DE DIFUSIÓN-CONVENCIÓN
ESTACIONARIA 1D
El modelo centrado uniforme (CDS), es inestable en mallas pequeñas < 10, pero
presenta la mejor aproximacion a la anlitica en las mallas 33 a la de 1000, visual-
mente se puede decir que se solapa con la solucion analitica lo cual la hace a la
solucion numerica estable y convergente en las gura 4.2da la 4.2g . La difusion
numerica para este metodo no existe.
El modelo upwind (UDS), es inestable en mallas pequeñas < 10, con forme la
malla aumenta su estabilidad y convergencia tambien aumenta, en la malla 100
4.2g alcanza su mayor precision con respecto a la solucion analitica, la rata de
convergencia del metodo es lenta, lo cual se le puede atribuir a la evaluacion del
termino convectivo con el esquema de Euler hacia delante.
Se puede concluir que los modelos CDS y UDS convergen satisfactoriamente en la malla
100, ademas que son estables para todas las mallas anlizadas. El modelo NU-CDS es
condicionalmente estable y convergente al numero de malla.
22
(b) φ = f (x),Malla 4, re=0.5 (c) φ = f (x),Malla 10, re=0.2
El modelo centrado uniforme (NU- CDS), presenta mejor estabilidad que el modelo
CDS para todas las mallas. Unicamente en las mallas 10 y ∆t = 0,2, 10 y ∆t = 0,1
se presenta una diferencia en las soluciones a diferentes instantes para el metodo
de avance temporal Euler hacia adelante, mientras que para el de Runge Kutte al
igual que en el modelo CDS no se presenta direncia en las solciones a diferentes
instantes de tiempo en ninguna de las mallas.
Del analisis anterior se puede deducir que para el modelo CDS la mejor prediccion es en
la malla 50 y ∆t = 0,004 para los dos esquemas de avance temporal, mientras que para el
modelo NU-CDS la mejor aproximacion es en la malla 250 y ∆t = 0,008, aunque se puede
obtener una buena aproximacion con menor costo computacional en mallas inferiores.
En el estado transtorio se pudo notar la gran sensibilidad del sistema a la realcion
∆t/∆x, el cual tenia buenos resultados si se respetaba que ∆t debe de ser de un orden de
magnitud menor que ∆x, ademas de la relacion debe de ser el doble sin tener en cuenta
la el orden de magnitud. Como por ejemplo ∆t = 0,004 y ∆x = 0,02. en proporciones
diferenes los resultados presentan grandes oscilaciones. Esto nos hace deducir que el
sistema es condicionalmente estable.
24
(b) CDS:φ = f (x, t),Malla 10,∆t = 0,2 (c) NU-CDS:φ = f (x, t),Malla 10,∆t = 0,2, re=0.3
(e) CDS:φ = f (x, t),Malla 10,∆t = 0,1 (f) NU-CDS:φ = f (x, t),Malla 10,∆t = 0,1, re=0.2
(h) CDS:φ = f (x, t),Malla 10,∆t = 0,02 (i) NU-CDS:φ = f (x, t),Malla 10,∆t = 0,02, re=0.2
25
Figura 4.3: Perl de Velocidad. Estado Transitorio
(b) CDS:φ = f (x, t),Malla 50,∆t = 0,004 (c) NU-CDS:φ = f (x, t),Malla 50,∆t = 0,004, re=0.04
(e) CDS:φ = f (x, t),Malla 250,∆t = 0,008 (f) NU-CDS:φ = f (x, t),Malla 250,∆t = 0,008, re=0.008
26
5 CONCLUSIONES
Mediante el desarrollo del caso 1 se logro determinar el orden de presicion del
esquema de diferencias nitas centrado, mediante su analisis se deduce que para
tanto para la primera como segunda derivada el error del esquema de segundo
orden es mucho mayor que para el de cuarto y sexto orden, mientras que para
la primera derivada los diferencia entre los errores de los esquemas de 4to y 6to
orden son mucho mas grandes que para la segunda deriva. Por lo tanto para la
segunda deriva es posible tomar un el esquema de 4to orden manteniendo una
buena aproximacion a la solucion anlitica con menos costo computacioanl. En el
analisis del caso 1 tambien se logra observar claramente los errores de redondeo
los cuales disminyen en las simulaciones con doble precision numerica, sin embargo
el error de redonde es mucho mas grande para la segunda derivada que para la
primera debido a la propagacion de los mismo en el termino ∆x2 .
En el desarrllo del caso 2, se logro observar la inuencia del tamaño de malla en los
esquemas de difrencias nitas, siendo el CDS el mas modelo de mayor convergencia
y estabilidad tanto en mallas pequeñas como grandes, seguido del metodo UDS el
cual tiene una rata de convergencia menor pero presenta mejor estabilidad que el
NU-CDS, el cual se ve afectado por mallas muy pequeñas o muy grandes.
27
6 ANEXOS
6.1. CASO 1
program c1
a12 =(1.0d0 /12.0 d0)
a22 =(2.0d0 /3.0 d0)
a13 =(1.0d0 /60.0 d0)
a23 =(3.0d0 /20.0 d0)
a33 =(3.0d0 /4.0 d0)
b12 =(5.0d0 /2.0 d0)
b22 =(4.0d0 /3.0 d0)
b13 =(1.0d0 /90.0 d0)
b23 =(49.0d0 /18.0 d0)
b33 =(3.0d0 /2.0 d0)
read (100 , ∗ ) , dx
xi=−1.0d0 ∗ pi
k1= pi /(8.0 d0 ∗ dx)
k2= (3.0 d0 ∗ k1 )/4.0 d0
N=floor ( ( ( pi+pi )/dx)+1.0d0)
do i=1 , N
call posiciones ( i , xi , x , xo , x1 , x2 , x3 , x4 , x5 , dx)
dr ( i )=drf ( xo ( i ) , k1 , k2 )
d2r ( i )=d2rf ( xo ( i ) , k1 , k2 )
fo ( i )= f ( xo ( i ) , k1 , k2 )
fx ( i )= f ( x( i ) , k1 , k2 )
f1 ( i )= f ( x1 ( i ) , k1 , k2 )
f2 ( i )= f ( x2 ( i ) , k1 , k2 )
f3 ( i )= f ( x3 ( i ) , k1 , k2 )
f4 ( i )= f ( x4 ( i ) , k1 , k2 )
f5 ( i )= f ( x5 ( i ) , k1 , k2 )
call derivadas ( i , df1 , df2 , df3 , d2f1 , d2f2 , d2f3 , pi , dx , k1 , k2 , fx , fo , f1 , f2 , f3 , f4 , f5 , a12 , &
a22 , a13 , a23 , a33 , b12 , b22 , b13 , b23 , b33 )
call e r r o r e s ( i , dr , d2r , df1 , df2 , df3 , d2f1 , d2f2 , d2f3 , edf1 , edf2 , edf3 , ed2f1 , ed2f2 , ed2f3 ,&
hdf1 , hdf2 , hdf3 , hd2f1 , hd2f2 , hd2f3 )
write (400 ,34) , dx , hdf1 ( i ) , hdf2 ( i ) , hdf3 ( i ) , hd2f1 ( i ) , hd2f2 ( i ) , hd2f3 ( i )
end do
end program
28
subroutine posiciones ( i , xi , x , xo , x1 , x2 , x3 , x4 , x5 , dx)
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
integer ( kind=dp ) : : i
real ( kind=dp ) , dimension (100000) : : x , xo , x1 , x2 , x3 , x4 , x5
real ( kind=dp ) : : dx , xi
xo ( i )=xi+(i −1)∗ dx
x( i )=xo ( i )+dx
x1 ( i )=xo ( i )−dx
x2 ( i )=xo ( i ) + 2.0 d0 ∗ dx
x3 ( i )=xo ( i )− 2.0 d0 ∗ dx
x4 ( i )=xo ( i ) + 3.0 d0 ∗ dx
x5 ( i )=xo ( i )− 3.0 d0 ∗ dx
end subroutine
subroutine derivadas ( i , df1 , df2 , df3 , d2f1 , d2f2 , d2f3 , pi , dx , k1 , k2 , fx , fo , f1 , f2 , f3 , f4 , f5 , a12 , &
a22 , a13 , a23 , a33 , b12 , b22 , b13 , b23 , b33 )
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
integer ( kind=dp ) : : i
real ( kind=dp ) , dimension (100000) : : df1 , df2 , df3 , d2f1 , d2f2 , d2f3 , fx , fo , f1 , f2 , f3 , f4 , f5
real ( kind=dp ) : : pi , dx , k1 , k2 , a12 , a22 , a13 , a23 , a33 , b12 , b22 , b13 , b23 , b33
! i f ( i >=1.0d0 . and . i <=4.0d0 ) t h e n
! d f 1 ( i )=( − 1.0d0 ∗ f 2 ( i )+ 2 . 0 d0 ∗ f x ( i )− 3 . 0 d0 ∗ f o ( i ) ) / ( 2 . 0 d0 ∗ dx )
! d f 2 ( i )= d f 1 ( i )
! d f 3 ( i )= d f 1 ( i )
! d 2 f 1 ( i )=( f 2 ( i )− 2 . 0 d0 ∗ f x ( i )+ f o ( i ) ) / ( dx ∗ ∗ 2 . 0 d0 )
! d 2 f 2 ( i )=d 2 f 1 ( i )
! d 2 f 3 ( i )=d 2 f 1 ( i )
! else
df1 ( i )=( fx ( i )− f1 ( i ) ) / ( 2 . 0 d0 ∗ dx)
df2 ( i )=(a12 ∗ f3 ( i )− a22 ∗ f1 ( i )+ a22 ∗ fx ( i )− a12 ∗ f2 ( i ))/( dx)
df3 ( i )=( − 1.0d0 ∗ a13 ∗ f5 ( i )+ a23 ∗ f3 ( i )− a33 ∗ f1 ( i )+ a33 ∗ fx ( i )− a23 ∗ f2 ( i )+a13 ∗ f4 ( i ))/( dx)
d2f1 ( i )= ( f1 ( i )− 2.0 d0 ∗ fo ( i )+ fx ( i ))/( dx ∗ ∗ 2.0 d0)
d2f2 ( i )= ( − 1.0d0 ∗ a12 ∗ f3 ( i )+ b22 ∗ f1 ( i )− b12 ∗ fo ( i )+ b22 ∗ fx ( i )− a12 ∗ f2 ( i ))/( dx ∗ ∗ 2.0 d0)
d2f3 ( i )= ( b13 ∗ f5 ( i )− a23 ∗ f3 ( i )+ b33 ∗ f1 ( i ) −b23 ∗ fo ( i )+ b33 ∗ fx ( i ) &
−a23 ∗ f2 ( i )+b13 ∗ f4 ( i ))/( dx ∗ ∗ 2.0 d0)
end subroutine
! end if
subroutine e r r o r e s ( i , dr , d2r , df1 , df2 , df3 , d2f1 , d2f2 , d2f3 , edf1 , edf2 , edf3 , ed2f1 , ed2f2 , ed2f3 ,&
hdf1 , hdf2 , hdf3 , hd2f1 , hd2f2 , hd2f3 )
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
real ( kind=dp) , dimension (100000):: dr , d2r , df1 , df2 , df3 , d2f1 , d2f2 , d2f3
real ( kind=dp ) , dimension (100000):: edf1 , edf2 , edf3 , ed2f1 , ed2f2 , ed2f3
real ( kind=dp) , dimension (100000):: hdf1 , hdf2 , hdf3 , hd2f1 , hd2f2 , hd2f3
integer ( kind=dp) : : i
edf1 ( i )=( df1 ( i )− dr ( i ))
edf2 ( i )=( df2 ( i )− dr ( i ))
edf3 ( i )=( df3 ( i )− dr ( i ))
ed2f1 ( i )=( d2f1 ( i )− d2r ( i ))
ed2f2 ( i )=( d2f2 ( i )− d2r ( i ))
ed2f3 ( i )=( d2f3 ( i )− d2r ( i ))
hdf1 ( i )= abs ( df1 ( i )− dr ( i ))
hdf2 ( i )= abs ( edf2 ( i ))
hdf3 ( i )= abs ( edf3 ( i ))
hd2f1 ( i )= abs ( ed2f1 ( i ))
hd2f2 ( i )= abs ( ed2f2 ( i ))
hd2f3 ( i )= abs ( ed2f3 ( i ))
end subroutine
29
real ∗ 8 function f (x , k1 , k2 )
implicit none
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
real ( kind=dp ) : : x , k1 , k2
f= exp ( sin (x )) + 0.5 ∗ cos ( k1 ∗ x) − 0.8 ∗ sin ( k2 ∗ x)
end
real ∗ 8 function drf (x , k1 , k2 )
implicit none
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
real ( kind=dp ) : : x , k1 , k2
drf= − 0.5 ∗ k1 ∗ sin ( k1 ∗ x) − 0.8 ∗ k2 ∗ cos ( k2 ∗ x) + cos (x) ∗ exp ( sin (x ))
end
real ∗ 8 function d2rf (x , k1 , k2 )
implicit none
integer , parameter : : sp = selected_real_kind (6 , 37)
integer , parameter : : dp = selected_real_kind (15 , 307)
real ( kind=dp) : : x , k1 , k2
d2rf= (( cos (x)) ∗∗ 2 − sin (x )) ∗ exp ( sin (x )) − 0.5 ∗ ( k1 ∗ ∗ 2) ∗ cos ( k1 ∗ x) + 0.8 ∗ ( k2 ∗ ∗ 2) ∗ sin ( k2 ∗ x)
! ( ( cos ( x ))∗∗2) ∗ exp ( s i n ( x ) ) − 0 . 5 ∗ c o s ( k1 ∗ x ) ∗ k1 ∗∗ 2 − s i n ( x ) ∗ exp ( s i n ( x ) ) + s i n ( k2 ∗ x ) ∗ 0 . 8 ∗ ( k2 ∗∗ 2 )
end
6.2. CASO 2
program caso22
pe=((den ∗ vel )/ d i f )
ep=dx ∗ pe
re= l ∗ dx
N=floor ( ( ( xf −xi )/dx ))
allocate (m(N,N) , inv (N,N) , x(N+1 ,1) ,b(N, 1 ) , c (N, 1 ) , p(N+1 ,1) , velo (N+1 ,1))
allocate (m2(N,N) , inv2 (N,N) , x2 (N+1 ,1) ,b1(N, 1 ) )
allocate (m3(N,N) , inv3 (N,N) , b2(N, 1 ) , dx1 (N+1 ,1) ,p2(N+1 ,1) , c1 (N, 1 ) , pe2 (N+1 ,1) , x3 (N+1 ,1))
f1= ( ep + 1.0 d0) ∗ ( − 1.0d0)
f2= (2.0 d0 + ep )
f3= − 1.0d0
f f 1= ( ep + 2.0 d0)
f f 2= − 4.0d0
f f 3= (2.0 d0 − ep )
do k=2, N−1
m(k , k−1)= f1
m(k , k)= f2
m(k , k+1)= f3
m2(k , k−1)= f f 1
m2(k , k)= f f 2
m2(k , k+1)= f f 3
pe2 (k ,1)=(( re ∗ pe ∗ dx ∗ l ∗ (k+1))/2.0 d0)
m3(k , k−1)= ( pe2 (k , 1 ) + re )
m3(k , k)= ( re +1.0d0) ∗ ( − 1.0d0)
m3(k , k+1)= (1 − pe2 (k , 1 ) )
end do
m(1 ,1)= f2
m(1 ,2)= f3
m(N,N)= f2
m(N,N−1)= f1
m2(1 ,1)= f f 2
m2(1 ,2)= f f 3
m2(N,N)= f f 2
m2(N,N−1)= f f 1
do k=2, N+1
pe2 (1 ,1)=(( re ∗ pe ∗ dx ∗ l ∗ (2))/2.0 d0)
pe2 (N,1)=(( re ∗ pe ∗ dx ∗ l ∗ (N+1))/2.0 d0)
m3(1 ,1)= ( re +1.0d0) ∗ ( − 1.0d0)
m3(1 ,2)= (1 − pe2 (1 ,1))
30
m3(N,N)= ( re +1.0d0) ∗ ( − 1.0d0)
m3(N,N−1)= ( pe2 (N, 1 ) + re )
end do
! write (∗ ,34) , m
! w r i t e ( ∗ , 3 4 ) , m2
! w r i t e ( 3 0 0 , 3 4 ) , m3
program c3
pe=( d i f /den )
re= cons ∗ dx
! coeficientes
s =((pe ) ∗ ( dt/dx ∗ ∗ 2))
a=(dt ∗ u)/dx
N=floor ( ( ( xf −xi )/dx)+1)
O=floor (( t f /dt )+1)
allocate (m(N,N) , b(N, 1 ) , bc (N, 1 ) ,L(N, 1 ) )
allocate (m3(N,N) , b2(N, 1 ) , bc1 (N, 1 ) , L1(N, 1 ) , pe2 (N, 1 ) , pe3 (N, 1 ) , dx1 (N, 1 ) )
allocate ( resultados (N,O+1),posX(N))
allocate ( resultados2 (N,O+1),p2(N))
do k = 1 , N
posX(k) = xi+dble (k −1)∗ dx ;
resultados (k , 1 ) = xi + dble (k −1)∗ dx
enddo
31
p2(1)= xi
dx1 (1 ,1)=0.0 d0
do i =2, N
dx1 ( i ,1)= ( re ∗ dx) ∗ i
p2( i )=p2( i −1)+dx1 ( i , 1 )
p2(N− 1)=1.0d0
p2(N)=1.0d0
end do
do k=1, N
resultados2 (k , 1 ) = p2(k)
end do
f1= s+a
f2= 1.0 d0 − 2.0d0 ∗ s
f3= s−a
do k=2, N−1
m(k , k−1)= f1
m(k , k)= f2
m(k , k+1)= f3
pe2 (k,1)= (2.0 d0 ∗ pe ∗ dt )/( re ∗ (dx ∗ (k+1.0d0 )) ∗ ∗ 2.0 d0)
pe3 (k,1)= (u ∗ dt )/(( re +1)∗ dx ∗ (k+1.0d0 ))
m3(k , k−1)= ( re ∗ pe2 (k , 1 ) ) + pe3 (k , 1 )
m3(k , k)= 1.0 d0 −(pe2 (k ,1) ∗ ( re +1.0d0 ))
m3(k , k+1)= pe2 (k , 1 ) − pe3 (k , 1 )
end do
m(1 ,1)= f2
m(1 ,2)= f3
m(N,N)= f2
m(N,N−1)= f1
pe2 (1 ,1)=(2.0 d0 ∗ pe ∗ dt )/( re ∗ (dx ∗ (2.0 d0 )) ∗ ∗ 2)
pe2 (N,1)=(2.0 d0 ∗ pe ∗ dt )/( re ∗ (dx ∗ (N+1.0d0 )) ∗ ∗ 2)
pe3 (1 ,1)=(u ∗ dt )/(( re +1)∗ dx ∗ (2.0 d0 ))
pe3 (N,1)=(u ∗ dt )/(( re +1)∗ dx ∗ (N+1.0d0 ))
m3(1 ,1)= 1.0 d0 −(pe2 (1 ,1) ∗ ( re +1.0d0 ))
m3(1 ,2)= pe2 (1 ,1) − pe3 (1 ,1)
m3(N,N)= 1.0 d0 −(pe2 (N,1) ∗ ( re +1.0d0 ))
m3(N,N−1)= ( re ∗ pe2 (N, 1 ) ) + pe3 (N, 1 )
do j =1, O
do i =1, N
b( i ,1)= vi ∗ cos (posX( i ) ∗ ( pi /2))+ vf ∗ sin (posX( i ) ∗ ( pi /2))
bc ( i ,1)= 0.0 d0
bc (N−1,1)= s−a
bc (N,1)= 0.0 d0
b2( i ,1)= vi ∗ cos (p2( i ) ∗ ( pi /2))+ vf ∗ sin (p2( i ) ∗ ( pi /2))
pe2 (N,1)=(2.0 d0 ∗ pe ∗ dt )/( re ∗ (dx ∗ (N+1.0d0 )) ∗ ∗ 2)
pe3 (N,1)=(u ∗ dt )/(( re +1)∗ dx ∗ (N+1.0d0 ))
bc1 ( i ,1)= 0.0 d0
bc1 (N−1,1)= pe2 (N, 1 ) − pe3 (N, 1 )
bc1 (N,1)= 0.0 d0
call MMULT(m,N,N, b ,N,L)
b( i ,1)=L( i ,1)+ bc ( i , 1 )
b(N,1)=1.0 d0
call MMULT(m3,N,N, b2 ,N, L1)
b2( i ,1)=L1( i ,1)+ bc1 ( i , 1 )
b2(N,1)=1.0 d0
resultados ( i , j+1)=b( i , 1 )
resultados2 ( i , j+1)=b2( i , 1 )
end do
end do
open ( unit =23, f i l e =' resultados . txt ' )
open ( unit =24, f i l e =' resultados2 . txt ' )
do i = 1 , N
write (23 ,101) ( resultados ( i , j ) , j = 1 , O+1)
write (24 ,101) ( resultados2 ( i , j ) , j = 1 , O+1)
enddo
end program
6.3.2. ESQUEMA TEMPORAL: RUNGE KUTTA 4to ORDEN
program RK4
32
x(1 ,1)=0.0 d0
do k = 2 , N
x(k , 1 ) = x(k −1,1)+dx
end do
x2(1 ,1)= xi
dx1 (1 ,1)=0.0 d0
do i =2, N
dx1 ( i ,1)= ( re ∗ dx) ∗ i
x2 ( i ,1)=x2 ( i −1,1)+dx1 ( i , 1 )
x2 (N,1)=1.0 d0
end do
do k=1, N
rrk (k , 1 ) = x(k , 1 )
rrk2 (k , 1 ) = x2 (k , 1 )
end do
do k=2, N−1
mr(k , k−1)= s1+a1
mr(k , k)= 1.0 d0 − 2.0d0 ∗ s1
mr(k , k+1)= s1 −a1
mk(k , k−1)= s2+a2
mk(k , k)= 1.0 d0 − 2.0d0 ∗ s2
mk(k , k+1)= s2 −a2
pe2 (k ,1)=( dt ∗ pe )/( re ∗ (dx ∗ (k+1)) ∗ ∗ 2)
pe3 (k ,1)=( dt ∗ u)/(2 ∗ ( re +1) ∗ (dx ∗ (k+1)))
mr2(k , k−1)= re ∗ pe2 (k , 1 ) + pe3 (k , 1 )
mr2(k , k)= 1 − (( re +1)∗ pe2 (k , 1 ) )
mr2(k , k+1)= pe2 (k,1) − pe3 (k , 1 )
mk2(k , k−1)= 2 ∗ re ∗ pe2 (k , 1 ) + 2 ∗ pe3 (k , 1 )
mk2(k , k)= 1 − 2 ∗ (( re +1)∗ pe2 (k , 1 ) )
mk2(k , k+1)= 2 ∗ pe2 (k,1) − 2 ∗ pe3 (k , 1 )
end do
mr(1 ,1)= 1.0 d0 − 2.0d0 ∗ s1
mr(1 ,2)= s1 −a1
mr(N,N)= 1.0 d0 − 2.0d0 ∗ s1
mr(N,N−1)= s1+a1
mk(1 ,1)= 1.0 d0 − 2.0d0 ∗ s2
mk(1 ,2)= s2 −a2
mk(N,N)= 1.0 d0 − 2.0d0 ∗ s2
mk(N,N−1)= s2+a2
mr2(1 ,1)= 1 − (( re +1)∗ pe2 (1 ,1))
mr2(1 ,2)= pe2 (1 ,1) − pe3 (1 ,1)
mr2(N,N)= 1 − (( re +1)∗ pe2 (N, 1 ) )
mr2(N,N−1)= re ∗ pe2 (N, 1 ) + pe3 (N, 1 )
mk2(1 ,1)= 1 − 2 ∗ (( re +1)∗ pe2 (N, 1 ) )
mk2(1 ,2)= 2 ∗ pe2 (1 ,1) − 2 ∗ pe3 (1 ,1)
mk2(N,N)= 1 − 2 ∗ (( re +1)∗ pe2 (N, 1 ) )
mk2(N,N−1)= 2 ∗ re ∗ pe2 (N, 1 ) + 2 ∗ pe3 (N, 1 )
do j =1, O
! centradas uniformes
do i =1, N
v( i ,1)= vi ∗ cos (x( i ,1) ∗ ( pi /2))+ vf ∗ sin (x( i ,1) ∗ ( pi /2))
bc ( i ,1)= 0.0 d0
bc (N−1,1)= s1 −a1
bc (N,1)= 0.0 d0
bc1 ( i ,1)= 0.0 d0
bc1 (N−1,1)= s2 −a2
bc1 (N,1)= 0.0 d0
b( i ,1)=v( i , 1 )
call MMULT(mr,N,N, b ,N,L)
b( i ,1)=L( i ,1)+ bc ( i , 1 )
b(N,1)=1.0 d0
b1( i ,1)=b( i , 1 )
call MMULT(mr,N,N, b1 ,N, L1)
b1( i ,1)=L1( i ,1)+ bc ( i , 1 )
b1(N,1)=1.0 d0
b2( i ,1)=b1( i , 1 )
33
call MMULT(mk,N,N, b2 ,N, L2)
b2( i ,1)=L2( i ,1)+ bc1 ( i , 1 )
b2(N,1)=1.0 d0
v( i ,1)=v( i , 1 ) + ( dt /6.0 d0 ) ∗ ( v( i , 1 ) + 2.0 d0 ∗ b( i , 1 ) + 2 ∗ b1( i ,1)+ b2( i , 1 ) )
rrk ( i , j+1)=v( i , 1 )
end do
end do
! centradas no uniformes
do j =1, O
do i =1, N
vn( i ,1)= vi ∗ cos (x( i ,1) ∗ ( pi /2))+ vf ∗ sin (x( i ,1) ∗ ( pi /2))
bcn ( i ,1)= 0.0 d0
bcn (N−1,1)= s1 −a1
bcn (N,1)= 0.0 d0
bc1n ( i ,1)= 0.0 d0
bc1n (N−1,1)= s2 −a2
bc1n (N,1)= 0.0 d0
bn( i ,1)=vn( i , 1 )
call MMULT(mr2 ,N,N, bn ,N, Ln)
bn( i ,1)=Ln( i ,1)+bcn ( i , 1 )
bn(N,1)=1.0 d0
b1n( i ,1)=bn( i , 1 )
call MMULT(mr2 ,N,N, b1n ,N, L1n)
b1n( i ,1)=L1n( i ,1)+bcn ( i , 1 )
b1n(N,1)=1.0 d0
b2n( i ,1)=b1n( i , 1 )
call MMULT(mk,N,N, b2 ,N, L2)
b2n( i ,1)=L2n( i ,1)+ bc1n ( i , 1 )
b2n(N,1)=1.0 d0
vn( i ,1)=vn( i , 1 ) + ( dt /6.0 d0 ) ∗ ( vn( i , 1 ) + 2.0 d0 ∗ bn( i , 1 ) + 2 ∗ b1n( i ,1)+ b2n( i , 1 ) )
rrk ( i , j+1)=v( i , 1 )
rrk2 ( i , j+1)=vn( i , 1 )
end do
end do
open ( unit =25, f i l e =' rk . txt ' )
open ( unit =26, f i l e =' rk2 . txt ' )
do i = 1 , N
write (25 ,99) ( rrk ( i , j ) , j = 1 , O+1)
write (26 ,99) ( rrk2 ( i , j ) , j = 1 , O+1)
enddo
end program
34
Bibliografía
[1] Joel H. Ferziger and Milovan Peric. Computational Methods for Fluid Dynamics.
2002.
[2] Bengt Fornberg. Generation of nite dierence formulas on arbitrarily spaced grids.
Mathematics of Computation, 51(184):699699, 1988.
35