Télécharger kfmm2.eso

Retour à la liste

Numérotation des lignes :

kfmm2
  1. C KFMM2 SOURCE CB215821 20/11/25 13:31:21 10792
  2. SUBROUTINE KFMM2(IRN,IGN,IRETN,IGAMN,
  3. & ICHPSU,ICHPVO,INORM,
  4. & MELEMC,MELEMF,MELEFE,
  5. & MELLIM,ICHLIM,
  6. & ICHRES)
  7. C************************************************************************
  8. C
  9. C PROJET : CASTEM 2000
  10. C
  11. C NOM : KFMM2
  12. C
  13. C DESCRIPTION : Voir KFMM
  14. C
  15. C Cas deux dimensions, gaz "calorically perfect"
  16. C
  17. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  18. C
  19. C AUTEUR : A. BECCANTINI, DRN/DMT/SEMT/TTMF
  20. C
  21. C************************************************************************
  22. C ENTREES
  23. C
  24. C
  25. C
  26. C 1) Pointeurs des CHPOINTs
  27. C
  28. C IRN : CHPOINT 'CENTRE' contenant la masse volumique
  29. C
  30. C IGN : CHPOINT 'CENTRE' contenant la q.d.m.
  31. C
  32. C IRETN : CHPOINT 'CENTRE' contenant l'energie totale
  33. C
  34. C IGAMN : CHPOINT 'CENTRE' contenant le gamma
  35. C
  36. C ICHLIM : CHPOINT conditions aux bords
  37. C
  38. C 3) Pointeurs de CHPOINTs de la table DOMAINE
  39. C
  40. C ICHPSU : CHPOINT "FACE" contenant la surface des faces
  41. C
  42. C ICHPVO : CHPOINT "CENTRE" contenant le volume
  43. C de chaque element
  44. C
  45. C
  46. C 4) Pointeurs de MELEME de la table DOMAINE
  47. C
  48. C MELEMC : MELEME 'CENTRE' du SPG des CENTRES
  49. C
  50. C MELEMF : MELEME 'FACE' du SPG des FACES
  51. C
  52. C MELEFE : MELEME 'FACEL' du connectivité FACES -> ELEM
  53. C
  54. C MELLIM : MELEME SPG conditions aux bords
  55. C
  56. C SORTIES
  57. C
  58. C ICHRES : resultat
  59. C
  60. C************************************************************************
  61. C
  62. C HISTORIQUE (Anomalies et modifications éventuelles)
  63. C
  64. C HISTORIQUE : Avril 2002 : creation
  65. C Janvier 2003: implementation de condition aux limites
  66. C
  67. C************************************************************************
  68. C
  69. C
  70. C N.B.: On suppose qu'on a déjà controllé RO, P > 0
  71. C GAMMA \in (1,3)
  72. C Y \in (0,1)
  73. C Si non il faut le faire!!!
  74. C
  75. C************************************************************************
  76. C
  77. C
  78. C**** Variables de COOPTIO
  79. C
  80. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  81. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  82. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  83. C & ,IECHO, IIMPI, IOSPI
  84. C & ,IDIM
  85. C & ,MCOORD
  86. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  87. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  88. C & ,NORINC,NORVAL,NORIND,NORVAD
  89. C & ,NUCROU, IPSAUV, IFICLE, IPREFI
  90. C
  91. IMPLICIT INTEGER(I-N)
  92. INTEGER IRN,IGN,IRETN,IGAMN,ICHPSU,ICHPVO,INORM
  93. & ,MELEMC,MELEMF,MELEFE,ICHRES,ISPG1,ISPG2,NFAC
  94. & ,IGEOMF,IGEOMC, NGCEG, NGCED, NGCF, NLCF, NLCF1, NLCEG, NLCED
  95. & ,MELLIM,ICHLIM,NLLIM
  96. REAL*8 ROG, RUXG, RUYG, UNG, RETG, GAMG, REC, PG, VOLG, UTG
  97. & , ROD, RUXD, RUYD, UND, RETD, GAMD, PD, VOLD, UTD
  98. & , CNX, CNY, CTX, CTY
  99. & , SURF, SIGMAF
  100. & , UXG, UYG, RHTG
  101. & , UXD, UYD, RHTD, COEF
  102. & ,FR, FRUX, FRUY, FRET
  103.  
  104. CHARACTER*8 TYPE
  105. C
  106. C**** LES INCLUDES
  107. C
  108.  
  109. -INC PPARAM
  110. -INC CCOPTIO
  111. -INC SMCHPOI
  112. POINTEUR MPOVSU.MPOVAL
  113. & , MPORES.MPOVAL, MPOVOL.MPOVAL
  114. & , MPRN.MPOVAL, MPGN.MPOVAL, MPRETN.MPOVAL, MPGAMN.MPOVAL
  115. & , MPNORM.MPOVAL, MPLIM.MPOVAL
  116. -INC SMELEME
  117. -INC SMLMOTS
  118. -INC SMLENTI
  119. POINTEUR MLELIM.MLENTI
  120. C
  121. C**** Initialisation des MLENTI des conditions aux limites
  122. C
  123. C
  124. CALL KRIPAD(MELLIM,MLELIM)
  125. C SEGINI MLELIM
  126. C
  127. C**** Initialisation des MELEMEs
  128. C
  129. C 'CENTRE', 'FACEL'
  130. C
  131. IPT2 = MELEFE
  132. SEGACT IPT2
  133. NFAC = IPT2.NUM(/2)
  134. C
  135. C**** KRIPAD pour la correspondance global/local de centre
  136. C
  137. CALL KRIPAD(MELEMC,MLENT1)
  138. C
  139. C**** MLENTI1 a MCORD.XCOORD(/1)/(IDIM+1) elements
  140. C
  141. C Si i est le numero global d'un noeud de ICEN,
  142. C MLENT1.LECT(i) contient sa position, i.e.
  143. C
  144. C I = numero global du noeud centre
  145. C MLENT1.LECT(i) = numero local du noeud centre
  146. C
  147. C MLENT1 déjà activé, i.e.
  148. C
  149. C SEGINI MLENT1
  150. C
  151. C
  152. C**** KRIPAD pour la correspondance global/local de 'FACE'
  153. C
  154. CALL KRIPAD(MELEMF,MLENT2)
  155. C SEGINI MLENT2
  156. C
  157. C**** CHPOINTs de la table DOMAINE
  158. C
  159. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  160. CALL LICHT(ICHPVO,MPOVOL,TYPE,IGEOMC)
  161. CALL LICHT(INORM,MPNORM,TYPE,IGEOMC)
  162. C
  163. C**** LICHT active les MPOVALs en *MOD
  164. C
  165. C i.e.
  166. C
  167. C SEGACT MPOVSU*MOD
  168. C SEGACT MPOVOL*MOD
  169. C SEGACT MPNORM*MOD
  170. C
  171. CALL LICHT(ICHRES,MPORES,TYPE,IGEOMC)
  172. C SEGACT MPORES*MOD
  173. C
  174. C
  175. CALL LICHT(IRN,MPRN,TYPE,IGEOMC)
  176. CALL LICHT(IGN,MPGN,TYPE,IGEOMC)
  177. CALL LICHT(IRETN,MPRETN,TYPE,IGEOMC)
  178. CALL LICHT(IGAMN,MPGAMN,TYPE,IGEOMC)
  179. CALL LICHT(ICHLIM,MPLIM,TYPE,MELLIM)
  180. C
  181. C SEGACT MPRN*MOD
  182. C SEGACT MPGN*MOD
  183. C SEGACT MPRETN*MOD
  184. C SEGACT MPGAMN*MOD
  185. C SEGACT MPLIM*MOD
  186. C
  187. IF(IGEOMF .NE. MELEMF)THEN
  188. WRITE(IOIMP,*) 'Anomalie dedans kfmm1.eso'
  189. WRITE(IOIMP,*) 'Probleme de SPG'
  190. C 21 2
  191. C Données incompatibles
  192. CALL ERREUR(21)
  193. GOTO 9999
  194. ENDIF
  195. IF(IGEOMC .NE. MELEMC)THEN
  196. WRITE(IOIMP,*) 'Anomalie dedans kfmm1.eso'
  197. WRITE(IOIMP,*) 'Probleme de SPG'
  198. C 21 2
  199. C Données incompatibles
  200. CALL ERREUR(21)
  201. GOTO 9999
  202. ENDIF
  203. C
  204. C
  205. C**** BOUCLE SUR FACEL pour le calcul du FLUX
  206. C
  207. DO NLCF = 1, NFAC
  208. C
  209. C******* NLCF = numero local du centre de facel
  210. C NGCF = numero global du centre de facel
  211. C NLCF1 = numero local du centre de face
  212. C NGCEG = numero global du centre ELT "gauche"
  213. C NLCEG = numero local du centre ELT "gauche"
  214. C NGCED = numero global du centre ELT "droite"
  215. C NLCED = numero local du centre ELT "droite"
  216. C
  217. NGCEG = IPT2.NUM(1,NLCF)
  218. NGCED = IPT2.NUM(3,NLCF)
  219. NGCF = IPT2.NUM(2,NLCF)
  220. NLCF1 = MLENT2.LECT(NGCF)
  221. NLCEG = MLENT1.LECT(NGCEG)
  222. NLCED = MLENT1.LECT(NGCED)
  223. C
  224. C******* NLCF != NLCF1 -> l'auteur (MOI) n'a rien compris.
  225. C
  226. IF(NLCF .NE. NLCF1)THEN
  227. WRITE(IOIMP,*) 'Anomalie dedans kfmm1.eso'
  228. WRITE(IOIMP,*) 'Probleme de SPG'
  229. C 21 2
  230. C Données incompatibles
  231. CALL ERREUR(21)
  232. GOTO 9999
  233. ENDIF
  234. C
  235. CNX = MPNORM.VPOCHA(NLCF,1)
  236. CNY = MPNORM.VPOCHA(NLCF,2)
  237. CTX = -1.0D0 * CNY
  238. CTY = CNX
  239. C
  240. C
  241. C******* Recuperation des Etats "gauche" et "droite"
  242. C
  243. ROG = MPRN.VPOCHA(NLCEG,1)
  244. RUXG = MPGN.VPOCHA(NLCEG,1)
  245. RUYG = MPGN.VPOCHA(NLCEG,2)
  246. UXG = RUXG / ROG
  247. UYG = RUYG / ROG
  248. UNG = (UXG * CNX) + (UYG * CNY)
  249. UTG = (UXG * CTX) + (UYG * CTY)
  250. RETG = MPRETN.VPOCHA(NLCEG,1)
  251. GAMG = MPGAMN.VPOCHA(NLCEG,1)
  252. REC = 0.5D0 * ((RUXG * RUXG) + (RUYG*RUYG))
  253. REC = REC / ROG
  254. PG = (GAMG - 1.0D0) * (RETG - REC)
  255. VOLG = MPOVOL.VPOCHA(NLCEG,1)
  256. C
  257. IF(NLCEG .NE. NLCED)THEN
  258. ROD = MPRN.VPOCHA(NLCED,1)
  259. RUXD = MPGN.VPOCHA(NLCED,1)
  260. RUYD = MPGN.VPOCHA(NLCED,2)
  261. UXD = RUXD / ROD
  262. UYD = RUYD / ROD
  263. UND = (UXD * CNX) + (UYD * CNY)
  264. RETD = MPRETN.VPOCHA(NLCED,1)
  265. GAMD = MPGAMN.VPOCHA(NLCED,1)
  266. REC = 0.5D0 * ((RUXD * RUXD) + (RUYD*RUYD))
  267. REC = REC / ROD
  268. PD = (GAMD - 1.0D0) * (RETD - REC)
  269. VOLD = MPOVOL.VPOCHA(NLCED,1)
  270. ELSE
  271. C Murs au condition aux limite
  272. NLLIM=MLELIM.LECT(NGCF)
  273. IF(NLLIM .EQ.0)THEN
  274. C Mur
  275. ROD = ROG
  276. UND = -1.0D0 * UNG
  277. UTD = UTG
  278. UXD = UND * CNX + UTD * CTX
  279. UYD = UND * CNY + UTD * CTY
  280. RUXD = UXD * ROD
  281. RUYD = UYD * ROD
  282. GAMD = GAMG
  283. RETD = RETG
  284. PD = PG
  285. VOLD = VOLG
  286. ELSE
  287. C Boundary
  288. ROD = MPLIM.VPOCHA(NLLIM,1)
  289. UXD = MPLIM.VPOCHA(NLLIM,2)
  290. UYD = MPLIM.VPOCHA(NLLIM,3)
  291. PD = MPLIM.VPOCHA(NLLIM,4)
  292. GAMD = GAMG
  293. UND = (UXD * CNX) + (UYD * CNY)
  294. RETD = ((1.0D0/(GAMD - 1.0D0))*PD)+
  295. & (0.5D0*ROD*((UXD*UXD)+(UYD*UYD)))
  296. VOLD = VOLG
  297. ENDIF
  298. ENDIF
  299. C
  300. RHTG=RETG+PG
  301. RHTD=RETD+PD
  302. C
  303. SURF = MPOVSU.VPOCHA(NLCF,1)
  304. SIGMAF = (0.5D0 * (GAMG + GAMD)) * (PG + PD) / (ROG + ROD)
  305. SIGMAF = SIGMAF ** 0.5D0
  306. SIGMAF = (0.5D0 * (ABS(UNG) + ABS(UND))) + SIGMAF
  307. C
  308. FR=(ROG*UNG)+(ROD*UND)
  309. FRUX=(ROG*UNG*UXG)+(ROD*UND*UXD)+((PG+PD)*CNX)
  310. FRUY=(ROG*UNG*UYG)+(ROD*UND*UYD)+((PG+PD)*CNY)
  311. FRET=(UNG*RHTG)+(UND*RHTD)
  312. C
  313. COEF=SURF/(2.0D0*VOLG)
  314. MPORES.VPOCHA(NLCEG,1) = MPORES.VPOCHA(NLCEG,1) +
  315. & (COEF * (FR - (SIGMAF * ROD)))
  316. MPORES.VPOCHA(NLCEG,2) = MPORES.VPOCHA(NLCEG,2) +
  317. & (COEF * (FRUX - (SIGMAF * ROD * UXD)))
  318. MPORES.VPOCHA(NLCEG,3) = MPORES.VPOCHA(NLCEG,3) +
  319. & (COEF * (FRUY - (SIGMAF * ROD * UYD)))
  320. MPORES.VPOCHA(NLCEG,4) = MPORES.VPOCHA(NLCEG,4) +
  321. & (COEF * (FRET - (SIGMAF * RETD)))
  322. C
  323. IF(NLCEG .NE. NLCED)THEN
  324. C
  325. C********** Domain interieur
  326. C
  327. COEF=SURF/(2.0D0*VOLD)
  328. MPORES.VPOCHA(NLCED,1) = MPORES.VPOCHA(NLCED,1) -
  329. & (COEF * (FR + (SIGMAF * ROG)))
  330. MPORES.VPOCHA(NLCED,2) = MPORES.VPOCHA(NLCED,2) -
  331. & (COEF * (FRUX + (SIGMAF * ROG * UXG)))
  332. MPORES.VPOCHA(NLCED,3) = MPORES.VPOCHA(NLCED,3) -
  333. & (COEF * (FRUY + (SIGMAF * ROG * UYG)))
  334. MPORES.VPOCHA(NLCED,4) = MPORES.VPOCHA(NLCED,4) -
  335. & (COEF * (FRET + (SIGMAF * RETG)))
  336. ENDIF
  337. ENDDO
  338. C
  339. SEGDES MPOVSU
  340. SEGDES MPOVOL
  341. SEGDES MPNORM
  342. C
  343. SEGDES MPORES
  344. C
  345. SEGDES MPRN
  346. SEGDES MPRETN
  347. SEGDES MPGN
  348. SEGDES MPGAMN
  349. C
  350. SEGSUP MLENT1
  351. SEGSUP MLENT2
  352. SEGDES IPT2
  353. C
  354. SEGSUP MLELIM
  355. IF(MPLIM .GT. 0) SEGDES MPLIM
  356. C
  357. C
  358. 9999 CONTINUE
  359. C
  360. RETURN
  361. END
  362. C
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  

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