Sunteți pe pagina 1din 7

Anexo 1

1. Cartesianas sem geração

program Ex_1_sem_geracao_Gustavo_Nascimento

implicit none
integer, parameter:: nv=5
integer:: i,k
real:: L,dx,T_est,erro,kmax
real, dimension(nv):: Aw,Ap,Ae,Bp
real, dimension(nv):: T,x
real:: Tp1,Tp2
write(*,*)'Qual o valor da temperatura da parede em x=0'
read(*,*)Tp1
write(*,*)'Qual o valor da temperatura da parede x=L'
read(*,*)Tp2
write(*,*)Tp1,Tp2
pause
L=1.0
dx=L/nv
k=25
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
!Calculo Temp através do MVF
do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=1
Ap(i)=Ae(i)+2
Bp(i)=2*Tp1
else if((i>1).and.(i<nv))then
Aw(i)=1
Ae(i)=1
Ap(i)=Aw(i)+Ae(i)
Bp(i)=0
else
Aw(i)=1
Ap(i)=Aw(i)+2
Ae(i)=0
Bp(i)=2*Tp2
end if
end do

!subrotina para calculo de coeficientes


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

write(*,*) T
pause

contains
!Subrotina do método Jacobi
SUBROUTINE jacobi(Aw,Ap,Ae,Bp,N,A,erro,kmax)
implicit none
integer:: i,k,it_final
integer,intent (in)::N
real, dimension(N):: Aw,Ap,Ae,Bp
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)+Bp(i))/Ap(i)
else if ((i>1).and.(i<N))then !VC internos
M(i,2)=(Aw(i)*M(i-1,1)+Ae(i)*M(i+1,1)+Bp(i))/Ap(i)
else !Ultimos VC
M(i,2)=(Aw(i)*M(i-1,1)+Bp(i))/Ap(i)
end if
end do

!Claculo residuo
do i=1,N
if((i>1).and.(i<N))then
!Residuo local
Ri(i)=abs(Bp(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 Ex_1_sem_geracao_Gustavo_Nascimento

2. Cartesianas com geração

program Ex_1_sem_geracao_Gustavo_Nascimento

implicit none
integer, parameter:: nv=5
integer:: i,k
real:: L,dx,T_est,erro,kmax
real, dimension(nv):: Aw,Ap,Ae,Bp
real, dimension(nv):: T,x
real:: Tp1,Tp2
real:: q
write(*,*)'Qual o valor da temperatura da parede em x=0'
read(*,*)Tp1
write(*,*)'Qual o valor da temperatura da parede x=L'
read(*,*)Tp2
write(*,*)Tp1,Tp2
pause
L=1.0
dx=L/nv
k=25
T_est=25
erro=10**(-4)
kmax=800000
q=1000
!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
!Calculo Temp através do MVF
do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=1
Ap(i)=Ae(i)+2
Bp(i)=2*Tp1+(q*dx*dx)/k
else if((i>1).and.(i<nv))then
Aw(i)=1
Ae(i)=1
Ap(i)=Aw(i)+Ae(i)
Bp(i)=(q*dx*dx)/k

else
Aw(i)=1
Ap(i)=Aw(i)+2
Ae(i)=0
Bp(i)=2*Tp2+(q*dx*dx)/k
end if
end do
!subrotina para calculo de coeficientes
call jacobi(Aw,Ap,Ae,Bp,nv,T,erro,kmax)
write(*,*) T
pause
end program Ex_1_sem_geracao_Gustavo_Nascimento

3. Cilíndrico sem geração

program Ex_1_sem_geracao_Gustavo_Nascimento
implicit none
integer, parameter:: nv=5
integer:: i,k
real:: L,dx,T_est,erro,kmax
real, dimension(nv):: Aw,Ap,Ae,Bp
real, dimension(nv):: T,r
real:: Tp1,Tp2
real:: q,Ri,Re,dr
write(*,*)'Qual o valor da temperatura da parede em r=Ri'
read(*,*)Tp1
write(*,*)'Qual o valor da temperatura da parede r=Re'
read(*,*)Tp2
write(*,*)Tp1,Tp2
pause
L=1.0
dx=L/nv
k=25
T_est=25
erro=10**(-4)
kmax=800000
q=1000
Ri=0.5
Re=1
dr=0.1
!Estimativa do campo inicial
do i=1,nv
T(i)=T_est
end do
!Cálculo da Malha
r(1)=Ri+0.5D0*dr
do i=2,nv
r(i)=r(i-1)+dr
end do
!Calculo Temp através do MVF
do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=0.36
Ap(i)=0.86
Bp(i)=75
elseif(i==2)then
Aw(i)=0.36
Ae(i)=0.49
Ap(i)=0.85
Bp(i)=0
elseif(i==3)then
Aw(i)=0.49
Ae(i)=0.64
Ap(i)=1.13
Bp(i)=0
elseif(i==4)then
Aw(i)=0.64
Ae(i)=0.81
Ap(i)=1.45
Bp(i)=0
elseif(i==nv)then
Aw(i)=0.81
Ae(i)=0
Ap(i)=2.81
Bp(i)=100
end if
end do
!subrotina para calculo de coeficientes
call jacobi(Aw,Ap,Ae,Bp,nv,T,erro,kmax)
write(*,*) T
pause

end program Ex_1_sem_geracao_Gustavo_Nascimento

4. Cilíndrico com geração

program Ex_1_sem_geracao_Gustavo_Nascimento

implicit none
integer, parameter:: nv=5
integer:: i,k
real:: L,dx,T_est,erro,kmax
real, dimension(nv):: Aw,Ap,Ae,Bp
real, dimension(nv):: T,r
real:: Tp1,Tp2
real:: q,Ri,Re,dr
write(*,*)'Qual o valor da temperatura da parede em r=Ri'
read(*,*)Tp1
write(*,*)'Qual o valor da temperatura da parede r=Re'
read(*,*)Tp2
write(*,*)Tp1,Tp2
pause
L=1.0
dx=L/nv
k=25
T_est=25
erro=10**(-4)
kmax=800000
q=1000
Ri=0.5
Re=1
dr=0.1
!Estimativa do campo inicial
do i=1,nv
T(i)=T_est
end do
!Cálculo da Malha
r(1)=Ri+0.5D0*dr
do i=2,nv
r(i)=r(i-1)+dr
end do
!Calculo Temp através do MVF
do i=1,nv
if(i==1)then
Aw(i)=0
Ae(i)=0.36
Ap(i)=0.86
Bp(i)=75.121
elseif(i==2)then
Aw(i)=0.36
Ae(i)=0.49
Ap(i)=0.85
Bp(i)=0.169
elseif(i==3)then
Aw(i)=0.49
Ae(i)=0.64
Ap(i)=1.13
Bp(i)=0.225
elseif(i==4)then
Aw(i)=0.64
Ae(i)=0.81
Ap(i)=1.45
Bp(i)=0.289
elseif(i==nv)then
Aw(i)=0.81
Ae(i)=0
Ap(i)=2.81
Bp(i)=100.361
end if
end do
!subrotina para calculo de coeficientes
call jacobi(Aw,Ap,Ae,Bp,nv,T,erro,kmax)
write(*,*) T
pause
end program Ex_1_sem_geracao_Gustavo_Nascimento

S-ar putea să vă placă și