00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 subroutine crsf2csf(n,t,u,c,s)
00023 integer n
00024 complex t(n,n),u(n,n)
00025 real c(n-1),s(n-1)
00026 real x,y,z
00027 integer j
00028 do j = 1,n-1
00029 c(j) = 1
00030 end do
00031 j = 1
00032 do while (j < n)
00033
00034 call crcrot1(j,t(1,j),c,s)
00035
00036 y = t(j+1,j)
00037 if (y /= 0) then
00038
00039 z = t(j,j+1)
00040 c(j) = sqrt(z/(z-y))
00041 s(j) = sqrt(y/(y-z))
00042
00043 call crcrot1(2,t(j,j),c(j),s(j))
00044
00045 call crcrot1(j+1,t(1,j+1),c,s)
00046
00047 call crcrot2(j+1,t(1,j),t(1,j+1),c(j),s(j))
00048
00049 t(j+1,j) = 0
00050 j = j + 2
00051 else
00052 j = j + 1
00053 end if
00054 end do
00055
00056
00057 if (j == n) then
00058 call crcrot1(j,t(1,j),c,s)
00059 end if
00060
00061
00062 do j = 1,n-1
00063 if (c(j) /= 1) then
00064 call crcrot2(n,u(1,j),u(1,j+1),c(j),s(j))
00065 end if
00066 end do
00067
00068 end subroutine
00069
00070 subroutine crcrot1(n,x,c,s)
00071
00072 integer n
00073 complex x(n), t
00074 real c(n-1),s(n-1)
00075 integer i
00076 do i = 1,n-1
00077 if (c(i) /= 1) then
00078 t = x(i)*c(i) - x(i+1)*cmplx(0,s(i))
00079 x(i+1) = x(i+1)*c(i) - x(i)*cmplx(0,s(i))
00080 x(i) = t
00081 endif
00082 end do
00083 end subroutine
00084
00085 subroutine crcrot2(n,x,y,c,s)
00086
00087 integer n
00088 complex x(n),y(n),t
00089 real c, s
00090 integer i
00091 do i = 1,n
00092 t = x(i)*c + y(i)*cmplx(0,s)
00093 y(i) = y(i)*c + x(i)*cmplx(0,s)
00094 x(i) = t
00095 end do
00096 end subroutine
00097
00098
00099
00100
00101