200 SUBROUTINE stftri( TRANSR, UPLO, DIAG, N, A, INFO )
207 CHARACTER TRANSR, UPLO, DIAG
218 parameter( one = 1.0e+0 )
221 LOGICAL LOWER, NISODD, NORMALTRANSR
239 normaltransr = lsame( transr,
'N' )
240 lower = lsame( uplo,
'L' )
241 IF( .NOT.normaltransr .AND. .NOT.lsame( transr,
'T' ) )
THEN 243 ELSE IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN 245 ELSE IF( .NOT.lsame( diag,
'N' ) .AND. .NOT.lsame( diag,
'U' ) )
248 ELSE IF( n.LT.0 )
THEN 252 CALL xerbla(
'STFTRI', -info )
264 IF( mod( n, 2 ).EQ.0 )
THEN 288 IF( normaltransr )
THEN 298 CALL strtri(
'L', diag, n1, a( 0 ), n, info )
301 CALL strmm(
'R',
'L',
'N', diag, n2, n1, -one, a( 0 ),
303 CALL strtri(
'U', diag, n2, a( n ), n, info )
308 CALL strmm(
'L',
'U',
'T', diag, n2, n1, one, a( n ), n,
317 CALL strtri(
'L', diag, n1, a( n2 ), n, info )
320 CALL strmm(
'L',
'L',
'T', diag, n1, n2, -one, a( n2 ),
322 CALL strtri(
'U', diag, n2, a( n1 ), n, info )
327 CALL strmm(
'R',
'U',
'N', diag, n1, n2, one, a( n1 ),
341 CALL strtri(
'U', diag, n1, a( 0 ), n1, info )
344 CALL strmm(
'L',
'U',
'N', diag, n1, n2, -one, a( 0 ),
345 $ n1, a( n1*n1 ), n1 )
346 CALL strtri(
'L', diag, n2, a( 1 ), n1, info )
351 CALL strmm(
'R',
'L',
'T', diag, n1, n2, one, a( 1 ),
352 $ n1, a( n1*n1 ), n1 )
359 CALL strtri(
'U', diag, n1, a( n2*n2 ), n2, info )
362 CALL strmm(
'R',
'U',
'T', diag, n2, n1, -one,
363 $ a( n2*n2 ), n2, a( 0 ), n2 )
364 CALL strtri(
'L', diag, n2, a( n1*n2 ), n2, info )
369 CALL strmm(
'L',
'L',
'N', diag, n2, n1, one,
370 $ a( n1*n2 ), n2, a( 0 ), n2 )
379 IF( normaltransr )
THEN 389 CALL strtri(
'L', diag, k, a( 1 ), n+1, info )
392 CALL strmm(
'R',
'L',
'N', diag, k, k, -one, a( 1 ),
393 $ n+1, a( k+1 ), n+1 )
394 CALL strtri(
'U', diag, k, a( 0 ), n+1, info )
399 CALL strmm(
'L',
'U',
'T', diag, k, k, one, a( 0 ), n+1,
408 CALL strtri(
'L', diag, k, a( k+1 ), n+1, info )
411 CALL strmm(
'L',
'L',
'T', diag, k, k, -one, a( k+1 ),
413 CALL strtri(
'U', diag, k, a( k ), n+1, info )
418 CALL strmm(
'R',
'U',
'N', diag, k, k, one, a( k ), n+1,
431 CALL strtri(
'U', diag, k, a( k ), k, info )
434 CALL strmm(
'L',
'U',
'N', diag, k, k, -one, a( k ), k,
435 $ a( k*( k+1 ) ), k )
436 CALL strtri(
'L', diag, k, a( 0 ), k, info )
441 CALL strmm(
'R',
'L',
'T', diag, k, k, one, a( 0 ), k,
442 $ a( k*( k+1 ) ), k )
449 CALL strtri(
'U', diag, k, a( k*( k+1 ) ), k, info )
452 CALL strmm(
'R',
'U',
'T', diag, k, k, -one,
453 $ a( k*( k+1 ) ), k, a( 0 ), k )
454 CALL strtri(
'L', diag, k, a( k*k ), k, info )
459 CALL strmm(
'L',
'L',
'N', diag, k, k, one, a( k*k ), k,
subroutine strmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRMM
subroutine stftri(TRANSR, UPLO, DIAG, N, A, INFO)
STFTRI
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine strtri(UPLO, DIAG, N, A, LDA, INFO)
STRTRI