Télécharger pimodl.eso

Retour à la liste

Numérotation des lignes :

  1. C PIMODL SOURCE CHAT 11/03/16 21:28:58 6902
  2.  
  3. *=======================================================================
  4. *= SOUS-PROGRAMME PERMETTANT DE DEROULER UN MMODEL =
  5. *= (UTILE SURTOUT EN CAS DE MODELE MELANGE) =
  6. *= =
  7. *= IPMOD0 MMODEL initial complet =
  8. *= IPMOD1 MMODEL "deroule" contenant, de maniere unitaire, les sous- =
  9. *= modeles de formulation 'MECANIQUE', 'LIQUIDE' et 'POREUX' =
  10. *= vaut 0 en cas d'ERREUR (MMODEL "deroule" vide) =
  11. *= =
  12. *= Nota : - IPMOD0 / IPMOD1 est toujours DESACTIVE / ACTIF en sortie. =
  13. *= - Tous les sous-modeles de IPMOD1 sont ACTIFs en sortie ! =
  14. *=======================================================================
  15.  
  16. SUBROUTINE PIMODL (IPMOD0,IPMOD1)
  17.  
  18. IMPLICIT INTEGER (I-N)
  19. IMPLICIT REAL*8 (A-H,O-Z)
  20.  
  21. -INC SMMODEL
  22.  
  23. SEGMENT limodl(0)
  24.  
  25. MMODEL = IPMOD0
  26. SEGACT,MMODEL*NOMOD
  27. NSOUS = KMODEL(/1)
  28.  
  29. IPMOD1 = 0
  30.  
  31. * On met dans le segment limodl tous les sous-modeles utiles dans notre
  32. * cas (pointeurs sur des segments IMODEL actifs en fin de boucle)
  33. SEGINI,limodl
  34. DO i = 1,NSOUS
  35. IMODEL = KMODEL(i)
  36. SEGACT,IMODEL
  37. IF (FORMOD(1).EQ.'MECANIQUE' .OR.
  38. & FORMOD(1).EQ.'POREUX' .OR.
  39. & FORMOD(1).EQ.'ELECTROSTATIQUE' .OR.
  40. & FORMOD(1).EQ.'DIFFUSION' .OR.
  41. & FORMOD(1).EQ.'LIQUIDE' ) THEN
  42. limodl(**) = IMODEL
  43. ELSE IF (FORMOD(1).EQ.'MELANGE' .AND.
  44. & MATMOD(1).NE.'SERIE') THEN
  45. IF (IVAMOD(/1).GE.1) THEN
  46. DO j = 1,IVAMOD(/1)
  47. IF (TYMODE(j).EQ.'IMODEL') THEN
  48. IMODE1 = IVAMOD(j)
  49. SEGACT,IMODE1
  50. IF (IMODE1.FORMOD(1).EQ.'MECANIQUE' .OR.
  51. & IMODE1.FORMOD(1).EQ.'POREUX' .OR.
  52. & IMODE1.FORMOD(1).EQ.'LIQUIDE' ) THEN
  53. limodl(**) = IMODE1
  54. ELSE
  55. SEGDES,IMODE1
  56. ENDIF
  57. ENDIF
  58. ENDDO
  59. ENDIF
  60. SEGDES,IMODEL
  61. ELSE
  62. SEGDES,IMODEL
  63. ENDIF
  64. ENDDO
  65. * Test sur le nombre de sous-modeles de limodl qui doit etre non nul !
  66. NSOUS = limodl(/1)
  67. IF (NSOUS.LE.0) THEN
  68. CALL ERREUR(-182)
  69. GOTO 99
  70. ENDIF
  71. * Test de non redondance des sous-modeles
  72. * (Les doublons sont desactives si necessaire.)
  73. N1 = 1
  74. DO i = NSOUS,2,-1
  75. IMODE1 = limodl(i)
  76. DO j = (i-1),1,-1
  77. IMODE2 = limodl(j)
  78. IF (IMODE1.EQ.IMODE2) THEN
  79. limodl(i) = 0
  80. GOTO 10
  81. ELSE IF (IMODE1.IMAMOD.EQ.IMODE2.IMAMOD .AND.
  82. & IMODE1.CONMOD.EQ.IMODE2.CONMOD) THEN
  83. limodl(i) = 0
  84. SEGDES,IMODE1
  85. GOTO 10
  86. ENDIF
  87. ENDDO
  88. N1 = N1 + 1
  89. 10 CONTINUE
  90. ENDDO
  91.  
  92. * Creation du MMODEL deroule IPMOD1 (active en sortie)
  93. j = 0
  94. SEGINI,MMODE1
  95. DO i = 1,NSOUS
  96. IF (limodl(i).GT.0) THEN
  97. j = j + 1
  98. MMODE1.KMODEL(j) = limodl(i)
  99. ENDIF
  100. ENDDO
  101. IPMOD1 = MMODE1
  102.  
  103. * Sortie du sous-programme (menage...)
  104. 99 CONTINUE
  105. SEGSUP,limodl
  106. MMODEL = IPMOD0
  107. SEGDES,MMODEL
  108.  
  109. RETURN
  110. END
  111.  
  112.  
  113.  
  114.  

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