C PIMODL SOURCE CHAT 11/03/16 21:28:58 6902 *======================================================================= *= SOUS-PROGRAMME PERMETTANT DE DEROULER UN MMODEL = *= (UTILE SURTOUT EN CAS DE MODELE MELANGE) = *= = *= IPMOD0 MMODEL initial complet = *= IPMOD1 MMODEL "deroule" contenant, de maniere unitaire, les sous- = *= modeles de formulation 'MECANIQUE', 'LIQUIDE' et 'POREUX' = *= vaut 0 en cas d'ERREUR (MMODEL "deroule" vide) = *= = *= Nota : - IPMOD0 / IPMOD1 est toujours DESACTIVE / ACTIF en sortie. = *= - Tous les sous-modeles de IPMOD1 sont ACTIFs en sortie ! = *======================================================================= SUBROUTINE PIMODL (IPMOD0,IPMOD1) IMPLICIT INTEGER (I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMMODEL SEGMENT limodl(0) MMODEL = IPMOD0 SEGACT,MMODEL*NOMOD NSOUS = KMODEL(/1) IPMOD1 = 0 * On met dans le segment limodl tous les sous-modeles utiles dans notre * cas (pointeurs sur des segments IMODEL actifs en fin de boucle) SEGINI,limodl DO i = 1,NSOUS IMODEL = KMODEL(i) SEGACT,IMODEL IF (FORMOD(1).EQ.'MECANIQUE' .OR. & FORMOD(1).EQ.'POREUX' .OR. & FORMOD(1).EQ.'ELECTROSTATIQUE' .OR. & FORMOD(1).EQ.'DIFFUSION' .OR. & FORMOD(1).EQ.'LIQUIDE' ) THEN limodl(**) = IMODEL ELSE IF (FORMOD(1).EQ.'MELANGE' .AND. & MATMOD(1).NE.'SERIE') THEN IF (IVAMOD(/1).GE.1) THEN DO j = 1,IVAMOD(/1) IF (TYMODE(j).EQ.'IMODEL') THEN IMODE1 = IVAMOD(j) SEGACT,IMODE1 IF (IMODE1.FORMOD(1).EQ.'MECANIQUE' .OR. & IMODE1.FORMOD(1).EQ.'POREUX' .OR. & IMODE1.FORMOD(1).EQ.'LIQUIDE' ) THEN limodl(**) = IMODE1 ELSE SEGDES,IMODE1 ENDIF ENDIF ENDDO ENDIF SEGDES,IMODEL ELSE SEGDES,IMODEL ENDIF ENDDO * Test sur le nombre de sous-modeles de limodl qui doit etre non nul ! NSOUS = limodl(/1) IF (NSOUS.LE.0) THEN CALL ERREUR(-182) GOTO 99 ENDIF * Test de non redondance des sous-modeles * (Les doublons sont desactives si necessaire.) N1 = 1 DO i = NSOUS,2,-1 IMODE1 = limodl(i) DO j = (i-1),1,-1 IMODE2 = limodl(j) IF (IMODE1.EQ.IMODE2) THEN limodl(i) = 0 GOTO 10 ELSE IF (IMODE1.IMAMOD.EQ.IMODE2.IMAMOD .AND. & IMODE1.CONMOD.EQ.IMODE2.CONMOD) THEN limodl(i) = 0 SEGDES,IMODE1 GOTO 10 ENDIF ENDDO N1 = N1 + 1 10 CONTINUE ENDDO * Creation du MMODEL deroule IPMOD1 (active en sortie) j = 0 SEGINI,MMODE1 DO i = 1,NSOUS IF (limodl(i).GT.0) THEN j = j + 1 MMODE1.KMODEL(j) = limodl(i) ENDIF ENDDO IPMOD1 = MMODE1 * Sortie du sous-programme (menage...) 99 CONTINUE SEGSUP,limodl MMODEL = IPMOD0 SEGDES,MMODEL RETURN END