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