Télécharger tritse.eso

Retour à la liste

Numérotation des lignes :

tritse
  1. C TRITSE SOURCE CHAT 05/01/13 03:48:00 5004
  2. SUBROUTINE TRITSE(NN,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  3. > NOETRI,NBE,COORD,INTER,NINTER)
  4. C *************************************************************
  5. C OBJET : DETECTE L'ENSEMBLE DES ELEMENTS INTERSECTANT UN SEGMENT
  6. C
  7. C EN ENTREE:
  8. C NN() : LES INDICES DES NOEUDS DU SEGMENT
  9. C
  10. C ITRTRI,NBNMAX,ITRNOE,NBCMAX,NOETRI,NBE,COORD : LE MAILLAGE
  11. C
  12. C NINTER : TAILLE DU TABLEAU INTER
  13. C
  14. C EN SORTIE:
  15. C INTER : TABLEAU DES ELEMENTS INTERSECTANT NN
  16. C ILS SONT ORDONNEES DE NN(1) VERS NN(2)
  17. C NINTER: NOMBRE D'ELEMENTS INTERSECTANT NN
  18. C -1 SI LE SEGMENT EST EXTERIEUR OU PASSE PAR UN NOEUD
  19. C -2 SI INTER(NINTER) TROP PETIT
  20. C NIVEAU : MODULE
  21. C *****************************************************************
  22. IMPLICIT INTEGER(I-N)
  23. INTEGER NN(*),ITRNOE(*),NBNMAX,ITRTRI(*),NBCMAX
  24. INTEGER NOETRI(*),NBE,INTER(*),NINTER
  25. REAL*8 COORD(*)
  26. C
  27. REAL*8 XN(4), DROITE(3), PZERO, X(3),Y(3)
  28. INTEGER NLO(3),NBNN,IDE,IDIMC,NBN,I,IT1,IT2,I1,I2,IERR
  29. INTEGER ITD,IAD,ITF,IAF,ITS,IARET(3),NBA,ISOM(3),NBS,NS
  30. INTEGER NINMAX
  31. C
  32. NINMAX = NINTER
  33. NINTER = 0
  34. IDE = 2
  35. NBNN = 2
  36. IDIMC = 2
  37. NBN = 3
  38. CALL SFRIDE(NN,NBNN,IDE,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  39. > NOETRI,NBE,IT1,IT2,I1,I2)
  40. C
  41. IF((IT1.NE.0).OR.(IT2.NE.0))GO TO 999
  42. C
  43. C --- LE SEGMENT N'EST PAS RESPECTE ---
  44. C
  45. NLO(1) = NN(1)
  46. NLO(2) = NN(2)
  47. NLO(3) = NN(1)
  48. C
  49. C --- RECHERCHE DU TRIANGLE DE DEPART ---
  50. C
  51. CALL TRDBSE(NLO,ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  52. > NOETRI,COORD,ITD,IAD)
  53. IF(ITD.EQ.0)GOTO 888
  54. NINTER=NINTER+1
  55. C ----- BUG_14 : 28.03.97 O.STAB ---
  56. IF( NINTER.GT. NINMAX )THEN
  57. NINTER = -2
  58. GOTO 999
  59. ENDIF
  60. INTER(NINTER)= ITD
  61. C
  62. C --- RECHERCHE DU TRIANGLE D'ARRIVEE ---
  63. C
  64. CALL TRDBSE(NLO(2),ITRNOE,NBNMAX,ITRTRI,NBCMAX,
  65. > NOETRI,COORD,ITF,IAF)
  66. IF(ITF.EQ.0)GOTO 888
  67. C -----------------------------------------
  68. DO 5 I=1,IDIMC
  69. XN(I) = COORD((NN(1)-1)*IDIMC+I)
  70. XN(IDIMC+I)= COORD((NN(2)-1)*IDIMC+I)
  71. 5 CONTINUE
  72. PZERO = 1.D-10 *((XN(3)-XN(1))**2 + (XN(4)-XN(2))**2)
  73. C CALL G2DDRO2P( XN, DROITE ) REMPLACE PAR O.STAB
  74. CALL DR2PO( COORD((NN(1)-1)*IDIMC+1),
  75. > COORD((NN(2)-1)*IDIMC+1),DROITE,IERR)
  76. C -----------------------------------------
  77. ITS = ITRTRI((ITD-1)*NBCMAX+IAD)
  78. C --------------------------------------------
  79. 10 IF( ITS .EQ. ITF )GO TO 90
  80. NINTER=NINTER+1
  81. C ----- BUG_14 : 28.03.97 O.STAB ---
  82. IF( NINTER.GT. NINMAX )THEN
  83. NINTER = -2
  84. GOTO 999
  85. ENDIF
  86. INTER(NINTER)= ITS
  87. DO 20 I=1,NBN
  88. NS = ITRNOE((ITS-1)*NBNMAX+I)
  89. X(I) = COORD((NS-1)*IDIMC+1)
  90. Y(I) = COORD((NS-1)*IDIMC+2)
  91. 20 CONTINUE
  92. CALL INDRPO(X,Y,NBN,DROITE,PZERO,NBA,IARET,NBS,ISOM)
  93. IF( NBA .NE.2 )GOTO 888
  94. IF( ITRTRI((ITS-1)*NBCMAX+IARET(1)).EQ.INTER(NINTER-1))THEN
  95. ITS = ITRTRI((ITS-1)*NBCMAX+IARET(2))
  96. ELSE
  97. ITS = ITRTRI((ITS-1)*NBCMAX+IARET(1))
  98. ENDIF
  99. GO TO 10
  100. C --- ON A FINI ---
  101. 90 NINTER=NINTER+1
  102. C ----- BUG_14 : 28.03.97 O.STAB ---
  103. IF( NINTER.GT. NINMAX )THEN
  104. NINTER = -2
  105. GOTO 999
  106. ENDIF
  107. INTER(NINTER)= ITF
  108. GOTO 999
  109. 888 NINTER= -1
  110. 999 END
  111.  
  112.  
  113.  

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