Download pimodl.eso

Back to the list

   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