module variaveis

! Objetivo: definir as variáveis globais do programa

use portlib
use data_hora

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

implicit none

real*16,parameter :: great  = 1.0q+11
real*16,parameter :: limite = 1.0q+10

! *** Variáveis principais ***

integer :: entrada  ! tipo de arquivo de entrada
                    ! 0 --> uma malha por arquivo
                    ! 1 --> todas as malhas em um único arquivo

integer :: variavel ! número da variável de interesse nos arquivos de dados

integer :: nm  ! número de malhas

integer :: i   ! índice das malhas
               ! i = 1  ---> malha mais grossa
               ! i = nm ---> malha mais fina

integer :: m   ! número de extrapolações
               ! m = 1    ---> uma extrapolação
               ! m = nm-1 ---> número máximo de extrapolações

real*16 :: r21 ! razão de h entre as malhas grossa(2) e fina(1)
real*16 :: r32 ! razão de h entre as malhas supergrossa(3) e grossa(2)

real*16 :: pL  ! ordem assintótica do erro verdadeiro
real*16 :: dpL ! variação entre as ordens verdadeiras do erro verdadeiro

integer :: tipo_refino ! tipo de refino de malha (r): 1=constante; 2=variável
real*16 :: p  ! variável auxiliar


! dados necessários apenas para tipo_refino = 2 (r variável)
! para obter a ordem aparente (pU) através do método da bisseção
integer :: numero_iteracoes ! número máximo de iterações
real*16 :: tol              ! tolerância
real*16 :: pU_min           ! limite inferior de pU
real*16 :: pU_max           ! limite superior de pU

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

character*60,dimension(:),allocatable :: arq_numerico ! nomes dos arquivos das soluções numéricas

real*16,dimension(:),allocatable :: h       ! comprimento de cada elemento da malha

real*16,dimension(:),allocatable   :: Th    ! solução numérica em cada malha
real*16,dimension(:,:),allocatable :: Th1   ! solução numérica em cada malha (auxiliar para o caso de arquivo único com todas as malhas)

real*16,dimension(:),allocatable     :: pV  ! ordens verdadeiras do erro verdadeiro
character*5,dimension(:),allocatable :: pVt ! pV em formato texto

real*16,dimension(:),allocatable :: Ti_12         ! Th extrapolado com as malhas 1 e 2 e pL
real*16,dimension(:),allocatable :: Ti_13         ! Th extrapolado com as malhas 1 e 3 e pL
real*16,dimension(:),allocatable :: Ti_23         ! Th extrapolado com as malhas 2 e 3 e pL
real*16,dimension(:),allocatable :: Ti_pU         ! Th extrapolado com as malhas 1 a 3 e pU_h
real*16,dimension(:),allocatable :: Ti_pU1        ! Th extrapolado com as malhas 1 a 3 e pU_h equivalente
real*16,dimension(:),allocatable :: Tc_12         ! Média de Ti_12 com Ti_pU
real*16,dimension(:),allocatable :: Tc_13         ! Média de Ti_13 com Ti_pU
real*16,dimension(:),allocatable :: Tbi_pU        ! Th biextrapolado com malhas 1 a 5 e pU_i
real*16,dimension(:),allocatable :: Tbi_pU1       ! Th biextrapolado com malhas 1 a 5 e pU_i equivalente
real*16,dimension(:),allocatable :: T_MER         ! Th multiextrapolado (último nível de extrapolação em cada malha)
real*16,dimension(:),allocatable :: pU_MER        ! Ordem aparente de Th multiextrapolado (último nível de extrapolação em cada malha) 
real*16,dimension(:),allocatable :: U_Ri_mpsi_MER ! Estimador Richardson com psi médio de MER interníveis (psi atribuido à malha intermediária do trio)
real*16,dimension(:),allocatable :: U_Ri_p0       ! Estimadores Richardson com base na ordem assintótica (p0)
real*16,dimension(:),allocatable :: U_Ri_pU       ! Estimadores Richardson com base na ordem aparente (pU)
real*16,dimension(:),allocatable :: T_inf_p0      ! Solução extrapolada com p0
real*16,dimension(:),allocatable :: T_inf_pU      ! Solução extrapolada com pU
real*16,dimension(:),allocatable :: T_c           ! Solução numérica convergente
real*16,dimension(:),allocatable :: U_c           ! Estimador convergente
real*16,dimension(:),allocatable :: U_GCI         ! Estimador GCI (Roache)
real*16,dimension(:),allocatable :: U_mc          ! Estimador multicoeficiente, com base em MER
real*16,dimension(:),allocatable :: psi_inter     ! Vetor razão de convergência inter níveis para Tm
real*16,dimension(:),allocatable :: psi_v         ! Vetor razão de convergência psi pata Th
real*16,dimension(:),allocatable :: psi_c         ! Vetor razão de convergência psi da solução convergente
real*16,dimension(:),allocatable :: psi_i1        ! Vetor razão de convergência psi de Th extrapolado com as malhas 1 a 3 e pU_h
real*16,dimension(:),allocatable :: psi_bi1       ! Vetor razão de convergência psi de Th biextrapolado com malhas 1 a 5 e pU_i

! Estimador de Richardson (Uri)
real*16,dimension(:),allocatable :: Uri_12  ! erro estimado de Th com as malhas 1 e 2 e pL
real*16,dimension(:),allocatable :: Uri_13  ! erro estimado de Th com as malhas 1 e 3 e pL
real*16,dimension(:),allocatable :: Uri_23  ! erro estimado de Th com as malhas 2 e 3 e pL
real*16,dimension(:),allocatable :: Uri_pU  ! erro estimado de Th com as malhas 1 a 3 e pU_h
real*16,dimension(:),allocatable :: Uri_p   ! erro estimado de Th com as malhas 1 a 3, pU_h e p

! Estimador Convergente (Uc)
real*16,dimension(:),allocatable :: Uc_12   ! erro estimado de Tc_12
real*16,dimension(:),allocatable :: Uc_13   ! erro estimado de Tc_13

real*16,dimension(:),allocatable :: pU_h    ! ordem aparente do erro estimado de Th
real*16,dimension(:),allocatable :: pU_h1   ! ordem aparente equivalente do erro estimado de Th
real*16,dimension(:),allocatable :: pU_i    ! ordem aparente do erro estimado de Ti_pU
real*16,dimension(:),allocatable :: pU_i1   ! ordem aparente equivalente do erro estimado de Ti_pU
real*16,dimension(:),allocatable :: pU_c12  ! ordem aparente do erro estimado de Tc_12
real*16,dimension(:),allocatable :: pU_c13  ! ordem aparente do erro estimado de Tc_13
real*16,dimension(:),allocatable :: pU_bi   ! ordem aparente do erro estimado de Tbi_pU
real*16,dimension(:),allocatable :: pU_bi1  ! ordem aparente equivalente do erro estimado de Tbi_pU
real*16,dimension(:),allocatable :: pU_c1   ! ordem aparente equivalente do erro estimado para solução convergente

integer,dimension(:),allocatable:: it_pU_h   ! número de iterações para obter pU_h
integer,dimension(:),allocatable:: it_pU_i   ! número de iterações para obter pU_i
integer,dimension(:),allocatable:: it_pU_c12 ! número de iterações para obter pU_c12
integer,dimension(:),allocatable:: it_pU_c13 ! número de iterações para obter pU_c13
integer,dimension(:),allocatable:: it_pU_bi  ! número de iterações para obter pU_bi

! *** Variáveis de campo (matrizes) com dimensão (1:nm,1:nm-1) ***

real*16,dimension(:,:),allocatable :: Um_12 ! erro estimado de Tm_12 com as malhas 1 e 2 e pV
real*16,dimension(:,:),allocatable :: Tm_12 ! Th multiextrapolado com as malhas 1 e 2 e pV

! *** 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*60  :: caso           ! nome do arquivo de saída
character*60  :: indice_caso
character*100  :: title          ! título do gráfico
character*202 :: head           ! título do gráfico + dia
character*12  :: dia            ! data da simulação
character*8   :: hora           ! horário da simulação
character*90  :: note_caso      ! notepad + caso

character*80 :: arq_exato       ! nome do arquivo da solução exata
character*80 :: arq_dados       ! nome do arquivo de dados principal para o caso de vários arquivos, um para cada malha
character*80 :: arq_dados_unico ! nome do arquivo de dados principal para o caso de um unico arquivo, contendo dados de todas as malhas

integer :: dos                  ! acessa prompt dos

integer :: j, k ! auxiliares

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

end module variaveis


