Télécharger clrep.eso

Retour à la liste

Numérotation des lignes :

  1. C CLREP SOURCE CHAT 05/01/12 22:08:51 5004
  2. SUBROUTINE CLREP(VECX,VECY,VECZ,ANGLE,IANGLE)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. -INC CCOPTIO
  6. C
  7. C----------------------------------------------------------------------
  8. C CETTE ROUTINE A PLUSIEURS FONCTION :
  9. C
  10. C 1- :
  11. C
  12. C POUR IANGLE = 0
  13. C ==================
  14. C ON CALCULE VECX ET VECY POUR UN VECZ DONNE
  15. C
  16. C----------------------------------------------------------------------
  17. C 2- :
  18. C
  19. C POUR IANGLE = 1
  20. C =================
  21. C ON CALCULE L ANGLE ( EN DEGRE )
  22. C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE
  23. C PAR RAPPORT A ( VECX , VECY ET VECZ )
  24. C
  25. C POUR IANGLE = 2
  26. C =================
  27. C ON CALCULE L ANGLE ( EN RADIAN )
  28. C POUR UN REPERE ( VF1 , VF2 ET VECZ ) DONNE
  29. C PAR RAPPORT A ( VECX , VECY ET VECZ )
  30. C
  31. C----------------------------------------------------------------------
  32. C
  33. C 3- :
  34. C
  35. C POUR IANGLE = 3
  36. C =================
  37. C ON CALCULE VF1 ET VF2 POUR UN VECZ DONNE
  38. C PLUS UN ANGLE ( EN RADIAN ) DONNE
  39. C PAR RAPPORT A VECX
  40. C
  41. C----------------------------------------------------------------------
  42. C
  43. DIMENSION VECX(*),VECY(*),VECZ(*)
  44. DIMENSION VECX0(3)
  45. C
  46. RAD=57.29577951308232D0
  47. C
  48. USR3=1.D0/SQRT(VECZ(1)*VECZ(1)+VECZ(2)*VECZ(2)+VECZ(3)*VECZ(3))
  49. C
  50. VECZ(1)=VECZ(1)*USR3
  51. VECZ(2)=VECZ(2)*USR3
  52. VECZ(3)=VECZ(3)*USR3
  53. C
  54. IF (IANGLE.EQ.3) THEN
  55. C
  56. CO=COS(ANGLE)
  57. SI=SIN(ANGLE)
  58. C
  59. VECX(1)=VECX(1)*CO+VECY(1)*SI
  60. VECX(2)=VECX(2)*CO+VECY(2)*SI
  61. VECX(3)=VECX(3)*CO+VECY(3)*SI
  62. C
  63. USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3))
  64. VECX(1)=VECX(1)*USR1
  65. VECX(2)=VECX(2)*USR1
  66. VECX(3)=VECX(3)*USR1
  67. C
  68. VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2)
  69. VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3)
  70. VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1)
  71. C
  72. USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3))
  73. C
  74. VECY(1)=VECY(1)*USR2
  75. VECY(2)=VECY(2)*USR2
  76. VECY(3)=VECY(3)*USR2
  77. C
  78. RETURN
  79. ENDIF
  80. C
  81. IF(IANGLE.EQ.0) GO TO 100
  82. C
  83. VECX0(1)=VECX(1)
  84. VECX0(2)=VECX(2)
  85. VECX0(3)=VECX(3)
  86. USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2)+VECX(3)*VECX(3))
  87. C
  88. VECX0(1)=VECX0(1)*USR1
  89. VECX0(2)=VECX0(2)*USR1
  90. VECX0(3)=VECX0(3)*USR1
  91. C
  92. 100 VECX(1)=-VECZ(2)
  93. VECX(2)=VECZ(1)
  94. VECX(3)=0.D0
  95. C
  96. IF(VECX(1).EQ.0.AND.VECX(2).EQ.0.) VECX(1)=1.D0
  97. C
  98. USR1=1.D0/SQRT(VECX(1)*VECX(1)+VECX(2)*VECX(2))
  99. C
  100. VECX(1)=VECX(1)*USR1
  101. VECX(2)=VECX(2)*USR1
  102. C
  103. VECY(1)=VECZ(2)*VECX(3)-VECZ(3)*VECX(2)
  104. VECY(2)=VECZ(3)*VECX(1)-VECZ(1)*VECX(3)
  105. VECY(3)=VECZ(1)*VECX(2)-VECZ(2)*VECX(1)
  106. C
  107. USR2=1.D0/SQRT(VECY(1)*VECY(1)+VECY(2)*VECY(2)+VECY(3)*VECY(3))
  108. C
  109. VECY(1)=VECY(1)*USR2
  110. VECY(2)=VECY(2)*USR2
  111. VECY(3)=VECY(3)*USR2
  112. C
  113. IF(IANGLE.EQ.0) RETURN
  114. C
  115. CSN=VECX(1)*VECX0(1)+VECX(2)*VECX0(2)+VECX(3)*VECX0(3)
  116. SSN=VECY(1)*VECX0(1)+VECY(2)*VECX0(2)+VECY(3)*VECX0(3)
  117. ANGLE=ATAN2(SSN,CSN)
  118. IF(IANGLE.EQ.1) ANGLE=ANGLE*RAD
  119. C
  120. RETURN
  121. END
  122.  
  123.  

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