Télécharger pre321.eso

Retour à la liste

Numérotation des lignes :

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

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