program ICE

!     Iterative Convergence Error

!     Versão original 1.0 (17 Mar 99)

!     Versão atual    1.0 (17 Mar 99)


!     última alteração  =  27 Mar 99


!     MODELO NUMÉRICO (resumo)
!       extrapola resultados numéricos Tn obtendo Ti
!       calcula ordem aparente (pa) de Tn
!       calcula erro de Tn
!       calcula incertezas de Tn com estimadores delta (Ud),
!         Un (Marchi) e Ufp (Ferziger-Peric)
!       incremento de iterações constante = dn


!     ARQUIVOS envolvidos no programa:

!       ice.f90     = programa principal
!       calculo.f90 = calcula ordem, incerteza e extrapolação
!       dados.f90   = lê e lista os dados do programa
!       result.f90  = mostra gráfico e gera listagem dos resultados
!       varia.f90   = define todas as variáveis globais do programa
!       ice.dad     = arquivo de dados principal

!       *.ice = listagem dos resultados
!       *.itn = arquivos de dados das soluções numéricas

!       arq1.dat = arquivo de dados genérico 1
!       arq2.dat = arquivo de dados genérico 2
!       arq3.dat = arquivo de dados genérico 3
!       arq4.dat = arquivo de dados genérico 4

!       ordem.gnu = arquivo de comandos para gráfico de ordens aparente
!       erro.gnu  = arquivo de comandos para gráfico de erros de Tn
!       fator.gnu = arq. comandos gráfico de razão entre U e En

!       notepad.exe  = editor dos arquivos
!       Wgnuplot.exe = programa gerador de gráfico

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


use DADOS

use RESULTADOS


use msfwin

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

implicit none

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

  name=setwindowtext(gethwndqq(qwin$framewindow),  &
       "ICE 1.0 - Iterative Convergence Error"C)

  call le_nomes_arquivos

  open(10,file=arq_saida)

  call le_arquivos_numericos

  call date_and_time(vardate,vartime,varzone,var)

  write(aux,*) var(3)
  aux1 = trim(adjustl(aux))
  write(aux,*) var(2)
  aux2 = trim(adjustl(aux))
  write(aux,*) var(1)
  aux3 = trim(adjustl(aux))
  dia = '('//trim(aux1)//'/'//trim(aux2)//'/'//aux3//')'

  write(aux,*) var(5)
  aux1 = trim(adjustl(aux))
  write(aux,*) var(6)
  aux2 = trim(adjustl(aux))
  write(aux,*) var(7)
  aux3 = trim(adjustl(aux))
  hora = trim(aux1)//':'//trim(aux2)//':'//aux3

  write(10,1) arq_saida, dia, hora, title
  1 format(/,5x,'arquivo de saída = ',a60,//, &
           5x,'Dia = ',a12,5x,'Hora = ',a8,//,   &
           5x,'título = ',a40)

  write(10,2) nv, ni, n1, dn, arq_numerico
  2 format(/,      i6,' = número de variáveis',/, &
                   i6,' = número de iterações',/, &
                   i6,' = número da iteração inicial',/, &
                   i6,' = incremento nas iterações',//, &
           5x,'arquivo com resultados numéricos = ',a60)

  notepad_saida = 'notepad '//arq_saida

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

  do i = 1, nv

    write(10,5) head(i), Tr(i)
    5 format(/,'----------------------------------------------', &
             //,5x,a80,//, &
             5x,1pe30.19,' = solução numérica exata')

    call calcula

    call escreve

  end do

  dos = systemqq(notepad_saida) ! lista arquivo de resultados

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

  close(10)

  int4 = setexitqq(qwin$exitnopersist)

end