module variaveis

! Objetivo: definir as variáveis do programa

use PORTLIB	! biblioteca do Fortran

!-------------------------------------------------------------------------------

implicit none

! *** Variáveis principais ***

integer :: N       ! número de volumes de controle

integer :: P       ! número do volume de controle
                   ! P = 0, volume de controle fictício no contorno esquerdo
                   ! 1 <= P <= N, volumes de controle reais
                   ! P = N+1, volume de controle fictício no contorno direito

integer :: esquema ! tipos de esquemas advectivos e difusivos:
                   !  1 = UDS-1 com CDS-2
                   !  2 = CDS-2 com CDS-2
                   !  3 = WUDS
                   !  4 = PLDS
                   !  5 = QUICK com CDS-2/UDS-2/DDS-2
                   !  6 = UDS-2 com CDS-2
                   !  7 = ADS com CDS-2
                   !  8 = TVD com CDS-2
                   !  9 = Alfa com CDS-2
                   ! 10 = QUICK com CDS-4//UDS-2/DDS-2
                   ! 11 = QUICK com CDS-4//UDS-3/DDS-3

integer :: fonte   ! tipo do termo fonte: 
                   ! 0 ---> S = 0
                   ! 1 ---> S = Pe
                   ! 2 ---> S = 2PeX - 2
                   ! 3 ---> S = 3Pe(X**2) - 6X
                   ! 4 ---> S = 4Pe(X**3) - 12(X**2)
                   ! onde X é a coordenada espacial

integer :: itmax   ! número máximo de iterações para o esquema QUICK

real*16 :: Pe      ! número de Peclet do problema

real*16 :: h       ! comprimento de cada elemento da malha

real*16 :: alf     ! coeficiente advectivo do esquema Alfa

real*16 :: alfa    ! coeficiente advectivo do esquema WUDS

real*16 :: beta    ! coeficiente difusivo do esquema WUDS

real*16 :: pow     ! coeficiente do esquema PLDS

integer :: local   ! tipo de T(1/2) 
                   ! 1 = valor nodal
                   ! 2 = média aritmética

! *** Variáveis de interesse ***

real*16 :: Tc               ! T em x=1/2 (numérico)
real*16 :: Tce              ! T em x=1/2 (analítico)

real*16 :: T_media          ! temperatura média (solução numérica)
real*16 :: T_media_exato    ! temperatura média (solução analítica)

real*16 :: inclinacao       ! dT/dx em x = 1 (solução numérica)
real*16 :: inclinacao_exato ! dT/dx em x = 1 (solução analítica)

real*16 :: Em               ! média da norma l1 do erro numérico

! *** Variáveis de campo (vetores) com dimensão (0:N+1) ***

real*16,dimension(:),allocatable :: T_exato ! solução analítica exata
real*16,dimension(:),allocatable :: T       ! solução numérica
real*16,dimension(:),allocatable :: x       ! coordenada espacial nodal

real*16,dimension(:),allocatable :: aw      ! coeficiente oeste
real*16,dimension(:),allocatable :: ap      ! coeficiente central
real*16,dimension(:),allocatable :: ae      ! coeficiente leste
real*16,dimension(:),allocatable :: bp      ! termo fonte

real*16,dimension(:),allocatable :: alfm    ! coeficiente advectivo do esquema ADS

! *** váriaveis auxiliares ***

integer, parameter :: in   =  7 ! número do arquivo de entrada (dados)
integer, parameter :: out  = 10 ! número do arquivo de saída principal
integer, parameter :: out2 = 11 ! número do arquivo de saída secundário

character*50  :: caso      ! nome do arquivo de saída
character*90  :: titulo    ! título do gráfico
character*90  :: note_caso ! notepad + caso
logical       :: dos       ! acessa prompt dos

integer :: ver_grafico      ! =1,mostra gráficos; 0=não
integer :: ver_coeficientes ! =1,mostra coeficientes de T; 0=não
integer :: ver_campo        ! =1,lista campo de T; 0=não
integer :: w                ! freqüência de impressão dos campos

integer :: k    ! auxiliar

real*16 :: erro ! erro local

real*8  :: tcpu1   ! tempo de CPU inicial
real*8  :: tcpu2   ! tempo de CPU final
real*8  :: tcpu    ! tempo de CPU (s)

end