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