Télécharger rigsux.eso

Retour à la liste

Numérotation des lignes :

rigsux
  1. C RIGSUX SOURCE CB215821 24/04/12 21:17:12 11897
  2.  
  3. SUBROUTINE RIGSUX(ISOU ,IPOI6, IMODEL)
  4.  
  5. C---------------------------------------------------------------------*
  6. C subroutine construisant les sousmatrices de rigidité pour les
  7. C sous-modeles de type SURE XFEM :
  8. C itypel=48, nformod=259, mfr=63
  9. C---------------------------------------------------------------------*
  10. C---------------------------------------------------------------------*
  11. C *
  12. C ENTREES : *
  13. C ________ *
  14. C *
  15. C IMODEL pointeur sur le sous modele de sure *
  16. C ENTREES/SORTIE : *
  17. C ________ *
  18. C *
  19. C IPOI6 pointeur sur la rigidite construite *
  20. C ISOU compteur des sous matrices de rigidite construite *
  21. C---------------------------------------------------------------------*
  22. c
  23. IMPLICIT REAL*8 (A-H,O-Z)
  24. IMPLICIT INTEGER (I-N)
  25. C
  26.  
  27. -INC PPARAM
  28. -INC CCOPTIO
  29. -INC SMRIGID
  30. C-INC SMINTE
  31. -INC SMMODEL
  32. -INC SMELEME
  33. -INC CCHAMP
  34. -INC CCGEOME
  35. -INC SMCHAML
  36. -INC SMCOORD
  37. POINTEUR MCHEX1.MCHELM
  38. C
  39.  
  40. C
  41. C Petit tableau des "couleurs" des relations de conformite
  42. DIMENSION LCOLOR(6)
  43. DATA LCOLOR / 1, 3, 6, 10, 16, 24 /
  44. C
  45. MELEME=imamod
  46. SEGACT, MELEME
  47. IDEBUT = LCOLOR(ICOLOR(1)) - 3
  48.  
  49. c récupérations du nom des composantes du modele de sure
  50. nomid=IMODEL.lnomid(1)
  51. SEGACT, nomid
  52. c récupération du champ d'enrichissement
  53. c MCHEX1= IMODEL.IVAMOD(1)
  54. c SEGACT, MCHEX1
  55. c MCHAM1= MCHEX1.ICHAML(1)
  56. MCHAM1= IMODEL.IVAMOD(1)
  57. SEGACT, MCHAM1
  58. IPT5 = IMODEL.IMAMOD
  59. c IPT5 = MCHEX1.IMACHE(1)
  60.  
  61. SEGACT IPT5
  62. C**********************************************************************
  63. C Boucle sur les composantes primales facultatives du sure
  64. C**********************************************************************
  65. ICOMP=0
  66. DO 1 ICOMP=1,nomid.lesfac(/2)
  67. C++++ choix du type d'enrichisement de la composante ICOMP
  68. IF (nomid.lesfac(ICOMP).EQ.'AX') MELVA1=MCHAM1.IELVAL(1)
  69. IF (nomid.lesfac(ICOMP).EQ.'AY') MELVA1=MCHAM1.IELVAL(1)
  70. IF (nomid.lesfac(ICOMP).EQ.'AZ') MELVA1=MCHAM1.IELVAL(1)
  71.  
  72. IF (nomid.lesfac(ICOMP).EQ.'B1X') MELVA1=MCHAM1.IELVAL(2)
  73. IF (nomid.lesfac(ICOMP).EQ.'B1Y') MELVA1=MCHAM1.IELVAL(2)
  74. IF (nomid.lesfac(ICOMP).EQ.'B1Z') MELVA1=MCHAM1.IELVAL(2)
  75. IF (nomid.lesfac(ICOMP).EQ.'C1X') MELVA1=MCHAM1.IELVAL(2)
  76. IF (nomid.lesfac(ICOMP).EQ.'C1Y') MELVA1=MCHAM1.IELVAL(2)
  77. IF (nomid.lesfac(ICOMP).EQ.'C1Z') MELVA1=MCHAM1.IELVAL(2)
  78. IF (nomid.lesfac(ICOMP).EQ.'D1X') MELVA1=MCHAM1.IELVAL(2)
  79. IF (nomid.lesfac(ICOMP).EQ.'D1Y') MELVA1=MCHAM1.IELVAL(2)
  80. IF (nomid.lesfac(ICOMP).EQ.'D1Z') MELVA1=MCHAM1.IELVAL(2)
  81. IF (nomid.lesfac(ICOMP).EQ.'E1X') MELVA1=MCHAM1.IELVAL(2)
  82. IF (nomid.lesfac(ICOMP).EQ.'E1Y') MELVA1=MCHAM1.IELVAL(2)
  83. IF (nomid.lesfac(ICOMP).EQ.'E1Z') MELVA1=MCHAM1.IELVAL(2)
  84.  
  85. IF (nomid.lesfac(ICOMP).EQ.'B2X') MELVA1=MCHAM1.IELVAL(3)
  86. IF (nomid.lesfac(ICOMP).EQ.'B2Y') MELVA1=MCHAM1.IELVAL(3)
  87. IF (nomid.lesfac(ICOMP).EQ.'B2Z') MELVA1=MCHAM1.IELVAL(3)
  88. IF (nomid.lesfac(ICOMP).EQ.'C2X') MELVA1=MCHAM1.IELVAL(3)
  89. IF (nomid.lesfac(ICOMP).EQ.'C2Y') MELVA1=MCHAM1.IELVAL(3)
  90. IF (nomid.lesfac(ICOMP).EQ.'C2Z') MELVA1=MCHAM1.IELVAL(3)
  91. IF (nomid.lesfac(ICOMP).EQ.'D2X') MELVA1=MCHAM1.IELVAL(3)
  92. IF (nomid.lesfac(ICOMP).EQ.'D2Y') MELVA1=MCHAM1.IELVAL(3)
  93. IF (nomid.lesfac(ICOMP).EQ.'D2Z') MELVA1=MCHAM1.IELVAL(3)
  94. IF (nomid.lesfac(ICOMP).EQ.'E2X') MELVA1=MCHAM1.IELVAL(3)
  95. IF (nomid.lesfac(ICOMP).EQ.'E2Y') MELVA1=MCHAM1.IELVAL(3)
  96. IF (nomid.lesfac(ICOMP).EQ.'E2Z') MELVA1=MCHAM1.IELVAL(3)
  97.  
  98. SEGACT MELVA1
  99.  
  100. C====================
  101. c creation d'un maillage de multiplicateurs de lagranges enrichis
  102. C====================
  103. NBNN=NUM(/1)+1
  104. NBELEM=NUM(/2)
  105. NBSOUS=0
  106. NBREF=0
  107. SEGINI, IPT4
  108. IPT4.ITYPEL=22
  109. IELENR=0
  110. c++++ BOUCLE sur les éléments de ipt5
  111. DO 2 JELEM=1,IPT5.NUM(/2)
  112. NEXIST=0
  113. ipt4.icolor(jelem)=IPT5.icolor(jelem)
  114. JNUM = IPT5.NUM(1,JELEM)
  115. c+++ Recherche d'une valeur non nulle du champ d'enrichissement
  116. VENR1 = MELVA1.VELCHE(1,JELEM)
  117.  
  118. C On prend les elements dont le hanging node est enrichi
  119. IF (VENR1.GT.0) THEN
  120. NEXIST=NEXIST+1
  121. C On prend les element dont tout les autres noeuds sont enrichis
  122. ELSE
  123. DO 21 JNOEUD= 2 , IPT5.NUM(/1)
  124. VENR1 = MELVA1.VELCHE(JNOEUD,JELEM)
  125. IF (VENR1.eq.0) GOTO 21
  126. NEXIST=NEXIST+1
  127. 21 CONTINUE
  128. ENDIF
  129. IF (nexist.eq.0) GOTO 2
  130. IELENR= IELENR+1
  131. C On recopie dans IPT4 les elements de ipt5 sur lequel on veux
  132. c imposer une relation de compatibilité
  133. DO 22 I=1,IPT5.NUM(/1)
  134. IPT4.NUM(I+1,IELENR)=IPT5.NUM(I,JELEM)
  135. 22 CONTINUE
  136.  
  137. 2 CONTINUE
  138. NBELEM=IELENR
  139. SEGADJ IPT4
  140. IF (ielenr.eq.0) goto 1
  141.  
  142.  
  143.  
  144. C=======================================================================
  145. C creation n'un nouveau noeud pour supporter chaque multiplicateur de lagrange
  146. C=======================================================================
  147. SEGACT,MCOORD*MOD
  148. NBPT1=nbpts
  149. NBPTS=NBPT1+IELENR
  150. SEGADJ,MCOORD
  151. DO 3 J=1,IPT4.NUM(/2)
  152. NGLOB=(NBPT1+J-1)*(IDIM+1)
  153. C remplissage des coordonees des nouveux points
  154. DO 31 ID= 1,IDIM
  155. XCOOR(NGLOB+ID)=XCOOR((IPT4.NUM(2,J)-1)*(IDIM+1)+ID)
  156. 31 CONTINUE
  157. IPT4.NUM(1,J) = NBPT1 + J
  158. 3 CONTINUE
  159. SEGACT,MCOORD
  160.  
  161. C====================
  162. C *** SEGMENT XMATRI
  163. C====================
  164. NLIGRD=IPT4.NUM(/1)
  165. NLIGRP=NLIGRD
  166. NELRIG=IPT4.NUM(/2)
  167. SEGINI, XMATRI
  168. c++++ BOUCLE sur les éléments de ipt4
  169. DO 4 IELEM=1,NELRIG
  170. RE(1,2,IELEM)=-1.
  171. RE(2,1,IELEM)=-1.
  172. DO 41 ICAZ=3,NLIGRD
  173. RE(1,ICAZ,IELEM)=XCOEFF(IDEBUT+ICAZ)
  174. RE(ICAZ,1,IELEM)=RE(1,ICAZ,IELEM)
  175. 41 CONTINUE
  176. 4 CONTINUE
  177. C write(*,*) 'COMPOSANTE FACULTATIVE DU SURE :'
  178. C write(*,*) (nomid.lesfac(ICOMP))
  179. C write(*,*) 'MATRICE elementaire :'
  180. C DO 6666 I=1,NLIGRD
  181. C write(*,*) (RE(i,iou,1), iou=1,NLIGRD)
  182. C 6666 CONTINUE
  183.  
  184. C====================
  185. C *** SEGMENT DESCR
  186. C====================
  187.  
  188. NEXIST=0
  189. DO 5 ICO1=1,LNOMDD
  190. IF (NOMDD(ICO1).EQ.nomid.lesfac(ICOMP)) NEXIST = ICO1
  191. 5 CONTINUE
  192.  
  193. IF (NEXIST.EQ.0) THEN
  194. CALL ERREUR(837)
  195. ENDIF
  196.  
  197. SEGINI, DESCR
  198. LISINC(1)='LX '
  199. LISDUA(1)='FLX '
  200. NOELEP(1)=1
  201. NOELED(1)=1
  202. DO 6 ICO2=2,NLIGRD
  203. LISINC(ICO2)=NOMDD(NEXIST)
  204. LISDUA(ICO2)=NOMDU(NEXIST)
  205. NOELEP(ico2)=ico2
  206. NOELED(ico2)=ico2
  207. 6 CONTINUE
  208.  
  209. C====================
  210. C *** SEGMENT MRIGID
  211. C====================
  212. MRIGID=IPOI6
  213. SEGACT, MRIGID*mod
  214.  
  215. C Ajustement du segment rigidite
  216. nrigel=IRIGEL(/2)+1
  217. SEGADJ, MRIGID
  218. isou = isou+1
  219.  
  220.  
  221. C* ICHOLE=0
  222. C* IMGEO1=0
  223. C* IMGEO2=0
  224. C* IFORIG=IFOUR
  225. C* ISUPEQ=0
  226. COERIG(isou)=1.
  227. IRIGEL(1,isou)=IPT4
  228. IRIGEL(2,isou)=0
  229. IRIGEL(3,isou)=DESCR
  230. IRIGEL(4,isou)=XMATRI
  231. IRIGEL(5,isou)=0
  232. IRIGEL(6,isou)=0
  233. IRIGEL(7,isou)=0
  234. IRIGEL(8,isou)=0
  235.  
  236. C SEGDES, MRIGID
  237. SEGDES, DESCR
  238. SEGDES, XMATRI
  239. SEGDES, IPT4
  240. C**********************************************************************
  241. C FIN Boucle sur les composantes primales facultatives du sure
  242. C**********************************************************************
  243. 1 CONTINUE
  244.  
  245. SEGDES, nomid
  246.  
  247.  
  248. RETURN
  249. END
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  

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