pimodl
C PIMODL SOURCE CB215821 24/04/12 21:16:51 11897 *======================================================================= *= 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) = *= INIVE = 0 = *= = 1 ajout 'MELANGE' 'PARALLEL' *= = 2 SANS sous-modeles encapsules = *= Nota : - IPMOD0 / IPMOD1 est toujours DESACTIVE / ACTIF en sortie. = *= - Tous les sous-modeles de IPMOD1 sont ACTIFs en sortie ! = *======================================================================= IMPLICIT INTEGER (I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC SMMODEL logical d_para 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)(1:16).EQ.'MECANIQUE ' .OR. & FORMOD(1)(1:16).EQ.'CONTRAINTE ' .OR. & FORMOD(1)(1:16).EQ.'POREUX ' .OR. & FORMOD(1)(1:16).EQ.'ELECTROSTATIQUE ' .OR. & FORMOD(1)(1:16).EQ.'DIFFUSION ' .OR. & FORMOD(1)(1:16).EQ.'LIQUIDE ' ) THEN ELSE IF (FORMOD(1)(1:16).EQ. 'MELANGE ' .AND. & MATMOD(1).NE.'SERIE') THEN d_para = .true. 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)(1:10).EQ.'MECANIQUE ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'POREUX ' .OR. & IMODE1.FORMOD(1)(1:10).EQ.'LIQUIDE ' ) THEN d_para = .false. if (CMATEE.NE.'PARALLEL') then else endif ELSE C SEGDES,IMODE1 ENDIF ENDIF ENDDO ENDIF ELSE IF (FORMOD(1)(1:16).EQ.'NAVIER_STOKES '.AND. & MATMOD(1).EQ.'NLIN') THEN ELSE C SEGDES,IMODEL ENDIF ENDDO * Test sur le nombre de sous-modeles de limodl qui doit etre non nul ! IF (NSOUS.LE.0) THEN GOTO 99 ENDIF * Test de non redondance des sous-modeles * (Les doublons sont desactives si necessaire.) N1 = 1 DO i = NSOUS,2,-1 DO j = (i-1),1,-1 IF (IMODE1.EQ.IMODE2) THEN GOTO 10 ELSE IF (IMODE1.IMAMOD.EQ.IMODE2.IMAMOD .AND. & IMODE1.CONMOD.EQ.IMODE2.CONMOD) THEN C 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 j = j + 1 ENDIF ENDDO IPMOD1 = MMODE1 * Sortie du sous-programme (menage...) 99 CONTINUE SEGSUP,limodl MMODEL = IPMOD0 C SEGDES,MMODEL RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales