module congelado

! objetivo: processar o algoritmo principal do código.

! Versão atual:  28 Out 06

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

use usuario
use solvers
use Gibbs_1p4

implicit none

contains

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

  subroutine NUM_CONG_cp_gama_congelados ( nxy, T, Yi, cp, gcp )

    integer,intent(in) :: nxy ! número de volumes de controle com fictícios (total)

    real*8,dimension(:),  intent(in)    :: T     ! temperatura (K)
    real*8,dimension(:,:),intent(in)    :: Yi    ! fração mássica (adim.)

    real*8,dimension(:),  intent(inout) :: cp    ! calor específico à pressão constante (J/kg.K)
    real*8,dimension(:),  intent(inout) :: gcp  ! razão de calores específicos (adimensional)

    do i = 1, nxy 

	    call GIBBS_EQUILIBRIO_dados_recebe ( 1, 0, modq, itimax, itemax,  &
											tol_ej, tol_n, T(i), po/101325.0d0, OF )
	    call GIBBS_MACH1D_recebe1 ( Yi(i,:) )

	    call GIBBS_cp_calculo

	    call GIBBS_gama_calculo

	    call GIBBS_MACH1D_envia1 ( cp(i), gcp(i) )

    end do
    
  end subroutine NUM_CONG_cp_gama_congelados

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

  subroutine NUM_CONG_Mach ( Rgp, gcp, u, T, M )

    real*8,dimension(:),intent(in)  :: Rgp  ! constante do gás (J/kg.K)
    real*8,dimension(:),intent(in)  :: gcp  ! razão de calores específicos (adimensional)
    real*8,dimension(:),intent(in)  :: u    ! velocidade (m/s)
    real*8,dimension(:),intent(in)  :: T    ! temperatura (K)

    real*8,dimension(:),intent(out) :: M    ! número de Mach (adimensional)

    M = u / dsqrt ( gcp * Rgp * T )
  
  end subroutine NUM_CONG_Mach

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

  subroutine NUM_CONG_mi_k_congelados ( nxy, T, Yi, vlp, kp )

    integer,intent(in) :: nxy ! número de volumes de controle com dois fictícios

    real*8,dimension(:),intent(in)    :: T   ! temperatura (K)
    
    real*8,dimension(:,:),intent(in)  :: Yi  ! fração mássica (adim.)

    real*8,dimension(:),intent(inout) :: vlp ! viscosidade absoluta (Pa.s)
    real*8,dimension(:),intent(inout) :: kp  ! condutividade térmica (W/m.K)

    if ( tipo_vl == 2 .or. tipo_k  == 2 ) then
          
       do i = 1, nxy

          call GIBBS_MACH1D_recebe2 ( T(i) )

          call GIBBS_CONGELADO_calculos2

          call GIBBS_CONGELADO_envia2 ( vlp(i), kp(i) )
          

       end do

    end if

    if ( tipo_vl == 1 ) vlp = visc_cte

    if ( tipo_k  == 1 ) kp  = k_cte
   
  end subroutine NUM_CONG_mi_k_congelados

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

  subroutine NUM_CONG_pressao_entrada ( gama, Rg, p_cam, u_in, T_in, p_in )

    real*8,intent(in)  :: gama     ! razão de calores específicos (adimensional)
    real*8,intent(in)  :: Rg       ! constante do gás (J/kg.K)
    real*8,intent(in)  :: p_cam    ! pressão na câmara de combustão (Pa)
    real*8,intent(in)  :: u_in     ! velocidade na entrada da tubeira (m/s)
    real*8,intent(in)  :: T_in     ! temperatura na entrada da tubeira (K)

    real*8,intent(out) :: p_in  ! pressão na entrada da tubeira (Pa)

    real*8 :: k    ! auxiliar
    real*8 :: M_in ! número de Mach na entrada

    M_in = u_in / dsqrt ( gama * Rg * T_in )

    k = 1.0d0 + 0.5d0 * ( gama - 1.0d0 ) * ( M_in ** 2 )

    p_in = p_cam / ( k ** ( gama / ( gama - 1.0d0 ) ) )

  end subroutine NUM_CONG_pressao_entrada

!-------------------------------------------------
end module congelado