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