Télécharger interc.eso

Retour à la liste

Numérotation des lignes :

interc
  1. C INTERC SOURCE PV 20/03/30 21:20:02 10567
  2. C
  3. C CE SOUS PROGRAMME REALISE l'intersection ensembliste de deux maillages
  4. C simples (1 seul type d'element)
  5. C Les maillages IPT1 et IPT2 sont supposes ACTIF en E/S (non modifies)
  6. C Si pas d'intersection, IPT3 = 0 sinon pointeur MELEME (ACTIF en S)
  7. C
  8. SUBROUTINE INTERC(IPT1,IPT2, IPT3)
  9.  
  10. IMPLICIT INTEGER(I-N)
  11. IMPLICIT REAL*8(A-H,O-Z)
  12.  
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16. -INC SMELEME
  17. -INC SMCOORD
  18. segment ipos(nbpt)
  19. segment ind(mm)
  20.  
  21. IPT3 = 0
  22.  
  23. C* SEGACT IPT1,IPT2 <- Segments actifs en Entree
  24. NBNN1=IPT1.NUM(/1)
  25. NBNN2=IPT2.NUM(/1)
  26. C Un des maillages n'est pas simple :
  27. IF (NBNN1.EQ.0 .OR. NBNN2.EQ.0) GOTO 900
  28.  
  29. NBELE1=IPT1.NUM(/2)
  30. NBELE2=IPT2.NUM(/2)
  31. ITYP1 =IPT1.ITYPEL
  32. ITYP2 =IPT2.ITYPEL
  33.  
  34. C Les maillages ne sont pas du meme type :
  35. IF ((ITYP1.NE.ITYP2) .OR. (NBNN1.NE.NBNN2)) GOTO 900
  36.  
  37. NBNN = NBNN1
  38. NBELEM = MAX(NBELE1,NBELE2)
  39. NBREF = 0
  40. NBSOUS = 0
  41. SEGINI,MELEME
  42. ITYPEL = ITYP1
  43.  
  44. C Creation de ipos
  45. SEGACT,mcoord
  46. np = nbpts
  47. nbpt = np + 1
  48. SEGINI,ipos
  49. C Remplissage de ipos
  50. DO 10 i = 1, NBELE1
  51. DO 11 j = 1, NBNN1
  52. ia=ipt1.num(j,i)
  53. ipos(ia)=ipos(ia)+1
  54. 11 CONTINUE
  55. 10 CONTINUE
  56. i_z = ipos(1)
  57. DO 13 i = 2, np
  58. i_z = i_z + ipos(i)
  59. ipos(i) = i_z
  60. 13 CONTINUE
  61. mm = ipos(np)
  62. ipos(nbpt) = mm
  63. C Creation de ind
  64. SEGINI,ind
  65. C Remplissage de ind
  66. DO 20 i = 1, NBELE1
  67. DO 21 j = 1, NBNN1
  68. ia = ipt1.num(j,i)
  69. ide=ipos(ia)
  70. ind(ide)=i
  71. ipos(ia)=ide-1
  72. 21 CONTINUE
  73. 20 CONTINUE
  74.  
  75. * Remplissage de l'intersection
  76. I=0
  77. DO 1 i1 = 1, NBELE2
  78. ia=ipt2.num(1,i1)
  79. ideb=ipos(ia)+1
  80. ifin=ipos(ia+1)
  81. IF (ifin.lt.ideb) go to 1
  82. DO 2 ie=ideb,ifin
  83. iel=ind(ie)
  84. DO 134 in1=1,NBNN1
  85. DO 136 in2=1,NBNN2
  86. IF(ipt1.num(in1,iel).EQ.ipt2.num(in2,i1)) GOTO 134
  87. 136 CONTINUE
  88. GOTO 2
  89. 134 CONTINUE
  90. C OK pour cet element
  91. I=I+1
  92. ICOLOR(I)=IPT1.ICOLOR(Iel)
  93. DO 135 J=1,NBNN
  94. NUM(J,I)=IPT1.NUM(J,iel)
  95. 135 CONTINUE
  96. GOTO 1
  97. 2 CONTINUE
  98. 1 CONTINUE
  99.  
  100. SEGSUP,ipos,ind
  101.  
  102. NBELEM = I
  103. IF (NBELEM.EQ.0) THEN
  104. SEGSUP,MELEME
  105. IPT3 = 0
  106. ELSE
  107. SEGADJ,MELEME
  108. C* SEGDES,MELEME <- Segment cree actif en sortie
  109. IPT3 = MELEME
  110. ENDIF
  111.  
  112. 900 CONTINUE
  113. C* SEGDES,IPT1,IPT2 <- Segments actifs en Sortie (non modifies)
  114.  
  115. RETURN
  116. END
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  

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