Download rachus.eso

Back to the list

   1 : C RACHUS    SOURCE    CHAT      05/01/13    02:44:18     5004           
   2 :       SUBROUTINE RACHUS(NITMAX,ZERO,
   3 :      &                  GAMMAG,COEFFG,AG,UTILG,PG,
   4 :      &                  GAMMAD,COEFFD,AD,UTILD,PD,
   5 :      &                  USTAR,PSTAR,LOGNC,MESERR,LOGAN)
   6 : C
   7 : C************************************************************************
   8 : C
   9 : C PROJET            :  CASTEM 2000
  10 : C
  11 : C NOM               :  RACHUS
  12 : C
  13 : C DESCRIPTION       :  voir FLUHUS
  14 : C
  15 : C                      Calcul de l'intersection des invariants de 
  16 : C                      Riemann
  17 : C
  18 : C LANGUAGE          :  FORTRAN 77
  19 : C      
  20 : C AUTEUR            :  A. BECCANTINI DRN/DMT/SEMT/TTMF  
  21 : C
  22 : C************************************************************************
  23 : C
  24 : C APPELES           :  aucun
  25 : C
  26 : C************************************************************************
  27 : C
  28 : C**** Entrées:
  29 : C
  30 : C     NITMAX          =  nombre maximum d'iterations in Newton-Rapson
  31 : C
  32 : C     ZERO            =  tolérance d'egalite pour REAL*8
  33 : C
  34 : C     GAMMAG, GAMMAD  =  les "gamma" du gaz (gauche et droite)
  35 : C
  36 : C     COEFFG, COEFFD  =  2/(GAMMA-1)
  37 : C
  38 : C     AG, AD          =  vitesses du son
  39 : C
  40 : C     UTILG           =  UNG + COEFFG * AG
  41 : C
  42 : C     UTILD           =  UND - COEFFD * AD
  43 : C
  44 : C                        (UNG et UND sont les vitesses normales
  45 : C
  46 : C     PG, PD          =  les pressions
  47 : C
  48 : C
  49 : C**** Sorties:
  50 : C
  51 : C     USTAR           =  vitesse sur la discontinuité de contact
  52 : C
  53 : C     PSTAR           =  pression sur la discontinuité de contact
  54 : C
  55 : C     LOGNC, MESSER   =  parametres qui segnalent des eventuels problems
  56 : C                        de convergence
  57 : C
  58 : C     LOGAN           =  .TRUE. -> anomalie detectée      
  59 : C      
  60 : C************************************************************************
  61 : C
  62 : C HISTORIQUE (Anomalies et modifications éventuelles)
  63 : C
  64 : C HISTORIQUE :  Créé le 6.1.98 
  65 : C
  66 : C************************************************************************
  67 : C
  68 : C N.B.: Toutes les variables sont DECLAREES
  69 : C                          
  70 : C
  71 :       IMPLICIT INTEGER(I-N)
  72 :       INTEGER NITMAX,N0
  73 :       REAL*8  GAMMAG,COEFFG,AG,UTILG,PG,GAMMAD,COEFFD,AD,UTILD,PD
  74 :      &        ,DUTILD,ZERO,USTAR,PSTARG,PSTARD,PSTAR
  75 :      &        ,CELL,CGD,Z0,Z,COCELL,G1,DG1,DELTAZ,ZERO0
  76 :       CHARACTER*(40) MESERR
  77 :       LOGICAL LOGNC, LOGERR, LOGZER, LOGAN
  78 : C
  79 :       DUTILD = UTILG - UTILD
  80 : C
  81 : C**** Non convergence de la methode de NEWTON-RAPSON
  82 : C
  83 :       LOGNC  = .FALSE.
  84 : C
  85 :       CELL=GAMMAD*COEFFD-GAMMAG*COEFFG      
  86 :       CGD=DUTILD**CELL
  87 :       CELL=(AG*COEFFG)**(GAMMAG*COEFFG)
  88 :       CELL=CELL/((AD*COEFFD)**(GAMMAD*COEFFD))
  89 :       CGD=CGD*CELL*PD/PG
  90 : C
  91 : C**** Solution du probleme g1(z)=0
  92 : C
  93 : C     Z0 = valeur de tentative
  94 : C
  95 : C     N.B.: GAMMAG = GAMMAD -> Z0 = Z = solution du problème
  96 : C
  97 :       Z0=1.0D0/(1.0D0+CGD**(1.0D0/COEFFG/GAMMAG))       
  98 :       Z=1.0D0/(1.0D0+CGD**(1.0D0/COEFFD/GAMMAD))
  99 :       IF(Z0 .LT. 0.5D0) Z0=Z
 100 : C
 101 : C**** Trois situations possibles, i.e. gammag < = > gammad,
 102 : C     trois formulations differentes du probleme
 103 : C
 104 : C     G1  = g1(z)          
 105 : C     DG1 = dg1(z)/dz
 106 : C     N.B.: G1, DG1, Z sont variables adimensionales
 107 : C
 108 :       LOGZER = (ABS(GAMMAD-GAMMAG)/GAMMAG) .GT. ZERO
 109 :       IF(LOGZER)THEN
 110 :          IF(GAMMAG .GT. GAMMAD)THEN
 111 : C
 112 : C********** GAMMAG > GAMMAD
 113 : C
 114 :             CELL=CGD**(1.0D0/COEFFG/GAMMAG)        
 115 :             COCELL=GAMMAD*COEFFD/GAMMAG/COEFFG
 116 :             LOGERR=.TRUE.
 117 :             N0=0
 118 :             DO WHILE(LOGERR)
 119 :                N0=N0+1
 120 :                G1=CELL*(Z0**COCELL)-1.0D0+Z0
 121 :                DG1=CELL*COCELL*(Z0**(COCELL-1.0D0))+1.0D0
 122 :                DELTAZ=-G1/DG1
 123 :                Z0=Z0+DELTAZ
 124 :                LOGERR=(ABS(G1) .GT. ZERO) .OR. 
 125 :      &             (ABS(DELTAZ) .GT. ZERO)
 126 :                IF(N0 .GT. NITMAX) THEN
 127 :                   LOGNC = .TRUE.
 128 :                   MESERR(1:27) = 'HUS, SUBROUTINE rachus.eso.'
 129 :                   LOGERR = .FALSE.
 130 :                ENDIF
 131 :             ENDDO  
 132 :          ELSE
 133 : C
 134 : C********** GAMMAG < GAMMAD
 135 : C
 136 :             CELL=CGD**(1.0D0/COEFFD/GAMMAD)
 137 :             COCELL=GAMMAG*COEFFG/GAMMAD/COEFFD
 138 :             LOGERR = .TRUE.
 139 :             N0 = 0
 140 :             DO WHILE(LOGERR)
 141 :                N0=N0+1
 142 :                G1=CELL*Z0-((1.0D0-Z0)**COCELL)
 143 :                DG1=CELL+COCELL*((1.0D0-Z0)**(COCELL-1.0D0))
 144 :                DELTAZ=-G1/DG1
 145 :                Z0=Z0+DELTAZ
 146 :                LOGERR = (ABS(G1) .GT. ZERO) .OR. 
 147 :      &               (ABS(DELTAZ) .GT. ZERO)
 148 :                IF(N0 .GT. NITMAX) THEN
 149 :                   LOGNC = .TRUE.
 150 :                   MESERR(1:27) = 'HUS, SUBROUTINE rachus.eso.'
 151 :                   LOGERR = .FALSE.
 152 :                ENDIF 
 153 :             ENDDO  
 154 :          ENDIF
 155 :       ENDIF
 156 : C
 157 :       Z=Z0
 158 :       USTAR=Z*UTILG+(1.0D0-Z)*UTILD
 159 :       PSTARG=PG*(DUTILD*(1.0D0-Z)/AG/COEFFG)**(GAMMAG*COEFFG)
 160 :       PSTARD=PD*(DUTILD*Z/AD/COEFFD)**(GAMMAD*COEFFD)
 161 : C
 162 : C**** N.B. On peut verifier aussi que pstarg = pstard
 163 : C
 164 :       PSTAR = 0.5D0*(PSTARG+PSTARD)
 165 :       ZERO0 = 1.D-6 * PSTAR * 10.0D0
 166 :       IF(ABS(PSTARG-PSTARD) .GT. ZERO0)THEN
 167 :          MESERR = 'HUS, SUBROUTINE rachus.eso.             '
 168 :          LOGAN = .TRUE.
 169 :       ENDIF
 170 : C
 171 :       RETURN
 172 :       END
 173 : 
 174 : 
 175 : 
 176 : 
 177 : 
 178 :  
 179 :  

© Cast3M 2003 - All rights reserved.
Disclaimer