program Richardson_3p1

!  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 atual    3.1 ( 2 Dez 07)
!  Última alteração =   12 Dez 07

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

!  MODELO NUMÉRICO (resumo)

!     Faz extrapolações simples e múltiplas dos resultados numéricos
!     Calcula ordens efetiva  e aparente de resultados extrapolados ou não
!     Calcula erro estimado de resultados numéricos com e sem extrapolações,
!        com estimadores delta, Richardson, GCI, convergente e multicoeficientes
!     Se a solução exata está disponível, calcula erros verdadeiros e o
!        desempenho dos estimadores
!     Razão de refino de malha (r) pode ser constante ou variável;
!        método da bisseção para obter ordens aparente com r variável
!     Malhas uniformes
!     Precisão dupla
!     Linguagem Fortran 95
!     Tipo de projeto: Console Application
!     Aplicativo usado: Fortran Intel 9.1
!     Extrapolações bi e tricoeficiente só se aplicam para refino constante
!     Os dados devem conter no mínimo duas malhas
!     Os valores de pL e dpL são necessários mesmo que a solução analítica
!        não seja conhecida
!     Resultados em branco de parâmetros significa que não há dados suficientes
!        para calculá-lo ou não é possível calculá-lo

! ARQUIVOS envolvidos no programa:

!    Fontes (prefixo Richardson_3p1_):
!       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_3p0.in  = leitura do nome do arquivo principal de dados do CASO a analisar
!       "arq_dados"        = leitura dos dados principais
!       "arq_exato"        = nome do arquivo da solução exata
!       "arq_numerico"     = nomes dos arquivos das soluções numéricas (um arquivo para cada
!                            malha mas 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:
!       pL.dat     = dados para gráfico de pL
!       p2.dat     = dados para gráfico de pV(2)
!       p3.dat     = dados para gráfico de pV(3)
!       pE_h.dat   = dados para gráfico de pE_h
!       pE_i.dat   = dados para gráfico de pE_i
!       pE_bi.dat  = dados para gráfico de pE_bi
!       pE_c12.dat = dados para gráfico de pE_c12
!       pE_c13.dat = dados para gráfico de pE_c13
!       pU_h.dat   = dados para gráfico de pU_h
!       pU_i.dat   = dados para gráfico de pU_i
!       pU_bi.dat  = dados para gráfico de pU_bi
!       pU_c12.dat = dados para gráfico de pU_c12
!       pU_c13.dat = dados para gráfico de pU_c13
!       Eh.dat     = dados para gráfico de Eh
!       Ei_12.dat  = dados para gráfico de Ei_12
!       Ei_pU.dat  = dados para gráfico de Ei_pU
!       Ec_12.dat  = dados para gráfico de Ec_12
!       Ec_13.dat  = dados para gráfico de Ec_13
!       Ei_13.dat  = dados para gráfico de Ei_13
!       Ei_23.dat  = dados para gráfico de Ei_23
!       Ei_bi.dat  = dados para gráfico de Ei_bi
!       Ei_tri.dat = dados para gráfico de Ei_tri
!       Ebi.dat    = dados para gráfico de Ebi_pU
!       U_12.dat   = dados para gráfico de Ud, Uri_12 e GCI_pL
!       Uri_13.dat = dados para gráfico de Uri_13
!       Uri_23.dat = dados para gráfico de Uri_23
!       Uri_bi.dat = dados para gráfico de Uri_bi
!       Utri.dat   = dados para gráfico de Uri_tri
!       Uri_pU.dat = dados para gráfico de Uri_pU, Uri_p, GCI_p
!       Uc_12.dat  = dados para gráfico de Uc_12
!       Uc_13.dat  = dados para gráfico de Uc_13
!       E_pL_p2.dat= auxiliar para gráficos de E
!       E_p3.dat   = auxiliar para gráficos de E
!       U_pL.dat   = auxiliar para gráficos de U
!       U_p2.dat   = auxiliar para gráficos de U
!       U_p3.dat   = auxiliar para gráficos de U

!    Arquivos de comandos para Wgnuplot (prefixo Richardson_3p0_):
!       pU.gnu    = gráfico de pU
!       pE_pU.gnu = gráfico de pE e pU
!       U.gnu     = gráfico de erros estimados (U*) do grupo 1
!       U_2.gnu   = gráfico de erros estimados (U*) do grupo 2
!       E.gnu     = gráfico de erros verdadeiros (E*)
!       E_U.gnu   = gráfico de E* e U* do grupo 1
!       E_U_2.gnu = gráfico de E* e U* do grupo 2

!    Arquivo texto com informações básicas sobre o programa:
!       LEIA-ME_Richardson_3p1.txt

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

use resultados

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

implicit none

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

  call le_dados

  open(out,file=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 ' // trim(adjustl(caso))

  dos = system(note_caso) ! lista arquivo de resultados

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

end
