Télécharger zechi1.eso

Retour à la liste

Numérotation des lignes :

zechi1
  1. C ZECHI1 SOURCE CB215821 20/11/25 13:44:49 10792
  2. SUBROUTINE ZECHI1(IKAS,IVOL1,MTAB1,MTAB2,MPOVA1,MPOVA2,IKH,IKT,
  3. & MELEMD,MELEVF,MLENTI,MLENT1,NOMD)
  4. C-----------------------------------------------------------------------
  5. C Discrétisation de l'opérateur ECHIMP en explicite EFM1 et VF, le
  6. C coeff d'échange étant un SCAL ou CHPO CENTRE, le champ exterieur
  7. C un SCAL, un CHPO CENTRE ou un CHPO SOMMET.
  8. C-----------------------------------------------------------------------
  9. C
  10. C--------------------
  11. C Paramètres Entrée :
  12. C--------------------
  13. C
  14. C E/ IKAS : Type de situation à traiter (1=EF, 2 ou 3=VF)
  15. C E/ IVOL1 : Type d'échange (0=surfacique, 1=volumique)
  16. C E/ MTAB1 : Pointeur de la table EQEX
  17. C E/ MTAB2 : Pointeur de la table DOMAINE locale
  18. C E/ MPOVA1 : MPOVAL des valeurs du coefficient d'échange
  19. C E/ MPOVA2 : MPOVAL des valeurs du champ exterieur
  20. C E/ IKH : Forme originel du coefficient d'échange
  21. C (0=CHPO CENTRE, 1=FLOTTANT)
  22. C E/ IKT : Forme originel du champ exterieur
  23. C (0=CHPO CENTRE, 1=FLOTTANT, 4=CHPO SOMMET)
  24. C E/ MELEMD : Pointeur du spg de l'inconnue
  25. C E/ MELEVF : Pointeur vers les points CENTRE du maillage volumique
  26. C en correspondance avec les points CENTRE surfacique
  27. C (Utilisé en Formulation VF et échange surfacique)
  28. C E/ MLENTI : Correspondance numéotation globale/numérotation locale
  29. C LECT(I)=J : le point numéro I est le Jième de MELEMD
  30. C E/ MLENT1 : Idem MLENTI pour le spg du champ exterieur
  31. C (Utilisé lorsque le champ exterieur est au SOMMET)
  32. C E/ NOMD : Nom de l'inconnue
  33. C
  34. C------------------
  35. C Champs calculés :
  36. C------------------
  37. C
  38. C MPOVA3 : MPOVAL des valeurs de la matrice diagonale
  39. C Stocké à l'indice NOMD de la table KIZG1
  40. C MPOVA4 : MPOVAL des valeurs du second membre
  41. C Stocké à l'indice NOMD de la table KIZG
  42. C
  43. C-----------------------------------------------------------------------
  44. IMPLICIT INTEGER(I-N)
  45. IMPLICIT REAL*8 (A-H,O-Z)
  46. C
  47.  
  48. -INC PPARAM
  49. -INC CCOPTIO
  50. -INC SMCHPOI
  51. -INC SMCHAML
  52. -INC SMELEME
  53. -INC SMLENTI
  54. C
  55. CHARACTER*8 TYPE,TYPC,TYPS
  56. CHARACTER*(*) NOMD
  57. C
  58. C- Initialisations
  59. C
  60. NBCOMP = 1
  61. IF (IKAS.EQ.1) THEN
  62. TYPS = 'SOMMET '
  63. ELSE
  64. TYPS = 'CENTRE '
  65. ENDIF
  66. C
  67. C- Récup/Création des tables KIZG (pointeur KIZG) et KIZG1 (KIZG1)
  68. C
  69. CALL LEKTAB(MTAB1,'KIZG',KIZG)
  70. IF (KIZG.EQ.0) THEN
  71. CALL CRTABL(KIZG)
  72. CALL ECMM(KIZG,'SOUSTYPE','KIZG')
  73. CALL ECMO(MTAB1,'KIZG','TABLE ',KIZG)
  74. ENDIF
  75. CALL LEKTAB(MTAB1,'KIZG1',KIZG1)
  76. IF (KIZG1.EQ.0) THEN
  77. CALL CRTABL(KIZG1)
  78. CALL ECMM(KIZG1,'SOUSTYPE','KIZG1')
  79. CALL ECMO(MTAB1,'KIZG1','TABLE ',KIZG1)
  80. ENDIF
  81. C
  82. C- Récup/Création des CHPO stockés dans les tables KIZG et KIZG1 à
  83. C- l'indice mot NOMD (nom de l'inconnue)
  84. C
  85. TYPE = ' '
  86. CALL ACMO(KIZG1,NOMD,TYPE,IZG1)
  87. IF (TYPE.NE.'CHPOINT ') THEN
  88. CALL CRCHPT(TYPS,MELEMD,NBCOMP,IZG1)
  89. CALL ECMO(KIZG1,NOMD,'CHPOINT ',IZG1)
  90. ENDIF
  91. CALL LICHT(IZG1,MPOVA3,TYPC,IGEOM)
  92. IF (IGEOM.NE.MELEMD) THEN
  93. C Les champs par point ont des supports géométriques incompatibles
  94. CALL ERREUR(348)
  95. RETURN
  96. ENDIF
  97. C
  98. TYPE = ' '
  99. CALL ACMO(KIZG,NOMD,TYPE,IZG)
  100. IF (TYPE.NE.'CHPOINT ') THEN
  101. CALL CRCHPT(TYPS,MELEMD,NBCOMP,IZG)
  102. CALL ECMO(KIZG,NOMD,'CHPOINT ',IZG)
  103. ENDIF
  104. CALL LICHT(IZG,MPOVA4,TYPC,IGEOM)
  105. IF (IGEOM.NE.MELEMD) THEN
  106. C Les champs par point ont des supports géométriques incompatibles
  107. CALL ERREUR(348)
  108. RETURN
  109. ENDIF
  110. C
  111. C- Activation
  112. C
  113. SEGACT MPOVA1
  114. SEGACT MPOVA2
  115. SEGACT MLENTI
  116. SEGACT MLENT1
  117. C
  118. C----------------------------------------------------------------------
  119. C- Traitement d'une formulation EF ou EMM1 explicite, le champ
  120. C- exterieur étant 1) un SCAL ou un CHPO CENTRE, 2) un CHPO SOMMET.
  121. C- Dans les deux cas, l'indice XXPSOML de la table domaine local suffit
  122. C- (contient l'intégrale sur chaque élément des fonctions de forme).
  123. C- En effet, en explicite les matrices masses sont condensées (EF=EFM1)
  124. C----------------------------------------------------------------------
  125. C
  126. IF (IKAS.EQ.1) THEN
  127. CALL LEKTAB(MTAB2,'MAILLAGE',MELEME)
  128. CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  129. IF (IERR.NE.0) RETURN
  130. SEGACT MCHELM
  131. SEGACT MELEME
  132. NBSOUS = LISOUS(/1)
  133. IF (NBSOUS.EQ.0) NBSOUS=1
  134. NUTOEL = 0
  135. DO 30 L=1,NBSOUS
  136. IPT1 = MELEME
  137. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  138. SEGACT IPT1
  139. NP = IPT1.NUM(/1)
  140. NBEL = IPT1.NUM(/2)
  141. MCHAML = ICHAML(L)
  142. SEGACT MCHAML
  143. MELVAL = IELVAL(1)
  144. SEGACT MELVAL
  145. DO 20 K=1,NBEL
  146. NK = NUTOEL + K
  147. KPOS = 1 + (1-IKH)*(NK-1)
  148. DO 10 I=1,NP
  149. II = IPT1.NUM(I,K)
  150. IPOS = LECT(II)
  151. VAL1 = MPOVA1.VPOCHA(KPOS,1)*VELCHE(I,K)
  152. MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1
  153. IF (IKT.EQ.4) THEN
  154. JPOS = MLENT1.LECT(II)
  155. ELSE
  156. JPOS = 1 + (1-IKT)*(NK-1)
  157. ENDIF
  158. VAL2 = VAL1 * MPOVA2.VPOCHA(JPOS,1)
  159. MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2
  160. 10 CONTINUE
  161. 20 CONTINUE
  162. SEGDES IPT1
  163. SEGDES MCHAML,MELVAL
  164. NUTOEL = NUTOEL + NBEL
  165. 30 CONTINUE
  166. IF (NBSOUS.NE.1) SEGDES MELEME
  167. SEGDES MCHELM
  168. C
  169. C----------------------------------------------------------------------
  170. C- Traitement d'une formulation VF Explicite, le champ exterieur étant
  171. C- 1) un SCAL ou un CHPO CENTRE, 2) un CHPO SOMMET.
  172. C-
  173. C- Le traitement différe pour le second membre :
  174. C- Dans le premier cas, l'indice XXVOLUM de la table domaine local,
  175. C- utilisé pour calculer la matrice suffit (contient le volume de
  176. C- chaque élément). Dans le deuxième cas, on a également besoin de
  177. C- l'indice XXPSOML que l'on sature par le champ exterieur au sommet.
  178. C-
  179. C- Le spg des champoints résultats dépend du type d'échange :
  180. C- Lorsque l'échange est volumique, les points CENTRE de la table
  181. C- domaine local sont à considerer. En surfacique, on a construit
  182. C- la correspondance entre centre(volume)-centre(surface); les CENTRE
  183. C- des volumes concernés sont rangés dans MELEVF.
  184. C----------------------------------------------------------------------
  185. C
  186. ELSE
  187. CALL LEKTAB(MTAB2,'XXVOLUM ',MCHPOI)
  188. CALL LICHT(MCHPOI,MPOVA5,TYPC,MELEMC)
  189. IF (IVOL1.EQ.0) THEN
  190. IPT2 = MELEVF
  191. ELSE
  192. IPT2 = MELEMC
  193. ENDIF
  194. SEGACT IPT2
  195. IF (IKT.EQ.0 .OR. IKT.EQ.1) THEN
  196. NBEL = IPT2.NUM(/2)
  197. DO 40 K=1,NBEL
  198. IPOS = LECT(IPT2.NUM(1,K))
  199. KPOS = 1 + (1-IKH)*(K-1)
  200. KTEX = 1 + (1-IKT)*(K-1)
  201. VAL1 = MPOVA1.VPOCHA(KPOS,1) * MPOVA5.VPOCHA(K,1)
  202. MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1
  203. VAL2 = MPOVA2.VPOCHA(KTEX,1) * VAL1
  204. MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2
  205. 40 CONTINUE
  206. ELSE
  207. CALL LEKTAB(MTAB2,'MAILLAGE',MELEME)
  208. CALL LEKTAB(MTAB2,'XXPSOML ',MCHELM)
  209. IF (IERR.NE.0) RETURN
  210. SEGACT MCHELM
  211. SEGACT MELEME
  212. NBSOUS = LISOUS(/1)
  213. IF (NBSOUS.EQ.0) NBSOUS=1
  214. NUTOEL = 0
  215. DO 70 L=1,NBSOUS
  216. IPT1 = MELEME
  217. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  218. SEGACT IPT1
  219. NP = IPT1.NUM(/1)
  220. NBEL = IPT1.NUM(/2)
  221. MCHAML = ICHAML(L)
  222. SEGACT MCHAML
  223. MELVAL = IELVAL(1)
  224. SEGACT MELVAL
  225. DO 60 K=1,NBEL
  226. NK = NUTOEL + K
  227. IPOS = LECT(IPT2.NUM(1,NK))
  228. KPOS = 1 + (1-IKH)*(NK-1)
  229. VAL1 = MPOVA1.VPOCHA(KPOS,1) * MPOVA5.VPOCHA(NK,1)
  230. MPOVA3.VPOCHA(IPOS,1) = MPOVA3.VPOCHA(IPOS,1) + VAL1
  231. VAL2 = 0.D0
  232. DO 50 I=1,NP
  233. II = IPT1.NUM(I,K)
  234. JPOS = MLENT1.LECT(II)
  235. VAL2 = VAL2 + MPOVA1.VPOCHA(KPOS,1)
  236. & * MPOVA2.VPOCHA(JPOS,1) * VELCHE(I,K)
  237. 50 CONTINUE
  238. MPOVA4.VPOCHA(IPOS,1) = MPOVA4.VPOCHA(IPOS,1) - VAL2
  239. 60 CONTINUE
  240. NUTOEL = NUTOEL + NBEL
  241. SEGDES IPT1
  242. SEGDES MELVAL,MCHAML
  243. 70 CONTINUE
  244. IF (NBSOUS.NE.1) SEGDES MELEME
  245. SEGDES MCHELM
  246. ENDIF
  247. SEGDES IPT2
  248. SEGDES MPOVA5
  249. ENDIF
  250. C
  251. C- Désactivation
  252. C
  253. SEGDES MPOVA1
  254. SEGDES MPOVA2
  255. SEGDES MPOVA3
  256. SEGDES MPOVA4
  257. SEGSUP MLENTI
  258. SEGSUP MLENT1
  259. RETURN
  260. END
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  

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