Diff for /rpl/lapack/lapack/dtftri.f between versions 1.5 and 1.6

version 1.5, 2010/12/21 13:53:40 version 1.6, 2011/07/22 07:38:12
Line 1 Line 1
       SUBROUTINE DTFTRI( TRANSR, UPLO, DIAG, N, A, INFO )        SUBROUTINE DTFTRI( TRANSR, UPLO, DIAG, N, A, INFO )
 *  *
 *  -- LAPACK routine (version 3.3.0)                                  --  *  -- LAPACK routine (version 3.3.1)                                  --
 *  *
 *  -- Contributed by Fred Gustavson of the IBM Watson Research Center --  *  -- Contributed by Fred Gustavson of the IBM Watson Research Center --
 *     November 2010     --  *  -- April 2011                                                      ----
 *  *
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
Line 181 Line 181
       ELSE IF( .NOT.LOWER .AND. .NOT.LSAME( UPLO, 'U' ) ) THEN        ELSE IF( .NOT.LOWER .AND. .NOT.LSAME( UPLO, 'U' ) ) THEN
          INFO = -2           INFO = -2
       ELSE IF( .NOT.LSAME( DIAG, 'N' ) .AND. .NOT.LSAME( DIAG, 'U' ) )        ELSE IF( .NOT.LSAME( DIAG, 'N' ) .AND. .NOT.LSAME( DIAG, 'U' ) )
      +         THEN       $         THEN
          INFO = -3           INFO = -3
       ELSE IF( N.LT.0 ) THEN        ELSE IF( N.LT.0 ) THEN
          INFO = -4           INFO = -4
Line 194 Line 194
 *     Quick return if possible  *     Quick return if possible
 *  *
       IF( N.EQ.0 )        IF( N.EQ.0 )
      +   RETURN       $   RETURN
 *  *
 *     If N is odd, set NISODD = .TRUE.  *     If N is odd, set NISODD = .TRUE.
 *     If N is even, set K = N/2 and NISODD = .FALSE.  *     If N is even, set K = N/2 and NISODD = .FALSE.
Line 235 Line 235
 *  *
                CALL DTRTRI( 'L', DIAG, N1, A( 0 ), N, INFO )                 CALL DTRTRI( 'L', DIAG, N1, A( 0 ), N, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'L', 'N', DIAG, N2, N1, -ONE, A( 0 ),                 CALL DTRMM( 'R', 'L', 'N', DIAG, N2, N1, -ONE, A( 0 ),
      +                     N, A( N1 ), N )       $                     N, A( N1 ), N )
                CALL DTRTRI( 'U', DIAG, N2, A( N ), N, INFO )                 CALL DTRTRI( 'U', DIAG, N2, A( N ), N, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + N1       $            INFO = INFO + N1
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'U', 'T', DIAG, N2, N1, ONE, A( N ), N,                 CALL DTRMM( 'L', 'U', 'T', DIAG, N2, N1, ONE, A( N ), N,
      +                     A( N1 ), N )       $                     A( N1 ), N )
 *  *
             ELSE              ELSE
 *  *
Line 254 Line 254
 *  *
                CALL DTRTRI( 'L', DIAG, N1, A( N2 ), N, INFO )                 CALL DTRTRI( 'L', DIAG, N1, A( N2 ), N, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'L', 'T', DIAG, N1, N2, -ONE, A( N2 ),                 CALL DTRMM( 'L', 'L', 'T', DIAG, N1, N2, -ONE, A( N2 ),
      +                     N, A( 0 ), N )       $                     N, A( 0 ), N )
                CALL DTRTRI( 'U', DIAG, N2, A( N1 ), N, INFO )                 CALL DTRTRI( 'U', DIAG, N2, A( N1 ), N, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + N1       $            INFO = INFO + N1
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'U', 'N', DIAG, N1, N2, ONE, A( N1 ),                 CALL DTRMM( 'R', 'U', 'N', DIAG, N1, N2, ONE, A( N1 ),
      +                     N, A( 0 ), N )       $                     N, A( 0 ), N )
 *  *
             END IF              END IF
 *  *
Line 278 Line 278
 *  *
                CALL DTRTRI( 'U', DIAG, N1, A( 0 ), N1, INFO )                 CALL DTRTRI( 'U', DIAG, N1, A( 0 ), N1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'U', 'N', DIAG, N1, N2, -ONE, A( 0 ),                 CALL DTRMM( 'L', 'U', 'N', DIAG, N1, N2, -ONE, A( 0 ),
      +                     N1, A( N1*N1 ), N1 )       $                     N1, A( N1*N1 ), N1 )
                CALL DTRTRI( 'L', DIAG, N2, A( 1 ), N1, INFO )                 CALL DTRTRI( 'L', DIAG, N2, A( 1 ), N1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + N1       $            INFO = INFO + N1
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'L', 'T', DIAG, N1, N2, ONE, A( 1 ),                 CALL DTRMM( 'R', 'L', 'T', DIAG, N1, N2, ONE, A( 1 ),
      +                     N1, A( N1*N1 ), N1 )       $                     N1, A( N1*N1 ), N1 )
 *  *
             ELSE              ELSE
 *  *
Line 296 Line 296
 *  *
                CALL DTRTRI( 'U', DIAG, N1, A( N2*N2 ), N2, INFO )                 CALL DTRTRI( 'U', DIAG, N1, A( N2*N2 ), N2, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'U', 'T', DIAG, N2, N1, -ONE,                 CALL DTRMM( 'R', 'U', 'T', DIAG, N2, N1, -ONE,
      +                     A( N2*N2 ), N2, A( 0 ), N2 )       $                     A( N2*N2 ), N2, A( 0 ), N2 )
                CALL DTRTRI( 'L', DIAG, N2, A( N1*N2 ), N2, INFO )                 CALL DTRTRI( 'L', DIAG, N2, A( N1*N2 ), N2, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + N1       $            INFO = INFO + N1
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'L', 'N', DIAG, N2, N1, ONE,                 CALL DTRMM( 'L', 'L', 'N', DIAG, N2, N1, ONE,
      +                     A( N1*N2 ), N2, A( 0 ), N2 )       $                     A( N1*N2 ), N2, A( 0 ), N2 )
             END IF              END IF
 *  *
          END IF           END IF
Line 326 Line 326
 *  *
                CALL DTRTRI( 'L', DIAG, K, A( 1 ), N+1, INFO )                 CALL DTRTRI( 'L', DIAG, K, A( 1 ), N+1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'L', 'N', DIAG, K, K, -ONE, A( 1 ),                 CALL DTRMM( 'R', 'L', 'N', DIAG, K, K, -ONE, A( 1 ),
      +                     N+1, A( K+1 ), N+1 )       $                     N+1, A( K+1 ), N+1 )
                CALL DTRTRI( 'U', DIAG, K, A( 0 ), N+1, INFO )                 CALL DTRTRI( 'U', DIAG, K, A( 0 ), N+1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + K       $            INFO = INFO + K
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'U', 'T', DIAG, K, K, ONE, A( 0 ), N+1,                 CALL DTRMM( 'L', 'U', 'T', DIAG, K, K, ONE, A( 0 ), N+1,
      +                     A( K+1 ), N+1 )       $                     A( K+1 ), N+1 )
 *  *
             ELSE              ELSE
 *  *
Line 345 Line 345
 *  *
                CALL DTRTRI( 'L', DIAG, K, A( K+1 ), N+1, INFO )                 CALL DTRTRI( 'L', DIAG, K, A( K+1 ), N+1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'L', 'T', DIAG, K, K, -ONE, A( K+1 ),                 CALL DTRMM( 'L', 'L', 'T', DIAG, K, K, -ONE, A( K+1 ),
      +                     N+1, A( 0 ), N+1 )       $                     N+1, A( 0 ), N+1 )
                CALL DTRTRI( 'U', DIAG, K, A( K ), N+1, INFO )                 CALL DTRTRI( 'U', DIAG, K, A( K ), N+1, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + K       $            INFO = INFO + K
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'U', 'N', DIAG, K, K, ONE, A( K ), N+1,                 CALL DTRMM( 'R', 'U', 'N', DIAG, K, K, ONE, A( K ), N+1,
      +                     A( 0 ), N+1 )       $                     A( 0 ), N+1 )
             END IF              END IF
          ELSE           ELSE
 *  *
Line 368 Line 368
 *  *
                CALL DTRTRI( 'U', DIAG, K, A( K ), K, INFO )                 CALL DTRTRI( 'U', DIAG, K, A( K ), K, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'U', 'N', DIAG, K, K, -ONE, A( K ), K,                 CALL DTRMM( 'L', 'U', 'N', DIAG, K, K, -ONE, A( K ), K,
      +                     A( K*( K+1 ) ), K )       $                     A( K*( K+1 ) ), K )
                CALL DTRTRI( 'L', DIAG, K, A( 0 ), K, INFO )                 CALL DTRTRI( 'L', DIAG, K, A( 0 ), K, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + K       $            INFO = INFO + K
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'L', 'T', DIAG, K, K, ONE, A( 0 ), K,                 CALL DTRMM( 'R', 'L', 'T', DIAG, K, K, ONE, A( 0 ), K,
      +                     A( K*( K+1 ) ), K )       $                     A( K*( K+1 ) ), K )
             ELSE              ELSE
 *  *
 *              SRPA for UPPER, TRANSPOSE and N is even (see paper)  *              SRPA for UPPER, TRANSPOSE and N is even (see paper)
Line 386 Line 386
 *  *
                CALL DTRTRI( 'U', DIAG, K, A( K*( K+1 ) ), K, INFO )                 CALL DTRTRI( 'U', DIAG, K, A( K*( K+1 ) ), K, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'R', 'U', 'T', DIAG, K, K, -ONE,                 CALL DTRMM( 'R', 'U', 'T', DIAG, K, K, -ONE,
      +                     A( K*( K+1 ) ), K, A( 0 ), K )       $                     A( K*( K+1 ) ), K, A( 0 ), K )
                CALL DTRTRI( 'L', DIAG, K, A( K*K ), K, INFO )                 CALL DTRTRI( 'L', DIAG, K, A( K*K ), K, INFO )
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            INFO = INFO + K       $            INFO = INFO + K
                IF( INFO.GT.0 )                 IF( INFO.GT.0 )
      +            RETURN       $            RETURN
                CALL DTRMM( 'L', 'L', 'N', DIAG, K, K, ONE, A( K*K ), K,                 CALL DTRMM( 'L', 'L', 'N', DIAG, K, K, ONE, A( K*K ), K,
      +                     A( 0 ), K )       $                     A( 0 ), K )
             END IF              END IF
          END IF           END IF
       END IF        END IF

Removed from v.1.5  
changed lines
  Added in v.1.6


CVSweb interface <joel.bertrand@systella.fr>