Télécharger pre322.eso

Retour à la liste

Numérotation des lignes :

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

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