Télécharger scmat.eso

Retour à la liste

Numérotation des lignes :

scmat
  1. C SCMAT SOURCE CHAT 06/03/29 21:33:05 5360
  2. SUBROUTINE SCMAT(IFR,NBNIFR,NBIFR,
  3. > IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  4. > NOETRI,NBE,ITVL,IMAX,
  5. > IMAT,NPLEIN,NCREUX,iarr)
  6. C **********************************************************************
  7. C OBJET : DETERMINE LES 2 REGIONS POUR LA SCULPT : LE PLEIN (1)
  8. C ET LE CREUX (-1)
  9. C EN ENTREE :
  10. C IFR : LES ELEMENTS DES FRONTIERES
  11. C NBIFR : NOMBRE D'ELEMENTS FRONTIERE
  12. C
  13. C ITVL : TABLEAU DE TRAVAIL = NBE + PILE (APPEL TMA1CC)
  14. C IMAX : TAILLE DU TABLEAU DE TRAVAIL
  15. C
  16. C EN SORTIE :
  17. C IMAT : IMAT(I) = 1 SI L'ELEMENT EST PLEIN
  18. C -1 SI " " " " CREUX
  19. C NPLEIN : NOMBRE DE COMPOSANTES CONNEXES PLEINES
  20. C NCREUX : NOMBRE DE COMPOSANTES CONNEXES CREUSES
  21. C iarr : CODE D'ERREUR
  22. C -1 UN ELEMENT FRONTIERE DE IFR N'EXISTE PAS
  23. C -2 ITVL TROP PETIT
  24. C **********************************************************************
  25. IMPLICIT INTEGER(I-N)
  26. INTEGER IFR(*),NBIFR,NBNIFR,IDE
  27. INTEGER ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX
  28. INTEGER NOETRI(*),NBE,ITVL(*),IMAX,IMAT(*)
  29. INTEGER NPLEIN,NCREUX,iarr
  30. C
  31. INTEGER NBVUE,IT1,IT2,I1,I2,NBEMAT,IREGIO,I,J
  32. INTEGER NBNE,NBCE
  33. INTEGER STRNBN,STRNBC
  34. EXTERNAL STRNBN,STRNBC
  35. C ===================
  36. C --- 1. INITIALISATION ----
  37. C ===================
  38. NPLEIN = 0
  39. NCREUX = 0
  40. iarr = -1
  41. DO 10 I=1,NBIFR
  42. CALL SFRICR(IFR((I-1)*NBNIFR+1),NBNIFR,IDE,
  43. > ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  44. > NOETRI,NBE,iarr)
  45. IF( iarr.NE. 0 )GOTO 999
  46. 10 CONTINUE
  47. DO 20 I=1,NBE
  48. IMAT(I) = 0
  49. 20 CONTINUE
  50. iarr = 0
  51. C ====================================================
  52. C --- 2. RECHERCHE DES FRONTIERES DONNEES NON RECONNUES ----
  53. C SI UNE DES REGIONS EST CONNU, L'AUTRE L'EST AUSSI
  54. C ====================================================
  55. C
  56. NBVUE = 0
  57. I = 0
  58. 30 I = MOD(I,NBIFR)+1
  59. CALL SFRIDE(IFR((I-1)*NBNIFR+1),NBNIFR,IDE,
  60. > ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  61. > NOETRI,NBE,IT1,IT2,I1,I2 )
  62. NBEMAT = 0
  63. C ----- FRONTIERE DONNEE EST SUR LA FRONTIERE REELLE ---------
  64. IF(IT1.EQ.0)THEN
  65. IF(IMAT(IT2).EQ.0)THEN
  66. IREGIO = 1
  67. NPLEIN = NPLEIN + 1
  68. CALL SCRGCC(IT2,IREGIO,IDE,ITRTRI,NBCMAX,NBE,
  69. > ITVL,IMAT,NBEMAT,iarr)
  70. ENDIF
  71. GOTO 40
  72. ENDIF
  73. IF(IT2.EQ.0)THEN
  74. IF(IMAT(IT1).EQ.0)THEN
  75. IREGIO = 1
  76. NPLEIN = NPLEIN + 1
  77. CALL SCRGCC(IT1,IREGIO,IDE,ITRTRI,NBCMAX,NBE,
  78. > ITVL,IMAT,NBEMAT,iarr)
  79. ENDIF
  80. GOTO 40
  81. ENDIF
  82. C ----- FRONTIERE DONNEE EST A L'INTERIEUR ---------
  83. IF((IMAT(IT2).EQ.0).AND.
  84. > (IMAT(IT1).EQ.0))GOTO 40
  85. IF((IMAT(IT2).NE.0).AND.
  86. > (IMAT(IT1).NE.0))GOTO 40
  87. IF(IMAT(IT1).EQ.0)THEN
  88. IREGIO = - IMAT(IT2)
  89. IF( IREGIO .EQ. 1 )THEN
  90. NPLEIN = NPLEIN + 1
  91. ELSE
  92. NCREUX = NCREUX + 1
  93. ENDIF
  94. CALL SCRGCC(IT1,IREGIO,IDE,ITRTRI,NBCMAX,NBE,
  95. > ITVL,IMAT,NBEMAT,iarr)
  96. GOTO 40
  97. ENDIF
  98. IF(IMAT(IT2).EQ.0)THEN
  99. IREGIO = - IMAT(IT1)
  100. IF( IREGIO .EQ. 1 )THEN
  101. NPLEIN = NPLEIN + 1
  102. ELSE
  103. NCREUX = NCREUX + 1
  104. ENDIF
  105. CALL SCRGCC(IT2,IREGIO,IDE,ITRTRI,NBCMAX,NBE,
  106. > ITVL,IMAT,NBEMAT,iarr)
  107. GOTO 40
  108. ENDIF
  109. C
  110. C
  111. 40 NBVUE = NBEMAT + NBVUE
  112. C --- FIN : ON A ATTRIBUE UN MAT. A TOUS LES ELEMENTS ----
  113. IF( NBVUE.EQ.NBE )GOTO 999
  114. C --- CAS PARTICULIER : ON N'A PAS PU ATTRIBUER UN IREGIO ---
  115. IF(( NBVUE.EQ.0 ).AND.(I.EQ.NBIFR))GOTO 50
  116. C --- BOUCLE : ON A PAS VU TOUS LES ELEMENTS ---
  117. IF( NBVUE.NE.NBE )GOTO 30
  118. C
  119. C =====================================================
  120. C --- 3. CAS PARTICULIER :
  121. C LA FRONTIERE DONNEE EST TOTALEMENT A L'INTERIEUR
  122. C => RECHERCHE D'UN ELEMENT DE LA FRONTIERE DU CONVEXE
  123. C =====================================================
  124. 50 IREGIO = -1
  125. DO 70 I=1,NBE
  126. NBNE = STRNBN(I,ITRNOE,NBNMAX)
  127. NBCE = STRNBC(NBNE,IDE)
  128. DO 60 J=1,NBCE
  129. IF( ITRTRI((I-1)*NBCMAX+J).EQ.0 )GOTO 80
  130. 60 CONTINUE
  131. 70 CONTINUE
  132. NCREUX = NCREUX + 1
  133. 80 CALL SCRGCC(I,IREGIO,IDE,ITRTRI,NBCMAX,NBE,
  134. > ITVL,IMAT,NBEMAT,iarr)
  135. GOTO 30
  136. C
  137. 999 END
  138.  
  139.  
  140.  
  141.  

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