Télécharger konv12.eso

Retour à la liste

Numérotation des lignes :

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

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