module resultados

! objetivo: mostrar listagem e gráfico dos resultados

use variaveis

implicit none

contains

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

  subroutine visualizacao

    if ( ver_coeficientes == 1 ) then
       call escreve_coeficientes
       select case ( esquema )
          case ( 7, 8 ) ! ADS, TVD
             call escreve_alfa
       end select
    end if

    if ( ver_campo == 1 ) call escreve_campo

    if ( ver_grafico == 1 ) call graficos

    call escreve_variaveis_interesse 

  end subroutine visualizacao

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

  subroutine escreve_coeficientes

    write(out,1)
    1 format(/,1x,'*** COEFICIENTES E TERMOS FONTES DE T ***',//,  &
      2x,'volume',t12,'x',t35,'oeste',t58,'central',t81,'leste',t104,'fonte',/)

    do P = 0, 1
       write(out,2) P, x(P), aw(P), ap(P), ae(P), bp(P)
    end do

    do P = 2, N-1, w
       write(out,2) P, x(P), aw(P), ap(P), ae(P), bp(P)
    end do

    do P = N, N+1
       write(out,2) P, x(P), aw(P), ap(P), ae(P), bp(P)
    end do

    2 format(i8,5(1pe23.14))

  end subroutine escreve_coeficientes

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

  subroutine escreve_alfa

    write(out,1)
    1 format(/, 1x, '*** COEFICIENTE ADVECTIVO ALFA NA FACE LESTE ***',//,  &
      2x,'volume', t12,'x nodal', t35,'alfa leste',/)

    do P = 0, 1
       write(out,2) P, x(P), alfm(P)
    end do

    do P = 2, N-2, w
       write(out,2) P, x(P), alfm(P)
    end do

    do P = N-1, N
       write(out,2) P, x(P), alfm(P)
    end do

    2 format(i8,2(1pe23.14))	 

  end subroutine escreve_alfa

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

  subroutine escreve_campo

    write(out,1)
    1 format(/, 1x, '*** SOLUÇÕES DE T ***',//,  &
      2x,'volume', t12,'x', t35,'analítico', t58,'numérico', t81,'erro',/)

    do P = 0, 1
       erro = T_exato(P) - T(P)
       write(out,2) P, x(P), T_exato(P), T(P), erro
    end do

    do P = 2, N-1, w
       erro = T_exato(P) - T(P)
       write(out,2) P, x(P), T_exato(P), T(P), erro
    end do

    do P = N, N+1
       erro = T_exato(P) - T(P)
       write(out,2) P, x(P), T_exato(P), T(P), erro
    end do

    2 format(i8,4(1pe23.14))	 

  end subroutine escreve_campo

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

  subroutine graficos

    ! escreve dados para gráficos de T e de erro

    open(out2,file='Peclet_1Dp_2p2_T.dat')

    write(out2,1)
    1 format('# *** SOLUÇÕES DE T ***', /,  &
      '# volume', t12,'x', t35,'analítico', t58,'numérico', t81,'erro')

    do P = 0, 1
       erro = T_exato(P) - T(P)
       write(out2,2) P, x(P), T_exato(P), T(P), erro
    end do

    do P = 2, N-1, w
       erro = T_exato(P) - T(P)
       write(out2,2) P, x(P), T_exato(P), T(P), erro
    end do

    do P = N, N+1
       erro = T_exato(P) - T(P)
       write(out2,2) P, x(P), T_exato(P), T(P), erro
    end do

    2 format(i8,4(1pe23.14))

    close(out2)

    ! gráfico de T

    open(out2,file='Peclet_1Dp_2p2_T.gnu')

    do k = 1, 8
       read(out2,*)
    end do

    write(out2,*) "set title '", trim(adjustl(titulo)), "'"
    write(out2,*) "replot"

    close(out2)

    dos = system('wgnuplot Peclet_1Dp_2p2_T.gnu')

    ! gráfico de erro

    open(out2,file='Peclet_1Dp_2p2_E.gnu')

    do k = 1, 6
       read(out2,*)
    end do

    write(out2,*) "set title '", trim(adjustl(titulo)), "'"
    write(out2,*) "replot"

    close(out2)

    dos = system('wgnuplot Peclet_1Dp_2p2_E.gnu')

  end subroutine graficos

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

  subroutine escreve_variaveis_interesse

    write(out,1)
    1 format(/, 1x, '*** VARIÁVEIS DE INTERESSE ***')
 
    erro = Tce - Tc

    write(out,2) Tce, h, Tc, trim(adjustl(titulo)), erro
    2 format(/, 23x, 1pe42.32,  " =     T(1/2) (analítico)", &
             /,    2(1pe42.32), " = h e T(1/2) (numérico) *** ", a, &
             /, 23x, 1pe42.32,  " =     erro = analítico - numérico")
 
    erro = T_media_exato - T_media

    write(out,3) T_media_exato, h, T_media, trim(adjustl(titulo)), erro
    3 format(/, 23x, 1pe42.32,  " =     T_média (analítico)", &
             /,    2(1pe42.32), " = h e T_média (numérico) *** ", a, &
             /, 23x, 1pe42.32,  " =     erro = analítico - numérico")
 
    erro = inclinacao_exato - inclinacao

    write(out,4) inclinacao_exato, h, inclinacao, trim(adjustl(titulo)), erro
    4 format(/, 23x, 1pe42.32,  " =     inclinacao(1) (analítico)", &
             /,    2(1pe42.32), " = h e inclinacao(1) (numérico) *** ", a, &
             /, 23x, 1pe42.32,  " =     erro = analítico - numérico")

    write(out,5) 0.0q0, h, Em, trim(adjustl(titulo)), -Em
    5 format(/, 23x, 1pe42.32,  " =     erro médio (analítico)", &
             /,    2(1pe42.32), " = h e erro médio (numérico) *** ", a, &
             /, 23x, 1pe42.32,  " =     erro = analítico - numérico")

    write(out,6) tcpu
    6 format(/, f14.3, ' = tempo de CPU (segundos)')

    open(77,file=trim(adjustl(caso))//'.Richardson_3p0')

    write(77,78) h, Tc, T_media, inclinacao, Em

    78 format(  2x, 1pe40.32, 2x, 'h                   (adim.)',/, &
              ' 1', 1pe40.32, 2x, 'T(1/2)              (adim.)',/, &
              ' 2', 1pe40.32, 2x, 'média de T          (adim.)',/, &
              ' 3', 1pe40.32, 2x, 'inclinação em x=1   (adim.)',/, &
              ' 4', 1pe40.32, 2x, 'erro numérico médio (adim.)')

    note_caso = 'notepad '// trim(adjustl(caso)) // '.Richardson_3p0'
    dos = system(note_caso) ! lista arquivo das variáveis de interesse

  end subroutine escreve_variaveis_interesse

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

end module resultados
