Télécharger konjs1.eso

Retour à la liste

Numérotation des lignes :

konjs1
  1. C KONJS1 SOURCE OF166741 24/12/13 21:16:43 12097
  2. SUBROUTINE KONJS1(INDMET,ILINC,ISF,IUN,INORM,ICHPVO
  3. $ ,ICHPSU,MELEMC,MELEMF,MELEFE,IMAT)
  4. C
  5. C************************************************************************
  6. C
  7. C PROJET : CASTEM 2000
  8. C
  9. C NOM : KONJS1
  10. C
  11. C DESCRIPTION : Voir KONV15
  12. C Calcul du jacobien du résidu
  13. C Cas 2D/3D
  14. C
  15. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  16. C
  17. C AUTEUR : A. BECCANTINI, SFME/LTMF
  18. C
  19. C************************************************************************
  20. C
  21. C
  22. C APPELES (Outils
  23. C CASTEM) : KRIPAD, LICHT, ERREUR
  24. C
  25. C APPELES (Calcul) :
  26. C
  27. C************************************************************************
  28. C
  29. C ENTREES
  30. C
  31. C INDMET : type de Methode
  32. C 1 UPWIND
  33. C 2 CENTERED
  34. C
  35. C ILINC : liste des inconnues
  36. C
  37. C 1) Pointeurs des CHPOINT/CHAMELEM
  38. C
  39. C IUN : CHPOINT FACE contenant la vitesse ;
  40. C
  41. C ISF : CHAMELEM 'FACEL' contenant les scalaires à transporter
  42. C
  43. C INORM : CHPOINT FACE contenant les normales aux faces ;
  44. C
  45. C ICHPVO : CHPOINT VOLUME contenant le volume
  46. C
  47. C ICHPSU : CHPOINT FACE contenant la surface des faces
  48. C
  49. C
  50. C 2) Pointeurs de MELEME de la table DOMAINE
  51. C
  52. C MELEMC : MELEME 'CENTRE' du SPG des CENTRES
  53. C
  54. C MELEFE : MELEME 'FACEL' du connectivité Faces -> Elts
  55. C
  56. C SORTIES
  57. C
  58. C IMAT : pointeur de la MATRIK du jacobien du residu
  59. C
  60. C************************************************************************
  61. C
  62. C HISTORIQUE (Anomalies et modifications éventuelles)
  63. C
  64. C HISTORIQUE : Créée le 03.12.01
  65. C
  66. C************************************************************************
  67. C
  68. IMPLICIT INTEGER(I-N)
  69. INTEGER ILINC, ISF ,IUN, INORM,ICHPVO,ICHPSU
  70. & , IMAT, IGEOMC, IGEOMF
  71. & , NFAC, NBSOUS, NBREF, NBELEM, NBNN, NRIGE, NMATRI, NKID
  72. & , NKMT, NBME, NBEL, MP, NP
  73. & , IFAC, NGCF, NLCF, NGCG, NGCD, NLCG, NLCD, NINC, IINC
  74. & ,INDMET
  75. REAL*8 UNX, UNY, UNZ, UN, VOLG, VOLD
  76. & , SURF, CNX, CNY, CNZ, FUNCEL
  77. CHARACTER*8 TYPE
  78. C
  79. C**** LES INCLUDES
  80. C
  81.  
  82. -INC PPARAM
  83. -INC CCOPTIO
  84. -INC SMCHPOI
  85. -INC SMELEME
  86. -INC SMLMOTS
  87. -INC SMLENTI
  88. POINTEUR MPUN.MPOVAL,
  89. & MPNORM.MPOVAL, MPVOLU.MPOVAL, MPOVSU.MPOVAL
  90. POINTEUR MELEMC.MELEME, MELEMF.MELEME, MELEFE.MELEME,
  91. & MELEDU.MELEME
  92. POINTEUR MLENTC.MLENTI, MLENTF.MLENTI
  93. POINTEUR MATSS.IZAFM
  94. POINTEUR MLMINC.MLMOTS
  95. C
  96. C**** KRIPAD pour la correspondance global/local des centres
  97. C
  98. CALL KRIPAD(MELEMC,MLENTC)
  99. C
  100. C SEGACT MLENTC
  101. SEGACT MELEMC
  102. C
  103. SEGACT MELEFE
  104. C
  105. CALL LICHT(ICHPSU,MPOVSU,TYPE,IGEOMF)
  106. CALL LICHT(INORM,MPNORM,TYPE,IGEOMF)
  107. CALL LICHT(ICHPVO,MPVOLU,TYPE,IGEOMC)
  108. C
  109. C**** LICHT active les MPOVALs en *MOD
  110. C
  111. C i.e.
  112. C
  113. C SEGACT MPOVSU*MOD
  114. C SEGACT MPOVNO*MOD
  115. C SEGACT MPVOLU*MOD
  116. C
  117. MELEMF = IGEOMF
  118. CALL KRIPAD(MELEMF,MLENTF)
  119. C
  120. C SEGACT MLENTF
  121. SEGACT MELEMF
  122. C
  123. CALL LICHT(IUN,MPUN,TYPE,IGEOMC)
  124. C
  125. C SEGACT MPUN*MOD
  126. C
  127. NFAC = MELEFE.NUM(/2)
  128. C
  129. C**** Maillage des inconnues primales
  130. C
  131. NBSOUS = 0
  132. NBREF = 0
  133. NBELEM = NFAC
  134. NBNN = 2
  135. C
  136. SEGINI MELEDU
  137. C MELEPR = MELEDU
  138. C
  139. C**** MELEDU = 'SEG2'
  140. C
  141. MELEDU.ITYPEL = 2
  142. C
  143. NRIGE = 7
  144. NMATRI = 1
  145. NKID = 9
  146. NKMT = 7
  147. C
  148. SEGINI MATRIK
  149. IMAT = MATRIK
  150. MATRIK.IRIGEL(1,1) = MELEDU
  151. MATRIK.IRIGEL(2,1) = MELEDU
  152. C
  153. C**** Matrice non symetrique
  154. C
  155. MATRIK.IRIGEL(7,1) = 2
  156. C
  157. MLMINC = ILINC
  158. SEGACT MLMINC
  159. NINC=MLMINC.MOTS(/2)
  160. NBME = NINC
  161. NBSOUS = 1
  162. SEGINI IMATRI
  163. MATRIK.IRIGEL(4,1) = IMATRI
  164. C
  165. NBEL = NBELEM
  166. NBSOUS = 1
  167. NP = 2
  168. MP = 2
  169. DO IINC=1,NINC,1
  170. IMATRI.LISPRI(IINC) = MLMINC.MOTS(IINC)
  171. IMATRI.LISDUA(IINC) = MLMINC.MOTS(IINC)
  172. SEGINI MATSS
  173. IMATRI.LIZAFM(1,IINC) = MATSS
  174. ENDDO
  175. C
  176. DO IFAC = 1, NFAC, 1
  177. NGCF = MELEFE.NUM(2,IFAC)
  178. NLCF = MLENTF.LECT(NGCF)
  179. IF(NLCF .NE. IFAC)THEN
  180. WRITE(IOIMP,*) 'Il ne faut pas jouer avec la table domaine'
  181. CALL ERREUR(5)
  182. GOTO 9999
  183. ENDIF
  184. NGCG = MELEFE.NUM(1,IFAC)
  185. NGCD = MELEFE.NUM(3,IFAC)
  186. SURF = MPOVSU.VPOCHA(NLCF,1)
  187. CNX = MPNORM.VPOCHA(NLCF,1)
  188. CNY = MPNORM.VPOCHA(NLCF,2)
  189. UNX = MPUN.VPOCHA(NLCF,1)
  190. UNY = MPUN.VPOCHA(NLCF,2)
  191. UN= (UNX*CNX) + (UNY*CNY)
  192. IF(IDIM .EQ. 3)THEN
  193. CNZ = MPNORM.VPOCHA(NLCF,3)
  194. UNZ = MPUN.VPOCHA(NLCF,3)
  195. UN=UN+(UNZ*CNZ)
  196. ENDIF
  197. IF(NGCG .NE. NGCD)THEN
  198. C
  199. C********** Les MELEMEs
  200. C
  201. MELEDU.NUM(1,IFAC) = NGCG
  202. MELEDU.NUM(2,IFAC) = NGCD
  203. C
  204. C********** Les etats G et D
  205. C
  206. NLCG = MLENTC.LECT(NGCG)
  207. NLCD = MLENTC.LECT(NGCD)
  208. VOLG = MPVOLU.VPOCHA(NLCG,1)
  209. VOLD = MPVOLU.VPOCHA(NLCD,1)
  210. C
  211. C********** MATSS.AM(IFAC,IPRIM,IDUAL)
  212. C IPRIM = 1, 2 -> G, D
  213. C IDUAL = 1, 2 -> G, D
  214. C
  215. C********** Dual RN
  216. C
  217. IF(INDMET .EQ. 1)THEN
  218. FUNCEL = SURF * UN
  219. IF(UN .GT. 0)THEN
  220. DO IINC=1,NINC,1
  221. MATSS=IMATRI.LIZAFM(1,IINC)
  222. MATSS.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  223. MATSS.AM(IFAC,1,2) = FUNCEL / VOLD
  224. MATSS.AM(IFAC,2,1) = 0.0D0
  225. MATSS.AM(IFAC,2,2) = 0.0D0
  226. ENDDO
  227. ELSE
  228. DO IINC=1,NINC,1
  229. MATSS=IMATRI.LIZAFM(1,IINC)
  230. MATSS.AM(IFAC,2,2) = FUNCEL / VOLD
  231. MATSS.AM(IFAC,2,1) = -1.0D0 * FUNCEL / VOLG
  232. MATSS.AM(IFAC,1,1) = 0.0D0
  233. MATSS.AM(IFAC,1,2) = 0.0D0
  234. ENDDO
  235. ENDIF
  236. ELSEIF(INDMET .EQ.2)THEN
  237. FUNCEL = SURF * UN * 0.5D0
  238. DO IINC=1,NINC,1
  239. MATSS=IMATRI.LIZAFM(1,IINC)
  240. MATSS.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  241. MATSS.AM(IFAC,1,2) = FUNCEL / VOLD
  242. MATSS.AM(IFAC,2,1) = -1.0D0 * FUNCEL /VOLG
  243. MATSS.AM(IFAC,2,2) = FUNCEL / VOLD
  244. ENDDO
  245. ELSE
  246. CALL ERREUR(251)
  247. GOTO 9999
  248. ENDIF
  249. ELSE
  250. C
  251. C********** Murs (NGCG = NGCD)
  252. C
  253. C
  254. C********** Les MELEMEs
  255. C
  256. MELEDU.NUM(1,IFAC) = NGCG
  257. MELEDU.NUM(2,IFAC) = NGCD
  258. NLCG = MLENTC.LECT(NGCG)
  259. VOLG = MPVOLU.VPOCHA(NLCG,1)
  260. C
  261. IF((INDMET .EQ. 1).OR.(INDMET .EQ. 2))THEN
  262. FUNCEL = SURF * UN
  263. DO IINC=1,NINC,1
  264. MATSS=IMATRI.LIZAFM(1,IINC)
  265. MATSS.AM(IFAC,1,1) = -1.0D0 * FUNCEL / VOLG
  266. MATSS.AM(IFAC,1,2) = 0.0D0
  267. MATSS.AM(IFAC,2,1) = 0.0D0
  268. MATSS.AM(IFAC,2,2) = 0.0D0
  269. ENDDO
  270. ELSE
  271. CALL ERREUR(251)
  272. GOTO 9999
  273. ENDIF
  274. ENDIF
  275. ENDDO
  276. C
  277. SEGDES MELEMC
  278. SEGDES MELEFE
  279. SEGDES MELEMF
  280. C
  281. SEGDES MPOVSU
  282. SEGDES MPVOLU
  283. SEGDES MPNORM
  284. C
  285. SEGDES MPUN
  286. C
  287. SEGDES MELEDU
  288. SEGDES MATRIK
  289. DO IINC=1,NINC,1
  290. MATSS=IMATRI.LIZAFM(1,IINC)
  291. SEGDES MATSS
  292. ENDDO
  293. SEGDES IMATRI
  294. C
  295. SEGSUP MLENTC
  296. SEGSUP MLENTF
  297. SEGDES MLMINC
  298.  
  299. 9999 CONTINUE
  300. RETURN
  301. END
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  

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