module dados

! objetivo: ler e escrever os dados do programa, e gerar a malha

use variaveis

implicit none

contains

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

  subroutine le_dados

    dos = system('notepad Peclet_1Dp_2p2.in') ! lista dados

    open(in,file='Peclet_1Dp_2p2.in')

    read(in,*) caso
    read(in,*) esquema
    read(in,*) fonte
    read(in,*) N
    read(in,*) Pe
    read(in,*) local
    read(in,*) alf
    read(in,*) itmax
    read(in,*) ver_grafico
    read(in,*) ver_coeficientes
    read(in,*) ver_campo
    read(in,*) w
    read(in,*) titulo

    close(in)

    ! alocação de memória
    allocate ( T(0:N+1), T_exato(0:N+1) )
    allocate ( x(0:N+1) )
    allocate ( aw(0:N+1), ap(0:N+1), ae(0:N+1), bp(0:N+1) )
    if ( esquema == 7 .or. esquema == 8 ) allocate ( alfm(0:N) )

    h = 1.0q0 / N

    x(0) = 0.0q0
    do P = 1, N
       x(P) = (P - 0.5q0) * h
    end do
    x(N+1) = 1.0q0

    alfa = ((Pe*h)**2) / (10.0q0 + 2.0q0*((Pe*h)**2))

    beta = (1.0q0 + 0.005q0*((Pe*h)**2)) / (1.0q0 + 0.05q0*((Pe*h)**2))

    pow  = qmax1 ( 0.0q0, ((1.0q0 - Pe*h/10.0q0)**5) )

  end subroutine le_dados

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

  subroutine escreve_dados

    write(out,1) trim(adjustl(titulo)), caso
    1 format(/, &
        7x, 'título = ', a,//, &
        1x, '*** DADOS ***', //, &
       23x, 'caso = ', a50,/)

    select case ( esquema )
        case ( 1 )
           write(out,11) esquema
           11 format( &
              i8, 1x, '.................. = esquema: UDS-1 com CDS-2')
        case ( 2 )
           write(out,12) esquema
           12 format( &
              i8, 1x, '.................. = esquema: CDS-2 com CDS-2')
        case ( 3 )
           write(out,13) esquema
           13 format( &
              i8, 1x, '.................. = esquema: WUDS')
        case ( 4 )
           write(out,14) esquema
           14 format( &
              i8, 1x, '.................. = esquema: PLDS')
        case ( 5 )
           write(out,15) esquema
           15 format( &
              i8, 1x, '.................. = esquema: QUICK com CDS-2/UDS-2/DDS-2')
        case ( 6 )
           write(out,16) esquema
           16 format( &
              i8, 1x, '.................. = esquema: UDS-2 com CDS-2')
        case ( 7 )
           write(out,17) esquema
           17 format( &
              i8, 1x, '.................. = esquema: ADS com CDS-2')
        case ( 8 )
           write(out,18) esquema
           18 format( &
              i8, 1x, '.................. = esquema: TVD com CDS-2')
        case ( 9 )
           write(out,19) esquema
           19 format( &
              i8, 1x, '.................. = esquema: Alfa com CDS-2')
        case ( 10 )
           write(out,20) esquema
           20 format( &
              i8, 1x, '.................. = esquema: QUICK com CDS-4/UDS-2/DDS-2')
        case ( 11 )
           write(out,21) esquema
           21 format( &
              i8, 1x, '.................. = esquema: QUICK com CDS-4/UDS-3/DDS-3')
    end select

    write(out,9) fonte, N, local, w, Pe, Pe*h, h
    9 format( &
        i8, 1x, '.................. = fonte',/, &
        i8, 1x, '.................. = número de volumes de controle reais', &
                ' da malha (N)', /, &
        i8, 1x, '.................. = tipo de T(1/2):', & 
                ' 1=valor nodal; 2=média aritmética', /, &
        i8, 1x, '.................. = freqüência de impressão dos campos',/,&
       1pe27.14, ' = número de Peclet (Pe)',/,&
       1pe27.14, ' = número de Peclet de malha (Ph)',/,&
       1pe27.14, ' = comprimento de cada elemento da malha (h)')

    if ( esquema == 3 ) write(out,2) alfa, beta
       2 format( &
       1pe27.14, ' = coeficiente advectivo do esquema WUDS (alfa)',/,&
       1pe27.14, ' = coeficiente difusivo do esquema WUDS (beta)')

    if ( esquema == 4 ) write(out,3) pow
       3 format( &
       1pe27.14, ' = coeficiente do esquema PLDS (pow)')

    if ( esquema == 9 ) write(out,4) alf
       4 format( &
       1pe27.14, ' = coeficiente advectivo do esquema Alfa (Alf)')

    select case ( esquema )
        case ( 5, 6, 7, 8, 10, 11 )
           write(out,5) itmax
           5 format( &
           i8, 1x, '.................. = número máximo de iterações')
    end select

  end subroutine escreve_dados

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

end module dados
