Télécharger rachus.eso

Retour à la liste

Numérotation des lignes :

  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.  
  180.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales