Télécharger konv12.eso

Retour à la liste

Numérotation des lignes :

  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
  204. CALL LIRMOT(LFLUX,2,ICELL,1)
  205. IF(IERR .NE. 0)GOTO 9999
  206. IF(ICELL .EQ. 1)THEN
  207. LOGRES = .FALSE.
  208. ELSEIF(ICELL .EQ. 2)THEN
  209. LOGRES = .TRUE.
  210. ELSE
  211. C
  212. C******** Message d'erreur standard
  213. C 251 2
  214. C Tentative d'utilisation d'une option non implémentée
  215. C
  216. CALL ERREUR(251)
  217. ENDIF
  218. C
  219. C**** Metode utilisée
  220. C
  221. CALL LIRMOT(LMETO,NBMET,INDMET,1)
  222. IF(IERR .NE. 0)GOTO 9999
  223. IF(INDMET .EQ. 0)THEN
  224. C
  225. C******** Message d'erreur standard
  226. C 251 2
  227. C Tentative d'utilisation d'une option non implémentée
  228. C
  229. CALL ERREUR(251)
  230. ENDIF
  231. C
  232. C**********************************
  233. C**** Lecture de l'objet MODELE ***
  234. C**********************************
  235. C
  236. ICOND = 1
  237. CALL QUETYP(TYPE,ICOND,IRET)
  238.  
  239. IF(IRET.EQ.0.AND.TYPE.NE.'MMODEL')THEN
  240. WRITE(6,*)' On attend un objet MMODEL'
  241. RETURN
  242. ENDIF
  243. CALL LIROBJ('MMODEL',MMODEL,ICOND,IRET)
  244. IF(IERR.NE.0)GOTO 9999
  245. CALL LEKMOD(MMODEL,IDOMA,INEFMD)
  246. IF(IERR.NE.0)GOTO 9999
  247. C
  248. C**** Centre, FACE et FACEL
  249. C
  250. CALL LEKTAB(IDOMA,'CENTRE',MELEMC)
  251. IF(IERR .NE. 0) GOTO 9999
  252. C
  253. CALL LEKTAB(IDOMA,'FACE',MELEMF)
  254. IF(IERR .NE. 0) GOTO 9999
  255. C
  256. CALL LEKTAB(IDOMA,'FACEL',MELEFE)
  257. IF(IERR .NE. 0) GOTO 9999
  258. C
  259. C**** Lecture du CHPOINT contenant les surfaces des faces.
  260. C
  261. CALL LEKTAB(IDOMA,'XXSURFAC',ICHPSU)
  262. IF(IERR .NE. 0) GOTO 9999
  263. C
  264. C**** Lecture du CHPOINT contenant les diametres minimums.
  265. C
  266. CALL LEKTAB(IDOMA,'XXDIEMIN',ICHPDI)
  267. IF(IERR .NE. 0) GOTO 9999
  268. C
  269. C**** Lecture du CHPOINT contenant les volumes
  270. C
  271. CALL LEKTAB(IDOMA,'XXVOLUM',ICHPVO)
  272. IF(IERR .NE. 0) GOTO 9999
  273. C
  274. C********** Les normales aux faces
  275. C
  276. IF(IDIM .EQ. 2)THEN
  277. C Que les normales
  278. CALL LEKTAB(IDOMA,'XXNORMAF',INORM)
  279. IF(IERR .NE. 0) GOTO 9999
  280. JGN = 4
  281. JGM = 2
  282. SEGINI MLMVIT
  283. MLMVIT.MOTS(1) = 'UX '
  284. MLMVIT.MOTS(2) = 'UY '
  285. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  286. SEGDES MLMVIT
  287. IF(IERR .NE. 0) GOTO 9999
  288. ELSE
  289. C Les normales et les tangentes
  290. TYPE = ' '
  291. CALL ACMO(IDOMA,'MATROT',TYPE,INORM)
  292. IF (TYPE .NE. 'CHPOINT ') THEN
  293. CALL MATRAN(IDOMA,INORM)
  294. IF(IERR .NE. 0) GOTO 9999
  295. ENDIF
  296. JGN = 4
  297. JGM = 9
  298. SEGINI MLMVIT
  299. MLMVIT.MOTS(1) = 'UX '
  300. MLMVIT.MOTS(2) = 'UY '
  301. MLMVIT.MOTS(3) = 'UZ '
  302. MLMVIT.MOTS(4) = 'RX '
  303. MLMVIT.MOTS(5) = 'RY '
  304. MLMVIT.MOTS(6) = 'RZ '
  305. MLMVIT.MOTS(7) = 'MX '
  306. MLMVIT.MOTS(8) = 'MY '
  307. MLMVIT.MOTS(9) = 'MZ '
  308. CALL QUEPO1(INORM, MELEMF, MLMVIT)
  309. SEGDES MLMVIT
  310. ENDIF
  311. C
  312. C********************************
  313. C**** Fin table domaine *********
  314. C********************************
  315. C********************************
  316. C**** La table IPGAZ *******
  317. C********************************
  318. C
  319. C
  320. C**** Lecture de la table qui contient le proprieté du gaz
  321. C Cette table est controlle par l'operateur PRIM
  322. C
  323. CALL LIROBJ('TABLE',IPGAZ,1,IRET)
  324. IF(IERR .NE. 0)GOTO 9999
  325. IF(IERR .NE. 0) GOTO 9999
  326. C
  327. C**** NORD: degree des polynoms cv(T)
  328. C
  329. MTYPI = 'MOT '
  330. MTYPR = ' '
  331. CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,'NORD',LOGII,IRETI,
  332. & MTYPR,NORD,XVALR,CHARR,LOGIR,IRETR)
  333. IF(MTYPR .NE. 'ENTIER ')THEN
  334. C
  335. C**** Message d'erreur standard
  336. C -301 0 %m1:40
  337. C
  338. MOTERR(1:40) = 'ARG1 . NORD = ??? '
  339. WRITE(IOIMP,*) MOTERR
  340. C
  341. C**** Message d'erreur standard
  342. C 21 2
  343. C Données incompatibles
  344. C
  345. CALL ERREUR(21)
  346. GOTO 9999
  347. ENDIF
  348. NORDP1 = NORD + 1
  349. C
  350. C**** Nom de l'espece qui n'est pas dans les equations d'Euler
  351. C
  352. MTYPI = 'MOT '
  353. MTYPR = ' '
  354. CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,'ESPNEULE',LOGII,IRETI,
  355. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IRETR)
  356. IF(MTYPR .NE. 'MOT ')THEN
  357. C
  358. C**** Message d'erreur standard
  359. C -301 0 %m1:40
  360. C
  361. MOTERR(1:40) = 'ARG1 . ESPNEULE = ??? '
  362. WRITE(IOIMP,*) MOTERR
  363. C
  364. C******* Message d'erreur standard
  365. C 21 2
  366. C Données incompatibles
  367. C
  368. CALL ERREUR(21)
  369. GOTO 9999
  370. ENDIF
  371. C
  372. C**** Les especes qui sont dans les Equations d'Euler
  373. C
  374. MTYPR = ' '
  375. CALL ACMO(IPGAZ,'ESPEULE',MTYPR,MLMOEU)
  376. IF(MTYPR .EQ. ' ')THEN
  377. NESP = 0
  378. IFRMAF = 0
  379. JGN = 4
  380. JGM = 1
  381. SEGINI MLMOT2
  382. MLMOT2.MOTS(1) = CHARR(1:4)
  383. LOGME = .FALSE.
  384. ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
  385. C
  386. C**** Message d'erreur standard
  387. C -301 0 %m1:40
  388. C
  389. MOTERR(1:40) = 'ARG1 . ESPEULE = ??? '
  390. WRITE(IOIMP,*) MOTERR
  391. C
  392. C**** Message d'erreur standard
  393. C 21 2
  394. C Données incompatibles
  395. C
  396. CALL ERREUR(21)
  397. GOTO 9999
  398. ELSE
  399. LOGME = .TRUE.
  400. SEGACT MLMOEU
  401. NESP = MLMOEU.MOTS(/2)
  402. JGN = 4
  403. JGM = NESP + 1
  404. SEGINI MLMOT2
  405. DO I1 = 1, NESP
  406. MLMOT2.MOTS(I1) = MLMOEU.MOTS(I1)
  407. ENDDO
  408. MLMOT2.MOTS(NESP+1)=CHARR(1:4)
  409. ENDIF
  410. C
  411. C**** Les scalaires passifs
  412. C
  413. MTYPR = ' '
  414. CALL ACMO(IPGAZ,'SCALPASS',MTYPR,MLMOSC)
  415. IF(MTYPR .EQ. ' ')THEN
  416. LOGSCA = .FALSE.
  417. NSCA = 0
  418. ISCAF = 0
  419. ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
  420. C
  421. C**** Message d'erreur standard
  422. C -301 0 %m1:40
  423. C
  424. MOTERR(1:40) = 'ARG1 . SCALPASS = ??? '
  425. WRITE(IOIMP,*) MOTERR
  426. C
  427. C**** Message d'erreur standard
  428. C 21 2
  429. C Données incompatibles
  430. C
  431. CALL ERREUR(21)
  432. GOTO 9999
  433. ELSE
  434. LOGSCA = .TRUE.
  435. SEGACT MLMOSC
  436. NSCA = MLMOSC.MOTS(/2)
  437. ENDIF
  438. C
  439. C**** On rempli les segment PROPHY
  440. C Ordre: IPGAZ . 'ESPEULE' + IPGAZ . 'ESPNEULE'
  441. C On controlle aussi la compatibilite des
  442. C donnes de la table
  443. C
  444. SEGINI PROPHY
  445. C
  446. C**** N.B. NOMMOT est un CHARACTER*(4)
  447. C
  448. DO I1 = 1, NESP+1
  449. NOMMOT = MLMOT2.MOTS(I1)
  450. C
  451. C******* CALL ACMF(...) ne marche pas parce que on a
  452. C des blanches dans nos composantes
  453. C
  454. MTYPI = 'MOT '
  455. MTYPR = ' '
  456. CALL ACCTAB(IPGAZ,MTYPI,IVALI,XVALI,NOMMOT, LOGII,IRETI,
  457. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
  458. C
  459. C******* En IESP il y a la table IPGAZ.NOMMOT
  460. C
  461. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'TABLE ')) THEN
  462.  
  463. C
  464. C********** Message d'erreur standard
  465. C -301 0 %m1:40
  466. C
  467. MOTERR = ' '
  468. MOTERR(1:7) = 'ARG1 . '
  469. MOTERR(8:11) = NOMMOT
  470. MOTERR(13:17) = '= ???'
  471. WRITE(IOIMP,*) MOTERR
  472. C
  473. C********** Message d'erreur standard
  474. C 21 2
  475. C Données incompatibles
  476. C
  477. CALL ERREUR(21)
  478. GOTO 9999
  479. ENDIF
  480. C
  481. C******* R
  482. C
  483. MTYPI = 'MOT '
  484. MTYPR = ' '
  485. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'R' , LOGII,IRETI,
  486. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  487. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  488.  
  489. C
  490. C********** Message d'erreur standard
  491. C -301 0 %m1:40
  492. C
  493. MOTERR = ' '
  494. MOTERR(1:7) = 'ARG1 . '
  495. MOTERR(8:11) = NOMMOT
  496. MOTERR(13:23) = ' . R = ??? '
  497. WRITE(IOIMP,*) MOTERR
  498. C
  499. C********** Message d'erreur standard
  500. C 21 2
  501. C Données incompatibles
  502. C
  503. CALL ERREUR(21)
  504. GOTO 9999
  505. ENDIF
  506. PROPHY.R(I1)=XVALR
  507. C
  508. C******* H0K
  509. C
  510. MTYPI = 'MOT '
  511. MTYPR = ' '
  512. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'H0K' , LOGII,IRETI,
  513. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  514. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  515.  
  516. C
  517. C********** Message d'erreur standard
  518. C -301 0 %m1:40
  519. C
  520. MOTERR = ' '
  521. MOTERR(1:7) = 'ARG1 . '
  522. MOTERR(8:11) = NOMMOT
  523. MOTERR(13:25) = ' . H0K = ??? '
  524. WRITE(IOIMP,*) MOTERR
  525. C
  526. C********** Message d'erreur standard
  527. C 21 2
  528. C Données incompatibles
  529. C
  530. CALL ERREUR(21)
  531. GOTO 9999
  532. ENDIF
  533. PROPHY.H0K(I1)=XVALR
  534. C
  535. C******* A
  536. C
  537. MTYPI = 'MOT '
  538. MTYPR = ' '
  539. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'A' , LOGII,IRETI,
  540. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  541. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'LISTREEL')) THEN
  542. IERR = 0
  543. C
  544. C********** Message d'erreur standard
  545. C -301 0 %m1:40
  546. C
  547. MOTERR = ' '
  548. MOTERR(1:7) = 'ARG1 . '
  549. MOTERR(8:11) = NOMMOT
  550. MOTERR(13:23) = ' . A = ??? '
  551. WRITE(IOIMP,*) MOTERR
  552. C
  553. C********** Message d'erreur standard
  554. C 21 2
  555. C Données incompatibles
  556. C
  557. CALL ERREUR(21)
  558. GOTO 9999
  559. ENDIF
  560. MLREEL = IRETR
  561. SEGACT MLREEL
  562. C
  563. C******* Dans le calcul, c'est plus utile ACV dans la forme
  564. C ACV(,exponente,espece)
  565. C
  566. DO I2 = 1, NORDP1
  567. PROPHY.ACV(I2,I1)= MLREEL.PROG(I2)
  568. ENDDO
  569. SEGDES MLREEL
  570. ENDDO
  571. SEGDES MLMOT2
  572. C
  573. C**** La table IPGAZ donc a ete controllee et PROPHY est rempli
  574. C
  575. C
  576. C**** On va lire les pointeurs des MCHAMLs
  577. C Lecture du MCHAML 'FACEL' densité
  578. C
  579. TYPE='MCHAML '
  580. CALL LIROBJ(TYPE,IROF,1,IRET)
  581. IF(IERR.NE.0) GOTO 9999
  582. C
  583. C**** Lecture du MCHAML 'FACEL' vitesse
  584. C
  585. TYPE='MCHAML '
  586. CALL LIROBJ(TYPE,IVITF,1,IRET)
  587. IF(IERR .NE. 0) GOTO 9999
  588. C
  589. C**** Lecture du MCHAML 'FACEL' contenant la pression
  590. C
  591. TYPE='MCHAML '
  592. CALL LIROBJ(TYPE,IPF,1,IRET)
  593. IF(IERR .NE. 0) GOTO 9999
  594. C
  595. C**** Lecture du MCHAML 'FACEL' contenant les fractions massiques
  596. C
  597. IF(LOGME)THEN
  598. TYPE='MCHAML '
  599. CALL LIROBJ(TYPE,IFRMAF,1,IRET)
  600. IF(IERR .NE. 0) GOTO 9999
  601. ENDIF
  602. C
  603. C**** Lecture du MCHAML 'FACEL' contenant les scalaires passifs
  604. C
  605. IF(LOGSCA)THEN
  606. TYPE='MCHAML '
  607. CALL LIROBJ(TYPE,ISCAF,1,IRET)
  608. IF(IERR .NE. 0) GOTO 9999
  609. ENDIF
  610. C
  611. C**** NINC = nombre d'inconnues
  612. C
  613. NINC=IDIM+2+NESP+NSCA
  614. C
  615. TYPE='LISTMOTS'
  616. CALL LIROBJ(TYPE,ILIINC,1,IRET)
  617. IF(IERR .NE. 0) GOTO 9999
  618. MLMOTS = ILIINC
  619. SEGACT MLMOTS
  620. NC = MLMOTS.MOTS(/2)
  621. SEGDES MLMOTS
  622. IF(NC .NE. NINC)THEN
  623. MOTERR(1:40) = 'LISTINCO = ???'
  624. WRITE(IOIMP,*) MOTERR
  625. C
  626. C******* Message d'erreur standard
  627. C 21 2
  628. C Données incompatibles
  629. C
  630. CALL ERREUR(21)
  631. GOTO 9999
  632. ENDIF
  633. C
  634. C**** Boundary condition
  635. C
  636. IRET=0
  637. TYPE='MAILLAGE'
  638. CALL LIROBJ(TYPE,IFLIM,0,IRET)
  639. IF(IERR.NE.0)GOTO 9999
  640. IF(IRET .EQ. 0)THEN
  641. MELLIM = 0
  642. ELSE
  643. MELEME=IFLIM
  644. SEGACT MELEME
  645. ICACCA=MELEME.NUM(/2)
  646. IF(ICACCA .EQ. 0)THEN
  647. MELLIM = 0
  648. ELSE
  649. MELLIM = IFLIM
  650. ENDIF
  651. SEGDES MELEME
  652. ENDIF
  653. C
  654. C**** Creation des flux aux interfaces
  655. C
  656. TYPE = 'CHPOINT '
  657. CALL KRCHP1(TYPE, MELEMF, ICHFLU, MLMOTS)
  658. C
  659. C
  660. C**** Calcul des flux et du pas du temps.
  661. C
  662. IF( IDIM .EQ. 2)THEN
  663. CALL KONFL2(LOGME,LOGSCA,INDMET,NORDP1,
  664. & IROF,IVITF,IPF,IFRMAF,ISCAF,PROPHY,
  665. & ICHPSU,ICHPDI,
  666. & MELEMC,MELEMF,MELEFE,MELLIM,
  667. & ICHFLU,
  668. & DT,
  669. & LOGNC,LOGAN,MESERR)
  670. ELSE
  671. CALL KONFL4(LOGME,LOGSCA,INDMET,NORDP1,
  672. & IROF,IVITF,IPF,IFRMAF,ISCAF,PROPHY,
  673. & ICHPSU,ICHPDI,
  674. & MELEMC,MELEMF,MELEFE,MELLIM,
  675. & ICHFLU,
  676. & DT,
  677. & LOGNC,LOGAN,MESERR)
  678. ENDIF
  679. C
  680. IF(LOGAN)THEN
  681. C
  682. C******* Anomalie detectée
  683. C
  684. C
  685. C******* Message d'erreur standard
  686. C -301 0
  687. C %m1:40
  688. C
  689. MOTERR(1:40) = MESERR(1:40)
  690. WRITE(IOIMP,*) MOTERR(1:40)
  691. C
  692. C******* Message d'erreur standard
  693. C 5 3
  694. C Erreur anormale.contactez votre support
  695. C
  696. CALL ERREUR(5)
  697. GOTO 9999
  698. ENDIF
  699. IF(LOGNC)THEN
  700. C
  701. C******* Message d'erreur standard
  702. C -301 0
  703. C %m1:40
  704. C
  705. MOTERR(1:40) = MESERR(1:40)
  706. WRITE(IOIMP,*) MOTERR(1:40)
  707. C
  708. C******* Message d'erreur standard
  709. C 460 2
  710. C Pas de convergence dans les itérations internes
  711. C
  712. CALL ERREUR(460)
  713. GOTO 9999
  714. ENDIF
  715. C
  716. C**** Calcul de residu (si LOGRES = .TRUE.)
  717. C
  718. IF(LOGRES)THEN
  719. TYPE = 'CHPOINT '
  720. CALL KRCHP1(TYPE, MELEMC, ICHRES, MLMOTS)
  721. C
  722. CALL KONRE1(MELEMC,MELEMF,MELEFE,ICHPVO,
  723. & ICHFLU, ICHRES,
  724. & LOGAN,MESERR)
  725. IF(LOGAN)THEN
  726. C
  727. C******* Anomalie detectée
  728. C
  729. C
  730. C******* Message d'erreur standard
  731. C -301 0
  732. C %m1:40
  733. C
  734. MOTERR(1:40) = MESERR(1:40)
  735. WRITE(IOIMP,*) MOTERR(1:40)
  736. C
  737. C******* Message d'erreur standard
  738. C 5 3
  739. C Erreur anormale.contactez votre support
  740. C
  741. CALL ERREUR(5)
  742. GOTO 9999
  743. ENDIF
  744. ELSE
  745. ICHRES = 0
  746. ENDIF
  747. C
  748. C**** Ecriture des resultats
  749. C
  750. CALL ECRREE(DT)
  751. TYPE = 'CHPOINT '
  752. IF(ICHRES .NE. 0) CALL ECROBJ(TYPE,ICHRES)
  753. IF(ICHFLU .NE. 0) CALL ECROBJ(TYPE,ICHFLU)
  754. C
  755. SEGDES PROPHY
  756. IF(LOGME) SEGDES MLMOEU
  757. IF(LOGSCA) SEGDES MLMOSC
  758. C
  759. 9999 CONTINUE
  760. RETURN
  761. END
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  

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