subroutine cgslz(a,x,r,m,l,lda) integer m,l,lda double complex a(lda,l),x(m,l),r(1) c c cgslz solves the double complex linear system c a * x = b c with the cg - matrix a . c c on entry c c a double complex(m**2,l) c the first row of blocks of the cg - matrix . c each block is represented by columns . c on return a has been destroyed . c c x double complex(m*l) c the right hand side vector b . c c r double complex(max(m,2*l)) c a work vector . c c m integer c the order of the blocks of the matrix a . c c l integer c the number of 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 c linpack ... zgefa,zgesl c fortran ... dfloat c c internal variables c integer i1,i2,ii double precision rl c rl = dfloat(l) c c reduce the cg - matrix to a block-diagonal matrix c by the inverse discrete fourier transformation . c call salwz(a,r,r(l+1),m**2,l,lda,-1) c c compute the discrete fourier transformation of c the right hand side vector . c call salwz(x,r,r(l+1),m,l,m,1) c c solve the block-diagonal system, blocks of which c are g - matrices . c do 10 i2 = 1, l call zgefa(a(1,i2),m,m,r,ii) call zgesl(a(1,i2),m,m,r,x(1,i2),0) 10 continue c c compute the solution of the given system by c the inverse discrete fourier transformation . c call salwz(x,r,r(l+1),m,l,m,-1) c do 30 i2 = 1, l do 20 i1 = 1, m x(i1,i2) = x(i1,i2)/rl 20 continue 30 continue return end