Télécharger pre221.eso

Retour à la liste

Numérotation des lignes :

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

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