112 SUBROUTINE zhptrs( UPLO, N, NRHS, AP, IPIV, B, LDB, INFO )
120 INTEGER INFO, LDB, N, NRHS
124 COMPLEX*16 AP( * ), B( LDB, * )
131 parameter( one = ( 1.0d+0, 0.0d+0 ) )
137 COMPLEX*16 AK, AKM1, AKM1K, BK, BKM1, DENOM
148 INTRINSIC dble, dconjg, max
153 upper = lsame( uplo,
'U' )
154 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
156 ELSE IF( n.LT.0 )
THEN
158 ELSE IF( nrhs.LT.0 )
THEN
160 ELSE IF( ldb.LT.max( 1, n ) )
THEN
164 CALL xerbla(
'ZHPTRS', -info )
170 IF( n.EQ.0 .OR. nrhs.EQ.0 )
183 kc = n*( n+1 ) / 2 + 1
192 IF( ipiv( k ).GT.0 )
THEN
200 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
205 CALL zgeru( k-1, nrhs, -one, ap( kc ), 1, b( k, 1 ), ldb,
210 s = dble( one ) / dble( ap( kc+k-1 ) )
211 CALL zdscal( nrhs, s, b( k, 1 ), ldb )
221 $
CALL zswap( nrhs, b( k-1, 1 ), ldb, b( kp, 1 ), ldb )
226 CALL zgeru( k-2, nrhs, -one, ap( kc ), 1, b( k, 1 ), ldb,
228 CALL zgeru( k-2, nrhs, -one, ap( kc-( k-1 ) ), 1,
229 $ b( k-1, 1 ), ldb, b( 1, 1 ), ldb )
234 akm1 = ap( kc-1 ) / akm1k
235 ak = ap( kc+k-1 ) / dconjg( akm1k )
236 denom = akm1*ak - one
238 bkm1 = b( k-1, j ) / akm1k
239 bk = b( k, j ) / dconjg( akm1k )
240 b( k-1, j ) = ( ak*bkm1-bk ) / denom
241 b( k, j ) = ( akm1*bk-bkm1 ) / denom
264 IF( ipiv( k ).GT.0 )
THEN
272 CALL zlacgv( nrhs, b( k, 1 ), ldb )
273 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
274 $ ldb, ap( kc ), 1, one, b( k, 1 ), ldb )
275 CALL zlacgv( nrhs, b( k, 1 ), ldb )
282 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
293 CALL zlacgv( nrhs, b( k, 1 ), ldb )
294 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
295 $ ldb, ap( kc ), 1, one, b( k, 1 ), ldb )
296 CALL zlacgv( nrhs, b( k, 1 ), ldb )
298 CALL zlacgv( nrhs, b( k+1, 1 ), ldb )
299 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
300 $ ldb, ap( kc+k ), 1, one, b( k+1, 1 ), ldb )
301 CALL zlacgv( nrhs, b( k+1, 1 ), ldb )
308 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
334 IF( ipiv( k ).GT.0 )
THEN
342 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
348 $
CALL zgeru( n-k, nrhs, -one, ap( kc+1 ), 1, b( k, 1 ),
349 $ ldb, b( k+1, 1 ), ldb )
353 s = dble( one ) / dble( ap( kc ) )
354 CALL zdscal( nrhs, s, b( k, 1 ), ldb )
365 $
CALL zswap( nrhs, b( k+1, 1 ), ldb, b( kp, 1 ), ldb )
371 CALL zgeru( n-k-1, nrhs, -one, ap( kc+2 ), 1, b( k,
373 $ ldb, b( k+2, 1 ), ldb )
374 CALL zgeru( n-k-1, nrhs, -one, ap( kc+n-k+2 ), 1,
375 $ b( k+1, 1 ), ldb, b( k+2, 1 ), ldb )
381 akm1 = ap( kc ) / dconjg( akm1k )
382 ak = ap( kc+n-k+1 ) / akm1k
383 denom = akm1*ak - one
385 bkm1 = b( k, j ) / dconjg( akm1k )
386 bk = b( k+1, j ) / akm1k
387 b( k, j ) = ( ak*bkm1-bk ) / denom
388 b( k+1, j ) = ( akm1*bk-bkm1 ) / denom
390 kc = kc + 2*( n-k ) + 1
403 kc = n*( n+1 ) / 2 + 1
412 IF( ipiv( k ).GT.0 )
THEN
420 CALL zlacgv( nrhs, b( k, 1 ), ldb )
421 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
422 $ b( k+1, 1 ), ldb, ap( kc+1 ), 1, one,
424 CALL zlacgv( nrhs, b( k, 1 ), ldb )
431 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
441 CALL zlacgv( nrhs, b( k, 1 ), ldb )
442 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
443 $ b( k+1, 1 ), ldb, ap( kc+1 ), 1, one,
445 CALL zlacgv( nrhs, b( k, 1 ), ldb )
447 CALL zlacgv( nrhs, b( k-1, 1 ), ldb )
448 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
449 $ b( k+1, 1 ), ldb, ap( kc-( n-k ) ), 1, one,
451 CALL zlacgv( nrhs, b( k-1, 1 ), ldb )
458 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )