Télécharger konmsp.eso

Retour à la liste

Numérotation des lignes :

  1. C KONMSP SOURCE PV 16/11/17 22:00:12 9180
  2. SUBROUTINE KONMSP(NSP,ILIINC,IRN,IUN,IPN,IYN,MLRECP,
  3. & MLRECV,INORM,ICHPVO,ICHPSU,MELEMC,MELEFE,MELLIM,IMAT)
  4. C
  5. C************************************************************************
  6. C
  7. C PROJET : CASTEM 2000
  8. C
  9. C NOM : KONMSP ("convection for multispecies")
  10. C
  11. C DESCRIPTION : Voir KON19 (appele par KON19)
  12. C Calcul du jacobien du résidu pour la méthode
  13. C AUSMplus
  14. C
  15. C Cas deux dimensions, gaz "calorically perfect"
  16. C MULTISPECIES!!!!!!!!
  17. C
  18. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  19. C
  20. C AUTEUR : S. KUDRIAKOV, DM2S/SFME/LTMF
  21. C
  22. C************************************************************************
  23. C
  24. C
  25. C APPELES (Outils
  26. C CASTEM) : KRIPAD, LICHT, ERREUR
  27. C
  28. C APPELES (Calcul) : CONMSP, CWMSP
  29. C
  30. C************************************************************************
  31. C
  32. C ENTREES
  33. C
  34. C NSP : number of species (total) ;
  35. C
  36. C ILINC : liste des inconnues (pointeur d'un objet de type LISTMOTS)
  37. C
  38. C 1) Pointeurs des CHPOINT
  39. C
  40. C IRN : CHPOINT CENTRE contenant la masse volumique ;
  41. C
  42. C IUN : CHPOINT CENTRE contenant la vitesse ;
  43. C
  44. C IPN : CHPOINT CENTRE contenant la pression ;
  45. C
  46. C IYN : CHPOINT CENTRE contenant les fractions massiques ;
  47. C
  48. C INORM : CHPOINT FACE contenant les normales aux faces ;
  49. C
  50. C ICHPOVO : CHPOINT VOLUME contenant le volume
  51. C
  52. C ICHPOSU : CHPOINT FACE contenant la surface des faces
  53. C
  54. C
  55. C 2) Pointeurs des LIST REELS
  56. C
  57. C MLRECP : LIST REELS contenant les CP's des gases differents ;
  58. C
  59. C MLRECV : LIST REELS contenant les CV's des gases differents ;
  60. C
  61. C 3) Pointeurs de MELEME de la table DOMAINE
  62. C
  63. C MELEMC : MELEME 'CENTRE' du SPG des CENTRES
  64. C
  65. C MELEFE : MELEME 'FACEL' du connectivité Faces -> Elts
  66. C
  67. C MELLIM : MELEME SPG des conditions aux bords
  68. C N.B.: Sur le bord on ne calcule rien!
  69. C
  70. C SORTIES
  71. C
  72. C IMAT : pointeur de la MATRIK du jacobien du residu
  73. C
  74. C************************************************************************
  75. C
  76. C HISTORIQUE (Anomalies et modifications éventuelles)
  77. C
  78. C HISTORIQUE :
  79. C
  80. C************************************************************************
  81. C
  82. C
  83. C N.B.: On suppose qu'on a déjà controllé RO, P > 0
  84. C GAMMA \in (1,3)
  85. C Si non il faut le faire!!!
  86. C
  87. C************************************************************************
  88. C
  89. IMPLICIT INTEGER(I-N)
  90. IMPLICIT REAL*8(A-H,O-Z)
  91.  
  92. INTEGER NSP,II,JJ,KV,I,J,JLL,JRR
  93. INTEGER ILIINC, IRN,IUN,IPN,IYN,INORM,ICHPVO,ICHPSU
  94. & , IMAT, IGEOMC, IGEOMF
  95. & , NFAC, NBSOUS, NBREF, NBELEM, NBNN, NRIGE, NMATRI, NKID
  96. & , NKMT, NBME, NBEL, MP, NP
  97. & , IFAC, NGCF, NLCF, NGCG, NGCD, NLCG, NLCD, NLFL
  98. REAL*8 ROG, PG, UXG, UYG, VOLG
  99. & , ROD, PD, UXD, UYD, VOLD
  100. & , SURF, FUNCEL
  101. REAL*8 WVEC_L(4), WVEC_R(4), NVECT(2), TVECT(2)
  102. REAL*8 ZC1, ZC2, ZC3, ZC4
  103. CHARACTER*8 TYPE
  104. C
  105. C**** LES INCLUDES
  106. C
  107. -INC CCOPTIO
  108. -INC SMCHPOI
  109. -INC SMELEME
  110. -INC SMLMOTS
  111. -INC SMLENTI
  112. POINTEUR MPRN.MPOVAL, MPUN.MPOVAL, MPPN.MPOVAL, MPYN.MPOVAL,
  113. & MPNORM.MPOVAL, MPVOLU.MPOVAL, MPOVSU.MPOVAL
  114. POINTEUR MELEMC.MELEME, MELEMF.MELEME, MELEFE.MELEME,
  115. & MELEDU.MELEME, MELLIM.MELEME
  116. POINTEUR MLENTC.MLENTI, MLENTF.MLENTI, MLELIM.MLENTI
  117. POINTEUR CELL.IZAFM
  118. POINTEUR MLMINC.MLMOTS
  119. C----------------------------------------------------
  120. -INC SMLREEL
  121. POINTEUR MLRECP.MLREEL, MLRECV.MLREEL
  122. C-------------------------------------------------------
  123. C********* Les Jacobians ******************************
  124. C-------------------------------------------------------
  125. SEGMENT JACEL
  126. REAL*8 JAC(3+NSP,3+NSP)
  127. ENDSEGMENT
  128. POINTEUR JTL.JACEL, JTR.JACEL, JTT.JACEL
  129. C--------------------------------------------------------
  130. C KRIPAD pour la correspondance global/local des centres
  131. C--------------------------------------------------------
  132. CALL KRIPAD(MELLIM,MLELIM)
  133. CALL KRIPAD(MELEMC,MLENTC)
  134. C------------------
  135. SEGACT MELEMC
  136. C------------------
  137. SEGACT MELEFE
  138. C------------------
  139. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  140. CALL LICHT(INORM,MPNORM,TYPE,IGEOMF)
  141. CALL LICHT(ICHPVO,MPVOLU,TYPE,IGEOMC)
  142. C----------------------------------------------
  143. MELEMF = IGEOMF
  144. CALL KRIPAD(MELEMF,MLENTF)
  145. SEGACT MELEMF
  146. C-----------------------------------------------
  147. CALL LICHT(IRN,MPRN,TYPE,IGEOMC)
  148. CALL LICHT(IPN,MPPN,TYPE,IGEOMC)
  149. CALL LICHT(IUN,MPUN,TYPE,IGEOMC)
  150. CALL LICHT(IYN,MPYN,TYPE,IGEOMC)
  151. C-----------------------------------------------
  152. NFAC = MELEFE.NUM(/2)
  153. C-----------------------------------------------
  154. C**** Maillage des inconnues primales
  155. C-----------------------------------------------
  156. NBSOUS = 0
  157. NBREF = 0
  158. NBELEM = NFAC
  159. NBNN = 2
  160. C-----------------------------------------------
  161. SEGINI MELEDU
  162. C----------------------
  163. C** MELEDU = 'SEG2' **
  164. C----------------------
  165. MELEDU.ITYPEL = 2
  166. C--------------
  167. NRIGE = 7
  168. NMATRI = 1
  169. NKID = 9
  170. NKMT = 7
  171. C--------------
  172. SEGINI MATRIK
  173. IMAT = MATRIK
  174. MATRIK.IRIGEL(1,1) = MELEDU
  175. MATRIK.IRIGEL(2,1) = MELEDU
  176. C-------------------------
  177. C Matrice non symetrique
  178. C-------------------------
  179. MATRIK.IRIGEL(7,1) = 2
  180. C-------------------------
  181. NBME = (3+NSP)*(3+NSP)
  182. NBSOUS = 1
  183. SEGINI IMATRI
  184. MLMINC = ILIINC
  185. SEGACT MLMINC
  186. MATRIK.IRIGEL(4,1) = IMATRI
  187. C-----------------------------------------------
  188. DO 1 J=1,(NSP+3)
  189. KV=(J-1)*(3+NSP)
  190. IMATRI.LISPRI(KV+1) = MLMINC.MOTS(1)
  191. IMATRI.LISPRI(KV+2) = MLMINC.MOTS(2)
  192. IMATRI.LISPRI(KV+3) = MLMINC.MOTS(3)
  193. IMATRI.LISPRI(KV+4) = MLMINC.MOTS(4)
  194. DO 2 I=1,(NSP-1)
  195. IMATRI.LISPRI(KV+4+I) = MLMINC.MOTS(4+I)
  196. 2 CONTINUE
  197. 1 CONTINUE
  198. C-----------------------------------------------
  199. DO 3 J=1,(NSP+3)
  200. KV=(J-1)*(3+NSP)
  201. IMATRI.LISDUA(KV+1) = MLMINC.MOTS(j)
  202. IMATRI.LISDUA(KV+2) = MLMINC.MOTS(j)
  203. IMATRI.LISDUA(KV+3) = MLMINC.MOTS(j)
  204. IMATRI.LISDUA(KV+4) = MLMINC.MOTS(j)
  205. DO 4 I=1,(NSP-1)
  206. IMATRI.LISDUA(KV+4+I) = MLMINC.MOTS(j)
  207. 4 CONTINUE
  208. 3 CONTINUE
  209. C-----------------------------------------------
  210. C-----------------------------------------------
  211. NBEL = NBELEM
  212. NBSOUS = 1
  213. NP = 2
  214. MP = 2
  215. C-----------------------------------------------------------
  216. C-----------------------------------------------------------
  217. DO 5 I=1,NBME
  218. SEGINI CELL
  219. IMATRI.LIZAFM(1,I) = CELL
  220. 5 CONTINUE
  221. C---------------------------------
  222. C---------------------------------
  223. DO IFAC = 1, NFAC, 1
  224. NGCF = MELEFE.NUM(2,IFAC)
  225. NLCF = MLENTF.LECT(NGCF)
  226. IF(NLCF .NE. IFAC)THEN
  227. WRITE(IOIMP,*) 'Il ne faut pas jouer avec la table domaine'
  228. CALL ERREUR(5)
  229. GOTO 9999
  230. ENDIF
  231. NLFL = MLELIM.LECT(NGCF)
  232. NGCG = MELEFE.NUM(1,IFAC)
  233. NGCD = MELEFE.NUM(3,IFAC)
  234. IF(NLFL .NE. 0)THEN
  235. C---------------------------------------------------------
  236. C The point belongs to BC -> No contribution to jacobian!
  237. C---------------------------------------------------------
  238. MELEDU.NUM(1,IFAC) = NGCG
  239. MELEDU.NUM(2,IFAC) = NGCD
  240. ELSEIF(NGCG .NE. NGCD)THEN
  241. C-----------------------------------
  242. C********** Les MELEMEs
  243. C-----------------------------------
  244. MELEDU.NUM(1,IFAC) = NGCG
  245. MELEDU.NUM(2,IFAC) = NGCD
  246. C-----------------------------------
  247. C********** Les etats G et D
  248. C-----------------------------------
  249. NLCG = MLENTC.LECT(NGCG)
  250. NLCD = MLENTC.LECT(NGCD)
  251. C-----------------
  252. ROG = MPRN.VPOCHA(NLCG,1)
  253. PG = MPPN.VPOCHA(NLCG,1)
  254. UXG = MPUN.VPOCHA(NLCG,1)
  255. UYG = MPUN.VPOCHA(NLCG,2)
  256. VOLG = MPVOLU.VPOCHA(NLCG,1)
  257. C-------------------------------------------------
  258. WVEC_L(1)=ROG
  259. WVEC_L(2)=UXG
  260. WVEC_L(3)=UYG
  261. WVEC_L(4)=PG
  262. C-------------------------------------------------
  263. ROD = MPRN.VPOCHA(NLCD,1)
  264. PD = MPPN.VPOCHA(NLCD,1)
  265. UXD = MPUN.VPOCHA(NLCD,1)
  266. UYD = MPUN.VPOCHA(NLCD,2)
  267. VOLD = MPVOLU.VPOCHA(NLCD,1)
  268. C------------------------------------------------
  269. WVEC_R(1)=ROD
  270. WVEC_R(2)=UXD
  271. WVEC_R(3)=UYD
  272. WVEC_R(4)=PD
  273. C------------------------------------------------
  274. C La normale G->D
  275. C La tangente
  276. C------------------------------------------------
  277. SURF = MPOVSU.VPOCHA(NLCF,1)
  278. NVECT(1) = MPNORM.VPOCHA(NLCF,1)
  279. NVECT(2) = MPNORM.VPOCHA(NLCF,2)
  280. TVECT(1) = -1.0D0 * NVECT(2)
  281. TVECT(2) = NVECT(1)
  282. C-------------------------------------------------
  283. CALL CONMSP(NSP,JLL,JRR,WVEC_L,WVEC_R,NVECT,TVECT,
  284. & MPYN,MLRECP,MLRECV,NLCG,NLCD)
  285. C-----------------------------------------------------
  286. C********** AB.AM(IFAC,IPRIM,IDUAL)
  287. C A = nom de l'inconnu duale (Ro,rUX,rUY,RET)
  288. C B = nom de l'inconnu primale (Ro,rUX,rUY,RET)
  289. C IPRIM = 1, 2 -> G, D
  290. C IDUAL = 1, 2 -> G, D
  291. C i.e.
  292. C A_IDUAL = AB.AM(IFAC,IPRIM,IDUAL) * B_IPRIM + ...
  293. C
  294. C
  295. C********** Dual RN
  296. C----------------------------------------------------
  297. JTL=JLL
  298. JTR=JRR
  299. SEGACT JTL
  300. SEGACT JTR
  301. DO 10 II = 1,(3+NSP)
  302. DO 15 JJ = 1,(3+NSP)
  303. KV = (II-1)*(3+NSP)
  304. C----------------------------------
  305. CELL = IMATRI.LIZAFM(1,KV+JJ)
  306. FUNCEL = SURF * JTL.JAC(II,JJ)
  307. CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  308. CELL.AM(IFAC,1,2) = FUNCEL / VOLD
  309. 15 CONTINUE
  310. 10 CONTINUE
  311. C-----------------------------------------------------
  312. DO 20 II = 1,(3+NSP)
  313. DO 25 JJ = 1,(3+NSP)
  314. KV = (II-1)*(3+NSP)
  315. CELL = IMATRI.LIZAFM(1,KV+JJ)
  316. FUNCEL = SURF * JTR.JAC(II,JJ)
  317. CELL.AM(IFAC,2,2) = FUNCEL / VOLD
  318. CELL.AM(IFAC,2,1) = -FUNCEL / VOLG
  319. 25 CONTINUE
  320. 20 CONTINUE
  321. SEGDES JTR
  322. SEGDES JTL
  323. C-----------------------------------------------------
  324. ELSE
  325. C-----------------------------------------------------
  326. C************* Murs (NGCG = NGCD) ******************
  327. C-----------------------------------------------------
  328. MELEDU.NUM(1,IFAC) = NGCG
  329. MELEDU.NUM(2,IFAC) = NGCD
  330. NLCG = MLENTC.LECT(NGCG)
  331. C--------------------------------------
  332. ROG = MPRN.VPOCHA(NLCG,1)
  333. PG = MPPN.VPOCHA(NLCG,1)
  334. UXG = MPUN.VPOCHA(NLCG,1)
  335. UYG = MPUN.VPOCHA(NLCG,2)
  336. VOLG = MPVOLU.VPOCHA(NLCG,1)
  337. C-------------------------------------------
  338. WVEC_L(1)=ROG
  339. WVEC_L(2)=UXG
  340. WVEC_L(3)=UYG
  341. WVEC_L(4)=PG
  342. C-------------------------------------------------
  343. SURF = MPOVSU.VPOCHA(NLCF,1)
  344. NVECT(1) = MPNORM.VPOCHA(NLCF,1)
  345. NVECT(2) = MPNORM.VPOCHA(NLCF,2)
  346. TVECT(1) =-NVECT(2)
  347. TVECT(2) = NVECT(1)
  348. C------- COEFFICIENTS ----------------------------
  349. ZC1=NVECT(1)*TVECT(2)+TVECT(1)*NVECT(2)
  350. ZC2=NVECT(1)*TVECT(2)-TVECT(1)*NVECT(2)
  351. ZC3=2.0D0*NVECT(1)*TVECT(1)
  352. ZC4=2.0D0*NVECT(2)*TVECT(2)
  353. C-------------------------------------------------
  354. ROD = ROG
  355. PD = PG
  356. UXD = -ZC1*UXG/ZC2-ZC4*UYG/ZC2
  357. UYD = ZC3*UXG/ZC2+ZC1*UYG/ZC2
  358. VOLD = VOLG
  359. C------------------------------------------------
  360. WVEC_R(1)=ROD
  361. WVEC_R(2)=UXD
  362. WVEC_R(3)=UYD
  363. WVEC_R(4)=PD
  364. C-------------------------------------------
  365. C********** La normale sortante
  366. C-------------------------------------------
  367. CALL CWMSP(NSP,JLL,WVEC_L,WVEC_R,NVECT,
  368. & TVECT,MPYN,MLRECP,MLRECV,NLCG)
  369. C----------------------------------------------------
  370. JTL=JLL
  371. SEGACT JTL
  372. DO 70 II = 1,(3+NSP)
  373. DO 75 JJ = 1,(3+NSP)
  374. KV = (II-1)*(3+NSP)
  375. C---------------------------------
  376. CELL = IMATRI.LIZAFM(1,KV+JJ)
  377. FUNCEL = SURF * JTL.JAC(II,JJ)
  378. CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  379. CELL.AM(IFAC,1,2) = 0.0D0
  380. 75 CONTINUE
  381. 70 CONTINUE
  382. SEGDES JTL
  383. C--------------------------------------------
  384. DO 40 II = 1,(3+NSP)
  385. DO 45 JJ = 1,(3+NSP)
  386. KV = (II-1)*(3+NSP)
  387. CELL = IMATRI.LIZAFM(1,KV+JJ)
  388. CELL.AM(IFAC,2,2) = 0.0D0
  389. CELL.AM(IFAC,2,1) = 0.0D0
  390. 45 CONTINUE
  391. 40 CONTINUE
  392. C--------------------------------------------
  393. ENDIF
  394. ENDDO
  395. C
  396. SEGDES MELEMC
  397. SEGDES MELEFE
  398. SEGDES MELEMF
  399. C
  400. SEGDES MPOVSU
  401. SEGDES MPVOLU
  402. SEGDES MPNORM
  403. C
  404. SEGDES MPRN
  405. SEGDES MPPN
  406. SEGDES MPUN
  407. SEGDES MPYN
  408. C
  409. SEGDES MELEDU
  410. SEGDES MATRIK
  411. DO 80 II=1,NBME
  412. CELL = IMATRI.LIZAFM(1,II)
  413. SEGDES CELL
  414. 80 CONTINUE
  415. SEGDES IMATRI
  416. C
  417. SEGSUP MLENTC
  418. SEGSUP MLENTF
  419. SEGSUP MLELIM
  420. SEGDES MLMINC
  421. IF(MELLIM .NE.0) SEGDES MELLIM
  422.  
  423. 9999 CONTINUE
  424. RETURN
  425. END
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  

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