 MODULE phy
!=========================== DOCUMENTATION ============================= 
!DOCDEBm*    PHY/phy  *
!
!    NOM
! phy
!    DESCRIPTION  
!*
! Interface des routines du Module PHYsique
!
! Interface of routines from PHYsic Module 
!*
!    SOURCE
! Ce logiciel est regi par la licence [CeCILL-B]
! This software is governed by the [CeCILL-B] license
!=========================== DEBUT DES DECLARATIONS ==================== 
!.1-----  Implicit, Use
  use phy_typ
  IMPLICIT NONE
!.2-----  Declaration
! tableaux de variables utilisé pour les conditions aux limites et les conditions initiales constantes
  type(state),dimension(phy_nb_cl) :: phy_state
! type du flux numérique
!  =0   --> rusanov
! =1 --> godunov
! integer                          :: phy_typflux = 0
! variable de debuguage des cas test
! istep=0/1   --> cas test de la rampe inactif ou actif
! (sert à appliquer des profils de vitesse)
 ! integer                          :: phy_istep=0
 !=========================== DEBUT DU CODE EXECUTABLE ==================

!~ 
!~!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE bal2prim(w)
        use phy_typ
        type(state),intent(inout) :: w 
      END SUBROUTINE Bal2Prim
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE critphy(w,c)
        use phy_typ
        type(state), intent(inout) :: w 
        real(kind=kind(0.d0)), intent(out) :: c
      END SUBROUTINE critphy
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE entropie(w,e)
        use phy_typ
        type(state), intent(inout) :: w 
        real(kind=kind(0.d0)), intent(out) :: e
      END SUBROUTINE entropie
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
    interface
        SUBROUTINE  fct_bathy(x,y,z,zb,zbx,zby,cf)
            use phy_typ
            real(kind=kind(0.d0)), intent(in)                :: x,y,z
            real(kind=kind(0.d0)), intent(out)               :: zb,cf,zbx,zby
        END SUBROUTINE fct_bathy
    end interface
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
    interface
        SUBROUTINE  fct_cond(vi,vp,fctnum,x,y,z,vn)
            use phy_typ
           integer, intent(in)              :: fctnum
           real(kind=kind(0.d0)),intent(in) :: x,y,z
           type(vect_nvar), intent(in)      :: vi
           type(vect_nvar), intent(out)     :: vp
           type(vect_3),intent(in)          :: vn
        END SUBROUTINE fct_cond
    end interface
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
    interface
        SUBROUTINE  fct_iniw(x,y,z,vprim,ifct)
            use phy_typ
            real(kind=kind(0.d0)), intent(in)    :: x,y,z
            type(vect_nvar) , intent(out)        :: vprim
            integer                              :: ifct
        END SUBROUTINE fct_iniw
    end interface
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
    interface
        SUBROUTINE fct_mvsol(v1,v2,v3,o1,o2,o3,num)
          use phy_typ
          real(kind=kind(0.d0)) :: v1,v2,v3,o1,o2,o3
          integer               :: num
        END SUBROUTINE fct_mvsol
    end interface
!----- Fin Interface --------------------------------------------------


!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE fluxnum(wL,wR,vn,flux,itypflux)
        use phy_typ
        integer                    :: itypflux
        type(state), intent(in)    :: wL , wR
        type(vect_3),intent(in)    :: vn
        type(vect_nvar),intent(out):: flux
      END SUBROUTINE fluxnum
  END INTERFACE
!----- Fin Interface --------------------------------------------------


!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE fluxnumnoncons(wL,wR,vn,fluxnc,itypflux)
        use phy_typ
        integer                    :: itypflux
        type(state), intent(in) :: wL , wR
        type(vect_3),intent(in):: vn
        type(vect_nvar),intent(out):: fluxnc
      END SUBROUTINE fluxnumnoncons
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE prim2bal(w)
        use phy_typ
        type(state),intent(inout) :: w 
      END SUBROUTINE Prim2Bal
  END INTERFACE
!~!----- Fin Interface --------------------------------------------------


!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE riemisot(rg,ug,phig,alfg,rd,ud,phid,alfd,xi,r,u,p,phi,alf)
        real(kind=kind(0.d0)),intent(in):: rg,ug,phig,alfg,rd,ud,phid,alfd,xi
        real(kind=kind(0.d0)),intent(out):: r,u,p,phi,alf
      END SUBROUTINE riemisot
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE sources(w,s,iordre)
        use phy_typ
        type(state), intent(in) :: w 
        type(vect_nvar),intent(out):: s
        integer,intent(in) :: iordre
      END SUBROUTINE sources
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
    interface
        subroutine svriemann(hg,ug,hd,ud,xi,h,u)
          real(kind=kind(0.d0)),intent(in):: hg,ug,hd,ud,xi
          real(kind=kind(0.d0)),intent(out):: h,u
        end subroutine svriemann
    end interface
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE VelCFL(w,vloc,h)
        use phy_typ
        type(state),intent(in) :: w 
        real(kind=kind(0.d0)),intent(in) :: h
        real(kind=kind(0.d0)),intent(out) :: vloc
      END SUBROUTINE VelCFL
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE vitson(w,cson)
        use phy_typ
        type(state),intent(in) :: w
        real(kind=kind(0.d0)),intent(out) :: cson
      END SUBROUTINE Vitson
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!----- Debut Interface ------------------------------------------------
  INTERFACE
      SUBROUTINE Wext(win,wout,vn,ityp,x,y,z,xm,ym,zm)
        use phy_typ
        integer,intent(in) ::  ityp
        type(state),intent(in) :: win
        type(vect_3),intent(in) :: vn
        real(kind=kind(0.d0)),optional,intent(in) :: x,y,z
        real(kind=kind(0.d0)),optional,intent(in) :: xm,ym,zm
        type(state),intent(out) :: wout
      END SUBROUTINE Wext
  END INTERFACE
!----- Fin Interface --------------------------------------------------

!===========================   FIN DU MODULE   =========================
 END MODULE phy
!DOCFIN