C FRBM1     SOURCE    CHAT      05/01/13    00:08:12     5004
      SUBROUTINE FRBM1(VCO,RO,UN,UT,P,GAM,AMAT,RLAMBD)
C
C PROJET            :  CASTEM 2000
C
C NOM               :  FRBM1
C
C DESCRIPTION       :  Formulation Volumes Finis  pour les Equations
C                      d'Euler Monoespece relatives à un
C                      gaz parfait.
C
C                      Calcul des valeurs propres de la matrice de
C                      precondit. de Turkel et de sa matrice inverse
C
C LANGUAGE          :  FORTRAN 77
C
C AUTEUR            :  A. BECCANTINI SFME/LTMF
C
C************************************************************************
C
C APPELES           :  Subroutine appellée par FRUSBM, KONJR1
C
C************************************************************************
C
C**** Entrées:
C
C     GAM             =  "gamma" du gaz (gauche et droite)
C
C     RO              =  densités
C
C     P               =  pression
C
C     UN              =  vitesses normales
C
C     UT              =  vitesses tangentielles
C
C     VCO             =  vitesse de cut-off
C
C**** Sorties:
C
C     AMAT            = inverse de la matrice de prec de Turkel
C
C     RLAMBD          = Valeurs propres de la matrice de precond.
C
C************************************************************************
C
C HISTORIQUE (Anomalies et modifications éventuelles)
C
C HISTORIQUE :  Créé le 02.05.03
C
C************************************************************************
C
C N.B.: Toutes les variables sont DECLAREES
C
C
      IMPLICIT INTEGER(I-N)
      REAL*8  GAM,RO,P,UN,UT,VCO,AMAT(4,4),RLAMBD
     &     ,GAM1,CSON2,Q2,H,M2,COEF,BET2
C
c
c
      GAM1=GAM-1.0D0
      CSON2=GAM*P/RO
      Q2=(UN*UN+UT*UT)
      H=(0.5D0*Q2)+(CSON2/GAM1)
      M2=Q2/CSON2
C
      COEF=(VCO*VCO)/CSON2
      IF(COEF.GT. 1.0D0) COEF=1.0D0
      IF(M2 .GE. 1)THEN
         BET2=1.0D0
      ELSEIF(M2 .LE. COEF)THEN
         BET2=COEF
      ELSE
         BET2=M2
      ENDIF

      COEF=(1.0D0/BET2 - 1.0D0)*GAM1/CSON2
C
      AMAT(1,1)=1.0D0+(0.5D0*COEF*Q2)
      AMAT(1,2)=-1.0D0*COEF*UN
      AMAT(1,3)=-1.0D0*COEF*UT
      AMAT(1,4)=COEF
C
      AMAT(2,1)=0.5D0*COEF*Q2*UN
        AMAT(2,2)=1.0D0-(COEF*UN**2)
        AMAT(2,3)=-1.0D0*COEF*UN*UT
      AMAT(2,4)=COEF*UN
C
      AMAT(3,1)=0.5D0*COEF*Q2*UT
      AMAT(3,2)=-COEF*UN*UT
      AMAT(3,3)=1.0D0-COEF*UT**2
      AMAT(3,4)=COEF*UT
C
      AMAT(4,1)=0.5D0*COEF*Q2*H
      AMAT(4,2)=-1.0D0*COEF*UN*H
      AMAT(4,3)=-1.0D0*COEF*UT*H
      AMAT(4,4)=1.0D0+COEF*H
C
      RLAMBD=((1 - BET2)*UN)**2
      RLAMBD=RLAMBD + (4*BET2*CSON2)
      RLAMBD=RLAMBD**0.5D0
      RLAMBD=RLAMBD+((1.0D0+BET2)*ABS(UN))
      RLAMBD=0.5D0*RLAMBD
C
C**** Test: const coeff. (for tensorial reaons
C     the sign must be keep as in the former case)
C     SIGN(A,B) = A * SIGN(B)
C
C      AMAT(1,1)=SIGN(11.7D0,AMAT(1,1))
C      AMAT(2,1)=SIGN(1.7D1,AMAT(2,1))
C      AMAT(3,1)=SIGN(2.7D0,AMAT(3,1))
C      AMAT(4,1)=SIGN(3.7D0,AMAT(4,1))
CC
C      AMAT(1,2)=SIGN(11.17D0,AMAT(1,2))
C      AMAT(2,2)=SIGN(2.17D0,AMAT(2,2))
C      AMAT(3,2)=SIGN(101.7D0,AMAT(3,2))
C      AMAT(4,2)=SIGN(11.97D0,AMAT(4,2))
CC
C      AMAT(1,3)=SIGN(1.79D0,AMAT(1,3))
C      AMAT(2,3)=SIGN(2.79D0,AMAT(2,3))
C      AMAT(3,3)=SIGN(3.79D0,AMAT(3,3))
C      AMAT(4,3)=SIGN(4.87D0,AMAT(4,3))
CC
C      AMAT(1,4)=SIGN(91.7D0,AMAT(1,4))
C      AMAT(2,4)=SIGN(71.7D0,AMAT(2,4))
C      AMAT(3,4)=SIGN(81.7D0,AMAT(3,4))
C      AMAT(4,4)=SIGN(51.7D0,AMAT(4,4))
CC
C      RLAMBD=SIGN(1.171D0,RLAMBD)
C
C**** Fin test
C
      RETURN
      END










