Télécharger in2.eso

Retour à la liste

Numérotation des lignes :

in2
  1. C IN2 SOURCE JC220346 16/11/29 21:15:21 9221
  2. C---------------------------------------------------------------------|
  3. C |
  4. LOGICAL FUNCTION IN2(IP1,IP2,NFCINI)
  5. C |
  6. C CETTE FONCTION LOGIQUE VERIFIE QUE LE POINT IP2 (QUI VIENT |
  7. C D'ETRE CREE ), EST BIEN A L'INTERIEUR DU MAILLAGE DE SUR- |
  8. C FACE. |
  9. C |
  10. C IP1 appartenant au maillage de surface, on va juste verifier |
  11. C que ip1 ip2 ne coupe aucun element. |
  12. C |
  13. C IN EST VRAI SI LE POINT IP EST INTERNE AU MAILLAGE DE SUR- |
  14. C FACE OU EST UN POINT DU MAILLAGE DE SURFACE |
  15. C IN EST FAUX SI LE POINT IP EST EXTERNE AU MAILLAGE DE SUR- |
  16. C FACE. |
  17. C |
  18. C---------------------------------------------------------------------|
  19. C
  20. IMPLICIT INTEGER(I-N)
  21. IMPLICIT REAL*8(A-H,O-Z)
  22. logical in2dan
  23.  
  24. -INC PPARAM
  25. -INC CCOPTIO
  26. -INC TDEMAIT
  27. C
  28. * WRITE(6,5000) nfcini,nfacet
  29. *5000 FORMAT(' IN2 nfcini,nfacet ',i8,i8)
  30. C ------------------------
  31. * write (6,*) ' in2 ip1 ',xyz(1,ip1),xyz(2,ip1),xyz(3,ip1)
  32. * write (6,*) ' in2 ip2 ',xyz(1,ip2),xyz(2,ip2),xyz(3,ip2)
  33. DO 100 I=1,NFACET
  34. IF=IFUT(I)
  35. if (if.gt.nfcini) goto 100
  36. I1=NFC(1,IF)
  37. IF (IP1.EQ.I1) GOTO 100
  38. IF (IP2.EQ.I1) GOTO 100
  39. I2=NFC(2,IF)
  40. IF (IP1.EQ.I2) GOTO 100
  41. IF (IP2.EQ.I2) GOTO 100
  42. I3=NFC(3,IF)
  43. IF (IP1.EQ.I3) GOTO 100
  44. IF (IP2.EQ.I3) GOTO 100
  45. I4=NFC(4,IF)
  46. IF (IP1.EQ.I4) GOTO 100
  47. IF (IP2.EQ.I4) GOTO 100
  48. * ip1 et ip2 sont ils de part et d'autre du plan de la facette
  49. v1x=xyz(1,i1)-xyz(1,i2)
  50. v1y=xyz(2,i1)-xyz(2,i2)
  51. v1z=xyz(3,i1)-xyz(3,i2)
  52. v2x=xyz(1,i1)-xyz(1,i3)
  53. v2y=xyz(2,i1)-xyz(2,i3)
  54. v2z=xyz(3,i1)-xyz(3,i3)
  55. vnx=v1y*v2z-v1z*v2y
  56. vny=v1z*v2x-v1x*v2z
  57. vnz=v1x*v2y-v1y*v2x
  58. v1x=xyz(1,i1)-xyz(1,ip1)
  59. v1y=xyz(2,i1)-xyz(2,ip1)
  60. v1z=xyz(3,i1)-xyz(3,ip1)
  61. pm1=v1x*vnx+v1y*vny+v1z*vnz
  62. v2x=xyz(1,i1)-xyz(1,ip2)
  63. v2y=xyz(2,i1)-xyz(2,ip2)
  64. v2z=xyz(3,i1)-xyz(3,ip2)
  65. pm2=v2x*vnx+v2y*vny+v2z*vnz
  66. if (pm1*pm2.gt.0.) goto 100
  67. * ok touche t on le segment ?
  68. * write (6,*) ' in2 de part et d'' autre du plan ',pm1,pm2
  69. if (in2dan(ip1,ip2,i1,i2,i3,pm1,pm2)) goto 200
  70. if (i4.eq.0) goto 100
  71. v1x=xyz(1,i1)-xyz(1,i4)
  72. v1y=xyz(2,i1)-xyz(2,i4)
  73. v1z=xyz(3,i1)-xyz(3,i4)
  74. v2x=xyz(1,i1)-xyz(1,i3)
  75. v2y=xyz(2,i1)-xyz(2,i3)
  76. v2z=xyz(3,i1)-xyz(3,i3)
  77. vnx=v1y*v2z-v1z*v2y
  78. vny=v1z*v2x-v1x*v2z
  79. vnz=v1x*v2y-v1y*v2x
  80. v1x=xyz(1,i1)-xyz(1,ip1)
  81. v1y=xyz(2,i1)-xyz(2,ip1)
  82. v1z=xyz(3,i1)-xyz(3,ip1)
  83. pm1=v1x*vnx+v1y*vny+v1z*vnz
  84. v2x=xyz(1,i1)-xyz(1,ip2)
  85. v2y=xyz(2,i1)-xyz(2,ip2)
  86. v2z=xyz(3,i1)-xyz(3,ip2)
  87. pm2=v2x*vnx+v2y*vny+v2z*vnz
  88. if (pm1*pm2.gt.0.) goto 100
  89. * ok on touche touche t on le segment ?
  90. * write (6,*) ' in2 de part et d'' autre du plan '
  91. if (in2dan(ip1,ip2,i1,i3,i4,pm1,pm2)) goto 200
  92. 100 CONTINUE
  93. in2=.TRUE.
  94. return
  95. 200 continue
  96. 1000 FORMAT (' IN2 intersection facette segment')
  97. C
  98. in2=.false.
  99. RETURN
  100. END
  101.  
  102.  
  103.  
  104.  

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