169 SUBROUTINE clatdf( IJOB, N, Z, LDZ, RHS, RDSUM, RDSCAL, IPIV,
182 INTEGER IPIV( * ), JPIV( * )
183 COMPLEX RHS( * ), Z( LDZ, * )
190 parameter( maxdim = 2 )
192 parameter( zero = 0.0e+0, one = 1.0e+0 )
194 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
197 INTEGER I, INFO, J, K
198 REAL RTEMP, SCALE, SMINU, SPLUS
199 COMPLEX BM, BP, PMONE, TEMP
203 COMPLEX WORK( 4*MAXDIM ), XM( MAXDIM ), XP( MAXDIM )
212 EXTERNAL scasum, cdotc
215 INTRINSIC abs, real, sqrt
223 CALL claswp( 1, rhs, ldz, 1, n-1, ipiv, 1 )
236 splus = splus + real( cdotc( n-j, z( j+1, j ), 1, z( j+1,
238 sminu = real( cdotc( n-j, z( j+1, j ), 1, rhs( j+1 ), 1 ) )
239 splus = splus*real( rhs( j ) )
240 IF( splus.GT.sminu )
THEN
242 ELSE IF( sminu.GT.splus )
THEN
252 rhs( j ) = rhs( j ) + pmone
259 CALL caxpy( n-j, temp, z( j+1, j ), 1, rhs( j+1 ), 1 )
267 CALL ccopy( n-1, rhs, 1, work, 1 )
268 work( n ) = rhs( n ) + cone
269 rhs( n ) = rhs( n ) - cone
273 temp = cone / z( i, i )
274 work( i ) = work( i )*temp
275 rhs( i ) = rhs( i )*temp
277 work( i ) = work( i ) - work( k )*( z( i, k )*temp )
278 rhs( i ) = rhs( i ) - rhs( k )*( z( i, k )*temp )
280 splus = splus + abs( work( i ) )
281 sminu = sminu + abs( rhs( i ) )
284 $
CALL ccopy( n, work, 1, rhs, 1 )
288 CALL claswp( 1, rhs, ldz, 1, n-1, jpiv, -1 )
292 CALL classq( n, rhs, 1, rdscal, rdsum )
300 CALL cgecon(
'I', n, z, ldz, one, rtemp, work, rwork, info )
301 CALL ccopy( n, work( n+1 ), 1, xm, 1 )
305 CALL claswp( 1, xm, ldz, 1, n-1, ipiv, -1 )
306 temp = cone / sqrt( cdotc( n, xm, 1, xm, 1 ) )
307 CALL cscal( n, temp, xm, 1 )
308 CALL ccopy( n, xm, 1, xp, 1 )
309 CALL caxpy( n, cone, rhs, 1, xp, 1 )
310 CALL caxpy( n, -cone, xm, 1, rhs, 1 )
311 CALL cgesc2( n, z, ldz, rhs, ipiv, jpiv, scale )
312 CALL cgesc2( n, z, ldz, xp, ipiv, jpiv, scale )
313 IF( scasum( n, xp, 1 ).GT.scasum( n, rhs, 1 ) )
314 $
CALL ccopy( n, xp, 1, rhs, 1 )
318 CALL classq( n, rhs, 1, rdscal, rdsum )