program Peclet_1Dp_2p2

! Advecção-difusão unidimensional permanente de um escalar para
! fluido incompressível e velocidade constante com ou sem termo fonte

! Versão original 1.0 (21 Jan 04)
! Versão          2.0 (17 Nov 04)
! Versão          2.1 ( 9 Ago 08)
! Versão atual    2.2 ( 8 Set 08)
! Última alteração =    9 Set 08

! MODELO MATEMÁTICO (equação diferencial):
!
!   Pe.dT/dx = d2T/dx2 + S
!
!   Pe = número de Peclet
!   T  = incógnita
!   x  = coordenada espacial
!   S  = termo fonte
!
!   Condições de contorno de Dirichlet: T(0)=0 e T(1)=1
!   Todas as variáveis são adimensionais
!   Variáveis de interesse:
!     Temperatura no meio do domínio: T(1/2)
!     Média da temperatura (T_media)
!     Derivada de primeira ordem da temperatura em X=1 (Inclinacao)
!     Média da norma l1 do erro numérico (erro médio)
!   É necessário que Pe seja diferente de zero pois, para
!      Pe muito próximo de zero, as soluções analíticas podem ser errôneas

! MODELO NUMÉRICO (resumo):
!
!   Método numérico: volumes finitos
!   Malha uniforme unidimensional
!   Solver: TDMA
!   Precisão quádrupla
!   Linguagem Fortran
!   Aplicativo usado: Fortran Intel 9.1
!   Tipo de projeto: Console Application
!   Tipos de aproximações numéricas:
!     Termo advectivo: UDS-1, CDS-2, WUDS, PLDS, QUICK, UDS-2, ADS, TVD, Alfa
!     Termo difusivo:  CDS-2 para todos os esquemas advectivos, exceto WUDS e PLDS;
!                      com o QUICK também usa-se CDS-4.
!     Termo difusivo na C.C. do QUICK: para CDS-2 e CDS-4, UDS-2 e DDS-2; 
!           para CDS-4, também com UDS-3, UCDS-3, DDS-3 e DCDS-3
!     T_media: regra do retângulo
!     Inclinacao: UDS-2
!     T(1/2): valor nodal para N ímpar; média aritmética para N par
!   O processo é iterativo para os esquemas QUICK, UDS-2, ADS e TVD
!   A solução é direta para os esquemas UDS-1, CDS-2, WUDS, PLDS e Alfa. 
!   Aplicação das condições de contorno com volumes fictícios (P=0 e P=N+1)
!   Os coeficientes e fontes de P=0 e P=N+1 não são usados no esquema QUICK
!   N = número de volumes de controle reais
!   N >= 1 para UDS-1, CDS-2, WUDS, PLDS, ADS, TVD, Alfa
!   N >= 3 para UDS-2, Quick/CDS-2/UDS-2/DDS-2 e Quick/CDS-4/UDS-2/DDS-2
!   N >= 5 para Quick/CDS-4/UDS-3/DDS-3
!   Soluções analíticas disponíveis para 5 tipos de termos fontes (S)
!   Tipo do sistema de equação: ap(P)*T(P) = aw(P)*T(P-1) + ae(P)*T(P+1) + bp(P)

! ARQUIVOS envolvidos no programa (extensão a Peclet_1Dp_2p2_):
!   variaveis.f90    = define as variáveis do programa
!   solver.f90       = resolve o sistema de equações com o método TDMA
!   dados.f90        = lê e escreve os dados do programa, e gera a malha
!   coeficientes.f90 = calcula os coeficientes e termo fonte
!   calculos.f90     = calcula as soluções analítica e numérica
!   resultados.f90   = mostra listagem e gráfico dos resultados
!   main.f90         = programa principal
!   T.dat            = dados para os gráficos
!   T.gnu            = comandos para Wgnuplot, gráfico de T
!   E.gnu            = comandos para Wgnuplot, gráfico de erro
!
! Outros arquivos
!   Peclet_1Dp_2p2.in          = dados do programa
!   "caso".txt                 = saída principal do programa
!   "caso".itn                 = variáveis de interesse ao longo das iterações
!   "caso".Richardson_3p0      = variáveis de interesse finais
!   leia-me_Peclet_1Dp_2p2.txt = dados básicos sobre o programa
!   Notepad.exe                = editor de arquivos-texto
!   Wgnuplot.exe               = programa gerador de gráfico

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

use dados
use calculos
use resultados

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

implicit none

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

  call le_dados

  open(out,file=trim(adjustl(caso))//'.txt')

  call escreve_dados

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

  call solucao

  call visualizacao

  close (out)

  note_caso = 'notepad '// trim(adjustl(caso)) // '.txt'

  dos = system(note_caso) ! lista arquivo de resultados

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

end
