Télécharger konv2f.eso

Retour à la liste

Numérotation des lignes :

konv2f
  1. C KONV2F SOURCE CB215821 20/11/25 13:32:42 10792
  2. SUBROUTINE KONV2F()
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : KONV2F
  8. C
  9. C DESCRIPTION : Subroutine appellée par KONV1
  10. C
  11. C Modelling of Two Phase Flow
  12. C (two fluid model, mixtures of water and air)
  13. C
  14. C Calcul du residu / jacobien / DELTAT
  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 Modified for two phase flow by
  20. C Jose R. Garcia-Cascales,
  21. C Universidad Politecnica de Cartagena,
  22. C jr.garcia@upct.es
  23. C************************************************************************
  24. C
  25. C APPELES (Calcul) : KONFL8 (2D, two fluid flow)
  26. C KONFL9 (3D, two fluid flow)
  27. C
  28. C************************************************************************
  29. C
  30. C*** SYNTAXE
  31. C FV Discretization of the Two Phase Flow system of equations
  32. C Unknown: mass flow rate, momentum and total energy per unit volume of
  33. C each phase (conservative variables)
  34. C
  35. C
  36. C RMAT1 RCHPO1 RFLOT1 = 'KONV' 'VF' 'PERFMONO' MOT1 MOT2
  37. C TABD LMOT1
  38. C MCHAM1 MCHAM2 MCHAM3 MCHAM4
  39. C MCHAM5 MCHAM6 MCHAM7 MCHAM8
  40. C (MOT3 CHPO1 CHPO2 CHPO3 CHPO5) ;
  41. C
  42. C ENTREES
  43. C
  44. C
  45. C MOT1 : objet de type MOT
  46. C Il vaut 'RESI' si on veut calculer le résidu
  47. C Il vaut 'FLUX' si on veut calculer le flux
  48. C
  49. C MOT2 : objet de type MOT
  50. C Il indique la méthode de décentrement:
  51. C 'AUSMP1' = AUSM +
  52. C 'AUSMP2' = Preconditioned AUSM +
  53. C 'AUSMDV1'= AUSMDV
  54. C 'AUSMDV2'= Preconditioned AUSMDV
  55. C
  56. C LMOT1 : objet de type LISTMOTS
  57. C Noms de composantes du résultat (RCHPO1)
  58. C Il contient dans l'ordre suivant: le noms de la densité,
  59. C de la vitesse, de l'énergie totale par unité de volume
  60. C
  61. C TAB1 : la table domaine
  62. C
  63. C MCHAM1 : MCHAML containing void fraction
  64. C SPG (support géométrique) l'indice 'FACEL' de
  65. C TAB1 (une composante, 'SCAL')
  66. C
  67. C MCHAM2 : MCHAML vapour velocity and director cosines
  68. C du repère locale (n,t) dans le repère
  69. C global (x,y) (dans le cas 2D 6 composantes:
  70. C * 'UN' = vitesse normale (SPG = TAB1 . 'FACEL')
  71. C * 'UT' = vitesse tangentielle (SPG = 'TAB1 . FACEL')
  72. C * 'NX' = n.x (SPG = 'FACE')
  73. C * 'NY' = n.y (SPG = 'FACE')
  74. C * 'TX' = t.x (SPG = 'FACE')
  75. C * 'TY' = t.y (SPG = 'FACE')).
  76. C MCHAM3 : MCHAML liquid velocity and director cosines
  77. C du repère locale (n,t) dans le repère
  78. C global (x,y) (dans le cas 2D 6 composantes:
  79. C * 'UN' = vitesse normale (SPG = TAB1 . 'FACEL')
  80. C * 'UT' = vitesse tangentielle (SPG = 'TAB1 . FACEL')
  81. C * 'NX' = n.x (SPG = 'FACE')
  82. C * 'NY' = n.y (SPG = 'FACE')
  83. C * 'TX' = t.x (SPG = 'FACE')
  84. C * 'TY' = t.y (SPG = 'FACE')).
  85. C
  86. C MCHAM4 : MCHAML (SPG = TAB1 . 'FACEL') containing pressure
  87. C une seule composante, 'SCAL').
  88. C
  89. C MCHAM5 : MCHAML (SPG = TAB1 . 'FACEL') contaning gas/vapour temperature
  90. C (une seule composante, 'SCAL').
  91. C
  92. C MCHAM6 : MCHAML (SPG = TAB1 . 'FACEL') contaning liquid temperature
  93. C (une seule composante, 'SCAL').
  94. C
  95. C MCHAM7 : MCHAML (SPG = TAB1 . 'FACEL') contaning gas/vapour density
  96. C (une seule composante, 'SCAL').
  97. C
  98. C MCHAM8 : MCHAML (SPG = TAB1 . 'FACEL') contaning liquid density
  99. C (une seule composante, 'SCAL').
  100. C
  101. C RCHPO1 : objet de type CHPOINT (composantes = LMOT1)
  102. C Residu si MOT2 = 'RESI' (SPG = TAB1 . 'CENTRE')
  103. C Flux si MOT2 = 'FLUX' (SPG = TAB1 . 'FACE')
  104. C
  105. C RFLOT1 : objet de type FLOTTANT
  106. C Il est le temps caracteristique associé à l'onde la plus
  107. C rapide.
  108. C
  109. C Remarque
  110. C --------
  111. C
  112. C RCHPO1 est égal à:
  113. C * la derivé temporelle des inconnues si l'option 'RESI' est utilisée
  114. C * la projection du flux convectif sur (TAB1 . 'XXNORMAF') si
  115. C l'option 'FLUX' est utilisée
  116. C
  117. C***********************************************************************
  118. C
  119. C************************************************************************
  120. C
  121. C HISTORIQUE (Anomalies et modifications éventuelles)
  122. C
  123. C HISTORIQUE :
  124. C
  125. C************************************************************************
  126. C
  127. IMPLICIT INTEGER(I-N)
  128. IMPLICIT REAL*8(A-H,O-Z)
  129.  
  130. -INC PPARAM
  131. -INC CCOPTIO
  132. -INC SMLMOTS
  133. -INC SMCHPOI
  134. POINTEUR MLMVIT.MLMOTS,MLMOTY.MLMOTS
  135. C
  136. INTEGER IDOMA, MELEMC, MELEMF, MELEFE, ICHPSU, ICHPDI , ICHPVO
  137. & , MELTFA, NBMET, INDMET, IRET, NBJAC
  138. & , IAIF, IALPF, IUVF, IULF, IPF, ITVF, ITLF
  139. & , IRVF, IRLF, IFRMAF
  140. & , ILIINC, NC, ICELL
  141. & , INDIC, NBCOMP, IJACO
  142. & , NKID, NKMT, NMATRI, NRIGE
  143. & , JGM, JGN, INORM, IIMPL
  144. & , ICHFLU, ICHRES
  145.  
  146. C
  147. PARAMETER (NBMET=4,NBJAC=5)
  148. REAL*8 DT
  149. CHARACTER*8 LMETO(NBMET), TYPE, LJACO(NBJAC)
  150. CHARACTER*4 MOT, LFLUX(2)
  151. CHARACTER*(40) MESERR
  152. LOGICAL LOGNC, LOGAN, LOGRES
  153. C**** Depending on if we want to use AUSM+, AUSM+ with "preconditioning",
  154. C AUSMDV or AUSMDV with "preconditioning" we have respectively
  155. DATA LMETO/'AUSMP1','AUSMP2','AUSMDV1','AUSMDV2'/
  156. C**** Option not implemented yet
  157. DATA LJACO/'VLHJACO1','AUSMJAC1','AUSMLMJ1','VLHJACO2',
  158. & 'AUSMJAC2'/
  159. C**** If we want flux or residual
  160. DATA LFLUX/'FLUX','RESI'/
  161. C
  162. C**** Initialisation des variables pour la gestion des erreurs.
  163. C
  164. LOGNC = .FALSE.
  165. LOGAN = .FALSE.
  166. LOGRES = .FALSE.
  167. MESERR = ' '
  168. C
  169. C******* Flux ou residu???
  170. C
  171. CALL LIRMOT(LFLUX,2,ICELL,1)
  172. IF(IERR .NE. 0)GOTO 9999
  173. IF(ICELL .EQ. 1)THEN
  174. LOGRES = .FALSE.
  175. ELSEIF(ICELL .EQ. 2)THEN
  176. LOGRES = .TRUE.
  177. ELSE
  178. C
  179. C******** Message d'erreur standard
  180. C 251 2
  181. C Tentative d'utilisation d'une option non implémentée
  182. C
  183. CALL ERREUR(251)
  184. ENDIF
  185. C
  186. C**** Metode utilisée
  187. C
  188. CALL LIRMOT(LMETO,NBMET,INDMET,1)
  189. IF(IERR .NE. 0)GOTO 9999
  190. IF(INDMET .EQ. 0)THEN
  191. C
  192. C******** Message d'erreur standard
  193. C 251 2
  194. C Tentative d'utilisation d'une option non implémentée
  195. C
  196. CALL ERREUR(251)
  197. ENDIF
  198. C
  199. C*******************************
  200. C**** La table domaine *********
  201. C*******************************
  202. C
  203. CALL LIROBJ('TABLE',IDOMA,1,IRET)
  204. IF(IERR .NE. 0)GOTO 9999
  205. C
  206. C**** Centre, FACE, FACEL, ELTFA
  207. C
  208. CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
  209. IF(IERR .NE. 0) GOTO 9999
  210. C
  211. CALL LEKTAB(IDOMA,'FACE',MELEMF)
  212. IF(IERR .NE. 0) GOTO 9999
  213. C
  214. CALL LEKTAB(IDOMA,'FACEL',MELEFE)
  215. IF(IERR .NE. 0) GOTO 9999
  216. C
  217. CALL LEKTAB(IDOMA,'ELTFA',MELTFA)
  218. IF(IERR .NE. 0) GOTO 9999
  219. C
  220. C**** Lecture du CHPOINT contenant les surfaces des faces.
  221. C
  222. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  223. IF(IERR .NE. 0) GOTO 9999
  224. INDIC = 1
  225. NBCOMP = 1
  226. MOT = 'SCAL'
  227. CALL QUEPOI(ICHPSU, MELEMF, INDIC, NBCOMP, MOT)
  228. IF(IERR .NE. 0) GOTO 9999
  229. C
  230. C**** Lecture du CHPOINT contenant les diametres minimums.
  231. C
  232. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  233. IF(IERR .NE. 0) GOTO 9999
  234. INDIC = 1
  235. NBCOMP = 1
  236. MOT = 'SCAL'
  237. CALL QUEPOI(ICHPDI, MELEMC, INDIC, NBCOMP, MOT)
  238. IF(IERR .NE. 0) GOTO 9999
  239.  
  240. C
  241. C**** Lecture du CHPOINT contenant les volumes
  242. C
  243. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  244. IF(IERR .NE. 0) GOTO 9999
  245. INDIC = 1
  246. NBCOMP = 1
  247. MOT = 'SCAL'
  248. CALL QUEPOI(ICHPVO, MELEMC, INDIC, NBCOMP, MOT)
  249. IF(IERR .NE. 0) GOTO 9999
  250. C
  251. C**** Les normales aux faces
  252. C
  253. IF(IDIM .EQ. 2)THEN
  254. C Que les normales
  255. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  256. IF(IERR .NE. 0) GOTO 9999
  257. JGN = 4
  258. JGM = 2
  259. SEGINI MLMVIT
  260. MLMVIT.MOTS(1) = 'UX '
  261. MLMVIT.MOTS(2) = 'UY '
  262. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  263. SEGSUP MLMVIT
  264. IF(IERR .NE. 0) GOTO 9999
  265. C De momento solo 2D
  266. ELSE
  267. C Les normales et les tangentes
  268. TYPE = ' '
  269. CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
  270. IF (TYPE .NE. 'CHPOINT ') THEN
  271. CALL MATRAN(IDOMA,INORM)
  272. IF(IERR .NE. 0) GOTO 9999
  273. ENDIF
  274. JGN = 4
  275. JGM = 9
  276. SEGINI MLMVIT
  277. MLMVIT.MOTS(1) = 'UX '
  278. MLMVIT.MOTS(2) = 'UY '
  279. MLMVIT.MOTS(3) = 'UZ '
  280. MLMVIT.MOTS(4) = 'RX '
  281. MLMVIT.MOTS(5) = 'RY '
  282. MLMVIT.MOTS(6) = 'RZ '
  283. MLMVIT.MOTS(7) = 'MX '
  284. MLMVIT.MOTS(8) = 'MY '
  285. MLMVIT.MOTS(9) = 'MZ '
  286. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  287. SEGSUP MLMVIT
  288. ENDIF
  289. C
  290. C********************************
  291. C**** Fin table domaine *********
  292. C********************************
  293. C
  294. C
  295. C**** On va lire les pointeurs des MCHAMLs
  296. C Reading the MCHAML 'FACEL' containig void fraction
  297. C
  298. TYPE='MCHAML '
  299. CALL LIROBJ(TYPE,IALPF,1,IRET)
  300. IF(IERR.NE.0) GOTO 9999
  301. C
  302. C**** Reading the MCHAML 'FACEL' containing vapour velocity
  303. C
  304. TYPE='MCHAML '
  305. CALL LIROBJ(TYPE,IUVF,1,IRET)
  306. IF(IERR .NE. 0) GOTO 9999
  307. C
  308. C**** Reading the MCHAML 'FACEL' containing liquid velocity
  309. C
  310. TYPE='MCHAML '
  311. CALL LIROBJ(TYPE,IULF,1,IRET)
  312. IF(IERR .NE. 0) GOTO 9999
  313. C
  314. C**** Reading the MCHAML 'FACEL' containing pressure
  315. C
  316. TYPE='MCHAML '
  317. CALL LIROBJ(TYPE,IPF,1,IRET)
  318. IF(IERR .NE. 0) GOTO 9999
  319. C
  320. C**** Reading the MCHAML 'FACEL' containing vapour temperature
  321. C
  322. TYPE='MCHAML '
  323. CALL LIROBJ(TYPE,ITVF,1,IRET)
  324. IF(IERR .NE. 0) GOTO 9999
  325. C
  326. C**** Reading the MCHAML 'FACEL' containing liquid temperature
  327. C
  328. TYPE='MCHAML '
  329. CALL LIROBJ(TYPE,ITLF,1,IRET)
  330. IF(IERR .NE. 0) GOTO 9999
  331. C
  332. C**** Reading the MCHAML 'FACEL' containing vapour density
  333. C
  334. TYPE='MCHAML '
  335. CALL LIROBJ(TYPE,IRVF,1,IRET)
  336. IF(IERR .NE. 0) GOTO 9999
  337. C
  338. C**** Reading the MCHAML 'FACEL' containing liquid density
  339. C
  340. TYPE='MCHAML '
  341. CALL LIROBJ(TYPE,IRLF,1,IRET)
  342. IF(IERR .NE. 0) GOTO 9999
  343.  
  344. C
  345. C**** La list des inconnues
  346. C
  347. TYPE='LISTMOTS'
  348. CALL LIROBJ(TYPE,ILIINC,1,IRET)
  349. IF(IERR .NE. 0) GOTO 9999
  350. MLMOTS = ILIINC
  351. SEGACT MLMOTS
  352. NC = MLMOTS.MOTS(/2)
  353. SEGDES MLMOTS
  354. IF(IDIM .EQ. 3)THEN
  355. C*** In 3D we have 10 equations
  356. NUMEQ = IDIM + 7
  357. ELSE
  358. C*** In 2D we have 8 equations
  359. NUMEQ = IDIM + 6
  360. END IF
  361. IF(NC .NE. NUMEQ)THEN
  362. MOTERR(1:40) = 'LISTINCO = ???'
  363. write(*,*) NC
  364. WRITE(IOIMP,*) MOTERR
  365. C
  366. C******* Message d'erreur standard
  367. C 21 2
  368. C Données incompatibles
  369. C
  370. CALL ERREUR(21)
  371. GOTO 9999
  372. ENDIF
  373. C
  374. C**** Implicite ?
  375. C
  376. CALL LIRMOT(LJACO,NBJAC,IIMPL,0)
  377. IF(IERR .NE. 0)GOTO 9999
  378.  
  379. C For the moment we only have explicit
  380. C
  381. C
  382. IF(IIMPL .EQ. 0)THEN
  383. C
  384. C******** Objet matrik vide
  385. C
  386. NRIGE=7
  387. NMATRI=0
  388. NKID =9
  389. NKMT =7
  390. SEGINI MATRIK
  391. SEGDES MATRIK
  392. IJACO = MATRIK
  393. ELSE
  394. C Tentative d'utilisation d'une option non implémentée
  395. CALL ERREUR(251)
  396. GOTO 9999
  397. ENDIF
  398. C
  399. C**** Creation des flux aux interfaces
  400. C
  401. TYPE = 'CHPOINT '
  402. CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMOTS)
  403. C
  404. C
  405. C**** Calcul des flux et du pas du temps.
  406. C
  407. IF(IDIM .EQ. 2)THEN
  408. CALL KONF21(INDMET,
  409. & IALPF,IUVF,IULF,IPF,
  410. & ITVF,ITLF,IRVF,IRLF,
  411. & ICHPSU,ICHPDI,
  412. & MELEMC,MELEMF,MELEFE,
  413. & ICHFLU,
  414. & DT,
  415. & LOGNC,LOGAN,MESERR)
  416. ELSEIF(IDIM .EQ. 3)THEN
  417. CALL KONF22(INDMET,
  418. & IALPF,IUVF,IULF,IPF,
  419. & ITVF,ITLF,IRVF,IRLF,
  420. & ICHPSU,ICHPDI,
  421. & MELEMC,MELEMF,MELEFE,
  422. & ICHFLU,DT,
  423. & LOGNC,LOGAN,MESERR)
  424. ELSE
  425. C Erreur anormale.contactez votre support
  426. C Dimension has to be 2 or 3
  427. CALL ERREUR(5)
  428. GOTO 9999
  429. ENDIF
  430. C
  431. IF(LOGAN)THEN
  432. C
  433. C******* Anomalie detectée
  434. C
  435. C
  436. C******* Message d'erreur standard
  437. C -301 0
  438. C %m1:40
  439. C
  440. MOTERR(1:40) = MESERR(1:40)
  441. WRITE(IOIMP,*) MOTERR(1:40)
  442. C
  443. C******* Message d'erreur standard
  444. C 5 3
  445. C Erreur anormale.contactez votre support
  446. C
  447. CALL ERREUR(5)
  448. GOTO 9999
  449. ENDIF
  450. IF(LOGNC)THEN
  451. C
  452. C******* Message d'erreur standard
  453. C -301 0
  454. C %m1:40
  455. C
  456. MOTERR(1:40) = MESERR(1:40)
  457. WRITE(IOIMP,*) MOTERR(1:40)
  458. C
  459. C******* Message d'erreur standard
  460. C 460 2
  461. C Pas de convergence dans les itérations internes
  462. C
  463. CALL ERREUR(460)
  464. GOTO 9999
  465. ENDIF
  466. C
  467. C**** Calcul de residu (si LOGRES = .TRUE.)
  468. C
  469. C LOGRES = .FALSE.
  470.  
  471. IF(LOGRES)THEN
  472. TYPE = 'CHPOINT '
  473. CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMOTS)
  474. C
  475. CALL KONRE8(MELEMC,MELEMF,MELEFE,ICHPVO,
  476. & ICHFLU, ICHRES,
  477. & LOGAN,MESERR)
  478. IF(LOGAN)THEN
  479. C
  480. C******* Anomalie detectée
  481. C
  482. C
  483. C******* Message d'erreur standard
  484. C -301 0
  485. C %m1:40
  486. C
  487. MOTERR(1:40) = MESERR(1:40)
  488. WRITE(IOIMP,*) MOTERR(1:40)
  489. C
  490. C******* Message d'erreur standard
  491. C 5 3
  492. C Erreur anormale.contactez votre support
  493. C
  494. CALL ERREUR(5)
  495. GOTO 9999
  496. ENDIF
  497. ELSE
  498. ICHRES = 0
  499. ENDIF
  500. C
  501. C**** Ecriture des resultats
  502. C
  503. CALL ECRREE(DT)
  504. TYPE = 'CHPOINT '
  505. IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
  506. IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
  507. TYPE='MATRIK '
  508. C CALL ECROBJ(TYPE,IJACO)
  509. 9999 CONTINUE
  510. RETURN
  511. END
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  

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