119 SUBROUTINE zsytrs( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
127 INTEGER INFO, LDA, LDB, N, NRHS
131 COMPLEX*16 A( LDA, * ), B( LDB, * )
138 parameter( one = ( 1.0d+0, 0.0d+0 ) )
143 COMPLEX*16 AK, AKM1, AKM1K, BK, BKM1, DENOM
158 upper = lsame( uplo,
'U' )
159 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
161 ELSE IF( n.LT.0 )
THEN
163 ELSE IF( nrhs.LT.0 )
THEN
165 ELSE IF( lda.LT.
max( 1, n ) )
THEN
167 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
171 CALL xerbla(
'ZSYTRS', -info )
177 IF( n.EQ.0 .OR. nrhs.EQ.0 )
197 IF( ipiv( k ).GT.0 )
THEN
205 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
210 CALL zgeru( k-1, nrhs, -one, a( 1, k ), 1, b( k, 1 ), ldb,
215 CALL zscal( nrhs, one / a( k, k ), b( k, 1 ), ldb )
225 $
CALL zswap( nrhs, b( k-1, 1 ), ldb, b( kp, 1 ), ldb )
230 CALL zgeru( k-2, nrhs, -one, a( 1, k ), 1, b( k, 1 ), ldb,
232 CALL zgeru( k-2, nrhs, -one, a( 1, k-1 ), 1, b( k-1, 1 ),
233 $ ldb, b( 1, 1 ), ldb )
238 akm1 = a( k-1, k-1 ) / akm1k
239 ak = a( k, k ) / akm1k
240 denom = akm1*ak - one
242 bkm1 = b( k-1, j ) / akm1k
243 bk = b( k, j ) / akm1k
244 b( k-1, j ) = ( ak*bkm1-bk ) / denom
245 b( k, j ) = ( akm1*bk-bkm1 ) / denom
266 IF( ipiv( k ).GT.0 )
THEN
273 CALL zgemv(
'Transpose', k-1, nrhs, -one, b, ldb, a( 1, k ),
274 $ 1, one, b( k, 1 ), ldb )
280 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
289 CALL zgemv( 'transpose
', K-1, NRHS, -ONE, B, LDB, A( 1, K ),
290 $ 1, ONE, B( K, 1 ), LDB )
291 CALL ZGEMV( 'transpose
', K-1, NRHS, -ONE, B, LDB,
292 $ A( 1, K+1 ), 1, ONE, B( K+1, 1 ), LDB )
298 $ CALL ZSWAP( NRHS, B( K, 1 ), LDB, B( KP, 1 ), LDB )
322.GT.
IF( IPIV( K )0 ) THEN
330 $ CALL ZSWAP( NRHS, B( K, 1 ), LDB, B( KP, 1 ), LDB )
336 $ CALL ZGERU( N-K, NRHS, -ONE, A( K+1, K ), 1, B( K, 1 ),
337 $ LDB, B( K+1, 1 ), LDB )
341 CALL ZSCAL( NRHS, ONE / A( K, K ), B( K, 1 ), LDB )
351 $ CALL ZSWAP( NRHS, B( K+1, 1 ), LDB, B( KP, 1 ), LDB )
357 CALL ZGERU( N-K-1, NRHS, -ONE, A( K+2, K ), 1, B( K, 1 ),
358 $ LDB, B( K+2, 1 ), LDB )
359 CALL ZGERU( N-K-1, NRHS, -ONE, A( K+2, K+1 ), 1,
360 $ B( K+1, 1 ), LDB, B( K+2, 1 ), LDB )
366 AKM1 = A( K, K ) / AKM1K
367 AK = A( K+1, K+1 ) / AKM1K
368 DENOM = AKM1*AK - ONE
370 BKM1 = B( K, J ) / AKM1K
371 BK = B( K+1, J ) / AKM1K
372 B( K, J ) = ( AK*BKM1-BK ) / DENOM
373 B( K+1, J ) = ( AKM1*BK-BKM1 ) / DENOM
394.GT.
IF( IPIV( K )0 ) THEN
402 $ CALL ZGEMV( 'transpose
', N-K, NRHS, -ONE, B( K+1, 1 ),
403 $ LDB, A( K+1, K ), 1, ONE, B( K, 1 ), LDB )
409 $ CALL ZSWAP( NRHS, B( K, 1 ), LDB, B( KP, 1 ), LDB )
419 CALL ZGEMV( 'transpose
', N-K, NRHS, -ONE, B( K+1, 1 ),
420 $ LDB, A( K+1, K ), 1, ONE, B( K, 1 ), LDB )
421 CALL ZGEMV( 'transpose
', N-K, NRHS, -ONE, B( K+1, 1 ),
422 $ LDB, A( K+1, K-1 ), 1, ONE, B( K-1, 1 ),
430 $ CALL ZSWAP( NRHS, B( K, 1 ), LDB, B( KP, 1 ), LDB )
subroutine zgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
ZGEMV