Télécharger konja5.eso

Retour à la liste

Numérotation des lignes :

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

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