Télécharger angle.eso

Retour à la liste

Numérotation des lignes :

angle
  1. C ANGLE SOURCE GOUNAND 26/09/03 21:15:05 12637
  2. SUBROUTINE ANGLE(U,V,N,XANG,IFLAG,IFLIG)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : ANGLE
  7. C DESCRIPTION : Calcul de l'angle entre deux vecteurs (orientes en 2D)
  8. C
  9. C
  10. C
  11. C LANGAGE : ESOPE
  12. C AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA)
  13. C mel : gounand@semt2.smts.cea.fr
  14. C***********************************************************************
  15. C SYNTAXE GIBIANE :
  16. C ENTREES : U, V, N, IFLAG
  17. C ENTREES/SORTIES :
  18. C SORTIES : XANG, IFLIG
  19. C***********************************************************************
  20. C VERSION : v1, 02/09/2026, version initiale
  21. C HISTORIQUE : v1, 02/09/2026, creation
  22. C HISTORIQUE :
  23. C HISTORIQUE :
  24. C***********************************************************************
  25. -INC CCREEL
  26. DIMENSION U(N),V(N)
  27. *
  28. * Executable statements
  29. *
  30. IFLIG=0
  31. XANG=0.D0
  32. XNU=0.D0
  33. XNV=0.D0
  34. DO J=1,N
  35. XNU=XNU+U(J)**2
  36. XNV=XNV+V(J)**2
  37. ENDDO
  38. IF(IFLAG.EQ.1) THEN
  39. IF (XNU.LT.XPETIT.OR.XNV.LT.XPETIT) GOTO 11
  40. ELSE
  41. IF (XNU.LT.XPETIT.OR.XNV.LT.XPETIT) RETURN
  42. ENDIF
  43. XNU=SQRT(XNU)
  44. XNV=SQRT(XNV)
  45. *
  46. IF (N.EQ.1) THEN
  47. XPSCA=SIGN(1.D0,U(1)*V(1))
  48. XANG=(XPSCA-1.D0)*(-90.D0)
  49. ELSEIF (N.EQ.2) THEN
  50. XPMIX=U(1)*V(2)-U(2)*V(1)
  51. XPSCA=U(1)*V(1)+U(2)*V(2)
  52. XANGR=ATAN2(XPMIX,XPSCA)
  53. ELSE
  54. * Formule precise due a W. Kahan
  55. * \theta = 2 \tan^{-1}\frac{| |v| u - |u| v |}{ | |v| u + |u| v |}
  56. XNUM=0.D0
  57. XDEN=0.D0
  58. DO J=1,N
  59. XNVU=XNV*U(J)
  60. XNUV=XNU*V(J)
  61. XNUM=XNUM+(XNVU-XNUV)**2
  62. XDEN=XDEN+(XNVU+XNUV)**2
  63. ENDDO
  64. XNUM=SQRT(XNUM)
  65. XDEN=SQRT(XDEN)
  66. XANGR=2.D0*ATAN2(XNUM,XDEN)
  67. ENDIF
  68. * Conversion en degrés
  69. IF (N.NE.1) XANG=XANGR*180.D0/XPI
  70. *
  71. * Normal termination
  72. *
  73. RETURN
  74. *
  75. 11 CONTINUE
  76. IFLIG=1
  77. RETURN
  78.  
  79. *
  80. * End of subroutine ANGLE
  81. *
  82. END
  83.  
  84.  

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