crotg.f 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. *DECK CROTG
  2. SUBROUTINE CROTG (CA, CB, C, S)
  3. C***BEGIN PROLOGUE CROTG
  4. C***PURPOSE Construct a Givens transformation.
  5. C***LIBRARY SLATEC (BLAS)
  6. C***CATEGORY D1B10
  7. C***TYPE COMPLEX (SROTG-S, DROTG-D, CROTG-C)
  8. C***KEYWORDS BLAS, GIVENS ROTATION, GIVENS TRANSFORMATION,
  9. C LINEAR ALGEBRA, VECTOR
  10. C***AUTHOR (UNKNOWN)
  11. C***DESCRIPTION
  12. C
  13. C Complex Givens transformation
  14. C
  15. C Construct the Givens transformation
  16. C
  17. C (C S)
  18. C G = ( ), C**2 + ABS(S)**2 =1,
  19. C (-S C)
  20. C
  21. C which zeros the second entry of the complex 2-vector (CA,CB)**T
  22. C
  23. C The quantity CA/ABS(CA)*NORM(CA,CB) overwrites CA in storage.
  24. C
  25. C Input:
  26. C CA (Complex)
  27. C CB (Complex)
  28. C
  29. C Output:
  30. C CA (Complex) CA/ABS(CA)*NORM(CA,CB)
  31. C C (Real)
  32. C S (Complex)
  33. C
  34. C***REFERENCES (NONE)
  35. C***ROUTINES CALLED (NONE)
  36. C***REVISION HISTORY (YYMMDD)
  37. C 790101 DATE WRITTEN
  38. C 890531 Changed all specific intrinsics to generic. (WRB)
  39. C 890531 REVISION DATE from Version 3.2
  40. C 891214 Prologue converted to Version 4.0 format. (BAB)
  41. C***END PROLOGUE CROTG
  42. COMPLEX CA, CB, S
  43. REAL C
  44. REAL NORM, SCALE
  45. COMPLEX ALPHA
  46. C***FIRST EXECUTABLE STATEMENT CROTG
  47. IF (ABS(CA) .EQ. 0.0) THEN
  48. C = 0.0
  49. S = (1.0,0.0)
  50. CA = CB
  51. ELSE
  52. SCALE = ABS(CA) + ABS(CB)
  53. NORM = SCALE * SQRT((ABS(CA/SCALE))**2 + (ABS(CB/SCALE))**2)
  54. ALPHA = CA /ABS(CA)
  55. C = ABS(CA) / NORM
  56. S = ALPHA * CONJG(CB) / NORM
  57. CA = ALPHA * NORM
  58. ENDIF
  59. RETURN
  60. END