1 : C KFMM SOURCE CHAT 06/08/24 21:46:41 5529
2 : SUBROUTINE KFMM
3 : C************************************************************************
4 : C
5 : C PROJET : CASTEM 2000
6 : C
7 : C NOM : KFMM
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 Free matrix method: calcul d'un stationaire
14 : C avec un jacobi par point
15 : C
16 : C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
17 : C
18 : C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF
19 : C
20 : C************************************************************************
21 : C
22 : C APPELES (Calcul) :
23 : C
24 : C************************************************************************
25 : C
26 : C*** SYNTAXE
27 : C
28 : C Discrétisation en VF "cell-centered" des équations d'Euler pour
29 : C un gaz parfait mono-constituent polytropique
30 : C Inconnues: densité, quantité de mouvement, énergie totale par
31 : C unité de volumes (variables conservatives UN)
32 : C
33 : C A(UN) '*' DUN_L = RES(UN) + B(UN) - B(UN_L)
34 : C
35 : C ou
36 : C
37 : C RES(UN) est calculé avec ('KONV' 'VF' 'PERFMONO')
38 : C UN_0 = UN
39 : C UN_L = UN ° DUN_L
40 : C
41 : C Ici on calcule A(UN) est B(UN)
42 : C
43 : C CHAUN = 'KONV' 'VF' 'PMONOFMM' 'AN' LMOT1
44 : C MOD1 MCHPO1 MCHPO2 MCHPO3 MCHPO4 FLOT1
45 : C ('CLIM' LMOT2 MCHPO5);
46 : C
47 : C CHBUN = 'KONV' 'VF' 'FMM' 'PERMONO' 'BN' LMOT1
48 : C MOD1 MCHPO1 MCHPO2 MCHPO3 MCHPO4
49 : C ('CLIM' LMOT2 MCHPO5);
50 : C
51 : C
52 : C LMOT1 : Il contient dans l'ordre suivant: le noms de la densité,
53 : C de la qdm, de l'énergie totale par unité de volume
54 : C
55 : C MOD1 : objet modele de type EULER
56 : C
57 : C MCHPO1 : CHPOINT contenant la masse volumique (en kg/m^3; une
58 : C composante, 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
59 : C
60 : C MCHPO2 : CHPOINT contenant les débits (en kg/s/m^2; deux
61 : C composantes en 2D, 'UX ','UY ', trois composantes
62 : C en 3D, 'UX ','UY ', 'UZ ', SPG =(DOMA MOD1 'CENTRE')).
63 : C
64 : C MCHPO3 : CHPOINT contenant l'énergie totale par unité de volume
65 : C (en J/m^3; une composante, 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
66 : C
67 : C MCHPO4 : CHPOINT contenant le "gamma" du gaz (une composante,
68 : C 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
69 : C
70 : C LMOT2 : Il contient dans l'ordre suivant: le noms de la densité,
71 : C de la vitesse, de la pression.
72 : C
73 : C MCHPO5 : CHPOINT contenant les conditions aux limites
74 : C (composantes en LMOT2).
75 : C
76 : C************************************************************************
77 : C
78 : C HISTORIQUE (Anomalies et modifications éventuelles)
79 : C
80 : C HISTORIQUE : crée le 30/04/02
81 : C Janvier 2003: implementation de condition aux limites
82 : C
83 : C************************************************************************
84 : C
85 : IMPLICIT INTEGER(I-N)
86 : -INC CCOPTIO
87 : -INC SMLMOTS
88 : -INC SMCHPOI
89 : POINTEUR MLMVIT.MLMOTS
90 : C
91 : C**** Variables de COOPTIO
92 : C
93 : C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
94 : C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
95 : C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
96 : C & ,IECHO, IIMPI, IOSPI
97 : C & ,IDIM
98 : C & ,MCOORD
99 : C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
100 : C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
101 : C & ,NORINC,NORVAL,NORIND,NORVAD
102 : C & ,NUCROU, IPSAUV, IFICLE, IPREFI
103 : C
104 : INTEGER ICOEF, IDOMA, IRET, MELEF, MELEC, MELEFL, ICHPSU, INDIC
105 : & , NBCOMP, ICHPDI, IRN, IGN, IRETN, IGAMN, ICHPVO, ILIINC
106 : & , ICHRES, JGN, JGM, INORM, INEFMD, ICOND, MMODEL
107 : & , ICHLIM, MELLIM, ILIINP, NSOUPO
108 : C
109 : REAL*8 DCFL
110 : C
111 : CHARACTER*4 MOT
112 : CHARACTER*8 LCOEF(2), TYPE
113 : CHARACTER*(40) MESERR
114 : C
115 : DATA LCOEF/'AN','BN'/
116 : C
116 : CALL LIRMOT(LCOEF,2,ICOEF,1)
117 : IF(IERR .NE. 0)GOTO 9999
118 : C
119 : C**********************************
120 : C**** Lecture de l'objet MODELE ***
121 : C**********************************
122 : C
123 : ICOND = 1
123 : CALL QUETYP(TYPE,ICOND,IRET)
124 :
125 : IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
126 : WRITE(6,*)' On attend un objet MMODEL'
127 : RETURN
128 : ENDIF
128 : CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
129 : IF(IERR.NE.0)GOTO 9999
129 : CALL LEKMOD(MMODEL,IDOMA,INEFMD)
130 : IF(IERR.NE.0)GOTO 9999
131 : C
132 : C**** Centre, FACE, FACEL
133 : C
133 : CALL LEKTAB(IDOMA,'CENTRE',MELEC)
134 : IF(IERR .NE. 0) GOTO 9999
135 : C
135 : CALL LEKTAB(IDOMA,'FACE',MELEF)
136 : IF(IERR .NE. 0) GOTO 9999
137 : C
137 : CALL LEKTAB(IDOMA,'FACEL',MELEFL)
138 : IF(IERR .NE. 0) GOTO 9999
139 : C
140 : C**** Lecture du CHPOINT contenant les surfaces des faces.
141 : C
141 : CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
142 : IF(IERR .NE. 0) GOTO 9999
143 : INDIC = 1
144 : NBCOMP = 1
145 : MOT = 'SCAL'
145 : CALL QUEPOI(ICHPSU, MELEF, INDIC, NBCOMP, MOT)
146 : IF(IERR .NE. 0) GOTO 9999
147 : C
148 : C**** Lecture du CHPOINT contenant les diametres minimums.
149 : C
149 : CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
150 : IF(IERR .NE. 0) GOTO 9999
151 : INDIC = 1
152 : NBCOMP = 1
153 : MOT = 'SCAL'
153 : CALL QUEPOI(ICHPDI, MELEC, INDIC, NBCOMP, MOT)
154 : IF(IERR .NE. 0) GOTO 9999
155 :
156 : C
157 : C**** Lecture du CHPOINT contenant les normales aux faces
158 : C
159 : IF(IDIM .EQ. 2)THEN
160 : C Que les normales
160 : CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
161 : IF(IERR .NE. 0) GOTO 9999
162 : JGN = 4
163 : JGM = 2
164 : SEGINI MLMVIT
165 : MLMVIT.MOTS(1) = 'UX '
166 : MLMVIT.MOTS(2) = 'UY '
166 : CALL QUEPO1(INORM, MELEF, MLMVIT)
167 : SEGSUP MLMVIT
168 : C
169 : ELSE
170 : C Les normales et les tangentes
171 : TYPE = ' '
171 : CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
172 : IF (TYPE .NE. 'CHPOINT ') THEN
172 : CALL MATRAN(IDOMA,INORM)
173 : IF(IERR .NE. 0) GOTO 9999
174 : ENDIF
175 : JGN = 4
176 : JGM = 9
177 : SEGINI MLMVIT
178 : MLMVIT.MOTS(1) = 'UX '
179 : MLMVIT.MOTS(2) = 'UY '
180 : MLMVIT.MOTS(3) = 'UZ '
181 : MLMVIT.MOTS(4) = 'RX '
182 : MLMVIT.MOTS(5) = 'RY '
183 : MLMVIT.MOTS(6) = 'RZ '
184 : MLMVIT.MOTS(7) = 'MX '
185 : MLMVIT.MOTS(8) = 'MY '
186 : MLMVIT.MOTS(9) = 'MZ '
186 : CALL QUEPO1(INORM, MELEF, MLMVIT)
187 : SEGSUP MLMVIT
188 : ENDIF
189 : C
190 : C**** Lecture du CHPOINT contenant les volumes
191 : C
191 : CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
192 : IF(IERR .NE. 0) GOTO 9999
193 : INDIC = 1
194 : NBCOMP = 1
195 : MOT = 'SCAL'
195 : CALL QUEPOI(ICHPVO, MELEC, INDIC, NBCOMP, MOT)
196 : IF(IERR .NE. 0) GOTO 9999
197 : C
198 : C********************************
199 : C**** Fin table domaine *********
200 : C********************************
201 : C
202 : C**** La list des inconnues
203 : C
204 : TYPE='LISTMOTS'
204 : CALL LIROBJ(TYPE,ILIINC,1,IRET)
205 : IF(IERR .NE. 0) GOTO 9999
206 : C
207 : C**** On va lire les pointeurs des CHPOINTs
208 : C Lecture du CHPOINT centre densité
209 : C
210 : TYPE='CHPOINT'
210 : CALL LIROBJ(TYPE,IRN,1,IRET)
211 : IF(IERR.NE.0) GOTO 9999
212 : C
213 : C**** Controle du CHPOINT
214 : C
215 : INDIC = 1
216 : NBCOMP = 1
217 : MOT = 'SCAL'
217 : CALL QUEPOI(IRN, MELEC, INDIC, NBCOMP, MOT)
218 : IF(IERR .NE. 0) GOTO 9999
219 : C
220 : C**** Lecture du CHPOINT QDM
221 : C
222 : TYPE='CHPOINT'
222 : CALL LIROBJ(TYPE,IGN,1,IRET)
223 : IF(IERR.NE.0) GOTO 9999
224 : C
225 : C**** Control du CHPOINT
226 : C
227 : INDIC = 1
228 : NBCOMP = IDIM
229 : JGN = 4
230 : JGM = IDIM
231 : SEGINI MLMOTS
232 : MLMOTS.MOTS(1) = 'UX '
233 : MLMOTS.MOTS(2) = 'UY '
234 : IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ '
234 : CALL QUEPO1(IGN, MELEC, MLMOTS)
235 : IF(IERR .NE. 0) GOTO 9999
236 : SEGSUP MLMOTS
237 : C
238 : C**** Lecture du CHPOINT centre energie totale
239 : C
240 : TYPE='CHPOINT'
240 : CALL LIROBJ(TYPE,IRETN,1,IRET)
241 : IF(IERR.NE.0) GOTO 9999
242 : C
243 : C**** Controle du CHPOINT
244 : C
245 : INDIC = 1
246 : NBCOMP = 1
247 : MOT = 'SCAL'
247 : CALL QUEPOI(IRETN, MELEC, INDIC, NBCOMP, MOT)
248 : IF(IERR .NE. 0) GOTO 9999
249 : C
250 : C**** Lecture du CHPOINT centre gamma
251 : C
252 : TYPE='CHPOINT'
252 : CALL LIROBJ(TYPE,IGAMN,1,IRET)
253 : IF(IERR.NE.0) GOTO 9999
254 : C
255 : C**** Controle du CHPOINT
256 : C
257 : INDIC = 1
258 : NBCOMP = 1
259 : MOT = 'SCAL'
259 : CALL QUEPOI(IGAMN, MELEC, INDIC, NBCOMP, MOT)
260 : IF(IERR .NE. 0) GOTO 9999
261 : C
262 : C**** Lecture de le double de la CFL
263 : C
264 : IF(ICOEF .EQ.1) THEN
264 : CALL LIRREE(DCFL,1,IRET)
265 : IF(IERR .NE. 0) GOTO 9999
266 : ENDIF
267 : C
268 : C**** Lecture de conditions aux limites
269 : C
270 : IRET=0
270 : CALL LIRCHA(MOT,0,IRET)
271 : IF(IERR .NE. 0) GOTO 9999
272 : IF(IRET .NE. 0)THEN
273 : IF(MOT .EQ. 'CLIM')THEN
274 : C
275 : TYPE='LISTMOTS'
275 : CALL LIROBJ(TYPE,ILIINP,1,IRET)
276 : IF(IERR .NE. 0) GOTO 9999
277 : MLMOT1=ILIINP
278 : C
279 : TYPE='CHPOINT'
279 : CALL LIROBJ(TYPE,ICHLIM,1,IRET)
280 : IF(IERR.NE.0) GOTO 9999
281 : C
282 : MCHPOI = ICHLIM
283 : SEGACT MCHPOI
284 : NSOUPO = MCHPOI.IPCHP(/1)
285 : IF(NSOUPO .EQ. 0) THEN
286 : ICHLIM=0
287 : MELLIM=0
288 : ELSEIF(NSOUPO .GT. 1)THEN
289 : MOTERR(1:8) = 'CHAMPOIN'
290 : C
291 : C**************** Message d'erreur standard
292 : C 132 2
293 : C On veut un objet %m1:8 élémentaire
294 : C
294 : CALL ERREUR(132)
295 : GOTO 9999
296 : ELSE
297 : MSOUPO=MCHPOI.IPCHP(1)
298 : SEGACT MSOUPO
299 : MELLIM=MSOUPO.IGEOC
300 : SEGDES MSOUPO
301 : SEGDES MCHPOI
301 : CALL QUEPO1(ICHLIM, MELLIM, MLMOT1)
302 : IF(IERR.NE.0) GOTO 9999
303 : ENDIF
304 : C
305 : ELSE
305 : CALL REFUS
306 : ENDIF
307 : ELSE
308 : ICHLIM=0
309 : MELLIM=0
310 : ENDIF
311 : C
312 : C**** Creation de A(UN) ou de B(UN)
313 : C
314 : IF(ICOEF .EQ. 1)THEN
315 : C
316 : C******* Creation de A(UN)
317 : C
318 : TYPE = 'CHPOINT '
319 : JGN=4
320 : JGM=1
321 : SEGINI MLMOTS
322 : MLMOTS.MOTS(1)='SCAL'
322 : CALL KRCHP1(TYPE, MELEC, ICHRES, MLMOTS)
323 : IF(IERR .NE. 0) GOTO 9999
324 : SEGSUP MLMOTS
325 : IF(IDIM .EQ. 2)THEN
325 : CALL KFMM1(IRN,IGN,IRETN,IGAMN,
326 : & ICHPSU,ICHPDI,ICHPVO,INORM,
327 : & MELEC,MELEF,MELEFL,DCFL,
328 : & MELLIM,ICHLIM,
329 : & ICHRES)
330 : ELSE
331 : ENDIF
332 : ELSE
333 : C
334 : C******* Creation de B(UN)
335 : C
335 : CALL KRCHP1(TYPE, MELEC, ICHRES, ILIINC)
336 : IF(IERR .NE. 0) GOTO 9999
337 : IF(IDIM .EQ. 2)THEN
337 : CALL KFMM2(IRN,IGN,IRETN,IGAMN,
338 : & ICHPSU,ICHPVO,INORM,
339 : & MELEC,MELEF,MELEFL,
340 : & MELLIM,ICHLIM,
341 : & ICHRES)
342 : ELSE
343 : ENDIF
344 : ENDIF
345 : IF(IERR .NE. 0)GOTO 9999
346 : C
347 : TYPE='CHPOINT '
347 : CALL ECROBJ(TYPE,ICHRES)
348 : C
349 : 9999 CONTINUE
350 : RETURN
351 : END
352 :
353 :
354 :
355 :
356 :
357 :
358 :
359 :
360 :
361 :
362 :
363 :
364 :
© Cast3M 2003 - All rights reserved.
Disclaimer