1 : C KON171 SOURCE MAGN 09/07/30 21:17:38 6458 2 : SUBROUTINE KON171(ICEN,IDIAMI,IRN,IUN,IPN,IGAMN,ILINC,IUPRI1, 3 : $ IUPRI2,IMAT) 4 : C 5 : C************************************************************************ 6 : C 7 : C PROJET : CASTEM 2000 8 : C 9 : C NOM : KON171 10 : C 11 : C DESCRIPTION : Voir KON17 12 : C Calcul de la matrice de preconditionnement 13 : C \Gamma pour les variables conservatives 14 : C 14 : C Cas deux dimensions, gaz "calorically perfect" 15 : C 16 : C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI) 17 : C 18 : C AUTEUR : A. BECCANTINI, DM2S/SFME/LTMF 19 : C S. V. KUDRIAKOV, DM2S/SFME/LTMF 20 : C 21 : C************************************************************************ 22 : C 23 : C 24 : C APPELES (Outils 25 : C CASTEM) : 26 : C 27 : C APPELES (Calcul) : 28 : C 29 : C************************************************************************ 30 : C 31 : C ENTREES 32 : C 33 : C ILINC : liste des inconnues (pointeur d'un objet de type LISTMOTS) 34 : C 35 : C 1) Pointeurs de MELEME de la table DOMAINE 36 : C 37 : C ICEN : MELEME 'CENTRE' du SPG des CENTRES 38 : C 39 : C IDIAMI : CHPOINT CENTRE contenant le diametre de la cellule ; 40 : C 41 : C 2) Pointeurs des CHPOINT 42 : C 43 : C IRN : CHPOINT CENTRE contenant la masse volumique ; 44 : C 45 : C IUN : CHPOINT CENTRE contenant la vitesse ; 46 : C 47 : C IPN : CHPOINT CENTRE contenant la pression ; 48 : C 49 : C IGAMN : CHPOINT CENTRE contenant le gamma ; 50 : C 51 : C IUPRI1 : CHPOINT CENTRE contenant la vitesse de "cut-off" ; 52 : C 53 : C IUPRI2 : CHPOINT CENTRE contenant la vitesse de "cut-off" ; 54 : C 55 : C SORTIES 56 : C 57 : C IMAT : pointeur de la MATRIK du \Gamma 58 : C 59 : C************************************************************************ 60 : C 61 : C HISTORIQUE (Anomalies et modifications éventuelles) 62 : C 63 : C HISTORIQUE : 64 : C 65 : C************************************************************************ 66 : C 67 : C 68 : C N.B.: On suppose qu'on a déjà controllé RO, P > 0 69 : C GAMMA \in (1,3) 70 : C Si non il faut le faire!!! 71 : C 72 : C************************************************************************ 73 : C 74 : C 75 : C**** Variables de COOPTIO 76 : C 77 : C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR 78 : C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ 79 : C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES 80 : C & ,IECHO, IIMPI, IOSPI 81 : C & ,IDIM 82 : C & ,MCOORD 83 : C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE 84 : C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU 85 : C & ,NORINC,NORVAL,NORIND,NORVAD 86 : C & ,NUCROU, IPSAUV, IFICLE, IPREFI 87 : C 88 : IMPLICIT INTEGER(I-N) 89 : INTEGER IGEOMC, IDIAMI 90 : & ,ILINC ,IRN ,IUN ,IPN ,IGAMN, IMAT 91 : & ,NBELEM, ICEN, IUPRI1, IUPRI2 92 : & ,MP,NBEL,NBME,NBSOUS,NKID,NKMT,NMATRI,NP,NRIGE 93 : C 94 : REAL*8 WVECT(4), GAM, GMT(4,4), VPRI, VPRI2, DIAM 95 : CHARACTER*8 TYPE 96 : C 97 : C**** LES INCLUDES 98 : C 99 : -INC CCOPTIO 100 : -INC SMCHPOI 101 : -INC SMMATRIK 102 : -INC SMELEME 103 : -INC SMLMOTS 104 : -INC SMLENTI 105 : POINTEUR MPRN.MPOVAL, MPUN.MPOVAL, MPPN.MPOVAL, MPGAMN.MPOVAL, 106 : & MPUPR1.MPOVAL,MPUPR2.MPOVAL,MDIAMI.MPOVAL 107 : POINTEUR MELEMC.MELEME 108 : POINTEUR RR.IZAFM, RUX.IZAFM, RUY.IZAFM, RRET.IZAFM, 109 : & UXR.IZAFM, UXUX.IZAFM, UXUY.IZAFM, UXRET.IZAFM, 110 : & UYR.IZAFM, UYUX.IZAFM, UYUY.IZAFM, UYRET.IZAFM, 111 : & RETR.IZAFM, RETUX.IZAFM, RETUY.IZAFM, RETRET.IZAFM 112 : POINTEUR MLMINC.MLMOTS 113 : C 114 : MELEMC=ICEN 115 : SEGACT MELEMC 116 : NBELEM =MELEMC.NUM(/2) 117 : SEGDES MELEMC 118 : C 118 : CALL LICHT(IRN,MPRN,TYPE,IGEOMC) 118 : CALL LICHT(IPN,MPPN,TYPE,IGEOMC) 118 : CALL LICHT(IUN,MPUN,TYPE,IGEOMC) 118 : CALL LICHT(IGAMN,MPGAMN,TYPE,IGEOMC) 118 : CALL LICHT(IUPRI1,MPUPR1,TYPE,IGEOMC) 118 : CALL LICHT(IUPRI2,MPUPR2,TYPE,IGEOMC) 118 : CALL LICHT(IDIAMI,MDIAMI,TYPE,IGEOMC) 119 : C 120 : C SEGACT MPRN*MOD 121 : C SEGACT MPPN*MOD 122 : C SEGACT MPUN*MOD 123 : C SEGACT MPGAMN*MOD 124 : C 125 : C 126 : C**** Maillage des inconnues primales = Maillage des inconnues primales 127 : C = MELEMC 128 : C 129 : C 130 : NRIGE = 7 131 : NMATRI = 1 132 : NKID = 9 133 : NKMT = 7 134 : C 135 : SEGINI MATRIK 136 : IMAT = MATRIK 137 : MATRIK.IRIGEL(1,1) = MELEMC 138 : MATRIK.IRIGEL(2,1) = MELEMC 139 : C 140 : C**** Matrice non symetrique 141 : C 142 : MATRIK.IRIGEL(7,1) = 2 143 : C 144 : NBME = 16 145 : NBSOUS = 1 146 : SEGINI IMATRI 147 : MLMINC = ILINC 148 : SEGACT MLMINC 149 : MATRIK.IRIGEL(4,1) = IMATRI 150 : C 151 : IMATRI.LISPRI(1) = MLMINC.MOTS(1) 152 : IMATRI.LISPRI(2) = MLMINC.MOTS(2) 153 : IMATRI.LISPRI(3) = MLMINC.MOTS(3) 154 : IMATRI.LISPRI(4) = MLMINC.MOTS(4) 155 : IMATRI.LISPRI(5) = MLMINC.MOTS(1) 156 : IMATRI.LISPRI(6) = MLMINC.MOTS(2) 157 : IMATRI.LISPRI(7) = MLMINC.MOTS(3) 158 : IMATRI.LISPRI(8) = MLMINC.MOTS(4) 159 : IMATRI.LISPRI(9) = MLMINC.MOTS(1) 160 : IMATRI.LISPRI(10) = MLMINC.MOTS(2) 161 : IMATRI.LISPRI(11) = MLMINC.MOTS(3) 162 : IMATRI.LISPRI(12) = MLMINC.MOTS(4) 163 : IMATRI.LISPRI(13) = MLMINC.MOTS(1) 164 : IMATRI.LISPRI(14) = MLMINC.MOTS(2) 165 : IMATRI.LISPRI(15) = MLMINC.MOTS(3) 166 : IMATRI.LISPRI(16) = MLMINC.MOTS(4) 167 : C 168 : IMATRI.LISDUA(1) = MLMINC.MOTS(1) 169 : IMATRI.LISDUA(2) = MLMINC.MOTS(1) 170 : IMATRI.LISDUA(3) = MLMINC.MOTS(1) 171 : IMATRI.LISDUA(4) = MLMINC.MOTS(1) 172 : IMATRI.LISDUA(5) = MLMINC.MOTS(2) 173 : IMATRI.LISDUA(6) = MLMINC.MOTS(2) 174 : IMATRI.LISDUA(7) = MLMINC.MOTS(2) 175 : IMATRI.LISDUA(8) = MLMINC.MOTS(2) 176 : IMATRI.LISDUA(9) = MLMINC.MOTS(3) 177 : IMATRI.LISDUA(10) = MLMINC.MOTS(3) 178 : IMATRI.LISDUA(11) = MLMINC.MOTS(3) 179 : IMATRI.LISDUA(12) = MLMINC.MOTS(3) 180 : IMATRI.LISDUA(13) = MLMINC.MOTS(4) 181 : IMATRI.LISDUA(14) = MLMINC.MOTS(4) 182 : IMATRI.LISDUA(15) = MLMINC.MOTS(4) 183 : IMATRI.LISDUA(16) = MLMINC.MOTS(4) 184 : C 185 : NBEL = NBELEM 186 : NBSOUS = 1 187 : NP = 1 188 : MP = 1 189 : SEGINI RR , RUX , RUY , RRET , 190 : & UXR , UXUX , UXUY , UXRET , 191 : & UYR , UYUX , UYUY , UYRET , 192 : & RETR , RETUX , RETUY , RETRET 193 : C 194 : C**** Duale = IMATRI.LISDUA(1) = 'RN' 195 : C Primale = IMATRI.LISPRI(1) = 'RN' 196 : C -> IMATRI.LIZAFM(1,1) = RR 197 : C 198 : C Duale = IMATRI.LISDUA(2) = 'RN' 199 : C Primale = IMATRI.LISPRI(1) = 'UXN' 200 : C -> IMATRI.LIZAFM(1,2) = RUX 201 : C ... 202 : C 203 : IMATRI.LIZAFM(1,1) = RR 204 : IMATRI.LIZAFM(1,2) = RUX 205 : IMATRI.LIZAFM(1,3) = RUY 206 : IMATRI.LIZAFM(1,4) = RRET 207 : IMATRI.LIZAFM(1,5) = UXR 208 : IMATRI.LIZAFM(1,6) = UXUX 209 : IMATRI.LIZAFM(1,7) = UXUY 210 : IMATRI.LIZAFM(1,8) = UXRET 211 : IMATRI.LIZAFM(1,9) = UYR 212 : IMATRI.LIZAFM(1,10) = UYUX 213 : IMATRI.LIZAFM(1,11) = UYUY 214 : IMATRI.LIZAFM(1,12) = UYRET 215 : IMATRI.LIZAFM(1,13) = RETR 216 : IMATRI.LIZAFM(1,14) = RETUX 217 : IMATRI.LIZAFM(1,15) = RETUY 218 : IMATRI.LIZAFM(1,16) = RETRET 219 : C 220 : DO ICEN = 1, NBELEM, 1 221 : C 222 : WVECT(1)= MPRN.VPOCHA(ICEN,1) 223 : WVECT(4)=MPPN.VPOCHA(ICEN,1) 224 : WVECT(2)=MPUN.VPOCHA(ICEN,1) 225 : WVECT(3)=MPUN.VPOCHA(ICEN,2) 226 : GAM = MPGAMN.VPOCHA(ICEN,1) 227 : DIAM = MDIAMI.VPOCHA(ICEN,1) 228 : C 229 : C******* Le calcul 230 : C 231 : VPRI= MPUPR1.VPOCHA(ICEN,1) 232 : VPRI2= MPUPR2.VPOCHA(ICEN,1) 233 : VPRI=MAX(VPRI,VPRI2) 233 : CALL GMAT2D(GMT,WVECT,GAM,VPRI,DIAM) 234 : C 235 : C********AB.AM(IFAC,IPRIM,IDUAL) 236 : C A = nom de l'inconnu duale (Ro,rUX,rUY,RET) 237 : C B = nom de l'inconnu primale (Ro,rUX,rUY,RET) 238 : C IPRIM = 1 239 : C IDUAL = 1 240 : C i.e. 241 : C A_IDUAL = AB.AM(IFAC,IPRIM,IDUAL) * B_IPRIM + ... 242 : C 243 : C 244 : C N.B. GMT parcoru à l'inverse par rapport au stokage 245 : C en Fortran 246 : C 247 : C******* Dual RN 248 : C 249 : RR.AM(ICEN,1,1) = GMT(1,1) 250 : RUX.AM(ICEN,1,1) = GMT(1,2) 251 : RUY.AM(ICEN,1,1) = GMT(1,3) 252 : RRET.AM(ICEN,1,1) = GMT(1,4) 253 : C 254 : C******* Dual RUXN 255 : C 256 : UXR.AM(ICEN,1,1) = GMT(2,1) 257 : UXUX.AM(ICEN,1,1) = GMT(2,2) 258 : UXUY.AM(ICEN,1,1) = GMT(2,3) 259 : UXRET.AM(ICEN,1,1) = GMT(2,4) 260 : C 261 : C******* Dual RUYN 262 : C 263 : UYR.AM(ICEN,1,1) = GMT(3,1) 264 : UYUX.AM(ICEN,1,1) = GMT(3,2) 265 : UYUY.AM(ICEN,1,1) = GMT(3,3) 266 : UYRET.AM(ICEN,1,1) = GMT(3,4) 267 : C 268 : C********Dual RETN 269 : C 270 : RETR.AM(ICEN,1,1) = GMT(4,1) 271 : RETUX.AM(ICEN,1,1) = GMT(4,2) 272 : RETUY.AM(ICEN,1,1) = GMT(4,3) 273 : RETRET.AM(ICEN,1,1) = GMT(4,4) 274 : C 275 : ENDDO 276 : C 277 : SEGDES MELEMC 278 : C 279 : SEGDES MPRN 280 : SEGDES MPPN 281 : SEGDES MPUN 282 : SEGDES MPGAMN 283 : SEGDES MPUPR1 284 : SEGDES MPUPR2 285 : SEGDES MDIAMI 286 : C 287 : SEGDES MATRIK 288 : SEGDES IMATRI 289 : C 290 : SEGDES RR , RUX , RUY , RRET , 291 : & UXR , UXUX , UXUY , UXRET , 292 : & UYR , UYUX , UYUY , UYRET , 293 : & RETR , RETUX , RETUY , RETRET 294 : C 295 : SEGDES MLMINC 296 : C 297 : 9999 CONTINUE 298 : RETURN 299 : END 300 : 301 : 302 : 303 : 304 : 305 :
© Cast3M 2003 - All rights reserved.
Disclaimer