Télécharger konv12.eso

Retour à la liste

Numérotation des lignes :

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

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