Télécharger pre221.eso

Retour à la liste

Numérotation des lignes :

pre221
  1. C PRE221 SOURCE CB215821 20/11/25 13:36:14 10792
  2. SUBROUTINE PRE221(LOGTEM,
  3. & ICEN,IFACE,IFACEL,INORM,
  4. & IROC, IGRROC, IALROC,
  5. & IVITC, IGRVC, IALVC,
  6. & IPC ,IGRPC, IALPC,
  7. & MLRECV, MLRECP, MLMOT1,
  8. & IYC ,IGRYC, IALYC,
  9. & IGAMC,
  10. & DELTAT,
  11. & IROF,IVITF,IPF,IGAMF,IYF,
  12. & LOGAN,LOGNEG,LOGBOR,MESERR,VALER,VAL1,VAL2)
  13. C************************************************************************
  14. C
  15. C PROJET : CASTEM 2000
  16. C
  17. C NOM : PRE221
  18. C
  19. C DESCRIPTION : Voir PRE22
  20. C
  21. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  22. C
  23. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  24. C
  25. C************************************************************************
  26. C
  27. C
  28. C APPELES (Outils) : KRIPAD, LICHT
  29. C
  30. C APPELES (Calcul) : AUCUN
  31. C
  32. C
  33. C************************************************************************
  34. C
  35. C ENTREES
  36. C
  37. C LOGTEM : LOGICAL; si .TRUE. 2em ordre en temps
  38. C sinon 1er ordre en temps
  39. C
  40. C 1) Pointeurs de MELEMEs et de CHPOINTs de la table DOMAINE
  41. C
  42. C ICEN : MELEME de 'POI1' SPG des CENTRES
  43. C
  44. C IFACE : MELEME de 'POI1' SPG des FACES
  45. C
  46. C IFACEL : MELEME de 'SEG3' avec
  47. C CENTRE d'Elt "gauche"
  48. C CENTRE de Face
  49. C CENTRE d'Elt "droite"
  50. C
  51. C N.B. = IFACE.NUM(i,1) = IFACEL.NUM(i,2)
  52. C
  53. C INORM : CHPOINT des cosinus directeurs de normales aux faces
  54. C
  55. C 2) Autres pointeurs
  56. C
  57. C IROC : CHPOINT "CENTRE" contenant la masse volumique RHO
  58. C
  59. C IGRROC : CHPOINT "CENTRE" contenant le gradient de la
  60. C masse volumique RHO (2 composantes)
  61. C
  62. C IALROC : CHPOINT "CENTRE" contenant le limiteur du gradient
  63. C de la masse volumique
  64. C
  65. C IVITC : CHPOINT "CENTRE" contenant la vitesse UX, UY ;
  66. C
  67. C IGRVC : CHPOINT "CENTRE" contenant le gradient de la
  68. C vitesse (4 composantes)
  69. C
  70. C IALVC : CHPOINT "CENTRE" contenant le limiteur du gradient
  71. C de la vitesse (2 composantes)
  72. C
  73. C IPC : CHPOINT "CENTRE" contenat la pression P;
  74. C
  75. C IGRPC : CHPOINT "CENTRE" contenant le gradient de la
  76. C pression (2 composantes)
  77. C
  78. C IALPC : CHPOINT "CENTRE" contenant le limiteur du gradient
  79. C de la pression
  80. C
  81. C MLRECV : pointeur de la LISTREEL des cv
  82. C
  83. C MLRECP : pointeur de la LISTREEL des cp
  84. C
  85. C MLMOT1 : pointeur des noms des gaz qui apparessent dans les
  86. C equations d'Euler
  87. C
  88. C IYC : CHPOINT "CENTRE" contenat les fractions massiques ;
  89. C
  90. C IGRYC : CHPOINT "CENTRE" contenant les gradient des fr.mass.;
  91. C
  92. C IALPC : CHPOINT "CENTRE" contenant les limiteurs des gradients
  93. C des fr.mass.;
  94. C
  95. C IGAMC : CHPOINT "CENTRE" contenat le "Gamma" du gaz
  96. C
  97. C 3)
  98. C
  99. C DELTAT : REAL*8, encrement en temps pour calculer la prediction
  100. C
  101. C
  102. C SORTIES
  103. C
  104. C
  105. C IROF : MCHAML defini sur le MELEME de pointeur IFACEL,
  106. C contenant la masse volumique RHO
  107. C
  108. C IVITF : MCHAML defini sur le MELEME de pointeur IFACEL,
  109. C contenant la vitesse UN, UT dans le repaire local
  110. C (n,t) et defini sur le MELEME de pointeur IFACE,
  111. C contenant les cosinus directeurs du repere local
  112. C
  113. C IPF : MCHAML defini sur le MELEME de pointeur IFACEL,
  114. C contenant la pression P
  115. C
  116. C IYF : MCHAML defini sur le MELEME de pointeur IFACEL,
  117. C contenant les fractions massiques;
  118. C
  119. C IGAMF : MCHAML defini sur le MELEME de pointeur IFACEL,
  120. C contenant le "gamma" du gaz
  121. C
  122. C LOGAN : anomalie detectee
  123. C
  124. C LOGNEG : (LOGICAL): si .TRUE. une pression ou une densité
  125. C negative a été detectée -> en interactif le
  126. C programme s'arrete en GIBIANE
  127. C (erreur stocké en MESERR et VALER)
  128. C
  129. C LOGBOR : (LOGICAL): si .TRUE. un gamma a ete detecte
  130. C dehor 1 et 3 (sa valeur stockée en MESERR et VALER;
  131. C en VAL1 et en VAL2 on stocke 1.0 et 3.0)
  132. C
  133. C MESERR
  134. C VALER
  135. C VAL1,
  136. C VAL2 : pour les messages d'erreur
  137. C
  138. C************************************************************************
  139. C
  140. C HISTORIQUE (Anomalies et modifications éventuelles)
  141. C
  142. C HISTORIQUE : Créée le 10.7.98.
  143. C
  144. C************************************************************************
  145. C
  146. C
  147. C ATTENTION: Cet programme marche si le MAILLAGE est convex;
  148. C si non il faut changer l'algoritme de calcul de
  149. C l'orientation des normales aux faces.
  150. C
  151. C La positivité n'est pas controlle parce que c'est déjà fait
  152. C dans l'operateur PRIM
  153. C
  154. C
  155. C************************************************************************
  156. C
  157. C**** Variables de COOPTIO
  158. C
  159. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  160. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  161. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  162. C & ,IECHO, IIMPI, IOSPI
  163. C & ,IDIM
  164. CC & ,MCOORD
  165. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  166. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  167. C & ,NORINC,NORVAL,NORIND,NORVAD
  168. C & ,NUCROU, IPSAUV
  169. C
  170. C**** Les variables
  171. C
  172. IMPLICIT INTEGER(I-N)
  173. INTEGER ICEN, IFACE, IFACEL, INORM,IROC, IGRROC, IALROC
  174. & , IVITC, IGRVC, IALVC
  175. & , IPC ,IGRPC, IALPC
  176. & , IYC, IGRYC, IALYC
  177. & , IGAMC
  178. & , IROF, IVITF, IPF, IGAMF, IYF
  179. & , IGEOM, NFAC, NCEN
  180. & , N1PTEL, N1EL, N2PTEL, N2EL, N2, N1, N3, L1, NLCE
  181. & , NLCF, NGCF, NGCEG, NLCEG, NGCED, NLCED, NGCF1
  182. & , IDIMP1, INDCEL, I1, NESP
  183. REAL*8 VALER, VAL1, VAL2, XG, YG, XC, YC, XD, YD, DELTAT
  184. & ,DXG, DYG, DXD, DYD
  185. & , CNX, CNY, CTX, CTY, ORIENT
  186. & , ROG, PG, GAMG, UXG, UYG, UNG, UTG
  187. & , ROD, PD, GAMD, UXD, UYD, UND, UTD
  188. & , VALCEL, DCEL, ALCEL
  189. & , DROX, DROY, DUXX, DUXY, DUYX, DUYY, DPX, DPY
  190. & , DRO, DUX, DUY, DP
  191. & , ALPHA, CPCEL, CVCEL, DYMAS, SUMY
  192. CHARACTER*(40) MESERR
  193. CHARACTER*(8) TYPE
  194. LOGICAL LOGAN,LOGNEG, LOGBOR, LOGTEM, LOGI1, LOGI2
  195. C
  196. C
  197. C**** Les Includes
  198. C
  199. -INC SMCOORD
  200.  
  201. -INC PPARAM
  202. -INC CCOPTIO
  203. -INC SMCHPOI
  204. POINTEUR MPROC.MPOVAL, MPGRR.MPOVAL,
  205. & MPVITC.MPOVAL, MPGRV.MPOVAL,
  206. & MPPC.MPOVAL, MPGRP.MPOVAL,
  207. & MPYC.MPOVAL, MPGRY.MPOVAL,
  208. & MPGAMC.MPOVAL, MPNORM.MPOVAL,
  209. & MPROP.MPOVAL, MPPP.MPOVAL, MPVITP.MPOVAL,
  210. & MPYP.MPOVAL
  211. -INC SMCHAML
  212. POINTEUR MCHAMY.MCHAML
  213. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  214. & MELT1X.MELVAL, MELT1Y.MELVAL
  215. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  216. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  217. & MELGAM.MELVAL
  218. POINTEUR MELALR.MPOVAL,
  219. & MELALV.MPOVAL,
  220. & MELALP.MPOVAL,
  221. & MELALY.MPOVAL
  222. -INC SMLENTI
  223. -INC SMELEME
  224. -INC SMLREEL
  225. POINTEUR MLRECV.MLREEL, MLRECP.MLREEL
  226. -INC SMLMOTS
  227. C
  228. C**** Segments des fractions massiques gauche et droit
  229. C
  230. SEGMENT FRAMAS
  231. REAL*8 FRAMG(NESP), FRAMD(NESP)
  232. ENDSEGMENT
  233. C
  234. SEGACT MLMOT1
  235. C
  236. C
  237. C**** Initialisation des parametres d'erreur déjà faite, i.e.
  238. C
  239. C LOGNEG = .FALSE.
  240. C LOGBOR = .FALSE.
  241. C MESERR = ' '
  242. C MOTERR(1:40) = MESERR(1:40)
  243. C VALER = 0.0D0
  244. C VAL1 = 0.0D0
  245. C VAL2 = 0.0D0
  246. C
  247. C AB
  248. C 2010/09/14: LOGI1 computed can destroy the symmetry!
  249. C LOGI1 = .FALSE.
  250. LOGI1 = .FALSE.
  251. C
  252. C**** KRIPAD pour la correspondance global/local de centre
  253. C
  254. CALL KRIPAD(ICEN,MLENT1)
  255. C
  256. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  257. C
  258. C Si i est le numero global d'un noeud de ICEN,
  259. C MLENT1.LECT(i) contient sa position, i.e.
  260. C
  261. C I = numero global du noeud centre
  262. C MLENT1.LECT(i) = numero local du noeud centre
  263. C
  264. C MLENT1 déjà activé, i.e.
  265. C
  266. C SEGACT MLENT1
  267. C
  268. C**** Activation de CHPOINTs
  269. C
  270. C densité + grad + limiteur
  271. C vitesse + grad + limiteur
  272. C pression + grad + limiteur
  273. C fract.mass + grad + limiteur
  274. C gamma
  275. C cosinus directeurs des normales aux surface
  276. C
  277. CALL LICHT(IROC , MPROC , TYPE, IGEOM)
  278. CALL LICHT(IGRROC, MPGRR , TYPE, IGEOM)
  279. CALL LICHT(IVITC, MPVITC , TYPE, IGEOM)
  280. CALL LICHT(IGRVC, MPGRV , TYPE, IGEOM)
  281. CALL LICHT(IPC , MPPC , TYPE, IGEOM)
  282. CALL LICHT(IGRPC, MPGRP , TYPE, IGEOM)
  283. CALL LICHT(IYC , MPYC , TYPE, IGEOM)
  284. CALL LICHT(IGRYC, MPGRY , TYPE, IGEOM)
  285. CALL LICHT(IGAMC, MPGAMC , TYPE, IGEOM)
  286. CALL LICHT(INORM, MPNORM , TYPE, IGEOM)
  287. C
  288. C**** Les MPOVALs 'Prediction'
  289. C
  290. IF(LOGTEM)THEN
  291. SEGINI, MPROP = MPROC
  292. SEGINI, MPPP = MPPC
  293. SEGINI, MPVITP = MPVITC
  294. SEGINI, MPYP = MPYC
  295. ELSE
  296. MPROP = MPROC
  297. MPPP = MPPC
  298. MPVITP = MPVITC
  299. MPYP = MPYC
  300. ENDIF
  301. C
  302. C**** Les Limiteurs
  303. C
  304. CALL LICHT(IALROC, MELALR , TYPE, IGEOM)
  305. CALL LICHT(IALVC, MELALV , TYPE, IGEOM)
  306. CALL LICHT(IALPC, MELALP , TYPE, IGEOM)
  307. CALL LICHT(IALYC, MELALY , TYPE, IGEOM)
  308. C
  309. C
  310. C**** Les MPOVAL sont déjà activés i.e.:
  311. C
  312. C SEGACT MPROC
  313. C SEGACT MPGRR
  314. C SEGACT MPIALR
  315. C SEGACT MPVITC
  316. C SEGACT MPGRV
  317. C SEGACT MPIALV
  318. C SEGACT MPPC
  319. C SEGACT MPGRP
  320. C SEGACT MPIALP
  321. C SEGACT MPYC
  322. C SEGACT MPGRY
  323. C SEGACT MPIALY
  324. C SEGACT MPGAMC
  325. C SEGACT MPNORM
  326. C
  327. C**** Le MELEME FACEL
  328. C
  329. IPT1 = IFACEL
  330. IPT2 = IFACE
  331. SEGACT IPT1
  332. SEGACT IPT2
  333. NFAC = IPT1.NUM(/2)
  334. C
  335. C**** Creation de MCHAMLs contenant les etats gauche et droite,
  336. C
  337. C i.e.:
  338. C
  339. C vitesse + cosinus directors du repere local
  340. C densité
  341. C pression
  342. C gamma
  343. C
  344. C**** Cosinus directors du repere local et vitesse
  345. C
  346. C Les cosinus directeurs
  347. C
  348. N1 = 2
  349. N3 = 6
  350. L1 = 28
  351. SEGINI MCHEL1
  352. IVITF = MCHEL1
  353. MCHEL1.TITCHE = 'U '
  354. MCHEL1.IMACHE(1) = IFACE
  355. MCHEL1.IMACHE(2) = IFACEL
  356. MCHEL1.CONCHE(1) = ' (n,t) in (x,y) '
  357. MCHEL1.CONCHE(2) = ' U in (n,t) '
  358. C
  359. C**** Valeurs des cosinus definies par respect au repair global, i.e.
  360. C
  361. MCHEL1.INFCHE(1,1) = 2
  362. MCHEL1.INFCHE(1,3) = NIFOUR
  363. MCHEL1.INFCHE(1,4) = 0
  364. MCHEL1.INFCHE(1,5) = 0
  365. MCHEL1.INFCHE(1,6) = 0
  366. MCHEL1.IFOCHE = IFOUR
  367. C
  368. C**** Valeurs de vitesse definies par respect au repair local, i.e.
  369. C
  370. MCHEL1.INFCHE(2,1) = 1
  371. MCHEL1.INFCHE(2,3) = NIFOUR
  372. MCHEL1.INFCHE(2,4) = 0
  373. MCHEL1.INFCHE(2,5) = 0
  374. MCHEL1.INFCHE(2,6) = 0
  375. C
  376. C**** Le cosinus directeurs
  377. C
  378. N1PTEL = 1
  379. N1EL = NFAC
  380. N2PTEL = 0
  381. N2EL = 0
  382. C
  383. C**** MCHAML a N2 composantes:
  384. C
  385. C cosinus directeurs du repere local (n,t1)
  386. C
  387. C IDIM = 2 -> 4 composantes
  388. C
  389. N2 = 4
  390. SEGINI MCHAM1
  391. MCHEL1.ICHAML(1) = MCHAM1
  392. MCHAM1.NOMCHE(1) = 'NX '
  393. MCHAM1.NOMCHE(2) = 'NY '
  394. MCHAM1.NOMCHE(3) = 'TX '
  395. MCHAM1.NOMCHE(4) = 'TY '
  396. MCHAM1.TYPCHE(1) = 'REAL*8 '
  397. MCHAM1.TYPCHE(2) = 'REAL*8 '
  398. MCHAM1.TYPCHE(3) = 'REAL*8 '
  399. MCHAM1.TYPCHE(4) = 'REAL*8 '
  400. SEGINI MELVNX
  401. SEGINI MELVNY
  402. SEGINI MELT1X
  403. SEGINI MELT1Y
  404. MCHAM1.IELVAL(1) = MELVNX
  405. MCHAM1.IELVAL(2) = MELVNY
  406. MCHAM1.IELVAL(3) = MELT1X
  407. MCHAM1.IELVAL(4) = MELT1Y
  408. SEGDES MCHAM1
  409. C
  410. C**** Vitesse
  411. C
  412. N1EL = NFAC
  413. N1PTEL = 3
  414. N2EL = 0
  415. N2PTEL = 0
  416. C
  417. C**** MCHAML a N2 composantes:
  418. C
  419. C IDIM = 2 -> 2 composantes
  420. C
  421. N2 = 2
  422. SEGINI MCHAM1
  423. MCHEL1.ICHAML(2) = MCHAM1
  424. SEGDES MCHEL1
  425. MCHAM1.NOMCHE(1) = 'UN '
  426. MCHAM1.NOMCHE(2) = 'UT '
  427. MCHAM1.TYPCHE(1) = 'REAL*8 '
  428. MCHAM1.TYPCHE(2) = 'REAL*8 '
  429. SEGINI MELVUN
  430. SEGINI MELVUT
  431. MCHAM1.IELVAL(1) = MELVUN
  432. MCHAM1.IELVAL(2) = MELVUT
  433. SEGDES MCHAM1
  434. C
  435. C**** Densite
  436. C
  437. N1 = 1
  438. N3 = 6
  439. L1 = 15
  440. SEGINI MCHEL2
  441. IROF = MCHEL2
  442. MCHEL2.IMACHE(1) = IFACEL
  443. MCHEL2.TITCHE = 'RO '
  444. MCHEL2.CONCHE(1) = ' '
  445. C
  446. C**** Valeurs independente du repére, i.e.
  447. C
  448. MCHEL2.INFCHE(1,1) = 0
  449. MCHEL2.INFCHE(1,3) = NIFOUR
  450. MCHEL2.INFCHE(1,4) = 0
  451. MCHEL2.INFCHE(1,5) = 0
  452. MCHEL2.INFCHE(1,6) = 0
  453. MCHEL2.IFOCHE = IFOUR
  454. N2 = 1
  455. SEGINI MCHAM1
  456. MCHEL2.ICHAML(1) = MCHAM1
  457. SEGDES MCHEL2
  458. MCHAM1.NOMCHE(1) = 'SCAL '
  459. MCHAM1.TYPCHE(1) = 'REAL*8 '
  460. SEGINI MELRO
  461. MCHAM1.IELVAL(1) = MELRO
  462. SEGDES MCHAM1
  463. C
  464. C**** Pression
  465. C
  466. MCHEL1 = IROF
  467. SEGINI, MCHEL2 = MCHEL1
  468. IPF = MCHEL2
  469. MCHEL2.TITCHE = 'P '
  470. C
  471. C**** MCHAM1 = MCHAML de la densite
  472. C
  473. SEGINI, MCHAM2 = MCHAM1
  474. MCHEL2.ICHAML(1) = MCHAM2
  475. SEGDES MCHEL2
  476. SEGINI MELP
  477. MCHAM2.IELVAL(1) = MELP
  478. SEGDES MCHAM2
  479. C
  480. C**** Gamma
  481. C
  482. MCHEL1 = IROF
  483. SEGINI, MCHEL2 = MCHEL1
  484. IGAMF = MCHEL2
  485. MCHEL2.TITCHE = 'GAMMA '
  486. C
  487. C**** MCHAM1 = MCHAML de la densite
  488. C
  489. SEGINI, MCHAM2 = MCHAM1
  490. MCHEL2.ICHAML(1) = MCHAM2
  491. SEGDES MCHEL2
  492. SEGINI MELGAM
  493. MCHAM2.IELVAL(1) = MELGAM
  494. SEGDES MCHAM2
  495. C
  496. C**** Le CHAMELEM des fractions massiques
  497. C
  498. NESP = MPYC.VPOCHA(/2)
  499. SEGINI FRAMAS
  500. MCHEL1 = IROF
  501. SEGINI, MCHEL2 = MCHEL1
  502. IYF = MCHEL2
  503. MCHEL2.TITCHE = 'Y '
  504. N2 = NESP
  505. SEGINI MCHAMY
  506. MCHEL2.ICHAML(1) = MCHAMY
  507. SEGDES MCHEL2
  508. N1EL = NFAC
  509. N1PTEL = 3
  510. N2EL = 0
  511. N2PTEL = 0
  512. DO I1 = 1, NESP
  513. SEGINI MELVA1
  514. MCHAMY.IELVAL(I1) = MELVA1
  515. MCHAMY.NOMCHE(I1) = MLMOT1.MOTS(I1)
  516. MCHAMY.TYPCHE(I1) = 'REAL*8 '
  517. ENDDO
  518. C
  519. C
  520. C***********************************************************************
  521. C********* PREDICTION **************************************************
  522. C***********************************************************************
  523. C
  524. C**** Prediction avec gradients limités
  525. C
  526. C
  527. IF(LOGTEM)THEN
  528. C
  529. IPT3 = ICEN
  530. SEGACT IPT3
  531. NCEN = IPT3.NUM(/2)
  532. DO NLCE = 1, NCEN
  533. ROG = MPROP.VPOCHA(NLCE,1)
  534. UXG = MPVITP.VPOCHA(NLCE,1)
  535. UYG = MPVITP.VPOCHA(NLCE,2)
  536. PG = MPPP.VPOCHA(NLCE,1)
  537. DROX = MPGRR.VPOCHA(NLCE,1)*MELALR.VPOCHA(NLCE,1)
  538. DROY = MPGRR.VPOCHA(NLCE,2)*MELALR.VPOCHA(NLCE,1)
  539. DUXX = MPGRV.VPOCHA(NLCE,1)*MELALV.VPOCHA(NLCE,1)
  540. DUXY = MPGRV.VPOCHA(NLCE,2)*MELALV.VPOCHA(NLCE,1)
  541. DUYX = MPGRV.VPOCHA(NLCE,3)*MELALV.VPOCHA(NLCE,2)
  542. DUYY = MPGRV.VPOCHA(NLCE,4)* MELALV.VPOCHA(NLCE,2)
  543. DPX = MPGRP.VPOCHA(NLCE,1)* MELALP.VPOCHA(NLCE,1)
  544. DPY = MPGRP.VPOCHA(NLCE,2)* MELALP.VPOCHA(NLCE,1)
  545. GAMG = MPGAMC.VPOCHA(NLCE,1)
  546. DRO = UXG * DROX + ROG * ( DUXX + DUYY )
  547. & + UYG * DROY
  548. DUX = UXG * DUXX + DPX / ROG + UYG * DUXY
  549. DUY = UXG * DUYX + UYG * DUYY + DPY / ROG
  550. DP = GAMG * PG * (DUXX + DUYY)
  551. & + UXG * DPX + UYG * DPY
  552. C
  553. MPROP.VPOCHA(NLCE,1) = ROG - DELTAT * DRO
  554. MPVITP.VPOCHA(NLCE,1) = UXG - DELTAT * DUX
  555. MPVITP.VPOCHA(NLCE,2) = UYG - DELTAT * DUY
  556. MPPP.VPOCHA(NLCE,1) = PG - DELTAT * DP
  557. DO I1 = 1, NESP
  558. INDCEL = 2 * I1 - 1
  559. ALPHA = MELALY.VPOCHA(NLCE,I1)
  560. DYMAS = UXG * MPGRY.VPOCHA(NLCE,INDCEL) * ALPHA +
  561. & UYG * MPGRY.VPOCHA(NLCE,INDCEL+1) * ALPHA
  562. MPYP.VPOCHA(NLCE,I1) = MPYC.VPOCHA(NLCE,I1) -
  563. & DELTAT * DYMAS
  564. ENDDO
  565. ENDDO
  566. C
  567. ENDIF
  568. C
  569. C
  570. C***********************************************************************
  571. C********* CORRECTION **************************************************
  572. C***********************************************************************
  573. C
  574. C**** Boucle sur le faces
  575. C
  576. IDIMP1 = IDIM + 1
  577. DO NLCF = 1, NFAC
  578. C
  579. C******* NLCF = numero local du centre de face
  580. C NGCF = numero global du centre de face
  581. C NGCEG = numero global du centre ELT "gauche"
  582. C NLCEG = numero local du centre ELT "gauche"
  583. C NGCED = numero global du centre ELT "droite"
  584. C NLCED = numero local du centre ELT "droite"
  585. C
  586. NGCEG = IPT1.NUM(1,NLCF)
  587. NGCF = IPT1.NUM(2,NLCF)
  588. NGCED = IPT1.NUM(3,NLCF)
  589. NLCEG = MLENT1.LECT(NGCEG)
  590. NLCED = MLENT1.LECT(NGCED)
  591. C
  592. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  593. C
  594. NGCF1 = IPT2.NUM(1,NLCF)
  595. IF( NGCF1 .NE. NGCF) THEN
  596. LOGAN = .TRUE.
  597. MESERR(1:40) = 'PRET, subroutine pre221.eso '
  598. GOTO 9999
  599. ENDIF
  600. C
  601. C******* Cosinus directeurs des NORMALES aux faces
  602. C
  603. C On impose que les normales sont direct "Gauche" -> "Centre"
  604. C
  605. INDCEL = (NGCEG-1)*IDIMP1
  606. XG = XCOOR(INDCEL+1)
  607. YG = XCOOR(INDCEL+2)
  608. INDCEL = (NGCF-1)*IDIMP1
  609. XC = XCOOR(INDCEL + 1)
  610. YC = XCOOR(INDCEL + 2)
  611. INDCEL = (NGCED-1)*IDIMP1
  612. XD = XCOOR(INDCEL+1)
  613. YD = XCOOR(INDCEL+2)
  614. DXG = XC - XG
  615. DYG = YC - YG
  616. DXD = XC - XD
  617. DYD = YC - YD
  618. C
  619. C******* On calcule le sign du pruduit scalare
  620. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  621. C
  622. CNX = MPNORM.VPOCHA(NLCF,1)
  623. CNY = MPNORM.VPOCHA(NLCF,2)
  624. ORIENT = CNX * DXG + CNY * DYG
  625. ORIENT = SIGN(1.0D0,ORIENT)
  626. IF(ORIENT .NE. 1.0D0)THEN
  627. LOGAN = .TRUE.
  628. MESERR(1:30)=
  629. & 'PRET , subroutine pre221.eso. '
  630. GOTO 9999
  631. ENDIF
  632. CNX = CNX * ORIENT
  633. CNY = CNY * ORIENT
  634. C
  635. C********** Cosinus directeurs de tangent 2D
  636. C
  637. CTX = -1.0D0 * CNY
  638. CTY = CNX
  639. C
  640. C
  641. C******* Les autres MELVALs
  642. C
  643. C
  644. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0
  645. C GAMMA \in (1,3)
  646. C Si non il faut le faire, en utilisant LOGBOR,
  647. C LOGNEG, VALER, VAL1, VAL2
  648. C
  649. C
  650. C
  651. C******* NGCEG = NGCED -> Mur
  652. C
  653. IF( NGCEG .EQ. NGCED)THEN
  654. C
  655. C********** Sur le mur on fait de reconstruction sur l'etat gauche
  656. C
  657. C
  658. C********** Etat gauche
  659. C
  660. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  661. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  662. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  663. & MPGRR.VPOCHA(NLCEG, 2)*DYG
  664. ROG = VALCEL + ALCEL * DCEL
  665. C
  666. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  667. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  668. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  669. & MPGRP.VPOCHA(NLCEG, 2)*DYG
  670. PG = VALCEL + ALCEL * DCEL
  671. C
  672. LOGI2 = .FALSE.
  673. SUMY = 0.0D0
  674. CPCEL = 0.0D0
  675. CVCEL = 0.0D0
  676. DO I1 = 1, NESP
  677. INDCEL = 2 * I1 - 1
  678. VALCEL = MPYP.VPOCHA(NLCEG,I1)
  679. ALCEL = MELALY.VPOCHA(NLCEG, I1)
  680. DCEL = MPGRY.VPOCHA(NLCEG, INDCEL)*DXG +
  681. & MPGRY.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  682. ALCEL = VALCEL + ALCEL * DCEL
  683. SUMY = SUMY + ALCEL
  684. CPCEL = CPCEL + MLRECP.PROG(I1) * ALCEL
  685. CVCEL = CVCEL + MLRECV.PROG(I1) * ALCEL
  686. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  687. FRAMAS.FRAMG(I1) = ALCEL
  688. ENDDO
  689. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  690. CPCEL = CPCEL + (1.0D0 - SUMY) * MLRECP.PROG(NESP+1)
  691. CVCEL = CVCEL + (1.0D0 - SUMY) * MLRECV.PROG(NESP+1)
  692. GAMG = CPCEL / CVCEL
  693. C
  694. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  695. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  696. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  697. & MPGRV.VPOCHA(NLCEG, 2)*DYG
  698. UXG = VALCEL + ALCEL * DCEL
  699. C
  700. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  701. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  702. DCEL = MPGRV.VPOCHA(NLCEG, 3)*DXG +
  703. & MPGRV.VPOCHA(NLCEG, 4)*DYG
  704. UYG = VALCEL + ALCEL * DCEL
  705. C
  706. UNG = UXG * CNX + UYG * CNY
  707. UTG = UXG * CTX + UYG * CTY
  708. C
  709. C********** Si l'on fait pas de prediction, ce n'est pas necessaire de
  710. C controller la positivite' de la pression et de la densité; elle
  711. C est déjà garantie par la proprieté LED de limiteur; mais, vu
  712. C que le limiteur n'est pas calculé ici, mais dans un autre
  713. C operateur, on le fait
  714. C
  715. C LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0) .OR. LOGI2
  716. C 2010/09/14: AB this destroys the symmetry!
  717. C LOGI1 = .FALSE.
  718. C
  719. C
  720. IF(LOGI1)THEN
  721. C
  722. C************* Premier ordre en espace local
  723. C
  724. ROG = MPROC.VPOCHA(NLCEG,1)
  725. ROD = ROG
  726. PG = MPPC.VPOCHA(NLCEG,1)
  727. PD = PG
  728. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  729. & MPVITC.VPOCHA(NLCEG,2)*CNY
  730. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  731. & MPVITC.VPOCHA(NLCEG,2)*CTY
  732. UND = -1.0D0 * UNG
  733. UTD = UTG
  734. DO I1 = 1, NESP
  735. FRAMAS.FRAMG(I1) = MPYC.VPOCHA(NLCEG,I1)
  736. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  737. ENDDO
  738. GAMG = MPGAMC.VPOCHA(NLCEG,1)
  739. GAMD = GAMG
  740. ELSE
  741. C
  742. C********** Son etat droite
  743. C
  744. ROD = ROG
  745. PD = PG
  746. UND = -1.0D0 * UNG
  747. UTD = UTG
  748. DO I1 = 1, NESP
  749. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  750. ENDDO
  751. GAMD = GAMG
  752. ENDIF
  753. C
  754. C************* Fin cas mur
  755. C
  756. ELSE
  757. C
  758. C************* Etat gauche
  759. C
  760. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  761. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  762. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  763. & MPGRR.VPOCHA(NLCEG, 2)*DYG
  764. ROG = VALCEL + ALCEL * DCEL
  765. C
  766. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  767. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  768. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  769. & MPGRP.VPOCHA(NLCEG, 2)*DYG
  770. PG = VALCEL + ALCEL * DCEL
  771. C
  772. LOGI2 = .FALSE.
  773. SUMY = 0.0D0
  774. CPCEL = 0.0D0
  775. CVCEL = 0.0D0
  776. DO I1 = 1, NESP
  777. INDCEL = 2 * I1 - 1
  778. VALCEL = MPYP.VPOCHA(NLCEG,I1)
  779. ALCEL = MELALY.VPOCHA(NLCEG, I1)
  780. DCEL = MPGRY.VPOCHA(NLCEG, INDCEL)*DXG +
  781. & MPGRY.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  782. ALCEL = VALCEL + ALCEL * DCEL
  783. SUMY = SUMY + ALCEL
  784. CPCEL = CPCEL + MLRECP.PROG(I1) * ALCEL
  785. CVCEL = CVCEL + MLRECV.PROG(I1) * ALCEL
  786. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  787. FRAMAS.FRAMG(I1) = ALCEL
  788. ENDDO
  789. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  790. CPCEL = CPCEL + (1.0D0 - SUMY) * MLRECP.PROG(NESP+1)
  791. CVCEL = CVCEL + (1.0D0 - SUMY) * MLRECV.PROG(NESP+1)
  792. GAMG = CPCEL / CVCEL
  793. C
  794. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  795. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  796. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  797. & MPGRV.VPOCHA(NLCEG, 2)*DYG
  798. UXG = VALCEL + ALCEL * DCEL
  799. C
  800. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  801. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  802. DCEL = MPGRV.VPOCHA(NLCEG, 3)*DXG +
  803. & MPGRV.VPOCHA(NLCEG, 4)*DYG
  804. UYG = VALCEL + ALCEL * DCEL
  805. C
  806. UNG = UXG * CNX + UYG * CNY
  807. UTG = UXG * CTX + UYG * CTY
  808. C
  809. C********** Positivite
  810. C
  811. C LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0) .OR. LOGI2
  812. C 2010/09/14: AB this destroys the symmetry!
  813. C LOGI1 = .FALSE.
  814. C
  815. IF(LOGI1)THEN
  816. C
  817. C************* Premier ordre en espace local
  818. C
  819. ROG = MPROC.VPOCHA(NLCEG,1)
  820. PG = MPPC.VPOCHA(NLCEG,1)
  821. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  822. & MPVITC.VPOCHA(NLCEG,2)*CNY
  823. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  824. & MPVITC.VPOCHA(NLCEG,2)*CTY
  825. DO I1 = 1, NESP
  826. FRAMAS.FRAMG(I1) = MPYC.VPOCHA(NLCEG,I1)
  827. ENDDO
  828. GAMG = MPGAMC.VPOCHA(NLCEG,1)
  829. ENDIF
  830. C
  831. C********** Etat droite
  832. C
  833. VALCEL = MPROP.VPOCHA(NLCED, 1)
  834. ALCEL = MELALR.VPOCHA(NLCED, 1)
  835. DCEL = MPGRR.VPOCHA(NLCED, 1)*DXD +
  836. & MPGRR.VPOCHA(NLCED, 2)*DYD
  837. ROD = VALCEL + ALCEL * DCEL
  838. C
  839. VALCEL = MPPP.VPOCHA(NLCED, 1)
  840. ALCEL = MELALP.VPOCHA(NLCED, 1)
  841. DCEL = MPGRP.VPOCHA(NLCED, 1)*DXD +
  842. & MPGRP.VPOCHA(NLCED, 2)*DYD
  843. PD = VALCEL + ALCEL * DCEL
  844. C
  845. LOGI2 = .FALSE.
  846. SUMY = 0.0D0
  847. CPCEL = 0.0D0
  848. CVCEL = 0.0D0
  849. DO I1 = 1, NESP
  850. INDCEL = 2 * I1 - 1
  851. VALCEL = MPYP.VPOCHA(NLCED,I1)
  852. ALCEL = MELALY.VPOCHA(NLCED, I1)
  853. DCEL = MPGRY.VPOCHA(NLCED, INDCEL)*DXD +
  854. & MPGRY.VPOCHA(NLCED,INDCEL + 1 )*DYD
  855. ALCEL = VALCEL + ALCEL * DCEL
  856. SUMY = SUMY + ALCEL
  857. CPCEL = CPCEL + MLRECP.PROG(I1) * ALCEL
  858. CVCEL = CVCEL + MLRECV.PROG(I1) * ALCEL
  859. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  860. FRAMAS.FRAMD(I1) = ALCEL
  861. ENDDO
  862. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  863. CPCEL = CPCEL + (1.0D0 - SUMY) * MLRECP.PROG(NESP+1)
  864. CVCEL = CVCEL + (1.0D0 - SUMY) * MLRECV.PROG(NESP+1)
  865. GAMD = CPCEL / CVCEL
  866. C
  867. VALCEL = MPVITP.VPOCHA(NLCED, 1)
  868. ALCEL = MELALV.VPOCHA(NLCED, 1)
  869. DCEL = MPGRV.VPOCHA(NLCED, 1)*DXD +
  870. & MPGRV.VPOCHA(NLCED, 2)*DYD
  871. UXD = VALCEL + ALCEL * DCEL
  872. C
  873. VALCEL = MPVITP.VPOCHA(NLCED, 2)
  874. ALCEL = MELALV.VPOCHA(NLCED, 2)
  875. DCEL = MPGRV.VPOCHA(NLCED, 3)*DXD +
  876. & MPGRV.VPOCHA(NLCED, 4)*DYD
  877. UYD = VALCEL + ALCEL * DCEL
  878. C
  879. UND = UXD * CNX + UYD * CNY
  880. UTD = UXD * CTX + UYD * CTY
  881. C
  882. C********** Positivite
  883. C
  884. C LOGI1 = (PD .LT. 0.0D0) .OR. (ROD .LT. 0.0D0) .OR. LOGI2
  885. C 2010/09/14: AB this destroys the symmetry!
  886. C LOGI1 = .FALSE.
  887. C
  888. IF(LOGI1)THEN
  889. C
  890. C************* Premier ordre en espace local
  891. C
  892. ROD = MPROC.VPOCHA(NLCED,1)
  893. PD = MPPC.VPOCHA(NLCED,1)
  894. UND = MPVITC.VPOCHA(NLCED,1)*CNX +
  895. & MPVITC.VPOCHA(NLCED,2)*CNY
  896. UTD = MPVITC.VPOCHA(NLCED,1)*CTX +
  897. & MPVITC.VPOCHA(NLCED,2)*CTY
  898. DO I1 = 1, NESP
  899. FRAMAS.FRAMD(I1) = MPYC.VPOCHA(NLCED,I1)
  900. ENDDO
  901. GAMD = MPGAMC.VPOCHA(NLCED,1)
  902. ENDIF
  903. ENDIF
  904. C
  905. C******** Les MELVALs
  906. C
  907. MELRO.VELCHE(1,NLCF) = ROG
  908. MELRO.VELCHE(3,NLCF) = ROD
  909. MELP.VELCHE(1,NLCF) = PG
  910. MELP.VELCHE(3,NLCF) = PD
  911. MELGAM.VELCHE(1,NLCF) = GAMG
  912. MELGAM.VELCHE(3,NLCF) = GAMD
  913. MELVUN.VELCHE(1,NLCF) = UNG
  914. MELVUN.VELCHE(3,NLCF) = UND
  915. MELVUT.VELCHE(1,NLCF) = UTG
  916. MELVUT.VELCHE(3,NLCF) = UTD
  917. MELVNX.VELCHE(1,NLCF) = CNX
  918. MELVNY.VELCHE(1,NLCF) = CNY
  919. MELT1X.VELCHE(1,NLCF) = CTX
  920. MELT1Y.VELCHE(1,NLCF) = CTY
  921. DO I1 = 1, NESP
  922. MELVA1 = MCHAMY.IELVAL(I1)
  923. MELVA1.VELCHE(1,NLCF) = FRAMAS.FRAMG(I1)
  924. MELVA1.VELCHE(3,NLCF) = FRAMAS.FRAMD(I1)
  925. ENDDO
  926. ENDDO
  927. C
  928. C**** Desactivation des SEGMENTs
  929. C
  930. SEGDES IPT1
  931. SEGDES IPT2
  932. C
  933. C**** Le MPOVALs 'Prediction' sont detruits (si existentes)
  934. C
  935. IF(LOGTEM)THEN
  936. SEGSUP MPROP
  937. SEGSUP MPVITP
  938. SEGSUP MPPP
  939. SEGSUP MPYP
  940. ENDIF
  941. C
  942. SEGDES MPROC
  943. SEGDES MPGRR
  944. SEGDES MELALR
  945. SEGDES MPVITC
  946. SEGDES MPGRV
  947. SEGDES MELALV
  948. SEGDES MPPC
  949. SEGDES MPGRP
  950. SEGDES MELALP
  951. SEGDES MPYC
  952. SEGDES MPGRY
  953. SEGDES MELALY
  954. SEGDES MPGAMC
  955. SEGDES MPNORM
  956. C
  957. SEGDES MELRO
  958. SEGDES MELP
  959. SEGDES MELGAM
  960. SEGDES MELVUN
  961. SEGDES MELVUT
  962. SEGDES MELVNX
  963. SEGDES MELVNY
  964. SEGDES MELT1X
  965. SEGDES MELT1Y
  966. C
  967. SEGDES MPYC
  968. DO I1 = 1, NESP
  969. MELVA1 = MCHAMY.IELVAL(I1)
  970. SEGDES MELVA1
  971. ENDDO
  972. SEGDES MCHAMY
  973. SEGSUP FRAMAS
  974. C
  975. SEGDES MLMOT1
  976. CC
  977. C**** Destruction du MELNTI correspondance local/global
  978. C
  979. SEGSUP MLENT1
  980. C
  981. 9999 CONTINUE
  982. C
  983. RETURN
  984. END
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  

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