Télécharger primi1.eso

Retour à la liste

Numérotation des lignes :

primi1
  1. C PRIMI1 SOURCE OF166741 24/12/13 21:17:15 12097
  2. SUBROUTINE PRIMI1()
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : PRIMI1
  8. C
  9. C DESCRIPTION : Voir PRIMIT
  10. C
  11. C Calcul des variables primitives (et du "gamma")
  12. C pour les gaz "thermally perfect" mono/multiespeces
  13. C
  14. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  15. C
  16. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  17. C
  18. C************************************************************************
  19. C
  20. C
  21. C APPELES (E/S) : LIRENT, ACMO, LIROBJ, QUEPOI, ERREUR, ECROBJ
  22. C
  23. C APPELES (Calcul) : PRIMI2
  24. C
  25. C
  26. C************************************************************************
  27. C
  28. C
  29. C PHRASE D'APPEL (GIBIANE) :
  30. C
  31. C 2) gaz "thermally" parfait mono/multi-especes (NESP > ou = 1)
  32. C
  33. C RCHPO1 RCHPO2 RCHPO3 (RCHPO4) RCHPO5 = 'PRIM' MCLE1 TAB1
  34. C CHPO1 CHPO2 CHPO3 (CHPO4) (CHPO5) (MCLE2) ;
  35. C
  36. C
  37. C ENTREES :
  38. C
  39. C MCLE1 : 'PERFMULT' : mot clé
  40. C
  41. C
  42. C TAB1 : TABLE qui contient :
  43. C * les noms des especes qui apparessent
  44. C explicitement dans les equations d'Euler en
  45. C TAB1 . 'ESPEULE' (LISTMOTS).
  46. C Dans le cas monoespece TAB1 . 'ESPEULE'
  47. C n'existe pas;
  48. C * le nom de l'espece qui n'y est pas (mots), en
  49. C TAB1 . 'ESPNEULE' (MOT).
  50. C * le degre k des polynoms cv_i(T)
  51. C * les CV du gas, supposes etre des polynoms du
  52. C k-eme degre, i.e.
  53. C CV_i = \sum_{j=0,k} A_{i,j} T^j (en J/Kg/K) ;
  54. C Ils sont stokes, pour l'espece 'ESPI', dans la
  55. C forme:
  56. C TAB1 . 'ESPI' . 'A' = 'PROG' A_0, ..., A_k
  57. C * Les constantes du gaz R_i; pour l'espece 'ESPI'
  58. C TAB1 . 'ESPI' . 'R' (en J/Kg/K)
  59. C * Les "energies de formation" a 0K, definies par
  60. C e_{0,i} = h_{0,i} = h_{T_0,i} - {R_i * T_0 +
  61. C {\sum_{j=0,k} A_{i,j} / (j+1) T_0^(j+1)}};
  62. C Elles sont stokes, pour l'espece 'ESPI', dans
  63. C la forme
  64. C TAB1 . 'ESPI' . 'H0K'
  65. C * (éventuellement) les noms de scalaires passifs qu'on
  66. C voudrait transporter en
  67. C TAB1 . 'SCALPASS' (LISTMOTS)
  68. C
  69. C CHPO1 : CHPOINT contenant la masse volumique (en Kg/m^3)
  70. C (une composante, 'SCAL').
  71. C
  72. C CHPO2 : CHPOINT contenant les dèbits (en m/s)
  73. C (2 composantes en 2D, 'UX ','UY ');
  74. C (3 composantes en 3D, 'UX ','UY ','UZ ');
  75. C
  76. C CHPO3 : CHPOINT contenat l'énergie totale per
  77. C unité de volume (RHO Et), (en J/m^3)
  78. C (une composante, 'SCAL').
  79. C
  80. C (CHPO4) : CHPOINT contenant la masse des especes qui sont
  81. C explicitement "splitted" dans les equations
  82. C d'Eulers (dont les noms sont dans
  83. C TAB1 . 'ESPEULE');
  84. C
  85. C (CHPO5) : CHPOINT contenant les scalaires passifs qu'on transporte,
  86. C multipliés par la masse volumique
  87. C (si existe TAB1 . 'SCALPASS');
  88. C
  89. C (CHPO6) : CHPOINT contenant la temperature de premier
  90. C essai pour la methode de Newton-Raphson (en K);
  91. C si il n'est pas donne' on prends T = 600K
  92. C
  93. C i.e. CHPO1, CHPO2, CHPO3, CHPO4 sont les variables
  94. C conservatives des Equations d'Euler.
  95. C
  96. C MCLE2 : Option personelle: pas dans la notice
  97. C officielle!!!
  98. C Mot clé, 'TRICHE' (s'il y a un erreur,
  99. C les resultats ne sont pas
  100. C des type ANNULLE et le programme
  101. C ne s'arrete pas!!!)
  102. C
  103. C SORTIES :
  104. C
  105. C RCHPO1 : CHPOINT contenant la vitesse
  106. C
  107. C RCHPO2 : CHPOINT contenant la pression du gaz;
  108. C
  109. C RCHPO3 : CHPOINT contenant la temperature du gaz;
  110. C
  111. C (RCHPO4) : CHPOINT contenant les fractions
  112. C massiques des differentes especes;
  113. C
  114. C (RCHPO5) : CHPOINT contenant les scalaire passifs;
  115. C
  116. C RCHPO6 : CHPOINT contenat les "gamma" du gaz
  117. C
  118. C N.B.:-tous les CHPOINTs sont non-partitonees et
  119. C ils ont le meme support geometrique;
  120. C en sortie tous les CHPOINTs ont le support
  121. C geometrique de RO
  122. C -en sortie RCHPO4 et CHPO4 ont les composantes ordonnees
  123. C dans le sens de TAB1 . 'ESPEULE'
  124. C
  125. C************************************************************************
  126. C
  127. C HISTORIQUE (Anomalies et modifications éventuelles)
  128. C
  129. C HISTORIQUE : Créée le 14.12.98.
  130. C
  131. C 10.02.2000:
  132. C Correction d'un erreur informatique (voir ligne CERR1),
  133. C qui apparait dans le cas d'un gaz avec deux espèces
  134. C
  135. C 11.02.2000:
  136. C on ajout la possibilité de considérer des scalaires
  137. C passifs
  138. C
  139. C
  140. C************************************************************************
  141. C
  142. C**** Les variables
  143. C
  144. IMPLICIT INTEGER(I-N)
  145. INTEGER ICOND, IRETOU, INDIC, NBCOMP, IERR0
  146. & , NESP, ICEN, IRO, IROVIT, IROET, IROY, IT
  147. & , IPGAS, IESP
  148. & , IPRES, IVIT, ITEMP, IY, IGAM
  149. & , I1, I2, JGM, JGN, NPOINT, NORD, NORDP1, NORD1
  150. REAL*8 VALER(2),VAL1,VAL2
  151. CHARACTER*(40) MESERR(2),MESCEL
  152. CHARACTER*(8) MTYPR
  153. CHARACTER*(6) NOMTRI
  154. CHARACTER*(4) MOT1(1)
  155. LOGICAL LOGNEG, LOGBOR, LOGAN, LOGTRI
  156. & ,LOGTEM, LOGIPG, LOGNC
  157. C
  158. C**** Variables en ACCTAB
  159. C
  160. INTEGER IVALI, IRETI,IVALR, IRETR
  161. REAL*8 XVALI, XVALR
  162. LOGICAL LOGII, LOGIR
  163. CHARACTER*(8) CHARR,MTYPI
  164. C
  165. C**** Segment des proprietes du gaz
  166. C
  167. SEGMENT PROPHY
  168. REAL*8 ACV(NORD+1,NESP+1), R(NESP+1), H0K(NESP+1)
  169. ENDSEGMENT
  170. C
  171. C**** Les Includes
  172. C
  173.  
  174. -INC PPARAM
  175. -INC CCOPTIO
  176. -INC SMCHPOI
  177. -INC SMLMOTS
  178. -INC SMLREEL
  179. POINTEUR MLMOSC.MLMOTS
  180. C
  181. C**** Initialisation des parametres d'erreur
  182. C
  183. LOGAN = .FALSE.
  184. LOGNEG = .FALSE.
  185. LOGBOR = .FALSE.
  186. LOGNC = .FALSE.
  187. LOGIPG = .FALSE.
  188. MESCEL = ' '
  189. MESERR(1) = MESCEL
  190. MESERR(2) = MESCEL
  191. MOTERR(1:40) = MESCEL(1:40)
  192. VALER(1) = 0.0D0
  193. VALER(2) = 0.0D0
  194. VAL1 = 0.0D0
  195. VAL2 = 0.0D0
  196. C
  197. C**** Initialisation des variables en ACCTAB
  198. C
  199. IVALI = 0
  200. IVALR = 0
  201. XVALI = 0.0D0
  202. XVALR = 0.0D0
  203. LOGII = .FALSE.
  204. LOGIR = .FALSE.
  205. IRETI = 0
  206. IRETR = 0
  207. CHARR = ' '
  208. C
  209. C**** Initialisation des MOT1(1) (noms des composantes)
  210. C
  211. MOT1(1) = ' '
  212. C
  213. C**** N.B. On veut lire les objets sequentiellement.
  214. C Donc on utilise QUETYP pour controler que
  215. C le type de l'objet soit le bon.
  216. C
  217. C**** Lecture de la table des proprietes du gaz
  218. C
  219. ICOND = 1
  220. CALL QUETYP(MTYPR,ICOND,IRETOU)
  221. IF(IERR .NE. 0)GOTO 9999
  222. IF(MTYPR .NE. 'TABLE ')THEN
  223. C
  224. C******* Message d'erreur standard
  225. C 37 2
  226. C On ne trouve pas d'objet de type %m1:8
  227. C
  228. MOTERR(1:8) = 'TABLE '
  229. CALL ERREUR(37)
  230. GOTO 9999
  231. ELSE
  232. ICOND = 1
  233. CALL LIROBJ(MTYPR,IPGAS,ICOND,IRETOU)
  234. CALL ACTOBJ(MTYPR,IPGAS,1)
  235. IF(IERR .NE. 0)GOTO 9999
  236. ENDIF
  237. C
  238. C**** Ordre des polynoms pour les cv_i
  239. C
  240. MTYPI = 'MOT '
  241. MTYPR = ' '
  242. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,'NORD',LOGII,IRETI,
  243. & MTYPR,NORD,XVALR,CHARR,LOGIR,IESP)
  244. IF(MTYPR .NE. 'ENTIER ')THEN
  245. C
  246. C******* Message d'erreur standard
  247. C -301 0 %m1:40
  248. C
  249. MOTERR(1:40) = 'TAB1 . NORD = ??? '
  250. WRITE(IOIMP,*) MOTERR(1:40)
  251. C
  252. C******* Message d'erreur standard
  253. C 21 2
  254. C Données incompatibles
  255. C
  256. CALL ERREUR(21)
  257. GOTO 9999
  258. ENDIF
  259. NORDP1 = NORD + 1
  260. C
  261. C**** Nom de l'espece qui n'est pas dans les equations d'Euler
  262. C
  263. MTYPI = 'MOT '
  264. MTYPR = ' '
  265. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,'ESPNEULE',LOGII,IRETI,
  266. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
  267. IF(MTYPR .NE. 'MOT ')THEN
  268. C
  269. C******* Message d'erreur standard
  270. C -301 0 %m1:40
  271. C
  272. MOTERR(1:40) = 'TAB1 . ESPNEULE = ??? '
  273. WRITE(IOIMP,*) MOTERR(1:40)
  274. C
  275. C******* Message d'erreur standard
  276. C 21 2
  277. C Données incompatibles
  278. C
  279. CALL ERREUR(21)
  280. GOTO 9999
  281. ENDIF
  282. C
  283. C**** Les especes qui sont dans les Equations d'Euler
  284. C
  285. MTYPR = ' '
  286. CALL ACMO(IPGAS,'ESPEULE',MTYPR,MLMOT1)
  287. IF(MTYPR .EQ. ' ')THEN
  288. NESP = 0
  289. IROY = 0
  290. JGN = 4
  291. JGM = 1
  292. C
  293. C******* JGN,JGM en MLMOT2:
  294. C CHARACTER*(JGN) MOTS(JGM)
  295. C
  296. SEGINI MLMOT2
  297. MLMOT2.MOTS(1) = CHARR(1:4)
  298. ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
  299. C
  300. C******* Message d'erreur standard
  301. C -301 0 %m1:40
  302. C
  303. MOTERR(1:40) = 'TAB1 . ESPEULE = ??? '
  304. WRITE(IOIMP,*) MOTERR(1:40)
  305. C
  306. C******* Message d'erreur standard
  307. C 21 2
  308. C Données incompatibles
  309. C
  310. CALL ERREUR(21)
  311. GOTO 9999
  312. ELSE
  313. SEGACT MLMOT1
  314. NESP = MLMOT1.MOTS(/2)
  315. JGN = 4
  316. JGM = NESP + 1
  317. SEGINI MLMOT2
  318. DO I1 = 1, NESP
  319. MLMOT2.MOTS(I1) = MLMOT1.MOTS(I1)
  320. ENDDO
  321. MLMOT2.MOTS(NESP+1)=CHARR(1:4)
  322. SEGDES MLMOT1
  323. ENDIF
  324. C
  325. C**** Les scalaires passifs qui sont dans les Equations d'Euler
  326. C
  327. MTYPR = ' '
  328. CALL ACMO(IPGAS,'SCALPASS',MTYPR,MLMOSC)
  329. IF(MTYPR .EQ. ' ')THEN
  330. NSCA = 0
  331. IROSCA = 0
  332. ELSEIF(MTYPR .NE. 'LISTMOTS')THEN
  333. C
  334. C******* Message d'erreur standard
  335. C -301 0 %m1:40
  336. C
  337. MOTERR(1:40) = 'TAB1 . SCALPASS = ??? '
  338. WRITE(IOIMP,*) MOTERR(1:40)
  339. C
  340. C******* Message d'erreur standard
  341. C 21 2
  342. C Données incompatibles
  343. C
  344. CALL ERREUR(21)
  345. GOTO 9999
  346. ELSE
  347. SEGACT MLMOSC
  348. NSCA = MLMOSC.MOTS(/2)
  349. SEGDES MLMOSC
  350. ENDIF
  351. C
  352. C**** On rempli les segment PROPHY
  353. C Ordre: IPGAS . 'ESPEULE' + IPGAS . 'ESPNEULE'
  354. C On controlle aussi la compatibilite des
  355. C donnes de la table
  356. C
  357. SEGINI PROPHY
  358. C
  359. C**** N.B. MOT1 est un CHARACTER*(4)
  360. C
  361. DO I1 = 1, NESP+1
  362. MOT1(1) = MLMOT2.MOTS(I1)
  363. C
  364. C******* CALL ACMF(...) ne marche pas parce que on a
  365. C des blanches dans nos composantes
  366. C
  367. MTYPI = 'MOT '
  368. MTYPR = ' '
  369. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,MOT1(1), LOGII,IRETI,
  370. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
  371. C
  372. C******* En IESP a la table IPGAS.MOT1(1)
  373. C
  374. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'TABLE ')) THEN
  375.  
  376. C
  377. C********** Message d'erreur standard
  378. C -301 0 %m1:40
  379. C
  380. MOTERR = ' '
  381. MOTERR(1:7) = 'TAB1 . '
  382. MOTERR(8:11) = MOT1(1)
  383. MOTERR(13:17) = '= ???'
  384. WRITE(IOIMP,*) MOTERR(1:40)
  385. C
  386. C********** Message d'erreur standard
  387. C 21 2
  388. C Données incompatibles
  389. C
  390. CALL ERREUR(21)
  391. GOTO 9999
  392. ENDIF
  393. C
  394. C******* R
  395. C
  396. MTYPI = 'MOT '
  397. MTYPR = ' '
  398. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'R' , LOGII,IRETI,
  399. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  400. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  401. C
  402. C********** Message d'erreur standard
  403. C -301 0 %m1:40
  404. C
  405. MOTERR = ' '
  406. MOTERR(1:7) = 'TAB1 . '
  407. MOTERR(8:11) = MOT1(1)
  408. MOTERR(13:23) = ' . R = ??? '
  409. WRITE(IOIMP,*) MOTERR(1:40)
  410. C
  411. C********** Message d'erreur standard
  412. C 21 2
  413. C Données incompatibles
  414. C
  415. CALL ERREUR(21)
  416. GOTO 9999
  417. ENDIF
  418. PROPHY.R(I1)=XVALR
  419. C
  420. C******* H0K
  421. C
  422. MTYPI = 'MOT '
  423. MTYPR = ' '
  424. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'H0K' , LOGII,IRETI,
  425. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  426. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  427.  
  428. C
  429. C********** Message d'erreur standard
  430. C -301 0 %m1:40
  431. C
  432. MOTERR = ' '
  433. MOTERR(1:7) = 'TAB1 . '
  434. MOTERR(8:11) = MOT1(1)
  435. MOTERR(13:25) = ' . H0K = ??? '
  436. WRITE(IOIMP,*) MOTERR(1:40)
  437. C
  438. C********** Message d'erreur standard
  439. C 21 2
  440. C Données incompatibles
  441. C
  442. CALL ERREUR(21)
  443. GOTO 9999
  444. ENDIF
  445. PROPHY.H0K(I1)=XVALR
  446. C
  447. C******* A
  448. C
  449. MTYPI = 'MOT '
  450. MTYPR = ' '
  451. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'A' , LOGII,IRETI,
  452. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  453. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'LISTREEL')) THEN
  454.  
  455. C
  456. C********** Message d'erreur standard
  457. C -301 0 %m1:40
  458. C
  459. MOTERR = ' '
  460. MOTERR(1:7) = 'TAB1 . '
  461. MOTERR(8:11) = MOT1(1)
  462. MOTERR(13:23) = ' . A = ??? '
  463. WRITE(IOIMP,*) MOTERR(1:40)
  464. C
  465. C********** Message d'erreur standard
  466. C 21 2
  467. C Données incompatibles
  468. C
  469. CALL ERREUR(21)
  470. GOTO 9999
  471. ENDIF
  472. MLREEL = IRETR
  473. SEGACT MLREEL
  474. NORD1 = MLREEL.PROG(/1)
  475. IF(NORD1 .NE. NORDP1)THEN
  476. C
  477. C********** Message d'erreur standard
  478. C -301 0 %m1:40
  479. C
  480. MOTERR = ' '
  481. MOTERR(1:10) = 'DIME(TAB1.'
  482. MOTERR(11:14) = MOT1(1)
  483. MOTERR(15:37) = '.A) != (TAB1.NORD) + 1'
  484. WRITE(IOIMP,*) MOTERR(1:40)
  485. C
  486. C********** Message d'erreur standard
  487. C 21 2
  488. C Données incompatibles
  489. C
  490. CALL ERREUR(21)
  491. GOTO 9999
  492. ENDIF
  493.  
  494. C
  495. C******* Dans le calcul, c'est plus utile ACV dans la forme
  496. C ACV(exponente,espece)
  497. C
  498. DO I2 = 1, NORDP1
  499. PROPHY.ACV(I2,I1)= MLREEL.PROG(I2)
  500. ENDDO
  501. SEGDES MLREEL
  502. ENDDO
  503. SEGSUP MLMOT2
  504. C
  505. C**** La table IPGAS donc a ete controllee et PROPHY est rempli
  506. C
  507. C
  508. C**** Lecture du CHPOINT CHPO1 (masse volumique totale)
  509. C
  510. ICOND = 1
  511. CALL QUETYP(MTYPR,ICOND,IRETOU)
  512. IF(IERR .NE. 0)GOTO 9999
  513. IF(MTYPR .NE. 'CHPOINT ')THEN
  514. C
  515. C******* Message d'erreur standard
  516. C 37 2
  517. C On ne trouve pas d'objet de type %m1:8
  518. C
  519. MOTERR(1:8) = 'CHPOINT '
  520. CALL ERREUR(37)
  521. GOTO 9999
  522. ELSE
  523. ICOND = 1
  524. CALL LIROBJ(MTYPR,IRO,ICOND,IRETOU)
  525. CALL ACTOBJ(MTYPR,IRO,1)
  526. IF(IERR .NE. 0)GOTO 9999
  527. ENDIF
  528. C
  529. C**** On cherche le pointeur de son maillage et on l'impose sur les
  530. C autres CHPOINTs
  531. C
  532. MCHPOI = IRO
  533. SEGACT MCHPOI
  534. MSOUPO = MCHPOI.IPCHP(1)
  535. SEGACT MSOUPO
  536. ICEN = MSOUPO.IGEOC
  537. SEGDES MSOUPO
  538. SEGDES MCHPOI
  539. C
  540. C**** Control du CHPOINT: QUEPOI
  541. C
  542. C INDIC = 1 -> on impose le pointeur du support geometrique (ICEN)
  543. C N.B. Le CHPOINT peut changer de structure pour
  544. C avoir SPG = ICEN!!!!
  545. C INDIC = 0 -> on ne fait que verifier le support geometrique
  546. C (ICEN). Si le SPG sont differents INDIC = -4 en sortie
  547. C
  548. C NBCOMP > 0 -> numero des composantes
  549. C
  550. C MOT1(1) = ' ' obligatoire s'on connais pas les noms des composantes
  551. C
  552. INDIC = 1
  553. NBCOMP = 1
  554. MOT1(1) = 'SCAL'
  555. CALL QUEPOI(IRO, ICEN, INDIC, NBCOMP, MOT1)
  556. IF(IERR .NE. 0)THEN
  557. IERR0 = IERR
  558.  
  559. C
  560. C******** Message d'erreur standard
  561. C -301 0 %m1:40
  562. C
  563. MOTERR = 'CHPO1 = ??? '
  564. WRITE(IOIMP,*) MOTERR(1:40)
  565.  
  566. GOTO 9999
  567. ENDIF
  568. C
  569. C**** Lecture du CHPOINT CHPO2( debits)
  570. C
  571. ICOND = 1
  572. CALL QUETYP(MTYPR,ICOND,IRETOU)
  573. IF(IERR .NE. 0)GOTO 9999
  574. IF(MTYPR .NE. 'CHPOINT ')THEN
  575. C
  576. C******* Message d'erreur standard
  577. C 37 2
  578. C On ne trouve pas d'objet de type %m1:8
  579. C
  580. MOTERR(1:8) = 'CHPOINT '
  581. CALL ERREUR(37)
  582. GOTO 9999
  583. ELSE
  584. ICOND = 1
  585. CALL LIROBJ(MTYPR,IROVIT,ICOND,IRETOU)
  586. CALL ACTOBJ(MTYPR,IROVIT,1)
  587. IF(IERR .NE. 0)GOTO 9999
  588. ENDIF
  589. C
  590. C**** Control du CHPOINT
  591. C
  592. C
  593. CERR2
  594. C
  595. JGN = 4
  596. JGM = IDIM
  597. SEGINI MLMOTS
  598. MLMOTS.MOTS(1) = 'UX '
  599. MLMOTS.MOTS(2) = 'UY '
  600. IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ '
  601. C
  602. C**** On controlle l'ordre de composantes de IROVIT
  603. C
  604. CALL QUEPO1(IROVIT, ICEN, MLMOTS)
  605. IF(IERR .NE. 0)THEN
  606. IERR0 = IERR
  607.  
  608. C
  609. C******** Message d'erreur standard
  610. C -301 0 %m1:40
  611. C
  612. MOTERR = 'CHPO2 = ??? '
  613. WRITE(IOIMP,*) MOTERR(1:40)
  614.  
  615. GOTO 9999
  616. ENDIF
  617. C
  618. C**** Lecture du CHPOINT CHPO3 (energie volumique)
  619. C
  620. ICOND = 1
  621. CALL QUETYP(MTYPR,ICOND,IRETOU)
  622. IF(IERR .NE. 0)GOTO 9999
  623. IF(MTYPR .NE. 'CHPOINT ')THEN
  624. C
  625. C******* Message d'erreur standard
  626. C 37 2
  627. C On ne trouve pas d'objet de type %m1:8
  628. C
  629. MOTERR(1:8) = 'CHPOINT '
  630. CALL ERREUR(37)
  631. GOTO 9999
  632. ELSE
  633. ICOND = 1
  634. CALL LIROBJ(MTYPR,IROET,ICOND,IRETOU)
  635. CALL ACTOBJ(MTYPR,IROET,1)
  636. IF(IERR .NE. 0)GOTO 9999
  637. ENDIF
  638. C
  639. C**** Control du CHPOINT
  640. C
  641. INDIC = 1
  642. NBCOMP = 1
  643. MOT1(1) = 'SCAL'
  644. CALL QUEPOI(IROET, ICEN, INDIC, NBCOMP, MOT1)
  645. IF(IERR .NE. 0)THEN
  646. IERR0 = IERR
  647.  
  648. C
  649. C******** Message d'erreur standard
  650. C -301 0 %m1:40
  651. C
  652. MOTERR = 'CHPO3 = ??? '
  653. WRITE(IOIMP,*) MOTERR(1:40)
  654.  
  655. GOTO 9999
  656. ENDIF
  657. C
  658. C**** Lecture du CHPOINT CHPO4(masses volumiques des especes "splittees")
  659. C
  660. CERR1 IF(NESP .GT. 1)THEN: erreur: NESP = 0 dans le cas monoespece
  661. C NESP > 0 dans le cas multiespece
  662. IF(NESP .GE. 1)THEN
  663. ICOND = 1
  664. CALL QUETYP(MTYPR,ICOND,IRETOU)
  665. IF(IERR .NE. 0)GOTO 9999
  666. IF(MTYPR .NE. 'CHPOINT ')THEN
  667. C
  668. C******* Message d'erreur standard
  669. C 37 2
  670. C On ne trouve pas d'objet de type %m1:8
  671. C
  672. MOTERR(1:8) = 'CHPOINT '
  673. CALL ERREUR(37)
  674. GOTO 9999
  675. ELSE
  676. ICOND = 1
  677. CALL LIROBJ(MTYPR,IROY,ICOND,IRETOU)
  678. CALL ACTOBJ(MTYPR,IROY,1)
  679. IF(IERR .NE. 0)GOTO 9999
  680. ENDIF
  681. C
  682. C**** Control du CHPOINT
  683. C
  684. CALL QUEPO1(IROY , ICEN , MLMOT1)
  685. IF(IERR .NE. 0)THEN
  686.  
  687. C
  688. C******* Message d'erreur standard
  689. C -301 0 %m1:40
  690. C
  691. MOTERR = 'CHPO4 = ??? '
  692. WRITE(IOIMP,*) MOTERR(1:40)
  693. C
  694. C******* Message d'erreur standard
  695. C 21 2
  696. C Données incompatibles
  697. C
  698. CALL ERREUR(21)
  699. GOTO 9999
  700. ENDIF
  701. ENDIF
  702. C
  703. C**** Lecture du CHPOINT CHPO5 (scalaires passifs * densité)
  704. C
  705. IF(NSCA .GE. 1)THEN
  706. ICOND = 1
  707. CALL QUETYP(MTYPR,ICOND,IRETOU)
  708. IF(IERR .NE. 0)GOTO 9999
  709. IF(MTYPR .NE. 'CHPOINT ')THEN
  710. C
  711. C******* Message d'erreur standard
  712. C 37 2
  713. C On ne trouve pas d'objet de type %m1:8
  714. C
  715. MOTERR(1:8) = 'CHPOINT '
  716. CALL ERREUR(37)
  717. GOTO 9999
  718. ELSE
  719. ICOND = 1
  720. CALL LIROBJ(MTYPR,IROSCA,ICOND,IRETOU)
  721. CALL ACTOBJ(MTYPR,IROSCA,1)
  722. IF(IERR .NE. 0)GOTO 9999
  723. ENDIF
  724. C
  725. C**** Control du CHPOINT
  726. C
  727. CALL QUEPO1(IROSCA , ICEN , MLMOSC)
  728. IF(IERR .NE. 0)THEN
  729.  
  730. C
  731. C******* Message d'erreur standard
  732. C -301 0 %m1:40
  733. C
  734. MOTERR = 'CHPO5 = ??? '
  735. WRITE(IOIMP,*) MOTERR(1:40)
  736. C
  737. C******* Message d'erreur standard
  738. C 21 2
  739. C Données incompatibles
  740. C
  741. CALL ERREUR(21)
  742. GOTO 9999
  743. ENDIF
  744. ENDIF
  745. C
  746. C**** Lecture du CHPOINT CHPO6(temperature de tentative, optionelle)
  747. C
  748. ICOND = 0
  749. MTYPR = 'CHPOINT '
  750. CALL LIROBJ(MTYPR,IT,ICOND,IRETOU)
  751. IF(IERR .NE. 0)GOTO 9999
  752. IF(IRETOU .EQ. 1)THEN
  753. CALL ACTOBJ(MTYPR,IT,1)
  754. C
  755. C****** Control du CHPOINT
  756. C
  757. INDIC = 1
  758. NBCOMP = 1
  759. MOT1(1) = 'SCAL'
  760. CALL QUEPOI(IT, ICEN, INDIC, NBCOMP, MOT1)
  761. IF(IERR .NE. 0)THEN
  762. IERR0 = IERR
  763.  
  764. C
  765. C*********** Message d'erreur standard
  766. C -301 0 %m1:40
  767. C
  768. MOTERR = 'CHPO6 = ??? '
  769. WRITE(IOIMP,*) MOTERR(1:40)
  770.  
  771. GOTO 9999
  772. ENDIF
  773. LOGTEM = .TRUE.
  774. ELSE
  775. IT = 0
  776. LOGTEM = .FALSE.
  777. ENDIF
  778. C
  779. C*** Option TRICHE (optionelle et secrete)
  780. C
  781. ICOND = 0
  782. CALL LIRCHA(NOMTRI,ICOND,IRETOU)
  783. IF(IERR .NE. 0)GOTO 9999
  784. IF(IRETOU .NE. 0)THEN
  785. IF(NOMTRI .EQ. 'TRICHE')THEN
  786. LOGTRI = .TRUE.
  787. ELSE
  788. LOGTRI = .FALSE.
  789. CALL ECRCHA(NOMTRI)
  790. ENDIF
  791. ELSE
  792. LOGTRI = .FALSE.
  793. ENDIF
  794. C
  795. C**** Calcul des sorties.
  796. C
  797. C Jusque a la NESP = nombre d'especes qui apparessent
  798. C dans les equations d'Euler
  799. C
  800. C Maintenant NESP = nombre total d'espece
  801. C
  802. NESP = NESP + 1
  803. CALL PRIMI2(NESP,NORDP1,NSCA,PROPHY,
  804. & ICEN,IRO,IROVIT,IROET,IROY,IROSCA,LOGTEM,IT,
  805. & IVIT,IPRES,ITEMP,IY,ISCA,IGAM,
  806. & LOGAN,LOGNEG,LOGBOR,LOGIPG,LOGNC,MESERR,
  807. & VALER,VAL1,VAL2)
  808. C
  809. IF(LOGAN)THEN
  810. C
  811. C******* Message d'erreur standard
  812. C 5 3
  813. C Erreur anormale.contactez votre support
  814. C
  815. CALL ERREUR(5)
  816. GOTO 9999
  817. ELSE
  818. IF(LOGIPG)THEN
  819. C
  820. C********** CV(T) < 0
  821. C
  822. C
  823. C********** Message d'erreur standard
  824. C -301 0 %m1:40
  825. C
  826. MOTERR(1:40) = 'cv(T) < 0 ? R < 0 ? '
  827. WRITE(IOIMP,*) MOTERR(1:40)
  828. MOTERR(1:40) = 'TAB1 = ??? '
  829. WRITE(IOIMP,*) MOTERR(1:40)
  830. C
  831. C********** Message d'erreur standard
  832. C 21 2
  833. C Données incompatibles
  834. C
  835. CALL ERREUR(21)
  836. IF(LOGTRI)THEN
  837. IERR = 0
  838. ELSE
  839. GOTO 9999
  840. ENDIF
  841. ENDIF
  842. IF(LOGNC)THEN
  843. C
  844. C********** Newton - Raphson ne converge pas !!!
  845. C
  846. C
  847. C********** Message d'erreur standard
  848. C -301 0 %m1:40
  849. C
  850. MOTERR(1:40) = 'Newton - Raphson '
  851. WRITE(IOIMP,*) MOTERR(1:40)
  852. C
  853. C********** Message d'erreur standard
  854. C 460 2
  855. C Pas de convergence dans les itérations internes
  856. C
  857. CALL ERREUR(460)
  858. IF(LOGTRI)THEN
  859. IERR = 0
  860. ELSE
  861. GOTO 9999
  862. ENDIF
  863. ENDIF
  864. IF(LOGNEG)THEN
  865. C
  866. C******* Pression (energie thermique) ou densité negative
  867. C
  868. C
  869. C******* Message d'erreur standard
  870. C 41 2
  871. C %m1:8 = %r1 inférieur à %r2
  872. C
  873. MESCEL = MESERR(1)
  874. MOTERR(1:8) = MESCEL(1:8)
  875. REAERR(1) = REAL(VALER(1))
  876. REAERR(2) = 0.0
  877. CALL ERREUR(41)
  878. IF(LOGTRI)THEN
  879. * IERR = 0
  880. ELSE
  881. GOTO 9999
  882. ENDIF
  883. ENDIF
  884. IF(LOGBOR)THEN
  885. C
  886. C******* GAMMA !\in GAMMIN, GAMMAX
  887. C ou Y !\in YMIN,YMAX
  888. C
  889. C******* Message d'erreur standard
  890. C 42 2
  891. C %m1:8 = %r1 non compris entre %r2 et %r3
  892. C
  893. MESCEL = MESERR(2)
  894. MOTERR(1:8) = MESCEL(1:8)
  895. REAERR(1) = REAL(VALER(2))
  896. REAERR(2) = REAL(VAL1)
  897. REAERR(3) = REAL(VAL2)
  898. CALL ERREUR(42)
  899. IF(LOGTRI)THEN
  900. * IERR = 0
  901. ELSE
  902. GOTO 9999
  903. ENDIF
  904. ENDIF
  905.  
  906. C******* Ecriture du CHPOINT contenant les "gamma".
  907. CALL ACTOBJ('CHPOINT ',IGAM,1)
  908. CALL ECROBJ('CHPOINT ',IGAM)
  909.  
  910. C******* Ecriture du CHPOINT contenant les scalaires passifs.
  911. IF(ISCA .NE. 0) THEN
  912. CALL ACTOBJ('CHPOINT ',ISCA,1)
  913. CALL ECROBJ('CHPOINT ',ISCA)
  914. ENDIF
  915.  
  916. C******* Ecriture du CHPOINT contenant Y.
  917. IF(IY .NE. 0) THEN
  918. CALL ACTOBJ('CHPOINT ',IY,1)
  919. CALL ECROBJ('CHPOINT ',IY)
  920. ENDIF
  921.  
  922. C******* Ecriture du CHPOINT contenant la temperature.
  923. CALL ACTOBJ('CHPOINT',ITEMP,1)
  924. CALL ECROBJ('CHPOINT',ITEMP)
  925. C
  926. C******* Ecriture du CHPOINT contenant la pression.
  927. CALL ACTOBJ('CHPOINT',IPRES,1)
  928. CALL ECROBJ('CHPOINT',IPRES)
  929.  
  930. C******* Ecriture du CHPOINT contenant la vitesse.
  931. CALL ACTOBJ('CHPOINT',IVIT,1)
  932. CALL ECROBJ('CHPOINT',IVIT)
  933. ENDIF
  934.  
  935. SEGSUP PROPHY
  936. SEGSUP MLMOTS
  937. C
  938. 9999 CONTINUE
  939. END
  940.  
  941.  
  942.  
  943.  
  944.  

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