Télécharger konmsp.eso

Retour à la liste

Numérotation des lignes :

konmsp
  1. C KONMSP SOURCE CB215821 20/11/25 13:32:35 10792
  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.  
  108. -INC PPARAM
  109. -INC CCOPTIO
  110. -INC SMCHPOI
  111. -INC SMELEME
  112. -INC SMLMOTS
  113. -INC SMLENTI
  114. POINTEUR MPRN.MPOVAL, MPUN.MPOVAL, MPPN.MPOVAL, MPYN.MPOVAL,
  115. & MPNORM.MPOVAL, MPVOLU.MPOVAL, MPOVSU.MPOVAL
  116. POINTEUR MELEMC.MELEME, MELEMF.MELEME, MELEFE.MELEME,
  117. & MELEDU.MELEME, MELLIM.MELEME
  118. POINTEUR MLENTC.MLENTI, MLENTF.MLENTI, MLELIM.MLENTI
  119. POINTEUR CELL.IZAFM
  120. POINTEUR MLMINC.MLMOTS
  121. C----------------------------------------------------
  122. -INC SMLREEL
  123. POINTEUR MLRECP.MLREEL, MLRECV.MLREEL
  124. C-------------------------------------------------------
  125. C********* Les Jacobians ******************************
  126. C-------------------------------------------------------
  127. SEGMENT JACEL
  128. REAL*8 JAC(3+NSP,3+NSP)
  129. ENDSEGMENT
  130. POINTEUR JTL.JACEL, JTR.JACEL, JTT.JACEL
  131. C--------------------------------------------------------
  132. C KRIPAD pour la correspondance global/local des centres
  133. C--------------------------------------------------------
  134. CALL KRIPAD(MELLIM,MLELIM)
  135. CALL KRIPAD(MELEMC,MLENTC)
  136. C------------------
  137. SEGACT MELEMC
  138. C------------------
  139. SEGACT MELEFE
  140. C------------------
  141. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  142. CALL LICHT(INORM,MPNORM,TYPE,IGEOMF)
  143. CALL LICHT(ICHPVO,MPVOLU,TYPE,IGEOMC)
  144. C----------------------------------------------
  145. MELEMF = IGEOMF
  146. CALL KRIPAD(MELEMF,MLENTF)
  147. SEGACT MELEMF
  148. C-----------------------------------------------
  149. CALL LICHT(IRN,MPRN,TYPE,IGEOMC)
  150. CALL LICHT(IPN,MPPN,TYPE,IGEOMC)
  151. CALL LICHT(IUN,MPUN,TYPE,IGEOMC)
  152. CALL LICHT(IYN,MPYN,TYPE,IGEOMC)
  153. C-----------------------------------------------
  154. NFAC = MELEFE.NUM(/2)
  155. C-----------------------------------------------
  156. C**** Maillage des inconnues primales
  157. C-----------------------------------------------
  158. NBSOUS = 0
  159. NBREF = 0
  160. NBELEM = NFAC
  161. NBNN = 2
  162. C-----------------------------------------------
  163. SEGINI MELEDU
  164. C----------------------
  165. C** MELEDU = 'SEG2' **
  166. C----------------------
  167. MELEDU.ITYPEL = 2
  168. C--------------
  169. NRIGE = 7
  170. NMATRI = 1
  171. NKID = 9
  172. NKMT = 7
  173. C--------------
  174. SEGINI MATRIK
  175. IMAT = MATRIK
  176. MATRIK.IRIGEL(1,1) = MELEDU
  177. MATRIK.IRIGEL(2,1) = MELEDU
  178. C-------------------------
  179. C Matrice non symetrique
  180. C-------------------------
  181. MATRIK.IRIGEL(7,1) = 2
  182. C-------------------------
  183. NBME = (3+NSP)*(3+NSP)
  184. NBSOUS = 1
  185. SEGINI IMATRI
  186. MLMINC = ILIINC
  187. SEGACT MLMINC
  188. MATRIK.IRIGEL(4,1) = IMATRI
  189. C-----------------------------------------------
  190. DO 1 J=1,(NSP+3)
  191. KV=(J-1)*(3+NSP)
  192. IMATRI.LISPRI(KV+1) = MLMINC.MOTS(1)
  193. IMATRI.LISPRI(KV+2) = MLMINC.MOTS(2)
  194. IMATRI.LISPRI(KV+3) = MLMINC.MOTS(3)
  195. IMATRI.LISPRI(KV+4) = MLMINC.MOTS(4)
  196. DO 2 I=1,(NSP-1)
  197. IMATRI.LISPRI(KV+4+I) = MLMINC.MOTS(4+I)
  198. 2 CONTINUE
  199. 1 CONTINUE
  200. C-----------------------------------------------
  201. DO 3 J=1,(NSP+3)
  202. KV=(J-1)*(3+NSP)
  203. IMATRI.LISDUA(KV+1) = MLMINC.MOTS(j)
  204. IMATRI.LISDUA(KV+2) = MLMINC.MOTS(j)
  205. IMATRI.LISDUA(KV+3) = MLMINC.MOTS(j)
  206. IMATRI.LISDUA(KV+4) = MLMINC.MOTS(j)
  207. DO 4 I=1,(NSP-1)
  208. IMATRI.LISDUA(KV+4+I) = MLMINC.MOTS(j)
  209. 4 CONTINUE
  210. 3 CONTINUE
  211. C-----------------------------------------------
  212. C-----------------------------------------------
  213. NBEL = NBELEM
  214. NBSOUS = 1
  215. NP = 2
  216. MP = 2
  217. C-----------------------------------------------------------
  218. C-----------------------------------------------------------
  219. DO 5 I=1,NBME
  220. SEGINI CELL
  221. IMATRI.LIZAFM(1,I) = CELL
  222. 5 CONTINUE
  223. C---------------------------------
  224. C---------------------------------
  225. DO IFAC = 1, NFAC, 1
  226. NGCF = MELEFE.NUM(2,IFAC)
  227. NLCF = MLENTF.LECT(NGCF)
  228. IF(NLCF .NE. IFAC)THEN
  229. WRITE(IOIMP,*) 'Il ne faut pas jouer avec la table domaine'
  230. CALL ERREUR(5)
  231. GOTO 9999
  232. ENDIF
  233. NLFL = MLELIM.LECT(NGCF)
  234. NGCG = MELEFE.NUM(1,IFAC)
  235. NGCD = MELEFE.NUM(3,IFAC)
  236. IF(NLFL .NE. 0)THEN
  237. C---------------------------------------------------------
  238. C The point belongs to BC -> No contribution to jacobian!
  239. C---------------------------------------------------------
  240. MELEDU.NUM(1,IFAC) = NGCG
  241. MELEDU.NUM(2,IFAC) = NGCD
  242. ELSEIF(NGCG .NE. NGCD)THEN
  243. C-----------------------------------
  244. C********** Les MELEMEs
  245. C-----------------------------------
  246. MELEDU.NUM(1,IFAC) = NGCG
  247. MELEDU.NUM(2,IFAC) = NGCD
  248. C-----------------------------------
  249. C********** Les etats G et D
  250. C-----------------------------------
  251. NLCG = MLENTC.LECT(NGCG)
  252. NLCD = MLENTC.LECT(NGCD)
  253. C-----------------
  254. ROG = MPRN.VPOCHA(NLCG,1)
  255. PG = MPPN.VPOCHA(NLCG,1)
  256. UXG = MPUN.VPOCHA(NLCG,1)
  257. UYG = MPUN.VPOCHA(NLCG,2)
  258. VOLG = MPVOLU.VPOCHA(NLCG,1)
  259. C-------------------------------------------------
  260. WVEC_L(1)=ROG
  261. WVEC_L(2)=UXG
  262. WVEC_L(3)=UYG
  263. WVEC_L(4)=PG
  264. C-------------------------------------------------
  265. ROD = MPRN.VPOCHA(NLCD,1)
  266. PD = MPPN.VPOCHA(NLCD,1)
  267. UXD = MPUN.VPOCHA(NLCD,1)
  268. UYD = MPUN.VPOCHA(NLCD,2)
  269. VOLD = MPVOLU.VPOCHA(NLCD,1)
  270. C------------------------------------------------
  271. WVEC_R(1)=ROD
  272. WVEC_R(2)=UXD
  273. WVEC_R(3)=UYD
  274. WVEC_R(4)=PD
  275. C------------------------------------------------
  276. C La normale G->D
  277. C La tangente
  278. C------------------------------------------------
  279. SURF = MPOVSU.VPOCHA(NLCF,1)
  280. NVECT(1) = MPNORM.VPOCHA(NLCF,1)
  281. NVECT(2) = MPNORM.VPOCHA(NLCF,2)
  282. TVECT(1) = -1.0D0 * NVECT(2)
  283. TVECT(2) = NVECT(1)
  284. C-------------------------------------------------
  285. CALL CONMSP(NSP,JLL,JRR,WVEC_L,WVEC_R,NVECT,TVECT,
  286. & MPYN,MLRECP,MLRECV,NLCG,NLCD)
  287. C-----------------------------------------------------
  288. C********** AB.AM(IFAC,IPRIM,IDUAL)
  289. C A = nom de l'inconnu duale (Ro,rUX,rUY,RET)
  290. C B = nom de l'inconnu primale (Ro,rUX,rUY,RET)
  291. C IPRIM = 1, 2 -> G, D
  292. C IDUAL = 1, 2 -> G, D
  293. C i.e.
  294. C A_IDUAL = AB.AM(IFAC,IPRIM,IDUAL) * B_IPRIM + ...
  295. C
  296. C
  297. C********** Dual RN
  298. C----------------------------------------------------
  299. JTL=JLL
  300. JTR=JRR
  301. SEGACT JTL
  302. SEGACT JTR
  303. DO 10 II = 1,(3+NSP)
  304. DO 15 JJ = 1,(3+NSP)
  305. KV = (II-1)*(3+NSP)
  306. C----------------------------------
  307. CELL = IMATRI.LIZAFM(1,KV+JJ)
  308. FUNCEL = SURF * JTL.JAC(II,JJ)
  309. CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  310. CELL.AM(IFAC,1,2) = FUNCEL / VOLD
  311. 15 CONTINUE
  312. 10 CONTINUE
  313. C-----------------------------------------------------
  314. DO 20 II = 1,(3+NSP)
  315. DO 25 JJ = 1,(3+NSP)
  316. KV = (II-1)*(3+NSP)
  317. CELL = IMATRI.LIZAFM(1,KV+JJ)
  318. FUNCEL = SURF * JTR.JAC(II,JJ)
  319. CELL.AM(IFAC,2,2) = FUNCEL / VOLD
  320. CELL.AM(IFAC,2,1) = -FUNCEL / VOLG
  321. 25 CONTINUE
  322. 20 CONTINUE
  323. SEGDES JTR
  324. SEGDES JTL
  325. C-----------------------------------------------------
  326. ELSE
  327. C-----------------------------------------------------
  328. C************* Murs (NGCG = NGCD) ******************
  329. C-----------------------------------------------------
  330. MELEDU.NUM(1,IFAC) = NGCG
  331. MELEDU.NUM(2,IFAC) = NGCD
  332. NLCG = MLENTC.LECT(NGCG)
  333. C--------------------------------------
  334. ROG = MPRN.VPOCHA(NLCG,1)
  335. PG = MPPN.VPOCHA(NLCG,1)
  336. UXG = MPUN.VPOCHA(NLCG,1)
  337. UYG = MPUN.VPOCHA(NLCG,2)
  338. VOLG = MPVOLU.VPOCHA(NLCG,1)
  339. C-------------------------------------------
  340. WVEC_L(1)=ROG
  341. WVEC_L(2)=UXG
  342. WVEC_L(3)=UYG
  343. WVEC_L(4)=PG
  344. C-------------------------------------------------
  345. SURF = MPOVSU.VPOCHA(NLCF,1)
  346. NVECT(1) = MPNORM.VPOCHA(NLCF,1)
  347. NVECT(2) = MPNORM.VPOCHA(NLCF,2)
  348. TVECT(1) =-NVECT(2)
  349. TVECT(2) = NVECT(1)
  350. C------- COEFFICIENTS ----------------------------
  351. ZC1=NVECT(1)*TVECT(2)+TVECT(1)*NVECT(2)
  352. ZC2=NVECT(1)*TVECT(2)-TVECT(1)*NVECT(2)
  353. ZC3=2.0D0*NVECT(1)*TVECT(1)
  354. ZC4=2.0D0*NVECT(2)*TVECT(2)
  355. C-------------------------------------------------
  356. ROD = ROG
  357. PD = PG
  358. UXD = -ZC1*UXG/ZC2-ZC4*UYG/ZC2
  359. UYD = ZC3*UXG/ZC2+ZC1*UYG/ZC2
  360. VOLD = VOLG
  361. C------------------------------------------------
  362. WVEC_R(1)=ROD
  363. WVEC_R(2)=UXD
  364. WVEC_R(3)=UYD
  365. WVEC_R(4)=PD
  366. C-------------------------------------------
  367. C********** La normale sortante
  368. C-------------------------------------------
  369. CALL CWMSP(NSP,JLL,WVEC_L,WVEC_R,NVECT,
  370. & TVECT,MPYN,MLRECP,MLRECV,NLCG)
  371. C----------------------------------------------------
  372. JTL=JLL
  373. SEGACT JTL
  374. DO 70 II = 1,(3+NSP)
  375. DO 75 JJ = 1,(3+NSP)
  376. KV = (II-1)*(3+NSP)
  377. C---------------------------------
  378. CELL = IMATRI.LIZAFM(1,KV+JJ)
  379. FUNCEL = SURF * JTL.JAC(II,JJ)
  380. CELL.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  381. CELL.AM(IFAC,1,2) = 0.0D0
  382. 75 CONTINUE
  383. 70 CONTINUE
  384. SEGDES JTL
  385. C--------------------------------------------
  386. DO 40 II = 1,(3+NSP)
  387. DO 45 JJ = 1,(3+NSP)
  388. KV = (II-1)*(3+NSP)
  389. CELL = IMATRI.LIZAFM(1,KV+JJ)
  390. CELL.AM(IFAC,2,2) = 0.0D0
  391. CELL.AM(IFAC,2,1) = 0.0D0
  392. 45 CONTINUE
  393. 40 CONTINUE
  394. C--------------------------------------------
  395. ENDIF
  396. ENDDO
  397. C
  398. SEGDES MELEMC
  399. SEGDES MELEFE
  400. SEGDES MELEMF
  401. C
  402. SEGDES MPOVSU
  403. SEGDES MPVOLU
  404. SEGDES MPNORM
  405. C
  406. SEGDES MPRN
  407. SEGDES MPPN
  408. SEGDES MPUN
  409. SEGDES MPYN
  410. C
  411. SEGDES MELEDU
  412. SEGDES MATRIK
  413. DO 80 II=1,NBME
  414. CELL = IMATRI.LIZAFM(1,II)
  415. SEGDES CELL
  416. 80 CONTINUE
  417. SEGDES IMATRI
  418. C
  419. SEGSUP MLENTC
  420. SEGSUP MLENTF
  421. SEGSUP MLELIM
  422. SEGDES MLMINC
  423. IF(MELLIM .NE.0) SEGDES MELLIM
  424.  
  425. 9999 CONTINUE
  426. RETURN
  427. END
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  

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