Télécharger impos4.eso

Retour à la liste

Numérotation des lignes :

impos4
  1. C IMPOS4 SOURCE CB215821 20/11/25 13:30:17 10792
  2. SUBROUTINE IMPOS4
  3. c
  4. c sous routine pour l'opérateur IMPO option CONT
  5. c qui donne le contour des contacts à partir de la rigidite
  6. c active calculée par impos4.eso
  7. c
  8. c
  9. c
  10. c entree:
  11. c IPRIG pointeur sur l
  12. c sortie:
  13. c MAIL2 = contour des surfaces en contact formé d'elements SEG2
  14. c
  15. c
  16. IMPLICIT INTEGER(I-N)
  17. IMPLICIT REAL*8 (A-H,O-Z)
  18. LOGICAL FLAG1
  19.  
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC SMCOORD
  23. -INC SMELEME
  24. -INC SMRIGID
  25. -INC SMCHPOI
  26. SEGMENT MCTC
  27. c mctc contient les surface en vis a vis
  28. INTEGER IPOT1(NNO1)
  29. INTEGER IPOT2(NNO2)
  30. ENDSEGMENT
  31. POINTEUR MCTC1.MCTC,MCTC2.MCTC
  32. c
  33. SEGMENT LCTC
  34. c imctc pointe vers les mctc
  35. INTEGER IMCTC(NBELEM,2)
  36. ENDSEGMENT
  37. c
  38. SEGMENT MPLX
  39. c contient les numero de points qui supportent un composante
  40. c 'lx'
  41. INTEGER IPLX(NPLX)
  42. ENDSEGMENT
  43. c
  44. c executable:
  45. IF ( IDIM .NE. 2 ) THEN
  46. INTERR(1) = IDIM
  47. RETURN
  48. ENDIF
  49. c
  50. CALL LIROBJ ('MAILLAGE',MELEME,1,IRETOU)
  51. IF (IERR.NE.0) RETURN
  52. CALL LIROBJ ('CHPOINT ',MCHPOI,1,IRETOU)
  53. IF (IERR.NE.0) RETURN
  54. c
  55. SEGACT MCHPOI
  56. NPLX = 0
  57. SEGINI MPLX
  58. c boucle sur les msoupo pour remplir mplx de tous les points
  59. c supportant une composante nommée 'lx'
  60. DO 300 I=1,IPCHP(/1)
  61. MSOUPO = IPCHP(I)
  62. SEGACT MSOUPO
  63. c boucle sur les noms de composantes
  64. DO 200 J=1,NOCOMP(/2)
  65. IF ( NOCOMP(J) .EQ. 'LX' ) THEN
  66. IPT1 = IGEOC
  67. SEGACT IPT1
  68. NNPLX = NPLX
  69. * print *, 'nplx=',nplx
  70. NPLX = NPLX + IPT1.NUM(/2)
  71. SEGADJ MPLX
  72. c on remplit mplx
  73. DO 100 K = 1,IPT1.NUM(/2)
  74. * print *,'noeud actif',IPT1.NUM(1,K)
  75. IPLX(NNPLX+K)=IPT1.NUM(1,K)
  76. 100 CONTINUE
  77. SEGDES IPT1
  78. ENDIF
  79. 200 CONTINUE
  80. SEGDES MSOUPO
  81. 300 CONTINUE
  82. SEGDES MCHPOI
  83. *
  84. * PRINT *,'nplx=',nplx
  85. *
  86. c
  87. SEGACT MELEME
  88. c on attend un maillage d'elements type 22 a 4 noeuds
  89. IF (ITYPEL .NE. 22 .OR. NUM(/1) .NE. 4) THEN
  90. CALL ERREUR(26)
  91. ENDIF
  92. c
  93. NBELEM = NUM(/2)
  94. NB = NBELEM
  95. *
  96. * PRINT *,'NBELEM=',nbelem
  97. *
  98. * remplissage du segment lctc
  99. *
  100. SEGINI LCTC
  101. DO 600 I=1,NBELEM
  102. c l'element est il actif
  103. I1 = NUM(1,I)
  104. * print *,'noeud lx ',i1
  105. FLAG1 = .FALSE.
  106. DO 400 J=1,NPLX
  107. IF (IPLX(J) .EQ. I1 ) FLAG1 = .TRUE.
  108. 400 CONTINUE
  109. c
  110. IF (FLAG1) THEN
  111. *
  112. * PRINT *,'element actif'
  113. *
  114. c l'element est actif on cree un mctc elementaire de trois points
  115. NNO1 = 2
  116. NNO2 = 1
  117. SEGINI MCTC
  118. IM2 = MCTC
  119. IPOT1(1) = NUM(2,I)
  120. IPOT1(2) = NUM(3,I)
  121. IPOT2(1) = NUM(4,I)
  122. c
  123. DO 500 J=1,I-1
  124. c on test si le mctc a un point commun avec
  125. c ceux deja mis
  126. IM1 = IMCTC(J,1)
  127. IF ( IMCTC(J,2) .NE. 0) THEN
  128. * points communs ?
  129. CALL IMPOS5(IM1,IM2,IRET)
  130. IF (IRET .NE. 0) THEN
  131. * assemblage des deux mctc
  132. c im2 est remplace par le mctc resulatant de
  133. c l'assemblage
  134. CALL IMPOS6(IM1,IM2,IRET)
  135. c invalidation du mctc im1
  136. IMCTC(J,2)=0
  137. ENDIF
  138. ENDIF
  139. 500 CONTINUE
  140. IMCTC(I,1)=IM2
  141. IMCTC(I,2)=1
  142. c
  143. ENDIF
  144. 600 CONTINUE
  145. SEGDES MELEME
  146. c
  147. c creation du maillage correspondant formé de seg2
  148. c
  149. c
  150. NBELEM = 0
  151. DO 700 I=1,NB
  152. IF (IMCTC(I,2) .EQ. 1) THEN
  153. MCTC = IMCTC(I,1)
  154. NBELEM = NBELEM + IPOT1(/1) + IPOT2(/1)
  155. ENDIF
  156. 700 CONTINUE
  157. NBREF = 0
  158. NBNN = 2
  159. NBSOUS = 0
  160. SEGINI MELEME
  161. MAIL1 = MELEME
  162. ITYPEL = 2
  163. c
  164. INDI1 = 0
  165. DO 1000 I=1,NB
  166. MCTC = IMCTC(I,1)
  167. IF (IMCTC(I,2) .EQ. 1) THEN
  168. c ligne inferieure
  169. DO 800 J = 1,(IPOT1(/1)-1)
  170. INDI1 = INDI1 + 1
  171. NUM(1,INDI1)=IPOT1(J+1)
  172. NUM(2,INDI1)=IPOT1(J)
  173. 800 CONTINUE
  174. c premiere interconnection
  175. INDI1 = INDI1 + 1
  176. NNN = IPOT1(/1)
  177. NUM(1,INDI1 )=IPOT2(1)
  178. NUM(2,INDI1 )=IPOT1(NNN)
  179.  
  180. c ligne superieure
  181. DO 900 J = 1,(IPOT2(/1)-1)
  182. INDI1 = INDI1 + 1
  183. NUM(1,INDI1)=IPOT2(J+1)
  184. NUM(2,INDI1)=IPOT2(J)
  185. 900 CONTINUE
  186. c deuxieme interconnection
  187. INDI1 = INDI1 + 1
  188. NNN = IPOT2(/1)
  189. NUM(1,INDI1)=IPOT1(1)
  190. NUM(2,INDI1)=IPOT2(NNN)
  191. ENDIF
  192. SEGSUP MCTC
  193. 1000 CONTINUE
  194. c desactivation des meleme
  195. SEGSUP LCTC,MPLX
  196. MELEME = MAIL1
  197. SEGDES MELEME
  198. CALL ECROBJ('MAILLAGE',MELEME)
  199. RETURN
  200. END
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  

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