Download konmsp.eso

Back to the list

   1 : C KONMSP    SOURCE    MAGN      09/07/30    21:18:29     6458           
   2 :       SUBROUTINE KONMSP(NSP,ILIINC,IRN,IUN,IPN,IYN,MLRECP,
   3 :      &    MLRECV,INORM,ICHPVO,ICHPSU,MELEMC,MELEFE,MELLIM,IMAT)
   4 : C
   5 : C************************************************************************
   6 : C
   7 : C PROJET            :  CASTEM 2000
   8 : C
   9 : C NOM               :  KONMSP ("convection for multispecies")
  10 : C
  11 : C DESCRIPTION       :  Voir KON19 (appele par KON19)
  12 : C                      Calcul du jacobien du résidu pour la méthode
  13 : C                      AUSMplus
  14 : C
  14 : C                      Cas deux dimensions, gaz "calorically perfect"
  15 : C                                           MULTISPECIES!!!!!!!! 
  16 : C     
  17 : C LANGAGE           :  FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  18 : C      
  19 : C AUTEUR            :  S. KUDRIAKOV, DM2S/SFME/LTMF
  20 : C
  21 : C************************************************************************
  22 : C
  23 : C
  24 : C APPELES (Outils
  25 : C          CASTEM)  :  KRIPAD, LICHT, ERREUR
  26 : C      
  27 : C APPELES (Calcul)  :  CONMSP, CWMSP
  28 : C
  29 : C************************************************************************
  30 : C
  31 : C ENTREES
  32 : C
  33 : C     NSP    : number of species (total) ; 
  34 : C
  35 : C     ILINC  : liste des inconnues (pointeur d'un objet de type LISTMOTS)
  36 : C
  37 : C  1) Pointeurs des CHPOINT
  38 : C
  39 : C     IRN     : CHPOINT CENTRE  contenant la masse volumique ;
  40 : C
  41 : C     IUN     : CHPOINT CENTRE  contenant la vitesse ;
  42 : C
  43 : C     IPN     : CHPOINT CENTRE  contenant la pression ;
  44 : C
  45 : C     IYN     : CHPOINT CENTRE  contenant les fractions massiques ;
  46 : C
  47 : C     INORM   : CHPOINT FACE    contenant les normales aux faces ;
  48 : C
  49 : C     ICHPOVO : CHPOINT VOLUME  contenant le volume
  50 : C
  51 : C     ICHPOSU : CHPOINT FACE    contenant la surface des faces
  52 : C
  53 : C
  54 : C  2) Pointeurs des LIST REELS
  55 : C      
  56 : C     MLRECP  : LIST REELS contenant les CP's des gases differents ;
  57 : C
  58 : C     MLRECV  : LIST REELS contenant les CV's des gases differents ;    
  59 : C     
  60 : C  3) Pointeurs de MELEME de la table DOMAINE
  61 : C
  62 : C     MELEMC  : MELEME 'CENTRE' du SPG des CENTRES
  63 : C
  64 : C     MELEFE  : MELEME 'FACEL' du connectivité Faces -> Elts
  65 : C
  66 : C     MELLIM  : MELEME SPG des conditions aux bords    
  67 : C               N.B.: Sur le bord on ne calcule rien!
  68 : C
  69 : C SORTIES
  70 : C
  71 : C     IMAT    : pointeur de la MATRIK du jacobien du residu
  72 : C
  73 : C************************************************************************
  74 : C
  75 : C HISTORIQUE (Anomalies et modifications éventuelles)
  76 : C
  77 : C HISTORIQUE :
  78 : C      
  79 : C************************************************************************
  80 : C
  81 : C
  82 : C N.B.: On suppose qu'on a déjà controllé RO, P > 0
  83 : C                                         GAMMA \in (1,3)
  84 : C       Si non il faut le faire!!!
  85 : C
  86 : C************************************************************************
  87 : C               
  88 : C
  89 : C**** Variables de COOPTIO
  90 : C
  91 : C      INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  92 : C     &        ,IOTER,   IOLEC,  IOIMP,     IOCAR,  IOACQ
  93 : C     &        ,IOPER,   IOSGB,  IOGRA,     IOSAU,  IORES
  94 : C     &        ,IECHO,   IIMPI,  IOSPI
  95 : C     &        ,IDIM
  96 : C     &        ,MCOORD      
  97 : C     &        ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  98 : C     &        ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  99 : C     &        ,NORINC,NORVAL,NORIND,NORVAD
 100 : C     &        ,NUCROU, IPSAUV
 101 : C---------------------------------------------------
 102 :       IMPLICIT INTEGER(I-N)
 103 :       INTEGER NSP,II,JJ,KV,I,J,IFICLE,IPREFI,JLL,JRR     
 104 :       INTEGER ILIINC, IRN,IUN,IPN,IYN,INORM,ICHPVO,ICHPSU
 105 :      &        , IMAT, IGEOMC, IGEOMF
 106 :      &        , NFAC, NBSOUS, NBREF, NBELEM, NBNN, NRIGE, NMATRI, NKID
 107 :      &        , NKMT, NBME, NBEL,  MP, NP
 108 :      &        , IFAC, NGCF, NLCF, NGCG, NGCD, NLCG, NLCD, NLFL
 109 :       REAL*8 ROG, PG, UXG, UYG, VOLG
 110 :      &       , ROD, PD, UXD, UYD, VOLD
 111 :      &       , SURF, FUNCEL
 112 :       REAL*8 WVEC_L(4), WVEC_R(4), NVECT(2), TVECT(2)
 113 :       REAL*8 ZC1, ZC2, ZC3, ZC4
 114 :       CHARACTER*8 TYPE
 115 : C
 116 : C**** LES INCLUDES
 117 : C
 118 : -INC CCOPTIO
 119 : -INC SMCHPOI
 120 : -INC SMMATRIK
 121 : -INC SMELEME
 122 : -INC SMLMOTS
 123 : -INC SMLENTI
 124 :       POINTEUR MPRN.MPOVAL, MPUN.MPOVAL, MPPN.MPOVAL, MPYN.MPOVAL,
 125 :      &         MPNORM.MPOVAL, MPVOLU.MPOVAL, MPOVSU.MPOVAL
 126 :       POINTEUR MELEMC.MELEME, MELEMF.MELEME, MELEFE.MELEME,
 127 :      &         MELEDU.MELEME, MELLIM.MELEME
 128 :       POINTEUR MLENTC.MLENTI, MLENTF.MLENTI, MLELIM.MLENTI
 129 :       POINTEUR CELL.IZAFM
 130 :       POINTEUR MLMINC.MLMOTS
 131 : C----------------------------------------------------
 132 : -INC SMLREEL
 133 :       POINTEUR MLRECP.MLREEL, MLRECV.MLREEL
 134 : C-------------------------------------------------------
 135 : C*********  Les Jacobians ******************************  
 136 : C-------------------------------------------------------
 137 :       SEGMENT JACEL
 138 :          REAL*8 JAC(3+NSP,3+NSP)
 139 :       ENDSEGMENT
 140 :       POINTEUR JTL.JACEL, JTR.JACEL, JTT.JACEL 
 141 : C--------------------------------------------------------
 142 : C KRIPAD pour la correspondance global/local des centres
 143 : C--------------------------------------------------------
 143 :       CALL KRIPAD(MELLIM,MLELIM)
 143 :       CALL KRIPAD(MELEMC,MLENTC)
 144 : C------------------
 145 :       SEGACT MELEMC
 146 : C------------------     
 147 :       SEGACT MELEFE
 148 : C------------------
 148 :       CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
 148 :       CALL LICHT(INORM,MPNORM,TYPE,IGEOMF)
 148 :       CALL LICHT(ICHPVO,MPVOLU,TYPE,IGEOMC)
 149 : C----------------------------------------------
 150 :       MELEMF = IGEOMF
 150 :       CALL KRIPAD(MELEMF,MLENTF)
 151 :       SEGACT MELEMF
 152 : C-----------------------------------------------     
 152 :       CALL LICHT(IRN,MPRN,TYPE,IGEOMC)
 152 :       CALL LICHT(IPN,MPPN,TYPE,IGEOMC)
 152 :       CALL LICHT(IUN,MPUN,TYPE,IGEOMC)
 152 :       CALL LICHT(IYN,MPYN,TYPE,IGEOMC)
 153 : C-----------------------------------------------
 154 :       NFAC = MELEFE.NUM(/2)
 155 : C-----------------------------------------------
 156 : C**** Maillage des inconnues primales
 157 : C-----------------------------------------------
 158 :       NBSOUS = 0
 159 :       NBREF = 0
 160 :       NBELEM =  NFAC
 161 :       NBNN = 2
 162 : C-----------------------------------------------
 163 :       SEGINI MELEDU
 164 : C----------------------
 165 : C**  MELEDU = 'SEG2' **
 166 : C----------------------
 167 :       MELEDU.ITYPEL =  2
 168 : C--------------      
 169 :       NRIGE = 7
 170 :       NMATRI = 1
 171 :       NKID = 9
 172 :       NKMT = 7
 173 : C--------------
 174 :       SEGINI MATRIK
 175 :       IMAT = MATRIK
 176 :       MATRIK.IRIGEL(1,1) = MELEDU
 177 :       MATRIK.IRIGEL(2,1) = MELEDU
 178 : C-------------------------
 179 : C Matrice non symetrique
 180 : C-------------------------
 181 :       MATRIK.IRIGEL(7,1) = 2
 182 : C-------------------------
 183 :       NBME = (3+NSP)*(3+NSP)
 184 :       NBSOUS = 1
 185 :       SEGINI IMATRI
 186 :       MLMINC = ILIINC
 187 :       SEGACT MLMINC
 188 :       MATRIK.IRIGEL(4,1) = IMATRI
 189 : C-----------------------------------------------
 190 :       DO 1 J=1,(NSP+3)
 191 :         KV=(J-1)*(3+NSP)
 192 :         IMATRI.LISPRI(KV+1) = MLMINC.MOTS(1)
 193 :         IMATRI.LISPRI(KV+2) = MLMINC.MOTS(2)
 194 :         IMATRI.LISPRI(KV+3) = MLMINC.MOTS(3)
 195 :         IMATRI.LISPRI(KV+4) = MLMINC.MOTS(4)
 196 :         DO 2 I=1,(NSP-1)       
 197 :           IMATRI.LISPRI(KV+4+I) = MLMINC.MOTS(4+I)
 198 :  2      CONTINUE
 199 :  1    CONTINUE
 200 : C-----------------------------------------------
 201 :       DO 3 J=1,(NSP+3)
 202 :         KV=(J-1)*(3+NSP)
 203 :         IMATRI.LISDUA(KV+1) = MLMINC.MOTS(j)
 204 :         IMATRI.LISDUA(KV+2) = MLMINC.MOTS(j)
 205 :         IMATRI.LISDUA(KV+3) = MLMINC.MOTS(j)
 206 :         IMATRI.LISDUA(KV+4) = MLMINC.MOTS(j)
 207 :         DO 4 I=1,(NSP-1)       
 208 :           IMATRI.LISDUA(KV+4+I) = MLMINC.MOTS(j)
 209 :  4     CONTINUE
 210 :  3    CONTINUE
 211 : C-----------------------------------------------
 212 : C-----------------------------------------------
 213 :       NBEL = NBELEM
 214 :       NBSOUS = 1
 215 :       NP = 2
 216 :       MP = 2
 217 : C-----------------------------------------------------------
 218 : C-----------------------------------------------------------
 219 :       DO 5 I=1,NBME
 220 :         SEGINI CELL 
 221 :         IMATRI.LIZAFM(1,I) = CELL 
 222 :  5    CONTINUE  
 223 : C---------------------------------
 224 : C---------------------------------
 225 :       DO IFAC = 1, NFAC, 1
 226 :          NGCF = MELEFE.NUM(2,IFAC)
 227 :          NLCF = MLENTF.LECT(NGCF)
 228 :          IF(NLCF .NE. IFAC)THEN
 229 :             WRITE(IOIMP,*) 'Il ne faut pas jouer avec la table domaine'
 229 :             CALL ERREUR(5)
 230 :             GOTO 9999
 231 :          ENDIF
 232 :          NLFL = MLELIM.LECT(NGCF)
 233 :          NGCG = MELEFE.NUM(1,IFAC)
 234 :          NGCD = MELEFE.NUM(3,IFAC)
 235 :          IF(NLFL .NE. 0)THEN
 236 : C---------------------------------------------------------
 237 : C The point belongs to BC -> No contribution to jacobian!
 238 : C---------------------------------------------------------
 239 :             MELEDU.NUM(1,IFAC) = NGCG
 240 :             MELEDU.NUM(2,IFAC) = NGCD
 241 :          ELSEIF(NGCG .NE. NGCD)THEN
 242 : C-----------------------------------
 243 : C********** Les MELEMEs
 244 : C-----------------------------------
 245 :             MELEDU.NUM(1,IFAC) = NGCG
 246 :             MELEDU.NUM(2,IFAC) = NGCD
 247 : C-----------------------------------
 248 : C********** Les etats G et D
 249 : C-----------------------------------
 250 :             NLCG = MLENTC.LECT(NGCG)
 251 :             NLCD = MLENTC.LECT(NGCD)
 252 : C-----------------
 253 :             ROG = MPRN.VPOCHA(NLCG,1)
 254 :             PG = MPPN.VPOCHA(NLCG,1)
 255 :             UXG = MPUN.VPOCHA(NLCG,1)
 256 :             UYG = MPUN.VPOCHA(NLCG,2)
 257 :             VOLG = MPVOLU.VPOCHA(NLCG,1)
 258 : C-------------------------------------------------
 259 :             WVEC_L(1)=ROG
 260 :             WVEC_L(2)=UXG
 261 :             WVEC_L(3)=UYG
 262 :             WVEC_L(4)=PG
 263 : C-------------------------------------------------            
 264 :             ROD = MPRN.VPOCHA(NLCD,1)
 265 :             PD = MPPN.VPOCHA(NLCD,1)
 266 :             UXD = MPUN.VPOCHA(NLCD,1)
 267 :             UYD = MPUN.VPOCHA(NLCD,2)
 268 :             VOLD = MPVOLU.VPOCHA(NLCD,1)
 269 : C------------------------------------------------
 270 :             WVEC_R(1)=ROD
 271 :             WVEC_R(2)=UXD
 272 :             WVEC_R(3)=UYD
 273 :             WVEC_R(4)=PD
 274 : C------------------------------------------------ 
 275 : C  La normale G->D
 276 : C  La tangente
 277 : C------------------------------------------------
 278 :             SURF = MPOVSU.VPOCHA(NLCF,1)
 279 :             NVECT(1) = MPNORM.VPOCHA(NLCF,1)
 280 :             NVECT(2) = MPNORM.VPOCHA(NLCF,2)
 281 :             TVECT(1) = -1.0D0 * NVECT(2)
 282 :             TVECT(2) = NVECT(1)
 283 : C-------------------------------------------------
 283 :             CALL CONMSP(NSP,JLL,JRR,WVEC_L,WVEC_R,NVECT,TVECT,
 284 :      &        MPYN,MLRECP,MLRECV,NLCG,NLCD)
 285 : C-----------------------------------------------------
 286 : C********** AB.AM(IFAC,IPRIM,IDUAL)
 287 : C           A = nom de l'inconnu duale (Ro,rUX,rUY,RET)
 288 : C           B = nom de l'inconnu primale (Ro,rUX,rUY,RET)
 289 : C           IPRIM = 1, 2  -> G, D
 290 : C           IDUAL = 1, 2  -> G, D
 291 : C           i.e.
 292 : C           A_IDUAL = AB.AM(IFAC,IPRIM,IDUAL) * B_IPRIM + ...
 293 : C
 294 : C
 295 : C********** Dual RN
 296 : C----------------------------------------------------
 297 :             JTL=JLL
 298 :             JTR=JRR 
 299 :             SEGACT JTL
 300 :             SEGACT JTR
 301 :             DO 10 II = 1,(3+NSP)
 302 :               DO 15 JJ = 1,(3+NSP)
 303 :                 KV = (II-1)*(3+NSP)
 304 : C----------------------------------
 305 :                 CELL = IMATRI.LIZAFM(1,KV+JJ)
 306 :                 FUNCEL = SURF * JTL.JAC(II,JJ)
 307 :                 CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
 308 :                 CELL.AM(IFAC,1,2) = FUNCEL / VOLD
 309 :  15           CONTINUE
 310 :  10         CONTINUE  
 311 : C-----------------------------------------------------
 312 :             DO 20 II = 1,(3+NSP)
 313 :               DO 25 JJ = 1,(3+NSP)
 314 :                 KV = (II-1)*(3+NSP)
 315 :                 CELL = IMATRI.LIZAFM(1,KV+JJ)
 316 :                 FUNCEL = SURF * JTR.JAC(II,JJ)
 317 :                 CELL.AM(IFAC,2,2) = FUNCEL / VOLD
 318 :                 CELL.AM(IFAC,2,1) = -FUNCEL / VOLG
 319 :  25           CONTINUE
 320 :  20         CONTINUE 
 321 :             SEGDES JTR
 322 :             SEGDES JTL
 323 : C-----------------------------------------------------
 324 :          ELSE
 325 : C-----------------------------------------------------
 326 : C*************  Murs (NGCG = NGCD)  ******************
 327 : C-----------------------------------------------------
 328 :             MELEDU.NUM(1,IFAC) = NGCG
 329 :             MELEDU.NUM(2,IFAC) = NGCD
 330 :             NLCG = MLENTC.LECT(NGCG)
 331 : C--------------------------------------
 332 :             ROG = MPRN.VPOCHA(NLCG,1)
 333 :             PG = MPPN.VPOCHA(NLCG,1)
 334 :             UXG = MPUN.VPOCHA(NLCG,1)
 335 :             UYG = MPUN.VPOCHA(NLCG,2)
 336 :             VOLG = MPVOLU.VPOCHA(NLCG,1)
 337 : C-------------------------------------------
 338 :             WVEC_L(1)=ROG
 339 :             WVEC_L(2)=UXG
 340 :             WVEC_L(3)=UYG
 341 :             WVEC_L(4)=PG
 342 : C-------------------------------------------------
 343 :             SURF = MPOVSU.VPOCHA(NLCF,1)
 344 :             NVECT(1) = MPNORM.VPOCHA(NLCF,1)
 345 :             NVECT(2) = MPNORM.VPOCHA(NLCF,2)
 346 :             TVECT(1) =-NVECT(2)
 347 :             TVECT(2) = NVECT(1)
 348 : C------- COEFFICIENTS ----------------------------
 349 :             ZC1=NVECT(1)*TVECT(2)+TVECT(1)*NVECT(2)
 350 :             ZC2=NVECT(1)*TVECT(2)-TVECT(1)*NVECT(2)
 351 :             ZC3=2.0D0*NVECT(1)*TVECT(1)
 352 :             ZC4=2.0D0*NVECT(2)*TVECT(2)
 353 : C-------------------------------------------------            
 354 :             ROD = ROG
 355 :             PD = PG
 356 :             UXD = -ZC1*UXG/ZC2-ZC4*UYG/ZC2
 357 :             UYD = ZC3*UXG/ZC2+ZC1*UYG/ZC2
 358 :             VOLD = VOLG
 359 : C------------------------------------------------
 360 :             WVEC_R(1)=ROD
 361 :             WVEC_R(2)=UXD
 362 :             WVEC_R(3)=UYD
 363 :             WVEC_R(4)=PD
 364 : C-------------------------------------------
 365 : C********** La normale sortante
 366 : C-------------------------------------------
 366 :              CALL CWMSP(NSP,JLL,WVEC_L,WVEC_R,NVECT,
 367 :      &        TVECT,MPYN,MLRECP,MLRECV,NLCG)
 368 : C----------------------------------------------------
 369 :             JTL=JLL
 370 :             SEGACT JTL
 371 :             DO 70 II = 1,(3+NSP)
 372 :               DO 75 JJ = 1,(3+NSP)
 373 :                 KV = (II-1)*(3+NSP)
 374 : C---------------------------------
 375 :                 CELL = IMATRI.LIZAFM(1,KV+JJ)
 376 :                 FUNCEL = SURF * JTL.JAC(II,JJ)
 377 :                 CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
 378 :                 CELL.AM(IFAC,1,2) = 0.0D0
 379 :  75           CONTINUE
 380 :  70         CONTINUE 
 381 :             SEGDES JTL
 382 : C--------------------------------------------
 383 :             DO 40 II = 1,(3+NSP)
 384 :               DO 45 JJ = 1,(3+NSP)
 385 :                 KV = (II-1)*(3+NSP)
 386 :                 CELL = IMATRI.LIZAFM(1,KV+JJ)
 387 :                 CELL.AM(IFAC,2,2) = 0.0D0
 388 :                 CELL.AM(IFAC,2,1) = 0.0D0
 389 :  45           CONTINUE
 390 :  40         CONTINUE              
 391 : C--------------------------------------------
 392 :          ENDIF
 393 :       ENDDO
 394 : C
 395 :       SEGDES MELEMC
 396 :       SEGDES MELEFE
 397 :       SEGDES MELEMF
 398 : C
 399 :       SEGDES MPOVSU
 400 :       SEGDES MPVOLU
 401 :       SEGDES MPNORM
 402 : C
 403 :       SEGDES MPRN
 404 :       SEGDES MPPN
 405 :       SEGDES MPUN
 406 :       SEGDES MPYN
 407 : C
 408 :       SEGDES MELEDU
 409 :       SEGDES MATRIK
 410 :       DO 80 II=1,NBME
 411 :        CELL = IMATRI.LIZAFM(1,II)
 412 :        SEGDES CELL
 413 :  80   CONTINUE   
 414 :       SEGDES IMATRI
 415 : C
 416 :       SEGSUP MLENTC
 417 :       SEGSUP MLENTF
 418 :       SEGSUP MLELIM
 419 :       SEGDES MLMINC
 420 :       IF(MELLIM .NE.0) SEGDES MELLIM
 421 :       
 422 :  9999 CONTINUE
 423 :       RETURN
 424 :       END
 425 :  
 426 :  
 427 : 
 428 : 
 429 : 
 430 : 
 431 : 
 432 : 
 433 :  
 434 :  
 435 :  
 436 :  
 437 :  
 438 :  

© Cast3M 2003 - All rights reserved.
Disclaimer