Télécharger ef0kon.eso

Retour à la liste

Numérotation des lignes :

ef0kon
  1. C EF0KON SOURCE CB215821 20/11/25 13:27:07 10792
  2. C**************************************************************
  3. C==============================================================
  4. C Cas de l'equation convection diffusion C
  5. C formulation EFM (elements finis mixte) C
  6. C Auteur : M. MARIN C
  7. C C
  8. C IERRKON : indicatif d'erreur = 1 si il y a une erreur C
  9. C = 0 sinon C
  10. C Cette routine cree les matrices elementaires pour un C
  11. C terme u*teta ou : C
  12. C u : CHPOINT vectoriel au sommet C
  13. C teta : CHPOINT scalaire au centre C
  14. C C
  15. C==============================================================
  16. C**************************************************************
  17.  
  18. SUBROUTINE EF0KON(KIZX,IZTU1,IZTGG1,IZTGG2,IZTGG3,TYPC,IERRKON,
  19. & MELEME,MTABZ,NOMI,IKR,MLENTI,IAXI,NOMII,MZPHI,TYPCFI,
  20. & IZTCO,NELZ,IKU,IKM,AIMPL,IDCEN,MLENT1,DT)
  21. IMPLICIT INTEGER(I-N)
  22. IMPLICIT REAL*8 (A-H,O-Z)
  23.  
  24.  
  25. -INC CCVQUA4
  26.  
  27. -INC PPARAM
  28. -INC CCOPTIO
  29. -INC CCGEOME
  30. -INC SMCOORD
  31. -INC SMLENTI
  32. -INC SMELEME
  33. POINTEUR MELEMC.MELEME,MELEMS.MELEME
  34. -INC SMCHAML
  35. -INC SMCHPOI
  36. POINTEUR IZTU1.MPOVAL,MZPHI.MPOVAL,IZTCO.MPOVAL
  37. POINTEUR IZTGG1.MPOVAL,IZTGG2.MPOVAL,IZTGG3.MPOVAL
  38. -INC SIZFFB
  39. -INC SMLMOTS
  40. -INC SMTABLE
  41. POINTEUR KIZX.MTABLE,MTABZ.MTABLE
  42.  
  43. C===========================================
  44. C Variables locale ou argument C
  45. CHARACTER*8 TYPC,NOMI,NOM,NOM0,NOMII,TYPCFI
  46. INTEGER IERRKON,IKR,IKU,IKM
  47. C===========================================
  48.  
  49. c WRITE(6,*) KIZX,IZTU1,IZTGG1,IZTGG2,IZTGG3,TYPC,IERRKON,
  50. c & MELEM,MTABZ,NOMI,IKR,MLENTI,IAXI,NOMII,MZPHI,TYPCFI,
  51. c & IZTCO,NELZ,IKU,IKM,AIMPL
  52. C Validation du passage d'argument
  53.  
  54. IERRKON=0
  55.  
  56. C Initialisation pour le nombre total final d'elements (TRI3+QUA4+...)
  57. C sur le domaine ou s'applique KONV
  58. NUTOEL=0
  59. c WRITE(6,*) 'MELEME=',MELEME
  60.  
  61. C WRITE(6,*) 'Type du Coef 1:',IKR
  62.  
  63. C On teste si la variable primale est de type CENTRE
  64. IF (TYPC.NE.'CENTRE ') THEN
  65. CALL ERRKON(1,IERRKON)
  66. RETURN
  67. END IF
  68.  
  69. C Test si la variable primale est de type scalaire
  70. IF (IZTU1.VPOCHA(/2).NE.1) THEN
  71. CALL ERRKON(5,IERRKON)
  72. RETURN
  73. END IF
  74.  
  75. C On teste si la variable duale est de type SOMMET
  76. IF (TYPCFI.NE.'SOMMET ') THEN
  77. CALL ERRKON(4,IERRKON)
  78. RETURN
  79. END IF
  80.  
  81. C On teste si la variable duale est un vecteur
  82. IF ((MZPHI.VPOCHA(/2).EQ.1).AND.(IDIM.NE.1)) THEN
  83. CALL ERRKON(6,IERRKON)
  84. RETURN
  85. END IF
  86.  
  87. C On teste pour savoir si RO est bien un scalaire
  88. IF (IKR.NE.1) THEN
  89. CALL ERRKON(7,IERRKON)
  90. RETURN
  91. END IF
  92. C On recupere le nombre de composante de la vitesse
  93. NBME=IDIM
  94. c WRITE(6,*) 'Nombre de composante de UN :',NBME
  95.  
  96. C On active le segment contenant le maillage de la zone ou
  97. C KONV s'applique et on initialise le nombre de sous-objet.
  98. C ------------------------------------------------------
  99. C NBSOUS et NBME servent a initialiser le segment IMATRI
  100. SEGACT MELEME
  101. NBSOUS=MELEME.LISOUS(/1)
  102. c WRITE(6,*) 'NBSOUS=',NBSOUS
  103. IF (NBSOUS.EQ.0) NBSOUS=1
  104.  
  105. C Initialisation de la matrice elementaire de l'operateur
  106. NRIGE=7
  107. NKID=9
  108. NKMT=7
  109. NMATRI=1
  110. SEGINI MATRIK
  111.  
  112.  
  113. C On recupere le maillage des centres
  114. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  115.  
  116. C On recupere le maillage des sommets
  117. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  118.  
  119. C Inconnue primale
  120. IRIGEL(1,1)=MELEMC
  121.  
  122. C Inconnue duale
  123. IRIGEL(2,1)=MELEME
  124.  
  125. C Matrice rectangulaire
  126. IRIGEL(7,1)=3
  127.  
  128. SEGINI IMATRI
  129. IRIGEL(4,1)= IMATRI
  130.  
  131. C Intialisation des supports inconnue primale et duale
  132. C pour le segment IMATRI
  133. KSPGP=MELEMC
  134. KSPGD=MELEMS
  135.  
  136. DO I=1,NBME
  137. WRITE(NOM,FMT='(I1,A3)')I,NOMII(1:3)
  138. LISPRI(I)=NOMI(1:4)//' '
  139. LISDUA(I)=NOM(1:4)//' '
  140. END DO
  141.  
  142. C On recupere le segment qui contient int(Ni)
  143. CALL LEKTAB(MTABZ,'XXPSOML',MCHELM)
  144.  
  145. IF (MCHELM.EQ.0) THEN
  146. CALL ERRKON(2,IERRKON)
  147. RETURN
  148. END IF
  149.  
  150. SEGACT MCHELM
  151.  
  152. C==========Boucle principale==============C
  153. C On effectue cette boucle pour tous les
  154. C sous-objets
  155.  
  156.  
  157. DO L=1,NBSOUS
  158. IPT1=MELEME
  159. SEGACT MELEME
  160.  
  161. C Si NBSOUS > 1 on agit sur les sous-objets LISOUS
  162. IF (NBSOUS.NE.1) IPT1=LISOUS(L)
  163. SEGACT IPT1
  164.  
  165. c WRITE(6,*) 'IPT1=',IPT1,'NBSOUS=',NBSOUS
  166. C On rempli NOM0 du veritable nom des elements traites (TRI3, QUA4,...)
  167. NOM0=NOMS(IPT1.ITYPEL)//' '
  168.  
  169. C Cette routine cree des objets contenant les fonctions
  170. C de forme lie aux elements traites
  171. C Le segment IZFFM contient les fonctions de forme et les gradients
  172. C a chaque point de Gauss
  173. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  174.  
  175. SEGACT IZFFM
  176. IZHR=KZHR(1)
  177. SEGACT IZHR*MOD
  178.  
  179. C Dimension de l'element de reference
  180. NES=GR(/1)
  181.  
  182. C Nombre de points de Gauss
  183. NPG=GR(/3)
  184. c WRITE(6,*) 'Nbre de points de Gauss :' , NPG
  185.  
  186. C NP est le nombre de points de l'element de reference
  187. C MP est la troisieme dimension du tableau contenant les matrices
  188. C elementaire de chaque elements (segment IZAFM). C'est le
  189. C nombre de point par element
  190. NP = 1
  191. MP = IPT1.NUM(/1)
  192. C NBEL est le nombre d'element de type NOM0
  193. NBEL=IPT1.NUM(/2)
  194.  
  195. C On declare un segment IZAFM par composante
  196. SEGINI IPM1
  197. LIZAFM(L,1)=IPM1
  198.  
  199. IF (IDIM.EQ.2) THEN
  200. SEGINI IPM2
  201. LIZAFM(L,2)=IPM2
  202. ELSE IF (IDIM.EQ.3) THEN
  203. SEGINI IPM2
  204. SEGINI IPM3
  205. LIZAFM(L,2)=IPM2
  206. LIZAFM(L,3)=IPM3
  207. END IF
  208.  
  209. C Nombre total de points NTP
  210. NPT=IZTGG2.VPOCHA(/1)
  211.  
  212. C On recupere le tableau contenant les integrales
  213. C de fonction test
  214. MCHAML=ICHAML(L)
  215. SEGACT MCHAML
  216. MELVAL=IELVAL(1)
  217. SEGACT MELVAL
  218. SEGACT MELEMC
  219. C ******
  220. CALL XCNEF0(NBEL,NP,MP,IPM1.AM,IZTGG1.VPOCHA,IZTGG2
  221. & .VPOCHA,IZTGG3.VPOCHA,NPT,IDIM,IDCEN,XYZ,
  222. & NUTOEL,XCOOR,IPT1.NUM,MLENTI.LECT,IPM2.AM,IPM3.AM,
  223. & FN,GR,PG,HR,PGSQ,RPG,NES,NPG,IAXI,VELCHE,
  224. & NBME,IZTGG3.VPOCHA,IZTCO.VPOCHA,NELZ,
  225. & IKR,IKU,IKM,IZTU1.VPOCHA,AIMPL,MLENT1.LECT,DT,
  226. & MELEMC)
  227. C ******
  228. SEGDES MELEMC
  229. SEGDES IPT1,IPM1,IPM2
  230. IF (IDIM.EQ.3) THEN
  231. SEGDES IPM3
  232. END IF
  233. SEGDES MCHAML,MELVAL
  234. SEGSUP IZHR,IZFFM
  235.  
  236.  
  237. C On met a jour le nombre d'element total (quelquesoit son type)
  238. NUTOEL=NUTOEL+NBEL
  239. END DO
  240.  
  241. C==========Fin Boucle principale==========C
  242.  
  243. C On desactive les segments
  244.  
  245. SEGDES MELEME
  246. SEGDES MCHELM
  247.  
  248. C Si IKR = 0 alors IZTGG1 (coef 1) est un CHPOINT
  249. C que l'on desactive.
  250. IF(IKR.EQ.0)THEN
  251. SEGDES IZTGG1
  252. ENDIF
  253.  
  254. C On ecrit dans la table KONV la matrice elementaire
  255. C de l'operateur
  256. CALL ECMO(KIZX,'MATELM','MATRIK',MATRIK)
  257.  
  258. SEGDES IMATRI,MATRIK
  259. RETURN
  260.  
  261. END
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  

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