Télécharger pimodl.eso

Retour à la liste

Numérotation des lignes :

pimodl
  1. C PIMODL SOURCE JK148537 26/10/19 21:15:13 12674
  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. *= IPMAI1 MAILLAGE "deroule" contenant, pour chaque sous-modele de =
  12. *= IPMOD1, le maillage support (type 28) si le mode de calcul =
  13. *= est de type DPGE (2D/1D) =
  14. *= vaut 0 si non utile/defini =
  15. *= INIVE = 0 sans 'MELANGE' avec sous-modeles encapsules =
  16. *= = 1 avec 'MELANGE' et sous-modeles encapsules sauf 'PARALLELE'=
  17. *= = 2 avec 'MELANGE' et sous-modeles encapsules si 'PARALLELE' =
  18. *= Nota : - IPMOD0 / IPMOD1 est ACTIF en entree / sortie. =
  19. *= - Tous les sous-modeles de IPMOD1 sont ACTIFs en sortie ! =
  20. *=======================================================================
  21.  
  22. SUBROUTINE PIMODL (IPMOD0,IPMOD1,IPMAI1,INIVE)
  23.  
  24. IMPLICIT INTEGER (I-N)
  25. IMPLICIT REAL*8 (A-H,O-Z)
  26.  
  27. -INC PPARAM
  28. -INC CCOPTIO
  29. -INC CCPRECO
  30.  
  31. -INC SMMODEL
  32. -INC SMELEME
  33. POINTEUR ipt0.meleme
  34.  
  35. CHARACTER*(16) moforg
  36. LOGICAL lDPGE
  37.  
  38. IPMOD1 = 0
  39. IPMAI1 = 0
  40.  
  41. iimpi0 = IIMPI
  42. c*dbg iimpi0 = 1972
  43.  
  44. mmodel = IPMOD0
  45. c* segact,mmodel*nomod <- Actif en E/S
  46.  
  47. C PRECOnditionnment "CMODPG" des MODELES mecaniques en mode DPGE (2D/1D)
  48. C ======================================================================
  49. C Recherche si le modele IPMOD0 n'a pas deja ete traite :
  50. C Verification si presence dans le preconditionnement CCPRECO / "CMODPG"
  51. ith = oothrd
  52. ith1 = ith + 1
  53.  
  54. CALL OOOHO1(mmodel,ihorot)
  55. ITAILL = NBMODP(ith1)
  56. DO is = 1, ITAILL
  57. IF ( PMODPE(is,ith1) .EQ. mmodel .AND.
  58. & PMODPH(is,ith1) .EQ. ihorot ) THEN
  59. mmode1 = PMODPS(is,ith1)
  60. meleme = PMADPS(is,ith1)
  61. if (iimpi0.eq.1972) then
  62. write(ioimp,*) 'Preconditionnement PIMODL trouve',
  63. & mmodel,mmode1,meleme,is
  64. endif
  65. C Mise a jour du preconditionnement dans CCPRECO : Deplacement en position 1
  66. IF (is .GT. 1) THEN
  67. DO js = is, 2, -1
  68. PMODPE(js,ith1) = PMODPE(js - 1,ith1)
  69. PMODPH(js,ith1) = PMODPH(js - 1,ith1)
  70. PMODPS(js,ith1) = PMODPS(js - 1,ith1)
  71. PMADPS(js,ith1) = PMADPS(js - 1,ith1)
  72. ENDDO
  73. PMODPE(1,ith1) = mmodel
  74. PMODPH(1,ith1) = ihorot
  75. PMODPS(1,ith1) = mmode1
  76. PMADPS(1,ith1) = meleme
  77. ENDIF
  78. IF (mmode1.NE.0 .AND. mmode1.NE.mmodel)
  79. & CALL ACTOBJ('MMODEL ',mmode1,1)
  80. IF (meleme.NE.0) CALL ACTOBJ('MAILLAGE',meleme,1)
  81. IPMOD1 = mmode1
  82. IPMAI1 = meleme
  83. if (iimpi0.eq.1972)
  84. & write(ioimp,*) 'PIMODL : IPMOD1 avec NSOU1 =',
  85. & mmode1.kmodel(/1)
  86. GOTO 100
  87. ENDIF
  88. ENDDO
  89.  
  90. C On deroule le MODELE des MODELES mecaniques en mode DPGE (2D/1D)
  91. C ======================================================================
  92. cjk148537
  93. if (mmode1.le.0) mmode1 = ipmod0
  94. NSOU1 = mmode1.kmodel(/1)
  95. if (iimpi0.eq.1972)
  96. & write(ioimp,*) 'PIMODL : IPMOD1 avec NSOU1 =',NSOU1
  97. IF (NSOU1.LE.0) THEN
  98. write(ioimp,*) 'PIMODL : IPMOD1 vide - NSOU1 = 0'
  99. CALL ERREUR(-182)
  100. GOTO 99
  101. ENDIF
  102. ipt1 = 0
  103.  
  104. C- Test si le mode de calcul courant est "DPGE"
  105. mfr = 1
  106. CALL INFDPG(mfr,IFOUR,lDPGE,ndpge)
  107. IF (lDPGE) THEN
  108. NBNN = 0
  109. NBELEM = 0
  110. NBREF = 0
  111. NBSOUS = 0
  112. SEGINI,ipt0
  113. SEGACT,ipt0*NOMOD
  114.  
  115. NBSOUS = NSOU1
  116. SEGINI,ipt1
  117.  
  118. N1 = 0
  119. DO is = 1, NSOU1
  120. imodel = mmode1.kmodel(is)
  121. mfr = imodel.INFELE(13)
  122. CALL INFDPG(mfr,IFOUR,lDPGE,ndpge)
  123. IF (lDPGE) THEN
  124. IIPDPG = imodel.IPDPGE
  125. IIPDPG = IPTPOI(IIPDPG)
  126. IF (IIPDPG.LE.0) THEN
  127. CALL ERREUR(925)
  128. CALL ERREUR(5)
  129. GOTO 99
  130. ENDIF
  131. ipt3 = imodel.imamod
  132. NBNN3 = ipt3.NUM(/1)
  133. NBNN = NBNN3+1
  134. NBELEM = ipt3.NUM(/2)
  135. NBREF = 0
  136. NBSOUS = 0
  137. SEGINI,meleme
  138. meleme.ITYPEL=28
  139. DO i = 1, NBELEM
  140. DO j = 1, NBNN3
  141. meleme.NUM(j,i) = ipt3.NUM(j,i)
  142. ENDDO
  143. meleme.NUM(NBNN,i) = IIPDPG
  144. meleme.ICOLOR(i) = ipt3.ICOLOR(i)
  145. ENDDO
  146. SEGACT,meleme*NOMOD
  147. N1 = N1 + 1
  148. ELSE
  149. meleme = ipt0
  150. ENDIF
  151. ipt1.lisous(is) = meleme
  152. ENDDO
  153. SEGACT,ipt1*NOMOD
  154. IF (N1.EQ.0) THEN
  155. segsup,ipt1,ipt0
  156. ipt1 = 0
  157. ENDIF
  158.  
  159. ENDIF
  160.  
  161. IPMOD1 = mmode1
  162. IPMAI1 = ipt1
  163.  
  164. C Mise a jour du preconditionnement CCPRECO / "CMODPG"
  165. C Si N1SM non nul et INIVE different de 1, pas de preco ... En attendant mieux !
  166. if (N1SM.NE.0 .AND. INIVE.NE.1) then
  167. if (iimpi0.eq.1972)
  168. & write(ioimp,*) 'PIMODL : Preconditionnement non retenu ',
  169. & NSOU1,N1SM,INIVE
  170. goto 99
  171. endif
  172.  
  173. ITAILL = MIN(ITAILL + 1, NPMDPG)
  174. NBMODP(ith1) = ITAILL
  175. DO is = ITAILL, 2, -1
  176. PMODPE(is,ith1) = PMODPE(is - 1,ith1)
  177. PMODPH(is,ith1) = PMODPH(is - 1,ith1)
  178. PMODPS(is,ith1) = PMODPS(is - 1,ith1)
  179. PMADPS(is,ith1) = PMADPS(is - 1,ith1)
  180. ENDDO
  181. PMODPE(1,ith1) = mmodel
  182. PMODPH(1,ith1) = ihorot
  183. PMODPS(1,ith1) = mmode1
  184. PMADPS(1,ith1) = ipt1
  185. if (iimpi0.eq.1973) then
  186. write(ioimp,*) 'PIMODL : Preconditionnement realise',
  187. & mmodel,mmode1,ipt1,itaill
  188. endif
  189.  
  190. C Sortie du sous-programme (menage...)
  191. 99 CONTINUE
  192. 100 CONTINUE
  193.  
  194. RETURN
  195. END
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  

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