Você está na página 1de 3

!

MTODO DIRETO TRI-DIAGONAL MATRIX ALGORITH (TDMA) SUBROUTINE TDMA


(N,a,b,c,d,P,Q,T)
IMPLICIT NONE
INTEGER :: i !Nmero do N real*8 :: aux !Varivel auxiliar
INTEGER, INTENT(IN) :: N !NMERO TOTAL DE NS
!COEFICIENTES E TERMO-FONTE REAL*8,INTENT(IN),DIMENSION(N) :: a
REAL*8,INTENT(IN),DIMENSION(N) :: b REAL*8,INTENT(IN),DIMENSION(N) :: c
REAL*8,INTENT(IN),DIMENSION(N) :: d
!COEFIIENTES DO TDMA REAL*8,INTENT(OUT),DIMENSION(N) :: P
REAL*8,INTENT(OUT),DIMENSION(N) :: Q
!VARIVEL DE SADA REAL*8,INTENT(OUT),DIMENSION(N) :: T
P(1) = c(1) / a(1) Q(1) = d(1) / a(1)
DO i=2,N aux = a(i) - b(i)*P(i-1) P(i)= c(i) / aux Q(i)= (d(i)+ b(i) * Q(i-1)) / aux END
DO
T(N) = Q(N)
DO i = N-1,1,-1 T(i)= P(i) * T(i+1) + Q(i) END DO
END SUBROUTINE TDMA

PROGRAM PRINCIPAL IMPLICIT NONE EXTERNAL TDMA INTEGER :: QUESTAO


INTEGER :: N !NMERO TOTAL DE NS INTEGER :: i !NMERO DO N
!VARIVEIS COEFICIENTES E TERMO-FONTE: REAL*8, DIMENSION(:),ALLOCATABLE ::
aP REAL*8, DIMENSION(:),ALLOCATABLE :: aW REAL*8,
DIMENSION(:),ALLOCATABLE :: aE REAL*8, DIMENSION(:),ALLOCATABLE :: bP
!VARIVEIS DE SADA REAL*8, DIMENSION(:),ALLOCATABLE :: P REAL*8,
DIMENSION(:),ALLOCATABLE :: Q REAL*8, DIMENSION(:),ALLOCATABLE :: T REAL*8,
DIMENSION(:),ALLOCATABLE :: TA
WRITE(*,*) "EME-757 DINAMICA DE FLUIDOS COMPUTACIONAL I" WRITE(*,*)
"PRIMEIRO TRABALHO COMPUTACIONAL - 25 SET 2013" WRITE(*,*) "DESENVOLVIDO
POR ALEX VINICIUS LOPES MACHADO" WRITE(*,*) "DIGITE: " WRITE(*,*) "1 - PARA
RESOLVER A QUESTAO 1.1" WRITE(*,*) "2 - PARA RESOLVER A QUESTAO 1.2" READ
(*,*) QUESTAO
!------------------- QUESTAO 1.1 -------------------------------------- IF (QUESTAO==1) THEN
CALL SYSTEM("NOTEPAD DADOS1.1.txt")
OPEN(9, file="DADOS1.1.txt")
READ(9,*) N ALLOCATE (aP(N),aW(N),aE(N),bP(N),P(N),Q(N),T(N),TA(N)) READ(9,*)
aP(1),aW(1),aE(1),bP(1) READ(9,*) aP(2),aW(2),aE(2),bP(2) READ(9,*)
aP(N),aW(N),aE(N),bP(N) CLOSE(9)
DO i=1,N,1 TA(i)=(i-1.0d0) / (N-1.0d0) END DO
DO i=3,N-1,1 aP(i)=aP(2) aW(i)=aW(2) aE(i)=aE(2) bP(i)=bP(2) END DO
OPEN(15, file="VIZDADOS1.1.txt") WRITE(15,10) 10 FORMAT("#
i",t17,"aP",t47,"aW",t77,"aE",t107,"bP",1/) DO i=1,N,1 WRITE(15,12)
i,aP(i),aW(i),aE(i),bP(i) 12 FORMAT(I8,4(1PE30.15E2)) END DO CLOSE(15) CALL
SYSTEM("NOTEPAD VIZDADOS1.1.txt")
CALL TDMA (N,aP,aW,aE,bP,P,Q,T)
OPEN(17, file="RESULTADOS1.1.txt") WRITE(17,8) 8 FORMAT("#
i",t17,"P",t47,"Q",t77,"T",t107,"TA",1/) DO i=1,N,1 WRITE(17,9) i,P(i),Q(i),T(i),TA(i) 9
FORMAT(I8,4(1PE30.15E2)) END DO CLOSE(17) CALL SYSTEM("NOTEPAD
RESULTADOS1.1.txt") CALL SYSTEM("gnuplot COMANDOS.TXT") END IF
!-------------------QUESTAO 1.2 -------------------------------------IF (QUESTAO==2) THEN
CALL SYSTEM("NOTEPAD DADOS1.2.txt")
OPEN(9, file="DADOS1.2.txt")
READ(9,*) N ALLOCATE (aP(N),aW(N),aE(N),bP(N),P(N),Q(N),T(N),TA(N)) READ(9,*)
aP(1),aW(1),aE(1),bP(1) READ(9,*) aP(2),aW(2),aE(2) READ(9,*)
aP(N),aW(N),aE(N),bP(N)
CLOSE(9)
bP(2) = -2.0d0 / (N-1.0d0)**2.0d0 DO i=1,N,1 TA(i)=((i-1.0d0) / (N-1.0d0))**2.0d0
END DO DO i=3,N-1,1 aP(i)=aP(2) aW(i)=aW(2) aE(i)=aE(2) bP(i)=bP(2) END DO
OPEN(15, file="VIZDADOS1.2.txt") WRITE(15,10) DO i=1,N,1 WRITE(15,12)
i,aP(i),aW(i),aE(i),bP(i) END DO CLOSE(15) CALL SYSTEM("NOTEPAD
VIZDADOS1.2.txt")

CALL TDMA (N,aP,aW,aE,bP,P,Q,T)


OPEN(17, file="RESULTADOS1.2.txt") WRITE(17,8) DO i=1,N,1 WRITE(17,9)
i,P(i),Q(i),T(i),TA(i) END DO CLOSE(17) CALL SYSTEM("NOTEPAD
RESULTADOS1.2.txt")
END IF
!----------------------------------------------------------END PROGRAM PRINCIPAL

Você também pode gostar