1 : C KONV12 SOURCE CHAT 06/08/24 21:48:06 5529
2 : SUBROUTINE KONV12
3 : C************************************************************************
4 : C
5 : C PROJET : CASTEM 2000
6 : C
7 : C NOM : KONV12
8 : C
9 : C DESCRIPTION : Subroutine appellée par KONV1
10 : C
11 : C Modelisation 2D/3D des equations d'Euler
12 : C
13 : C Calcul du residu / jacobien / DELTAT
14 : C
15 : C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
16 : C
17 : C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF
18 : C
19 : C************************************************************************
20 : C
21 : C APPELES (Calcul) : KONFL2 (2D, gaz "thermally perfect")
22 : C
23 : C************************************************************************
24 : C
25 : C*** SINTAXE
26 : C
27 : C Discrétisation en VF "cell-centered" des équations d'Euler pour
28 : C un gaz parfait mono-constituent
29 : C Inconnues: densité, quantité de mouvement, énergie totale par
30 : C unité de volume (variables conservatives) (densités de chaque
31 : C constituente, densité * scalaires passifs)
32 : C
33 : C RCHPO1 RFLOT1 = 'KONV' 'VF' 'PERFTEMP' MOT1 MOT2 MOD1 TABPG
34 : C LMOT1 MCHAM1 MCHAM2 MCHAM3 (MCHAM4 MCHAM5)
35 : C MAILLIM ;
36 : C ENTREES
37 : C
38 : C
39 : C MOT1 : objet de type MOT
40 : C Il vaut 'RESI' si on veut calculer le résidu
41 : C Il vaut 'FLUX' si on veut calculer le flux
42 : C
43 : C MOT2 : objet de type MOT
44 : C Il indique la méthode de décentrement:
45 : C 'VLH' = solveur de van Leer Hanel
46 : C 'SS = solveur choc-choc
47 : C
48 : C MOD1 : objet modele de type Navier_Stokes
49 : C
50 : C TABG : objet de type TABLE
51 : C il contient les proprietes du gaz:
52 : C * le nom de l'espèce qui n'est pas dans les Equations
53 : C d'Euler en
54 : C TABG . 'ESPNEULE' (MOT);
55 : C * les noms des espèces qui apparaissent explicitement
56 : C dans les équations d'Euler en
57 : C TABG . 'ESPEULE' (LISTMOTS);
58 : C dans le cas mono-espece cet indice n'existe pas.
59 : C * le degré de polynoms cv_i=cv_i(T), en
60 : C TABG . 'NORD' (ENTIER >= 0)
61 : C * les propriétés de chaque gaz 'ESPI', dans la table
62 : C TABG . 'ESPI':
63 : C - TABG . 'ESPI' . 'A' (LISTREEL)
64 : C qui contient les (TABG.'NORD')+1 coefficients des
65 : C polynoms cv(T), (A0,A1,...); le cv(T) sont supposés
66 : C être en J/kg/K, donc les Ai doivent être en unités
67 : C cohérentes;
68 : C - TABG . 'ESPI' . 'R' (J/kg/K, FLOTTANT)
69 : C qui contient la constante du gaz parfait
70 : C - TABG . 'ESPI' . 'H0K' (J/kg, FLOTTANT)
71 : C qui contient l'enthalpie de formation du gaz a 0K
72 : C (quantité numérique et pas physique)
73 : C * TABG . 'SCALPASS' = si existante, noms des scalaires
74 : C passifs à transporter (LISTMOTS)
75 : C
76 : C LMOT1 : objet de type LISTMOTS
77 : C Noms de composantes du résultat (RCHPO1)
78 : C Il contient dans l'ordre suivant: le noms de la densité,
79 : C de la vitesse, de l'énergie totale par unité de volume
80 : C des densités de chaque éspece, des scalaires passifs
81 : C
82 : C MCHAM1 : MCHAML contenant la masse volumique, qui a comme
83 : C SPG (support géométrique) l'indice 'FACEL' de
84 : C TAB1 (une composante, 'SCAL')
85 : C
86 : C MCHAM2 : MCHAML contenant la vitesse et les cosinus
87 : C directeurs du repère locale (n,t) dans le repère
88 : C global (x,y) (dans le cas 2D 6 composantes:
89 : C * 'UN' = vitesse normale (SPG =('DOMA' MOD1 'FACEL'))
90 : C * 'UT' = vitesse tangentielle (SPG =('DOMA' MOD1 'FACEL'))
91 : C * 'NX' = n.x (SPG = 'FACE')
92 : C * 'NY' = n.y (SPG = 'FACE')
93 : C * 'TX' = t.x (SPG = 'FACE')
94 : C * 'TY' = t.y (SPG = 'FACE')).
95 : C
96 : C MCHAM3 : MCHAML (SPG =('DOMA' MOD1 'FACEL')) contenant la pression du
97 : C gaz (une seule composante, 'SCAL').
98 : C
99 : C (MCHAM4): MCHAML (SPG =('DOMA' MOD1 'FACEL')) contenant les fractions
100 : C massiques des espèces qui apparaissent explicitement
101 : C dans les équations d'Euler (voir TABG . 'ESPEULE') ;
102 : C Dans le cas mono-espece MCHAM4 n'est pas à donner
103 : C
104 : C (MCHAM5): MCHAML (SPG =('DOMA' MOD1 'FACEL')) contenant les scalaires
105 : C transportés (voir TABG . 'SCALPASS'') ;
106 : C
107 : C MAILLIM : MAILLAGE -- describes the mesh where the flux is not
108 : C determined; it will be found by using
109 : C the subroutins for the Boundary Conditions
110 : C
111 : C SORTIES
112 : C
113 : C RCHPO1 : objet de type CHPOINT (composantes = LMOT1)
114 : C Residu si MOT2 = 'RESI' (SPG =('DOMA' MOD1 'CENTRE'))
115 : C Flux si MOT2 = 'FLUX' (SPG =('DOMA' MOD1 'FACE'))
116 : C
117 : C RFLOT1 : objet de type FLOTTANT
118 : C Il est le temps caracteristique associé à l'onde la plus
119 : C rapide.
120 : C
121 : C Remarque
122 : C --------
123 : C
124 : C RCHPO1 est égal à:
125 : C * la derivé temporelle des inconnues si l'option 'RESI' est utilisée
126 : C * la projection du flux convectif sur ('DOMA' MOD1 'XXNORMAF') si
127 : C l'option 'FLUX' est utilisée
128 : C
129 : C
130 : C***********************************************************************
131 : C
132 : C************************************************************************
133 : C
134 : C HISTORIQUE (Anomalies et modifications éventuelles)
135 : C
136 : C HISTORIQUE : 3.12.03 - modification: added MAILLIM as an input
137 : C
138 : C************************************************************************
139 : C
140 : IMPLICIT INTEGER(I-N)
141 : -INC CCOPTIO
142 : -INC SMLMOTS
143 : POINTEUR MLMVIT.MLMOTS,MLMOEU.MLMOTS, MLMOSC.MLMOTS
144 : -INC SMLREEL
145 : -INC SMELEME
146 : C
147 : C**** Variables de COOPTIO
148 : C
149 : C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
150 : C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
151 : C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
152 : C & ,IECHO, IIMPI, IOSPI
153 : C & ,IDIM
154 : C & ,MCOORD
155 : C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
156 : C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
157 : C & ,NORINC,NORVAL,NORIND,NORVAD
158 : C & ,NUCROU, IPSAUV, IFICLE, IPREFI
159 : C
160 : C**** A enlever à l'evolution
161 : C
162 : INTEGER IDOMA, MELEMC, MELEMF, MELEFE, ICHPSU, ICHPDI , ICHPVO
163 : & , INORM, MELLIM, IFLIM
164 : & , NBMET, INDMET, IRET
165 : & , IPGAZ, NORD, NORDP1, NESP, IESP
166 : & , JGM, JGN, NSCA
167 : & , I1, I2
168 : & , IROF, IVITF, IPF, IFRMAF, ISCAF
169 : & , NINC, ILIINC, NC, ICELL
170 : & , ICHFLU, ICHRES, INEFMD, ICOND, MMODEL
171 : C
172 : C**** Variables en ACCTAB
173 : C
174 : INTEGER IVALI, IRETI,IVALR, IRETR
175 : REAL*8 XVALI, XVALR
176 : LOGICAL LOGII, LOGIR
177 : CHARACTER*(8) MTYPI, MTYPR, CHARR
178 : C
179 : C**** Segment des proprietes du gaz
180 : C
181 : SEGMENT PROPHY
182 : REAL*8 ACV(NORDP1,NESP+1), R(NESP+1), H0K(NESP+1)
183 : & ,ACVTOG(NORDP1), ACVTOD(NORDP1)
184 : ENDSEGMENT
185 : C
186 : PARAMETER (NBMET=2)
187 : REAL*8 DT
188 : CHARACTER*8 LMETO(NBMET), TYPE
189 : CHARACTER*4 NOMMOT, LFLUX(2)
190 : CHARACTER*(40) MESERR
191 : LOGICAL LOGNC, LOGAN, LOGRES, LOGME, LOGSCA
192 : C
193 : DATA LMETO/'VLH ','SS '/
194 : DATA LFLUX/'FLUX','RESI'/
195 : C
196 : C**** Initialisation des variables pour la gestion des erreurs.
197 : C
198 : LOGNC = .FALSE.
199 : LOGAN = .FALSE.
200 : MESERR = ' '
201 : C
202 : C******* Flux ou residu???
203 : C
203 : CALL LIRMOT(LFLUX,2,ICELL,1)
204 : IF(IERR .NE. 0)GOTO 9999
205 : IF(ICELL .EQ. 1)THEN
206 : LOGRES = .FALSE.
207 : ELSEIF(ICELL .EQ. 2)THEN
208 : LOGRES = .TRUE.
209 : ELSE
210 : C
211 : C******** Message d'erreur standard
212 : C 251 2
213 : C Tentative d'utilisation d'une option non implémentée
214 : C
214 : CALL ERREUR(251)
215 : ENDIF
216 : C
217 : C**** Metode utilisée
218 : C
218 : CALL LIRMOT(LMETO,NBMET,INDMET,1)
219 : IF(IERR .NE. 0)GOTO 9999
220 : IF(INDMET .EQ. 0)THEN
221 : C
222 : C******** Message d'erreur standard
223 : C 251 2
224 : C Tentative d'utilisation d'une option non implémentée
225 : C
225 : CALL ERREUR(251)
226 : ENDIF
227 : C
228 : C**********************************
229 : C**** Lecture de l'objet MODELE ***
230 : C**********************************
231 : C
232 : ICOND = 1
232 : CALL QUETYP(TYPE,ICOND,IRET)
233 :
234 : IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
235 : WRITE(6,*)' On attend un objet MMODEL'
236 : RETURN
237 : ENDIF
237 : CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
238 : IF(IERR.NE.0)GOTO 9999
238 : CALL LEKMOD(MMODEL,IDOMA,INEFMD)
239 : IF(IERR.NE.0)GOTO 9999
240 : C
241 : C**** Centre, FACE et FACEL
242 : C
242 : CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
243 : IF(IERR .NE. 0) GOTO 9999
244 : C
244 : CALL LEKTAB(IDOMA,'FACE',MELEMF)
245 : IF(IERR .NE. 0) GOTO 9999
246 : C
246 : CALL LEKTAB(IDOMA,'FACEL',MELEFE)
247 : IF(IERR .NE. 0) GOTO 9999
248 : C
249 : C**** Lecture du CHPOINT contenant les surfaces des faces.
250 : C
250 : CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
251 : IF(IERR .NE. 0) GOTO 9999
252 : C
253 : C**** Lecture du CHPOINT contenant les diametres minimums.
254 : C
254 : CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
255 : IF(IERR .NE. 0) GOTO 9999
256 : C
257 : C**** Lecture du CHPOINT contenant les volumes
258 : C
258 : CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
259 : IF(IERR .NE. 0) GOTO 9999
260 : C
261 : C********** Les normales aux faces
262 : C
263 : IF(IDIM .EQ. 2)THEN
264 : C Que les normales
264 : CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
265 : IF(IERR .NE. 0) GOTO 9999
266 : JGN = 4
267 : JGM = 2
268 : SEGINI MLMVIT
269 : MLMVIT.MOTS(1) = 'UX '
270 : MLMVIT.MOTS(2) = 'UY '
270 : CALL QUEPO1(INORM, MELEMF, MLMVIT)
271 : SEGDES MLMVIT
272 : IF(IERR .NE. 0) GOTO 9999
273 : ELSE
274 : C Les normales et les tangentes
275 : TYPE = ' '
275 : CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
276 : IF (TYPE .NE. 'CHPOINT ') THEN
276 : CALL MATRAN(IDOMA,INORM)
277 : IF(IERR .NE. 0) GOTO 9999
278 : ENDIF
279 : JGN = 4
280 : JGM = 9
281 : SEGINI MLMVIT
282 : MLMVIT.MOTS(1) = 'UX '
283 : MLMVIT.MOTS(2) = 'UY '
284 : MLMVIT.MOTS(3) = 'UZ '
285 : MLMVIT.MOTS(4) = 'RX '
286 : MLMVIT.MOTS(5) = 'RY '
287 : MLMVIT.MOTS(6) = 'RZ '
288 : MLMVIT.MOTS(7) = 'MX '
289 : MLMVIT.MOTS(8) = 'MY '
290 : MLMVIT.MOTS(9) = 'MZ '
290 : CALL QUEPO1(INORM, MELEMF, MLMVIT)
291 : SEGDES MLMVIT
292 : ENDIF
293 : C
294 : C********************************
295 : C**** Fin table domaine *********
296 : C********************************
297 : C********************************
298 : C**** La table IPGAZ *******
299 : C********************************
300 : C
301 : C
302 : C**** Lecture de la table qui contient le proprieté du gaz
303 : C Cette table est controlle par l'operateur PRIM
304 : C
304 : CALL LIROBJ('TABLE',IPGAZ,1,IRET)
305 : IF(IERR .NE. 0)GOTO 9999
306 : IF(IERR .NE. 0) GOTO 9999
307 : C
308 : C**** NORD: degree des polynoms cv(T)
309 : C
310 : MTYPI = 'MOT '
311 : MTYPR = ' '
311 : CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,'NORD',LOGII,IRETI,
312 : & MTYPR,NORD,XVALR,CHARR,LOGIR,IRETR)
313 : IF(MTYPR .NE. 'ENTIER ')THEN
314 : C
315 : C**** Message d'erreur standard
316 : C -301 0 %m1:40
317 : C
318 : MOTERR(1:40) = 'ARG1 . NORD = ??? '
319 : WRITE(IOIMP,*) MOTERR
320 : C
321 : C**** Message d'erreur standard
322 : C 21 2
323 : C Données incompatibles
324 : C
324 : CALL ERREUR(21)
325 : GOTO 9999
326 : ENDIF
327 : NORDP1 = NORD + 1
328 : C
329 : C**** Nom de l'espece qui n'est pas dans les equations d'Euler
330 : C
331 : MTYPI = 'MOT '
332 : MTYPR = ' '
332 : CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,'ESPNEULE',LOGII,IRETI,
333 : & MTYPR,IVALR,XVALR,CHARR,LOGIR,IRETR)
334 : IF(MTYPR .NE. 'MOT ')THEN
335 : C
336 : C**** Message d'erreur standard
337 : C -301 0 %m1:40
338 : C
339 : MOTERR(1:40) = 'ARG1 . ESPNEULE = ??? '
340 : WRITE(IOIMP,*) MOTERR
341 : C
342 : C******* Message d'erreur standard
343 : C 21 2
344 : C Données incompatibles
345 : C
345 : CALL ERREUR(21)
346 : GOTO 9999
347 : ENDIF
348 : C
349 : C**** Les especes qui sont dans les Equations d'Euler
350 : C
351 : MTYPR = ' '
351 : CALL ACMO(IPGAZ,'ESPEULE',MTYPR,MLMOEU)
352 : IF(MTYPR .EQ. ' ')THEN
353 : NESP = 0
354 : IFRMAF = 0
355 : JGN = 4
356 : JGM = 1
357 : SEGINI MLMOT2
358 : MLMOT2.MOTS(1) = CHARR(1:4)
359 : LOGME = .FALSE.
360 : ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
361 : C
362 : C**** Message d'erreur standard
363 : C -301 0 %m1:40
364 : C
365 : MOTERR(1:40) = 'ARG1 . ESPEULE = ??? '
366 : WRITE(IOIMP,*) MOTERR
367 : C
368 : C**** Message d'erreur standard
369 : C 21 2
370 : C Données incompatibles
371 : C
371 : CALL ERREUR(21)
372 : GOTO 9999
373 : ELSE
374 : LOGME = .TRUE.
375 : SEGACT MLMOEU
376 : NESP = MLMOEU.MOTS(/2)
377 : JGN = 4
378 : JGM = NESP + 1
379 : SEGINI MLMOT2
380 : DO I1 = 1, NESP
381 : MLMOT2.MOTS(I1) = MLMOEU.MOTS(I1)
382 : ENDDO
383 : MLMOT2.MOTS(NESP+1)=CHARR(1:4)
384 : ENDIF
385 : C
386 : C**** Les scalaires passifs
387 : C
388 : MTYPR = ' '
388 : CALL ACMO(IPGAZ,'SCALPASS',MTYPR,MLMOSC)
389 : IF(MTYPR .EQ. ' ')THEN
390 : LOGSCA = .FALSE.
391 : NSCA = 0
392 : ISCAF = 0
393 : ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
394 : C
395 : C**** Message d'erreur standard
396 : C -301 0 %m1:40
397 : C
398 : MOTERR(1:40) = 'ARG1 . SCALPASS = ??? '
399 : WRITE(IOIMP,*) MOTERR
400 : C
401 : C**** Message d'erreur standard
402 : C 21 2
403 : C Données incompatibles
404 : C
404 : CALL ERREUR(21)
405 : GOTO 9999
406 : ELSE
407 : LOGSCA = .TRUE.
408 : SEGACT MLMOSC
409 : NSCA = MLMOSC.MOTS(/2)
410 : ENDIF
411 : C
412 : C**** On rempli les segment PROPHY
413 : C Ordre: IPGAZ . 'ESPEULE' + IPGAZ . 'ESPNEULE'
414 : C On controlle aussi la compatibilite des
415 : C donnes de la table
416 : C
417 : SEGINI PROPHY
418 : C
419 : C**** N.B. NOMMOT est un CHARACTER*(4)
420 : C
421 : DO I1 = 1, NESP+1
422 : NOMMOT = MLMOT2.MOTS(I1)
423 : C
423 : C******* CALL ACMF(...) ne marche pas parce que on a
424 : C des blanches dans nos composantes
425 : C
426 : MTYPI = 'MOT '
427 : MTYPR = ' '
427 : CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,NOMMOT, LOGII,IRETI,
428 : & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
429 : C
430 : C******* En IESP il y a la table IPGAZ.NOMMOT
431 : C
432 : IF((IERR .NE. 0) .OR. (MTYPR .NE. 'TABLE ')) THEN
433 :
434 : C
435 : C********** Message d'erreur standard
436 : C -301 0 %m1:40
437 : C
438 : MOTERR = ' '
439 : MOTERR(1:7) = 'ARG1 . '
440 : MOTERR(8:11) = NOMMOT
441 : MOTERR(13:17) = '= ???'
442 : WRITE(IOIMP,*) MOTERR
443 : C
444 : C********** Message d'erreur standard
445 : C 21 2
446 : C Données incompatibles
447 : C
447 : CALL ERREUR(21)
448 : GOTO 9999
449 : ENDIF
450 : C
451 : C******* R
452 : C
453 : MTYPI = 'MOT '
454 : MTYPR = ' '
454 : CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'R' , LOGII,IRETI,
455 : & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
456 : IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
457 :
458 : C
459 : C********** Message d'erreur standard
460 : C -301 0 %m1:40
461 : C
462 : MOTERR = ' '
463 : MOTERR(1:7) = 'ARG1 . '
464 : MOTERR(8:11) = NOMMOT
465 : MOTERR(13:23) = ' . R = ??? '
466 : WRITE(IOIMP,*) MOTERR
467 : C
468 : C********** Message d'erreur standard
469 : C 21 2
470 : C Données incompatibles
471 : C
471 : CALL ERREUR(21)
472 : GOTO 9999
473 : ENDIF
474 : PROPHY.R(I1)=XVALR
475 : C
476 : C******* H0K
477 : C
478 : MTYPI = 'MOT '
479 : MTYPR = ' '
479 : CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'H0K' , LOGII,IRETI,
480 : & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
481 : IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
482 :
483 : C
484 : C********** Message d'erreur standard
485 : C -301 0 %m1:40
486 : C
487 : MOTERR = ' '
488 : MOTERR(1:7) = 'ARG1 . '
489 : MOTERR(8:11) = NOMMOT
490 : MOTERR(13:25) = ' . H0K = ??? '
491 : WRITE(IOIMP,*) MOTERR
492 : C
493 : C********** Message d'erreur standard
494 : C 21 2
495 : C Données incompatibles
496 : C
496 : CALL ERREUR(21)
497 : GOTO 9999
498 : ENDIF
499 : PROPHY.H0K(I1)=XVALR
500 : C
501 : C******* A
502 : C
503 : MTYPI = 'MOT '
504 : MTYPR = ' '
504 : CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'A' , LOGII,IRETI,
505 : & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
506 : IF((IERR .NE. 0) .OR. (MTYPR .NE. 'LISTREEL')) THEN
507 : IERR = 0
508 : C
509 : C********** Message d'erreur standard
510 : C -301 0 %m1:40
511 : C
512 : MOTERR = ' '
513 : MOTERR(1:7) = 'ARG1 . '
514 : MOTERR(8:11) = NOMMOT
515 : MOTERR(13:23) = ' . A = ??? '
516 : WRITE(IOIMP,*) MOTERR
517 : C
518 : C********** Message d'erreur standard
519 : C 21 2
520 : C Données incompatibles
521 : C
521 : CALL ERREUR(21)
522 : GOTO 9999
523 : ENDIF
524 : MLREEL = IRETR
525 : SEGACT MLREEL
526 : C
527 : C******* Dans le calcul, c'est plus utile ACV dans la forme
528 : C ACV(,exponente,espece)
529 : C
530 : DO I2 = 1, NORDP1
531 : PROPHY.ACV(I2,I1)= MLREEL.PROG(I2)
532 : ENDDO
533 : SEGDES MLREEL
534 : ENDDO
535 : SEGDES MLMOT2
536 : C
537 : C**** La table IPGAZ donc a ete controllee et PROPHY est rempli
538 : C
539 : C
540 : C**** On va lire les pointeurs des MCHAMLs
541 : C Lecture du MCHAML 'FACEL' densité
542 : C
543 : TYPE='MCHAML '
543 : CALL LIROBJ(TYPE,IROF,1,IRET)
544 : IF(IERR.NE.0) GOTO 9999
545 : C
546 : C**** Lecture du MCHAML 'FACEL' vitesse
547 : C
548 : TYPE='MCHAML '
548 : CALL LIROBJ(TYPE,IVITF,1,IRET)
549 : IF(IERR .NE. 0) GOTO 9999
550 : C
551 : C**** Lecture du MCHAML 'FACEL' contenant la pression
552 : C
553 : TYPE='MCHAML '
553 : CALL LIROBJ(TYPE,IPF,1,IRET)
554 : IF(IERR .NE. 0) GOTO 9999
555 : C
556 : C**** Lecture du MCHAML 'FACEL' contenant les fractions massiques
557 : C
558 : IF(LOGME)THEN
559 : TYPE='MCHAML '
559 : CALL LIROBJ(TYPE,IFRMAF,1,IRET)
560 : IF(IERR .NE. 0) GOTO 9999
561 : ENDIF
562 : C
563 : C**** Lecture du MCHAML 'FACEL' contenant les scalaires passifs
564 : C
565 : IF(LOGSCA)THEN
566 : TYPE='MCHAML '
566 : CALL LIROBJ(TYPE,ISCAF,1,IRET)
567 : IF(IERR .NE. 0) GOTO 9999
568 : ENDIF
569 : C
570 : C**** NINC = nombre d'inconnues
571 : C
572 : NINC=IDIM+2+NESP+NSCA
573 : C
574 : TYPE='LISTMOTS'
574 : CALL LIROBJ(TYPE,ILIINC,1,IRET)
575 : IF(IERR .NE. 0) GOTO 9999
576 : MLMOTS = ILIINC
577 : SEGACT MLMOTS
578 : NC = MLMOTS.MOTS(/2)
579 : SEGDES MLMOTS
580 : IF(NC .NE. NINC)THEN
581 : MOTERR(1:40) = 'LISTINCO = ???'
582 : WRITE(IOIMP,*) MOTERR
583 : C
584 : C******* Message d'erreur standard
585 : C 21 2
586 : C Données incompatibles
587 : C
587 : CALL ERREUR(21)
588 : GOTO 9999
589 : ENDIF
590 : C
591 : C**** Boundary condition
592 : C
593 : IRET=0
594 : TYPE='MAILLAGE'
594 : CALL LIROBJ(TYPE,IFLIM,0,IRET)
595 : IF(IERR.NE.0)GOTO 9999
596 : IF(IRET .EQ. 0)THEN
597 : MELLIM = 0
598 : ELSE
599 : MELEME=IFLIM
600 : SEGACT MELEME
601 : ICACCA=MELEME.NUM(/2)
602 : IF(ICACCA .EQ. 0)THEN
603 : MELLIM = 0
604 : ELSE
605 : MELLIM = IFLIM
606 : ENDIF
607 : SEGDES MELEME
608 : ENDIF
609 : C
610 : C**** Creation des flux aux interfaces
611 : C
612 : TYPE = 'CHPOINT '
612 : CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMOTS)
613 : C
614 : C
615 : C**** Calcul des flux et du pas du temps.
616 : C
617 : IF( IDIM .EQ. 2)THEN
617 : CALL KONFL2(LOGME,LOGSCA,INDMET,NORDP1,
618 : & IROF,IVITF,IPF,IFRMAF,ISCAF,PROPHY,
619 : & ICHPSU,ICHPDI,
620 : & MELEMC,MELEMF,MELEFE,MELLIM,
621 : & ICHFLU,
622 : & DT,
623 : & LOGNC,LOGAN,MESERR)
624 : ELSE
624 : CALL KONFL4(LOGME,LOGSCA,INDMET,NORDP1,
625 : & IROF,IVITF,IPF,IFRMAF,ISCAF,PROPHY,
626 : & ICHPSU,ICHPDI,
627 : & MELEMC,MELEMF,MELEFE,MELLIM,
628 : & ICHFLU,
629 : & DT,
630 : & LOGNC,LOGAN,MESERR)
631 : ENDIF
632 : C
633 : IF(LOGAN)THEN
634 : C
635 : C******* Anomalie detectée
636 : C
637 : C
638 : C******* Message d'erreur standard
639 : C -301 0
640 : C %m1:40
641 : C
642 : MOTERR(1:40) = MESERR(1:40)
643 : WRITE(IOIMP,*) MOTERR(1:40)
644 : C
645 : C******* Message d'erreur standard
646 : C 5 3
647 : C Erreur anormale.contactez votre support
648 : C
648 : CALL ERREUR(5)
649 : GOTO 9999
650 : ENDIF
651 : IF(LOGNC)THEN
652 : C
653 : C******* Message d'erreur standard
654 : C -301 0
655 : C %m1:40
656 : C
657 : MOTERR(1:40) = MESERR(1:40)
658 : WRITE(IOIMP,*) MOTERR(1:40)
659 : C
660 : C******* Message d'erreur standard
661 : C 460 2
662 : C Pas de convergence dans les itérations internes
663 : C
663 : CALL ERREUR(460)
664 : GOTO 9999
665 : ENDIF
666 : C
667 : C**** Calcul de residu (si LOGRES = .TRUE.)
668 : C
669 : IF(LOGRES)THEN
670 : TYPE = 'CHPOINT '
670 : CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMOTS)
671 : C
671 : CALL KONRE1(MELEMC,MELEMF,MELEFE,ICHPVO,
672 : & ICHFLU, ICHRES,
673 : & LOGAN,MESERR)
674 : IF(LOGAN)THEN
675 : C
676 : C******* Anomalie detectée
677 : C
678 : C
679 : C******* Message d'erreur standard
680 : C -301 0
681 : C %m1:40
682 : C
683 : MOTERR(1:40) = MESERR(1:40)
684 : WRITE(IOIMP,*) MOTERR(1:40)
685 : C
686 : C******* Message d'erreur standard
687 : C 5 3
688 : C Erreur anormale.contactez votre support
689 : C
689 : CALL ERREUR(5)
690 : GOTO 9999
691 : ENDIF
692 : ELSE
693 : ICHRES = 0
694 : ENDIF
695 : C
696 : C**** Ecriture des resultats
697 : C
697 : CALL ECRREE(DT)
698 : TYPE = 'CHPOINT '
698 : IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
698 : IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
699 : C
700 : SEGDES PROPHY
701 : IF(LOGME) SEGDES MLMOEU
702 : IF(LOGSCA) SEGDES MLMOSC
703 : C
704 : 9999 CONTINUE
705 : RETURN
706 : END
707 :
708 :
709 :
710 :
711 :
712 :
713 :
714 :
715 :
716 :
717 :
718 :
719 :
© Cast3M 2003 - All rights reserved.
Disclaimer