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 67 : CALL ERREUR(-182) 68 : GOTO 99 69 : ENDIF 70 : * Test de non redondance des sous-modeles 71 : * (Les doublons sont desactives si necessaire.) 72 : N1 = 1 73 : DO i = NSOUS,2,-1 74 : IMODE1 = limodl(i) 75 : DO j = (i-1),1,-1 76 : IMODE2 = limodl(j) 77 : IF (IMODE1.EQ.IMODE2) THEN 78 : limodl(i) = 0 79 : GOTO 10 80 : ELSE IF (IMODE1.IMAMOD.EQ.IMODE2.IMAMOD .AND. 81 : & IMODE1.CONMOD.EQ.IMODE2.CONMOD) THEN 82 : limodl(i) = 0 83 : SEGDES,IMODE1 84 : GOTO 10 85 : ENDIF 86 : ENDDO 87 : N1 = N1 + 1 88 : 10 CONTINUE 89 : ENDDO 90 : 91 : * Creation du MMODEL deroule IPMOD1 (active en sortie) 92 : j = 0 93 : SEGINI,MMODE1 94 : DO i = 1,NSOUS 95 : IF (limodl(i).GT.0) THEN 96 : j = j + 1 97 : MMODE1.KMODEL(j) = limodl(i) 98 : ENDIF 99 : ENDDO 100 : IPMOD1 = MMODE1 101 : 102 : * Sortie du sous-programme (menage...) 103 : 99 CONTINUE 104 : SEGSUP,limodl 105 : MMODEL = IPMOD0 106 : SEGDES,MMODEL 107 : 108 : RETURN 109 : END 110 : 111 : 112 :
© Cast3M 2003 - All rights reserved.
Disclaimer