Télécharger poirig.eso

Retour à la liste

Numérotation des lignes :

poirig
  1. C POIRIG SOURCE SP204843 25/02/19 21:15:03 12161
  2. SUBROUTINE POIRIG(IPIRG,IMUL)
  3. C
  4. C EXTRACTION DE MAILLAGE D'UNE RIGIDITE
  5. C
  6. C----------------------------------------------------------------------
  7. C IMUL = 1 ON VEUT TOUS LES NOEUDS SAUF CEUX DES MULTIPLICATEURS
  8. C IMUL = 2 ON NE VEUT QUE LES NOEUDS DES MULTIPLICATEURS
  9. C IMUL = 3 ON NE VEUT QUE LES MULTILICATEURS ASSOCIES AUX JEUX
  10. C OU LES ELEMENTS GEOMETRQIUES DES CONTACTS UNILATERAUX
  11. C----------------------------------------------------------------------
  12. IMPLICIT INTEGER(I-N)
  13. -INC SMRIGID
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC SMELEME
  18. -INC SMCOORD
  19. logical ltelq
  20. SEGMENT ICPR(nbpts)
  21. SEGMENT MULTRI
  22. INTEGER ICTC(nbpts,3)
  23. ENDSEGMENT
  24. SEGMENT INDIC(0)
  25. CHARACTER NOMU(1)*4
  26. DATA NOMU /'TRI3'/
  27.  
  28. MRIGID=IPIRG
  29. if (mrigid.le.0) then
  30. call erreur(26)
  31. return
  32. endif
  33. SEGACT MRIGID
  34. NR=IRIGEL(/2)
  35. IPP1=0
  36. IF(IMUL.NE.3) GO TO 1000
  37. C
  38. C cas de l'extraction des multiplicateurs associes a des conditions
  39. C unilaterales option 'UNIL'
  40. C
  41. CALL LIRMOT(NOMU,1,IRET,0)
  42. C
  43. IF (IRET.EQ.1) THEN
  44. C cas ou l'on sort des tri3
  45. ITRI3 = 0
  46. C itri3 ets le nombre de tri3 generes
  47. SEGINI MULTRI
  48. DO 500 I=1,NR
  49. IF(IRIGEL(6,I).EQ.0) GO TO 500
  50. MELEME = IRIGEL( 1,I)
  51. IF (MELEME .EQ. 0) GO TO 500
  52. SEGACT MELEME
  53. IF ( ITYPEL.NE.22) THEN
  54. CALL ERREUR(5)
  55. RETURN
  56. ENDIF
  57. IF ( NUM(/1) .EQ. 5 ) THEN
  58. C les élements contiennent 3 points geometriques
  59. DO 510 J=1,NUM(/2)
  60. ITRI3 = ITRI3 + 1
  61. ICTC(ITRI3,1)=NUM(3,J)
  62. ICTC(ITRI3,2)=NUM(4,J)
  63. ICTC(ITRI3,3)=NUM(5,J)
  64. 510 CONTINUE
  65. ENDIF
  66. 500 CONTINUE
  67. C construction de l'objet meleme
  68. NBSOUS = 0
  69. NBREF = 0
  70. NBNN = 3
  71. NBELEM = ITRI3
  72. SEGINI MELEME
  73. ITYPEL = 4
  74. DO 520 I=1,ITRI3
  75. C ici on peut tester si les elements sont bien orientes
  76. C avec l'inversion 2,1 ca devrait marcher
  77. NUM(1,I)=ICTC(I,2)
  78. NUM(2,I)=ICTC(I,1)
  79. NUM(3,I)=ICTC(I,3)
  80. 520 CONTINUE
  81. SEGSUP MULTRI
  82. CALL ACTOBJ('MAILLAGE',MELEME,1)
  83. CALL ECROBJ('MAILLAGE',MELEME)
  84. RETURN
  85. ENDIF
  86. C
  87. C cas ou l'on ne sort que les points supports des
  88. C multiplicateurs de conditions unilaterales
  89. C octobre 2010 on met en queue les frottements
  90. C
  91. SEGINI ICPR
  92. DO 1100 I=1,NR
  93. IF(IRIGEL(6,I).EQ.0) GO TO 1100
  94. ityp=irigel(6,i)
  95. MELEME = IRIGEL( 1,I)
  96. IF (MELEME .EQ. 0) GO TO 1100
  97. SEGACT MELEME
  98. IF ( ITYPEL.NE.22) THEN
  99. GO TO 1100
  100. ENDIF
  101. DO 1101 J=1,NUM(/2)
  102. ICPR(NUM(1,J))=ityp
  103. 1101 CONTINUE
  104. 1100 CONTINUE
  105. NBELEM=0
  106. DO 1102 I=1,ICPR(/1)
  107. if (icpr(i).ne.0) NBELEM=NBELEM + 1
  108. 1102 CONTINUE
  109. NBNN = 1
  110. NBSOUS=0
  111. NBREF=0
  112. SEGINI MELEME
  113. IA=1
  114. ITYPEL=1
  115. DO 1103 I=1,ICPR(/1)
  116. IF( ICPR(I).ne.-1) GO TO 1103
  117. NUM(1,IA)=I
  118. IA = IA + 1
  119. 1103 CONTINUE
  120. DO 1104 I=1,ICPR(/1)
  121. IF( ICPR(I).ne. 1) GO TO 1104
  122. NUM(1,IA)=I
  123. IA = IA + 1
  124. 1104 CONTINUE
  125. DO 1105 I=1,ICPR(/1)
  126. IF( ICPR(I).ne. 2) GO TO 1105
  127. NUM(1,IA)=I
  128. IA = IA + 1
  129. 1105 CONTINUE
  130. CALL ACTOBJ('MAILLAGE',MELEME,1)
  131. CALL ECROBJ('MAILLAGE',MELEME)
  132. SEGSUP ICPR
  133. RETURN
  134. C
  135. C CAS IMUL = 1 OU 2
  136. C
  137. C BOUCLE SUR LES RIGIDITES ELEMENTAIRES
  138. C
  139. 1000 CONTINUE
  140. SEGINI INDIC
  141. DO 191 I=1,NR
  142. IGEO=IRIGEL(1,I)
  143. MELEME=IGEO
  144. SEGACT MELEME
  145. C
  146. C TEST SUR LE TYPE D ELEMENT ( EGAL A MULT ? )
  147. C
  148. C write(6,*) 'poirig:itypel=',itypel
  149. IF(ITYPEL.NE.22) THEN
  150. IF(IMUL.EQ.2) GO TO 191
  151. IF(IPP1.EQ.0) THEN
  152. IPP1=IGEO
  153. GO TO 191
  154. ELSE
  155. IPP2=IGEO
  156. ltelq=.false.
  157. CALL FUSE(IPP1,IPP2,IRET,ltelq)
  158. IPP1=IRET
  159. GO TO 191
  160. ENDIF
  161. ELSE
  162. C
  163. C TRAITEMENT D'UN ELEMENT DE TYPE BLOCAGE,RELATION,....
  164. C
  165. IF(IMUL.EQ.1) THEN
  166. NBDEB=2
  167. NBFIN=NUM(/1)
  168. ELSE IF(IMUL.EQ.2) THEN
  169. NBDEB=1
  170. NBFIN=1
  171. ENDIF
  172. ENDIF
  173. C
  174. C write(6,*) 'poirig:NBDEB,NBFIN=',NBDEB,NBFIN
  175. NBPOIN=NUM(/2)
  176. DO 199 J=1,NBPOIN
  177. DO 198 IJ=NBDEB,NBFIN
  178. C
  179. C BOUCLE SUR LES POINTS EXISTANTS
  180. C
  181. NINDIC=INDIC(/1)
  182. DO 302 IK=1,NINDIC,2
  183. IF(INDIC(IK).EQ.NUM(IJ,J)) GO TO 303
  184. 302 CONTINUE
  185. INDIC(**)=NUM(IJ,J)
  186. INDIC(**)=ICOLOR(J)
  187. 303 CONTINUE
  188. 198 CONTINUE
  189. 199 CONTINUE
  190. 191 CONTINUE
  191. SEGDES MRIGID
  192. C
  193. C REMPLISSAGE DU RESULTAT
  194. C
  195. NBELEM=INDIC(/1)/2
  196. C write(6,*) 'poirig: NBELEM=',NBELEM
  197. IF (NBELEM.EQ.0.AND.IPP1.EQ.0.AND.IMUL.EQ.1) THEN
  198. C IF(IMUL.EQ.1) GO TO 211
  199. CALL ERREUR(503)
  200. RETURN
  201. ENDIF
  202. NBNN=1
  203. NBSOUS=0
  204. NBREF=0
  205. SEGINI IPT1
  206. IPT1.ITYPEL=1
  207. DO 1001 IP=1,NBELEM
  208. IP2=2*IP
  209. IP1=IP2-1
  210. IPT1.NUM(1,IP)=INDIC(IP1)
  211. IPT1.ICOLOR(IP)=INDIC(IP2)
  212. 1001 CONTINUE
  213. IF(IPP1.EQ.0) THEN
  214. IPP1=IPT1
  215. ELSE
  216. ltelq=.false.
  217. CALL FUSE(IPP1,IPT1,IRET,ltelq)
  218. IPP1=IRET
  219. ENDIF
  220. 211 SEGSUP INDIC
  221. CALL ACTOBJ('MAILLAGE',IPP1,1)
  222. CALL ECROBJ('MAILLAGE',IPP1)
  223. END
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  

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