Télécharger liapor.eso

Retour à la liste

Numérotation des lignes :

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

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