subroutine ctgslz(a,x,r,m,l,k,lda) integer m,l,k,lda double complex a(lda,k),x(m,l,k),r(1) c c ctgslz solves the double complex linear system c a * x = b c with the ctg - matrix a . c c on entry c c a double complex(m**2*(2*l - 1),k) c the first row of outer blocks of the ctg - matrix . c each outer block is represented by its first row c of inner blocks followed by its first column c of inner blocks beginning with the second block . c each inner block is represented by columns . c on return a has been destroyed . c c x double complex(m*l*k) c the right hand side vector b . c c r double complex(max(m**2*(2*l + 3) + m,2*k)) c a work vector . c c m integer c the order of the inner blocks of the matrix a . c c l integer c the number of inner blocks in a row or column c of an outer block of the matrix a . c c k integer c the number of outer blocks in a row or column c of the matrix a . c c lda integer c the leading dimension of the array a . c c on return c c x the solution vector . c c toeplitz package. this version dated 07/23/82 . c c subroutines and functions c c toeplitz package ... salwz,tgslz c fortran ... dfloat c c internal variables c integer i1,i2,i3,ml,mm double precision rk c rk = dfloat(k) mm = m**2 ml = m*l c c reduce the ctg - matrix to a block-diagonal matrix c by the inverse discrete fourier transformation . c call salwz(a,r,r(k+1),mm*(2*l - 1),k,lda,-1) c c compute the discrete fourier transformation of c the right hand side vector . c call salwz(x,r,r(k+1),ml,k,ml,1) c c solve the block-diagonal system, blocks of which c are tg - matrices . c do 10 i3 = 1, k call tgslz(a(1,i3),x(1,1,i3),r,m,l,mm) 10 continue c c compute the solution of the given system by c the inverse discrete fourier transformation . c call salwz(x,r,r(k+1),ml,k,ml,-1) c do 40 i3 = 1, k do 30 i2 = 1, l do 20 i1 = 1, m x(i1,i2,i3) = x(i1,i2,i3)/rk 20 continue 30 continue 40 continue return end