Télécharger pre711.eso

Retour à la liste

Numérotation des lignes :

pre711
  1. C PRE711 SOURCE CB215821 23/01/25 21:15:30 11573
  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) = 0
  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) = 0
  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. * MCHEL2.NOPHAS(1) = ' '
  364. C
  365. C**** Valeurs independente du repére, i.e.
  366. C
  367. MCHEL2.INFCHE(1,1) = 0
  368. MCHEL2.INFCHE(1,3) = NIFOUR
  369. MCHEL2.INFCHE(1,4) = 0
  370. MCHEL2.INFCHE(1,5) = 0
  371. MCHEL2.INFCHE(1,6) = 0
  372. MCHEL2.IFOCHE = IFOUR
  373. N2 = 1
  374. SEGINI MCHAM1
  375. MCHEL2.ICHAML(1) = MCHAM1
  376. C We cannot deseactivate MCHEL2 = IPHIF now since we
  377. C use it after...
  378. MCHAM1.NOMCHE(1) = 'SCAL '
  379. MCHAM1.TYPCHE(1) = 'REAL*8 '
  380. SEGINI MELPHI
  381. MCHAM1.IELVAL(1) = MELPHI
  382. SEGDES MCHAM1
  383. C
  384. C**********************************************************
  385. C**** IRN1F and IRN2F ********
  386. C**********************************************************
  387. C
  388. MCHEL1 = IPHIF
  389. SEGINI, MCHEL2 = MCHEL1
  390. IRN1F = MCHEL2
  391. MCHEL2.TITCHE = 'RHO1 '
  392. MCHAM1 = MCHEL1.ICHAML(1)
  393. SEGINI, MCHAM2 = MCHAM1
  394. MCHEL2.ICHAML(1) = MCHAM2
  395. SEGDES MCHEL2
  396. SEGINI MELRN1
  397. MCHAM2.IELVAL(1) = MELRN1
  398. SEGDES MCHAM2
  399. C
  400. C
  401. C
  402. C**********************************************************
  403. C**** IPN1F
  404. C**********************************************************
  405. C
  406. MCHEL1 = IPHIF
  407. SEGINI, MCHEL2 = MCHEL1
  408. IPN1F = MCHEL2
  409. MCHEL2.TITCHE = 'P1 '
  410. MCHAM1 = MCHEL1.ICHAML(1)
  411. SEGINI, MCHAM2 = MCHAM1
  412. MCHEL2.ICHAML(1) = MCHAM2
  413. SEGDES MCHEL2
  414. SEGDES MCHEL1
  415. C We desactivate MCHEL1 = IPHIF now !
  416. SEGINI MELPN1
  417. MCHAM2.IELVAL(1) = MELPN1
  418. SEGDES MCHAM2
  419. C
  420. C write(*,*) 'Qui ci arrivo 1...'
  421. IF (NESP .GE. 1) THEN
  422. C
  423. SEGACT MLMESP
  424. C
  425. C******* YF
  426. C
  427. NS = NESP
  428. SEGINI FRAMAS
  429. MCHEL1 = IRN1F
  430. SEGINI, MCHEL2 = MCHEL1
  431. IYF = MCHEL2
  432. MCHEL2.TITCHE = 'Y '
  433. N2 = NESP
  434. SEGINI MCHAMY
  435. MCHEL2.ICHAML(1) = MCHAMY
  436. SEGDES MCHEL2
  437. N1EL = NFAC
  438. N1PTEL = 3
  439. N2EL = 0
  440. N2PTEL = 0
  441. DO I1 = 1, NESP
  442. SEGINI MELVA1
  443. MCHAMY.IELVAL(I1) = MELVA1
  444. MCHAMY.NOMCHE(I1) = MLMESP.MOTS(I1)
  445. MCHAMY.TYPCHE(I1) = 'REAL*8 '
  446. ENDDO
  447. C
  448. C******* IALF
  449. C
  450. NS = NESP
  451. SEGINI ALPHA
  452. MCHEL1 = IRN1F
  453. SEGINI, MCHEL2 = MCHEL1
  454. IALF = MCHEL2
  455. MCHEL2.TITCHE = 'ALPHA '
  456. N2 = NESP
  457. SEGINI MCHAMA
  458. MCHEL2.ICHAML(1) = MCHAMA
  459. SEGDES MCHEL2
  460. N1EL = NFAC
  461. N1PTEL = 3
  462. N2EL = 0
  463. N2PTEL = 0
  464. DO I1 = 1, NESP
  465. SEGINI MELVA1
  466. MCHAMA.IELVAL(I1) = MELVA1
  467. MCHAMA.NOMCHE(I1) = MLMESP.MOTS(I1)
  468. MCHAMA.TYPCHE(I1) = 'REAL*8 '
  469. ENDDO
  470. C
  471. SEGDES MLMESP
  472. ENDIF
  473. C
  474. C write(*,*) 'Qui ci arrivo 2...'
  475. C
  476. C
  477. C**********************************************************
  478. C**** Boucle sur le faces *********
  479. C**********************************************************
  480. C
  481. IDIMP1 = IDIM + 1
  482. SEGACT,MCOORD
  483. DO NLCF = 1, NFAC
  484. C
  485. C******* NLCF = numero local du centre de face
  486. C NGCF = numero global du centre de face
  487. C NGCEG = numero global du centre ELT "gauche"
  488. C NLCEG = numero local du centre ELT "gauche"
  489. C NGCED = numero global du centre ELT "droite"
  490. C NLCED = numero local du centre ELT "droite"
  491. C
  492. NGCEG = IPT1.NUM(1,NLCF)
  493. NGCF = IPT1.NUM(2,NLCF)
  494. NGCED = IPT1.NUM(3,NLCF)
  495. NLCEG = MLENT1.LECT(NGCEG)
  496. NLCED = MLENT1.LECT(NGCED)
  497. C
  498. C******* TEST: IPT2.NUM(1,NLCF) = IPT1.NUM(2,NLCF)
  499. C
  500. NGCF1 = IPT2.NUM(1,NLCF)
  501. IF( NGCF1 .NE. NGCF) THEN
  502. MESERR(1:40) = 'PRET, subroutine pre611.eso '
  503. WRITE(IOIMP,*) MESERR
  504. CALL ERREUR(5)
  505. GOTO 9999
  506. ENDIF
  507. C
  508. C******* Cosinus directeurs des NORMALES aux faces
  509. C
  510. C On impose que les normales sont direct "Gauche" -> "Centre"
  511. C
  512. INDCEL = (NGCEG-1)*IDIMP1
  513. XG = XCOOR(INDCEL+1)
  514. YG = XCOOR(INDCEL+2)
  515. INDCEL = (NGCF-1)*IDIMP1
  516. XC = XCOOR(INDCEL + 1)
  517. YC = XCOOR(INDCEL + 2)
  518. INDCEL = (NGCED-1)*IDIMP1
  519. XD = XCOOR(INDCEL+1)
  520. YD = XCOOR(INDCEL+2)
  521. DXG = XC - XG
  522. DYG = YC - YG
  523. DXD = XC - XD
  524. DYD = YC - YD
  525. C
  526. C******* On calcule le sign du pruduit scalare
  527. C (Normales de Castem) * (vecteur "gauche" -> "centre")
  528. C
  529. CNX = MPNORM.VPOCHA(NLCF,1)
  530. CNY = MPNORM.VPOCHA(NLCF,2)
  531. ORIENT = CNX * DXG + CNY * DYG
  532. ORIENT = SIGN(1.0D0,ORIENT)
  533. IF(ORIENT .NE. 1.0D0)THEN
  534. MESERR(1:30)=
  535. & 'PRET , subroutine pre611.eso. '
  536. GOTO 9999
  537. ENDIF
  538. CNX = CNX * ORIENT
  539. CNY = CNY * ORIENT
  540. C
  541. C******* Cosinus directeurs de tangent 2D
  542. C
  543. CTX = -1.0D0 * CNY
  544. CTY = CNX
  545. C
  546. C******* Les autres MELVALs
  547. C
  548. C
  549. C******* N.B.: On suppose qu'on a déjà controlle RO, P > 0...
  550. C
  551. C
  552. C******* Etat gauche
  553. C
  554. C PHI
  555. C
  556. VALCEL = MPPHI.VPOCHA(NLCEG, 1)
  557. LIMCEL = MPLPHI.VPOCHA(NLCEG, 1)
  558. DCEL = (MPGPHI.VPOCHA(NLCEG, 1) * DXG) +
  559. & (MPGPHI.VPOCHA(NLCEG, 2) * DYG)
  560. PHIG = VALCEL + (LIMCEL * DCEL)
  561. C write(*,*) valcel, limcel, dcel
  562. C
  563. C
  564. C RN
  565. C
  566. VALCEL = MPRN1.VPOCHA(NLCEG, 1)
  567. LIMCEL = MPLRN1.VPOCHA(NLCEG, 1)
  568. DCEL = (MPGRN1.VPOCHA(NLCEG, 1) * DXG) +
  569. & (MPGRN1.VPOCHA(NLCEG, 2) * DYG)
  570. RN1G = VALCEL + (LIMCEL * DCEL)
  571. C
  572. C
  573. C PN
  574. C
  575. VALCEL = MPPN1.VPOCHA(NLCEG, 1)
  576. LIMCEL = MPLPN1.VPOCHA(NLCEG, 1)
  577. DCEL = (MPGPN1.VPOCHA(NLCEG, 1) * DXG) +
  578. & (MPGPN1.VPOCHA(NLCEG, 2) * DYG)
  579. PN1G = VALCEL + (LIMCEL * DCEL)
  580. C
  581. C VN
  582. C
  583. VALCEL = MPVN1.VPOCHA(NLCEG, 1)
  584. LIMCEL = MPLVN1.VPOCHA(NLCEG, 1)
  585. DCEL = MPGVN1.VPOCHA(NLCEG, 1)*DXG +
  586. & MPGVN1.VPOCHA(NLCEG, 2)*DYG
  587. UX1G = VALCEL + (LIMCEL * DCEL)
  588. C
  589. VALCEL = MPVN1.VPOCHA(NLCEG, 2)
  590. LIMCEL = MPLVN1.VPOCHA(NLCEG, 2)
  591. DCEL = MPGVN1.VPOCHA(NLCEG, 3)*DXG +
  592. & MPGVN1.VPOCHA(NLCEG, 4)*DYG
  593. UY1G = VALCEL + (LIMCEL * DCEL)
  594. C
  595. C YN
  596. C
  597. DO I1 = 1, NESP
  598. INDCEL = 2 * I1 - 1
  599. VALCEL = MPYMA.VPOCHA(NLCEG,I1)
  600. DCEL = MPGYMA.VPOCHA(NLCEG, INDCEL)*DXG +
  601. & MPGYMA.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  602. LIMCEL = MPLYMA.VPOCHA(NLCEG,I1)
  603. FRAMAS.FRAMG(I1) = VALCEL + (LIMCEL * DCEL)
  604. ENDDO
  605. C
  606. C ALPHAN
  607. C
  608. DO I1 = 1, NESP
  609. INDCEL = 2 * I1 - 1
  610. VALCEL = MPALC.VPOCHA(NLCEG,I1)
  611. DCEL = MPGALC.VPOCHA(NLCEG, INDCEL)*DXG +
  612. & MPGALC.VPOCHA(NLCEG,INDCEL + 1 )*DYG
  613. LIMCEL = MPLALC.VPOCHA(NLCEG,I1)
  614. ALPHA.FRAMG(I1) = VALCEL + (LIMCEL * DCEL)
  615. ENDDO
  616. C
  617. C
  618. C******* Si l'on fait pas de prediction, ce n'est pas necessaire de
  619. C controller la positivite' de la pression et de la densité; elle
  620. C est déjà garantie par la proprieté LED de limiteur.
  621. C If we want to check it, just uncomment LOGI1.
  622. C
  623. C LOGI1 = (RN1G .LT. 0.0D0) .OR.
  624. C & (PN1G .LT. 0.0D0)
  625. C
  626. IF ( NGCEG .EQ. NGCED) THEN
  627. C
  628. C********** Cas mur
  629. C
  630. IF(LOGI1)THEN
  631. C
  632. C********** Premier ordre en espace local
  633. C
  634. PHIG = MPPHI.VPOCHA(NLCEG,1)
  635. RN1G = MPRN1.VPOCHA(NLCEG,1)
  636. PN1G = MPPN1.VPOCHA(NLCEG,1)
  637. UX1G = MPVN1.VPOCHA(NLCEG,1)
  638. UY1G = MPVN1.VPOCHA(NLCEG,2)
  639. DO I1 = 1, NESP
  640. FRAMAS.FRAMG(I1) = MPYMA.VPOCHA(NLCEG,I1)
  641. ENDDO
  642. DO I1 = 1, NESP
  643. ALPHA.FRAMG(I1) = MPALC.VPOCHA(NLCEG,I1)
  644. ENDDO
  645. ENDIF
  646. C
  647. UN1G = UX1G * CNX + UY1G * CNY
  648. UT1G = UX1G * CTX + UY1G * CTY
  649. C
  650. C********** Son etat droite
  651. C
  652. PHID = PHIG
  653. RN1D = RN1G
  654. PN1D = PN1G
  655. UN1D = -1.0D0 * UN1G
  656. UT1D = UT1G
  657. DO I1 = 1, NESP
  658. FRAMAS.FRAMD(I1) = FRAMAS.FRAMG(I1)
  659. ENDDO
  660. DO I1 = 1, NESP
  661. ALPHA.FRAMD(I1) = ALPHA.FRAMG(I1)
  662. ENDDO
  663. C
  664. C********** Fin cas mur
  665. C
  666. ELSE
  667. VALCEL = MPPHI.VPOCHA(NLCED, 1)
  668. LIMCEL = MPLPHI.VPOCHA(NLCED, 1)
  669. DCEL = (MPGPHI.VPOCHA(NLCED, 1) * DXD) +
  670. & (MPGPHI.VPOCHA(NLCED, 2) * DYD)
  671. PHID = VALCEL + (LIMCEL * DCEL)
  672. C
  673. C RN
  674. C
  675. VALCEL = MPRN1.VPOCHA(NLCED, 1)
  676. LIMCEL = MPLRN1.VPOCHA(NLCED, 1)
  677. DCEL = (MPGRN1.VPOCHA(NLCED, 1) * DXD) +
  678. & (MPGRN1.VPOCHA(NLCED, 2) * DYD)
  679. RN1D = VALCEL + (LIMCEL * DCEL)
  680. C
  681. C PN
  682. C
  683. VALCEL = MPPN1.VPOCHA(NLCED, 1)
  684. LIMCEL = MPLPN1.VPOCHA(NLCED, 1)
  685. DCEL = (MPGPN1.VPOCHA(NLCED, 1) * DXD) +
  686. & (MPGPN1.VPOCHA(NLCED, 2) * DYD)
  687. PN1D = VALCEL + (LIMCEL * DCEL)
  688. C
  689. C VN
  690. C
  691. VALCEL = MPVN1.VPOCHA(NLCED, 1)
  692. LIMCEL = MPLVN1.VPOCHA(NLCED, 1)
  693. DCEL = MPGVN1.VPOCHA(NLCED, 1)*DXD +
  694. & MPGVN1.VPOCHA(NLCED, 2)*DYD
  695. UX1D = VALCEL + LIMCEL * DCEL
  696. C
  697. VALCEL = MPVN1.VPOCHA(NLCED, 2)
  698. LIMCEL = MPLVN1.VPOCHA(NLCED, 2)
  699. DCEL = MPGVN1.VPOCHA(NLCED, 3)*DXD +
  700. & MPGVN1.VPOCHA(NLCED, 4)*DYD
  701. UY1D = VALCEL + LIMCEL * DCEL
  702. C
  703. C YN
  704. C
  705. DO I1 = 1, NESP
  706. INDCEL = 2 * I1 - 1
  707. VALCEL = MPYMA.VPOCHA(NLCED,I1)
  708. DCEL = MPGYMA.VPOCHA(NLCED, INDCEL)*DXD +
  709. & MPGYMA.VPOCHA(NLCED,INDCEL + 1 )*DYD
  710. LIMCEL = MPLYMA.VPOCHA(NLCED,I1)
  711. FRAMAS.FRAMD(I1) = VALCEL + (LIMCEL * DCEL)
  712. ENDDO
  713. C
  714. C ALPHAN
  715. C
  716. DO I1 = 1, NESP
  717. INDCEL = 2 * I1 - 1
  718. VALCEL = MPALC.VPOCHA(NLCED,I1)
  719. DCEL = MPGALC.VPOCHA(NLCED, INDCEL)*DXD +
  720. & MPGALC.VPOCHA(NLCED,INDCEL + 1 )*DYD
  721. LIMCEL = MPLALC.VPOCHA(NLCED,I1)
  722. ALPHA.FRAMD(I1) = VALCEL + (LIMCEL * DCEL)
  723. ENDDO
  724.  
  725. C
  726. C
  727. C********** Si l'on fait pas de prediction, ce n'est pas necessaire de
  728. C controller la positivite' de la pression et de la densité; elle
  729. C est déjà garantie par la proprieté LED de limiteur.
  730. C If we want to check it, just uncomment LOGI1.
  731. C
  732. C LOGI1 = LOGI1 .OR. (RN1D .LT. 0.0D0)
  733. C $ .OR.(PN1D .LT. 0.0D0)
  734. C
  735. IF(LOGI1)THEN
  736. C
  737. C************* Premier ordre en espace local
  738. C
  739. PHIG = MPPHI.VPOCHA(NLCEG,1)
  740. RN1G = MPRN1.VPOCHA(NLCEG,1)
  741. PN1G = MPPN1.VPOCHA(NLCEG,1)
  742. UX1G = MPVN1.VPOCHA(NLCEG,1)
  743. UY1G = MPVN1.VPOCHA(NLCEG,2)
  744. DO I1 = 1, NESP
  745. FRAMAS.FRAMG(I1) = MPYMA.VPOCHA(NLCEG,I1)
  746. ENDDO
  747. DO I1 = 1, NESP
  748. ALPHA.FRAMG(I1) = MPALC.VPOCHA(NLCEG,I1)
  749. ENDDO
  750. C
  751. PHID = MPPHI.VPOCHA(NLCED,1)
  752. RN1D = MPRN1.VPOCHA(NLCED,1)
  753. PN1D = MPPN1.VPOCHA(NLCED,1)
  754. UX1D = MPVN1.VPOCHA(NLCED,1)
  755. UY1D = MPVN1.VPOCHA(NLCED,2)
  756. DO I1 = 1, NESP
  757. FRAMAS.FRAMD(I1) = MPYMA.VPOCHA(NLCED,I1)
  758. ENDDO
  759. DO I1 = 1, NESP
  760. ALPHA.FRAMD(I1) = MPALC.VPOCHA(NLCED,I1)
  761. ENDDO
  762. ENDIF
  763. C
  764. UN1G = UX1G * CNX + UY1G * CNY
  765. UT1G = UX1G * CTX + UY1G * CTY
  766. C
  767. UN1D = UX1D * CNX + UY1D * CNY
  768. UT1D = UX1D * CTX + UY1D * CTY
  769. C
  770. ENDIF
  771. C
  772. C
  773. C******** Les MELVALs
  774. C
  775. MELPHI.VELCHE(1,NLCF) = PHIG
  776. MELPHI.VELCHE(3,NLCF) = PHID
  777. C
  778. MELRN1.VELCHE(1,NLCF) = RN1G
  779. MELRN1.VELCHE(3,NLCF) = RN1D
  780. C
  781. MELPN1.VELCHE(1,NLCF) = PN1G
  782. MELPN1.VELCHE(3,NLCF) = PN1D
  783. C
  784. MEVUN1.VELCHE(1,NLCF) = UN1G
  785. MEVUN1.VELCHE(3,NLCF) = UN1D
  786. MEVUT1.VELCHE(1,NLCF) = UT1G
  787. MEVUT1.VELCHE(3,NLCF) = UT1D
  788. MELVNX.VELCHE(1,NLCF) = CNX
  789. MELVNY.VELCHE(1,NLCF) = CNY
  790. MELT1X.VELCHE(1,NLCF) = CTX
  791. MELT1Y.VELCHE(1,NLCF) = CTY
  792. C
  793. DO I1 = 1, NESP
  794. MELVA1 = MCHAMY.IELVAL(I1)
  795. MELVA1.VELCHE(1,NLCF) = FRAMAS.FRAMG(I1)
  796. MELVA1.VELCHE(3,NLCF) = FRAMAS.FRAMD(I1)
  797. ENDDO
  798. C
  799. DO I1 = 1, NESP
  800. MELVA1 = MCHAMA.IELVAL(I1)
  801. MELVA1.VELCHE(1,NLCF) = ALPHA.FRAMG(I1)
  802. MELVA1.VELCHE(3,NLCF) = ALPHA.FRAMD(I1)
  803. ENDDO
  804. C
  805. ENDDO
  806. C
  807. C**** Desactivation des SEGMENTs
  808. C
  809. SEGDES IPT1
  810. SEGDES IPT2
  811. C
  812. C MPOVALs
  813. C
  814. SEGDES MPNORM
  815. C
  816. SEGDES MPPHI
  817. SEGDES MPGPHI
  818. SEGDES MPLPHI
  819. C
  820. SEGDES MPRN1
  821. SEGDES MPGRN1
  822. SEGDES MPLRN1
  823. C
  824. SEGDES MPPN1
  825. SEGDES MPGPN1
  826. SEGDES MPLPN1
  827. C
  828. SEGDES MPVN1
  829. SEGDES MPGVN1
  830. SEGDES MPLVN1
  831. C
  832. C MELVALs
  833. C
  834. SEGDES MELVNX
  835. SEGDES MELVNY
  836. SEGDES MELT1X
  837. SEGDES MELT1Y
  838. SEGDES MEVUN1
  839. SEGDES MEVUT1
  840. C
  841. SEGDES MELPHI
  842. C
  843. SEGDES MELRN1
  844. C
  845. SEGDES MELPN1
  846. C
  847. IF (NESP .GE. 1)THEN
  848. SEGDES MPYMA
  849. SEGDES MPGYMA
  850. SEGDES MPLYMA
  851. SEGDES MPALC
  852. SEGDES MPGALC
  853. SEGDES MPLALC
  854. DO I1 = 1, NESP
  855. MELVA1 = MCHAMY.IELVAL(I1)
  856. SEGDES MELVA1
  857. MELVA1 = MCHAMA.IELVAL(I1)
  858. SEGDES MELVA1
  859. ENDDO
  860. SEGDES MCHAMA
  861. SEGDES MCHAMY
  862. SEGSUP FRAMAS
  863. SEGSUP ALPHA
  864. ENDIF
  865. C
  866. C**** Destruction du MELNTI correspondance local/global
  867. C
  868. SEGSUP MLENT1
  869. C
  870. 9999 CONTINUE
  871. C
  872. RETURN
  873. END
  874.  
  875.  

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