Fix out of bound access in LIN TESTING with XBLAS found with -fcheck-bounds with...
authorjulie <julielangou@users.noreply.github.com>
Fri, 16 Jan 2009 22:27:20 +0000 (22:27 +0000)
committerjulie <julielangou@users.noreply.github.com>
Fri, 16 Jan 2009 22:27:20 +0000 (22:27 +0000)
"Error in DLA_GBAMV.f line 226: forrtl: severe (408): fort: (2): Subscript #1 of the array AB has value 2 which is greater than the upper bound of 1"

Reported in http://icl.cs.utk.edu/trac/lapack-dev/ticket/45

SRC/cla_gbamv.f
SRC/cla_gbrcond_c.f
SRC/cla_gbrcond_x.f
SRC/dla_gbamv.f
SRC/dla_gbrcond.f
SRC/sla_gbamv.f
SRC/sla_gbrcond.f
SRC/zla_gbamv.f
SRC/zla_gbrcond_c.f
SRC/zla_gbrcond_x.f

index 9bfbab0..a402231 100644 (file)
@@ -1,7 +1,7 @@
       SUBROUTINE CLA_GBAMV( TRANS, M, N, KL, KU, ALPHA, AB, LDAB, X,
      $                      INCX, BETA, Y, INCY )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -23,7 +23,7 @@
 *  Purpose
 *  =======
 *
-*  SLA_GEAMV  performs one of the matrix-vector operations
+*  SLA_GBAMV  performs one of the matrix-vector operations
 *
 *          y := alpha*abs(A)*abs(x) + beta*abs(y),
 *     or   y := alpha*abs(A)'*abs(x) + beta*abs(y),
 *     .. Local Scalars ..
       LOGICAL            SYMB_ZERO
       REAL               TEMP, SAFE1
-      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD
+      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD, KE
       COMPLEX            CDUM
 *     ..
 *     .. External Subroutines ..
          INFO = 2
       ELSE IF( N.LT.0 )THEN
          INFO = 3
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.M-1 ) THEN
          INFO = 4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = 5
       ELSE IF( LDAB.LT.KL+KU+1 )THEN
          INFO = 6
 *     to per-column.
 *
       KD = KU + 1
+      KE = KL + 1
       IY = KY
       IF ( INCX.EQ.1 ) THEN
          DO I = 1, LENY
                Y( IY ) = BETA * ABS( Y( IY ) )
             END IF
             IF ( ALPHA .NE. 0.0 ) THEN
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = CABS1( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = CABS1( AB( J, KD+I-J ) )
+                     TEMP = CABS1( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
             END IF
             IF ( ALPHA .NE. 0.0 ) THEN
                JX = KX
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
 
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = CABS1( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = CABS1( AB( J, KD+I-J ) )
+                     TEMP = CABS1( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
index 434ebbc..ec53670 100644 (file)
@@ -2,7 +2,7 @@
      $                             LDAFB, IPIV, C, CAPPLY, INFO, WORK,
      $                             RWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -15,7 +15,7 @@
 *     .. Scalar Arguments ..
       CHARACTER          TRANS
       LOGICAL            CAPPLY
-      INTEGER            N, KL, KU, KD, LDAB, LDAFB, INFO
+      INTEGER            N, KL, KU, KD, KE, LDAB, LDAFB, INFO
 *     ..
 *     .. Array Arguments ..
       INTEGER            IPIV( * )
      $     LSAME( TRANS, 'C' ) ) THEN
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
+         INFO = -4
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
+         INFO = -5
+      ELSE IF( LDAB.LT.KL+KU+1 ) THEN
+         INFO = -8
+      ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
+         INFO = -10
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_GBRCOND_C', -INFO )
 *
       ANORM = 0.0E+0
       KD = KU + 1
+      KE = KL + 1
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0E+0
             IF ( CAPPLY ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1(AB( KD+I-J, J ) ) / C( J )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KD+I-J, J ) ) / C( J )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( KD+I-J, J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KD+I-J, J ) )
                END DO
             END IF
             RWORK( 2*N+I ) = TMP
          DO I = 1, N
             TMP = 0.0E+0
             IF ( CAPPLY ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( J, KD+I-J ) ) / C( J )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KE-I+J, I ) ) / C( J )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( J, KD+I-J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KE-I+J, I ) )
                END DO
             END IF
             RWORK( 2*N+I ) = TMP
index 073cecc..75d0461 100644 (file)
@@ -1,7 +1,7 @@
       REAL FUNCTION CLA_GBRCOND_X( TRANS, N, KL, KU, AB, LDAB, AFB,
      $                             LDAFB, IPIV, X, INFO, WORK, RWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -13,7 +13,7 @@
 *     ..
 *     .. Scalar Arguments ..
       CHARACTER          TRANS
-      INTEGER            N, KL, KU, KD, LDAB, LDAFB, INFO
+      INTEGER            N, KL, KU, KD, KE, LDAB, LDAFB, INFO
 *     ..
 *     .. Array Arguments ..
       INTEGER            IPIV( * )
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
+         INFO = -4
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
+         INFO = -5
+      ELSE IF( LDAB.LT.KL+KU+1 ) THEN
+         INFO = -8
+      ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
+         INFO = -10
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CLA_GBRCOND_X', -INFO )
 *     Compute norm of op(A)*op2(C).
 *
       KD = KU + 1
+      KE = KL + 1
       ANORM = 0.0
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0E+0
-            DO J = 1, N
-               IF ( I.GE.MAX( 1, J-KU ) .AND. I.LE.MIN( N, J+KL ) ) THEN
-                  TMP = TMP + CABS1( AB( KD+I-J, J) * X( J ) )
-               END IF
+            DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+               TMP = TMP + CABS1( AB( KD+I-J, J) * X( J ) )
             END DO
             RWORK( 2*N+I ) = TMP
             ANORM = MAX( ANORM, TMP )
       ELSE
          DO I = 1, N
             TMP = 0.0E+0
-            DO J = 1, N
-               IF ( I.GE.MAX( 1, J-KU ) .AND. I.LE.MIN( N, J+KL ) ) THEN
-                  TMP = TMP + CABS1( AB( J, KD+I-J ) * X( J ) )
-               END IF
+            DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+               TMP = TMP + CABS1( AB( KE-I+J, I ) * X( J ) )
             END DO
             RWORK( 2*N+I ) = TMP
             ANORM = MAX( ANORM, TMP )
index cab0a64..64f29be 100644 (file)
@@ -1,7 +1,7 @@
       SUBROUTINE DLA_GBAMV( TRANS, M, N, KL, KU, ALPHA, AB, LDAB, X,
      $                      INCX, BETA, Y, INCY )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -22,7 +22,7 @@
 *  Purpose
 *  =======
 *
-*  DLA_GEAMV  performs one of the matrix-vector operations
+*  DLA_GBAMV  performs one of the matrix-vector operations
 *
 *          y := alpha*abs(A)*abs(x) + beta*abs(y),
 *     or   y := alpha*abs(A)'*abs(x) + beta*abs(y),
 *     .. Local Scalars ..
       LOGICAL            SYMB_ZERO
       DOUBLE PRECISION   TEMP, SAFE1
-      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD
+      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD, KE
 *     ..
 *     .. External Subroutines ..
       EXTERNAL           XERBLA, DLAMCH
          INFO = 2
       ELSE IF( N.LT.0 )THEN
          INFO = 3
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.M-1 ) THEN
          INFO = 4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = 5
       ELSE IF( LDAB.LT.KL+KU+1 )THEN
          INFO = 6
 *     to per-column.
 *
       KD = KU + 1
+      KE = KL + 1
       IY = KY
       IF ( INCX.EQ.1 ) THEN
          DO I = 1, LENY
                Y( IY ) = BETA * ABS( Y( IY ) )
             END IF
             IF ( ALPHA .NE. ZERO ) THEN
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = ABS( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = ABS( AB( J, KD+I-J ) )
+                     TEMP = ABS( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
             END IF
             IF ( ALPHA .NE. ZERO ) THEN
                JX = KX
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
 
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = ABS( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = ABS( AB( J, KD+I-J ) )
+                     TEMP = ABS( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
index 904e50a..cf2c5ca 100644 (file)
@@ -1,8 +1,8 @@
       DOUBLE PRECISION FUNCTION DLA_GBRCOND( TRANS, N, KL, KU, AB, LDAB,
-     $                            AFB, LDAFB, IPIV, CMODE, C, INFO, 
+     $                            AFB, LDAFB, IPIV, CMODE, C, INFO,
      $     WORK, IWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -46,7 +46,7 @@
 *
 *     .. Local Scalars ..
       LOGICAL            NOTRANS
-      INTEGER            KASE, I, J, KD
+      INTEGER            KASE, I, J, KD, KE
       DOUBLE PRECISION   AINVNM, TMP
 *     ..
 *     .. Local Arrays ..
@@ -73,9 +73,9 @@
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
          INFO = -4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = -5
       ELSE IF( LDAB.LT.KL+KU+1 ) THEN
          INFO = -8
 *     inv(R)*A*C has unit 1-norm.
 *
       KD = KU + 1
+      KE = KL + 1
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0D+0
                IF ( CMODE .EQ. 1 ) THEN
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) * C( J ) )
-                     END IF
+                  DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                     TMP = TMP + ABS( AB( KD+I-J, J ) * C( J ) )
                   END DO
                ELSE IF ( CMODE .EQ. 0 ) THEN
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) )
-                     END IF
+                  DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                     TMP = TMP + ABS( AB( KD+I-J, J ) )
                   END DO
                ELSE
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) / C( J ) )
-                     END IF
+                  DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                     TMP = TMP + ABS( AB( KD+I-J, J ) / C( J ) )
                   END DO
                END IF
             WORK( 2*N+I ) = TMP
          DO I = 1, N
             TMP = 0.0D+0
             IF ( CMODE .EQ. 1 ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS( AB( J, KD+I-J ) * C( J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) * C( J ) )
                END DO
             ELSE IF ( CMODE .EQ. 0 ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS(AB(J,KD+I-J))
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS( AB( J, KD+I-J ) / C( J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) / C( J ) )
                END DO
             END IF
             WORK( 2*N+I ) = TMP
index fb8ff49..22e85bf 100644 (file)
@@ -1,7 +1,7 @@
       SUBROUTINE SLA_GBAMV( TRANS, M, N, KL, KU, ALPHA, AB, LDAB, X,
      $                      INCX, BETA, Y, INCY )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -22,7 +22,7 @@
 *  Purpose
 *  =======
 *
-*  SLA_GEAMV  performs one of the matrix-vector operations
+*  SLA_GBAMV  performs one of the matrix-vector operations
 *
 *          y := alpha*abs(A)*abs(x) + beta*abs(y),
 *     or   y := alpha*abs(A)'*abs(x) + beta*abs(y),
 *     .. Local Scalars ..
       LOGICAL            SYMB_ZERO
       REAL               TEMP, SAFE1
-      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD
+      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD, KE
 *     ..
 *     .. External Subroutines ..
       EXTERNAL           XERBLA, SLAMCH
          INFO = 2
       ELSE IF( N.LT.0 )THEN
          INFO = 3
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.M-1 ) THEN
          INFO = 4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = 5
       ELSE IF( LDAB.LT.KL+KU+1 )THEN
          INFO = 6
 *     to per-column.
 *
       KD = KU + 1
+      KE = KL + 1
       IY = KY
       IF ( INCX.EQ.1 ) THEN
          DO I = 1, LENY
                Y( IY ) = BETA * ABS( Y( IY ) )
             END IF
             IF ( ALPHA .NE. ZERO ) THEN
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
+
                      TEMP = ABS( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = ABS( AB( J, KD+I-J ) )
+                     TEMP = ABS( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
             END IF
             IF ( ALPHA .NE. ZERO ) THEN
                JX = KX
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
 
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = ABS( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = ABS( AB( J, KD+I-J ) )
+                     TEMP = ABS( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
index eba7841..ee18d28 100644 (file)
@@ -1,7 +1,7 @@
       REAL FUNCTION SLA_GBRCOND( TRANS, N, KL, KU, AB, LDAB, AFB, LDAFB,
      $                           IPIV, CMODE, C, INFO, WORK, IWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -45,7 +45,7 @@
 *
 *     .. Local Scalars ..
       LOGICAL            NOTRANS
-      INTEGER            KASE, I, J, KD
+      INTEGER            KASE, I, J, KD, KE
       REAL               AINVNM, TMP
 *     ..
 *     .. Local Arrays ..
@@ -72,9 +72,9 @@
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
          INFO = -4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = -5
       ELSE IF( LDAB.LT.KL+KU+1 ) THEN
          INFO = -8
 *     inv(R)*A*C has unit 1-norm.
 *
       KD = KU + 1
+      KE = KL + 1
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0
                IF ( CMODE .EQ. 1 ) THEN
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) * C( J ) )
-                     END IF
-                  END DO
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KD+I-J, J ) * C( J ) )
+               END DO
                ELSE IF ( CMODE .EQ. 0 ) THEN
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) )
-                     END IF
+                  DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                     TMP = TMP + ABS( AB( KD+I-J, J ) )
                   END DO
                ELSE
-                  DO J = 1, N
-                     IF ( I.GE.MAX( 1, J-KU )
-     $                    .AND. I.LE.MIN( N, J+KL ) ) THEN
-                        TMP = TMP + ABS( AB( KD+I-J, J ) / C( J ) )
-                     END IF
+                  DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                     TMP = TMP + ABS( AB( KD+I-J, J ) / C( J ) )
                   END DO
                END IF
             WORK( 2*N+I ) = TMP
          DO I = 1, N
             TMP = 0.0
             IF ( CMODE .EQ. 1 ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS( AB( J, KD+I-J ) * C( J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) * C( J ) )
                END DO
             ELSE IF ( CMODE .EQ. 0 ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS(AB(J,KD+I-J))
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + ABS( AB( J, KD+I-J ) / C( J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + ABS( AB( KE-I+J, I ) / C( J ) )
                END DO
             END IF
             WORK( 2*N+I ) = TMP
index fb25201..3e89952 100644 (file)
@@ -1,7 +1,7 @@
       SUBROUTINE ZLA_GBAMV( TRANS, M, N, KL, KU, ALPHA, AB, LDAB, X,
      $                      INCX, BETA, Y, INCY )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -23,7 +23,7 @@
 *  Purpose
 *  =======
 *
-*  DLA_GEAMV  performs one of the matrix-vector operations
+*  DLA_GBAMV  performs one of the matrix-vector operations
 *
 *          y := alpha*abs(A)*abs(x) + beta*abs(y),
 *     or   y := alpha*abs(A)'*abs(x) + beta*abs(y),
 *     .. Local Scalars ..
       LOGICAL            SYMB_ZERO
       DOUBLE PRECISION   TEMP, SAFE1
-      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD
+      INTEGER            I, INFO, IY, J, JX, KX, KY, LENX, LENY, KD, KE
       COMPLEX*16         CDUM
 *     ..
 *     .. External Subroutines ..
          INFO = 2
       ELSE IF( N.LT.0 )THEN
          INFO = 3
-      ELSE IF( KL.LT.0 ) THEN
+      ELSE IF( KL.LT.0 .OR. KL.GT.M-1 ) THEN
          INFO = 4
-      ELSE IF( KU.LT.0 ) THEN
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
          INFO = 5
       ELSE IF( LDAB.LT.KL+KU+1 )THEN
          INFO = 6
 *     to per-column.
 *
       KD = KU + 1
+      KE = KL + 1
       IY = KY
       IF ( INCX.EQ.1 ) THEN
          DO I = 1, LENY
                Y( IY ) = BETA * ABS( Y( IY ) )
             END IF
             IF ( ALPHA .NE. 0.0D+0 ) THEN
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
+              
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = CABS1( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = CABS1( AB( J, KD+I-J ) )
+                     TEMP = CABS1( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
             END IF
             IF ( ALPHA .NE. 0.0D+0 ) THEN
                JX = KX
-               DO J = MAX( I-KU, 1 ), MIN( I+KL, LENX )
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, LENX )
 
                   IF( TRANS.EQ.ILATRANS( 'N' ) )THEN
                      TEMP = CABS1( AB( KD+I-J, J ) )
                   ELSE
-                     TEMP = CABS1( AB( J, KD+I-J ) )
+                     TEMP = CABS1( AB( KE-I+J, I ) )
                   END IF
 
                   SYMB_ZERO = SYMB_ZERO .AND.
index 6765e59..3c2241c 100644 (file)
@@ -1,8 +1,8 @@
-      DOUBLE PRECISION FUNCTION ZLA_GBRCOND_C( TRANS, N, KL, KU, AB, 
-     $                             LDAB, AFB, LDAFB, IPIV, C, CAPPLY, 
+      DOUBLE PRECISION FUNCTION ZLA_GBRCOND_C( TRANS, N, KL, KU, AB,
+     $                             LDAB, AFB, LDAFB, IPIV, C, CAPPLY,
      $                             INFO, WORK, RWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -15,7 +15,7 @@
 *     .. Scalar Arguments ..
       CHARACTER          TRANS
       LOGICAL            CAPPLY
-      INTEGER            N, KL, KU, KD, LDAB, LDAFB, INFO
+      INTEGER            N, KL, KU, KD, KE, LDAB, LDAFB, INFO
 *     ..
 *     .. Array Arguments ..
       INTEGER            IPIV( * )
      $     LSAME( TRANS, 'C' ) ) THEN
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
+         INFO = -4
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
+         INFO = -5
+      ELSE IF( LDAB.LT.KL+KU+1 ) THEN
+         INFO = -8
+      ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
+         INFO = -10
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_GBRCOND_C', -INFO )
 *
       ANORM = 0.0D+0
       KD = KU + 1
+      KE = KL + 1
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0D+0
             IF ( CAPPLY ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1(AB( KD+I-J, J ) ) / C( J )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KD+I-J, J ) ) / C( J )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( KD+I-J, J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KD+I-J, J ) )
                END DO
             END IF
             RWORK( 2*N+I ) = TMP
          DO I = 1, N
             TMP = 0.0D+0
             IF ( CAPPLY ) THEN
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( J, KD+I-J ) ) / C( J )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KE-I+J, I ) ) / C( J )
                END DO
             ELSE
-               DO J = 1, N
-                  IF ( I.GE.MAX( 1, J-KU )
-     $                 .AND. I.LE.MIN( N, J+KL ) ) THEN
-                     TMP = TMP + CABS1( AB( J, KD+I-J ) )
-                  END IF
+               DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+                  TMP = TMP + CABS1( AB( KE-I+J, I ) )
                END DO
             END IF
             RWORK( 2*N+I ) = TMP
index 7bc1aa3..236508b 100644 (file)
@@ -1,8 +1,8 @@
-      DOUBLE PRECISION FUNCTION ZLA_GBRCOND_X( TRANS, N, KL, KU, AB, 
-     $                             LDAB, AFB, LDAFB, IPIV, X, INFO, 
+      DOUBLE PRECISION FUNCTION ZLA_GBRCOND_X( TRANS, N, KL, KU, AB,
+     $                             LDAB, AFB, LDAFB, IPIV, X, INFO,
      $     WORK, RWORK )
 *
-*     -- LAPACK routine (version 3.2)                                 --
+*     -- LAPACK routine (version 3.2.1)                               --
 *     -- Contributed by James Demmel, Deaglan Halligan, Yozo Hida and --
 *     -- Jason Riedy of Univ. of California Berkeley.                 --
 *     -- November 2008                                                --
@@ -14,7 +14,7 @@
 *     ..
 *     .. Scalar Arguments ..
       CHARACTER          TRANS
-      INTEGER            N, KL, KU, KD, LDAB, LDAFB, INFO
+      INTEGER            N, KL, KU, KD, KE, LDAB, LDAFB, INFO
 *     ..
 *     .. Array Arguments ..
       INTEGER            IPIV( * )
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
+      ELSE IF( KL.LT.0 .OR. KL.GT.N-1 ) THEN
+         INFO = -4
+      ELSE IF( KU.LT.0 .OR. KU.GT.N-1 ) THEN
+         INFO = -5
+      ELSE IF( LDAB.LT.KL+KU+1 ) THEN
+         INFO = -8
+      ELSE IF( LDAFB.LT.2*KL+KU+1 ) THEN
+         INFO = -10
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZLA_GBRCOND_X', -INFO )
 *     Compute norm of op(A)*op2(C).
 *
       KD = KU + 1
+      KE = KL + 1
       ANORM = 0.0D+0
       IF ( NOTRANS ) THEN
          DO I = 1, N
             TMP = 0.0D+0
-            DO J = 1, N
-               IF ( I.GE.MAX( 1, J-KU ) .AND. I.LE.MIN( N, J+KL ) ) THEN
-                  TMP = TMP + CABS1( AB( KD+I-J, J) * X( J ) )
-               END IF
+            DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+               TMP = TMP + CABS1( AB( KD+I-J, J) * X( J ) )
             END DO
             RWORK( 2*N+I ) = TMP
             ANORM = MAX( ANORM, TMP )
       ELSE
          DO I = 1, N
             TMP = 0.0D+0
-            DO J = 1, N
-               IF ( I.GE.MAX( 1, J-KU ) .AND. I.LE.MIN( N, J+KL ) ) THEN
-                  TMP = TMP + CABS1( AB( J, KD+I-J ) * X( J ) )
-               END IF
+            DO J = MAX( I-KL, 1 ), MIN( I+KU, N )
+               TMP = TMP + CABS1( AB( KE-I+J, I ) * X( J ) )
             END DO
             RWORK( 2*N+I ) = TMP
             ANORM = MAX( ANORM, TMP )