Download lekmod.eso

Back to the list

   1 : C LEKMOD    SOURCE    CHAT      11/03/16    21:26:57     6902           
   2 :       SUBROUTINE LEKMOD(MMODEL,IPOINT,INEFMD)
   3 : C---------------------------------------------------------------------
   4 : C Ce sous-programme vérifie que le modèle est bien Navier_Stokes
   5 : C                                                ou DARCY
   6 : C ensuite il recherche dans le modele MMODEL
   7 : C la table domaine et la cree si elle n'existe pas déja
   8 : C---------------------------
   9 : C Paramètres Entrée/Sortie :
  10 : C---------------------------
  11 : C     
  12 : C E/S MMODEL : Pointeur du modèle contenant l'information cherchée
  13 : C              (rendu ACTIF)
  14 : C  /S IPOINT : Pointeur sur la table DOMAINE
  15 : C  /S INEFMD : Type formulation (non utilisé par DARCY)
  16 : C              INEFMD = 1 LINE,
  17 : C                     = 2 MACRO,
  18 : C                     = 3 QUADRATIQUE,
  19 : C                     = 4 LINB.
  20 : C              
  21 : C---------------------------------------------------------------------
  22 :       IMPLICIT INTEGER(I-N)
  23 :       IMPLICIT REAL*8 (A-H,O-Z)
  24 : -INC SMELEME
  25 : -INC SMMODEL
  26 :       CHARACTER*8  NOMDOM
  27 :       CHARACTER*16 NOMFOR
  28 : 
  29 : C     Table des partitions concernées par la table domaine
  30 :       SEGMENT TPART
  31 :         LOGICAL  LPART(NBPART)
  32 :       ENDSEGMENT
  33 : 
  34 : C***
  35 : 
  36 :       MTABI=0
  37 : 
  38 : *     Identification des formulations des partitions du modèle
  39 : *     de méca-flux :
  40 :       SEGACT MMODEL
  41 :       N1     = KMODEL(/1)
  42 :       NBPART = N1
  43 :       SEGINI TPART
  44 :       NBMECF = 0
  45 :       DO 1 L=1,N1
  46 :         IMODEL=KMODEL(L)
  47 :         SEGACT IMODEL
  48 :         NOMFOR = FORMOD(1)
  49 :         LPART(L) = ((NOMFOR.EQ.'NAVIER_STOKES').OR.(NOMFOR.EQ.'DARCY')
  50 :      &               .OR.(NOMFOR.EQ.'EULER'))
  51 :         IF (LPART(L)) THEN 
  52 :           L0 = L
  53 :           NBMECF = NBMECF + 1
  54 :         ENDIF
  55 :  1    CONTINUE
  56 :       
  57 :       IF (NBMECF.EQ.0) THEN
  58 : C       Données incompatibles
  58 :         CALL ERREUR(21)
  59 :         RETURN
  60 :       ENDIF
  61 : *
  62 : *     Voyons l'une des partitions de type méca-flux :
  63 : *
  64 :       IMODEL = KMODEL(L0)
  65 :       IPTR   = INFMOD(2)
  66 : 
  67 :       IF(IPTR.NE.0)THEN
  68 : *       la table domaine existe déjà pour cette partition
  69 : *       (donc pour toutes les autres partitions de type méca-flux)
  70 : 
  71 : *       On renvoie le pointeur de la table
  72 :         IPOINT=IPTR
  73 : 
  74 : *       Détermination de MACRO et INEFMD        
  75 :         IMODEL = KMODEL(1)
  76 :         IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
  77 :           INEFMD=0
  78 :           MACRO=0
  79 :         ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
  80 :           INEFMD=1
  81 :           MACRO=0
  82 :         ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.141)THEN
  83 :           INEFMD=2
  84 :           MACRO=1
  85 :         ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
  86 :           INEFMD=3
  87 :           MACRO=0
  88 :         ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
  89 :           INEFMD=4
  90 :           MACRO=0
  91 :         ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
  92 :           INEFMD=1
  93 :           MACRO=0
  94 :         ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
  95 :           INEFMD=4
  96 :           MACRO=0
  97 :         ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
  98 :           INEFMD=2
  99 :           MACRO=1
 100 :         ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
 101 :           INEFMD=3
 102 :           MACRO=0
 103 :         ELSE
 104 : *         Le type d'élément fini ne convient pas
 105 : C         Données incompatibles
 105 :           CALL ERREUR(21)
 106 :           IPOINT=0
 107 :           RETURN
 108 :         ENDIF
 109 :       ELSE
 110 : *       la table domaine n'existe pas pour cette partition
 111 : *       (donc pour aucune des autres). On va la créer.
 112 : *       La discrétisation est la supposée la même pour toutes les
 113 : *       partitions.
 114 : 
 115 : *       Création du maillage, concaténation des sous-maillages pertinents
 116 :         NBSOUS = NBMECF
 117 :         IF (NBSOUS.EQ.1) THEN
 118 :           DO 2 L=1,N1
 119 :             IF (LPART(L)) THEN
 120 :               IMODEL = KMODEL(L)
 121 :               MELEME = IMODEL.IMAMOD
 122 :             ENDIF
 123 :  2        CONTINUE
 124 :         ELSE
 125 :           NBREF  = 0
 126 :           NBNN   = 0
 127 :           NBELEM = 0
 128 :           SEGINI MELEME
 129 :           K = 0
 130 :           DO 3 L=1,N1
 131 :             IF (LPART(L)) THEN
 132 :               K = K + 1
 133 :               IMODEL    = KMODEL(L)
 134 :               LISOUS(K) = IMODEL.IMAMOD
 135 :             ENDIF
 136 :  3        CONTINUE
 137 :           SEGDES MELEME
 138 :         ENDIF
 139 : 
 140 :         IMODEL=KMODEL(1)
 141 :         IF((FORMOD(1).EQ.'DARCY').OR.(NOMFOR.EQ.'EULER'))THEN
 142 :           MACRO=0
 143 :           INEFMD=1
 144 :         ELSEIF(NEFMOD.GE.129.AND.NEFMOD.LE.135)THEN
 145 :           INEFMD=1
 146 :           MACRO=0
 147 :         ELSEIF(NEFMOD.GE.136.AND.NEFMOD.LE.141)THEN
 148 :           INEFMD=2
 149 :           MACRO=1
 150 :         ELSEIF(NEFMOD.GE.143.AND.NEFMOD.LE.149)THEN
 151 :           INEFMD=3
 152 :           MACRO=0
 153 :         ELSEIF(NEFMOD.GE.158.AND.NEFMOD.LE.164)THEN
 154 :           INEFMD=4
 155 :           MACRO=0
 156 :         ELSEIF(NEFMOD.GE.195.AND.NEFMOD.LE.208)THEN
 157 :           INEFMD=1
 158 :           MACRO=0
 159 :         ELSEIF(NEFMOD.GE.209.AND.NEFMOD.LE.215)THEN
 160 :           INEFMD=4
 161 :           MACRO=0
 162 :         ELSEIF(NEFMOD.GE.216.AND.NEFMOD.LE.236)THEN
 163 :           INEFMD=2
 164 :           MACRO=1
 165 :         ELSEIF(NEFMOD.GE.237.AND.NEFMOD.LE.257)THEN
 166 :           INEFMD=3
 167 :           MACRO=0
 168 :         ELSE
 169 : C         Données incompatibles
 169 :           CALL ERREUR(21)
 170 :           IPOINT=0
 171 :           MACRO=0
 172 :           RETURN
 173 :         ENDIF
 174 : 
 175 :         TOLER=0.D0
 176 :         NOMDOM=' '
 177 : 
 178 : *       Création table domaine
 179 :         IF ((FORMOD(1).EQ.'EULER').OR.(FORMOD(1).EQ.'DARCY'))THEN
 179 :         CALL KKDOM2(MELEME,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
 180 :         ELSE
 180 :         CALL KKDOM(MELEME,MACRO,TOLER,NOMDOM,MTABI,MTABD,INEFMD)
 181 :         ENDIF
 182 : 
 183 : *       On fait pointer toutes les partitions du modèle sur la même
 184 : *       table domaine globale.
 185 :         DO 1235 L=1,N1
 186 :           IF (LPART(L)) THEN
 187 :             IMODEL = KMODEL(L)
 188 :             SEGACT IMODEL*MOD
 189 :             INFMOD(2)=MTABD
 190 :           ENDIF
 191 :  1235   CONTINUE
 192 : 
 193 : *       On renvoie le pointeur de la table
 194 :         IPOINT=MTABD
 195 :       ENDIF
 196 : 
 197 : *     Fermeture des segments (on laisse tous les segments du modèle
 198 : *     ouverts). 
 199 :       SEGDES TPART
 200 : 
 201 :       RETURN
 202 : C     
 203 :       END
 204 :  
 205 :  
 206 :  
 207 :  
 208 :  
 209 :  
 210 :  
 211 :  
 212 :  
 213 :  
 214 :  
 215 :  
 216 :  
 217 :  
 218 :  

© Cast3M 2003 - All rights reserved.
Disclaimer