Télécharger interb.eso

Retour à la liste

Numérotation des lignes :

interb
  1. C INTERB SOURCE CB215821 19/07/30 21:16:54 10273
  2.  
  3. SUBROUTINE INTERB(IMAMA1,IMAMA2,IRET,IMAMA3)
  4.  
  5. ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  6. C
  7. C INTERSECTION (sens ensembliste) DE DEUX MAILLAGES
  8. C
  9. ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  10. C
  11. c IPT1,IPT2 : les 2 maillages
  12. c IRET : code de retour (0 = OK, 1 = intersection vide)
  13. C IPT3 : maillage de l'intersection (=0 si IRET = 1)
  14. C
  15. C Suppose que chaque maillage n'a pas 2 sous-zones de même type
  16. C
  17. ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  18. IMPLICIT INTEGER(I-N)
  19. LOGICAL VERIF
  20.  
  21.  
  22. -INC PPARAM
  23. -INC CCOPTIO
  24. -INC SMELEME
  25.  
  26. IRET = 0
  27. ipt1 = IMAMA1
  28. ipt2 = IMAMA2
  29. ipt3 = 0
  30.  
  31. SEGACT,IPT1,IPT2
  32. NBSOU1=IPT1.LISOUS(/1)
  33. NBSOU2=IPT2.LISOUS(/1)
  34.  
  35. C Structure 1er maillage ?
  36. IF (NBSOU1.NE.0) THEN
  37. C il est composé
  38. GOTO 10
  39. ELSE
  40. C IPT1 est simple, INTERC verifiera s'il est vide
  41. ENDIF
  42.  
  43. C Structure 2e maillage ?
  44. IF (NBSOU2.NE.0) THEN
  45. C il est composé
  46. GOTO 11
  47. ELSE
  48. C IPT2 est simple, INTERC verifiera s'il est vide
  49. ENDIF
  50.  
  51. C LES DEUX MAILLAGES SONT SIMPLES
  52. C ===============================
  53. CALL INTERC(IPT1,IPT2,IPT3)
  54. GOTO 1000
  55.  
  56. C UN DES DEUX EST COMPOSÉ, L'AUTRE SIMPLE
  57. C =======================================
  58. 10 IF (NBSOU2.NE.0) THEN
  59. GOTO 20
  60. ELSE
  61. GOTO 12
  62. ENDIF
  63. C LE 2e EST COMPOSÉ, LE 1ER SIMPLE : on les intervertit
  64. 11 IS = IPT2
  65. IPT2 = IPT1
  66. IPT1 = IS
  67.  
  68. C on les a dans l'ordre IPT1=composé, IPT2=simple ...
  69. 12 CONTINUE
  70. NBSOU1 = IPT1.LISOUS(/1)
  71. C Recherche de la sous-zone de même type dans IPT2
  72. ITYP2 = IPT2.ITYPEL
  73. DO IS = 1, NBSOU1
  74. IPT4 = IPT1.LISOUS(IS)
  75. SEGACT,IPT4
  76. IF (IPT4.ITYPEL .EQ. ITYP2) THEN
  77. IF (IPT2.EQ.IPT4) THEN
  78. C le petit est inclus dans le grand
  79. IPT3 = IPT2
  80. ELSE
  81. C on determine l'intersection pour cette seule sous-zone
  82. CALL INTERC(IPT2,IPT4,IPT3)
  83. ENDIF
  84. GOTO 1000
  85. ENDIF
  86. ENDDO
  87. c on n'en a pas trouvé
  88. GOTO 1000
  89.  
  90. C LES DEUX MAILLAGES SONT COMPOSÉS
  91. C ================================
  92. 20 CONTINUE
  93. NBELEM=0
  94. NBNN =0
  95. NBREF =0
  96. NBSOUS=MIN(NBSOU1,NBSOU2)
  97. SEGINI,IPT4
  98.  
  99. I3=0
  100. DO 21 I1=1,NBSOU1
  101. IPT5=IPT1.LISOUS(I1)
  102. SEGACT IPT5
  103. C Recherche de la sous-zone de même type dans IPT2
  104. ITYP5 = IPT5.ITYPEL
  105. DO 22 I2=1,NBSOU2
  106. IPT6=IPT2.LISOUS(I2)
  107. SEGACT IPT6
  108. IF (ITYP5.EQ.IPT6.ITYPEL) THEN
  109. C on l'a trouvée, on fait l'intersection
  110. IF (IPT5.EQ.IPT6) THEN
  111. C les deux sous-maillages sont confondus
  112. IPT7=IPT5
  113. ELSE
  114. CALL INTERC(IPT5,IPT6,IPT7)
  115. ENDIF
  116. IF (IPT7.NE.0) THEN
  117. C intersection non vide, on stocke le maillage obtenu
  118. I3 = I3+1
  119. IPT4.LISOUS(I3)=IPT7
  120. ENDIF
  121. GOTO 23
  122. ENDIF
  123. 22 CONTINUE
  124. 23 CONTINUE
  125. 21 CONTINUE
  126.  
  127. C Maillage résultat
  128. C Aucune sous-zone ...
  129. IF (I3.EQ.0) THEN
  130. SEGSUP,IPT4
  131. ELSE
  132. NBSOUS = I3
  133. SEGADJ,IPT4
  134. IPT3 = IPT4
  135. C Si une seule sous-zone ...
  136. IF (I3.EQ.1) THEN
  137. IPT3 = IPT4.LISOUS(1)
  138. SEGSUP,IPT4
  139. ENDIF
  140. ENDIF
  141.  
  142. 1000 CONTINUE
  143. IF (IPT3.EQ.0) THEN
  144. IRET = 1
  145. ELSE
  146. IRET = 0
  147. ENDIF
  148. IMAMA3 = IPT3
  149.  
  150. END
  151.  
  152.  
  153.  

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