Documente Academic
Documente Profesional
Documente Cultură
f90
!
! FUNCTIONS:
! Ex1_Aula4_CFD_Jacobi - Entry point of console application.
!
!****************************************************************************
!
! PROGRAM: Ex1_Aula4_CFD_Jacobi
!
! PURPOSE: Entry point for the console application.
!
!****************************************************************************
program Ex1_Aula4_CFD_Jacobi
implicit none
integer, parameter:: nv=50 !Número de Volumes de controle do domínio
integer:: i !Variável auxiliar para percorrer os nós
real:: L, dx, T_est, erro, kmax, k !Comprimento da barra, dx, Estimativa da
temperatura, erro, número máximo de iterações, condutividade térmica
real, dimension(nv):: Aw, Ap, Ae, Sp, Su !Variáveis do método: uma para cada
nó
real, dimension(nv):: T, x
real:: Tp1, Tp2 !Temperaturas prescritas na esquerda e na direita
write(*,*)'Qual o valor da temperatura da parede em x = 0?'
read(*,*)Tp1
write(*,*)'Qual o valor da temperatura da parede em x = L?'
read(*,*)Tp2
T(i) = T_est
end do
!Cálculo da malha
x(1) = 0.5D0*dx !!O primeiro comprimento é metade do dx "normal" entre as
células
do i = 2,nv
x(i) = x(i-1) + dx
end do
!write(*,*) x
if(i==1) then
Ae(i) = 1
Aw(i) = 0
Su(i) = 2*Tp1
Sp(i) = -2
Ap(i) = Aw(i) + Ae(i) - Sp(i)
Aw(i) = 1
Ae(i) = 1
Su(i) = 0
Sp(i) = 0
Ap(i) = Aw(i) + Ae(i) - Sp(i)
else
Aw(i) = 1
Ae(i) = 0
Su(i) = 2*Tp2
Sp(i) = -2
Ap(i) = Aw(i) + Ae(i) - Sp(i)
end if
end do
call jacobi(Ae,Aw,Su,Ap,nv,T,erro,kmax)
!Resultados plotados no TecPlot:
!Temperatura através de MVF:
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
end do
do i=1,N
if(i==1)then
M(i,2) = (Ae(i)*M(1+i,1)+Su(i))/Ap(i)
elseif((i>1).and.(i<N)) then
M(i,2) = (Aw(i)*M(i-1,1)+Ae(i)*M(i+1,1))/Ap(i)
else
M(i,2) = (Aw(i)*M(i-1,1))/Ap(i)
end if
end do
!Cálculo do resíduo
do i=1,N
if((i>1).and.(i<n))then
!Resíduo local
Ri(i) = abs(Su(i)+Ae(i)*M(1+i,2)+Aw(i)*M(i-1,2)-
Ap(i)*M(i,2))
!Resíduo da iteração
end do
RMS = RMS**0.5D0
!Avanço da iteração
do i=1,N
M(i,1) = M(i,2)
end do
it_final = k
k = kmax !força o final das iterações
residue = RMS
else
k = k+1
it_final = k
residue = RMS
end if
end do
A(i)= M(i,2)
enddo