Télécharger kfm1.eso

Retour à la liste

Numérotation des lignes :

kfm1
  1. C KFM1 SOURCE CB215821 20/11/25 13:31:11 10792
  2. SUBROUTINE KFM1
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : KFM1
  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, un jacobi par ligne,
  15. C un jacobi avec 2 sweeps
  16. C
  17. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  18. C
  19. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF
  20. C
  21. C************************************************************************
  22. C
  23. C APPELES (Calcul) :
  24. C
  25. C************************************************************************
  26. C
  27. C*** SYNTAXE
  28. C
  29. C Discrétisation en VF "cell-centered" des équations d'Euler pour
  30. C un gaz parfait mono-constituent polytropique
  31. C Inconnues: densité, quantité de mouvement, énergie totale par
  32. C unité de volumes (variables conservatives UN)
  33. C
  34. C A(UN) '*' DUN_L = RES(UN) + B(UN) - B(UN_L)
  35. C
  36. C ou
  37. C
  38. C RES(UN) est calculé avec ('KONV' 'VF' 'PERFMONO')
  39. C UN_0 = UN
  40. C UN_L = UN + DUN_L
  41. C
  42. C Ici on calcule DU
  43. C
  44. C DUN = 'KONV' 'VF' 'PMON1FMM' 'JACOBI' LMOT1
  45. C MOD1 MCHPO0 MCHPO1 MCHPO2 MCHPO3 MCHPO4 FLOT0 FLOT1
  46. C ENT1 ('CLIM' LMOT2 MCHPO5 MCHPO7) MCHPO6 ;
  47. C
  48. C
  49. C LMOT1 : Il contient dans l'ordre suivant: le noms de la densité,
  50. C de la qdm, de l'énergie totale par unité de volume
  51. C
  52. C MOD1 : objet modele de type EULER
  53. C
  54. C MCHPO0 : CHPOINT contenant le residu explicite; composantes =
  55. C LMOT1, SPG = (DOMA MOD1 'CENTRE').
  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 FLOT0 : pas de temps physique
  74. C
  75. C FLOT1 : facteur de securité (double de la CFL) pour le pas de temps
  76. C dual
  77. C
  78. C ENT1 : iterations dans le jacobi
  79. C
  80. C MCHPO5 : CHPOINT contenant les conditions aux limites
  81. C (composantes en LMOT2).
  82. C
  83. C MCHPO6 : CHPOINT contenant le coeff pour le calcul du rayon
  84. C spectral visc. (une composante,
  85. C 'SCAL', SPG =(DOMA MOD1 'CENTRE')).
  86. C
  87. C MCHPO7 : CHPOINT contenant les types de conditions aux limites
  88. C
  89. C************************************************************************
  90. C
  91. C HISTORIQUE (Anomalies et modifications éventuelles)
  92. C
  93. C HISTORIQUE : crée le 30/04/02
  94. C Janvier 2003: implementation de condition aux limites
  95. C
  96. C HISTORIQUE : rajouts par T. KLOCZKO entre 2003 et 2006
  97. C
  98. C Deux types de méthodes de relaxation disponibles
  99. C
  100. C - Point Jacobi ou PJ (kfm11.eso (2D) et kfm13.eso (3D))
  101. C - Symmetric Gauss-Seidel ou SGS (kfm12.eso (2D) et kfm14.eso (3D))
  102. C
  103. C************************************************************************
  104. C
  105. IMPLICIT INTEGER(I-N)
  106.  
  107. -INC PPARAM
  108. -INC CCOPTIO
  109. -INC SMLMOTS
  110. -INC SMCHPOI
  111. POINTEUR MLMVIT.MLMOTS
  112. C
  113. C**** Variables de COOPTIO
  114. C
  115. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  116. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  117. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  118. C & ,IECHO, IIMPI, IOSPI
  119. C & ,IDIM
  120. C & ,MCOORD
  121. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  122. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  123. C & ,NORINC,NORVAL,NORIND,NORVAD
  124. C & ,NUCROU, IPSAUV, IFICLE, IPREFI, IREFOR, ISAFOR
  125. CC
  126. INTEGER ICOEF, IDOMA, IRET, MELEF, MELEC, MELEFL, ICHPSU, INDIC
  127. & , NBCOMP, ICHPDI, IRN, IGN, IRETN, IGAMN, ICHPVO, ILIINC
  128. & , IDU, JGN, JGM, INORM, INEFMD, ICOND, MMODEL
  129. & , ICHLIM, MELLIM, ILIINP, NSOUPO, NJAC, IRES, IPROBL
  130. & , IVCO, MELTFA, ICOEV
  131. C
  132. REAL*8 DCFL, DTPS
  133. C
  134. CHARACTER*4 MOT
  135. CHARACTER*8 TYPE, LJACO(4)
  136. CHARACTER*(40) MESERR
  137. C
  138. DATA LJACO/'PJACO ','LJACOF ','LJACOB ','LJACOFB '/
  139. C
  140. CALL LIRMOT(LJACO,4,ICOEF,1)
  141. IF(IERR .NE. 0)GOTO 9999
  142. C
  143. C**********************************
  144. C**** Lecture de l'objet MODELE ***
  145. C**********************************
  146. C
  147. ICOND = 1
  148. CALL QUETYP(TYPE,ICOND,IRET)
  149.  
  150. IF((IRET.EQ.0).AND.(TYPE.NE.'MMODEL'))THEN
  151. MOTERR(1:40)='MMODEL '
  152. CALL ERREUR(471)
  153. GOTO 9999
  154. ENDIF
  155. CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
  156. IF(IERR.NE.0)GOTO 9999
  157. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  158. IF(IERR.NE.0)GOTO 9999
  159. C
  160. C**** CENTRE, FACE, FACEL, ELTFA
  161. C
  162. CALL LEKTAB(IDOMA,'CENTRE',MELEC)
  163. IF(IERR .NE. 0) GOTO 9999
  164. C
  165. CALL LEKTAB(IDOMA,'FACE',MELEF)
  166. IF(IERR .NE. 0) GOTO 9999
  167. C
  168. CALL LEKTAB(IDOMA,'FACEL',MELEFL)
  169. IF(IERR .NE. 0) GOTO 9999
  170. C
  171. CALL LEKTAB(IDOMA,'ELTFA',MELTFA)
  172. IF(IERR .NE. 0) GOTO 9999
  173. C
  174. C**** Lecture du CHPOINT contenant les surfaces des faces.
  175. C
  176. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  177. IF(IERR .NE. 0) GOTO 9999
  178. INDIC = 1
  179. NBCOMP = 1
  180. MOT = 'SCAL'
  181. CALL QUEPOI(ICHPSU, MELEF, INDIC, NBCOMP, MOT)
  182. IF(IERR .NE. 0) GOTO 9999
  183. C
  184. C**** Lecture du CHPOINT contenant les diametres minimums.
  185. C
  186. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  187. IF(IERR .NE. 0) GOTO 9999
  188. INDIC = 1
  189. NBCOMP = 1
  190. MOT = 'SCAL'
  191. CALL QUEPOI(ICHPDI, MELEC, INDIC, NBCOMP, MOT)
  192. IF(IERR .NE. 0) GOTO 9999
  193.  
  194. C
  195. C**** Lecture du CHPOINT contenant les normales aux faces
  196. C
  197. IF(IDIM .EQ. 2)THEN
  198. C Que les normales
  199. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  200. IF(IERR .NE. 0) GOTO 9999
  201. JGN = 4
  202. JGM = 2
  203. SEGINI MLMVIT
  204. MLMVIT.MOTS(1) = 'UX '
  205. MLMVIT.MOTS(2) = 'UY '
  206. CALL QUEPO1(INORM, MELEF, MLMVIT)
  207. SEGSUP MLMVIT
  208. C
  209. ELSE
  210. C Les normales et les tangentes
  211. TYPE = ' '
  212. CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
  213. IF (TYPE .NE. 'CHPOINT ') THEN
  214. CALL MATRAN(IDOMA,INORM)
  215. IF(IERR .NE. 0) GOTO 9999
  216. ENDIF
  217. JGN = 4
  218. JGM = 9
  219. SEGINI MLMVIT
  220. MLMVIT.MOTS(1) = 'UX '
  221. MLMVIT.MOTS(2) = 'UY '
  222. MLMVIT.MOTS(3) = 'UZ '
  223. MLMVIT.MOTS(4) = 'RX '
  224. MLMVIT.MOTS(5) = 'RY '
  225. MLMVIT.MOTS(6) = 'RZ '
  226. MLMVIT.MOTS(7) = 'MX '
  227. MLMVIT.MOTS(8) = 'MY '
  228. MLMVIT.MOTS(9) = 'MZ '
  229. CALL QUEPO1(INORM, MELEF, MLMVIT)
  230. SEGSUP MLMVIT
  231. ENDIF
  232. C
  233. C**** Lecture du CHPOINT contenant les volumes
  234. C
  235. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  236. IF(IERR .NE. 0) GOTO 9999
  237. INDIC = 1
  238. NBCOMP = 1
  239. MOT = 'SCAL'
  240. CALL QUEPOI(ICHPVO, MELEC, INDIC, NBCOMP, MOT)
  241. IF(IERR .NE. 0) GOTO 9999
  242. C
  243. C********************************
  244. C**** Fin table domaine *********
  245. C********************************
  246. C
  247. C**** La list des inconnues
  248. C
  249. TYPE='LISTMOTS'
  250. CALL LIROBJ(TYPE,ILIINC,1,IRET)
  251. IF(IERR .NE. 0) GOTO 9999
  252. C
  253. C**** On va lire les pointeurs des CHPOINTs
  254. C Lecture du CHPOINT residu
  255. C
  256. TYPE='CHPOINT'
  257. CALL LIROBJ(TYPE,IRES,1,IRET)
  258. IF(IERR.NE.0) GOTO 9999
  259. C
  260. C**** Controle du CHPOINT
  261. C
  262. CALL QUEPO1(IRES, MELEC, ILIINC)
  263. IF(IERR .NE. 0) GOTO 9999
  264. C
  265. C**** On va lire les pointeurs des CHPOINTs
  266. C Lecture du CHPOINT centre densité
  267. C
  268. TYPE='CHPOINT'
  269. CALL LIROBJ(TYPE,IRN,1,IRET)
  270. IF(IERR.NE.0) GOTO 9999
  271. C
  272. C**** Controle du CHPOINT
  273. C
  274. INDIC = 1
  275. NBCOMP = 1
  276. MOT = 'SCAL'
  277. CALL QUEPOI(IRN, MELEC, INDIC, NBCOMP, MOT)
  278. IF(IERR .NE. 0) GOTO 9999
  279. C
  280. C**** Lecture du CHPOINT QDM
  281. C
  282. TYPE='CHPOINT'
  283. CALL LIROBJ(TYPE,IGN,1,IRET)
  284. IF(IERR.NE.0) GOTO 9999
  285. C
  286. C**** Control du CHPOINT
  287. C
  288. INDIC = 1
  289. NBCOMP = IDIM
  290. JGN = 4
  291. JGM = IDIM
  292. SEGINI MLMOTS
  293. MLMOTS.MOTS(1) = 'UX '
  294. MLMOTS.MOTS(2) = 'UY '
  295. IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ '
  296. CALL QUEPO1(IGN, MELEC, MLMOTS)
  297. IF(IERR .NE. 0) GOTO 9999
  298. SEGSUP MLMOTS
  299. C
  300. C**** Lecture du CHPOINT centre energie totale
  301. C
  302. TYPE='CHPOINT'
  303. CALL LIROBJ(TYPE,IRETN,1,IRET)
  304. IF(IERR.NE.0) GOTO 9999
  305. C
  306. C**** Controle du CHPOINT
  307. C
  308. INDIC = 1
  309. NBCOMP = 1
  310. MOT = 'SCAL'
  311. CALL QUEPOI(IRETN, MELEC, INDIC, NBCOMP, MOT)
  312. IF(IERR .NE. 0) GOTO 9999
  313. C
  314. C**** Lecture du CHPOINT centre gamma
  315. C
  316. TYPE='CHPOINT'
  317. CALL LIROBJ(TYPE,IGAMN,1,IRET)
  318. IF(IERR.NE.0) GOTO 9999
  319. C
  320. C**** Controle du CHPOINT
  321. C
  322. INDIC = 1
  323. NBCOMP = 1
  324. MOT = 'SCAL'
  325. CALL QUEPOI(IGAMN, MELEC, INDIC, NBCOMP, MOT)
  326. IF(IERR .NE. 0) GOTO 9999
  327. C
  328. C**** Lecture du CHPOINT centre cutoff speed
  329. C
  330. TYPE='CHPOINT'
  331. CALL LIROBJ(TYPE,IVCO,1,IRET)
  332. IF(IERR.NE.0) GOTO 9999
  333. C
  334. C**** Controle du CHPOINT
  335. C
  336. INDIC = 1
  337. NBCOMP = 1
  338. MOT = 'SCAL'
  339. CALL QUEPOI(IVCO, MELEC, INDIC, NBCOMP, MOT)
  340. IF(IERR .NE. 0) GOTO 9999
  341. C
  342. C**** Lecture de DTPS
  343. C
  344. CALL LIRREE(DTPS,1,IRET)
  345. IF(IERR .NE. 0) GOTO 9999
  346. C
  347. C**** Lecture de le double de la CFL pour le temps dual
  348. C
  349. CALL LIRREE(DCFL,1,IRET)
  350. IF(IERR .NE. 0) GOTO 9999
  351. C
  352. C**** Lecture de nombre d'iterations
  353. C
  354. CALL LIRENT(NJAC,1,IRET)
  355. IF(IERR .NE. 0) GOTO 9999
  356. C
  357. C**** Lecture de conditions aux limites
  358. C
  359. IRET=0
  360. CALL LIRCHA(MOT,0,IRET)
  361. IF(IERR .NE. 0) GOTO 9999
  362. IF(IRET .NE. 0)THEN
  363. IF(MOT .EQ. 'CLIM')THEN
  364. C
  365. TYPE='LISTMOTS'
  366. CALL LIROBJ(TYPE,ILIINP,1,IRET)
  367. IF(IERR .NE. 0) GOTO 9999
  368. MLMOT1=ILIINP
  369. C
  370. TYPE='CHPOINT'
  371. CALL LIROBJ(TYPE,ICHLIM,1,IRET)
  372. IF(IERR.NE.0) GOTO 9999
  373. C
  374. MCHPOI = ICHLIM
  375. SEGACT MCHPOI
  376. NSOUPO = MCHPOI.IPCHP(/1)
  377. IF(NSOUPO .EQ. 0) THEN
  378. ICHLIM=0
  379. MELLIM=0
  380. ELSEIF(NSOUPO .GT. 1)THEN
  381. MOTERR(1:8) = 'CHAMPOIN'
  382. C
  383. C**************** Message d'erreur standard
  384. C 132 2
  385. C On veut un objet %m1:8 élémentaire
  386. C
  387. CALL ERREUR(132)
  388. GOTO 9999
  389. ELSE
  390. MSOUPO=MCHPOI.IPCHP(1)
  391. SEGACT MSOUPO
  392. MELLIM=MSOUPO.IGEOC
  393. SEGDES MSOUPO
  394. SEGDES MCHPOI
  395. CALL QUEPO1(ICHLIM, MELLIM, MLMOT1)
  396. IF(IERR.NE.0) GOTO 9999
  397. ENDIF
  398. C
  399. ELSE
  400. CALL REFUS
  401. ENDIF
  402. ELSE
  403. ICHLIM=0
  404. MELLIM=0
  405. ENDIF
  406. C
  407. C**** Le coeff. pour le calcul du rayon spectral visc.
  408. C
  409. C
  410. TYPE='CHPOINT'
  411. CALL LIROBJ(TYPE,ICOEV,1,IRET)
  412. IF(IERR.NE.0) GOTO 9999
  413. C
  414. C**** Controle du CHPOINT
  415. C
  416. INDIC = 1
  417. NBCOMP = 1
  418. MOT = 'SCAL'
  419. CALL QUEPOI(ICOEV, MELEC, INDIC, NBCOMP, MOT)
  420. IF(IERR .NE. 0) GOTO 9999
  421. C
  422. C**** Calcul de DUN
  423. C
  424. TYPE='CHPOINT'
  425. CALL KRCHP1(TYPE, MELEC, IDU, ILIINC)
  426. C
  427. C*** Choix de la procédure de relaxation (PJ ou SGS)
  428. C
  429. IF(ICOEF .EQ. 1)THEN
  430. IF(IDIM .EQ. 2)THEN
  431. C
  432. C*** Procédure de relaxation PJ
  433. C
  434. CALL KFM11(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  435. & ICHPSU,ICHPDI,ICHPVO,INORM,
  436. & MELEC,MELEF,MELEFL,DTPS,DCFL,
  437. & MELLIM,ICHLIM,NJAC,ICOEV,
  438. & IDU,IPROBL)
  439. IF(IERR .NE. 0)GOTO 9999
  440. ELSE
  441. CALL KFM13(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  442. & ICHPSU,ICHPDI,ICHPVO,INORM,
  443. & MELEC,MELEF,MELEFL,DTPS,DCFL,
  444. & MELLIM,ICHLIM,NJAC,ICOEV,
  445. & IDU,IPROBL)
  446. IF(IERR .NE. 0)GOTO 9999
  447. c 251 2
  448. c Tentative d'utilisation d'une option non implémentée
  449. c CALL ERREUR(251)
  450. c GOTO 9999
  451. ENDIF
  452. ELSE
  453. IF(IDIM .EQ. 2)THEN
  454. C
  455. C*** Procédure de relaxation SGS
  456. C
  457. CALL KFM12(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  458. & ICHPSU,ICHPDI,ICHPVO,INORM,
  459. & MELEC,MELEF,MELEFL,MELTFA,DTPS,DCFL,
  460. & MELLIM,ICHLIM,NJAC,ICOEF,ICOEV,
  461. & IDU,IPROBL)
  462. IF(IERR .NE. 0)GOTO 9999
  463. ELSE
  464. CALL KFM14(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  465. & ICHPSU,ICHPDI,ICHPVO,INORM,
  466. & MELEC,MELEF,MELEFL,MELTFA,DTPS,DCFL,
  467. & MELLIM,ICHLIM,NJAC,ICOEF,ICOEV,
  468. & IDU,IPROBL)
  469. C 251 2
  470. C Tentative d'utilisation d'une option non implémentée
  471. C CALL ERREUR(251)
  472. C GOTO 9999
  473. ENDIF
  474. ENDIF
  475. C
  476. CALL ECRENT(IPROBL)
  477. TYPE='CHPOINT '
  478. CALL ECROBJ(TYPE,IDU)
  479. C
  480. 9999 CONTINUE
  481. RETURN
  482. END
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales