Annotation of rpl/lapack/lapack/zlagtm.f, revision 1.6

1.1       bertrand    1:       SUBROUTINE ZLAGTM( TRANS, N, NRHS, ALPHA, DL, D, DU, X, LDX, BETA,
                      2:      $                   B, LDB )
                      3: *
                      4: *  -- LAPACK auxiliary routine (version 3.2) --
                      5: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
                      6: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
                      7: *     November 2006
                      8: *
                      9: *     .. Scalar Arguments ..
                     10:       CHARACTER          TRANS
                     11:       INTEGER            LDB, LDX, N, NRHS
                     12:       DOUBLE PRECISION   ALPHA, BETA
                     13: *     ..
                     14: *     .. Array Arguments ..
                     15:       COMPLEX*16         B( LDB, * ), D( * ), DL( * ), DU( * ),
                     16:      $                   X( LDX, * )
                     17: *     ..
                     18: *
                     19: *  Purpose
                     20: *  =======
                     21: *
                     22: *  ZLAGTM performs a matrix-vector product of the form
                     23: *
                     24: *     B := alpha * A * X + beta * B
                     25: *
                     26: *  where A is a tridiagonal matrix of order N, B and X are N by NRHS
                     27: *  matrices, and alpha and beta are real scalars, each of which may be
                     28: *  0., 1., or -1.
                     29: *
                     30: *  Arguments
                     31: *  =========
                     32: *
                     33: *  TRANS   (input) CHARACTER*1
                     34: *          Specifies the operation applied to A.
                     35: *          = 'N':  No transpose, B := alpha * A * X + beta * B
                     36: *          = 'T':  Transpose,    B := alpha * A**T * X + beta * B
                     37: *          = 'C':  Conjugate transpose, B := alpha * A**H * X + beta * B
                     38: *
                     39: *  N       (input) INTEGER
                     40: *          The order of the matrix A.  N >= 0.
                     41: *
                     42: *  NRHS    (input) INTEGER
                     43: *          The number of right hand sides, i.e., the number of columns
                     44: *          of the matrices X and B.
                     45: *
                     46: *  ALPHA   (input) DOUBLE PRECISION
                     47: *          The scalar alpha.  ALPHA must be 0., 1., or -1.; otherwise,
                     48: *          it is assumed to be 0.
                     49: *
                     50: *  DL      (input) COMPLEX*16 array, dimension (N-1)
                     51: *          The (n-1) sub-diagonal elements of T.
                     52: *
                     53: *  D       (input) COMPLEX*16 array, dimension (N)
                     54: *          The diagonal elements of T.
                     55: *
                     56: *  DU      (input) COMPLEX*16 array, dimension (N-1)
                     57: *          The (n-1) super-diagonal elements of T.
                     58: *
                     59: *  X       (input) COMPLEX*16 array, dimension (LDX,NRHS)
                     60: *          The N by NRHS matrix X.
                     61: *  LDX     (input) INTEGER
                     62: *          The leading dimension of the array X.  LDX >= max(N,1).
                     63: *
                     64: *  BETA    (input) DOUBLE PRECISION
                     65: *          The scalar beta.  BETA must be 0., 1., or -1.; otherwise,
                     66: *          it is assumed to be 1.
                     67: *
                     68: *  B       (input/output) COMPLEX*16 array, dimension (LDB,NRHS)
                     69: *          On entry, the N by NRHS matrix B.
                     70: *          On exit, B is overwritten by the matrix expression
                     71: *          B := alpha * A * X + beta * B.
                     72: *
                     73: *  LDB     (input) INTEGER
                     74: *          The leading dimension of the array B.  LDB >= max(N,1).
                     75: *
                     76: *  =====================================================================
                     77: *
                     78: *     .. Parameters ..
                     79:       DOUBLE PRECISION   ONE, ZERO
                     80:       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
                     81: *     ..
                     82: *     .. Local Scalars ..
                     83:       INTEGER            I, J
                     84: *     ..
                     85: *     .. External Functions ..
                     86:       LOGICAL            LSAME
                     87:       EXTERNAL           LSAME
                     88: *     ..
                     89: *     .. Intrinsic Functions ..
                     90:       INTRINSIC          DCONJG
                     91: *     ..
                     92: *     .. Executable Statements ..
                     93: *
                     94:       IF( N.EQ.0 )
                     95:      $   RETURN
                     96: *
                     97: *     Multiply B by BETA if BETA.NE.1.
                     98: *
                     99:       IF( BETA.EQ.ZERO ) THEN
                    100:          DO 20 J = 1, NRHS
                    101:             DO 10 I = 1, N
                    102:                B( I, J ) = ZERO
                    103:    10       CONTINUE
                    104:    20    CONTINUE
                    105:       ELSE IF( BETA.EQ.-ONE ) THEN
                    106:          DO 40 J = 1, NRHS
                    107:             DO 30 I = 1, N
                    108:                B( I, J ) = -B( I, J )
                    109:    30       CONTINUE
                    110:    40    CONTINUE
                    111:       END IF
                    112: *
                    113:       IF( ALPHA.EQ.ONE ) THEN
                    114:          IF( LSAME( TRANS, 'N' ) ) THEN
                    115: *
                    116: *           Compute B := B + A*X
                    117: *
                    118:             DO 60 J = 1, NRHS
                    119:                IF( N.EQ.1 ) THEN
                    120:                   B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J )
                    121:                ELSE
                    122:                   B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J ) +
                    123:      $                        DU( 1 )*X( 2, J )
                    124:                   B( N, J ) = B( N, J ) + DL( N-1 )*X( N-1, J ) +
                    125:      $                        D( N )*X( N, J )
                    126:                   DO 50 I = 2, N - 1
                    127:                      B( I, J ) = B( I, J ) + DL( I-1 )*X( I-1, J ) +
                    128:      $                           D( I )*X( I, J ) + DU( I )*X( I+1, J )
                    129:    50             CONTINUE
                    130:                END IF
                    131:    60       CONTINUE
                    132:          ELSE IF( LSAME( TRANS, 'T' ) ) THEN
                    133: *
                    134: *           Compute B := B + A**T * X
                    135: *
                    136:             DO 80 J = 1, NRHS
                    137:                IF( N.EQ.1 ) THEN
                    138:                   B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J )
                    139:                ELSE
                    140:                   B( 1, J ) = B( 1, J ) + D( 1 )*X( 1, J ) +
                    141:      $                        DL( 1 )*X( 2, J )
                    142:                   B( N, J ) = B( N, J ) + DU( N-1 )*X( N-1, J ) +
                    143:      $                        D( N )*X( N, J )
                    144:                   DO 70 I = 2, N - 1
                    145:                      B( I, J ) = B( I, J ) + DU( I-1 )*X( I-1, J ) +
                    146:      $                           D( I )*X( I, J ) + DL( I )*X( I+1, J )
                    147:    70             CONTINUE
                    148:                END IF
                    149:    80       CONTINUE
                    150:          ELSE IF( LSAME( TRANS, 'C' ) ) THEN
                    151: *
                    152: *           Compute B := B + A**H * X
                    153: *
                    154:             DO 100 J = 1, NRHS
                    155:                IF( N.EQ.1 ) THEN
                    156:                   B( 1, J ) = B( 1, J ) + DCONJG( D( 1 ) )*X( 1, J )
                    157:                ELSE
                    158:                   B( 1, J ) = B( 1, J ) + DCONJG( D( 1 ) )*X( 1, J ) +
                    159:      $                        DCONJG( DL( 1 ) )*X( 2, J )
                    160:                   B( N, J ) = B( N, J ) + DCONJG( DU( N-1 ) )*
                    161:      $                        X( N-1, J ) + DCONJG( D( N ) )*X( N, J )
                    162:                   DO 90 I = 2, N - 1
                    163:                      B( I, J ) = B( I, J ) + DCONJG( DU( I-1 ) )*
                    164:      $                           X( I-1, J ) + DCONJG( D( I ) )*
                    165:      $                           X( I, J ) + DCONJG( DL( I ) )*
                    166:      $                           X( I+1, J )
                    167:    90             CONTINUE
                    168:                END IF
                    169:   100       CONTINUE
                    170:          END IF
                    171:       ELSE IF( ALPHA.EQ.-ONE ) THEN
                    172:          IF( LSAME( TRANS, 'N' ) ) THEN
                    173: *
                    174: *           Compute B := B - A*X
                    175: *
                    176:             DO 120 J = 1, NRHS
                    177:                IF( N.EQ.1 ) THEN
                    178:                   B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J )
                    179:                ELSE
                    180:                   B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J ) -
                    181:      $                        DU( 1 )*X( 2, J )
                    182:                   B( N, J ) = B( N, J ) - DL( N-1 )*X( N-1, J ) -
                    183:      $                        D( N )*X( N, J )
                    184:                   DO 110 I = 2, N - 1
                    185:                      B( I, J ) = B( I, J ) - DL( I-1 )*X( I-1, J ) -
                    186:      $                           D( I )*X( I, J ) - DU( I )*X( I+1, J )
                    187:   110             CONTINUE
                    188:                END IF
                    189:   120       CONTINUE
                    190:          ELSE IF( LSAME( TRANS, 'T' ) ) THEN
                    191: *
                    192: *           Compute B := B - A'*X
                    193: *
                    194:             DO 140 J = 1, NRHS
                    195:                IF( N.EQ.1 ) THEN
                    196:                   B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J )
                    197:                ELSE
                    198:                   B( 1, J ) = B( 1, J ) - D( 1 )*X( 1, J ) -
                    199:      $                        DL( 1 )*X( 2, J )
                    200:                   B( N, J ) = B( N, J ) - DU( N-1 )*X( N-1, J ) -
                    201:      $                        D( N )*X( N, J )
                    202:                   DO 130 I = 2, N - 1
                    203:                      B( I, J ) = B( I, J ) - DU( I-1 )*X( I-1, J ) -
                    204:      $                           D( I )*X( I, J ) - DL( I )*X( I+1, J )
                    205:   130             CONTINUE
                    206:                END IF
                    207:   140       CONTINUE
                    208:          ELSE IF( LSAME( TRANS, 'C' ) ) THEN
                    209: *
                    210: *           Compute B := B - A'*X
                    211: *
                    212:             DO 160 J = 1, NRHS
                    213:                IF( N.EQ.1 ) THEN
                    214:                   B( 1, J ) = B( 1, J ) - DCONJG( D( 1 ) )*X( 1, J )
                    215:                ELSE
                    216:                   B( 1, J ) = B( 1, J ) - DCONJG( D( 1 ) )*X( 1, J ) -
                    217:      $                        DCONJG( DL( 1 ) )*X( 2, J )
                    218:                   B( N, J ) = B( N, J ) - DCONJG( DU( N-1 ) )*
                    219:      $                        X( N-1, J ) - DCONJG( D( N ) )*X( N, J )
                    220:                   DO 150 I = 2, N - 1
                    221:                      B( I, J ) = B( I, J ) - DCONJG( DU( I-1 ) )*
                    222:      $                           X( I-1, J ) - DCONJG( D( I ) )*
                    223:      $                           X( I, J ) - DCONJG( DL( I ) )*
                    224:      $                           X( I+1, J )
                    225:   150             CONTINUE
                    226:                END IF
                    227:   160       CONTINUE
                    228:          END IF
                    229:       END IF
                    230:       RETURN
                    231: *
                    232: *     End of ZLAGTM
                    233: *
                    234:       END

CVSweb interface <joel.bertrand@systella.fr>