You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

drotmf.f 3.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. SUBROUTINE DROTMF (N,DX,INCX,DY,INCY,DPARAM)
  2. C
  3. C APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
  4. C
  5. C (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN
  6. C (DY**T)
  7. C
  8. C DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
  9. C LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY.
  10. C WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS..
  11. C
  12. C DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0
  13. C
  14. C (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0)
  15. C H=( ) ( ) ( ) ( )
  16. C (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
  17. C SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM.
  18. C
  19. DOUBLE PRECISION DFLAG,DH12,DH22,DX,TWO,Z,DH11,DH21,
  20. 1 DPARAM,DY,W,ZERO
  21. DIMENSION DX(1),DY(1),DPARAM(5)
  22. DATA ZERO,TWO/0.D0,2.D0/
  23. C
  24. DFLAG=DPARAM(1)
  25. IF(N .LE. 0 .OR.(DFLAG+TWO.EQ.ZERO)) GO TO 140
  26. IF(.NOT.(INCX.EQ.INCY.AND. INCX .GT.0)) GO TO 70
  27. C
  28. NSTEPS=N*INCX
  29. IF(DFLAG) 50,10,30
  30. 10 CONTINUE
  31. DH12=DPARAM(4)
  32. DH21=DPARAM(3)
  33. DO 20 I=1,NSTEPS,INCX
  34. W=DX(I)
  35. Z=DY(I)
  36. DX(I)=W+Z*DH12
  37. DY(I)=W*DH21+Z
  38. 20 CONTINUE
  39. GO TO 140
  40. 30 CONTINUE
  41. DH11=DPARAM(2)
  42. DH22=DPARAM(5)
  43. DO 40 I=1,NSTEPS,INCX
  44. W=DX(I)
  45. Z=DY(I)
  46. DX(I)=W*DH11+Z
  47. DY(I)=-W+DH22*Z
  48. 40 CONTINUE
  49. GO TO 140
  50. 50 CONTINUE
  51. DH11=DPARAM(2)
  52. DH12=DPARAM(4)
  53. DH21=DPARAM(3)
  54. DH22=DPARAM(5)
  55. DO 60 I=1,NSTEPS,INCX
  56. W=DX(I)
  57. Z=DY(I)
  58. DX(I)=W*DH11+Z*DH12
  59. DY(I)=W*DH21+Z*DH22
  60. 60 CONTINUE
  61. GO TO 140
  62. 70 CONTINUE
  63. KX=1
  64. KY=1
  65. IF(INCX .LT. 0) KX=1+(1-N)*INCX
  66. IF(INCY .LT. 0) KY=1+(1-N)*INCY
  67. C
  68. IF(DFLAG)120,80,100
  69. 80 CONTINUE
  70. DH12=DPARAM(4)
  71. DH21=DPARAM(3)
  72. DO 90 I=1,N
  73. W=DX(KX)
  74. Z=DY(KY)
  75. DX(KX)=W+Z*DH12
  76. DY(KY)=W*DH21+Z
  77. KX=KX+INCX
  78. KY=KY+INCY
  79. 90 CONTINUE
  80. GO TO 140
  81. 100 CONTINUE
  82. DH11=DPARAM(2)
  83. DH22=DPARAM(5)
  84. DO 110 I=1,N
  85. W=DX(KX)
  86. Z=DY(KY)
  87. DX(KX)=W*DH11+Z
  88. DY(KY)=-W+DH22*Z
  89. KX=KX+INCX
  90. KY=KY+INCY
  91. 110 CONTINUE
  92. GO TO 140
  93. 120 CONTINUE
  94. DH11=DPARAM(2)
  95. DH12=DPARAM(4)
  96. DH21=DPARAM(3)
  97. DH22=DPARAM(5)
  98. DO 130 I=1,N
  99. W=DX(KX)
  100. Z=DY(KY)
  101. DX(KX)=W*DH11+Z*DH12
  102. DY(KY)=W*DH21+Z*DH22
  103. KX=KX+INCX
  104. KY=KY+INCY
  105. 130 CONTINUE
  106. 140 CONTINUE
  107. RETURN
  108. END