Télécharger pre322.eso

Retour à la liste

Numérotation des lignes :

pre322
  1. C PRE322 SOURCE CB215821 20/11/25 13:36:25 10792
  2. SUBROUTINE PRE322(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 : PRE322
  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
  93. C passifs ;
  94. C
  95. C IALPC : CHPOINT "CENTRE" contenant les limiteurs des gradients
  96. C des scalaires passifs ;
  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**** Variables de COOPTIO
  163. C
  164. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  165. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  166. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  167. C & ,IECHO, IIMPI, IOSPI
  168. C & ,IDIM
  169. CC & ,MCOORD
  170. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  171. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  172. C & ,NORINC,NORVAL,NORIND,NORVAD
  173. C & ,NUCROU, IPSAUV
  174. C
  175. C**** Les variables
  176. C
  177. IMPLICIT INTEGER(I-N)
  178. INTEGER ICEN, IFACE, IFACEL, INORM,IROC, IGRROC, IALROC
  179. & , IVITC, IGRVC, IALVC
  180. & , IPC ,IGRPC, IALPC
  181. & , IYC, IGRYC, IALYC
  182. & , ISCAC, IGRSC, IALSC
  183. & , IGAMC
  184. & , IROF, IVITF, IPF, IYF, ISCAF
  185. & , IGEOM, NFAC, NCEN
  186. & , N1PTEL, N1EL, N2PTEL, N2EL, N2, N1, N3, L1, NLCE
  187. & , NLCF, NGCF, NGCEG, NLCEG, NGCED, NLCED, NGCF1
  188. & , IDIMP1, INDCEL, I1, NESP, NSCA, NMA
  189. REAL*8 VALER, VAL1, VAL2, XG, YG, ZG, XC, YC, ZC, XD, YD, ZD,
  190. & DELTAT
  191. & ,DXG, DYG, DZG, DXD, DYD, DZD,ORIENT
  192. & , CNX, CNY, CNZ, CTX, CTY, CTZ, CVX, CVY, CVZ
  193. & , ROG, PG, GAMG, UXG, UYG, UZG, UNG, UTG, UVG
  194. & , ROD, PD, UXD, UYD, UZD, UND, UTD, UVD
  195. & , VALCEL, DCEL, ALCEL
  196. & , DROX, DROY, DROZ, DUXX, DUXY, DUXZ, DUYX, DUYY,
  197. & DUYZ, DUZX, DUZY, DUZZ, DPX, DPY, DPZ
  198. & , DRO, DUX, DUY, DUZ, DP
  199. & , ALPHA, DYMAS, SUMY
  200. CHARACTER*(40) MESERR
  201. CHARACTER*(8) TYPE
  202. LOGICAL LOGAN,LOGNEG, LOGBOR, LOGTEM, LOGI1, LOGI2
  203. & , LGAMC,LYC,LSCAC
  204. C
  205. C**** Les Includes
  206. C
  207. -INC SMCOORD
  208.  
  209. -INC PPARAM
  210. -INC CCOPTIO
  211. -INC SMCHPOI
  212. POINTEUR MPROC.MPOVAL, MPGRR.MPOVAL,
  213. & MPVITC.MPOVAL, MPGRV.MPOVAL,
  214. & MPPC.MPOVAL, MPGRP.MPOVAL,
  215. & MPYC.MPOVAL, MPGRY.MPOVAL,
  216. & MPSCAC.MPOVAL, MPGRS.MPOVAL,
  217. & MPGAMC.MPOVAL, MPNORM.MPOVAL,
  218. & MPROP.MPOVAL, MPPP.MPOVAL, MPVITP.MPOVAL,
  219. & MPYP.MPOVAL, MPSCAP.MPOVAL
  220. -INC SMCHAML
  221. POINTEUR MCHAMY.MCHAML, MCHAMS.MCHAML
  222. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL, MELVNZ.MELVAL,
  223. & MELT1X.MELVAL, MELT1Y.MELVAL, MELT1Z.MELVAL,
  224. & MELT2X.MELVAL, MELT2Y.MELVAL, MELT2Z.MELVAL
  225. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL, MELVUV.MELVAL
  226. POINTEUR MELRO.MELVAL, MELP.MELVAL
  227. POINTEUR MELALR.MPOVAL,
  228. & MELALV.MPOVAL,
  229. & MELALP.MPOVAL,
  230. & MELALY.MPOVAL,
  231. & MELALS.MPOVAL
  232. -INC SMLENTI
  233. -INC SMELEME
  234. C
  235. C**** Segments des fractions massiques gauche et droit
  236. C
  237. SEGMENT FRAMAS
  238. REAL*8 FRAMG(NMA), FRAMD(NMA)
  239. ENDSEGMENT
  240. POINTEUR SCALPA.FRAMAS
  241. C
  242. C
  243. C**** Initialisation des parametres d'erreur déjà faite, i.e.
  244. C
  245. C LOGNEG = .FALSE.
  246. C LOGBOR = .FALSE.
  247. C MESERR = ' '
  248. C MOTERR(1:40) = MESERR(1:40)
  249. C VALER = 0.0D0
  250. C VAL1 = 0.0D0
  251. C VAL2 = 0.0D0
  252. C
  253. C
  254. C**** KRIPAD pour la correspondance global/local de centre
  255. C
  256. CALL KRIPAD(ICEN,MLENT1)
  257. C
  258. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  259. C
  260. C Si i est le numero global d'un noeud de ICEN,
  261. C MLENT1.LECT(i) contient sa position, i.e.
  262. C
  263. C I = numero global du noeud centre
  264. C MLENT1.LECT(i) = numero local du noeud centre
  265. C
  266. C MLENT1 déjà activé, i.e.
  267. C
  268. C SEGACT MLENT1
  269. C
  270. C**** Activation de CHPOINTs
  271. C
  272. C densité + grad + limiteur
  273. C vitesse + grad + limiteur
  274. C pression + grad + limiteur
  275. C fract.mass + grad + limiteur
  276. C gamma
  277. C cosinus directeurs des normales aux surface
  278. C
  279. CALL LICHT(IROC , MPROC , TYPE, IGEOM)
  280. CALL LICHT(IGRROC, MPGRR , TYPE, IGEOM)
  281. CALL LICHT(IVITC, MPVITC , TYPE, IGEOM)
  282. CALL LICHT(IGRVC, MPGRV , TYPE, IGEOM)
  283. CALL LICHT(IPC , MPPC , TYPE, IGEOM)
  284. CALL LICHT(IGRPC, MPGRP , TYPE, IGEOM)
  285. IF(LGAMC) 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. ELSE
  295. MPROP = MPROC
  296. MPPP = MPPC
  297. MPVITP = MPVITC
  298. ENDIF
  299. C
  300. C**** Les Limiteurs
  301. C
  302. CALL LICHT(IALROC, MELALR , TYPE, IGEOM)
  303. CALL LICHT(IALVC, MELALV , TYPE, IGEOM)
  304. CALL LICHT(IALPC, MELALP , TYPE, IGEOM)
  305. C
  306. C
  307. C**** Les MPOVAL sont déjà activés i.e.:
  308. C
  309. C SEGACT MPROC
  310. C SEGACT MPGRR
  311. C SEGACT MPIALR
  312. C SEGACT MPVITC
  313. C SEGACT MPGRV
  314. C SEGACT MPIALV
  315. C SEGACT MPPC
  316. C SEGACT MPGRP
  317. C SEGACT MPIALP
  318. C SEGACT MPGAMC
  319. C SEGACT MPNORM
  320. C
  321. C**** Le MELEME FACEL
  322. C
  323. IPT1 = IFACEL
  324. IPT2 = IFACE
  325. SEGACT IPT1
  326. SEGACT IPT2
  327. NFAC = IPT1.NUM(/2)
  328. C
  329. C**** Creation de MCHAMLs contenant les etats gauche et droite,
  330. C
  331. C i.e.:
  332. C
  333. C vitesse + cosinus directors du repere local
  334. C densité
  335. C pression
  336. C
  337. C**** Cosinus directors du repere local et vitesse
  338. C
  339. C Les cosinus directeurs
  340. C
  341. N1 = 2
  342. N3 = 6
  343. L1 = 28
  344. SEGINI MCHEL1
  345. IVITF = MCHEL1
  346. MCHEL1.TITCHE = 'U '
  347. MCHEL1.IMACHE(1) = IFACE
  348. MCHEL1.IMACHE(2) = IFACEL
  349. MCHEL1.CONCHE(1) = '(n,t,v)in(x,y,z)'
  350. MCHEL1.CONCHE(2) = ' U in (n,t,v) '
  351. C
  352. C**** Valeurs des cosinus definies par respect au repair global, i.e.
  353. C
  354. MCHEL1.INFCHE(1,1) = 2
  355. MCHEL1.INFCHE(1,3) = NIFOUR
  356. MCHEL1.INFCHE(1,4) = 0
  357. MCHEL1.INFCHE(1,5) = 0
  358. MCHEL1.INFCHE(1,6) = 0
  359. MCHEL1.IFOCHE = IFOUR
  360. C
  361. C**** Valeurs de vitesse definies par respect au repair local, i.e.
  362. C
  363. MCHEL1.INFCHE(2,1) = 1
  364. MCHEL1.INFCHE(2,3) = NIFOUR
  365. MCHEL1.INFCHE(2,4) = 0
  366. MCHEL1.INFCHE(2,5) = 0
  367. MCHEL1.INFCHE(2,6) = 0
  368. C
  369. C**** Le cosinus directeurs
  370. C
  371. N1PTEL = 1
  372. N1EL = NFAC
  373. N2PTEL = 0
  374. N2EL = 0
  375. C
  376. C**** MCHAML a N2 composantes:
  377. C
  378. C cosinus directeurs du repere local (n,t1)
  379. C
  380. C IDIM = 3 -> 9 composantes
  381. C
  382. N2 = 9
  383. SEGINI MCHAM1
  384. MCHEL1.ICHAML(1) = MCHAM1
  385. MCHAM1.NOMCHE(1) = 'NX '
  386. MCHAM1.NOMCHE(2) = 'NY '
  387. MCHAM1.NOMCHE(3) = 'NZ '
  388. MCHAM1.NOMCHE(4) = 'TX '
  389. MCHAM1.NOMCHE(5) = 'TY '
  390. MCHAM1.NOMCHE(6) = 'TZ '
  391. MCHAM1.NOMCHE(7) = 'VX '
  392. MCHAM1.NOMCHE(8) = 'VY '
  393. MCHAM1.NOMCHE(9) = 'VZ '
  394. MCHAM1.TYPCHE(1) = 'REAL*8 '
  395. MCHAM1.TYPCHE(2) = 'REAL*8 '
  396. MCHAM1.TYPCHE(3) = 'REAL*8 '
  397. MCHAM1.TYPCHE(4) = 'REAL*8 '
  398. MCHAM1.TYPCHE(5) = 'REAL*8 '
  399. MCHAM1.TYPCHE(6) = 'REAL*8 '
  400. MCHAM1.TYPCHE(7) = 'REAL*8 '
  401. MCHAM1.TYPCHE(8) = 'REAL*8 '
  402. MCHAM1.TYPCHE(9) = 'REAL*8 '
  403. SEGINI MELVNX
  404. SEGINI MELVNY
  405. SEGINI MELVNZ
  406. SEGINI MELT1X
  407. SEGINI MELT1Y
  408. SEGINI MELT1Z
  409. SEGINI MELT2X
  410. SEGINI MELT2Y
  411. SEGINI MELT2Z
  412. MCHAM1.IELVAL(1) = MELVNX
  413. MCHAM1.IELVAL(2) = MELVNY
  414. MCHAM1.IELVAL(3) = MELVNZ
  415. MCHAM1.IELVAL(4) = MELT1X
  416. MCHAM1.IELVAL(5) = MELT1Y
  417. MCHAM1.IELVAL(6) = MELT1Z
  418. MCHAM1.IELVAL(7) = MELT2X
  419. MCHAM1.IELVAL(8) = MELT2Y
  420. MCHAM1.IELVAL(9) = MELT2Z
  421. SEGDES MCHAM1
  422. C
  423. C**** Vitesse
  424. C
  425. N1EL = NFAC
  426. N1PTEL = 3
  427. N2EL = 0
  428. N2PTEL = 0
  429. C
  430. C**** MCHAML a N2 composantes:
  431. C
  432. C IDIM = 3 -> 3 composantes
  433. C
  434. N2 = 3
  435. SEGINI MCHAM1
  436. MCHEL1.ICHAML(2) = MCHAM1
  437. SEGDES MCHEL1
  438. MCHAM1.NOMCHE(1) = 'UN '
  439. MCHAM1.NOMCHE(2) = 'UT '
  440. MCHAM1.NOMCHE(3) = 'UV '
  441. MCHAM1.TYPCHE(1) = 'REAL*8 '
  442. MCHAM1.TYPCHE(2) = 'REAL*8 '
  443. MCHAM1.TYPCHE(3) = 'REAL*8 '
  444. SEGINI MELVUN
  445. SEGINI MELVUT
  446. SEGINI MELVUV
  447. MCHAM1.IELVAL(1) = MELVUN
  448. MCHAM1.IELVAL(2) = MELVUT
  449. MCHAM1.IELVAL(3) = MELVUV
  450. SEGDES MCHAM1
  451. C
  452. C**** Densite
  453. C
  454. N1 = 1
  455. N3 = 6
  456. L1 = 15
  457. SEGINI MCHEL2
  458. IROF = MCHEL2
  459. MCHEL2.IMACHE(1) = IFACEL
  460. MCHEL2.TITCHE = 'RO '
  461. MCHEL2.CONCHE(1) = ' '
  462. C
  463. C**** Valeurs independente du repére, i.e.
  464. C
  465. MCHEL2.INFCHE(1,1) = 0
  466. MCHEL2.INFCHE(1,3) = NIFOUR
  467. MCHEL2.INFCHE(1,4) = 0
  468. MCHEL2.INFCHE(1,5) = 0
  469. MCHEL2.INFCHE(1,6) = 0
  470. MCHEL2.IFOCHE = IFOUR
  471. N2 = 1
  472. SEGINI MCHAM1
  473. MCHEL2.ICHAML(1) = MCHAM1
  474. SEGDES MCHEL2
  475. MCHAM1.NOMCHE(1) = 'SCAL '
  476. MCHAM1.TYPCHE(1) = 'REAL*8 '
  477. SEGINI MELRO
  478. MCHAM1.IELVAL(1) = MELRO
  479. SEGDES MCHAM1
  480. C
  481. C**** Pression
  482. C
  483. MCHEL1 = IROF
  484. SEGINI, MCHEL2 = MCHEL1
  485. IPF = MCHEL2
  486. MCHEL2.TITCHE = 'P '
  487. C
  488. C**** MCHAM1 = MCHAML de la densite
  489. C
  490. SEGINI, MCHAM2 = MCHAM1
  491. MCHEL2.ICHAML(1) = MCHAM2
  492. SEGDES MCHEL2
  493. SEGINI MELP
  494. MCHAM2.IELVAL(1) = MELP
  495. SEGDES MCHAM2
  496. C
  497. C**** Le CHAMELEM des fractions massiques
  498. C
  499. IF(LYC)THEN
  500. MCHPO1 = IYC
  501. SEGACT MCHPO1
  502. MSOUP1 = MCHPO1.IPCHP(1)
  503. SEGDES MCHPO1
  504. SEGACT MSOUP1
  505. NESP = MSOUP1.NOCOMP(/2)
  506. MPYC = MSOUP1.IPOVAL
  507. SEGACT MPYC
  508. NESP = MPYC.VPOCHA(/2)
  509. MCHEL1 = IROF
  510. SEGINI, MCHEL2 = MCHEL1
  511. IYF = MCHEL2
  512. MCHEL2.TITCHE = 'Y '
  513. N2 = NESP
  514. SEGINI MCHAMY
  515. MCHEL2.ICHAML(1) = MCHAMY
  516. SEGDES MCHEL2
  517. N1EL = NFAC
  518. N1PTEL = 3
  519. N2EL = 0
  520. N2PTEL = 0
  521. DO I1 = 1, NESP
  522. SEGINI MELVA1
  523. MCHAMY.IELVAL(I1) = MELVA1
  524. MCHAMY.NOMCHE(I1) = MSOUP1.NOCOMP(I1)
  525. MCHAMY.TYPCHE(I1) = 'REAL*8 '
  526. ENDDO
  527. SEGDES MSOUP1
  528. C
  529. CALL LICHT(IGRYC, MPGRY , TYPE, IGEOM)
  530. CALL LICHT(IALYC, MELALY , TYPE, IGEOM)
  531. NMA = NESP
  532. SEGINI FRAMAS
  533. IF(LOGTEM)THEN
  534. SEGINI, MPYP = MPYC
  535. ELSE
  536. MPYP = MPYC
  537. ENDIF
  538. ELSE
  539. NESP = 0
  540. IYF = 0
  541. ENDIF
  542. C
  543. C**** Le CHAMELEM des scalaires passifs
  544. C
  545. IF(LSCAC)THEN
  546. MCHPO1 = ISCAC
  547. SEGACT MCHPO1
  548. MSOUP1 = MCHPO1.IPCHP(1)
  549. SEGDES MCHPO1
  550. SEGACT MSOUP1
  551. MPSCAC = MSOUP1.IPOVAL
  552. SEGACT MPSCAC
  553. NSCA = MPSCAC.VPOCHA(/2)
  554. MCHEL1 = IROF
  555. SEGINI, MCHEL2 = MCHEL1
  556. ISCAF = MCHEL2
  557. MCHEL2.TITCHE = 'SCALPASS '
  558. N2 = NSCA
  559. SEGINI MCHAMS
  560. MCHEL2.ICHAML(1) = MCHAMS
  561. SEGDES MCHEL2
  562. N1EL = NFAC
  563. N1PTEL = 3
  564. N2EL = 0
  565. N2PTEL = 0
  566. DO I1 = 1, NSCA, 1
  567. SEGINI MELVA1
  568. MCHAMS.IELVAL(I1) = MELVA1
  569. MCHAMS.NOMCHE(I1) = MSOUP1.NOCOMP(I1)
  570. MCHAMS.TYPCHE(I1) = 'REAL*8 '
  571. ENDDO
  572. SEGDES MSOUP1
  573. C
  574. CALL LICHT(IGRSC, MPGRS , TYPE, IGEOM)
  575. CALL LICHT(IALSC, MELALS , TYPE, IGEOM)
  576. NMA = NSCA
  577. SEGINI SCALPA
  578. IF(LOGTEM)THEN
  579. SEGINI, MPSCAP = MPSCAC
  580. ELSE
  581. MPSCAP = MPSCAC
  582. ENDIF
  583. ELSE
  584. NSCA = 0
  585. ISCAF = 0
  586. ENDIF
  587. C
  588. C**** Donc on a aussi actives le chpoints de fractions massiques
  589. C
  590. C SEGACT MPYC
  591. C SEGACT MPGRY
  592. C SEGACT MPIALY
  593. C
  594. C
  595. C SEGACT MPSCAC
  596. C SEGACT MPGRS
  597. C SEGACT MPIALS
  598. C
  599. C
  600. C***********************************************************************
  601. C********* PREDICTION **************************************************
  602. C***********************************************************************
  603. C
  604. C**** Prediction avec gradients limités
  605. C
  606. C
  607. IF(LOGTEM)THEN
  608. C
  609. IPT3 = ICEN
  610. SEGACT IPT3
  611. NCEN = IPT3.NUM(/2)
  612. DO NLCE = 1, NCEN
  613. ROG = MPROP.VPOCHA(NLCE,1)
  614. UXG = MPVITP.VPOCHA(NLCE,1)
  615. UYG = MPVITP.VPOCHA(NLCE,2)
  616. UZG = MPVITP.VPOCHA(NLCE,3)
  617. PG = MPPP.VPOCHA(NLCE,1)
  618. DROX = MPGRR.VPOCHA(NLCE,1)*MELALR.VPOCHA(NLCE,1)
  619. DROY = MPGRR.VPOCHA(NLCE,2)*MELALR.VPOCHA(NLCE,1)
  620. DROZ = MPGRR.VPOCHA(NLCE,3)*MELALR.VPOCHA(NLCE,1)
  621. DUXX = MPGRV.VPOCHA(NLCE,1)*MELALV.VPOCHA(NLCE,1)
  622. DUXY = MPGRV.VPOCHA(NLCE,2)*MELALV.VPOCHA(NLCE,1)
  623. DUXZ = MPGRV.VPOCHA(NLCE,3)*MELALV.VPOCHA(NLCE,1)
  624. DUYX = MPGRV.VPOCHA(NLCE,4)*MELALV.VPOCHA(NLCE,2)
  625. DUYY = MPGRV.VPOCHA(NLCE,5)*MELALV.VPOCHA(NLCE,2)
  626. DUYZ = MPGRV.VPOCHA(NLCE,6)*MELALV.VPOCHA(NLCE,2)
  627. DUZX = MPGRV.VPOCHA(NLCE,7)*MELALV.VPOCHA(NLCE,3)
  628. DUZY = MPGRV.VPOCHA(NLCE,8)*MELALV.VPOCHA(NLCE,3)
  629. DUZZ = MPGRV.VPOCHA(NLCE,9)*MELALV.VPOCHA(NLCE,3)
  630. DPX = MPGRP.VPOCHA(NLCE,1)*MELALP.VPOCHA(NLCE,1)
  631. DPY = MPGRP.VPOCHA(NLCE,2)*MELALP.VPOCHA(NLCE,1)
  632. DPZ = MPGRP.VPOCHA(NLCE,3)*MELALP.VPOCHA(NLCE,1)
  633. GAMG = MPGAMC.VPOCHA(NLCE,1)
  634. DRO = UXG * DROX + ROG * ( DUXX + DUYY + DUZZ)
  635. & + UYG * DROY + UZG * DROZ
  636. DUX = UXG * DUXX + DPX / ROG + UYG * DUXY
  637. & + UZG * DUXZ
  638. DUY = UXG * DUYX + UYG * DUYY + DPY / ROG
  639. & + UZG * DUYZ
  640. DUZ = UXG * DUZX + UYG * DUZY + UZG * DUZZ
  641. & + DPZ / ROG
  642. DP = GAMG * PG * (DUXX + DUYY + DUZZ)
  643. & + UXG * DPX + UYG * DPY + UZG * DPZ
  644. C
  645. MPROP.VPOCHA(NLCE,1) = ROG - DELTAT * DRO
  646. MPVITP.VPOCHA(NLCE,1) = UXG - DELTAT * DUX
  647. MPVITP.VPOCHA(NLCE,2) = UYG - DELTAT * DUY
  648. MPVITP.VPOCHA(NLCE,3) = UZG - DELTAT * DUZ
  649. MPPP.VPOCHA(NLCE,1) = PG - DELTAT * DP
  650. DO I1 = 1, NESP
  651. INDCEL = 3 * (I1-1) + 1
  652. ALPHA = MELALY.VPOCHA(NLCE,I1)
  653. DYMAS = UXG * MPGRY.VPOCHA(NLCE,INDCEL) * ALPHA +
  654. & UYG * MPGRY.VPOCHA(NLCE,INDCEL+1) * ALPHA +
  655. & UZG * MPGRY.VPOCHA(NLCE,INDCEL+2) * ALPHA
  656. MPYP.VPOCHA(NLCE,I1) = MPYC.VPOCHA(NLCE,I1) -
  657. & DELTAT * DYMAS
  658. ENDDO
  659. C
  660. DO I1 = 1, NSCA, 1
  661. INDCEL = 3 * (I1 - 1) + 1
  662. ALPHA = MELALS.VPOCHA(NLCE,I1)
  663. DYMAS = UXG * MPGRS.VPOCHA(NLCE,INDCEL) * ALPHA +
  664. & UYG * MPGRS.VPOCHA(NLCE,INDCEL+1) * ALPHA +
  665. & UZG * MPGRS.VPOCHA(NLCE,INDCEL+2) * ALPHA
  666. MPSCAP.VPOCHA(NLCE,I1) = MPSCAC.VPOCHA(NLCE,I1) -
  667. & DELTAT * DYMAS
  668. ENDDO
  669. ENDDO
  670. C
  671. ENDIF
  672. C
  673. C
  674. C***********************************************************************
  675. C********* CORRECTION **************************************************
  676. C***********************************************************************
  677. C
  678. C**** Boucle sur le faces
  679. C
  680. IDIMP1 = IDIM + 1
  681. DO NLCF = 1, NFAC
  682. C
  683. C******* NLCF = numero local du centre de face
  684. C NGCF = numero global du centre de face
  685. C NGCEG = numero global du centre ELT "gauche"
  686. C NLCEG = numero local du centre ELT "gauche"
  687. C NGCED = numero global du centre ELT "droite"
  688. C NLCED = numero local du centre ELT "droite"
  689. C
  690. NGCEG = IPT1.NUM(1,NLCF)
  691. NGCF = IPT1.NUM(2,NLCF)
  692. NGCED = IPT1.NUM(3,NLCF)
  693. NLCEG = MLENT1.LECT(NGCEG)
  694. NLCED = MLENT1.LECT(NGCED)
  695. C
  696. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  697. C
  698. NGCF1 = IPT2.NUM(1,NLCF)
  699. IF( NGCF1 .NE. NGCF) THEN
  700. LOGAN = .TRUE.
  701. MESERR(1:40) = 'PRET, subroutine pre321.eso '
  702. GOTO 9999
  703. ENDIF
  704. C
  705. C******* Cosinus directeurs des NORMALES aux faces
  706. C
  707. C On impose que les normales sont direct "Gauche" -> "Centre"
  708. C
  709. INDCEL = (NGCEG-1)*IDIMP1
  710. XG = XCOOR(INDCEL+1)
  711. YG = XCOOR(INDCEL+2)
  712. ZG = XCOOR(INDCEL+3)
  713. INDCEL = (NGCF-1)*IDIMP1
  714. XC = XCOOR(INDCEL + 1)
  715. YC = XCOOR(INDCEL + 2)
  716. ZC = XCOOR(INDCEL+3)
  717. INDCEL = (NGCED-1)*IDIMP1
  718. XD = XCOOR(INDCEL+1)
  719. YD = XCOOR(INDCEL+2)
  720. ZD = XCOOR(INDCEL+3)
  721. DXG = XC - XG
  722. DYG = YC - YG
  723. DZG = ZC - ZG
  724. DXD = XC - XD
  725. DYD = YC - YD
  726. DZD = ZC - ZD
  727. C
  728. C******* On calcule le sign du pruduit scalare
  729. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  730. C
  731. CNX = MPNORM.VPOCHA(NLCF,7)
  732. CNY = MPNORM.VPOCHA(NLCF,8)
  733. CNZ = MPNORM.VPOCHA(NLCF,9)
  734. ORIENT = CNX * DXG + CNY * DYG + CNZ * DZG
  735. ORIENT = SIGN(1.0D0,ORIENT)
  736. IF(ORIENT .NE. 1.0D0)THEN
  737. LOGAN = .TRUE.
  738. MESERR(1:30)=
  739. & 'PRET , subroutine pre322.eso. '
  740. GOTO 9999
  741. ENDIF
  742. CNX = CNX * ORIENT
  743. CNY = CNY * ORIENT
  744. CNZ = CNZ * ORIENT
  745. C
  746. C********** Cosinus directeurs de tangente 1
  747. C
  748. CTX = MPNORM.VPOCHA(NLCF,1) * ORIENT
  749. CTY = MPNORM.VPOCHA(NLCF,2) * ORIENT
  750. CTZ = MPNORM.VPOCHA(NLCF,3) * ORIENT
  751. C
  752. C********** Cosinus directeurs de tangente 2
  753. C
  754. CVX = MPNORM.VPOCHA(NLCF,4) * ORIENT
  755. CVY = MPNORM.VPOCHA(NLCF,5) * ORIENT
  756. CVZ = MPNORM.VPOCHA(NLCF,6) * ORIENT
  757. C
  758. C
  759. C******* Les autres MELVALs
  760. C
  761. C
  762. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0
  763. C y_i \in (0,1)
  764. C Si non il faut le faire, en utilisant LOGBOR,
  765. C LOGNEG, VALER, VAL1, VAL2
  766. C
  767. C
  768. C
  769. C******* NGCEG = NGCED -> Mur
  770. C
  771. IF( NGCEG .EQ. NGCED)THEN
  772. C
  773. C********** Sur le mur on fait de reconstruction sur l'etat gauche
  774. C
  775. C
  776. C********** Etat gauche
  777. C
  778. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  779. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  780. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  781. & MPGRR.VPOCHA(NLCEG, 2)*DYG +
  782. & MPGRR.VPOCHA(NLCEG, 3)*DZG
  783.  
  784. ROG = VALCEL + ALCEL * DCEL
  785. C
  786. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  787. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  788. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  789. & MPGRP.VPOCHA(NLCEG, 2)*DYG +
  790. & MPGRP.VPOCHA(NLCEG, 3)*DZG
  791. PG = VALCEL + ALCEL * DCEL
  792. C
  793. LOGI2 = .FALSE.
  794. SUMY = 0.0D0
  795. DO I1 = 1, NESP, 1
  796. INDCEL = 3 * (I1-1) + 1
  797. VALCEL = MPYP.VPOCHA(NLCEG,I1)
  798. ALCEL = MELALY.VPOCHA(NLCEG, I1)
  799. DCEL = MPGRY.VPOCHA(NLCEG, INDCEL)*DXG +
  800. & MPGRY.VPOCHA(NLCEG,INDCEL + 1 )*DYG +
  801. & MPGRY.VPOCHA(NLCEG,INDCEL + 2 )*DZG
  802. ALCEL = VALCEL + ALCEL * DCEL
  803. SUMY = SUMY + ALCEL
  804. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  805. FRAMAS.FRAMG(I1) = ALCEL
  806. ENDDO
  807. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  808. C
  809. DO I1 = 1, NSCA, 1
  810. INDCEL = 3 * (I1-1) + 1
  811. VALCEL = MPSCAP.VPOCHA(NLCEG,I1)
  812. ALCEL = MELALS.VPOCHA(NLCEG, I1)
  813. DCEL = MPGRS.VPOCHA(NLCEG, INDCEL)*DXG +
  814. & MPGRS.VPOCHA(NLCEG,INDCEL + 1 )*DYG +
  815. & MPGRS.VPOCHA(NLCEG,INDCEL + 2 )*DZG
  816. ALCEL = VALCEL + ALCEL * DCEL
  817. SCALPA.FRAMG(I1) = ALCEL
  818. ENDDO
  819. C
  820. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  821. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  822. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  823. & MPGRV.VPOCHA(NLCEG, 2)*DYG +
  824. & MPGRV.VPOCHA(NLCEG, 3)*DZG
  825. UXG = VALCEL + ALCEL * DCEL
  826. C
  827. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  828. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  829. DCEL = MPGRV.VPOCHA(NLCEG, 4)*DXG +
  830. & MPGRV.VPOCHA(NLCEG, 5)*DYG +
  831. & MPGRV.VPOCHA(NLCEG, 6)*DZG
  832. UYG = VALCEL + ALCEL * DCEL
  833. C
  834. VALCEL = MPVITP.VPOCHA(NLCEG, 3)
  835. ALCEL = MELALV.VPOCHA(NLCEG, 3)
  836. DCEL = MPGRV.VPOCHA(NLCEG, 7)*DXG +
  837. & MPGRV.VPOCHA(NLCEG, 8)*DYG +
  838. & MPGRV.VPOCHA(NLCEG, 9)*DZG
  839. UZG = VALCEL + ALCEL * DCEL
  840. C
  841. UNG = UXG * CNX + UYG * CNY + UZG * CNZ
  842. UTG = UXG * CTX + UYG * CTY + UZG * CTZ
  843. UVG = UXG * CVX + UYG * CVY + UZG * CVZ
  844. C
  845. C********** Si l'on fait pas de prediction, ce n'est pas necessaire de
  846. C controller la positivite' de la pression et de la densité; elle
  847. C est déjà garantie par la proprieté LED de limiteur; mais, vu
  848. C que le limiteur n'est pas calculé ici, mais dans un autre
  849. C operateur, on le fait
  850. C
  851. LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0) .OR. LOGI2
  852. C
  853. IF(LOGI1)THEN
  854. C
  855. C************* Premier ordre en espace local
  856. C
  857. ROG = MPROC.VPOCHA(NLCEG,1)
  858. ROD = ROG
  859. PG = MPPC.VPOCHA(NLCEG,1)
  860. PD = PG
  861. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  862. & MPVITC.VPOCHA(NLCEG,2)*CNY +
  863. & MPVITC.VPOCHA(NLCEG,3)*CNZ
  864. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  865. & MPVITC.VPOCHA(NLCEG,2)*CTY +
  866. & MPVITC.VPOCHA(NLCEG,3)*CTZ
  867. UVG = MPVITC.VPOCHA(NLCEG,1)*CVX +
  868. & MPVITC.VPOCHA(NLCEG,2)*CVY +
  869. & MPVITC.VPOCHA(NLCEG,3)*CVZ
  870. UND = -1.0D0 * UNG
  871. UTD = UTG
  872. UVD = UVG
  873. DO I1 = 1, NESP, 1
  874. FRAMAS.FRAMG(I1) = MPYC.VPOCHA(NLCEG,I1)
  875. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  876. ENDDO
  877. DO I1 = 1, NSCA, 1
  878. SCALPA.FRAMG(I1) = MPSCAC.VPOCHA(NLCEG,I1)
  879. SCALPA.FRAMD(I1) = SCALPA.FRAMG(I1)
  880. ENDDO
  881. ELSE
  882. C
  883. C********** Son etat droite
  884. C
  885. ROD = ROG
  886. PD = PG
  887. UND = -1.0D0 * UNG
  888. UTD = UTG
  889. UVD = UVG
  890. DO I1 = 1, NESP, 1
  891. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  892. ENDDO
  893. DO I1 = 1, NSCA, 1
  894. SCALPA.FRAMD(I1) = SCALPA.FRAMG(I1)
  895. ENDDO
  896. ENDIF
  897. C
  898. C************* Fin cas mur
  899. C
  900. ELSE
  901. C
  902. C************* Etat gauche
  903. C
  904. VALCEL = MPROP.VPOCHA(NLCEG, 1)
  905. ALCEL = MELALR.VPOCHA(NLCEG, 1)
  906. DCEL = MPGRR.VPOCHA(NLCEG, 1)*DXG +
  907. & MPGRR.VPOCHA(NLCEG, 2)*DYG +
  908. & MPGRR.VPOCHA(NLCEG, 3)*DZG
  909. ROG = VALCEL + ALCEL * DCEL
  910. C
  911. VALCEL = MPPP.VPOCHA(NLCEG, 1)
  912. ALCEL = MELALP.VPOCHA(NLCEG, 1)
  913. DCEL = MPGRP.VPOCHA(NLCEG, 1)*DXG +
  914. & MPGRP.VPOCHA(NLCEG, 2)*DYG +
  915. & MPGRP.VPOCHA(NLCEG, 3)*DZG
  916. PG = VALCEL + ALCEL * DCEL
  917. C
  918. LOGI2 = .FALSE.
  919. SUMY = 0.0D0
  920. DO I1 = 1, NESP, 1
  921. INDCEL = 3 * (I1-1) + 1
  922. VALCEL = MPYP.VPOCHA(NLCEG,I1)
  923. ALCEL = MELALY.VPOCHA(NLCEG, I1)
  924. DCEL = MPGRY.VPOCHA(NLCEG, INDCEL)*DXG +
  925. & MPGRY.VPOCHA(NLCEG,INDCEL + 1 )*DYG+
  926. & MPGRY.VPOCHA(NLCEG,INDCEL + 2 )*DZG
  927. ALCEL = VALCEL + ALCEL * DCEL
  928. SUMY = SUMY + ALCEL
  929. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  930. FRAMAS.FRAMG(I1) = ALCEL
  931. ENDDO
  932. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  933. C
  934. DO I1 = 1, NSCA, 1
  935. INDCEL = 3 * (I1-1) + 1
  936. VALCEL = MPSCAP.VPOCHA(NLCEG,I1)
  937. ALCEL = MELALS.VPOCHA(NLCEG, I1)
  938. DCEL = MPGRS.VPOCHA(NLCEG, INDCEL)*DXG +
  939. & MPGRS.VPOCHA(NLCEG,INDCEL + 1 )*DYG+
  940. & MPGRS.VPOCHA(NLCEG,INDCEL + 2 )*DZG
  941. ALCEL = VALCEL + ALCEL * DCEL
  942. SCALPA.FRAMG(I1) = ALCEL
  943. ENDDO
  944. C
  945. VALCEL = MPVITP.VPOCHA(NLCEG, 1)
  946. ALCEL = MELALV.VPOCHA(NLCEG, 1)
  947. DCEL = MPGRV.VPOCHA(NLCEG, 1)*DXG +
  948. & MPGRV.VPOCHA(NLCEG, 2)*DYG +
  949. & MPGRV.VPOCHA(NLCEG, 3)*DZG
  950. UXG = VALCEL + ALCEL * DCEL
  951. C
  952. VALCEL = MPVITP.VPOCHA(NLCEG, 2)
  953. ALCEL = MELALV.VPOCHA(NLCEG, 2)
  954. DCEL = MPGRV.VPOCHA(NLCEG, 4)*DXG +
  955. & MPGRV.VPOCHA(NLCEG, 5)*DYG +
  956. & MPGRV.VPOCHA(NLCEG, 6)*DZG
  957. UYG = VALCEL + ALCEL * DCEL
  958. C
  959. VALCEL = MPVITP.VPOCHA(NLCEG, 3)
  960. ALCEL = MELALV.VPOCHA(NLCEG, 3)
  961. DCEL = MPGRV.VPOCHA(NLCEG, 7)*DXG +
  962. & MPGRV.VPOCHA(NLCEG, 8)*DYG +
  963. & MPGRV.VPOCHA(NLCEG, 9)*DZG
  964. UZG = VALCEL + ALCEL * DCEL
  965. C
  966. UNG = UXG * CNX + UYG * CNY + UZG * CNZ
  967. UTG = UXG * CTX + UYG * CTY + UZG * CTZ
  968. UVG = UXG * CVX + UYG * CVY + UZG * CVZ
  969. C
  970. C
  971. C********** Positivite
  972. C
  973. LOGI1 = (PG .LT. 0.0D0) .OR. (ROG .LT. 0.0D0) .OR. LOGI2
  974. C
  975. IF(LOGI1)THEN
  976. C
  977. C************* Premier ordre en espace local
  978. C
  979. ROG = MPROC.VPOCHA(NLCEG,1)
  980. PG = MPPC.VPOCHA(NLCEG,1)
  981. UNG = MPVITC.VPOCHA(NLCEG,1)*CNX +
  982. & MPVITC.VPOCHA(NLCEG,2)*CNY +
  983. & MPVITC.VPOCHA(NLCEG,3)*CNZ
  984. UTG = MPVITC.VPOCHA(NLCEG,1)*CTX +
  985. & MPVITC.VPOCHA(NLCEG,2)*CTY +
  986. & MPVITC.VPOCHA(NLCEG,3)*CTZ
  987. UVG = MPVITC.VPOCHA(NLCEG,1)*CVX +
  988. & MPVITC.VPOCHA(NLCEG,2)*CVY +
  989. & MPVITC.VPOCHA(NLCEG,3)*CVZ
  990. DO I1 = 1, NESP
  991. FRAMAS.FRAMG(I1) = MPYC.VPOCHA(NLCEG,I1)
  992. ENDDO
  993. DO I1 = 1, NSCA, 1
  994. SCALPA.FRAMG(I1) = MPSCAC.VPOCHA(NLCEG,I1)
  995. ENDDO
  996. ENDIF
  997. C
  998. C********** Etat droite
  999. C
  1000. VALCEL = MPROP.VPOCHA(NLCED, 1)
  1001. ALCEL = MELALR.VPOCHA(NLCED, 1)
  1002. DCEL = MPGRR.VPOCHA(NLCED, 1)*DXD +
  1003. & MPGRR.VPOCHA(NLCED, 2)*DYD +
  1004. & MPGRR.VPOCHA(NLCED, 3)*DZD
  1005. ROD = VALCEL + ALCEL * DCEL
  1006. C
  1007. VALCEL = MPPP.VPOCHA(NLCED, 1)
  1008. ALCEL = MELALP.VPOCHA(NLCED, 1)
  1009. DCEL = MPGRP.VPOCHA(NLCED, 1)*DXD +
  1010. & MPGRP.VPOCHA(NLCED, 2)*DYD +
  1011. & MPGRP.VPOCHA(NLCED, 3)*DZD
  1012. PD = VALCEL + ALCEL * DCEL
  1013. C
  1014. LOGI2 = .FALSE.
  1015. SUMY = 0.0D0
  1016. DO I1 = 1, NESP, 1
  1017. INDCEL = 3 * (I1-1) + 1
  1018. VALCEL = MPYP.VPOCHA(NLCED,I1)
  1019. ALCEL = MELALY.VPOCHA(NLCED, I1)
  1020. DCEL = MPGRY.VPOCHA(NLCED, INDCEL)*DXD +
  1021. & MPGRY.VPOCHA(NLCED,INDCEL + 1 )*DYD +
  1022. & MPGRY.VPOCHA(NLCED,INDCEL + 2 )*DZD
  1023. ALCEL = VALCEL + ALCEL * DCEL
  1024. SUMY = SUMY + ALCEL
  1025. LOGI2 = LOGI2 .OR. (ALCEL .LT. 0.0D0)
  1026. FRAMAS.FRAMD(I1) = ALCEL
  1027. ENDDO
  1028. LOGI2 = LOGI2 .OR. (SUMY .GT. 1.0D0)
  1029. C
  1030. DO I1 = 1, NSCA, 1
  1031. INDCEL = 3 * (I1-1) + 1
  1032. VALCEL = MPSCAP.VPOCHA(NLCED,I1)
  1033. ALCEL = MELALS.VPOCHA(NLCED, I1)
  1034. DCEL = MPGRS.VPOCHA(NLCED, INDCEL)*DXD +
  1035. & MPGRS.VPOCHA(NLCED,INDCEL + 1 )*DYD+
  1036. & MPGRS.VPOCHA(NLCED,INDCEL + 2 )*DZD
  1037. ALCEL = VALCEL + ALCEL * DCEL
  1038. SCALPA.FRAMD(I1) = ALCEL
  1039. ENDDO
  1040. C
  1041. VALCEL = MPVITP.VPOCHA(NLCED, 1)
  1042. ALCEL = MELALV.VPOCHA(NLCED, 1)
  1043. DCEL = MPGRV.VPOCHA(NLCED, 1)*DXD +
  1044. & MPGRV.VPOCHA(NLCED, 2)*DYD +
  1045. & MPGRV.VPOCHA(NLCED, 3)*DZD
  1046. UXD = VALCEL + ALCEL * DCEL
  1047. C
  1048. VALCEL = MPVITP.VPOCHA(NLCED, 2)
  1049. ALCEL = MELALV.VPOCHA(NLCED, 2)
  1050. DCEL = MPGRV.VPOCHA(NLCED, 4)*DXD +
  1051. & MPGRV.VPOCHA(NLCED, 5)*DYD +
  1052. & MPGRV.VPOCHA(NLCED, 6)*DZD
  1053. UYD = VALCEL + ALCEL * DCEL
  1054. C
  1055. VALCEL = MPVITP.VPOCHA(NLCED, 3)
  1056. ALCEL = MELALV.VPOCHA(NLCED, 3)
  1057. DCEL = MPGRV.VPOCHA(NLCED, 7)*DXD +
  1058. & MPGRV.VPOCHA(NLCED, 8)*DYD +
  1059. & MPGRV.VPOCHA(NLCED, 9)*DZD
  1060. UZD = VALCEL + ALCEL * DCEL
  1061. C
  1062. UND = UXD * CNX + UYD * CNY + UZD * CNZ
  1063. UTD = UXD * CTX + UYD * CTY + UZD * CTZ
  1064. UVD = UXD * CVX + UYD * CVY + UZD * CVZ
  1065. C
  1066. C********** Positivite
  1067. C
  1068. LOGI1 = (PD .LT. 0.0D0) .OR. (ROD .LT. 0.0D0) .OR. LOGI2
  1069. C
  1070. IF(LOGI1)THEN
  1071. C
  1072. C************* Premier ordre en espace local
  1073. C
  1074. ROD = MPROC.VPOCHA(NLCED,1)
  1075. PD = MPPC.VPOCHA(NLCED,1)
  1076. UND = MPVITC.VPOCHA(NLCED,1)*CNX +
  1077. & MPVITC.VPOCHA(NLCED,2)*CNY +
  1078. & MPVITC.VPOCHA(NLCED,3)*CNZ
  1079. UTD = MPVITC.VPOCHA(NLCED,1)*CTX +
  1080. & MPVITC.VPOCHA(NLCED,2)*CTY +
  1081. & MPVITC.VPOCHA(NLCED,3)*CTZ
  1082. UVD = MPVITC.VPOCHA(NLCED,1)*CVX +
  1083. & MPVITC.VPOCHA(NLCED,2)*CVY +
  1084. & MPVITC.VPOCHA(NLCED,3)*CVZ
  1085. DO I1 = 1, NESP
  1086. FRAMAS.FRAMD(I1) = MPYC.VPOCHA(NLCED,I1)
  1087. ENDDO
  1088. DO I1 = 1, NSCA, 1
  1089. SCALPA.FRAMD(I1) = MPSCAC.VPOCHA(NLCED,I1)
  1090. ENDDO
  1091. ENDIF
  1092. ENDIF
  1093. C
  1094. C******** Les MELVALs
  1095. C
  1096. MELRO.VELCHE(1,NLCF) = ROG
  1097. MELRO.VELCHE(3,NLCF) = ROD
  1098. MELP.VELCHE(1,NLCF) = PG
  1099. MELP.VELCHE(3,NLCF) = PD
  1100. MELVUN.VELCHE(1,NLCF) = UNG
  1101. MELVUN.VELCHE(3,NLCF) = UND
  1102. MELVUT.VELCHE(1,NLCF) = UTG
  1103. MELVUT.VELCHE(3,NLCF) = UTD
  1104. MELVUV.VELCHE(1,NLCF) = UVG
  1105. MELVUV.VELCHE(3,NLCF) = UVD
  1106. MELVNX.VELCHE(1,NLCF) = CNX
  1107. MELVNY.VELCHE(1,NLCF) = CNY
  1108. MELVNZ.VELCHE(1,NLCF) = CNZ
  1109. MELT1X.VELCHE(1,NLCF) = CTX
  1110. MELT1Y.VELCHE(1,NLCF) = CTY
  1111. MELT1Z.VELCHE(1,NLCF) = CTZ
  1112. MELT2X.VELCHE(1,NLCF) = CVX
  1113. MELT2Y.VELCHE(1,NLCF) = CVY
  1114. MELT2Z.VELCHE(1,NLCF) = CVZ
  1115. DO I1 = 1, NESP, 1
  1116. MELVA1 = MCHAMY.IELVAL(I1)
  1117. MELVA1.VELCHE(1,NLCF) = FRAMAS.FRAMG(I1)
  1118. MELVA1.VELCHE(3,NLCF) = FRAMAS.FRAMD(I1)
  1119. ENDDO
  1120. DO I1 = 1, NSCA, 1
  1121. MELVA1 = MCHAMS.IELVAL(I1)
  1122. MELVA1.VELCHE(1,NLCF) = SCALPA.FRAMG(I1)
  1123. MELVA1.VELCHE(3,NLCF) = SCALPA.FRAMD(I1)
  1124. ENDDO
  1125. ENDDO
  1126. C
  1127. C**** Desactivation des SEGMENTs
  1128. C
  1129. SEGDES IPT1
  1130. SEGDES IPT2
  1131. C
  1132. C**** Le MPOVALs 'Prediction' sont detruits (si existentes)
  1133. C
  1134. IF(LOGTEM)THEN
  1135. SEGSUP MPROP
  1136. SEGSUP MPVITP
  1137. SEGSUP MPPP
  1138. IF(LYC) SEGSUP MPYP
  1139. IF(LSCAC) SEGSUP MPSCAP
  1140. SEGDES MPGAMC
  1141. ENDIF
  1142. C
  1143. SEGDES MPROC
  1144. SEGDES MPGRR
  1145. SEGDES MELALR
  1146. SEGDES MPVITC
  1147. SEGDES MPGRV
  1148. SEGDES MELALV
  1149. SEGDES MPPC
  1150. SEGDES MPGRP
  1151. SEGDES MELALP
  1152. IF(LYC)THEN
  1153. SEGDES MPYC
  1154. SEGDES MPGRY
  1155. SEGDES MELALY
  1156. SEGDES MPYC
  1157. DO I1 = 1, NESP, 1
  1158. MELVA1 = MCHAMY.IELVAL(I1)
  1159. SEGDES MELVA1
  1160. ENDDO
  1161. SEGDES MCHAMY
  1162. SEGSUP FRAMAS
  1163. ENDIF
  1164. IF(LSCAC)THEN
  1165. SEGDES MPSCAC
  1166. SEGDES MPGRS
  1167. SEGDES MELALS
  1168. DO I1 = 1, NSCA, 1
  1169. MELVA1 = MCHAMS.IELVAL(I1)
  1170. SEGDES MELVA1
  1171. ENDDO
  1172. SEGDES MCHAMS
  1173. SEGSUP SCALPA
  1174. ENDIF
  1175. SEGDES MPNORM
  1176. C
  1177. SEGDES MELRO
  1178. SEGDES MELP
  1179. SEGDES MELVUN
  1180. SEGDES MELVUT
  1181. SEGDES MELVUV
  1182. SEGDES MELVNX
  1183. SEGDES MELVNY
  1184. SEGDES MELVNZ
  1185. SEGDES MELT1X
  1186. SEGDES MELT1Y
  1187. SEGDES MELT1Z
  1188. SEGDES MELT2X
  1189. SEGDES MELT2Y
  1190. SEGDES MELT2Z
  1191. C
  1192. C**** Destruction du MELNTI correspondance local/global
  1193. C
  1194. SEGSUP MLENT1
  1195. C
  1196. 9999 CONTINUE
  1197. C
  1198. RETURN
  1199. END
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  

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