Télécharger racpor.eso

Retour à la liste

Numérotation des lignes :

racpor
  1. C RACPOR SOURCE CB215821 22/03/07 21:15:04 11307
  2. C
  3. C FABRIQUE LES ELEMENTS RACCORD POUR LES ELEMENTS JOINT POREUX (BALD).
  4. C CES ELEMENTS JOINTS SONT COMPOSES PAR TROIS LIGNES: LES LIGNES TOP
  5. C ET BOT SONT MAILLEES AVEC DES ELEMENTS SEG3, LA LIGNE AU MILIEU AVEC
  6. C DES SEG2. L'ELEMENT RACCORD CREE A 8 NOEUDS.
  7. C
  8. SUBROUTINE RACPOR(IPT1,IPT2,IPT3,MELEME,PREC)
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8(A-H,O-Z)
  11.  
  12. -INC PPARAM
  13. -INC CCOPTIO
  14. -INC CCGEOME
  15. -INC CCREEL
  16. -INC SMELEME
  17. -INC SMCOORD
  18. SEGMENT MTRAV
  19. REAL*8 TA(NBELEM)
  20. INTEGER NP1(NBELE1),NP2(NBELE1)
  21. ENDSEGMENT
  22. C* DIMENSION ITEST(0:NBCOUL-1) - NBCOUL stocke dans CCGEOME
  23. DIMENSION ITEST(0:30)
  24.  
  25. IDIMP1 = IDIM+1
  26. SEGACT MCOORD
  27. PREC3=3.*PREC
  28. TMAX=-XGRAND
  29. TMIN= XGRAND
  30. NB1=IPT1.NUM(/2)
  31. NB2=IPT2.NUM(/2)
  32. NB3=IPT3.NUM(/2)
  33. NBMAX=MIN(NB1,NB2,NB3)
  34. NBNN=IPT1.NUM(/1)
  35. NBNM=IPT3.NUM(/1)
  36. IF ((NBNN.NE.IPT2.NUM(/1)).OR.(NBNN.EQ.NBNM).OR.
  37. . (NBSOM(IPT1.ITYPEL).NE.NBSOM(IPT3.ITYPEL))) THEN
  38. CALL ERREUR(16)
  39. RETURN
  40. ENDIF
  41. DO 40 I=0,(NBCOUL-1)
  42. ITEST(I)=0
  43. 40 CONTINUE
  44. DO 41 I=1,NB1
  45. ITEST(IPT1.ICOLOR(I))=1
  46. 41 CONTINUE
  47. DO 42 I=1,NB2
  48. ITEST(IPT2.ICOLOR(I))=1
  49. 42 CONTINUE
  50. DO 43 I=1,NB3
  51. ITEST(IPT3.ICOLOR(I))=1
  52. 43 CONTINUE
  53. ICHCOL=-1
  54. DO 44 I=0,(NBCOUL-1)
  55. IF (ITEST(I).EQ.1) THEN
  56. IF (ICHCOL.EQ.-1) THEN
  57. ICHCOL=I
  58. ELSE
  59. ICHCOL=ITABM(ICHCOL,I)
  60. ENDIF
  61. ENDIF
  62. 44 CONTINUE
  63. NBELEM=NB2
  64. NBELE1=NBELEM+1
  65. SEGINI MTRAV
  66. DO 11 I=1,NB2
  67. Z=0.
  68. DO 12 J=1,NBNN
  69. IREF=IPT2.NUM(J,I)*IDIMP1-IDIM
  70. Z=Z+XCOOR(IREF)+XCOOR(IREF+1)
  71. IF (IDIM.NE.2) Z=Z+XCOOR(IREF+2)
  72. 12 CONTINUE
  73. Z=Z/NBNN
  74. TA(I)=Z
  75. IF(Z.GT.TMAX) TMAX=Z
  76. IF(Z.LT.TMIN) TMIN=Z
  77. 11 CONTINUE
  78. C
  79. C CLASSEMENT APPROXIMATIF PAR ' DISTANCE '
  80. C
  81. IF (ABS(TMAX).GE.XPETIT) THEN
  82. IF ((TMAX-TMIN)/TMAX.GE.1E-6) GOTO 6
  83. ENDIF
  84. TMAX=TMAX+1.D0
  85. TMIN=TMIN-1.D0
  86.  
  87. 6 CONTINUE
  88. TDEC=(TMAX-TMIN)/NBELEM*1.0001D0
  89. N = PREC/TDEC + 1.D0
  90. C* Boucle 3 redondante avec SEGINI,MTRAV
  91. C* DO 3 I=1,NBELE1
  92. C* 3 NP1(I)=0
  93. DO 4 I=1,NBELEM
  94. IPLA=(TA(I)-TMIN)/TDEC+1.D0
  95. 4 NP1(IPLA)=NP1(IPLA)+1
  96. DO 400 I=2,NBELE1
  97. 400 NP1(I)=NP1(I-1)+NP1(I)
  98. DO 5 I=1,NBELEM
  99. IPLA=(TA(I)-TMIN)/TDEC+1.D0
  100. IPLB=NP1(IPLA)
  101. NP1(IPLA)=NP1(IPLA)-1
  102. NP2(IPLB)=I
  103. 5 CONTINUE
  104. C
  105. C DANS NP1 ADDRESSE DU DEBUT DE ZONE
  106. C DANS NP2 NUMERO DES ELEMENTS EN NUMEROTATION LOCALE
  107. C DANS TA DISTANCE DES ELEMENTS
  108. C
  109. C IL FAUT PREPARER LE SEGMENT TAMPON OU METTRE LES ELEMS CREES.
  110. NBREF=0
  111. NBSOUS=0
  112. NBNNOR=NBNN
  113. NBNN=2*NBNN+NBNM
  114. NBELEM=NB1+NB2
  115. SEGINI MELEME
  116. IPT4=MELEME
  117. NBT=NBELEM
  118. NBELEM=NB2
  119. NUMELG=0
  120. C
  121. C BOUCLE SUR TOUS LES ELEMENTS POUR CONNAITRE LEUR FACES ET REGARDER SI
  122. C LE CENTRE DE GRAVITE EST CONFONDU A PREC PRES DE CELUI D'UN ELEMENT
  123. C COQUE
  124. C
  125. DO 20 I=1,NB1
  126. ZAA=0.
  127. DO 21 J=1,NBNNOR
  128. IREF=IPT1.NUM(J,I)*IDIMP1-IDIM
  129. ZAA=ZAA+XCOOR(IREF)+XCOOR(IREF+1)
  130. IF (IDIM.NE.2) ZAA=ZAA+XCOOR(IREF+2)
  131. 21 CONTINUE
  132. ZAA=ZAA/NBNNOR
  133. IZO=(ZAA-TMIN)/TDEC+1.D0
  134. IZO1=IZO-N
  135. IZO2=IZO+N
  136. IF(IZO1.LT.1) IZO1=1
  137. IF(IZO2.GT.NBELEM) IZO2=NBELEM
  138. IF (IZO.LT.0.OR.IZO.GT.NBELE1) GOTO 20
  139. DO 28 IZO=IZO1,IZO2
  140. IDEP=NP1(IZO)+1
  141. IFIN=NP1(IZO+1)
  142. IF(IFIN.LT.IDEP) GO TO 28
  143. DO 23 JFA=IDEP,IFIN
  144. IB=NP2(JFA)
  145. IF(ABS(TA(IB)-ZAA).GT.PREC3) GO TO 23
  146. IREFA=IPT1.NUM(1,I)*IDIMP1-IDIM
  147. DO 24 IK=1,NBNNOR
  148. IREFB=IPT2.NUM(IK,IB)*IDIMP1-IDIM
  149. IF (ABS(XCOOR(IREFA)-XCOOR(IREFB)).GT.PREC) GOTO 24
  150. IF (ABS(XCOOR(1+IREFA)-XCOOR(1+IREFB)).GT.PREC) GOTO 24
  151. IF (ABS(XCOOR(2+IREFA)-XCOOR(2+IREFB)).GT.PREC.AND.IDIM.NE.2)
  152. # GOTO 24
  153. ISTA=IK
  154. GO TO 26
  155. 24 CONTINUE
  156. GO TO 23
  157. 26 CONTINUE
  158. ISENS=1
  159. ISTA1=ISTA+1
  160. ISTAA=ISTA
  161. IF (ISTA1.GT.NBNNOR) ISTA1=1
  162. IREFA=IPT1.NUM(2,I)*IDIMP1-IDIM
  163. IREFB=IPT2.NUM(ISTA1,IB)*IDIMP1-IDIM
  164. Z=XCOOR(IREFA)-XCOOR(IREFB)
  165. IF(ABS(Z).GT.PREC) ISENS=-1
  166. Z=XCOOR(IREFA+1)-XCOOR(IREFB+1)
  167. IF(ABS(Z).GT.PREC) ISENS=-1
  168. IF (IDIM.NE.2) THEN
  169. Z=XCOOR(IREFA+2)-XCOOR(IREFB+2)
  170. IF (ABS(Z).GT.PREC) ISENS=-1
  171. ENDIF
  172. DO 30 IJ=2,NBNNOR
  173. IREFA=IPT1.NUM(IJ,I)*IDIMP1-IDIM
  174. ISTAA=ISTAA+ISENS
  175. IF (ISTAA.EQ.0) ISTAA=NBNNOR
  176. IF (ISTAA.GT.NBNNOR) ISTAA=1
  177. IREFB=IPT2.NUM(ISTAA,IB)*IDIMP1-IDIM
  178. DO 32 KLP=1,IDIM
  179. Z=XCOOR(IREFA+KLP-1)-XCOOR(IREFB+KLP-1)
  180. IF(ABS(Z).GT.PREC) GO TO 23
  181. 32 CONTINUE
  182. 30 CONTINUE
  183. C
  184. IZC=(ZAA-TMIN)/TDEC+1.D0
  185. DO 33 IC=1,NB3
  186. ZAC=0.
  187. DO 31 J=1,NBNM
  188. IREF=IPT3.NUM(J,IC)*IDIMP1-IDIM
  189. ZAC=ZAC+XCOOR(IREF)+XCOOR(IREF+1)
  190. IF (IDIM.NE.2) ZAC=ZAC+XCOOR(IREF+2)
  191. 31 CONTINUE
  192. ZAC=ZAC/NBNM
  193. IF(ABS(ZAA-ZAC).GT.PREC3) GO TO 33
  194. C ON VIENT D'IDENTIFIER UN ELEMENT DE RACCOR ON VA LE CREER
  195. IREFA=IPT1.NUM(1,I)*IDIMP1-IDIM
  196. DO 34 IK=1,NBNM
  197. IREFB=IPT3.NUM(IK,IC)*IDIMP1-IDIM
  198. IF (ABS(XCOOR(IREFA)-XCOOR(IREFB)).GT.PREC) GOTO 34
  199. IF (ABS(XCOOR(1+IREFA)-XCOOR(1+IREFB)).GT.PREC) GOTO 34
  200. IF (ABS(XCOOR(2+IREFA)-XCOOR(2+IREFB)).GT.PREC.AND.IDIM.NE.2)
  201. # GOTO 34
  202. ISTC=IK
  203. GO TO 36
  204. 34 CONTINUE
  205. GO TO 33
  206. 36 CONTINUE
  207. ISENT=1
  208. ISTC1=ISTC+1
  209. ISTCC=ISTC
  210. IF (ISTC1.GT.NBNM) ISTC1=1
  211. IREFA=IPT1.NUM(3,I)*IDIMP1-IDIM
  212. IREFB=IPT3.NUM(ISTC1,IC)*IDIMP1-IDIM
  213. Z=XCOOR(IREFA)-XCOOR(IREFB)
  214. IF(ABS(Z).GT.PREC) ISENT=-1
  215. Z=XCOOR(IREFA+1)-XCOOR(IREFB+1)
  216. IF(ABS(Z).GT.PREC) ISENT=-1
  217. IF (IDIM.NE.2) THEN
  218. Z=XCOOR(IREFA+2)-XCOOR(IREFB+2)
  219. IF (ABS(Z).GT.PREC) ISENT=-1
  220. ENDIF
  221. DO 50 IJ=3,NBNNOR,2
  222. IREFA=IPT1.NUM(IJ,I)*IDIMP1-IDIM
  223. ISTCC=ISTCC+ISENT
  224. IF (ISTCC.EQ.0) ISTCC=NBNM
  225. IF (ISTCC.GT.NBNM) ISTCC=1
  226. IREFB=IPT3.NUM(ISTCC,IC)*IDIMP1-IDIM
  227. DO 52 KLP=1,IDIM
  228. Z=XCOOR(IREFA+KLP-1)-XCOOR(IREFB+KLP-1)
  229. IF(ABS(Z).GT.PREC) GO TO 33
  230. 52 CONTINUE
  231. 50 CONTINUE
  232. C CREATION D'UN ELEM RACCORD
  233. NUMELG=NUMELG+1
  234. IF (NUMELG.GT.NBMAX) CALL ERREUR(31)
  235. IF (IERR.NE.0) GOTO 101
  236. IM=0
  237. DO 27 IK=1,NBNNOR
  238. IP1=IPT1.NUM(IK,I)
  239. IP2=IPT2.NUM(ISTA,IB)
  240. NUM(IK,NUMELG)=IP1
  241. NUM(2*NBNNOR-IK+1,NUMELG)=IP2
  242. ISTA=ISTA+ISENS
  243. IF (ISTA.EQ.0) ISTA=NBNNOR
  244. IF (ISTA.GT.NBNNOR) ISTA=1
  245. IF (IK.EQ.IBSOM(NSPOS(IPT1.ITYPEL)+IM)) THEN
  246. IM=IM+1
  247. IP3=IPT3.NUM(ISTC,IC)
  248. NUM(2*NBNNOR+IM,NUMELG)=IP3
  249. ISTC=ISTC+ISENT
  250. IF (ISTC.EQ.0) ISTC=NBNM
  251. IF (ISTC.GT.NBNM) ISTC=1
  252. IF ((IP1.NE.IP2).AND.(IP1.NE.IP3).AND.(IP2.NE.IP3)) GO TO 27
  253. INTERR(1)=NUMELG
  254. CALL ERREUR(101)
  255. ENDIF
  256. IF (IP1.NE.IP2) GO TO 27
  257. INTERR(1)=NUMELG
  258. CALL ERREUR(101)
  259. 27 CONTINUE
  260. 33 CONTINUE
  261. C
  262. 23 CONTINUE
  263. 28 CONTINUE
  264. 20 CONTINUE
  265. C WRITE(IOIMP,29) NUMELG
  266. C 29 FORMAT(//,' NOMBRE D''ELEMENTS DE RACCORD CREES : ',I5)
  267. MELEME=0
  268. NBELEM=NUMELG
  269. IF (NBELEM.EQ.0) THEN
  270. CALL ERREUR(26)
  271. GOTO 101
  272. ENDIF
  273. SEGINI MELEME
  274. IF (NBNN.EQ.8) ITYPEL=29
  275. DO 100 J=1,NBELEM
  276. ICOLOR(J)=ICHCOL
  277. DO 100 I=1,NBNN
  278. NUM(I,J)=IPT4.NUM(I,J)
  279. 100 CONTINUE
  280. 101 SEGSUP IPT4
  281. SEGSUP MTRAV
  282. RETURN
  283. END
  284.  
  285.  

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