Télécharger arpshi.eso

Retour à la liste

Numérotation des lignes :

  1. C ARPSHI SOURCE BP208322 15/10/21 21:15:10 8690
  2. SUBROUTINE ARPSHI (FSHIFT,VSHIFT,QUAD,INVER,SENS)
  3.  
  4.  
  5.  
  6.  
  7. ***********************************************************************
  8. *
  9. * A R P S H I
  10. *
  11. * FONCTION:
  12. * ---------
  13. *
  14. * PASSAGE D'UNE FREQUENCE DE SHIFT A UNE VALEUR PROPRE DE SHIFT
  15. * ET VICE VERSA
  16. *
  17. *
  18. * PARAMETRES: (E)=ENTREE (S)=SORTIE
  19. * -----------
  20. *
  21. *
  22. * FSHIFT COMPLEXE DP (E/S) FREQUENCE DE SHIFT
  23. *
  24. * VSHIFT COMPLEXE DP (E/S) VALEUR PROPRE DE SHIFT
  25. *
  26. * QUAD LOGIQUE (E) PROBLEME QUADRATIQUE OU NON
  27. *
  28. * INVER LOGIQUE (E) .TRUE. -> PRODUIT SCALAIRE X'KX
  29. * .FALSE. -> PRODUIT SCALAIRE X'MX
  30. *
  31. * SENS ENTIER (E) SENS DE CONVERSION
  32. * 1 : FSHIFT -> VSHIFT
  33. * 2 : VSHIFT -> FSHIFT
  34. *
  35. * SOUS-PROGRAMMES APPELES:
  36. * ------------------------
  37. *
  38. * NEANT
  39. *
  40. * AUTEUR, DATE DE CREATION:
  41. * -------------------------
  42. *
  43. * PASCAL BOUDA 17 JUIN 2015
  44. *
  45. * LANGAGE:
  46. * --------
  47. *
  48. * FORTRAN 77 & 90
  49. *
  50. ************************************************************************
  51.  
  52. -INC CCOPTIO
  53. -INC CCREEL
  54.  
  55. COMPLEX*16 FSHIFT
  56. COMPLEX*16 VSHIFT
  57. LOGICAL QUAD
  58. LOGICAL INVER
  59. * Note sur INVER : Variable devenue inutile dans ce programme
  60. INTEGER SENS
  61.  
  62. REAL*8 MODV,MODF,THETAV,THETAF
  63. REAL*8 X,Y
  64. COMPLEX*16 ZERO,J
  65.  
  66. ZERO=CMPLX(0.D0,0.D0)
  67. J=CMPLX(0.D0,1.D0)
  68.  
  69.  
  70. *on utilise la notation exponentielle pour faciliter les calculs
  71. *l'objectif est de calculer
  72. *
  73. * - lambda=(2*pi*f)^2 si le problemeest lineaire*
  74. * - lambda=jw=j*(2*pi*f) si le probleme est quadratique
  75. *
  76. *le module et l'argument de l'inconnue sont calcules separement.
  77. *la solution est unique grace a la fonction atan2 qui renvoie
  78. *l'argument dans le bon cadran
  79.  
  80. ****************************
  81. *** PROBLEME QUADRATIQUE ***
  82. ****************************
  83.  
  84. IF (QUAD) THEN
  85. *frequence de shift connue: on calcule la valeur propre de shift
  86. IF (SENS .EQ. 1) THEN
  87.  
  88. VSHIFT=2.D0*XPI*J*FSHIFT
  89.  
  90. *valeur propre de shift connue: on calcule la frequence de shift
  91. ELSEIF (SENS .EQ. 2) THEN
  92.  
  93. FSHIFT=VSHIFT/(2.D0*XPI*J)
  94.  
  95.  
  96. ENDIF
  97.  
  98. *************************
  99. *** PROBLEME LINEAIRE ***
  100. *************************
  101. ELSE
  102. *frequence de shift connue: on calcule la valeur propre de shift
  103. IF (SENS .EQ. 1) THEN
  104.  
  105. MODF=ABS(FSHIFT)
  106. THETAF=ATAN2(AIMAG(FSHIFT),REAL(FSHIFT))
  107.  
  108. MODV=(2.D0*XPI*MODF)**2
  109. THETAV=2.D0*THETAF
  110.  
  111. X=MODV*COS(THETAV)
  112. Y=MODV*SIN(THETAV)
  113.  
  114. VSHIFT=CMPLX(X,Y)
  115.  
  116.  
  117. *valeur propre de shift connue: on calcule la frequence de shift
  118. ELSEIF (SENS .EQ. 2) THEN
  119.  
  120. MODV=ABS(VSHIFT)
  121. THETAV=ATAN2(AIMAG(VSHIFT),REAL(VSHIFT))
  122.  
  123. MODF=SQRT(MODV)/(2.D0*XPI)
  124. THETAF=THETAV/2.D0
  125.  
  126. X=MODF*COS(THETAF)
  127. Y=MODF*SIN(THETAF)
  128.  
  129. FSHIFT=CMPLX(X,Y)
  130.  
  131. ENDIF
  132.  
  133. ENDIF
  134.  
  135. END
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  

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