module resultados

! objetivo: mostrar listagem e gráfico dos resultados

use variaveis

implicit none

contains

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

  subroutine visualizacao

    if ( ver_coeficientes == 1 ) call escreve_coeficientes

    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 ***',//,  &
       t7,'nó',t12,'x',t35,'oeste',t58,'central',t81,'leste',t104,'fonte',/)

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

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

  end subroutine escreve_coeficientes

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

  subroutine escreve_campo

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

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

    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='Poisson_1Dp_3p1_T.dat')

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

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

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

    close(out2)

    ! gráfico de T

    open(out2,file='Poisson_1Dp_3p1_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 Poisson_1Dp_3p1_T.gnu')

    ! gráfico de erro

    open(out2,file='Poisson_1Dp_3p1_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 Poisson_1Dp_3p1_E.gnu')

  end subroutine graficos

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

  subroutine escreve_variaveis_interesse

    write(out,1)
    1 format(/, 1x, '*** VARIÁVEIS DE INTERESSE ***')

    k = len(trim(adjustl(titulo)))
 
    erro = T_exato(N/2) - T(N/2)

    write(out,2) T_exato(N/2), h, T(N/2), trim(adjustl(titulo)), erro
    2 format(/, 23x, 1pe23.14,  " =     T(1/2) (analítico)", &
             /,    2(1pe23.14), " = h e T(1/2) (numérico) *** ", a<k>, &
             /, 23x, 1pe23.14,  " =     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, 1pe23.14,  " =     T_média (analítico)", &
             /,    2(1pe23.14), " = h e T_média (numérico) *** ", a<k>, &
             /, 23x, 1pe23.14,  " =     erro = analítico - numérico")
 
    erro = inclinacao_exato - inclinacao

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

    write(out,5) cpu
    5 format(/, f14.3, ' = tempo de processamento (segundos)')

  end subroutine escreve_variaveis_interesse

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

end module resultados
