program Richardson_4p1

!  Analisador e estimador de erros de discretização
!     com base na extrapolação de Richardson

!  Versão original 1.0 ( 1 Fev 04)
!  Versão          2.0 (10 Jan 07)
!  Versão          1.1 (30 Abr 07)
!  Versão          3.0 (10 Nov 07)
!  Versão          3.1 ( 2 Dez 07)
!  Versão          3.2 (10 Jul 09)
!  Versão          4.0 (18 Fev 13)
!  Versão          4.1 (14 Jan 14)

!  Autor: Carlos Henrique Marchi
!         DEMEC/TC/UFPR, Curitiba, PR

! Adaptação para versão 4.0: Márcio André Martins
! Adaptação para versão 4.1: Diego Fernando Moro

!  MODELO NUMÉRICO (resumo)

!     Faz extrapolações simples e múltiplas dos resultados numéricos
!     Calcula ordem aparente de resultados extrapolados ou não
!     Calcula erro estimado de resultados numéricos com e sem extrapolações,
!        com estimadores Richardson, GCI, convergente e multicoeficientes
!     Razão de refino de malha (r) constante ou variável;
!        método da bisseção para obter ordens aparente com r variável
!     Malhas uniformes
!     Precisão quádrupla
!     Linguagem Fortran 2003
!     Tipo de projeto: Console Application
!     Aplicativo usado: Fortran Intel 11.0
!     Os dados devem conter no mínimo três malhas
!     Os valores de pL e dpL são necessários; seus valores podem ser reais
!     Resultados em branco de parâmetros significa que não há dados suficientes
!        para calculá-lo ou não é possível calculá-lo

!  Adaptação: obtém resultados com os estimadores GCI (Roache) e multicoeficiente para solução sem extrapolação,
!             estimador convergente para solução numérica convergente, e uma proposta de estimador para solução 
!             obtida com o emprego de MER

! ARQUIVOS envolvidos no programa:

!    Fontes (prefixo Richardson_4p1_):
!       data_hora.f90  = obtém a data e hora do sistema
!       variaveis.f90  = define todas as variáveis globais do programa
!       dados.f90      = lê e escreve os dados do programa
!       calculos.f90   = calcula as variáveis
!       resultados.f90 = escreve resultados e apresenta gráficos
!       main.f90       = programa principal
      
!    Dados:
!       Richardson_4p1.in   = leitura do nome do arquivo principal de dados do CASO a analisar
!       "arq_dados"         = leitura dos dados principais para o caso de um arquivo por malha
!       "arq_dados_unico"   = leitura dos dados principais para o caso de um arquivo para todas as malha
!       "arq_numerico(nm)"  = nomes dos nm arquivos das soluções numéricas (um arquivo para cada
!                             malha mas com os resultados de todas as variáveis de interesse )
!       "arq_numerico(1)"   = nome do arquivo que contém as soluções numéricas (um único arquivo para todas
!                             as malhas, com os resultados de todas as variáveis de interesse )

!    Saída principal:
!       "caso"             = saída principal do programa

!    Aplicativos auxiliares:
!       Notepad.exe        = editor de arquivos
!       Wgnuplot.exe       = programa gerador de gráfico

!    Arquivos de saída auxiliares para gráficos:
!       p0.dat      = dados para gráfico de p0        (ordem assintótica)
!       p1.dat      = dados para gráfico de pV(2)     (segunda ordem verdadeira) 
!       p2.dat      = dados para gráfico de pV(3)     (terceira ordem verdadeira) 
!       pU_h.dat    = dados para gráfico de pU_h      (ordem aparente equivalente para solução extrapolada) 
!       pU_i.dat    = dados para gráfico de pU_i      (ordem aparente equivalente para solução extrapolada)
!       pU_bi.dat   = dados para gráfico de pU_bi     (ordem aparente equivalente para solução biextrapolada)
!       pU_c.dat    =   dados para gráfico de pU_c    (ordem aparente equivalente para solução convergente)
!       pU_mer.dat  =   dados para gráfico de pU_MER  (ordem aparente equivalente para solução com MER)

!       U_12.dat   = dados para gráfico de UGCI  (estimador GCI (Roache) para Th)
!       U_13.dat   = dados para gráfico de Umc   (estimador multicoeficiente com base em MER para Th)
!       U_14.dat   = dados para gráfico de Uc    (estimador convergente para solução convergente)
!       U_15.dat   = dados para gráfico de Um    (estimador Um para Tm (solução com MER))
!       
!    Arquivos de comandos para Wgnuplot (prefixo Richardson_4p1_):
!       pU.gnu    = gráfico de ordens
!       U.gnu     = gráfico de erros estimados (U*) 
!       
!    Arquivo texto com informações básicas sobre o programa:
!       LEIA-ME_Richardson_4p1.txt

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

use resultados

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

implicit none

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

  call le_dados

  open(out,file="./richardson-output/" // trim(adjustl(caso) ) )

  call data_e_hora ( dia, hora )

  head = trim(title)//" "//trim(dia)//"'"

  call escreve_dados

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

  call calcula

  call mostra_resultados

  close (out)

  note_caso = 'notepad ./richardson-output/' // trim(adjustl(caso))

  dos = system(note_caso) ! lista arquivo de resultados

end

