Você está na página 1de 23

1) Avalie pelos esquemas de interpolação (CDS, Upwind, Power-law e QUICK) o problema de

difusão/convecção de calor unidimensional em regime permanente em um escoamento de água


(k=0,595 W/m-K e rho=997 kg/m3) com velocidade constante. Considere que em x = 0 a
temperatura é igual a 150oC (T0) e em x = L (0,1 m) é igual a 50oC (TL). Considere que a velocidade
do escoamento constante e igual 1 m/s.

Solução

CDS
𝒌𝒆
𝑫𝒆 =
∆𝒙𝒆
𝑭𝒆 = (𝝆𝒖)𝒆
𝒌𝒘
𝑫𝒘 =
∆𝒙𝒘
𝑭𝒘 = (𝝆𝒖)𝒘

Nó 1:

Nós Centrais:

Último Nó:
 Para velocidad v=1[m/s]

Figura 1. Perfil de temperatura para velocidade positiva


 Para velocidad v=-1[m/s]

Figura 2. Perfil de temperatura para velocidade negativa


////////////////////////////////////////////////////////////////////////////////////////////
program CDS_lista5

implicit none
integer, parameter:: nv=150
integer:: i
real:: L,dx,T_est, erro, u, k, kmax, F_e, F_w, D_e, D_w, p, Tp1, Tp2
real, dimension(nv):: Aw,Ap,Ae,Sp,Su
real, dimension(nv):: T,x

L=0.1
Tp1=150 !Temperaturas fixas
Tp2=50
dx=L/nv
k=0.595
p=997.0 !Densidade
u=1.0 ! velocidades u=1 m/s e u=-1 m/s

T_est=25 ! temepratura estimada


erro=10**(-4)
kmax=800000
!///////////////////////////////////////////////////////////////////////////////////
///////////////////77
!Estimativa do campo inicial

do i=1,nv
T(i)=T_est
end do

!Cálculo da Malha
x(1)=0.5D0*dx
do i=2,nv
x(i)=x(i-1)+dx
end do

!Cálculo Coeficientes
! material uniforme
F_e=p*u
F_w=p*u
D_e=k/dx
D_w=k/dx

write(*,*) x
pause
!Calculo Temperatura através do MVF

do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=(D_e)-(F_e/2)
Su(i)=(2*D_w+F_w)*Tp1
Sp(i)=-((2*D_w)+F_w)
Ap(i)=Ae(i)+Aw(i)+((F_e)-(F_w))-Sp(i)

else if((i>1).and.(i<nv))then
Aw(i)=(D_w)+(F_w/2)
Ae(i)=(D_e)-(F_e/2)
Su(i)=0
Sp(i)=0
Ap(i)=Aw(i)+Ae(i)+((F_e)-(F_w))-Sp(i)

else
Aw(i)=(D_w)+(F_w/2)
Ae(i)=0
Su(i)=((2*D_e)-F_e)*Tp2
Sp(i)=-((2*D_e)-F_e)
Ap(i)=Ae(i)+Aw(i)+((F_e)-(F_w))-Sp(i)

end if
end do
!////////////////////////////////////////////////////////////////////////////7

!subrotina para calculo de coeficientes

call TDMA(Ae,Aw,Su,Ap,nv,T)
!Resultados plotados no TecPlot:
!Temperatura através de MVF:
write(*,*) T
pause
150 format(2x,30(F20.12,1X))
open(15,file="Tnum.plt")
write(15,*) 'Title="Tnum"'
write(15,*) "Variables= 'x', 'T'"
write(15,*) 'ZONE T = "CAMPO" i=',nv

do i=1,nv
write(15,150) x(i), T(i)

enddo

close(15)

contains

SUBROUTINE TDMA(Ae, Aw, Su, Ap, N,R)


implicit none
integer::m
integer, intent(in)::N
real, dimension(N):: Ae, Aw, Su, Ap
real, dimension(N):: A,B,C,D,P,Q
real, intent(out),dimension(N):: R(N)

do m=1,N
A(m)= Ap(m)
B(m)= -Ae(m)
C(m)= -Aw(m)
D(m)= Su(m)
end do
!Cálclo do P(1) e Q(1)

P(1) = -B(1)/A(1)
Q(1) = D(1)/A(1)

!Calclo de todos os P(m) e Q(m)


do m=2,N
P(m) = -B(m)/(A(m)+C(m)*P(m-1))
Q(m) = (D(m)-C(m)*Q(m-1))/(A(m)+C(m)*P(m-1))
end do

!Comparãcao R(N)=Q(N)

R(N)=Q(N)
!Calcular R para todos pontos de N-1 a 1

do m=N,2,-1
R(m-1) = P(m-1)*R(m) + Q(m-1)
end do

END SUBROUTINE TDMA

end program CDS_lista5

UPWIND
Nó 1:

Nós Centrais:

Último Nó:
 Para velocidad v=1[m/s]

Figura 3. Perfil de temperatura para velocidade positiva


 Para velocidad v=-1[m/s]

Figura 4. Perfil de temperatura para velocidade negativa


Code
////////////////////////////////////////////////////////////////////////7
program UPWIND_Lista5

implicit none
integer, parameter:: nv=80
integer:: i
real:: L,dx,T_est, erro, u, k, kmax, p
real, dimension(nv):: Aw,Ap,Ae,Su,Sp
real, dimension(nv):: T,x
real:: Tp1,Tp2,F_e, F_w, D_e, D_w

L=0.1
Tp1=150.0
Tp2=50.0
dx=L/nv
k=0.595
p=997.0
u=1.0
T_est=25
erro=10**(-4)
kmax=800000

!Estimativa do campo inicial

do i=1,nv
T(i)=T_est
end do

!Cálculo da Malha

x(1)=0.5D0*dx
do i=2,nv
x(i)=x(i-1)+dx
end do

F_e=p*u
F_w=p*u
D_e=k/dx
D_w=k/dx

!Calculo Temp através do MVF

do i=1,nv
if(i==1)then
Aw(i)=0.0D0
Ae(i)=D_e
Su(i)=(2*D_w+F_w)*Tp1
Sp(i)=-(2*D_w+F_w)
Ap(i)=Ae(i)+Aw(i)+((F_e)-(F_w))-Sp(i)
else if((i>1).and.(i<nv))then
Aw(i)=F_w+D_w
Ae(i)=D_e
Su(i)=0
Sp(i)=0
Ap(i)=Aw(i)+Ae(i)+((F_e)-(F_w))-Sp(i)

else
Aw(i)=(F_w)+(D_w)
Ae(i)=0.0D0
Su(i)=2*D_e*Tp2
Sp(i)=-(2*D_e)
Ap(i)=Ae(i)+Aw(i)+((F_e)-(F_w))-Sp(i)

end if
end do
!//////////////////////////////////////////////////////////////////////77

!subrotina para calculo de coeficientes

call TDMA(Ae,Aw,Su,Ap,nv,T)
!Resultados plotados no TecPlot:
!Temperatura através de MVF:
write(*,*) T
pause
150 format(2x,30(F20.12,1X))
open(15,file="Tnum.plt")
write(15,*) 'Title="Tnum"'
write(15,*) "Variables= 'x', 'T'"
write(15,*) 'ZONE T = "CAMPO" i=',nv

do i=1,nv
write(15,150) x(i), T(i)

enddo

close(15)

contains

SUBROUTINE TDMA(Ae, Aw, Su, Ap, N,R)


implicit none
integer::m
integer, intent(in)::N
real, dimension(N):: Ae, Aw, Su, Ap
real, dimension(N):: A,B,C,D,P,Q
real, intent(out),dimension(N):: R(N)

do m=1,N
A(m)= Ap(m)
B(m)= -Ae(m)
C(m)= -Aw(m)
D(m)= Su(m)
end do
!Cálclo do P(1) e Q(1)

P(1) = -B(1)/A(1)
Q(1) = D(1)/A(1)
!Calclo de todos os P(m) e Q(m)

do m=2,N
P(m) = -B(m)/(A(m)+C(m)*P(m-1))
Q(m) = (D(m)-C(m)*Q(m-1))/(A(m)+C(m)*P(m-1))
end do

!Comparãcao R(N)=Q(N)

R(N)=Q(N)
!Calcular R para todos pontos de N-1 a 1

do m=N,2,-1
R(m-1) = P(m-1)*R(m) + Q(m-1)
end do

END SUBROUTINE TDMA

end program UPWIND_Lista5

Power Law
Nó 1:

Nós Centrais:

Último Nó:
 Para velocidad v=1[m/s]

Figura 5. Perfil de temperatura para velocidade positiva


 Para velocidad v=-1[m/s]

Figura 6. Perfil de temperatura para velocidade negativa


Velocidade u = 1m/s
Para esse caso, nota-se que os resultados não divergem com o aumento do
refinamento da malha, tendendo à solução analitica.

160

140

120
Temperatura

100

5x5
80 10x10
20x20
40x40
80x80
60

0.02 0.04 0.06 0.08


x[m]

Figura7. Variação de temperatura com a posição

Velocidade u = -1m/s
Nota-se que a solução diverge à medida que o número de volumes de controle
aumenta, mostrado nas figuras abaixo, onde a divergencia é maior quanto maior for
o número de volumes de controle.

10x10

20x20
40x40

80x80

160x160

240x240

/////////////////////////////////////////////////////////////////////////
program Powerlaw_Lista5

implicit none
integer, parameter:: nv=5
integer:: i
real:: L,dx,T_est, erro, u, k, kmax, p
real, dimension(nv):: Aw,Ap,Ae,Su,Sp
real, dimension(nv):: T,x
real:: Tp1,Tp2,F_e, F_w, D_e, D_w

L=0.1
dx=L/nv
Tp1=150.0
Tp2=50.0
k=0.595
p=997
u=1.0
T_est=25
erro=10**(-4)
kmax=800000

!Estimativa do campo inicial

do i=1,nv
T(i)=T_est
end do

!Cálculo da Malha

x(1)=0.5D0*dx
do i=2,nv
x(i)=x(i-1)+dx
end do

F_e=p*u
F_w=p*u
D_e=k/dx
D_w=k/dx

!Calculo Temp através do MVF

do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=0
Su(i)=(2*D_w+F_w)*Tp1
Sp(i)=-(2*D_w+F_w)
Ap(i)=Ae(i)+Aw(i)+(F_e-F_w)-Sp(i)

else if((i>1).and.(i<nv))then
Aw(i)=F_w
Ae(i)=0
Su(i)=0
Sp(i)=0
Ap(i)=Aw(i)+Ae(i)+(F_e-F_w)-Sp(i)

else
Aw(i)=F_w
Ae(i)=0
Su(i)=(2*D_e)*Tp2
Sp(i)=-(2*D_e)
Ap(i)=Ae(i)+Aw(i)+(F_e-F_w)-Sp(I)

end if
end do
!////////////////////////////////////////////////////////////////////7

!subrotina para calculo de coeficientes

call TDMA(Ae,Aw,Su,Ap,nv,T)
!Resultados plotados no TecPlot:
!Temperatura através de MVF:
write(*,*) T
pause
150 format(2x,30(F20.12,1X))
open(15,file="Tnum.plt")
write(15,*) 'Title="Tnum"'
write(15,*) "Variables= 'x', 'T'"
write(15,*) 'ZONE T = "CAMPO" i=',nv

do i=1,nv
write(15,150) x(i), T(i)
enddo

close(15)

contains

SUBROUTINE TDMA(Ae, Aw, Su, Ap, N,R)


implicit none
integer::m
integer, intent(in)::N
real, dimension(N):: Ae, Aw, Su, Ap
real, dimension(N):: A,B,C,D,P,Q
real, intent(out),dimension(N):: R(N)

do m=1,N
A(m)= Ap(m)
B(m)= -Ae(m)
C(m)= -Aw(m)
D(m)= Su(m)
end do
!Cálclo do P(1) e Q(1)

P(1) = -B(1)/A(1)
Q(1) = D(1)/A(1)

!Calclo de todos os P(m) e Q(m)

do m=2,N
P(m) = -B(m)/(A(m)+C(m)*P(m-1))
Q(m) = (D(m)-C(m)*Q(m-1))/(A(m)+C(m)*P(m-1))
end do

!Comparãcao R(N)=Q(N)

R(N)=Q(N)
!Calcular R para todos pontos de N-1 a 1

do m=N,2,-1
R(m-1) = P(m-1)*R(m) + Q(m-1)
end do

END SUBROUTINE TDMA

end program Powerlaw_Lista5

///////////////////////////////////////////////////////////////////////////
QUICK
Nó 1:

Nó 2:

Nós entre 2 e o último VC

Último Nó:
 Para velocidad v=1[m/s]

Figura 8. Perfil de temperatura para velocidade positiva


 Para velocidad v=-1[m/s]

Figura 9. Perfil de temperatura para velocidade negativa

////////////////////////////////////////////////////////////
program Quick_Lista5

implicit none
integer, parameter:: nv=50
integer:: i
real:: L,dx,T_est, erro, u, k, kmax, p
real, dimension(nv):: Aw,Ap,Ae,Su,Sp,Aww
real, dimension(nv):: T,x
real:: Tp1,Tp2,F_e, F_w, D_e, D_w

L=0.1
Tp1=150
Tp2=50
dx=L/nv
k=0.595
p=997.0
u=-1.0
T_est=25
erro=10**(-4)
kmax=80000

!Estimativa do campo inicial

do i=1,nv
T(i)=T_est
end do

!Cálculo da Malha

x(1)=0.5D0*dx
do i=2,nv
x(i)=x(i-1)+dx
end do
F_e=p*u
F_w=p*u
D_e=k/dx
D_w=k/dx

!Calculo Temp através do MVF

do i=1,nv
if(i==1)then
Aw(i)=0
Aww(i)=0
Ae(i)=D_e+(1.0/3.0)*D_w-(3.0/8.0)*F_e
Su(i)=((8.0/3.0)*D_w+(2.0/8.0)*F_e+F_w)*Tp1
Sp(i)=(((8.0/3.0)*D_w+(2.0/8.0)*F_e+F_w))
Ap(i)=Ae(i)+Aw(i)+Aww(i)+((F_e)-(F_w))-Sp(i)
else if(i==2)then
Aw(i)=D_w+(7.0/8.0)*F_w+(1.0/8.0)*F_e
Aww(i)=0
Ae(i)=(D_e)-(3.0/8.0)*F_e
Su(i)=-(1.0/4.0)*F_w*Tp1
Sp(i)=-(-(1.0/4.0)*F_w)
Ap(i)=Ae(i)+Aw(i)+Aww(i)+((F_e)-(F_w))-Sp(i)

else if((i>2).and.(i<nv))then
Aw(i)=(D_w)+(6.0/8.0)*F_w+(1.0/8.0)*F_e
Ae(i)=(D_e)-(3.0/8.0)*F_e
Su(i)=0
Sp(i)=0
Ap(i)=Aw(i)+Ae(i)+Aww(i)+((F_e)-(F_w))-Sp(i)

else
Aw(i)=D_w+(1.0/3.0)*D_e+(6.0/8.0)*F_w
Ae(i)=0.0
Aww(i)=-(1.0/8.0)*F_w
Su(i)=((8.0/3.0)*D_e-(F_e))*Tp2
Sp(i)=-(((8.0/3.0)*D_e-(F_e)))
Ap(i)=Ae(i)+Aw(i)+Aww(i)+((F_e)-(F_w))-Sp(i)

end if
end do

!subrotina para calculo de coeficientes


call jacobi(Aw,Aww,Ap,Ae,Su,nv,T,erro,kmax)

write(*,*) T
pause

!resultados tecplot

150 format(2x,30(F20.12,1X))
open(15,file="Tnum.plt")
write(15,*)'Title="Tnum"'
write(15,*)"Variables='x','T'"
write(15,*)'ZONE T="CAMPO" i=',nv

do i=1,nv
write(15,150)x(i),T(i)
end do

close(15)

contains

!Subrotina do método Jacobi

SUBROUTINE jacobi(Aw,Aww,Ap,Ae,Su,N,A,erro,kmax)
implicit none
integer:: i,k,it_final
integer,intent (in)::N
real, dimension(N):: Aw,Ap,Ae,Su,Aww
real, dimension(N):: T
real, dimension(1:N,1:2):: M
real, dimension(N):: Ri,A
real:: RMS,erro,kmax,residue

!Estimativa inicial da variável

do i=1,N
M(i,1)=A(i)
end do

!inicio do processo iterativo

k=1
do while(k<kmax)
do i=1,N
if(i==1)then !VC1
M(i,2)=(Ae(i)*M(i+1,1)+Su(i))/Ap(i)
else if(i==2)then !VC1
M(i,2)=(Ae(i)*M(i+1,1)+Aw(i)*M(i-1,1)+Su(i))/Ap(i)
else if ((i>2).and.(i<N))then !VC internos
M(i,2)=(Aw(i)*M(i-1,1)+Aww(i)*M(i-2,1)+Ae(i)*M(i+1,1)+Su(i))/Ap(i)
else !Ultimos VC
M(i,2)=(Aww(i)*M(i-2,1)+Aw(i)*M(i-1,1)+Su(i))/Ap(i)
end if
end do

!Calculo residuo

do i=1,N
if((i>1).and.(i<N))then
!Residuo local
Ri(i)=abs(Su(i)+Ae(i)*M(i+1,2)+Aw(i)*M(i-1,2)-Ap(i)*M(i,2))
!Residuo da iteração
RMS=RMS+Ri(i)**2.0D0
end if
end do

!Avanço iteração

do i=1,N
M(i,1)=M(i,2)
end do
!verificação convergencia

if(RMS<erro)then !convergencia
it_final=k !Armazena ultima posição iterativa
k=kmax !Força o fim da iterações

residue = RMS

else !Sem convergencia


k=k+1 !incremento k
it_final=k
residue=RMS
end if

end do !finalização do contador de iterações

!Resultado que regtorna para o programa principal

do i=1,N
A(i)=M(i,2)
end do

END SUBROUTINE Jacobi

end program Quick_Lista5

Você também pode gostar