Télécharger pimodl.eso

Retour à la liste

Numérotation des lignes :

pimodl
  1. C PIMODL SOURCE CB215821 24/04/12 21:16:51 11897
  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. *= INIVE = 0 =
  12. *= = 1 ajout 'MELANGE' 'PARALLEL'
  13. *= = 2 SANS sous-modeles encapsules =
  14. *= Nota : - IPMOD0 / IPMOD1 est toujours DESACTIVE / ACTIF en sortie. =
  15. *= - Tous les sous-modeles de IPMOD1 sont ACTIFs en sortie ! =
  16. *=======================================================================
  17.  
  18. SUBROUTINE PIMODL (IPMOD0,IPMOD1,INIVE)
  19.  
  20. IMPLICIT INTEGER (I-N)
  21. IMPLICIT REAL*8 (A-H,O-Z)
  22.  
  23. -INC PPARAM
  24. -INC SMMODEL
  25. logical d_para
  26. SEGMENT limodl(0)
  27.  
  28. MMODEL = IPMOD0
  29. SEGACT,MMODEL*NOMOD
  30. NSOUS = KMODEL(/1)
  31.  
  32. IPMOD1 = 0
  33.  
  34. * On met dans le segment limodl tous les sous-modeles utiles dans notre
  35. * cas (pointeurs sur des segments IMODEL actifs en fin de boucle)
  36. SEGINI,limodl
  37. DO i = 1,NSOUS
  38. IMODEL = KMODEL(i)
  39. SEGACT,IMODEL
  40. IF (FORMOD(1)(1:16).EQ.'MECANIQUE ' .OR.
  41. & FORMOD(1)(1:16).EQ.'CONTRAINTE ' .OR.
  42. & FORMOD(1)(1:16).EQ.'POREUX ' .OR.
  43. & FORMOD(1)(1:16).EQ.'ELECTROSTATIQUE ' .OR.
  44. & FORMOD(1)(1:16).EQ.'DIFFUSION ' .OR.
  45. & FORMOD(1)(1:16).EQ.'LIQUIDE ' ) THEN
  46. limodl(**) = IMODEL
  47. ELSE IF (FORMOD(1)(1:16).EQ. 'MELANGE ' .AND.
  48. & MATMOD(1).NE.'SERIE') THEN
  49. d_para = .true.
  50. IF (IVAMOD(/1).GE.1) THEN
  51. DO j = 1,IVAMOD(/1)
  52. IF (TYMODE(j).EQ.'IMODEL ') THEN
  53. IMODE1 = IVAMOD(j)
  54. SEGACT,IMODE1
  55. IF (IMODE1.FORMOD(1)(1:10).EQ.'MECANIQUE ' .OR.
  56. & IMODE1.FORMOD(1)(1:10).EQ.'POREUX ' .OR.
  57. & IMODE1.FORMOD(1)(1:10).EQ.'LIQUIDE ' ) THEN
  58. IF (INIVE.ge.1.and.d_para) limodl(**) = IMODEL
  59. d_para = .false.
  60. if (CMATEE.NE.'PARALLEL') then
  61. limodl(**) = IMODE1
  62. else
  63. if (inive.ne.2) limodl(**) = IMODE1
  64. endif
  65. ELSE
  66. C SEGDES,IMODE1
  67. ENDIF
  68. ENDIF
  69. ENDDO
  70. ENDIF
  71. ELSE IF (FORMOD(1)(1:16).EQ.'NAVIER_STOKES '.AND.
  72. & MATMOD(1).EQ.'NLIN') THEN
  73. limodl(**) = IMODEL
  74. ELSE
  75. C SEGDES,IMODEL
  76. ENDIF
  77. ENDDO
  78. * Test sur le nombre de sous-modeles de limodl qui doit etre non nul !
  79. NSOUS = limodl(/1)
  80. IF (NSOUS.LE.0) THEN
  81. CALL ERREUR(-182)
  82. GOTO 99
  83. ENDIF
  84. * Test de non redondance des sous-modeles
  85. * (Les doublons sont desactives si necessaire.)
  86. N1 = 1
  87. DO i = NSOUS,2,-1
  88. IMODE1 = limodl(i)
  89. DO j = (i-1),1,-1
  90. IMODE2 = limodl(j)
  91. IF (IMODE1.EQ.IMODE2) THEN
  92. limodl(i) = 0
  93. GOTO 10
  94. ELSE IF (IMODE1.IMAMOD.EQ.IMODE2.IMAMOD .AND.
  95. & IMODE1.CONMOD.EQ.IMODE2.CONMOD) THEN
  96. limodl(i) = 0
  97. C SEGDES,IMODE1
  98. GOTO 10
  99. ENDIF
  100. ENDDO
  101. N1 = N1 + 1
  102. 10 CONTINUE
  103. ENDDO
  104.  
  105. * Creation du MMODEL deroule IPMOD1 (active en sortie)
  106. j = 0
  107. SEGINI,MMODE1
  108. DO i = 1,NSOUS
  109. IF (limodl(i).GT.0) THEN
  110. j = j + 1
  111. MMODE1.KMODEL(j) = limodl(i)
  112. ENDIF
  113. ENDDO
  114. IPMOD1 = MMODE1
  115.  
  116. * Sortie du sous-programme (menage...)
  117. 99 CONTINUE
  118. SEGSUP,limodl
  119. MMODEL = IPMOD0
  120. C SEGDES,MMODEL
  121.  
  122. RETURN
  123. END
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  

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