Télécharger konja5.eso

Retour à la liste

Numérotation des lignes :

konja5
  1. C KONJA5 SOURCE OF166741 24/12/13 21:16:32 12097
  2. SUBROUTINE KONJA5(IIMPL,ILINC,IROF,IPF,IVITF,IGAMF,
  3. & IRN,IPN,IVN,IGAMN,
  4. $ ICHPVO,ICHPSU, ICHPNO, MELEMC, MELEFE, MELEMF, MELTFA,
  5. & IGRN, IGVN, IGPN,IGLRN, IGLVN, IGLPN,
  6. & ICRN, ICVN, ICPN, IVLIM,MELLIM,IMAT)
  7. C
  8. C************************************************************************
  9. C
  10. C PROJET : CASTEM 2000
  11. C
  12. C NOM : KONJA5
  13. C
  14. C DESCRIPTION : Voir KONV11
  15. C Calcul du jacobien du résidu "2nd order accurate"
  16. C
  17. C Cas deux dimensions, gaz "calorically perfect"
  18. C
  19. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  20. C
  21. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/LTMF
  22. C
  23. C************************************************************************
  24. C
  25. C APPELES (Outils
  26. C CASTEM) : KRIPAD, LICHT, ERREUR
  27. C
  28. C APPELES (Calcul) : VLHJ3, AUSMW, VLHJ1, AUSMF
  29. C
  30. C************************************************************************
  31. C
  32. C ENTREES
  33. C
  34. C IIMPL : INTEGER
  35. C = 4 -> methode VLH
  36. C = 5 -> methode AUSM+
  37. C
  38. C ILINC : liste des inconnues (pointeur d'un objet de type
  39. C LISTMOTS)
  40. C
  41. C 1) Pointeurs des CHPOINT/CHAMELEM
  42. C
  43. C IROF : MCHAML 'FACEL' densité
  44. C
  45. C IPF : MCHAML 'FACEL' pression
  46. C
  47. C IVITF : MCHAML 'FACEL' vitesse/normales
  48. C
  49. C IGAMF : MCHAML 'FACEL' gamma
  50. C
  51. C IRN : CHPOINT 'CENTRE' densité
  52. C
  53. C IPN : CHPOINT 'CENTRE' pression
  54. C
  55. C IVN : CHPOINT 'CENTRE' vitesse
  56. C
  57. C IGAMN : CHPOINT 'CENTRE' gamma
  58. C
  59. C ICHPVO : CHPOINT VOLUME contenant le volume
  60. C
  61. C ICHPSU : CHPOINT FACE contenant la surface des faces
  62. C
  63. C ICHPNO : CHPOINT 'FACE' contenant les normales aux faces
  64. C
  65. C IGRN : CHPOINT 'CENTRE' gradient de densité
  66. C
  67. C IGVN : CHPOINT 'CENTRE' gradient de vitesse
  68. C
  69. C IGPN : CHPOINT 'CENTRE' gradient de pression
  70. C
  71. C IGLRN : CHPOINT 'CENTRE' limiteur du gradient de densité
  72. C
  73. C IGLVN : CHPOINT 'CENTRE' limiteur du gradient de vitesse
  74. C
  75. C IGLPN : CHPOINT 'CENTRE' limiteur du gradient de pression
  76. C
  77. C ICRN : MCHAML contenant les coeff. pour calculer le gradient
  78. C de densité
  79. C
  80. C ICVN : MCHAML contenant les coeff. pour calculer le gradient
  81. C de vitesse
  82. C
  83. C ICPN : MCHAML contenant les coeff. pour calculer le gradient
  84. C de pression
  85. C
  86. C IVLIM : CHPOINT des conditions aux limites sur la vitesse
  87. C
  88. C 2) Pointeurs de MELEME de la table DOMAINE
  89. C
  90. C MELEMC : MELEME 'CENTRE', SPG des CENTRES des elts
  91. C
  92. C MELEFE : MELEME 'FACEL' (centre elt gauche, centre de face
  93. C centre elt droite)
  94. C
  95. C MELEMF : MELEME 'FACE', SPG des CENTRES des faces
  96. C
  97. C MELTFA : MELEME 'ELTFA' (centre d'elt, centres de faces)
  98. C
  99. C MELLIM : MELEME SPG des conditions aux bords
  100. C
  101. C SORTIES
  102. C
  103. C IMAT : pointeur de la MATRIK du jacobien du residu
  104. C
  105. C************************************************************************
  106. C
  107. C HISTORIQUE (Anomalies et modifications éventuelles)
  108. C
  109. C HISTORIQUE :
  110. C
  111. C************************************************************************
  112. C
  113. C N.B.: On suppose qu'on a déjà controllé RO, P > 0
  114. C GAMMA \in (1,3)
  115. C Si non il faut le faire!!!
  116. C
  117. C************************************************************************
  118. C
  119. IMPLICIT INTEGER(I-N)
  120. INTEGER IIMPL,ILINC, ICHPVO, ICHPNO, ICHPSU
  121. & ,IROF,IVITF,IPF,IGAMF, IRN,IPN,IVN,IGAMN
  122. & , IGRN, IGVN, IGPN,IGLRN, IGLVN, IGLPN
  123. & , ICRN, ICVN, ICPN, IVLIM , IMAT
  124. & , NBSOUP, NBREF, NBELEM, NBNN, NRIGE, NMATRI, NKID
  125. & , NKMT, NBME, NBEL, MP, NP, NP1
  126. & , IFAC, NGCF, NLCF, NGCF1, NGCG, NGCD
  127. & , NGC, NLC, NLCD, NGNO, NGN1,NGN2, NLNO, IELEM, IELPRI
  128. & , JG, NBSOUS, NBSOU1, ISOUS, NBEL1
  129. & , ISPG1, ISPG2
  130. & , I1, IGEOMC, IGEOMF, IGEOML
  131. & , IFACGR, NGGRA, NLGRA, NGFGR, NLFGR, NG, ND, ICOOR, IFAC2
  132. & , NLVIMP
  133. & , NGPRI,NLPRI,IELETR,IDUATR,IPRITR, NLFL
  134. REAL*8 ROG, PG, UNG, UTG, UXG, UYG, RETG, GAMG, VOLG, VOLD
  135. & , ROD, PD, UND, UTD, UXD, UYD
  136. & , SURF, CNX, CNY, CTX, CTY, ECIN, FUNCEL
  137. & , DFRO(4), DFRET(4), DFRUN(4), DFRUT(4),DFRUX(4),DFRUY(4)
  138. & , ALR, ALP, ALVX, ALVY, XCG, YCG, DXCF, DYCF, CELLR, CELLP
  139. & , CVXVX, CVXVY, CVYVX, CVYVY, CNX1, CNY1, CTX1, CTY1
  140. & , DDP, DDRO, DDUX, DDUY
  141. & , GAMGM1, CELCO1, CELCO2, CELCO3, CELCO4, CELCO5
  142.  
  143. CHARACTER*8 TYPE
  144. C
  145. C**** LES INCLUDES
  146. C
  147. -INC SMCOORD
  148.  
  149. -INC PPARAM
  150. -INC CCOPTIO
  151. -INC SMCHAML
  152. POINTEUR MELVNX.MELVAL, MELVNY.MELVAL,
  153. & MELT1X.MELVAL, MELT1Y.MELVAL
  154. POINTEUR MELVUN.MELVAL, MELVUT.MELVAL
  155. POINTEUR MELRO.MELVAL, MELP.MELVAL,
  156. & MELGAM.MELVAL
  157. POINTEUR MELCR1.MELVAL, MELCR2.MELVAL, MELCP1.MELVAL,
  158. & MELCP2.MELVAL, MELCV1.MELVAL, MELCV2.MELVAL
  159. C
  160. -INC SMCHPOI
  161. -INC SMELEME
  162. -INC SMLMOTS
  163. -INC SMLENTI
  164. POINTEUR MPVOLU.MPOVAL, MPNORM.MPOVAL, MPOVSU.MPOVAL,
  165. $ MPVGRN.MPOVAL,MPGLRN.MPOVAL, MPVGPN.MPOVAL, MPGLPN.MPOVAL,
  166. $ MPVGVN.MPOVAL,MPGLVN.MPOVAL, MPVLIM.MPOVAL,MPOVRN.MPOVAL,MPOVVN
  167. $ .MPOVAL,MPOVPN.MPOVAL,MPOGAM.MPOVAL
  168. POINTEUR MELEMC.MELEME, MELEMF.MELEME, MELEFE.MELEME,
  169. & MELTFA.MELEME,MELPRI.MELEME,MELGRR.MELEME,MELGRP.MELEME
  170. $ ,MELGRV.MELEME, MELLIM.MELEME
  171. POINTEUR MLENTC.MLENTI, MLENTF.MLENTI, MLESPG.MLENTI,MLEPRI.MLENTI
  172. & ,MLEVL.MLENTI,MLEGRR.MLENTI,MLEGRP.MLENTI,MLEGRV.MLENTI
  173. & ,MLELIM.MLENTI
  174. POINTEUR RR.IZAFM, RUX.IZAFM, RUY.IZAFM, RRET.IZAFM,
  175. & UXR.IZAFM, UXUX.IZAFM, UXUY.IZAFM, UXRET.IZAFM,
  176. & UYR.IZAFM, UYUX.IZAFM, UYUY.IZAFM, UYRET.IZAFM,
  177. & RETR.IZAFM, RETUX.IZAFM, RETUY.IZAFM, RETRET.IZAFM
  178. POINTEUR MLMINC.MLMOTS
  179. C
  180. C**** KRIPAD pour la correspondance global/local des conditions limits
  181. C
  182. CALL KRIPAD(MELLIM,MLELIM)
  183. C SEGACT MELLIM
  184. C
  185. C**** Masse volumique
  186. C
  187. MCHEL1 = IROF
  188. SEGACT MCHEL1
  189. MCHAM1 = MCHEL1.ICHAML(1)
  190. SEGACT MCHAM1
  191. MELRO = MCHAM1.IELVAL(1)
  192. SEGDES MCHEL1
  193. SEGDES MCHAM1
  194. C
  195. C**** Pression
  196. C
  197. MCHEL1 = IPF
  198. SEGACT MCHEL1
  199. MCHAM1 = MCHEL1.ICHAML(1)
  200. SEGACT MCHAM1
  201. MELP = MCHAM1.IELVAL(1)
  202. SEGDES MCHEL1
  203. SEGDES MCHAM1
  204. C
  205. C**** Gamma
  206. C
  207. MCHEL1 = IGAMF
  208. SEGACT MCHEL1
  209. MCHAM1 = MCHEL1.ICHAML(1)
  210. SEGACT MCHAM1
  211. MELGAM = MCHAM1.IELVAL(1)
  212. SEGDES MCHEL1
  213. SEGDES MCHAM1
  214. C
  215. C**** Vitesse et cosinus directeurs du repere (n,t)
  216. C
  217. MCHEL1 = IVITF
  218. SEGACT MCHEL1
  219. C
  220. C**** La vitesse a comme SPG MELEFE
  221. C Le cosinus directeurs ont comme SPG MELEMF
  222. C
  223. C MCHAM1 -> Cosinus directeurs
  224. C MCHAM2 -> Vitesse
  225. C
  226. ISPG1 = MCHEL1.IMACHE(1)
  227. ISPG2 = MCHEL1.IMACHE(2)
  228. IF((ISPG1 .EQ. MELEMF) .AND. (ISPG2 .EQ. MELEFE))THEN
  229. MCHAM1 = MCHEL1.ICHAML(1)
  230. MCHAM2 = MCHEL1.ICHAML(2)
  231. ELSEIF((ISPG1 .EQ. MELEFE) .AND. (ISPG2 .EQ. MELEMF))THEN
  232. MCHAM1 = MCHEL1.ICHAML(2)
  233. MCHAM2 = MCHEL1.ICHAML(1)
  234. ELSE
  235. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  236. CALL ERREUR(5)
  237. GOTO 9999
  238. ENDIF
  239. SEGACT MCHAM1
  240. MELVNX = MCHAM1.IELVAL(1)
  241. MELVNY = MCHAM1.IELVAL(2)
  242. MELT1X = MCHAM1.IELVAL(3)
  243. MELT1Y = MCHAM1.IELVAL(4)
  244. SEGDES MCHAM1
  245. SEGACT MCHAM2
  246. MELVUN = MCHAM2.IELVAL(1)
  247. MELVUT = MCHAM2.IELVAL(2)
  248. SEGDES MCHAM2
  249. SEGDES MCHEL1
  250. C
  251. C**** Activation des MCHAMLs
  252. C
  253. SEGACT MELRO
  254. SEGACT MELP
  255. SEGACT MELGAM
  256. SEGACT MELVUN
  257. SEGACT MELVUT
  258. SEGACT MELVNX
  259. SEGACT MELVNY
  260. SEGACT MELT1X
  261. SEGACT MELT1Y
  262. C
  263. C**************** CHPOINT gradients, limiteurs, vitesse aux bords
  264. C
  265. CALL LICHT(IRN,MPOVRN,TYPE,IGEOMC)
  266. IF(IERR.NE.0)GOTO 9999
  267. C SEGACT MPOVRN
  268. CALL LICHT(IVN,MPOVVN,TYPE,IGEOMC)
  269. IF(IERR.NE.0)GOTO 9999
  270. C SEGACT MPOVVN
  271. CALL LICHT(IPN,MPOVPN,TYPE,IGEOMC)
  272. IF(IERR.NE.0)GOTO 9999
  273. C SEGACT MPOVPN
  274. CALL LICHT(IGAMN,MPOGAM,TYPE,IGEOMC)
  275. IF(IERR.NE.0)GOTO 9999
  276. C SEGACT MPOGAM
  277. CALL LICHT(IGRN,MPVGRN,TYPE,IGEOMC)
  278. IF(IERR.NE.0)GOTO 9999
  279. C SEGACT MPVGRN
  280. CALL LICHT(IGLRN,MPGLRN,TYPE,IGEOMC)
  281. IF(IERR.NE.0)GOTO 9999
  282. C SEGACT MPGLRN
  283. CALL LICHT(IGPN,MPVGPN,TYPE,IGEOMC)
  284. IF(IERR.NE.0)GOTO 9999
  285. C SEGACT MPVGPN
  286. CALL LICHT(IGLPN,MPGLPN,TYPE,IGEOMC)
  287. IF(IERR.NE.0)GOTO 9999
  288. C SEGACT MPGLPN
  289. CALL LICHT(IGVN,MPVGVN,TYPE,IGEOMC)
  290. IF(IERR.NE.0)GOTO 9999
  291. C SEGACT MPVGPN
  292. CALL LICHT(IGLVN,MPGLVN,TYPE,IGEOMC)
  293. IF(IERR.NE.0)GOTO 9999
  294. C SEGACT MPGLVN
  295. CALL LICHT(IVLIM,MPVLIM,TYPE,IGEOML)
  296. IF(IERR.NE.0)GOTO 9999
  297. C SEGACT MPVLIM
  298. C
  299. C**************** KRIPAD pour la correspondance global/local des centres d'elts
  300. C
  301. CALL KRIPAD(MELEMC,MLENTC)
  302. IF(IERR.NE.0)GOTO 9999
  303. C
  304. C SEGACT MLENTC
  305. SEGACT MELEMC
  306. C
  307. C**** KRIPAD pour la correspondance global/local des centres des faces
  308. C
  309. CALL KRIPAD(MELEMF,MLENTF)
  310. IF(IERR.NE.0)GOTO 9999
  311. C
  312. C SEGACT MLENTF
  313. C
  314. C**** KRIPAD pour la correspondance global/local des B.C. sur le vitesse
  315. C
  316. CALL KRIPAD(IGEOML,MLEVL)
  317. IF(IERR.NE.0)GOTO 9999
  318. C
  319. C SEGACT MLEVL
  320. C
  321. SEGACT MELEFE
  322. C
  323. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  324. IF(IERR.NE.0)GOTO 9999
  325. CALL LICHT(ICHPVO,MPVOLU,TYPE,IGEOMC)
  326. IF(IERR.NE.0)GOTO 9999
  327. CALL LICHT(ICHPNO,MPNORM,TYPE,IGEOMC)
  328. IF(IERR.NE.0)GOTO 9999
  329. C
  330. C**** LICHT active les MPOVALs en *MOD
  331. C
  332. C i.e.
  333. C
  334. C SEGACT MPOVSU*MOD
  335. C SEGACT MPVOLU*MOD
  336. C SEGACT MPNORM*MOD
  337. C
  338. C
  339. C**** Les gradients ont tous le meme SPG (mais le numero
  340. C du pointeur peut-etre different).
  341. C Ils ont le meme nombre des SPGs que MELTFA
  342. C En plus le SPGs ont le meme ordre:
  343. C le iem elt de MELTFA correspond a l'elt qui a
  344. C comme centre le iem noeud de CENTRE
  345. C
  346. SEGACT MELTFA
  347. NBSOUP=MELTFA.LISOUS(/1)
  348. IF(NBSOUP.EQ.0) NBSOUP=1
  349. JG=NBSOUP
  350. SEGINI MLESPG
  351. IF(NBSOUP .EQ. 1)THEN
  352. MLESPG.LECT(1)=MELTFA
  353. ELSE
  354. DO I1 = 1, NBSOUP, 1
  355. MLESPG.LECT(I1)=MELTFA.LISOUS(I1)
  356. ENDDO
  357. ENDIF
  358. C
  359. MCHEL1=ICRN
  360. SEGACT MCHEL1
  361. NBSOU1=MCHEL1.IMACHE(/1)
  362. IF(NBSOU1 .NE. NBSOUP)THEN
  363. WRITE(IOIMP,*) 'SPG coeffs grads = ???'
  364. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  365. CALL ERREUR(5)
  366. GOTO 9999
  367. ENDIF
  368. C
  369. MCHEL2=ICPN
  370. SEGACT MCHEL2
  371. NBSOU1=MCHEL2.IMACHE(/1)
  372. IF(NBSOU1 .NE. NBSOUP)THEN
  373. WRITE(IOIMP,*) 'SPG coeffs grads = ???'
  374. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  375. CALL ERREUR(5)
  376. GOTO 9999
  377. ENDIF
  378. C
  379. MCHEL2=ICVN
  380. SEGACT MCHEL2
  381. NBSOU1=MCHEL2.IMACHE(/1)
  382. IF(NBSOU1 .NE. NBSOUP)THEN
  383. WRITE(IOIMP,*) 'SPG coeffs grads = ???'
  384. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  385. CALL ERREUR(5)
  386. GOTO 9999
  387. ENDIF
  388. C
  389. C**** N.B.: ICRN, ICPN, ICVN sont activés!!!
  390. C
  391. C
  392. C****************** L'objet matrik
  393. C
  394. C
  395. NRIGE = 7
  396. NMATRI = 1
  397. NKID = 9
  398. NKMT = 7
  399. C
  400. SEGINI MATRIK
  401. IMAT = MATRIK
  402. C
  403. C**** Maillage des inconnues duales: MELEMC
  404. C Maillage des inconnues primales:
  405. C même structure que MCHEL1.IMACHE(ISOUS)
  406. C Donc on partitionne les deux dans la meme
  407. C maniere.
  408. C
  409. JG=NBSOUP
  410. SEGINI MLEPRI
  411. SEGINI MLEGRR
  412. SEGINI MLEGRP
  413. SEGINI MLEGRV
  414. IF(NBSOUP .EQ. 1)THEN
  415. MCHEL1=ICRN
  416. IPT1=MCHEL1.IMACHE(1)
  417. SEGACT IPT1
  418. SEGINI, MELPRI = IPT1
  419. MLEPRI.LECT(1) = MELPRI
  420. MLEGRR.LECT(1) = IPT1
  421. C
  422. MCHEL1=ICPN
  423. IPT1=MCHEL1.IMACHE(1)
  424. SEGACT IPT1
  425. MLEGRP.LECT(1) = IPT1
  426. C
  427. MCHEL1=ICVN
  428. IPT1=MCHEL1.IMACHE(1)
  429. SEGACT IPT1
  430. MLEGRV.LECT(1) = IPT1
  431. ELSE
  432. NBSOUS=NBSOUP
  433. NBREF=0
  434. NBNN=0
  435. NBELEM=0
  436. SEGINI MELPRI
  437. MCHEL1=ICRN
  438. MCHEL2=ICPN
  439. MCHEL3=ICVN
  440. DO ISOUS = 1, NBSOUP, 1
  441. IPT1=MCHEL1.IMACHE(ISOUS)
  442. IPT2=MCHEL2.IMACHE(ISOUS)
  443. IPT3=MCHEL3.IMACHE(ISOUS)
  444. SEGACT IPT1
  445. SEGACT IPT2
  446. SEGACT IPT3
  447. SEGINI, MELEME=IPT1
  448. MELPRI.LISOUS(ISOUS) = MELEME
  449. MLEPRI.LECT(ISOUS) = MELEME
  450. MLEGRR.LECT(ISOUS) = IPT1
  451. MLEGRP.LECT(ISOUS) = IPT2
  452. MLEGRV.LECT(ISOUS) = IPT3
  453. ENDDO
  454. ENDIF
  455. MATRIK.IRIGEL(2,1) = MELPRI
  456. MATRIK.IRIGEL(1,1) = MELPRI
  457. C
  458. C**** Matrice non symetrique
  459. C
  460. MATRIK.IRIGEL(7,1) = 2
  461. NBME = 16
  462. NBSOUS=NBSOUP
  463. SEGINI IMATRI
  464. MLMINC = ILINC
  465. SEGACT MLMINC
  466. MATRIK.IRIGEL(4,1) = IMATRI
  467. C
  468. IMATRI.LISPRI(1) = MLMINC.MOTS(1)
  469. IMATRI.LISPRI(2) = MLMINC.MOTS(2)
  470. IMATRI.LISPRI(3) = MLMINC.MOTS(3)
  471. IMATRI.LISPRI(4) = MLMINC.MOTS(4)
  472. IMATRI.LISPRI(5) = MLMINC.MOTS(1)
  473. IMATRI.LISPRI(6) = MLMINC.MOTS(2)
  474. IMATRI.LISPRI(7) = MLMINC.MOTS(3)
  475. IMATRI.LISPRI(8) = MLMINC.MOTS(4)
  476. IMATRI.LISPRI(9) = MLMINC.MOTS(1)
  477. IMATRI.LISPRI(10) = MLMINC.MOTS(2)
  478. IMATRI.LISPRI(11) = MLMINC.MOTS(3)
  479. IMATRI.LISPRI(12) = MLMINC.MOTS(4)
  480. IMATRI.LISPRI(13) = MLMINC.MOTS(1)
  481. IMATRI.LISPRI(14) = MLMINC.MOTS(2)
  482. IMATRI.LISPRI(15) = MLMINC.MOTS(3)
  483. IMATRI.LISPRI(16) = MLMINC.MOTS(4)
  484. C
  485. IMATRI.LISDUA(1) = MLMINC.MOTS(1)
  486. IMATRI.LISDUA(2) = MLMINC.MOTS(1)
  487. IMATRI.LISDUA(3) = MLMINC.MOTS(1)
  488. IMATRI.LISDUA(4) = MLMINC.MOTS(1)
  489. IMATRI.LISDUA(5) = MLMINC.MOTS(2)
  490. IMATRI.LISDUA(6) = MLMINC.MOTS(2)
  491. IMATRI.LISDUA(7) = MLMINC.MOTS(2)
  492. IMATRI.LISDUA(8) = MLMINC.MOTS(2)
  493. IMATRI.LISDUA(9) = MLMINC.MOTS(3)
  494. IMATRI.LISDUA(10) = MLMINC.MOTS(3)
  495. IMATRI.LISDUA(11) = MLMINC.MOTS(3)
  496. IMATRI.LISDUA(12) = MLMINC.MOTS(3)
  497. IMATRI.LISDUA(13) = MLMINC.MOTS(4)
  498. IMATRI.LISDUA(14) = MLMINC.MOTS(4)
  499. IMATRI.LISDUA(15) = MLMINC.MOTS(4)
  500. IMATRI.LISDUA(16) = MLMINC.MOTS(4)
  501. C
  502. C**** Boucle sur les LISOUS de MELPRI
  503. C
  504. IELEM=0
  505. C
  506. DO ISOUS=1,NBSOUP,1
  507. C
  508. C******* Les coeffs des grad.
  509. C
  510. MCHEL1=ICRN
  511. MCHAM1=MCHEL1.ICHAML(ISOUS)
  512. SEGACT MCHAM1
  513. MELCR1=MCHAM1.IELVAL(1)
  514. MELCR2=MCHAM1.IELVAL(2)
  515. SEGACT MELCR1, MELCR2
  516. SEGDES MCHAM1
  517. C
  518. MCHEL1=ICPN
  519. MCHAM1=MCHEL1.ICHAML(ISOUS)
  520. SEGACT MCHAM1
  521. MELCP1=MCHAM1.IELVAL(1)
  522. MELCP2=MCHAM1.IELVAL(2)
  523. SEGACT MELCP1, MELCP2
  524. SEGDES MCHAM1
  525. C
  526. C
  527. MCHEL1=ICVN
  528. MCHAM1=MCHEL1.ICHAML(ISOUS)
  529. SEGACT MCHAM1
  530. MELCV1=MCHAM1.IELVAL(1)
  531. MELCV2=MCHAM1.IELVAL(2)
  532. SEGACT MELCV1, MELCV2
  533. SEGDES MCHAM1
  534. C
  535. C******* MELEME : maillage elementaire de ELTFA
  536. C
  537. MELEME=MLESPG.LECT(ISOUS)
  538. SEGACT MELEME
  539. NBEL1=MELEME.NUM(/2)
  540. NP1=MELEME.NUM(/1)
  541. C
  542. C******* IPT1 : SPG des inconnues primales et duales
  543. C
  544. IPT1=MLEPRI.LECT(ISOUS)
  545. NBEL = IPT1.NUM(/2)
  546. NP = IPT1.NUM(/1)
  547. C
  548. C******* MELGRR: SPG elementaire des coeffs de GRAD
  549. C Il resemble a IPT1, mais IPT1 peut changer!
  550. C
  551. MELGRR=MLEGRR.LECT(ISOUS)
  552. MELGRP=MLEGRP.LECT(ISOUS)
  553. MELGRV=MLEGRV.LECT(ISOUS)
  554. C
  555. C******* MLESPG et MLEPRI doivent avoir le meme nombre
  556. C d'elts et de noeuds!
  557. C
  558. IF((NBEL1 .NE. NBEL) .OR. (NP1 .NE. (NP-1)))THEN
  559. WRITE(IOIMP,*) 'ELTFA, SPGs gradients'
  560. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  561. CALL ERREUR(5)
  562. GOTO 9999
  563. ENDIF
  564. C
  565. MP = NP
  566. SEGINI RR , RUX , RUY , RRET ,
  567. & UXR , UXUX , UXUY , UXRET ,
  568. & UYR , UYUX , UYUY , UYRET ,
  569. & RETR , RETUX , RETUY , RETRET
  570. C
  571. C**** Duale = IMATRI.LISDUA(1) = 'RN'
  572. C Primale = IMATRI.LISPRI(1) = 'RN'
  573. C -> IMATRI.LIZAFM(1,1) = RR
  574. C
  575. C Duale = IMATRI.LISDUA(2) = 'RN'
  576. C Primale = IMATRI.LISPRI(2) = 'RUXN'
  577. C -> IMATRI.LIZAFM(1,2) = RUX
  578. C ...
  579. C
  580. C NB Pour le moment on y stoke le jacobien du flux
  581. C par rapport aux variables primitives (R,UX,UY,P)
  582. C
  583. IMATRI.LIZAFM(ISOUS,1) = RR
  584. IMATRI.LIZAFM(ISOUS,2) = RUX
  585. IMATRI.LIZAFM(ISOUS,3) = RUY
  586. IMATRI.LIZAFM(ISOUS,4) = RRET
  587. IMATRI.LIZAFM(ISOUS,5) = UXR
  588. IMATRI.LIZAFM(ISOUS,6) = UXUX
  589. IMATRI.LIZAFM(ISOUS,7) = UXUY
  590. IMATRI.LIZAFM(ISOUS,8) = UXRET
  591. IMATRI.LIZAFM(ISOUS,9) = UYR
  592. IMATRI.LIZAFM(ISOUS,10) = UYUX
  593. IMATRI.LIZAFM(ISOUS,11) = UYUY
  594. IMATRI.LIZAFM(ISOUS,12) = UYRET
  595. IMATRI.LIZAFM(ISOUS,13) = RETR
  596. IMATRI.LIZAFM(ISOUS,14) = RETUX
  597. IMATRI.LIZAFM(ISOUS,15) = RETUY
  598. IMATRI.LIZAFM(ISOUS,16) = RETRET
  599. C
  600. C******* Boucle sur les elts de MLEPRI.LECT
  601. C
  602.  
  603. DO IELPRI=1,NBEL,1
  604. IELEM=IELEM+1
  605. NGC=IPT1.NUM(NP,IELPRI)
  606. NLC=MLENTC.LECT(NGC)
  607. IF(NLC.NE.IELEM)THEN
  608. WRITE(IOIMP,*) 'NLC != IELEM'
  609. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  610. CALL ERREUR(5)
  611. GOTO 9999
  612. ENDIF
  613. VOLG = MPVOLU.VPOCHA(NLC,1)
  614. C
  615. C************* Pour la contribution des gradients
  616. C 1) les limiteurs
  617. C
  618. ALR = MPGLRN.VPOCHA(NLC,1)
  619. ALP = MPGLPN.VPOCHA(NLC,1)
  620. ALVX = MPGLVN.VPOCHA(NLC,1)
  621. ALVY = MPGLVN.VPOCHA(NLC,2)
  622. ICOOR= (NGC - 1) * 3
  623. XCG = MCOORD.XCOOR(ICOOR + 1)
  624. YCG = MCOORD.XCOOR(ICOOR + 2)
  625. C
  626. C******** Boucle sur le noeuds de MLESPG.LECT
  627. C
  628. DO IFAC=1,(NP - 1),1
  629. NGCF = MELEME.NUM(IFAC,IELPRI)
  630. ICOOR= (NGCF - 1) * 3
  631. DXCF = MCOORD.XCOOR(ICOOR + 1) - XCG
  632. DYCF = MCOORD.XCOOR(ICOOR + 2) - YCG
  633. NLCF = MLENTF.LECT(NGCF)
  634. NGCF1 = MELEFE.NUM(2,NLCF)
  635. IF(NGCF .NE. NGCF1)THEN
  636. WRITE(IOIMP,*)
  637. $ 'FACE ET FACEL = ???'
  638. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  639. CALL ERREUR(5)
  640. GOTO 9999
  641. ENDIF
  642. NGCG = MELEFE.NUM(1,NLCF)
  643. NGCD = MELEFE.NUM(3,NLCF)
  644. SURF = MPOVSU.VPOCHA(NLCF,1)
  645. NLFL = MLELIM.LECT(NGCF)
  646. IF(NLFL .NE. 0)THEN
  647. C
  648. C************* The point belongs on BC -> No contribution to jacobian!
  649. C
  650. DFRO(1)=0.0D0
  651. DFRO(2)=0.0D0
  652. DFRO(3)=0.0D0
  653. DFRO(4)=0.0D0
  654. DFRUN(1)=0.0D0
  655. DFRUN(2)=0.0D0
  656. DFRUN(3)=0.0D0
  657. DFRUN(4)=0.0D0
  658. DFRUT(1)=0.0D0
  659. DFRUT(2)=0.0D0
  660. DFRUT(3)=0.0D0
  661. DFRUT(4)=0.0D0
  662. DFRET(1)=0.0D0
  663. DFRET(2)=0.0D0
  664. DFRET(3)=0.0D0
  665. DFRET(4)=0.0D0
  666. C
  667. C************* On est sur G, sur D, ou sur un mur?
  668. C
  669. ELSEIF(NGCG .EQ. NGCD)THEN
  670. C
  671. C***************** Murs
  672. C Aucune contribution à l'elt droite!
  673. C
  674. CNX = MELVNX.VELCHE(1,NLCF)
  675. CNY = MELVNY.VELCHE(1,NLCF)
  676. CTX = MELT1X.VELCHE(1,NLCF)
  677. CTY = MELT1Y.VELCHE(1,NLCF)
  678. ROG = MELRO.VELCHE(1,NLCF)
  679. UNG = MELVUN.VELCHE(1,NLCF)
  680. UTG = MELVUT.VELCHE(1,NLCF)
  681. UXG = UNG * CNX + UTG * CTX
  682. UYG = UNG * CNY + UTG * CTY
  683. PG = MELP.VELCHE(1,NLCF)
  684. GAMG = MELGAM.VELCHE(1,NLCF)
  685. C
  686. C**************** Jacobien par rapport aux variables primitives sur
  687. C la face
  688. C
  689. IF(IIMPL .EQ. 4)THEN
  690. C
  691. C******************* VLH
  692. C
  693. CALL VLHJ3(ROG,UXG,UYG,PG,GAMG,CNX,CNY,DFRUN)
  694. C
  695. ELSEIF(IIMPL .EQ. 5)THEN
  696. C
  697. C******************* AUSM+
  698. C
  699. ROD=ROG
  700. PD=PG
  701. UND=-1.0D0*UNG
  702. UTD=UTG
  703. UXD = UND * CNX + UTD * CTX
  704. UYD = UND * CNY + UTD * CTY
  705. CALL AUSMW(ROG,UXG,UYG,PG,ROD,UXD,UYD,PD,
  706. & GAMG,CNX,CNY,DFRUN)
  707. ELSE
  708. CALL ERREUR(5)
  709. ENDIF
  710. DFRO(1)=0.0D0
  711. DFRO(2)=0.0D0
  712. DFRO(3)=0.0D0
  713. DFRO(4)=0.0D0
  714. DFRUT(1)=0.0D0
  715. DFRUT(2)=0.0D0
  716. DFRUT(3)=0.0D0
  717. DFRUT(4)=0.0D0
  718. DFRET(1)=0.0D0
  719. DFRET(2)=0.0D0
  720. DFRET(3)=0.0D0
  721. DFRET(4)=0.0D0
  722. C
  723. ELSEIF(NGC .EQ. NGCG)THEN
  724. C
  725. C************* On est sur G
  726. C
  727. CNX = MELVNX.VELCHE(1,NLCF)
  728. CNY = MELVNY.VELCHE(1,NLCF)
  729. CTX = MELT1X.VELCHE(1,NLCF)
  730. CTY = MELT1Y.VELCHE(1,NLCF)
  731. C
  732. ROG = MELRO.VELCHE(1,NLCF)
  733. UNG = MELVUN.VELCHE(1,NLCF)
  734. UTG = MELVUT.VELCHE(1,NLCF)
  735. UXG = UNG * CNX + UTG * CTX
  736. UYG = UNG * CNY + UTG * CTY
  737. PG = MELP.VELCHE(1,NLCF)
  738. GAMG = MELGAM.VELCHE(1,NLCF)
  739. ECIN=0.5D0*ROG*(UNG*UNG+UTG*UTG)
  740. RETG=PG/(GAMG-1.0D0)+ECIN
  741. C
  742. ROD = MELRO.VELCHE(3,NLCF)
  743. UND = MELVUN.VELCHE(3,NLCF)
  744. UTD = MELVUT.VELCHE(3,NLCF)
  745. UXD = UND * CNX + UTD * CTX
  746. UYD = UND * CNY + UTD * CTY
  747. PD = MELP.VELCHE(3,NLCF)
  748. C
  749. NLCD=MLENTC.LECT(NGCD)
  750. VOLD=MPVOLU.VPOCHA(NLCD,1)
  751. IF(IIMPL .EQ. 4)THEN
  752. C
  753. C******************* VLH
  754. C
  755. CALL VLHJ1(ROG,UXG,UYG,PG,RETG,GAMG,CNX,CNY,CTX,CTY
  756. $ ,DFRO,DFRUN,DFRUT,DFRET)
  757. ELSEIF(IIMPL .EQ. 5)THEN
  758. C
  759. C******************* AUSM+
  760. C
  761. CALL AUSMF(ROG,UXG,UYG,PG,ROD,UXD,UYD,PD,
  762. & GAMG,CNX,CNY,CTX,CTY,
  763. & DFRO,DFRUN,DFRUT,DFRET)
  764. ELSE
  765. CALL ERREUR(5)
  766. ENDIF
  767. ELSEIF(NGC .EQ. NGCD)THEN
  768. CNX = -1.0D0 * MELVNX.VELCHE(1,NLCF)
  769. CNY = -1.0D0 * MELVNY.VELCHE(1,NLCF)
  770. CTX = -1.0D0 * MELT1X.VELCHE(1,NLCF)
  771. CTY = -1.0D0 * MELT1Y.VELCHE(1,NLCF)
  772. C
  773. ROG = MELRO.VELCHE(3,NLCF)
  774. UNG = MELVUN.VELCHE(3,NLCF)
  775. UTG = MELVUT.VELCHE(3,NLCF)
  776. UXG = -1.0D0 * (UNG * CNX + UTG * CTX)
  777. UYG = -1.0D0 * (UNG * CNY + UTG * CTY)
  778. PG = MELP.VELCHE(3,NLCF)
  779. GAMG = MELGAM.VELCHE(3,NLCF)
  780. ECIN=0.5D0*ROG*(UNG*UNG+UTG*UTG)
  781. RETG=PG/(GAMG-1.0D0)+ECIN
  782. C
  783. ROD = MELRO.VELCHE(1,NLCF)
  784. UND = MELVUN.VELCHE(1,NLCF)
  785. UTD = MELVUT.VELCHE(1,NLCF)
  786. UXD = -1.0D0 * (UND * CNX + UTD * CTX)
  787. UYD = -1.0D0 * (UND * CNY + UTD * CTY)
  788. PD = MELP.VELCHE(1,NLCF)
  789. C
  790. NLCD=MLENTC.LECT(NGCG)
  791. VOLD=MPVOLU.VPOCHA(NLCD,1)
  792. IF(IIMPL .EQ. 4)THEN
  793. C
  794. C******************* VLH
  795. C
  796. CALL VLHJ1(ROG,UXG,UYG,PG,RETG,GAMG,CNX,CNY,CTX,CTY
  797. $ ,DFRO,DFRUN,DFRUT,DFRET)
  798. ELSEIF(IIMPL .EQ. 5)THEN
  799. C
  800. C******************* AUSM+
  801. C
  802. CALL AUSMF(ROG,UXG,UYG,PG,ROD,UXD,UYD,PD,
  803. & GAMG,CNX,CNY,CTX,CTY,
  804. & DFRO,DFRUN,DFRUT,DFRET)
  805. ELSE
  806. CALL ERREUR(5)
  807. ENDIF
  808. ELSE
  809. WRITE(IOIMP,*) 'FACEL = ???'
  810. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  811. CALL ERREUR(5)
  812. GOTO 9999
  813. ENDIF
  814. C
  815. DO I1=1,4
  816. DFRUX(I1)=DFRUN(I1)*CNX+DFRUT(I1)*CTX
  817. DFRUY(I1)=DFRUN(I1)*CNY+DFRUT(I1)*CTY
  818. ENDDO
  819. C
  820. NGNO=MELGRR.NUM(IFAC,IELPRI)
  821. NGN1=MELGRP.NUM(IFAC,IELPRI)
  822. NGN2=MELGRV.NUM(IFAC,IELPRI)
  823. C
  824. IF((NGN1 .NE. NGNO) .OR. (NGN2 .NE. NGNO))THEN
  825. WRITE(IOIMP,*) 'SPG COEFF GRAD =???'
  826. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  827. CALL ERREUR(5)
  828. GOTO 9999
  829. ENDIF
  830. C
  831. NLNO=MLENTC.LECT(NGNO)
  832. IF(NLNO .EQ. 0)THEN
  833. C
  834. C**************** MURS
  835. C
  836. IPT1.NUM(IFAC,IELPRI)=NGC
  837.  
  838. C Primal variable in IPT1.NUM(IFAC,IELPRI)=IPT1.NUM(NP,IELPRI)
  839. C Dual variable in IPT1.NUM(NP,IELPRI)
  840. C
  841. FUNCEL = -1.0D0 * SURF / VOLG
  842. UXR.AM(IELPRI,IFAC,NP)=UXR.AM(IELPRI,IFAC,NP)
  843. & +DFRUX(1)*FUNCEL
  844. UYR.AM(IELPRI,IFAC,NP)=UYR.AM(IELPRI,IFAC,NP)
  845. & +DFRUY(1)*FUNCEL
  846. UXUX.AM(IELPRI,IFAC,NP)=UXUX.AM(IELPRI,IFAC,NP)
  847. & +DFRUX(2)*FUNCEL
  848. UYUX.AM(IELPRI,IFAC,NP)=UYUX.AM(IELPRI,IFAC,NP)
  849. & +DFRUY(2)*FUNCEL
  850. UXUY.AM(IELPRI,IFAC,NP)=UXUY.AM(IELPRI,IFAC,NP)
  851. & +DFRUX(3)*FUNCEL
  852. UYUY.AM(IELPRI,IFAC,NP)=UYUY.AM(IELPRI,IFAC,NP)
  853. & +DFRUY(3)*FUNCEL
  854. UXRET.AM(IELPRI,IFAC,NP)=UXRET.AM(IELPRI,IFAC,NP)
  855. & +DFRUX(4)*FUNCEL
  856. UYRET.AM(IELPRI,IFAC,NP)=UYRET.AM(IELPRI,IFAC,NP)
  857. & +DFRUY(4)*FUNCEL
  858.  
  859. ELSE
  860. C
  861. C Primal variable in IPT1.NUM(NP,IELPRI)
  862. C Dual variable in IPT1.NUM(NP,IELPRI)
  863. C
  864. FUNCEL=DFRO(1)*SURF
  865. RR.AM(IELPRI,NP,NP)=RR.AM(IELPRI,NP,NP)-
  866. & FUNCEL/VOLG
  867. C
  868. C Primal variable in NP
  869. C Dual variable in IFAC
  870. C
  871. RR.AM(IELPRI,NP,IFAC)=RR.AM(IELPRI,NP,IFAC)+FUNCEL
  872. $ /VOLD
  873. C
  874. FUNCEL=DFRO(2)*SURF
  875. RUX.AM(IELPRI,NP,NP)=RUX.AM(IELPRI,NP,NP) -
  876. & FUNCEL/VOLG
  877. RUX.AM(IELPRI,NP,IFAC)=RUX.AM(IELPRI,NP,IFAC)+ FUNCEL
  878. $ /VOLD
  879. C
  880. FUNCEL=DFRO(3)*SURF
  881. RUY.AM(IELPRI,NP,NP)=RUY.AM(IELPRI,NP,NP) -
  882. & FUNCEL/VOLG
  883. RUY.AM(IELPRI,NP,IFAC)=RUY.AM(IELPRI,NP,IFAC)+ FUNCEL
  884. $ /VOLD
  885. C
  886. FUNCEL=DFRO(4)*SURF
  887. RRET.AM(IELPRI,NP,NP)=RRET.AM(IELPRI,NP,NP) -
  888. & FUNCEL/VOLG
  889. RRET.AM(IELPRI,NP,IFAC)= RRET.AM(IELPRI,NP,IFAC)
  890. $ +FUNCEL/VOLD
  891. C
  892. C
  893. FUNCEL=DFRUX(1)*SURF
  894. UXR.AM(IELPRI,NP,NP)=UXR.AM(IELPRI,NP,NP) -
  895. & FUNCEL/VOLG
  896. UXR.AM(IELPRI,NP,IFAC)=UXR.AM(IELPRI,NP,IFAC)+FUNCEL
  897. $ /VOLD
  898. C
  899. FUNCEL=DFRUX(2)*SURF
  900. UXUX.AM(IELPRI,NP,NP)=UXUX.AM(IELPRI,NP,NP) -
  901. & FUNCEL/VOLG
  902. UXUX.AM(IELPRI,NP,IFAC)=UXUX.AM(IELPRI,NP,IFAC)+
  903. $ FUNCEL/VOLD
  904. C
  905. FUNCEL=DFRUX(3)*SURF
  906. UXUY.AM(IELPRI,NP,NP)=UXUY.AM(IELPRI,NP,NP) -
  907. & FUNCEL/VOLG
  908. UXUY.AM(IELPRI,NP,IFAC)=UXUY.AM(IELPRI,NP,IFAC)+
  909. $ FUNCEL/VOLD
  910. C
  911. FUNCEL=DFRUX(4)*SURF
  912. UXRET.AM(IELPRI,NP,NP)=UXRET.AM(IELPRI,NP,NP) -
  913. & FUNCEL/VOLG
  914. UXRET.AM(IELPRI,NP,IFAC)=UXRET.AM(IELPRI,NP,IFAC)+
  915. $ FUNCEL/VOLD
  916. C
  917. C
  918. FUNCEL=DFRUY(1)*SURF
  919. UYR.AM(IELPRI,NP,NP)=UYR.AM(IELPRI,NP,NP) -
  920. & FUNCEL/VOLG
  921. UYR.AM(IELPRI,NP,IFAC)=UYR.AM(IELPRI,NP,IFAC)+FUNCEL
  922. $ /VOLD
  923. C
  924. FUNCEL=DFRUY(2)*SURF
  925. UYUX.AM(IELPRI,NP,NP)=UYUX.AM(IELPRI,NP,NP) -
  926. & FUNCEL/VOLG
  927. UYUX.AM(IELPRI,NP,IFAC)=UYUX.AM(IELPRI,NP,IFAC)+
  928. $ FUNCEL/VOLD
  929. C
  930. FUNCEL=DFRUY(3)*SURF
  931. UYUY.AM(IELPRI,NP,NP)=UYUY.AM(IELPRI,NP,NP) -
  932. & FUNCEL/VOLG
  933. UYUY.AM(IELPRI,NP,IFAC)=UYUY.AM(IELPRI,NP,IFAC)+
  934. $ FUNCEL/VOLD
  935. C
  936. FUNCEL=DFRUY(4)*SURF
  937. UYRET.AM(IELPRI,NP,NP)=UYRET.AM(IELPRI,NP,NP) -
  938. & FUNCEL/VOLG
  939. UYRET.AM(IELPRI,NP,IFAC)=UYRET.AM(IELPRI,NP,IFAC)+
  940. $ FUNCEL/VOLD
  941. C
  942. C
  943. FUNCEL=DFRET(1)*SURF
  944. RETR.AM(IELPRI,NP,NP)=RETR.AM(IELPRI,NP,NP) -
  945. & FUNCEL/VOLG
  946. RETR.AM(IELPRI,NP,IFAC)=RETR.AM(IELPRI,NP,IFAC)+FUNCEL
  947. $ /VOLD
  948. C
  949. FUNCEL=DFRET(2)*SURF
  950. RETUX.AM(IELPRI,NP,NP)=RETUX.AM(IELPRI,NP,NP) -
  951. & FUNCEL/VOLG
  952. RETUX.AM(IELPRI,NP,IFAC)=RETUX.AM(IELPRI,NP,IFAC)+
  953. $ FUNCEL/VOLD
  954. C
  955. FUNCEL=DFRET(3)*SURF
  956. RETUY.AM(IELPRI,NP,NP)=RETUY.AM(IELPRI,NP,NP) -
  957. & FUNCEL/VOLG
  958. RETUY.AM(IELPRI,NP,IFAC)=RETUY.AM(IELPRI,NP,IFAC)+
  959. $ FUNCEL/VOLD
  960. C
  961. FUNCEL=DFRET(4)*SURF
  962. RETRET.AM(IELPRI,NP,NP)=RETRET.AM(IELPRI,NP,NP) -
  963. & FUNCEL/VOLG
  964. RETRET.AM(IELPRI,NP,IFAC)=RETRET.AM(IELPRI,NP,IFAC)+
  965. $ FUNCEL/VOLD
  966. ENDIF
  967. C
  968. C************* Gradients computed with EULESCAL or EULEVECT
  969. C Computation of gradients contributions
  970.  
  971. DO IFAC2 = 1, (NP-1), 1
  972. C
  973. C**************** On controlle que les melemes de ELTFA et
  974. C le SPG du grad ont le meme ordre
  975. C
  976. NGFGR=MELEME.NUM(IFAC2,IELPRI)
  977. NLFGR=MLENTF.LECT(NGFGR)
  978. NG=MELEFE.NUM(1,NLFGR)
  979. ND=MELEFE.NUM(3,NLFGR)
  980. C
  981. IF(NG .EQ. ND)THEN
  982. C
  983. C******************* On est sur un mur: EULESCAL
  984. C
  985. DO IFACGR = 1, (NP -1) , 1
  986. C
  987. C********************** Boucle sur les elts de MELGRR pour trouver la position
  988. C correspondante
  989. C
  990. NGGRA=MELGRR.NUM(IFACGR,IELPRI)
  991. IF(NGFGR .EQ. NGGRA) GOTO 10
  992. ENDDO
  993. WRITE(IOIMP,*) 'ELTFA et SPG grad= ???'
  994. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  995. CALL ERREUR(5)
  996. GOTO 9999
  997. 10 CONTINUE
  998. C
  999. C******************* Les coeff qui nous interesse sont donc dans la
  1000. C position IFACGR du gradient
  1001. C
  1002. CELLR = ALR * (DXCF * MELCR1.VELCHE(IFACGR,IELPRI)
  1003. $ +DYCF * MELCR2.VELCHE(IFACGR,IELPRI))
  1004. CELLP = ALP * (DXCF * MELCP1.VELCHE(IFACGR,IELPRI)
  1005. $ + DYCF * MELCP2.VELCHE(IFACGR,IELPRI))
  1006. C
  1007. C******************* La vitesse est un peux plus difficile
  1008. C (HP EULEVECT ou vitesse imposé)
  1009. C
  1010. C CViVj contribution de vj sur le grad de vi
  1011. C
  1012. NLVIMP = MLEVL.LECT(NGGRA)
  1013. IF(NLVIMP .NE.0)THEN
  1014. C
  1015. C*********************** NGGRA spg de conditions limites -> no
  1016. C contribution
  1017. C
  1018. CVXVX=0.0D0
  1019. CVXVY=0.0D0
  1020. CVYVX=0.0D0
  1021. CVYVY=0.0D0
  1022. ELSE
  1023. CNX1=MPNORM.VPOCHA(NLFGR,1)
  1024. CNY1=MPNORM.VPOCHA(NLFGR,2)
  1025. CTX1=-1.0D0*CNY1
  1026. CTY1=CNX1
  1027. FUNCEL=(DXCF * MELCV1.VELCHE(IFACGR,IELPRI)+DYCF
  1028. $ * MELCV2.VELCHE(IFACGR,IELPRI))
  1029. CVXVX=FUNCEL*(CTX1*CTX1-CNX1*CNX1)*ALVX
  1030. CVXVY=FUNCEL*(CTX1*CTY1-CNX1*CNY1)*ALVX
  1031. CVYVX=FUNCEL*(CTX1*CTY1-CNX1*CNY1)*ALVY
  1032. CVYVY=FUNCEL*(CTY1*CTY1-CNY1*CNY1)*ALVY
  1033. ENDIF
  1034. C
  1035. ELSE
  1036. DO IFACGR = 1, (NP -1) , 1
  1037. C
  1038. C********************** Boucle sur les elts de MELGRR pour trouver la position
  1039. C correspondante
  1040. C
  1041. NGGRA=MELGRR.NUM(IFACGR,IELPRI)
  1042. IF((NGGRA .EQ. NG) .OR. (NGGRA .EQ. ND)) GOTO 20
  1043. ENDDO
  1044. WRITE(IOIMP,*) 'ELTFA et SPG grad= ???'
  1045. WRITE(IOIMP,*) 'SUBROUTINE konja5.eso'
  1046. CALL ERREUR(5)
  1047. GOTO 9999
  1048. 20 CONTINUE
  1049. CELLR = ALR * (DXCF * MELCR1.VELCHE(IFACGR,IELPRI)
  1050. $ +DYCF * MELCR2.VELCHE(IFACGR,IELPRI))
  1051. CELLP = ALP * (DXCF * MELCP1.VELCHE(IFACGR,IELPRI)
  1052. $ + DYCF * MELCP2.VELCHE(IFACGR,IELPRI))
  1053. CVXVX = ALVX * (DXCF * MELCV1.VELCHE(IFACGR,IELPRI)
  1054. $ + DYCF * MELCV2.VELCHE(IFACGR,IELPRI))
  1055. CVXVY=0.0D0
  1056. CVYVY = ALVY * (DXCF * MELCV1.VELCHE(IFACGR,IELPRI)
  1057. $ + DYCF * MELCV2.VELCHE(IFACGR,IELPRI))
  1058. CVYVX = 0.0D0
  1059.  
  1060. ENDIF
  1061. C
  1062. C**************** Dans le cas d'un mur (NLN0=0) , IFACGR = primale qui donne
  1063. C contribution en IELPRI,IFACGR,IFAC OU (IELPRI,IFACGR,NP)
  1064. C
  1065. C Dans le cas non mur (NLN0=0) , IFACGR = primale qui donne
  1066. C contribution en IELPRI,IFACGR,NP et en IELPRI,IFAC,NP
  1067. C
  1068. IF(NLNO .EQ. 0)THEN
  1069. C
  1070. C**************** MURS
  1071. C
  1072. FUNCEL = -1.0D0 * SURF / VOLG * CELLR
  1073. UXR.AM(IELPRI,IFACGR,NP)=UXR.AM(IELPRI,IFACGR,NP)
  1074. & +DFRUX(1)*FUNCEL
  1075. UYR.AM(IELPRI,IFACGR,NP)=UYR.AM(IELPRI,IFACGR,NP)
  1076. & +DFRUY(1)*FUNCEL
  1077. C
  1078. FUNCEL = -1.0D0 * SURF / VOLG
  1079. UXUX.AM(IELPRI,IFACGR,NP)=UXUX.AM(IELPRI,IFACGR,NP)
  1080. & +FUNCEL * (DFRUX(2)*CVXVX + DFRUX(3) *CVYVX)
  1081. UYUX.AM(IELPRI,IFACGR,NP)=UYUX.AM(IELPRI,IFACGR,NP)
  1082. & +FUNCEL * (DFRUY(2)*CVXVX + DFRUY(3) *CVYVX)
  1083. C
  1084. FUNCEL = -1.0D0 * SURF / VOLG
  1085. UXUY.AM(IELPRI,IFACGR,NP)=UXUY.AM(IELPRI,IFACGR,NP)
  1086. & +FUNCEL * (DFRUX(3)*CVYVY + DFRUX(2) *CVXVY)
  1087. UYUY.AM(IELPRI,IFACGR,NP)=UYUY.AM(IELPRI,IFACGR,NP)
  1088. & +FUNCEL * (DFRUY(3)*CVYVY + DFRUY(2) *CVXVY)
  1089.  
  1090. C
  1091. FUNCEL = -1.0D0 * SURF / VOLG * CELLP
  1092. UXRET.AM(IELPRI,IFACGR,NP)=UXRET.AM(IELPRI,IFACGR
  1093. $ ,NP)+DFRUX(4)*FUNCEL
  1094. UYRET.AM(IELPRI,IFACGR,NP)=UYRET.AM(IELPRI,IFACGR
  1095. $ ,NP)+DFRUY(4)*FUNCEL
  1096. ELSE
  1097. C
  1098. C******************* dR/
  1099. C
  1100. FUNCEL=DFRO(1)*SURF*CELLR
  1101. RR.AM(IELPRI,IFACGR,NP)=RR.AM(IELPRI,IFACGR,NP)-
  1102. & FUNCEL/VOLG
  1103. RR.AM(IELPRI,IFACGR,IFAC)=RR.AM(IELPRI,IFACGR,IFAC)
  1104. $ +FUNCEL/VOLD
  1105. C
  1106. FUNCEL=DFRO(4)*SURF*CELLP
  1107. RRET.AM(IELPRI,IFACGR,NP)=RRET.AM(IELPRI,IFACGR,NP)
  1108. $ -FUNCEL/VOLG
  1109. RRET.AM(IELPRI,IFACGR,IFAC)=RRET.AM(IELPRI,IFACGR
  1110. $ ,IFAC)+FUNCEL/VOLD
  1111. C
  1112. FUNCEL=SURF * (DFRO(2)*CVXVX + DFRO(3) *CVYVX)
  1113. RUX.AM(IELPRI,IFACGR,NP)=RUX.AM(IELPRI,IFACGR,NP)
  1114. & - FUNCEL / VOLG
  1115. RUX.AM(IELPRI,IFACGR,IFAC)=RUX.AM(IELPRI,IFACGR
  1116. $ ,IFAC) + FUNCEL / VOLD
  1117. C
  1118. FUNCEL=SURF * (DFRO(3)*CVYVY + DFRO(2) *CVXVY)
  1119. RUY.AM(IELPRI,IFACGR,NP)=RUY.AM(IELPRI,IFACGR,NP)
  1120. & - FUNCEL / VOLG
  1121. RUY.AM(IELPRI,IFACGR,IFAC)=RUY.AM(IELPRI,IFACGR
  1122. $ ,IFAC) + FUNCEL / VOLD
  1123. C
  1124. C******************* dUX/
  1125. C
  1126. FUNCEL=DFRUX(1)*SURF*CELLR
  1127. UXR.AM(IELPRI,IFACGR,NP)=UXR.AM(IELPRI,IFACGR,NP) -
  1128. & FUNCEL/VOLG
  1129. UXR.AM(IELPRI,IFACGR,IFAC)= UXR.AM(IELPRI,IFACGR
  1130. $ ,IFAC)+FUNCEL/VOLD
  1131. C
  1132. FUNCEL=DFRUX(4)*SURF*CELLP
  1133. UXRET.AM(IELPRI,IFACGR,NP)=UXRET.AM(IELPRI,IFACGR
  1134. $ ,NP) -FUNCEL/VOLG
  1135. UXRET.AM(IELPRI,IFACGR,IFAC)= UXRET.AM(IELPRI
  1136. $ ,IFACGR,IFAC)+FUNCEL/VOLD
  1137. C
  1138. FUNCEL=SURF * (DFRUX(2)*CVXVX + DFRUX(3) *CVYVX)
  1139. UXUX.AM(IELPRI,IFACGR,NP)=UXUX.AM(IELPRI,IFACGR,NP)
  1140. & - FUNCEL / VOLG
  1141. UXUX.AM(IELPRI,IFACGR,IFAC)=UXUX.AM(IELPRI,IFACGR
  1142. $ ,IFAC) + FUNCEL / VOLD
  1143. C
  1144. FUNCEL=SURF * (DFRUX(3)*CVYVY + DFRUX(2) *CVXVY)
  1145. UXUY.AM(IELPRI,IFACGR,NP)=UXUY.AM(IELPRI,IFACGR,NP)
  1146. & - FUNCEL / VOLG
  1147. UXUY.AM(IELPRI,IFACGR,IFAC)=UXUY.AM(IELPRI,IFACGR
  1148. $ ,IFAC) + FUNCEL / VOLD
  1149. C
  1150. C******************* dUY/
  1151. C
  1152. FUNCEL=DFRUY(1)*SURF*CELLR
  1153. UYR.AM(IELPRI,IFACGR,NP)=UYR.AM(IELPRI,IFACGR,NP) -
  1154. & FUNCEL/VOLG
  1155. UYR.AM(IELPRI,IFACGR,IFAC)=UYR.AM(IELPRI,IFACGR
  1156. $ ,IFAC) + FUNCEL/VOLD
  1157. C
  1158. FUNCEL=DFRUY(4)*SURF*CELLP
  1159. UYRET.AM(IELPRI,IFACGR,NP)=UYRET.AM(IELPRI,IFACGR
  1160. $ ,NP) -FUNCEL/VOLG
  1161. UYRET.AM(IELPRI,IFACGR,IFAC)=UYRET.AM(IELPRI,IFACGR
  1162. $ ,IFAC) + FUNCEL/VOLD
  1163. C
  1164. FUNCEL=SURF * (DFRUY(2)*CVXVX + DFRUY(3) *CVYVX)
  1165. UYUX.AM(IELPRI,IFACGR,NP)=UYUX.AM(IELPRI,IFACGR,NP)
  1166. & - FUNCEL / VOLG
  1167. UYUX.AM(IELPRI,IFACGR,IFAC)=UYUX.AM(IELPRI,IFACGR
  1168. $ ,IFAC) + FUNCEL / VOLD
  1169. C
  1170. FUNCEL=SURF * (DFRUY(3)*CVYVY + DFRUY(2) *CVXVY)
  1171. UYUY.AM(IELPRI,IFACGR,NP)=UYUY.AM(IELPRI,IFACGR,NP)
  1172. & - FUNCEL / VOLG
  1173. UYUY.AM(IELPRI,IFACGR,IFAC)=UYUY.AM(IELPRI,IFACGR
  1174. $ ,IFAC) + FUNCEL / VOLD
  1175. C
  1176. C******************* dRET/
  1177. C
  1178. FUNCEL=DFRET(1)*SURF*CELLR
  1179. RETR.AM(IELPRI,IFACGR,NP)=RETR.AM(IELPRI,IFACGR,NP)
  1180. $ -FUNCEL/VOLG
  1181. RETR.AM(IELPRI,IFACGR,IFAC)=RETR.AM(IELPRI,IFACGR
  1182. $ ,IFAC)+FUNCEL/VOLD
  1183. C
  1184. FUNCEL=DFRET(4)*SURF*CELLP
  1185. RETRET.AM(IELPRI,IFACGR,NP)=RETRET.AM(IELPRI,IFACGR
  1186. $ ,NP)-FUNCEL/VOLG
  1187. RETRET.AM(IELPRI,IFACGR,IFAC)=RETRET.AM(IELPRI
  1188. $ ,IFACGR,IFAC)+FUNCEL/VOLD
  1189. C
  1190. FUNCEL=SURF * (DFRET(2)*CVXVX + DFRET(3) *CVYVX)
  1191. RETUX.AM(IELPRI,IFACGR,NP)=RETUX.AM(IELPRI,IFACGR
  1192. $ ,NP)- FUNCEL / VOLG
  1193. RETUX.AM(IELPRI,IFACGR,IFAC)=RETUX.AM(IELPRI,IFACGR
  1194. $ ,IFAC) + FUNCEL / VOLD
  1195. C
  1196. FUNCEL=SURF * (DFRET(3)*CVYVY + DFRET(2) *CVXVY)
  1197. RETUY.AM(IELPRI,IFACGR,NP)=RETUY.AM(IELPRI,IFACGR
  1198. $ ,NP)- FUNCEL / VOLG
  1199. RETUY.AM(IELPRI,IFACGR,IFAC)=RETUY.AM(IELPRI,IFACGR
  1200. $ ,IFAC) + FUNCEL / VOLD
  1201. C
  1202. ENDIF
  1203. ENDDO
  1204. ENDDO
  1205. ENDDO
  1206. C
  1207. C
  1208. C******* Transformation:
  1209. C jacobien par rapport aux variables primitives ->
  1210. C jacobien par rapport aux variables conservatives
  1211. C Optimisation du programme:
  1212. C on pourrais faire ça avant
  1213. C
  1214. NBEL=RR.AM(/1)
  1215. NP=RR.AM(/2)
  1216. MP=RR.AM(/3)
  1217. C
  1218. C******* Boucle sur les variables primales
  1219. C
  1220. DO IELETR=1,NBEL,1
  1221. DO IPRITR=1,NP,1
  1222. NGPRI=IPT1.NUM(IPRITR,IELETR)
  1223. NLPRI=MLENTC.LECT(NGPRI)
  1224. ROG=MPOVRN.VPOCHA(NLPRI,1)
  1225. PG=MPOVPN.VPOCHA(NLPRI,1)
  1226. GAMG=MPOGAM.VPOCHA(NLPRI,1)
  1227. UXG=MPOVVN.VPOCHA(NLPRI,1)
  1228. UYG=MPOVVN.VPOCHA(NLPRI,2)
  1229. GAMGM1=GAMG-1.0D0
  1230. CELCO1=UXG/ROG
  1231. CELCO2=UYG/ROG
  1232. CELCO3=0.5D0*GAMGM1*(UXG*UXG+UYG*UYG)
  1233. CELCO4=GAMGM1*UXG
  1234. CELCO5=GAMGM1*UYG
  1235. DO IDUATR=1,MP,1
  1236. DDRO=RR.AM(IELETR,IPRITR,IDUATR)
  1237. DDUX=RUX.AM(IELETR,IPRITR,IDUATR)
  1238. DDUY=RUY.AM(IELETR,IPRITR,IDUATR)
  1239. DDP=RRET.AM(IELETR,IPRITR,IDUATR)
  1240. RR.AM(IELETR,IPRITR,IDUATR)=DDRO-(CELCO1*DDUX)
  1241. & -(CELCO2*DDUY)+(CELCO3*DDP)
  1242. RUX.AM(IELETR,IPRITR,IDUATR)=DDUX/ROG -
  1243. & CELCO4*DDP
  1244. RUY.AM(IELETR,IPRITR,IDUATR)=DDUY/ROG -
  1245. & CELCO5*DDP
  1246. RRET.AM(IELETR,IPRITR,IDUATR)=GAMGM1*DDP
  1247. C
  1248. DDRO=UXR.AM(IELETR,IPRITR,IDUATR)
  1249. DDUX=UXUX.AM(IELETR,IPRITR,IDUATR)
  1250. DDUY=UXUY.AM(IELETR,IPRITR,IDUATR)
  1251. DDP=UXRET.AM(IELETR,IPRITR,IDUATR)
  1252. UXR.AM(IELETR,IPRITR,IDUATR)=DDRO-(CELCO1*DDUX)
  1253. & -(CELCO2*DDUY)+(CELCO3*DDP)
  1254. UXUX.AM(IELETR,IPRITR,IDUATR)=DDUX/ROG -
  1255. & CELCO4*DDP
  1256. UXUY.AM(IELETR,IPRITR,IDUATR)=DDUY/ROG -
  1257. & CELCO5*DDP
  1258. UXRET.AM(IELETR,IPRITR,IDUATR)=GAMGM1*DDP
  1259. C
  1260. DDRO=UYR.AM(IELETR,IPRITR,IDUATR)
  1261. DDUX=UYUX.AM(IELETR,IPRITR,IDUATR)
  1262. DDUY=UYUY.AM(IELETR,IPRITR,IDUATR)
  1263. DDP=UYRET.AM(IELETR,IPRITR,IDUATR)
  1264. UYR.AM(IELETR,IPRITR,IDUATR)=DDRO-(CELCO1*DDUX)
  1265. & -(CELCO2*DDUY)+(CELCO3*DDP)
  1266. UYUX.AM(IELETR,IPRITR,IDUATR)=DDUX/ROG -
  1267. & CELCO4*DDP
  1268. UYUY.AM(IELETR,IPRITR,IDUATR)=DDUY/ROG -
  1269. & CELCO5*DDP
  1270. UYRET.AM(IELETR,IPRITR,IDUATR)=GAMGM1*DDP
  1271. C
  1272. DDRO=RETR.AM(IELETR,IPRITR,IDUATR)
  1273. DDUX=RETUX.AM(IELETR,IPRITR,IDUATR)
  1274. DDUY=RETUY.AM(IELETR,IPRITR,IDUATR)
  1275. DDP=RETRET.AM(IELETR,IPRITR,IDUATR)
  1276. RETR.AM(IELETR,IPRITR,IDUATR)=DDRO-(CELCO1*DDUX)
  1277. & -(CELCO2*DDUY)+(CELCO3*DDP)
  1278. RETUX.AM(IELETR,IPRITR,IDUATR)=DDUX/ROG -
  1279. & CELCO4*DDP
  1280. RETUY.AM(IELETR,IPRITR,IDUATR)=DDUY/ROG -
  1281. & CELCO5*DDP
  1282. RETRET.AM(IELETR,IPRITR,IDUATR)=GAMGM1*DDP
  1283. ENDDO
  1284. ENDDO
  1285. ENDDO
  1286. C
  1287. MELEME = MLESPG.LECT(ISOUS)
  1288. SEGDES MELEME
  1289. MELEME = MLEPRI.LECT(ISOUS)
  1290. SEGDES MELEME
  1291. MELEME = MLEGRR.LECT(ISOUS)
  1292. SEGDES MELEME
  1293. MELEME = MLEGRP.LECT(ISOUS)
  1294. SEGDES MELEME
  1295. MELEME = MLEGRV.LECT(ISOUS)
  1296. SEGDES MELEME
  1297. C
  1298. SEGDES RR , RUX , RUY , RRET ,
  1299. & UXR , UXUX , UXUY , UXRET ,
  1300. & UYR , UYUX , UYUY , UYRET ,
  1301. & RETR , RETUX , RETUY , RETRET
  1302. SEGDES MELCR1, MELCR2
  1303. SEGDES MELCP1, MELCP2
  1304. SEGDES MELCV1, MELCV2
  1305. ENDDO
  1306. C
  1307. C
  1308. C**** Les MELVALs
  1309. C
  1310. SEGDES MELRO
  1311. SEGDES MELP
  1312. SEGDES MELGAM
  1313. SEGDES MELVUN
  1314. SEGDES MELVUT
  1315. SEGDES MELVNX
  1316. SEGDES MELVNY
  1317. SEGDES MELT1X
  1318. SEGDES MELT1Y
  1319. C
  1320. C**** Les MPOVALs
  1321. C
  1322. C
  1323. SEGDES MPOVRN
  1324. SEGDES MPOVVN
  1325. SEGDES MPOVPN
  1326. SEGDES MPOGAM
  1327. SEGDES MPVGRN
  1328. SEGDES MPGLRN
  1329. SEGDES MPVGPN
  1330. SEGDES MPGLPN
  1331. SEGDES MPVGPN
  1332. SEGDES MPGLPN
  1333. IF(MPVLIM .NE. 0) SEGDES MPVLIM
  1334. C
  1335. C**** Les MELEMEs, les MLENTIs, les volumes, les surfaces
  1336. C
  1337. SEGDES MELEMC
  1338. SEGSUP MLENTC
  1339. SEGSUP MLENTF
  1340. SEGSUP MLEVL
  1341. SEGDES MELEFE
  1342. SEGDES MPVOLU
  1343. SEGDES MPNORM
  1344. SEGDES MPOVSU
  1345. SEGDES MELPRI
  1346. SEGSUP MLEPRI
  1347. SEGSUP MLEGRR
  1348. SEGSUP MLEGRP
  1349. SEGSUP MLEGRV
  1350.  
  1351. C
  1352. C**** Coeff GRAD
  1353. C
  1354. MCHEL1=ICRN
  1355. SEGDES MCHEL1
  1356. MCHEL1=ICPN
  1357. SEGDES MCHEL1
  1358. MCHEL1=ICVN
  1359. SEGDES MCHEL1
  1360. C
  1361. SEGSUP MLESPG
  1362. SEGDES MELTFA
  1363. C
  1364. C**** MATRIK, liste des inconnues
  1365. C
  1366. SEGDES MATRIK
  1367. SEGDES IMATRI
  1368. SEGDES MLMINC
  1369.  
  1370. C
  1371. C
  1372. SEGDES RR , RUX , RUY , RRET ,
  1373. & UXR , UXUX , UXUY , UXRET ,
  1374. & UYR , UYUX , UYUY , UYRET ,
  1375. & RETR , RETUX , RETUY , RETRET
  1376.  
  1377. SEGSUP MLENTC
  1378. SEGSUP MLENTF
  1379. SEGDES MLMINC
  1380. SEGDES MLELIM
  1381.  
  1382. 9999 CONTINUE
  1383. RETURN
  1384. END
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  

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