Télécharger kfm1.eso

Retour à la liste

Numérotation des lignes :

kfm1
  1. C KFM1 SOURCE OF166741 24/12/13 21:16:07 12097
  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. INTEGER ICOEF, IDOMA, IRET, MELEF, MELEC, MELEFL, ICHPSU, INDIC
  114. & , NBCOMP, ICHPDI, IRN, IGN, IRETN, IGAMN, ICHPVO, ILIINC
  115. & , IDU, JGN, JGM, INORM, INEFMD, ICOND, MMODEL
  116. & , ICHLIM, MELLIM, ILIINP, NSOUPO, NJAC, IRES, IPROBL
  117. & , IVCO, MELTFA, ICOEV
  118. C
  119. REAL*8 DCFL, DTPS
  120. C
  121. CHARACTER*4 MOT
  122. CHARACTER*8 TYPE, LJACO(4)
  123. CHARACTER*(40) MESERR
  124. C
  125. DATA LJACO/'PJACO ','LJACOF ','LJACOB ','LJACOFB '/
  126. C
  127. CALL LIRMOT(LJACO,4,ICOEF,1)
  128. IF(IERR .NE. 0)GOTO 9999
  129. C
  130. C**********************************
  131. C**** Lecture de l'objet MODELE ***
  132. C**********************************
  133. C
  134. ICOND = 1
  135. CALL QUETYP(TYPE,ICOND,IRET)
  136.  
  137. IF((IRET.EQ.0).AND.(TYPE.NE.'MMODEL'))THEN
  138. MOTERR(1:40)='MMODEL '
  139. CALL ERREUR(471)
  140. GOTO 9999
  141. ENDIF
  142. CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
  143. IF(IERR.NE.0)GOTO 9999
  144. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  145. IF(IERR.NE.0)GOTO 9999
  146. C
  147. C**** CENTRE, FACE, FACEL, ELTFA
  148. C
  149. CALL LEKTAB(IDOMA,'CENTRE',MELEC)
  150. IF(IERR .NE. 0) GOTO 9999
  151. C
  152. CALL LEKTAB(IDOMA,'FACE',MELEF)
  153. IF(IERR .NE. 0) GOTO 9999
  154. C
  155. CALL LEKTAB(IDOMA,'FACEL',MELEFL)
  156. IF(IERR .NE. 0) GOTO 9999
  157. C
  158. CALL LEKTAB(IDOMA,'ELTFA',MELTFA)
  159. IF(IERR .NE. 0) GOTO 9999
  160. C
  161. C**** Lecture du CHPOINT contenant les surfaces des faces.
  162. C
  163. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  164. IF(IERR .NE. 0) GOTO 9999
  165. INDIC = 1
  166. NBCOMP = 1
  167. MOT = 'SCAL'
  168. CALL QUEPOI(ICHPSU, MELEF, INDIC, NBCOMP, MOT)
  169. IF(IERR .NE. 0) GOTO 9999
  170. C
  171. C**** Lecture du CHPOINT contenant les diametres minimums.
  172. C
  173. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  174. IF(IERR .NE. 0) GOTO 9999
  175. INDIC = 1
  176. NBCOMP = 1
  177. MOT = 'SCAL'
  178. CALL QUEPOI(ICHPDI, MELEC, INDIC, NBCOMP, MOT)
  179. IF(IERR .NE. 0) GOTO 9999
  180.  
  181. C
  182. C**** Lecture du CHPOINT contenant les normales aux faces
  183. C
  184. IF(IDIM .EQ. 2)THEN
  185. C Que les normales
  186. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  187. IF(IERR .NE. 0) GOTO 9999
  188. JGN = 4
  189. JGM = 2
  190. SEGINI MLMVIT
  191. MLMVIT.MOTS(1) = 'UX '
  192. MLMVIT.MOTS(2) = 'UY '
  193. CALL QUEPO1(INORM, MELEF, MLMVIT)
  194. SEGSUP MLMVIT
  195. C
  196. ELSE
  197. C Les normales et les tangentes
  198. TYPE = ' '
  199. CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
  200. IF (TYPE .NE. 'CHPOINT ') THEN
  201. CALL MATRAN(IDOMA,INORM)
  202. IF(IERR .NE. 0) GOTO 9999
  203. ENDIF
  204. JGN = 4
  205. JGM = 9
  206. SEGINI MLMVIT
  207. MLMVIT.MOTS(1) = 'UX '
  208. MLMVIT.MOTS(2) = 'UY '
  209. MLMVIT.MOTS(3) = 'UZ '
  210. MLMVIT.MOTS(4) = 'RX '
  211. MLMVIT.MOTS(5) = 'RY '
  212. MLMVIT.MOTS(6) = 'RZ '
  213. MLMVIT.MOTS(7) = 'MX '
  214. MLMVIT.MOTS(8) = 'MY '
  215. MLMVIT.MOTS(9) = 'MZ '
  216. CALL QUEPO1(INORM, MELEF, MLMVIT)
  217. SEGSUP MLMVIT
  218. ENDIF
  219. C
  220. C**** Lecture du CHPOINT contenant les volumes
  221. C
  222. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  223. IF(IERR .NE. 0) GOTO 9999
  224. INDIC = 1
  225. NBCOMP = 1
  226. MOT = 'SCAL'
  227. CALL QUEPOI(ICHPVO, MELEC, INDIC, NBCOMP, MOT)
  228. IF(IERR .NE. 0) GOTO 9999
  229. C
  230. C********************************
  231. C**** Fin table domaine *********
  232. C********************************
  233. C
  234. C**** La list des inconnues
  235. C
  236. TYPE='LISTMOTS'
  237. CALL LIROBJ(TYPE,ILIINC,1,IRET)
  238. IF(IERR .NE. 0) GOTO 9999
  239. C
  240. C**** On va lire les pointeurs des CHPOINTs
  241. C Lecture du CHPOINT residu
  242. C
  243. TYPE='CHPOINT'
  244. CALL LIROBJ(TYPE,IRES,1,IRET)
  245. IF(IERR.NE.0) GOTO 9999
  246. C
  247. C**** Controle du CHPOINT
  248. C
  249. CALL QUEPO1(IRES, MELEC, ILIINC)
  250. IF(IERR .NE. 0) GOTO 9999
  251. C
  252. C**** On va lire les pointeurs des CHPOINTs
  253. C Lecture du CHPOINT centre densité
  254. C
  255. TYPE='CHPOINT'
  256. CALL LIROBJ(TYPE,IRN,1,IRET)
  257. IF(IERR.NE.0) GOTO 9999
  258. C
  259. C**** Controle du CHPOINT
  260. C
  261. INDIC = 1
  262. NBCOMP = 1
  263. MOT = 'SCAL'
  264. CALL QUEPOI(IRN, MELEC, INDIC, NBCOMP, MOT)
  265. IF(IERR .NE. 0) GOTO 9999
  266. C
  267. C**** Lecture du CHPOINT QDM
  268. C
  269. TYPE='CHPOINT'
  270. CALL LIROBJ(TYPE,IGN,1,IRET)
  271. IF(IERR.NE.0) GOTO 9999
  272. C
  273. C**** Control du CHPOINT
  274. C
  275. INDIC = 1
  276. NBCOMP = IDIM
  277. JGN = 4
  278. JGM = IDIM
  279. SEGINI MLMOTS
  280. MLMOTS.MOTS(1) = 'UX '
  281. MLMOTS.MOTS(2) = 'UY '
  282. IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ '
  283. CALL QUEPO1(IGN, MELEC, MLMOTS)
  284. IF(IERR .NE. 0) GOTO 9999
  285. SEGSUP MLMOTS
  286. C
  287. C**** Lecture du CHPOINT centre energie totale
  288. C
  289. TYPE='CHPOINT'
  290. CALL LIROBJ(TYPE,IRETN,1,IRET)
  291. IF(IERR.NE.0) GOTO 9999
  292. C
  293. C**** Controle du CHPOINT
  294. C
  295. INDIC = 1
  296. NBCOMP = 1
  297. MOT = 'SCAL'
  298. CALL QUEPOI(IRETN, MELEC, INDIC, NBCOMP, MOT)
  299. IF(IERR .NE. 0) GOTO 9999
  300. C
  301. C**** Lecture du CHPOINT centre gamma
  302. C
  303. TYPE='CHPOINT'
  304. CALL LIROBJ(TYPE,IGAMN,1,IRET)
  305. IF(IERR.NE.0) GOTO 9999
  306. C
  307. C**** Controle du CHPOINT
  308. C
  309. INDIC = 1
  310. NBCOMP = 1
  311. MOT = 'SCAL'
  312. CALL QUEPOI(IGAMN, MELEC, INDIC, NBCOMP, MOT)
  313. IF(IERR .NE. 0) GOTO 9999
  314. C
  315. C**** Lecture du CHPOINT centre cutoff speed
  316. C
  317. TYPE='CHPOINT'
  318. CALL LIROBJ(TYPE,IVCO,1,IRET)
  319. IF(IERR.NE.0) GOTO 9999
  320. C
  321. C**** Controle du CHPOINT
  322. C
  323. INDIC = 1
  324. NBCOMP = 1
  325. MOT = 'SCAL'
  326. CALL QUEPOI(IVCO, MELEC, INDIC, NBCOMP, MOT)
  327. IF(IERR .NE. 0) GOTO 9999
  328. C
  329. C**** Lecture de DTPS
  330. C
  331. CALL LIRREE(DTPS,1,IRET)
  332. IF(IERR .NE. 0) GOTO 9999
  333. C
  334. C**** Lecture de le double de la CFL pour le temps dual
  335. C
  336. CALL LIRREE(DCFL,1,IRET)
  337. IF(IERR .NE. 0) GOTO 9999
  338. C
  339. C**** Lecture de nombre d'iterations
  340. C
  341. CALL LIRENT(NJAC,1,IRET)
  342. IF(IERR .NE. 0) GOTO 9999
  343. C
  344. C**** Lecture de conditions aux limites
  345. C
  346. IRET=0
  347. CALL LIRCHA(MOT,0,IRET)
  348. IF(IERR .NE. 0) GOTO 9999
  349. IF(IRET .NE. 0)THEN
  350. IF(MOT .EQ. 'CLIM')THEN
  351. C
  352. TYPE='LISTMOTS'
  353. CALL LIROBJ(TYPE,ILIINP,1,IRET)
  354. IF(IERR .NE. 0) GOTO 9999
  355. MLMOT1=ILIINP
  356. C
  357. TYPE='CHPOINT'
  358. CALL LIROBJ(TYPE,ICHLIM,1,IRET)
  359. IF(IERR.NE.0) GOTO 9999
  360. C
  361. MCHPOI = ICHLIM
  362. SEGACT MCHPOI
  363. NSOUPO = MCHPOI.IPCHP(/1)
  364. IF(NSOUPO .EQ. 0) THEN
  365. ICHLIM=0
  366. MELLIM=0
  367. ELSEIF(NSOUPO .GT. 1)THEN
  368. MOTERR(1:8) = 'CHAMPOIN'
  369. C
  370. C**************** Message d'erreur standard
  371. C 132 2
  372. C On veut un objet %m1:8 élémentaire
  373. C
  374. CALL ERREUR(132)
  375. GOTO 9999
  376. ELSE
  377. MSOUPO=MCHPOI.IPCHP(1)
  378. SEGACT MSOUPO
  379. MELLIM=MSOUPO.IGEOC
  380. SEGDES MSOUPO
  381. SEGDES MCHPOI
  382. CALL QUEPO1(ICHLIM, MELLIM, MLMOT1)
  383. IF(IERR.NE.0) GOTO 9999
  384. ENDIF
  385. C
  386. ELSE
  387. CALL REFUS
  388. ENDIF
  389. ELSE
  390. ICHLIM=0
  391. MELLIM=0
  392. ENDIF
  393. C
  394. C**** Le coeff. pour le calcul du rayon spectral visc.
  395. C
  396. C
  397. TYPE='CHPOINT'
  398. CALL LIROBJ(TYPE,ICOEV,1,IRET)
  399. IF(IERR.NE.0) GOTO 9999
  400. C
  401. C**** Controle du CHPOINT
  402. C
  403. INDIC = 1
  404. NBCOMP = 1
  405. MOT = 'SCAL'
  406. CALL QUEPOI(ICOEV, MELEC, INDIC, NBCOMP, MOT)
  407. IF(IERR .NE. 0) GOTO 9999
  408. C
  409. C**** Calcul de DUN
  410. C
  411. TYPE='CHPOINT'
  412. CALL KRCHP1(TYPE, MELEC, IDU, ILIINC)
  413. C
  414. C*** Choix de la procédure de relaxation (PJ ou SGS)
  415. C
  416. IF(ICOEF .EQ. 1)THEN
  417. IF(IDIM .EQ. 2)THEN
  418. C
  419. C*** Procédure de relaxation PJ
  420. C
  421. CALL KFM11(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  422. & ICHPSU,ICHPDI,ICHPVO,INORM,
  423. & MELEC,MELEF,MELEFL,DTPS,DCFL,
  424. & MELLIM,ICHLIM,NJAC,ICOEV,
  425. & IDU,IPROBL)
  426. IF(IERR .NE. 0)GOTO 9999
  427. ELSE
  428. CALL KFM13(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  429. & ICHPSU,ICHPDI,ICHPVO,INORM,
  430. & MELEC,MELEF,MELEFL,DTPS,DCFL,
  431. & MELLIM,ICHLIM,NJAC,ICOEV,
  432. & IDU,IPROBL)
  433. IF(IERR .NE. 0)GOTO 9999
  434. c 251 2
  435. c Tentative d'utilisation d'une option non implémentée
  436. c CALL ERREUR(251)
  437. c GOTO 9999
  438. ENDIF
  439. ELSE
  440. IF(IDIM .EQ. 2)THEN
  441. C
  442. C*** Procédure de relaxation SGS
  443. C
  444. CALL KFM12(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  445. & ICHPSU,ICHPDI,ICHPVO,INORM,
  446. & MELEC,MELEF,MELEFL,MELTFA,DTPS,DCFL,
  447. & MELLIM,ICHLIM,NJAC,ICOEF,ICOEV,
  448. & IDU,IPROBL)
  449. IF(IERR .NE. 0)GOTO 9999
  450. ELSE
  451. CALL KFM14(IRES,IRN,IGN,IRETN,IGAMN,IVCO,
  452. & ICHPSU,ICHPDI,ICHPVO,INORM,
  453. & MELEC,MELEF,MELEFL,MELTFA,DTPS,DCFL,
  454. & MELLIM,ICHLIM,NJAC,ICOEF,ICOEV,
  455. & IDU,IPROBL)
  456. C 251 2
  457. C Tentative d'utilisation d'une option non implémentée
  458. C CALL ERREUR(251)
  459. C GOTO 9999
  460. ENDIF
  461. ENDIF
  462. C
  463. CALL ECRENT(IPROBL)
  464. TYPE='CHPOINT '
  465. CALL ECROBJ(TYPE,IDU)
  466. C
  467. 9999 CONTINUE
  468. RETURN
  469. END
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  

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