Télécharger pre711.eso

Retour à la liste

Numérotation des lignes :

pre711
  1. C PRE711 SOURCE OF166741 24/10/03 21:15:36 12022
  2. SUBROUTINE PRE711(NESP,MLMESP,
  3. & ICEN,IFACE,IFACEL,INORM,
  4. & IPHI, IGRPHI, ILIPHI,
  5. & IRN1, IGRRN1, ILIRN1,
  6. & IVN1, IGRVN1, ILIVN1,
  7. & IPN1, IGRPN1, ILIPN1,
  8. & IYMA, IGRYMA, ILIYMA,
  9. & IALC, IGRALC, ILIALC,
  10. & IPHIF, IRN1F, IVN1F, IPN1F, IYF, IALF)
  11. C************************************************************************
  12. C
  13. C PROJET : CASTEM 2000
  14. C
  15. C NOM : PRE711
  16. C
  17. C DESCRIPTION : Voir PRE71
  18. C
  19. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
  20. C
  21. C AUTEUR : A. BECCANTINI, DEN/DM2S/SFME/LTMF
  22. C
  23. C************************************************************************
  24. C
  25. C ENTREES
  26. C
  27. C NESP : number of the species involved in the EULER equations.
  28. C
  29. C MLMESP : MLMOTS object; names of the species involved in the
  30. C EULER equations.
  31. C
  32. C 1) Pointeurs de MELEMEs et de CHPOINTs de la table DOMAINE
  33. C
  34. C ICEN : MELEME de 'POI1' SPG des CENTRES
  35. C
  36. C IFACE : MELEME de 'POI1' SPG des FACES
  37. C
  38. C IFACEL : MELEME de 'SEG3' avec
  39. C CENTRE d'Elt "gauche"
  40. C CENTRE de Face
  41. C CENTRE d'Elt "droite"
  42. C
  43. C N.B. = IFACE.NUM(i,1) = IFACEL.NUM(i,2)
  44. C
  45. C INORM : CHPOINT des cosinus directeurs de normales aux faces
  46. C
  47. C 2) Autres pointeurs
  48. C
  49. C IPHI, IGRPHI, ILIPHI,
  50. C CHPOINT "CENTRE" de phi, gradient et limiteur
  51. C
  52. C IRN1, IGRRN1, ILIRN1,
  53. C CHPOINT "CENTRE" de densité, gradient et limiteur
  54. C
  55. C IVN1, IGRVN1, ILIVN1,
  56. C CHPOINT "CENTRE" de vitesse, gradient et limiteur
  57. C
  58. C IPN1, IGRPN1, ILIPN1.
  59. C CHPOINT "CENTRE" de pression, gradients et limiteurs
  60. C
  61. C IYMA, IGRYMA, ILIYMA,
  62. C CHPOINT "CENTRE" de Y, gradient et limiteur
  63. C
  64. C IALC, IGRALC, ILIALC,
  65. C CHPOINT "CENTRE" de ALPHA, gradient et limiteur
  66. C
  67. C SORTIES
  68. C
  69. C IPHIF, IRN1F, IVN1F, IPN1F, IYF, IALF
  70. C MCHAMLs definis sur le MELEME de pointeur IFACEL
  71. C
  72. C************************************************************************
  73. C
  74. C HISTORIQUE (Anomalies et modifications éventuelles)
  75. C
  76. C HISTORIQUE : Crée le 03.12.10.
  77. C
  78. C************************************************************************
  79. C
  80. C
  81. C ATTENTION: Cet programme marche si le MAILLAGE est convex;
  82. C si non il faut changer l'algoritme de calcul de
  83. C l'orientation des normales aux faces.
  84. C
  85. C La positivité n'est pas controlle parce que c'est déjà fait
  86. C dans l'operateur PRIM
  87. C
  88. C
  89. C************************************************************************
  90. C
  91. IMPLICIT INTEGER(I-N)
  92. C
  93. C**** Les variables
  94. C
  95. INTEGER NESP, I1
  96. & , ICEN, IFACE, IFACEL, INORM
  97. & , IPHI, IGRPHI, ILIPHI
  98. & , IRN1, IGRRN1, ILIRN1
  99. & , IVN1, IGRVN1, ILIVN1
  100. & , IPN1, IGRPN1, ILIPN1
  101. & , IYMA, IGRYMA, ILIYMA
  102. & , IALC, IGRALC, ILIALC
  103. & , IPHIF, IRN1F
  104. & , IVN1F, IPN1F
  105. & , IYF, IALF
  106. & , IGEOM, NFAC
  107. & , N1PTEL, N1EL, N2PTEL, N2EL, N2, N1, N3, L1
  108. & , NLCF, NGCF, NGCEG, NLCEG, NGCED, NLCED, NGCF1
  109. & , IDIMP1, INDCEL
  110.  
  111. REAL*8 XG, YG, XC, YC, XD, YD
  112. & ,DXG, DYG, DXD, DYD
  113. & , CNX, CNY, CTX, CTY, ORIENT
  114. & , PHIG, RN1G, PN1G
  115. & , UX1G, UY1G
  116. & , UN1G, UT1G
  117. & , PHID, RN1D, PN1D
  118. & , UX1D, UY1D
  119. & , UN1D, UT1D
  120. & , VALCEL, DCEL, LIMCEL
  121. CHARACTER*(40) MESERR
  122. CHARACTER*(8) TYPE
  123. LOGICAL LOGI1
  124. C
  125. C**** Segments des fractions massiques gauche et droit
  126. C
  127. INTEGER NS
  128. SEGMENT FRAMAS
  129. REAL*8 FRAMG(NS), FRAMD(NS)
  130. ENDSEGMENT
  131. POINTEUR ALPHA.FRAMAS
  132. C
  133. C**** Les Includes
  134. C
  135. -INC SMCOORD
  136. -INC PPARAM
  137. -INC CCOPTIO
  138. -INC SMCHPOI
  139. POINTEUR MPPHI.MPOVAL, MPGPHI.MPOVAL, MPLPHI.MPOVAL
  140. POINTEUR MPRN1.MPOVAL, MPGRN1.MPOVAL, MPLRN1.MPOVAL
  141. POINTEUR MPVN1.MPOVAL, MPGVN1.MPOVAL, MPLVN1.MPOVAL
  142. POINTEUR MPPN1.MPOVAL, MPGPN1.MPOVAL, MPLPN1.MPOVAL
  143. POINTEUR MPYMA.MPOVAL, MPGYMA.MPOVAL, MPLYMA.MPOVAL
  144. POINTEUR MPALC.MPOVAL, MPGALC.MPOVAL, MPLALC.MPOVAL
  145. POINTEUR MPNORM.MPOVAL
  146. -INC SMCHAML
  147. C Melval des cosinus directeurs
  148. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  149. & MELT1X.MELVAL, MELT1Y.MELVAL
  150. C Melval des vitesses
  151. POINTEUR MEVUN1.MELVAL, MEVUT1.MELVAL
  152. C Melval des densités, pressions, alphas
  153. POINTEUR MELRN1.MELVAL
  154. POINTEUR MELPN1.MELVAL
  155. POINTEUR MELPHI.MELVAL
  156. POINTEUR MCHAMY.MCHAML
  157. POINTEUR MCHAMA.MCHAML
  158. -INC SMLENTI
  159. -INC SMELEME
  160. -INC SMLMOTS
  161. POINTEUR MLMESP.MLMOTS
  162. C
  163. LOGI1 = .FALSE.
  164. C
  165. C**** KRIPAD pour la correspondance global/local de centre
  166. C
  167. CALL KRIPAD(ICEN,MLENT1)
  168. C
  169. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  170. C
  171. C Si i est le numero global d'un noeud de ICEN,
  172. C MLENT1.LECT(i) contient sa position, i.e.
  173. C
  174. C I = numero global du noeud centre
  175. C MLENT1.LECT(i) = numero local du noeud centre
  176. C
  177. C MLENT1 déjà activé, i.e.
  178. C
  179. C SEGACT MLENT1
  180. C
  181. C**** Activation de CHPOINTs
  182. C
  183. C phi + grad + limiteur
  184. C densité + grad + limiteur
  185. C vitesse + grad + limiteur
  186. C pression + grad + limiteur
  187. C ymass + grad + limiteur
  188. C alpha + grad + limiteur
  189. C cosinus directeurs des normales aux surface
  190. C
  191. CALL LICHT(IPHI , MPPHI , TYPE, IGEOM)
  192. C SEGACT MPPHI
  193. CALL LICHT(IGRPHI , MPGPHI , TYPE, IGEOM)
  194. C SEGACT MPGPHI
  195. CALL LICHT(ILIPHI , MPLPHI , TYPE, IGEOM)
  196. C SEGACT MPLPHI
  197. CALL LICHT(IRN1 , MPRN1 , TYPE, IGEOM)
  198. C SEGACT MPRN1
  199. CALL LICHT(IGRRN1 , MPGRN1 , TYPE, IGEOM)
  200. C SEGACT MPGRN1
  201. CALL LICHT(ILIRN1 , MPLRN1 , TYPE, IGEOM)
  202. C SEGACT MPLRN1
  203. CALL LICHT(IVN1 , MPVN1 , TYPE, IGEOM)
  204. C SEGACT MPVN1
  205. CALL LICHT(IGRVN1 , MPGVN1 , TYPE, IGEOM)
  206. C SEGACT MPGVN1
  207. CALL LICHT(ILIVN1 , MPLVN1 , TYPE, IGEOM)
  208. C SEGACT MPLVN1
  209. CALL LICHT(IPN1 , MPPN1 , TYPE, IGEOM)
  210. C SEGACT MPPN1
  211. CALL LICHT(IGRPN1 , MPGPN1 , TYPE, IGEOM)
  212. C SEGACT MPGPN1
  213. CALL LICHT(ILIPN1 , MPLPN1 , TYPE, IGEOM)
  214. C SEGACT MPLPN1
  215. IF (NESP .GE. 1)THEN
  216. CALL LICHT(IYMA , MPYMA , TYPE, IGEOM)
  217. C SEGACT MPYMA
  218. CALL LICHT(IGRYMA , MPGYMA , TYPE, IGEOM)
  219. C SEGACT MPGYMA
  220. CALL LICHT(ILIYMA , MPLYMA , TYPE, IGEOM)
  221. C SEGACT MPLYMA
  222. CALL LICHT(IALC , MPALC , TYPE, IGEOM)
  223. C SEGACT MPALC
  224. CALL LICHT(IGRALC , MPGALC , TYPE, IGEOM)
  225. C SEGACT MPGALC
  226. CALL LICHT(ILIALC , MPLALC , TYPE, IGEOM)
  227. C SEGACT MPLALC
  228. ENDIF
  229. C
  230. C**** Le cosinus directeurs
  231. C
  232. CALL LICHT(INORM , MPNORM , TYPE, IGEOM)
  233. C SEGACT MPNORM
  234. C
  235. C**** Les MPOVAL sont déjà activés i.e.:
  236. C
  237. C
  238. C**** Le MELEME FACEL
  239. C
  240. IPT1 = IFACEL
  241. IPT2 = IFACE
  242. SEGACT IPT1
  243. SEGACT IPT2
  244. NFAC = IPT1.NUM(/2)
  245. C
  246. C**** Creation de MCHAMLs contenant les etats gauche et droite,
  247. C
  248. C i.e.:
  249. C
  250. C vitesse + cosinus directors du repere local
  251. C alpha
  252. C densité
  253. C pression
  254. C
  255. C**********************************************************
  256. C**** Cosinus directors du repere local et vitesse ********
  257. C**********************************************************
  258. C
  259. C Les cosinus directeurs
  260. C
  261. N1 = 2
  262. N3 = 6
  263. L1 = 28
  264. SEGINI MCHEL1
  265. IVN1F = MCHEL1
  266. MCHEL1.TITCHE = 'U '
  267. MCHEL1.IMACHE(1) = IFACE
  268. MCHEL1.IMACHE(2) = IFACEL
  269. MCHEL1.CONCHE(1) = ' (n,t) in (x,y) '
  270. MCHEL1.CONCHE(2) = ' U in (n,t) '
  271. * MCHEL1.NOPHAS(1) = ' '
  272. * MCHEL1.NOPHAS(2) = ' '
  273. C
  274. C**** Valeurs des cosinus definies par respect au repair global, i.e.
  275. C
  276. MCHEL1.INFCHE(1,1) = 2
  277. MCHEL1.INFCHE(1,3) = NIFOUR
  278. MCHEL1.INFCHE(1,4) = 0
  279. MCHEL1.INFCHE(1,5) = 0
  280. MCHEL1.INFCHE(1,6) = 1
  281. MCHEL1.IFOCHE = IFOUR
  282. C
  283. C**** Valeurs de vitesse definies par respect au repair local, i.e.
  284. C
  285. MCHEL1.INFCHE(2,1) = 1
  286. MCHEL1.INFCHE(2,3) = NIFOUR
  287. MCHEL1.INFCHE(2,4) = 0
  288. MCHEL1.INFCHE(2,5) = 0
  289. MCHEL1.INFCHE(2,6) = 1
  290. C
  291. C**** Le cosinus directeurs
  292. C
  293. N1PTEL = 1
  294. N1EL = NFAC
  295. N2PTEL = 0
  296. N2EL = 0
  297. C
  298. C**** MCHAML a N2 composantes:
  299. C
  300. C cosinus directeurs du repere local (n,t1)
  301. C
  302. C IDIM = 2 -> 4 composantes
  303. C
  304. N2 = 4
  305. SEGINI MCHAM1
  306. MCHEL1.ICHAML(1) = MCHAM1
  307. MCHAM1.NOMCHE(1) = 'NX '
  308. MCHAM1.NOMCHE(2) = 'NY '
  309. MCHAM1.NOMCHE(3) = 'TX '
  310. MCHAM1.NOMCHE(4) = 'TY '
  311. MCHAM1.TYPCHE(1) = 'REAL*8 '
  312. MCHAM1.TYPCHE(2) = 'REAL*8 '
  313. MCHAM1.TYPCHE(3) = 'REAL*8 '
  314. MCHAM1.TYPCHE(4) = 'REAL*8 '
  315. SEGINI MELVNX
  316. SEGINI MELVNY
  317. SEGINI MELT1X
  318. SEGINI MELT1Y
  319. MCHAM1.IELVAL(1) = MELVNX
  320. MCHAM1.IELVAL(2) = MELVNY
  321. MCHAM1.IELVAL(3) = MELT1X
  322. MCHAM1.IELVAL(4) = MELT1Y
  323. SEGDES MCHAM1
  324. C
  325. C**** Vitesse
  326. C
  327. N1EL = NFAC
  328. N1PTEL = 3
  329. N2EL = 0
  330. N2PTEL = 0
  331. C
  332. C**** MCHAML a N2 composantes:
  333. C
  334. C IDIM = 2 -> 2 composantes
  335. C
  336. N2 = 2
  337. SEGINI MCHAM1
  338. MCHEL1.ICHAML(2) = MCHAM1
  339. MCHAM1.NOMCHE(1) = 'UN '
  340. MCHAM1.NOMCHE(2) = 'UT '
  341. MCHAM1.TYPCHE(1) = 'REAL*8 '
  342. MCHAM1.TYPCHE(2) = 'REAL*8 '
  343. SEGINI MEVUN1
  344. SEGINI MEVUT1
  345. MCHAM1.IELVAL(1) = MEVUN1
  346. MCHAM1.IELVAL(2) = MEVUT1
  347. SEGDES MCHAM1
  348. C
  349. C**********************************************************
  350. C**** PHI1 ********
  351. C**********************************************************
  352. C
  353. C**** PHI1
  354. C
  355. N1 = 1
  356. N3 = 6
  357. L1 = 15
  358. SEGINI MCHEL2
  359. IPHIF = MCHEL2
  360. MCHEL2.IMACHE(1) = IFACEL
  361. MCHEL2.TITCHE = 'PHI '
  362. MCHEL2.CONCHE(1) = ' '
  363. C
  364. C**** Valeurs independente du repére, i.e.
  365. C
  366. MCHEL2.INFCHE(1,1) = 0
  367. MCHEL2.INFCHE(1,3) = NIFOUR
  368. MCHEL2.INFCHE(1,4) = 0
  369. MCHEL2.INFCHE(1,5) = 0
  370. MCHEL2.INFCHE(1,6) = 1
  371. MCHEL2.IFOCHE = IFOUR
  372. N2 = 1
  373. SEGINI MCHAM1
  374. MCHEL2.ICHAML(1) = MCHAM1
  375. C We cannot deseactivate MCHEL2 = IPHIF now since we
  376. C use it after...
  377. MCHAM1.NOMCHE(1) = 'SCAL '
  378. MCHAM1.TYPCHE(1) = 'REAL*8 '
  379. SEGINI MELPHI
  380. MCHAM1.IELVAL(1) = MELPHI
  381. SEGDES MCHAM1
  382. C
  383. C**********************************************************
  384. C**** IRN1F and IRN2F ********
  385. C**********************************************************
  386. C
  387. MCHEL1 = IPHIF
  388. SEGINI, MCHEL2 = MCHEL1
  389. IRN1F = MCHEL2
  390. MCHEL2.TITCHE = 'RHO1 '
  391. MCHAM1 = MCHEL1.ICHAML(1)
  392. SEGINI, MCHAM2 = MCHAM1
  393. MCHEL2.ICHAML(1) = MCHAM2
  394. SEGDES MCHEL2
  395. SEGINI MELRN1
  396. MCHAM2.IELVAL(1) = MELRN1
  397. SEGDES MCHAM2
  398. C
  399. C
  400. C
  401. C**********************************************************
  402. C**** IPN1F
  403. C**********************************************************
  404. C
  405. MCHEL1 = IPHIF
  406. SEGINI, MCHEL2 = MCHEL1
  407. IPN1F = MCHEL2
  408. MCHEL2.TITCHE = 'P1 '
  409. MCHAM1 = MCHEL1.ICHAML(1)
  410. SEGINI, MCHAM2 = MCHAM1
  411. MCHEL2.ICHAML(1) = MCHAM2
  412. SEGDES MCHEL2
  413. SEGDES MCHEL1
  414. C We desactivate MCHEL1 = IPHIF now !
  415. SEGINI MELPN1
  416. MCHAM2.IELVAL(1) = MELPN1
  417. SEGDES MCHAM2
  418. C
  419. C write(*,*) 'Qui ci arrivo 1...'
  420. IF (NESP .GE. 1) THEN
  421. C
  422. SEGACT MLMESP
  423. C
  424. C******* YF
  425. C
  426. NS = NESP
  427. SEGINI FRAMAS
  428. MCHEL1 = IRN1F
  429. SEGINI, MCHEL2 = MCHEL1
  430. IYF = MCHEL2
  431. MCHEL2.TITCHE = 'Y '
  432. N2 = NESP
  433. SEGINI MCHAMY
  434. MCHEL2.ICHAML(1) = MCHAMY
  435. SEGDES MCHEL2
  436. N1EL = NFAC
  437. N1PTEL = 3
  438. N2EL = 0
  439. N2PTEL = 0
  440. DO I1 = 1, NESP
  441. SEGINI MELVA1
  442. MCHAMY.IELVAL(I1) = MELVA1
  443. MCHAMY.NOMCHE(I1) = MLMESP.MOTS(I1)
  444. MCHAMY.TYPCHE(I1) = 'REAL*8 '
  445. ENDDO
  446. C
  447. C******* IALF
  448. C
  449. NS = NESP
  450. SEGINI ALPHA
  451. MCHEL1 = IRN1F
  452. SEGINI, MCHEL2 = MCHEL1
  453. IALF = MCHEL2
  454. MCHEL2.TITCHE = 'ALPHA '
  455. N2 = NESP
  456. SEGINI MCHAMA
  457. MCHEL2.ICHAML(1) = MCHAMA
  458. SEGDES MCHEL2
  459. N1EL = NFAC
  460. N1PTEL = 3
  461. N2EL = 0
  462. N2PTEL = 0
  463. DO I1 = 1, NESP
  464. SEGINI MELVA1
  465. MCHAMA.IELVAL(I1) = MELVA1
  466. MCHAMA.NOMCHE(I1) = MLMESP.MOTS(I1)
  467. MCHAMA.TYPCHE(I1) = 'REAL*8 '
  468. ENDDO
  469. C
  470. SEGDES MLMESP
  471. ENDIF
  472. C
  473. C write(*,*) 'Qui ci arrivo 2...'
  474. C
  475. C
  476. C**********************************************************
  477. C**** Boucle sur le faces *********
  478. C**********************************************************
  479. C
  480. IDIMP1 = IDIM + 1
  481. SEGACT,MCOORD
  482. DO NLCF = 1, NFAC
  483. C
  484. C******* NLCF = numero local du centre de face
  485. C NGCF = numero global du centre de face
  486. C NGCEG = numero global du centre ELT "gauche"
  487. C NLCEG = numero local du centre ELT "gauche"
  488. C NGCED = numero global du centre ELT "droite"
  489. C NLCED = numero local du centre ELT "droite"
  490. C
  491. NGCEG = IPT1.NUM(1,NLCF)
  492. NGCF = IPT1.NUM(2,NLCF)
  493. NGCED = IPT1.NUM(3,NLCF)
  494. NLCEG = MLENT1.LECT(NGCEG)
  495. NLCED = MLENT1.LECT(NGCED)
  496. C
  497. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  498. C
  499. NGCF1 = IPT2.NUM(1,NLCF)
  500. IF( NGCF1 .NE. NGCF) THEN
  501. MESERR(1:40) = 'PRET, subroutine pre611.eso '
  502. WRITE(IOIMP,*) MESERR
  503. CALL ERREUR(5)
  504. GOTO 9999
  505. ENDIF
  506. C
  507. C******* Cosinus directeurs des NORMALES aux faces
  508. C
  509. C On impose que les normales sont direct "Gauche" -> "Centre"
  510. C
  511. INDCEL = (NGCEG-1)*IDIMP1
  512. XG = XCOOR(INDCEL+1)
  513. YG = XCOOR(INDCEL+2)
  514. INDCEL = (NGCF-1)*IDIMP1
  515. XC = XCOOR(INDCEL + 1)
  516. YC = XCOOR(INDCEL + 2)
  517. INDCEL = (NGCED-1)*IDIMP1
  518. XD = XCOOR(INDCEL+1)
  519. YD = XCOOR(INDCEL+2)
  520. DXG = XC - XG
  521. DYG = YC - YG
  522. DXD = XC - XD
  523. DYD = YC - YD
  524. C
  525. C******* On calcule le sign du pruduit scalare
  526. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  527. C
  528. CNX = MPNORM.VPOCHA(NLCF,1)
  529. CNY = MPNORM.VPOCHA(NLCF,2)
  530. ORIENT = CNX * DXG + CNY * DYG
  531. ORIENT = SIGN(1.0D0,ORIENT)
  532. IF(ORIENT .NE. 1.0D0)THEN
  533. MESERR(1:30)=
  534. & 'PRET , subroutine pre611.eso. '
  535. GOTO 9999
  536. ENDIF
  537. CNX = CNX * ORIENT
  538. CNY = CNY * ORIENT
  539. C
  540. C******* Cosinus directeurs de tangent 2D
  541. C
  542. CTX = -1.0D0 * CNY
  543. CTY = CNX
  544. C
  545. C******* Les autres MELVALs
  546. C
  547. C
  548. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0...
  549. C
  550. C
  551. C******* Etat gauche
  552. C
  553. C PHI
  554. C
  555. VALCEL = MPPHI.VPOCHA(NLCEG, 1)
  556. LIMCEL = MPLPHI.VPOCHA(NLCEG, 1)
  557. DCEL = (MPGPHI.VPOCHA(NLCEG, 1) * DXG) +
  558. & (MPGPHI.VPOCHA(NLCEG, 2) * DYG)
  559. PHIG = VALCEL + (LIMCEL * DCEL)
  560. C write(*,*) valcel, limcel, dcel
  561. C
  562. C
  563. C RN
  564. C
  565. VALCEL = MPRN1.VPOCHA(NLCEG, 1)
  566. LIMCEL = MPLRN1.VPOCHA(NLCEG, 1)
  567. DCEL = (MPGRN1.VPOCHA(NLCEG, 1) * DXG) +
  568. & (MPGRN1.VPOCHA(NLCEG, 2) * DYG)
  569. RN1G = VALCEL + (LIMCEL * DCEL)
  570. C
  571. C
  572. C PN
  573. C
  574. VALCEL = MPPN1.VPOCHA(NLCEG, 1)
  575. LIMCEL = MPLPN1.VPOCHA(NLCEG, 1)
  576. DCEL = (MPGPN1.VPOCHA(NLCEG, 1) * DXG) +
  577. & (MPGPN1.VPOCHA(NLCEG, 2) * DYG)
  578. PN1G = VALCEL + (LIMCEL * DCEL)
  579. C
  580. C VN
  581. C
  582. VALCEL = MPVN1.VPOCHA(NLCEG, 1)
  583. LIMCEL = MPLVN1.VPOCHA(NLCEG, 1)
  584. DCEL = MPGVN1.VPOCHA(NLCEG, 1)*DXG +
  585. & MPGVN1.VPOCHA(NLCEG, 2)*DYG
  586. UX1G = VALCEL + (LIMCEL * DCEL)
  587. C
  588. VALCEL = MPVN1.VPOCHA(NLCEG, 2)
  589. LIMCEL = MPLVN1.VPOCHA(NLCEG, 2)
  590. DCEL = MPGVN1.VPOCHA(NLCEG, 3)*DXG +
  591. & MPGVN1.VPOCHA(NLCEG, 4)*DYG
  592. UY1G = VALCEL + (LIMCEL * DCEL)
  593. C
  594. C YN
  595. C
  596. DO I1 = 1, NESP
  597. INDCEL = 2 * I1 - 1
  598. VALCEL = MPYMA.VPOCHA(NLCEG,I1)
  599. DCEL = MPGYMA.VPOCHA(NLCEG, INDCEL)*DXG +
  600. & MPGYMA.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  601. LIMCEL = MPLYMA.VPOCHA(NLCEG,I1)
  602. FRAMAS.FRAMG(I1) = VALCEL + (LIMCEL * DCEL)
  603. ENDDO
  604. C
  605. C ALPHAN
  606. C
  607. DO I1 = 1, NESP
  608. INDCEL = 2 * I1 - 1
  609. VALCEL = MPALC.VPOCHA(NLCEG,I1)
  610. DCEL = MPGALC.VPOCHA(NLCEG, INDCEL)*DXG +
  611. & MPGALC.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  612. LIMCEL = MPLALC.VPOCHA(NLCEG,I1)
  613. ALPHA.FRAMG(I1) = VALCEL + (LIMCEL * DCEL)
  614. ENDDO
  615. C
  616. C
  617. C******* Si l'on fait pas de prediction, ce n'est pas necessaire de
  618. C controller la positivite' de la pression et de la densité; elle
  619. C est déjà garantie par la proprieté LED de limiteur.
  620. C If we want to check it, just uncomment LOGI1.
  621. C
  622. C LOGI1 = (RN1G .LT. 0.0D0) .OR.
  623. C & (PN1G .LT. 0.0D0)
  624. C
  625. IF ( NGCEG .EQ. NGCED) THEN
  626. C
  627. C********** Cas mur
  628. C
  629. IF(LOGI1)THEN
  630. C
  631. C********** Premier ordre en espace local
  632. C
  633. PHIG = MPPHI.VPOCHA(NLCEG,1)
  634. RN1G = MPRN1.VPOCHA(NLCEG,1)
  635. PN1G = MPPN1.VPOCHA(NLCEG,1)
  636. UX1G = MPVN1.VPOCHA(NLCEG,1)
  637. UY1G = MPVN1.VPOCHA(NLCEG,2)
  638. DO I1 = 1, NESP
  639. FRAMAS.FRAMG(I1) = MPYMA.VPOCHA(NLCEG,I1)
  640. ENDDO
  641. DO I1 = 1, NESP
  642. ALPHA.FRAMG(I1) = MPALC.VPOCHA(NLCEG,I1)
  643. ENDDO
  644. ENDIF
  645. C
  646. UN1G = UX1G * CNX + UY1G * CNY
  647. UT1G = UX1G * CTX + UY1G * CTY
  648. C
  649. C********** Son etat droite
  650. C
  651. PHID = PHIG
  652. RN1D = RN1G
  653. PN1D = PN1G
  654. UN1D = -1.0D0 * UN1G
  655. UT1D = UT1G
  656. DO I1 = 1, NESP
  657. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  658. ENDDO
  659. DO I1 = 1, NESP
  660. ALPHA.FRAMD(I1) = ALPHA.FRAMG(I1)
  661. ENDDO
  662. C
  663. C********** Fin cas mur
  664. C
  665. ELSE
  666. VALCEL = MPPHI.VPOCHA(NLCED, 1)
  667. LIMCEL = MPLPHI.VPOCHA(NLCED, 1)
  668. DCEL = (MPGPHI.VPOCHA(NLCED, 1) * DXD) +
  669. & (MPGPHI.VPOCHA(NLCED, 2) * DYD)
  670. PHID = VALCEL + (LIMCEL * DCEL)
  671. C
  672. C RN
  673. C
  674. VALCEL = MPRN1.VPOCHA(NLCED, 1)
  675. LIMCEL = MPLRN1.VPOCHA(NLCED, 1)
  676. DCEL = (MPGRN1.VPOCHA(NLCED, 1) * DXD) +
  677. & (MPGRN1.VPOCHA(NLCED, 2) * DYD)
  678. RN1D = VALCEL + (LIMCEL * DCEL)
  679. C
  680. C PN
  681. C
  682. VALCEL = MPPN1.VPOCHA(NLCED, 1)
  683. LIMCEL = MPLPN1.VPOCHA(NLCED, 1)
  684. DCEL = (MPGPN1.VPOCHA(NLCED, 1) * DXD) +
  685. & (MPGPN1.VPOCHA(NLCED, 2) * DYD)
  686. PN1D = VALCEL + (LIMCEL * DCEL)
  687. C
  688. C VN
  689. C
  690. VALCEL = MPVN1.VPOCHA(NLCED, 1)
  691. LIMCEL = MPLVN1.VPOCHA(NLCED, 1)
  692. DCEL = MPGVN1.VPOCHA(NLCED, 1)*DXD +
  693. & MPGVN1.VPOCHA(NLCED, 2)*DYD
  694. UX1D = VALCEL + LIMCEL * DCEL
  695. C
  696. VALCEL = MPVN1.VPOCHA(NLCED, 2)
  697. LIMCEL = MPLVN1.VPOCHA(NLCED, 2)
  698. DCEL = MPGVN1.VPOCHA(NLCED, 3)*DXD +
  699. & MPGVN1.VPOCHA(NLCED, 4)*DYD
  700. UY1D = VALCEL + LIMCEL * DCEL
  701. C
  702. C YN
  703. C
  704. DO I1 = 1, NESP
  705. INDCEL = 2 * I1 - 1
  706. VALCEL = MPYMA.VPOCHA(NLCED,I1)
  707. DCEL = MPGYMA.VPOCHA(NLCED, INDCEL)*DXD +
  708. & MPGYMA.VPOCHA(NLCED,INDCEL + 1 )*DYD
  709. LIMCEL = MPLYMA.VPOCHA(NLCED,I1)
  710. FRAMAS.FRAMD(I1) = VALCEL + (LIMCEL * DCEL)
  711. ENDDO
  712. C
  713. C ALPHAN
  714. C
  715. DO I1 = 1, NESP
  716. INDCEL = 2 * I1 - 1
  717. VALCEL = MPALC.VPOCHA(NLCED,I1)
  718. DCEL = MPGALC.VPOCHA(NLCED, INDCEL)*DXD +
  719. & MPGALC.VPOCHA(NLCED,INDCEL + 1 )*DYD
  720. LIMCEL = MPLALC.VPOCHA(NLCED,I1)
  721. ALPHA.FRAMD(I1) = VALCEL + (LIMCEL * DCEL)
  722. ENDDO
  723.  
  724. C
  725. C
  726. C********** Si l'on fait pas de prediction, ce n'est pas necessaire de
  727. C controller la positivite' de la pression et de la densité; elle
  728. C est déjà garantie par la proprieté LED de limiteur.
  729. C If we want to check it, just uncomment LOGI1.
  730. C
  731. C LOGI1 = LOGI1 .OR. (RN1D .LT. 0.0D0)
  732. C $ .OR.(PN1D .LT. 0.0D0)
  733. C
  734. IF(LOGI1)THEN
  735. C
  736. C************* Premier ordre en espace local
  737. C
  738. PHIG = MPPHI.VPOCHA(NLCEG,1)
  739. RN1G = MPRN1.VPOCHA(NLCEG,1)
  740. PN1G = MPPN1.VPOCHA(NLCEG,1)
  741. UX1G = MPVN1.VPOCHA(NLCEG,1)
  742. UY1G = MPVN1.VPOCHA(NLCEG,2)
  743. DO I1 = 1, NESP
  744. FRAMAS.FRAMG(I1) = MPYMA.VPOCHA(NLCEG,I1)
  745. ENDDO
  746. DO I1 = 1, NESP
  747. ALPHA.FRAMG(I1) = MPALC.VPOCHA(NLCEG,I1)
  748. ENDDO
  749. C
  750. PHID = MPPHI.VPOCHA(NLCED,1)
  751. RN1D = MPRN1.VPOCHA(NLCED,1)
  752. PN1D = MPPN1.VPOCHA(NLCED,1)
  753. UX1D = MPVN1.VPOCHA(NLCED,1)
  754. UY1D = MPVN1.VPOCHA(NLCED,2)
  755. DO I1 = 1, NESP
  756. FRAMAS.FRAMD(I1) = MPYMA.VPOCHA(NLCED,I1)
  757. ENDDO
  758. DO I1 = 1, NESP
  759. ALPHA.FRAMD(I1) = MPALC.VPOCHA(NLCED,I1)
  760. ENDDO
  761. ENDIF
  762. C
  763. UN1G = UX1G * CNX + UY1G * CNY
  764. UT1G = UX1G * CTX + UY1G * CTY
  765. C
  766. UN1D = UX1D * CNX + UY1D * CNY
  767. UT1D = UX1D * CTX + UY1D * CTY
  768. C
  769. ENDIF
  770. C
  771. C
  772. C******** Les MELVALs
  773. C
  774. MELPHI.VELCHE(1,NLCF) = PHIG
  775. MELPHI.VELCHE(3,NLCF) = PHID
  776. C
  777. MELRN1.VELCHE(1,NLCF) = RN1G
  778. MELRN1.VELCHE(3,NLCF) = RN1D
  779. C
  780. MELPN1.VELCHE(1,NLCF) = PN1G
  781. MELPN1.VELCHE(3,NLCF) = PN1D
  782. C
  783. MEVUN1.VELCHE(1,NLCF) = UN1G
  784. MEVUN1.VELCHE(3,NLCF) = UN1D
  785. MEVUT1.VELCHE(1,NLCF) = UT1G
  786. MEVUT1.VELCHE(3,NLCF) = UT1D
  787. MELVNX.VELCHE(1,NLCF) = CNX
  788. MELVNY.VELCHE(1,NLCF) = CNY
  789. MELT1X.VELCHE(1,NLCF) = CTX
  790. MELT1Y.VELCHE(1,NLCF) = CTY
  791. C
  792. DO I1 = 1, NESP
  793. MELVA1 = MCHAMY.IELVAL(I1)
  794. MELVA1.VELCHE(1,NLCF) = FRAMAS.FRAMG(I1)
  795. MELVA1.VELCHE(3,NLCF) = FRAMAS.FRAMD(I1)
  796. ENDDO
  797. C
  798. DO I1 = 1, NESP
  799. MELVA1 = MCHAMA.IELVAL(I1)
  800. MELVA1.VELCHE(1,NLCF) = ALPHA.FRAMG(I1)
  801. MELVA1.VELCHE(3,NLCF) = ALPHA.FRAMD(I1)
  802. ENDDO
  803. C
  804. ENDDO
  805. C
  806. C**** Desactivation des SEGMENTs
  807. C
  808. SEGDES IPT1
  809. SEGDES IPT2
  810. C
  811. C MPOVALs
  812. C
  813. SEGDES MPNORM
  814. C
  815. SEGDES MPPHI
  816. SEGDES MPGPHI
  817. SEGDES MPLPHI
  818. C
  819. SEGDES MPRN1
  820. SEGDES MPGRN1
  821. SEGDES MPLRN1
  822. C
  823. SEGDES MPPN1
  824. SEGDES MPGPN1
  825. SEGDES MPLPN1
  826. C
  827. SEGDES MPVN1
  828. SEGDES MPGVN1
  829. SEGDES MPLVN1
  830. C
  831. C MELVALs
  832. C
  833. SEGDES MELVNX
  834. SEGDES MELVNY
  835. SEGDES MELT1X
  836. SEGDES MELT1Y
  837. SEGDES MEVUN1
  838. SEGDES MEVUT1
  839. C
  840. SEGDES MELPHI
  841. C
  842. SEGDES MELRN1
  843. C
  844. SEGDES MELPN1
  845. C
  846. IF (NESP .GE. 1)THEN
  847. SEGDES MPYMA
  848. SEGDES MPGYMA
  849. SEGDES MPLYMA
  850. SEGDES MPALC
  851. SEGDES MPGALC
  852. SEGDES MPLALC
  853. DO I1 = 1, NESP
  854. MELVA1 = MCHAMY.IELVAL(I1)
  855. SEGDES MELVA1
  856. MELVA1 = MCHAMA.IELVAL(I1)
  857. SEGDES MELVA1
  858. ENDDO
  859. SEGDES MCHAMA
  860. SEGDES MCHAMY
  861. SEGSUP FRAMAS
  862. SEGSUP ALPHA
  863. ENDIF
  864. C
  865. C**** Destruction du MELNTI correspondance local/global
  866. C
  867. SEGSUP MLENT1
  868. C
  869. 9999 CONTINUE
  870. C
  871. RETURN
  872. END
  873.  
  874.  
  875.  

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