module resultados

! objetivo: calcular solução numérica e
!           apresentar gráficos dos resultados

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

use coeficientes
use solvers_1D

implicit none

contains

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

  subroutine solucao_numerica

    ! cálculo dos coeficientes e termos fontes
	call coeficientes_e_fontes

    ! escrita dos coeficientes e termos fontes 
	call lista_coeficientes

    tcpu = timef() ! zera cronômetro

    ! solução do sistema de equações

    select case ( solver )

       case ( 1 ) ! Eliminação de Gauss

          call EG (N,aP,aw,ae,bP,T)

       case ( 2 ) ! Gauss-Seidel

          call GS (N,iteracao,Tol,aP,aw,ae,bP,T)

       case ( 3 ) ! TDMA

          call tdma (N,aP,aw,ae,bP,T)

    end select

    tcpu = timef()

    ! escrita da variável primária e sua visualização
    call escreve_T

    write(10,1) tcpu
    1 format(/, f14.3, ' = tempo de processamento (segundos)')

  end subroutine solucao_numerica

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

  subroutine escreve_T

    real*8  :: T_exato ! auxiliar
    integer :: j       ! auxiliar

    ! abertura de arquivo para gravar resultados de T (analítico e numérico)
    open(7,file='T.dat')

    write(10,1)
    1 format(/,t4,'X',t28,'T (analítico)',t52,'T (numérico)',t76,'erro',/)

    do i = 1, N

       select case ( matriz )
          case ( 1 ) ! fonte nulo
		     T_exato = (i-1.0d0) / (N-1)
          case ( 2 ) ! fonte não-nulo
		     T_exato = ( (i-1.0d0) / (N-1) ) ** 2
       end select

       if ( i==1 .or. i==n .or. mod(i,w)==0 ) then
          write( 7,2) X(i), T_exato, T(i), T_exato - T(i)
          write(10,2) X(i), T_exato, T(i), T_exato - T(i)
          2 format(4(1pe24.15))
       end if

    end do

    close(7)

    ! adapta arquivo de comandos para fazer gráfico
    open(7,file='comandos20a.gnu')
      do j = 1, 8
         read(7,*)
      end do
      write(7,3) head
      3 format("set title '",a62,/,"replot")
    close(7)

    ! mostra o gráfico de T
    ver = system('wgnuplot comandos20a.gnu')

  end subroutine escreve_T

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

end module resultados
