Télécharger pre121.eso

Retour à la liste

Numérotation des lignes :

pre121
  1. C PRE121 SOURCE OF166741 24/10/03 21:15:29 12022
  2. SUBROUTINE PRE121(LOGTEM,
  3. & ICEN,IFACE,IFACEL,INORM,
  4. & IROC, IGRROC, IALROC,
  5. & IVITC, IGRVC, IALVC,
  6. & IPC ,IGRPC, IALPC,
  7. & IGAMC,
  8. & DELTAT,
  9. & IROF,IVITF,IPF,IGAMF,
  10. & LOGAN,LOGNEG,LOGBOR,MESERR,VALER,VAL1,VAL2)
  11. C************************************************************************
  12. C
  13. C PROJET : CASTEM 2000
  14. C
  15. C NOM : PRE121
  16. C
  17. C DESCRIPTION : Voir PRE12
  18. C
  19. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  20. C
  21. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  22. C
  23. C************************************************************************
  24. C
  25. C
  26. C APPELES (Outils) : KRIPAD, LICHT
  27. C
  28. C APPELES (Calcul) : AUCUN
  29. C
  30. C
  31. C************************************************************************
  32. C
  33. C ENTREES
  34. C
  35. C LOGTEM : LOGICAL; si .TRUE. 2em ordre en temps
  36. C sinon 1er ordre en temps
  37. C
  38. C 1) Pointeurs de MELEMEs et de CHPOINTs de la table DOMAINE
  39. C
  40. C ICEN : MELEME de 'POI1' SPG des CENTRES
  41. C
  42. C IFACE : MELEME de 'POI1' SPG des FACES
  43. C
  44. C IFACEL : MELEME de 'SEG3' avec
  45. C CENTRE d'Elt "gauche"
  46. C CENTRE de Face
  47. C CENTRE d'Elt "droite"
  48. C
  49. C N.B. = IFACE.NUM(i,1) = IFACEL.NUM(i,2)
  50. C
  51. C INORM : CHPOINT des cosinus directeurs de normales aux faces
  52. C
  53. C 2) Pointeurs des CHPOINTs
  54. C
  55. C IROC : CHPOINT "CENTRE" contenant la masse volumique RHO
  56. C
  57. C IGRROC : CHPOINT "CENTRE" contenant le gradient de la
  58. C masse volumique RHO (2 composantes)
  59. C
  60. C IALROC : CHPOINT "CENTRE" contenant le limiteur du gradient
  61. C de la masse volumique
  62. C
  63. C IVITC : CHPOINT "CENTRE" contenant la vitesse UX, UY ;
  64. C
  65. C IGRVC : CHPOINT "CENTRE" contenant le gradient de la
  66. C vitesse (4 composantes)
  67. C
  68. C IALVC : CHPOINT "CENTRE" contenant le limiteur du gradient
  69. C de la vitesse (2 composantes)
  70. C
  71. C IPC : CHPOINT "CENTRE" contenat la pression P;
  72. C
  73. C IGRPC : CHPOINT "CENTRE" contenant le gradient de la
  74. C pression (2 composantes)
  75. C
  76. C IALPC : CHPOINT "CENTRE" contenant le limiteur du gradient
  77. C de la pression
  78. C
  79. C IGAMC : CHPOINT "CENTRE" contenat le "Gamma" du gaz
  80. C
  81. C 3)
  82. C
  83. C DELTAT : REAL*8, encrement en temps pour calculer la prediction
  84. C
  85. C
  86. C SORTIES
  87. C
  88. C
  89. C IROF : MCHAML defini sur le MELEME de pointeur IFACEL,
  90. C contenant la masse volumique RHO
  91. C
  92. C IVITF : MCHAML defini sur le MELEME de pointeur IFACEL,
  93. C contenant la vitesse UN, UT dans le repaire local
  94. C (n,t) et defini sur le MELEME de pointeur IFACE,
  95. C contenant les cosinus directeurs du repere local
  96. C
  97. C IPF : MCHAML defini sur le MELEME de pointeur IFACEL,
  98. C contenant la pression P
  99. C
  100. C IGAMF : MCHAML defini sur le MELEME de pointeur IFACEL,
  101. C contenant le "gamma" du gaz
  102. C
  103. C LOGAN : anomalie detectee
  104. C
  105. C LOGNEG : (LOGICAL): si .TRUE. une pression ou une densité
  106. C negative a été detectée -> en interactif le
  107. C programme s'arrete en GIBIANE
  108. C (erreur stocké en MESERR et VALER)
  109. C
  110. C LOGBOR : (LOGICAL): si .TRUE. un gamma a ete detecte
  111. C dehor 1 et 3 (sa valeur stockée en MESERR et VALER;
  112. C en VAL1 et en VAL2 on stocke 1.0 et 3.0)
  113. C
  114. C MESERR
  115. C VALER
  116. C VAL1,
  117. C VAL2 : pour les messages d'erreur
  118. C
  119. C************************************************************************
  120. C
  121. C HISTORIQUE (Anomalies et modifications éventuelles)
  122. C
  123. C HISTORIQUE : Créée le 11.6.98.
  124. C
  125. C************************************************************************
  126. C
  127. C
  128. C ATTENTION: Cet programme marche si le MAILLAGE est convex;
  129. C si non il faut changer l'argoritme de calcul de
  130. C l'orientation des normales aux faces.
  131. C
  132. C La positivité n'est pas controlle parce que c'est déjà fait
  133. C dans l'operateur PRIM
  134. C
  135. C
  136. C************************************************************************
  137. C
  138. C**** Les variables
  139. C
  140. IMPLICIT INTEGER(I-N)
  141.  
  142. -INC PPARAM
  143. -INC CCOPTIO
  144.  
  145. INTEGER ICEN, IFACE, IFACEL, INORM,IROC, IGRROC, IALROC
  146. & , IVITC, IGRVC, IALVC
  147. & , IPC ,IGRPC, IALPC
  148. & , IGAMC
  149. & , IROF, IVITF, IPF, IGAMF
  150. & , IGEOM, NFAC, NCEN
  151. & , N1PTEL, N1EL, N2PTEL, N2EL, N2, N1, N3, L1, NLCE
  152. & , NLCF, NGCF, NGCEG, NLCEG, NGCED, NLCED, NGCF1
  153. & , IDIMP1, INDCEL
  154. REAL*8 VALER, VAL1, VAL2, XG, YG, XC, YC, XD, YD, DELTAT
  155. & ,DXG, DYG, DXD, DYD
  156. & , CNX, CNY, CTX, CTY, ORIENT
  157. & , ROG, PG, GAMG, UXG, UYG, UNG, UTG
  158. & , ROD, PD, GAMD, UXD, UYD, UND, UTD
  159. & , VALCEL, DCEL, ALCEL
  160. & , DROX, DROY, DUXX, DUXY, DUYX, DUYY, DPX, DPY
  161. & , DRO, DUX, DUY, DP, ALPHA(4)
  162. CHARACTER*(40) MESERR
  163. CHARACTER*(8) TYPE
  164. LOGICAL LOGAN,LOGNEG, LOGBOR, LOGTEM, LOGI1, LOGALP
  165. C
  166. C**** LOGALP = .TRUE. -> Prediction avec limiteur
  167. C
  168. PARAMETER(LOGALP = .TRUE.)
  169. C
  170. C**** Les Includes
  171. C
  172. -INC SMCOORD
  173.  
  174. -INC SMCHPOI
  175. POINTEUR MPROC.MPOVAL, MPGRR.MPOVAL,
  176. & MPVITC.MPOVAL, MPGRV.MPOVAL,
  177. & MPPC.MPOVAL, MPGRP.MPOVAL,
  178. & MPGAMC.MPOVAL, MPNORM.MPOVAL,
  179. & MPROP.MPOVAL, MPPP.MPOVAL, MPVITP.MPOVAL
  180. -INC SMCHAML
  181. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  182. & MELT1X.MELVAL, MELT1Y.MELVAL
  183. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  184. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  185. & MELGAM.MELVAL
  186. POINTEUR MELALR.MPOVAL,
  187. & MELALV.MPOVAL,
  188. & MELALP.MPOVAL
  189. -INC SMLENTI
  190. -INC SMELEME
  191. C
  192. C
  193. C**** Initialisation des parametres d'erreur déjà faite, i.e.
  194. C
  195. C LOGNEG = .FALSE.
  196. C LOGBOR = .FALSE.
  197. C MESERR = ' '
  198. C MOTERR(1:40) = MESERR(1:40)
  199. C VALER = 0.0D0
  200. C VAL1 = 0.0D0
  201. C VAL2 = 0.0D0
  202. C
  203. C
  204. C**** KRIPAD pour la correspondance global/local de centre
  205. C
  206. CALL KRIPAD(ICEN,MLENT1)
  207. C
  208. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  209. C
  210. C Si i est le numero global d'un noeud de ICEN,
  211. C MLENT1.LECT(i) contient sa position, i.e.
  212. C
  213. C I = numero global du noeud centre
  214. C MLENT1.LECT(i) = numero local du noeud centre
  215. C
  216. C MLENT1 déjà activé, i.e.
  217. C
  218. C SEGACT MLENT1
  219. C
  220. C**** Activation de CHPOINTs
  221. C
  222. C densité + grad + limiteur
  223. C vitesse + grad + limiteur
  224. C pression + grad + limiteur
  225. C gamma
  226. C cosinus directeurs des normales aux surface
  227. C
  228. CALL LICHT(IROC , MPROC , TYPE, IGEOM)
  229. CALL LICHT(IGRROC, MPGRR , TYPE, IGEOM)
  230. CALL LICHT(IVITC, MPVITC , TYPE, IGEOM)
  231. CALL LICHT(IGRVC, MPGRV , TYPE, IGEOM)
  232. CALL LICHT(IPC , MPPC , TYPE, IGEOM)
  233. CALL LICHT(IGRPC, MPGRP , TYPE, IGEOM)
  234. CALL LICHT(IGAMC, MPGAMC , TYPE, IGEOM)
  235. CALL LICHT(INORM, MPNORM , TYPE, IGEOM)
  236. C
  237. C**** Les MPOVALs 'Prediction'
  238. C
  239. IF(LOGTEM)THEN
  240. SEGINI, MPROP = MPROC
  241. SEGINI, MPPP = MPPC
  242. SEGINI, MPVITP = MPVITC
  243. ELSE
  244. MPROP = MPROC
  245. MPPP = MPPC
  246. MPVITP = MPVITC
  247. ENDIF
  248. C
  249. C**** Les Limiteurs
  250. C
  251. CALL LICHT(IALROC, MELALR , TYPE, IGEOM)
  252. CALL LICHT(IALVC, MELALV , TYPE, IGEOM)
  253. CALL LICHT(IALPC, MELALP , TYPE, IGEOM)
  254. C
  255. C
  256. C**** MPOVAL sont déjà activés i.e.:
  257. C
  258. C SEGACT MPROC
  259. C SEGACT MPGRR
  260. C SEGACT MPIALR
  261. C SEGACT MPVITC
  262. C SEGACT MPGRV
  263. C SEGACT MPIALV
  264. C SEGACT MPPC
  265. C SEGACT MPGRP
  266. C SEGACT MPIALP
  267. C SEGACT MPGAMC
  268. C SEGACT MPNORM
  269. C
  270. C**** Le MELEME FACEL
  271. C
  272. IPT1 = IFACEL
  273. IPT2 = IFACE
  274. SEGACT IPT1
  275. SEGACT IPT2
  276. NFAC = IPT1.NUM(/2)
  277. C
  278. C**** Creation de MCHAMLs contenant les etats gauche et droite,
  279. C
  280. C i.e.:
  281. C
  282. C vitesse + cosinus directors du repere local
  283. C densité
  284. C pression
  285. C gamma
  286. C
  287. C**** Cosinus directors du repere local et vitesse
  288. C
  289. C Les cosinus directeurs
  290. C
  291. N1 = 2
  292. N3 = 6
  293. L1 = 28
  294. SEGINI MCHEL1
  295. IVITF = MCHEL1
  296. MCHEL1.TITCHE = 'U '
  297. MCHEL1.IMACHE(1) = IFACE
  298. MCHEL1.IMACHE(2) = IFACEL
  299. MCHEL1.CONCHE(1) = ' (n,t) in (x,y) '
  300. MCHEL1.CONCHE(2) = ' U in (n,t) '
  301. C
  302. C**** Valeurs des cosinus definies par respect au repere global, i.e.
  303. C
  304. MCHEL1.INFCHE(1,1) = 2
  305. MCHEL1.INFCHE(1,3) = NIFOUR
  306. MCHEL1.INFCHE(1,4) = 0
  307. MCHEL1.INFCHE(1,5) = 0
  308. MCHEL1.INFCHE(1,6) = 1
  309. MCHEL1.IFOCHE = IFOUR
  310. C
  311. C**** Valeurs de vitesse definies par respect au repere local, i.e.
  312. C
  313. MCHEL1.INFCHE(2,1) = 1
  314. MCHEL1.INFCHE(2,3) = NIFOUR
  315. MCHEL1.INFCHE(2,4) = 0
  316. MCHEL1.INFCHE(2,5) = 0
  317. MCHEL1.INFCHE(2,6) = 1
  318. C
  319. C**** Le cosinus directeurs
  320. C
  321. N1PTEL = 1
  322. N1EL = NFAC
  323. N2PTEL = 0
  324. N2EL = 0
  325. C
  326. C**** MCHAML a N2 composantes:
  327. C
  328. C cosinus directeurs du repere local (n,t1)
  329. C
  330. C IDIM = 2 -> 4 composantes
  331. C
  332. N2 = 4
  333. SEGINI MCHAM1
  334. MCHEL1.ICHAML(1) = MCHAM1
  335. MCHAM1.NOMCHE(1) = 'NX '
  336. MCHAM1.NOMCHE(2) = 'NY '
  337. MCHAM1.NOMCHE(3) = 'TX '
  338. MCHAM1.NOMCHE(4) = 'TY '
  339. MCHAM1.TYPCHE(1) = 'REAL*8 '
  340. MCHAM1.TYPCHE(2) = 'REAL*8 '
  341. MCHAM1.TYPCHE(3) = 'REAL*8 '
  342. MCHAM1.TYPCHE(4) = 'REAL*8 '
  343. SEGINI MELVNX
  344. SEGINI MELVNY
  345. SEGINI MELT1X
  346. SEGINI MELT1Y
  347. MCHAM1.IELVAL(1) = MELVNX
  348. MCHAM1.IELVAL(2) = MELVNY
  349. MCHAM1.IELVAL(3) = MELT1X
  350. MCHAM1.IELVAL(4) = MELT1Y
  351. C
  352. C**** Vitesse
  353. C
  354. N1EL = NFAC
  355. N1PTEL = 3
  356. N2EL = 0
  357. N2PTEL = 0
  358. C
  359. C**** MCHAML a N2 composantes:
  360. C
  361. C IDIM = 2 -> 2 composantes
  362. C
  363. N2 = 2
  364. SEGINI MCHAM1
  365. MCHEL1.ICHAML(2) = MCHAM1
  366. MCHAM1.NOMCHE(1) = 'UN '
  367. MCHAM1.NOMCHE(2) = 'UT '
  368. MCHAM1.TYPCHE(1) = 'REAL*8 '
  369. MCHAM1.TYPCHE(2) = 'REAL*8 '
  370. SEGINI MELVUN
  371. SEGINI MELVUT
  372. MCHAM1.IELVAL(1) = MELVUN
  373. MCHAM1.IELVAL(2) = MELVUT
  374. C
  375. C**** Densite
  376. C
  377. N1 = 1
  378. N3 = 6
  379. L1 = 15
  380. SEGINI MCHEL2
  381. IROF = MCHEL2
  382. MCHEL2.IMACHE(1) = IFACEL
  383. MCHEL2.TITCHE = 'RO '
  384. MCHEL2.CONCHE(1) = ' '
  385. C
  386. C**** Valeurs independente du repére, i.e.
  387. C
  388. MCHEL2.INFCHE(1,1) = 0
  389. MCHEL2.INFCHE(1,3) = NIFOUR
  390. MCHEL2.INFCHE(1,4) = 0
  391. MCHEL2.INFCHE(1,5) = 0
  392. MCHEL2.INFCHE(1,6) = 1
  393. MCHEL2.IFOCHE = IFOUR
  394. N2 = 1
  395. SEGINI MCHAM1
  396. MCHEL2.ICHAML(1) = MCHAM1
  397. MCHAM1.NOMCHE(1) = 'SCAL '
  398. MCHAM1.TYPCHE(1) = 'REAL*8 '
  399. SEGINI MELRO
  400. MCHAM1.IELVAL(1) = MELRO
  401. C
  402. C**** Pression
  403. C
  404. MCHEL1 = IROF
  405. SEGINI, MCHEL2 = MCHEL1
  406. IPF = MCHEL2
  407. MCHEL2.TITCHE = 'P '
  408. C
  409. C**** MCHAM1 = MCHAML de la densite
  410. C
  411. SEGINI, MCHAM2 = MCHAM1
  412. MCHEL2.ICHAML(1) = MCHAM2
  413. SEGINI MELP
  414. MCHAM2.IELVAL(1) = MELP
  415. C
  416. C**** Gamma
  417. C
  418. MCHEL1 = IROF
  419. SEGINI, MCHEL2 = MCHEL1
  420. IGAMF = MCHEL2
  421. MCHEL2.TITCHE = 'GAMMA '
  422. C
  423. C**** MCHAM1 = MCHAML de la densite
  424. C
  425. SEGINI, MCHAM2 = MCHAM1
  426. MCHEL2.ICHAML(1) = MCHAM2
  427. SEGINI MELGAM
  428. MCHAM2.IELVAL(1) = MELGAM
  429. C
  430. C**** Recapitulatif: les MELVALs et les MPOVALs actives
  431. C
  432. C MELVNX, MELVNY
  433. C MELT1X, MELT1Y
  434. C
  435. C MELVUN, MELVUT -> vitesse
  436. C
  437. C MELRO -> densite
  438. C
  439. C MELP -> pression
  440. C
  441. C MELGAM -> gamma
  442. C
  443. C MPROC, MPROP -> densite
  444. C
  445. C MPVITC, MPVITP -> vitesse
  446. C
  447. C MPPC, MPPP -> pression
  448. C
  449. C MPGAMC -> gamma
  450. C
  451. C MPNORM -> normales aux faces
  452. C
  453. C
  454. C***********************************************************************
  455. C********* PREDICTION **************************************************
  456. C***********************************************************************
  457. C
  458. IF(LOGTEM)THEN
  459. C
  460. IPT3 = ICEN
  461. SEGACT IPT3
  462. NCEN = IPT3.NUM(/2)
  463. DO NLCE = 1, NCEN
  464. IF(LOGALP)THEN
  465. C
  466. C************* Gradients limités
  467. C
  468. ALPHA(1) = MELALR.VPOCHA(NLCE,1)
  469. ALPHA(2) = MELALV.VPOCHA(NLCE,1)
  470. ALPHA(3) = MELALV.VPOCHA(NLCE,2)
  471. ALPHA(4) = MELALP.VPOCHA(NLCE,1)
  472. ELSE
  473. C
  474. C************* Gradients non limités
  475. C
  476. ALPHA(1) = 1.0D0
  477. ALPHA(2) = 1.0D0
  478. ALPHA(3) = 1.0D0
  479. ALPHA(4) = 1.0D0
  480. ENDIF
  481. ROG = MPROP.VPOCHA(NLCE,1)
  482. UXG = MPVITP.VPOCHA(NLCE,1)
  483. UYG = MPVITP.VPOCHA(NLCE,2)
  484. PG = MPPP.VPOCHA(NLCE,1)
  485. DROX = MPGRR.VPOCHA(NLCE,1)*ALPHA(1)
  486. DROY = MPGRR.VPOCHA(NLCE,2)*ALPHA(1)
  487. DUXX = MPGRV.VPOCHA(NLCE,1)*ALPHA(2)
  488. DUXY = MPGRV.VPOCHA(NLCE,2)*ALPHA(2)
  489. DUYX = MPGRV.VPOCHA(NLCE,3)*ALPHA(3)
  490. DUYY = MPGRV.VPOCHA(NLCE,4)*ALPHA(3)
  491. DPX = MPGRP.VPOCHA(NLCE,1)*ALPHA(4)
  492. DPY = MPGRP.VPOCHA(NLCE,2)*ALPHA(4)
  493. GAMG = MPGAMC.VPOCHA(NLCE,1)
  494. DRO = UXG * DROX + ROG * ( DUXX + DUYY )
  495. & + UYG * DROY
  496. DUX = UXG * DUXX + DPX / ROG + UYG * DUXY
  497. DUY = UXG * DUYX + UYG * DUYY + DPY / ROG
  498. DP = GAMG * PG * (DUXX + DUYY)
  499. & + UXG * DPX + UYG * DPY
  500. C
  501. C************* Prediction avec/sans gradients limités
  502. C
  503. MPROP.VPOCHA(NLCE,1) = ROG - DELTAT * DRO
  504. MPVITP.VPOCHA(NLCE,1) = UXG - DELTAT * DUX
  505. MPVITP.VPOCHA(NLCE,2) = UYG - DELTAT * DUY
  506. MPPP.VPOCHA(NLCE,1) = PG - DELTAT * DP
  507. ENDDO
  508. C
  509. ENDIF
  510. C
  511. C
  512. C***********************************************************************
  513. C********* CORRECTION **************************************************
  514. C***********************************************************************
  515. C
  516. C**** Boucle sur le faces
  517. C
  518. IDIMP1 = IDIM + 1
  519. DO NLCF = 1, NFAC
  520. C
  521. C******* NLCF = numero local du centre de face
  522. C NGCF = numero global du centre de face
  523. C NGCEG = numero global du centre ELT "gauche"
  524. C NLCEG = numero local du centre ELT "gauche"
  525. C NGCED = numero global du centre ELT "droite"
  526. C NLCED = numero local du centre ELT "droite"
  527. C
  528. NGCEG = IPT1.NUM(1,NLCF)
  529. NGCF = IPT1.NUM(2,NLCF)
  530. NGCED = IPT1.NUM(3,NLCF)
  531. NLCEG = MLENT1.LECT(NGCEG)
  532. NLCED = MLENT1.LECT(NGCED)
  533. C
  534. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  535. C
  536. NGCF1 = IPT2.NUM(1,NLCF)
  537. IF( NGCF1 .NE. NGCF) THEN
  538. LOGAN = .TRUE.
  539. MESERR(1:40) = 'PRET, subroutine pre121.eso '
  540. GOTO 9999
  541. ENDIF
  542. C
  543. C******* Cosinus directeurs des NORMALES aux faces
  544. C
  545. C On impose que les normales sont direct "Gauche" -> "Centre"
  546. C
  547. INDCEL = (NGCEG-1)*IDIMP1
  548. XG = XCOOR(INDCEL+1)
  549. YG = XCOOR(INDCEL+2)
  550. INDCEL = (NGCF-1)*IDIMP1
  551. XC = XCOOR(INDCEL + 1)
  552. YC = XCOOR(INDCEL + 2)
  553. INDCEL = (NGCED-1)*IDIMP1
  554. XD = XCOOR(INDCEL+1)
  555. YD = XCOOR(INDCEL+2)
  556. DXG = XC - XG
  557. DYG = YC - YG
  558. DXD = XC - XD
  559. DYD = YC - YD
  560. C
  561. C******* On calcule le sign du pruduit scalare
  562. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  563. C
  564. CNX = MPNORM.VPOCHA(NLCF,1)
  565. CNY = MPNORM.VPOCHA(NLCF,2)
  566. ORIENT = CNX * DXG + CNY * DYG
  567. ORIENT = SIGN(1.0D0,ORIENT)
  568. IF(ORIENT .NE. 1.0D0)THEN
  569. LOGAN = .TRUE.
  570. MESERR(1:30)=
  571. & 'PRET , subroutine pre121.eso. '
  572. GOTO 9999
  573. ENDIF
  574. CNX = CNX * ORIENT
  575. CNY = CNY * ORIENT
  576. C
  577. C********** Cosinus directeurs de tangent 2D
  578. C
  579. CTX = -1.0D0 * CNY
  580. CTY = CNX
  581. C
  582. C
  583. C******* Les autres MELVALs
  584. C
  585. C
  586. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0
  587. C GAMMA \in (1,3)
  588. C Si non il faut le faire, en utilisant LOGBOR,
  589. C LOGNEG, VALER, VAL1, VAL2
  590. C
  591. C
  592. C
  593. C******* NGCEG = NGCED -> Mur
  594. C
  595. IF( NGCEG .EQ. NGCED)THEN
  596. C
  597. C********** Sur le mur on fait de reconstruction sur l'etat gauche
  598. C
  599. C
  600. C********** Etat gauche
  601. C
  602. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  603. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  604. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  605. & MPGRR.VPOCHA(NLCEG, 2)*DYG
  606. ROG = VALCEL + ALCEL * DCEL
  607. C
  608. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  609. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  610. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  611. & MPGRP.VPOCHA(NLCEG, 2)*DYG
  612. PG = VALCEL + ALCEL * DCEL
  613. C
  614. GAMG = MPGAMC.VPOCHA(NLCEG, 1)
  615. C
  616. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  617. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  618. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  619. & MPGRV.VPOCHA(NLCEG, 2)*DYG
  620. UXG = VALCEL + ALCEL * DCEL
  621. C
  622. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  623. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  624. DCEL = MPGRV.VPOCHA(NLCEG, 3)*DXG +
  625. & MPGRV.VPOCHA(NLCEG, 4)*DYG
  626. UYG = VALCEL + ALCEL * DCEL
  627. C
  628. UNG = UXG * CNX + UYG * CNY
  629. UTG = UXG * CTX + UYG * CTY
  630. C
  631. C********** Si l'on fait pas de prediction, ce n'est pas necessaire de
  632. C controller la positivite' de la pression et de la densité; elle
  633. C est déjà garantie par la proprieté LED de limiteur; mais, vu
  634. C que le limiteur n'est pas calculé ici, mais dans un autre
  635. C operateur, on le fait
  636. C
  637. LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0)
  638. C
  639. IF(LOGI1)THEN
  640. C
  641. C************* Premier ordre en espace local
  642. C
  643. ROG = MPROC.VPOCHA(NLCEG,1)
  644. PG = MPPC.VPOCHA(NLCEG,1)
  645. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  646. & MPVITC.VPOCHA(NLCEG,2)*CNY
  647. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  648. & MPVITC.VPOCHA(NLCEG,2)*CTY
  649. ENDIF
  650. C
  651. C********** Son etat droite
  652. C
  653. ROD = ROG
  654. PD = PG
  655. GAMD = GAMG
  656. UND = -1.0D0 * UNG
  657. UTD = UTG
  658. C
  659. C************* Fin cas mur
  660. C
  661. ELSE
  662. C
  663. C************* Etat gauche
  664. C
  665. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  666. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  667. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  668. & MPGRR.VPOCHA(NLCEG, 2)*DYG
  669. ROG = VALCEL + ALCEL * DCEL
  670. C
  671. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  672. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  673. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  674. & MPGRP.VPOCHA(NLCEG, 2)*DYG
  675. PG = VALCEL + ALCEL * DCEL
  676. C
  677. GAMG = MPGAMC.VPOCHA(NLCEG, 1)
  678. C
  679. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  680. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  681. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  682. & MPGRV.VPOCHA(NLCEG, 2)*DYG
  683. UXG = VALCEL + ALCEL * DCEL
  684. C
  685. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  686. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  687. DCEL = MPGRV.VPOCHA(NLCEG, 3)*DXG +
  688. & MPGRV.VPOCHA(NLCEG, 4)*DYG
  689. UYG = VALCEL + ALCEL * DCEL
  690. C
  691. UNG = UXG * CNX + UYG * CNY
  692. UTG = UXG * CTX + UYG * CTY
  693. C
  694. C********** Positivite
  695. C
  696. LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0)
  697. C
  698. IF(LOGI1)THEN
  699. C
  700. C************* Premier ordre en espace local
  701. C
  702. ROG = MPROC.VPOCHA(NLCEG,1)
  703. PG = MPPC.VPOCHA(NLCEG,1)
  704. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  705. & MPVITC.VPOCHA(NLCEG,2)*CNY
  706. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  707. & MPVITC.VPOCHA(NLCEG,2)*CTY
  708. ENDIF
  709. C
  710. C********** Etat droite
  711. C
  712. VALCEL = MPROP.VPOCHA(NLCED, 1)
  713. ALCEL = MELALR.VPOCHA(NLCED, 1)
  714. DCEL = MPGRR.VPOCHA(NLCED, 1)*DXD +
  715. & MPGRR.VPOCHA(NLCED, 2)*DYD
  716. ROD = VALCEL + ALCEL * DCEL
  717. C
  718. VALCEL = MPPP.VPOCHA(NLCED, 1)
  719. ALCEL = MELALP.VPOCHA(NLCED, 1)
  720. DCEL = MPGRP.VPOCHA(NLCED, 1)*DXD +
  721. & MPGRP.VPOCHA(NLCED, 2)*DYD
  722. PD = VALCEL + ALCEL * DCEL
  723. C
  724. GAMD = MPGAMC.VPOCHA(NLCED, 1)
  725. C
  726. VALCEL = MPVITP.VPOCHA(NLCED, 1)
  727. ALCEL = MELALV.VPOCHA(NLCED, 1)
  728. DCEL = MPGRV.VPOCHA(NLCED, 1)*DXD +
  729. & MPGRV.VPOCHA(NLCED, 2)*DYD
  730. UXD = VALCEL + ALCEL * DCEL
  731. C
  732. VALCEL = MPVITP.VPOCHA(NLCED, 2)
  733. ALCEL = MELALV.VPOCHA(NLCED, 2)
  734. DCEL = MPGRV.VPOCHA(NLCED, 3)*DXD +
  735. & MPGRV.VPOCHA(NLCED, 4)*DYD
  736. UYD = VALCEL + ALCEL * DCEL
  737. C
  738. UND = UXD * CNX + UYD * CNY
  739. UTD = UXD * CTX + UYD * CTY
  740. C
  741. C********** Positivite
  742. C
  743. LOGI1 = (PD .LT. 0.0D0) .OR. (ROD .LT. 0.0D0)
  744. C
  745. IF(LOGI1)THEN
  746. C
  747. C************* Premier ordre en espace local
  748. C
  749. ROD = MPROC.VPOCHA(NLCED,1)
  750. PD = MPPC.VPOCHA(NLCED,1)
  751. UND = MPVITC.VPOCHA(NLCED,1)*CNX +
  752. & MPVITC.VPOCHA(NLCED,2)*CNY
  753. UTD = MPVITC.VPOCHA(NLCED,1)*CTX +
  754. & MPVITC.VPOCHA(NLCED,2)*CTY
  755. ENDIF
  756. ENDIF
  757. C
  758. C******** Les MELVALs
  759. C
  760. MELRO.VELCHE(1,NLCF) = ROG
  761. MELRO.VELCHE(3,NLCF) = ROD
  762. MELP.VELCHE(1,NLCF) = PG
  763. MELP.VELCHE(3,NLCF) = PD
  764. MELGAM.VELCHE(1,NLCF) = GAMG
  765. MELGAM.VELCHE(3,NLCF) = GAMD
  766. MELVUN.VELCHE(1,NLCF) = UNG
  767. MELVUN.VELCHE(3,NLCF) = UND
  768. MELVUT.VELCHE(1,NLCF) = UTG
  769. MELVUT.VELCHE(3,NLCF) = UTD
  770. MELVNX.VELCHE(1,NLCF) = CNX
  771. MELVNY.VELCHE(1,NLCF) = CNY
  772. MELT1X.VELCHE(1,NLCF) = CTX
  773. MELT1Y.VELCHE(1,NLCF) = CTY
  774. C
  775. ENDDO
  776. C
  777. C**** Le MPOVALs 'Prediction' sont detruits (si existentes)
  778. C
  779. IF(LOGTEM)THEN
  780. SEGSUP MPROP
  781. SEGSUP MPVITP
  782. SEGSUP MPPP
  783. ENDIF
  784. C**** Destruction du MLENTI correspondance local/global
  785. C
  786. SEGSUP MLENT1
  787. C
  788. 9999 CONTINUE
  789.  
  790. END
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  

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