1acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* stbmv.f -- translated by f2c (version 20100827). 2acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray You must link the resulting object file with libf2c: 3acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray on Microsoft Windows system, link with libf2c.lib; 4acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray on Linux or Unix systems, link with .../path/to/libf2c.a -lm 5acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray or, if you install libf2c.a in a standard place, with -lf2c -lm 6acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray -- in that order, at the end of the command line, as in 7acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray cc *.o -lf2c -lm 8acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., 9acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 10acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray http://www.netlib.org/f2c/libf2c.zip 11acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray*/ 12acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 13acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray#include "datatypes.h" 14acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 15acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Subroutine */ int stbmv_(char *uplo, char *trans, char *diag, integer *n, 16acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray integer *k, real *a, integer *lda, real *x, integer *incx, ftnlen 17acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray uplo_len, ftnlen trans_len, ftnlen diag_len) 18acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray{ 19acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray /* System generated locals */ 20acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray integer a_dim1, a_offset, i__1, i__2, i__3, i__4; 21acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 22acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray /* Local variables */ 23acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray integer i__, j, l, ix, jx, kx, info; 24acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray real temp; 25acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray extern logical lsame_(char *, char *, ftnlen, ftnlen); 26acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray integer kplus1; 27acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray extern /* Subroutine */ int xerbla_(char *, integer *, ftnlen); 28acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray logical nounit; 29acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 30acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. Scalar Arguments .. */ 31acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 32acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. Array Arguments .. */ 33acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 34acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 35acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Purpose */ 36acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ======= */ 37acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 38acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* STBMV performs one of the matrix-vector operations */ 39acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 40acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* x := A*x, or x := A'*x, */ 41acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 42acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* where x is an n element vector and A is an n by n unit, or non-unit, */ 43acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* upper or lower triangular band matrix, with ( k + 1 ) diagonals. */ 44acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 45acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Arguments */ 46acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ========== */ 47acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 48acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* UPLO - CHARACTER*1. */ 49acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, UPLO specifies whether the matrix is an upper or */ 50acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* lower triangular matrix as follows: */ 51acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 52acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* UPLO = 'U' or 'u' A is an upper triangular matrix. */ 53acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 54acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* UPLO = 'L' or 'l' A is a lower triangular matrix. */ 55acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 56acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 57acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 58acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* TRANS - CHARACTER*1. */ 59acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, TRANS specifies the operation to be performed as */ 60acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* follows: */ 61acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 62acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* TRANS = 'N' or 'n' x := A*x. */ 63acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 64acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* TRANS = 'T' or 't' x := A'*x. */ 65acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 66acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* TRANS = 'C' or 'c' x := A'*x. */ 67acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 68acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 69acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 70acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DIAG - CHARACTER*1. */ 71acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, DIAG specifies whether or not A is unit */ 72acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* triangular as follows: */ 73acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 74acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DIAG = 'U' or 'u' A is assumed to be unit triangular. */ 75acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 76acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DIAG = 'N' or 'n' A is not assumed to be unit */ 77acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* triangular. */ 78acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 79acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 80acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 81acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* N - INTEGER. */ 82acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, N specifies the order of the matrix A. */ 83acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* N must be at least zero. */ 84acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 85acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 86acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* K - INTEGER. */ 87acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry with UPLO = 'U' or 'u', K specifies the number of */ 88acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* super-diagonals of the matrix A. */ 89acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry with UPLO = 'L' or 'l', K specifies the number of */ 90acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* sub-diagonals of the matrix A. */ 91acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* K must satisfy 0 .le. K. */ 92acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 93acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 94acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* A - REAL array of DIMENSION ( LDA, n ). */ 95acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) */ 96acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* by n part of the array A must contain the upper triangular */ 97acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* band part of the matrix of coefficients, supplied column by */ 98acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* column, with the leading diagonal of the matrix in row */ 99acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ( k + 1 ) of the array, the first super-diagonal starting at */ 100acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* position 2 in row k, and so on. The top left k by k triangle */ 101acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* of the array A is not referenced. */ 102acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* The following program segment will transfer an upper */ 103acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* triangular band matrix from conventional full matrix storage */ 104acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* to band storage: */ 105acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 106acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DO 20, J = 1, N */ 107acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* M = K + 1 - J */ 108acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DO 10, I = MAX( 1, J - K ), J */ 109acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* A( M + I, J ) = matrix( I, J ) */ 110acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* 10 CONTINUE */ 111acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* 20 CONTINUE */ 112acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 113acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) */ 114acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* by n part of the array A must contain the lower triangular */ 115acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* band part of the matrix of coefficients, supplied column by */ 116acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* column, with the leading diagonal of the matrix in row 1 of */ 117acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* the array, the first sub-diagonal starting at position 1 in */ 118acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* row 2, and so on. The bottom right k by k triangle of the */ 119acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* array A is not referenced. */ 120acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* The following program segment will transfer a lower */ 121acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* triangular band matrix from conventional full matrix storage */ 122acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* to band storage: */ 123acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 124acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DO 20, J = 1, N */ 125acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* M = 1 - J */ 126acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* DO 10, I = J, MIN( N, J + K ) */ 127acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* A( M + I, J ) = matrix( I, J ) */ 128acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* 10 CONTINUE */ 129acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* 20 CONTINUE */ 130acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 131acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Note that when DIAG = 'U' or 'u' the elements of the array A */ 132acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* corresponding to the diagonal elements of the matrix are not */ 133acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* referenced, but are assumed to be unity. */ 134acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 135acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 136acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* LDA - INTEGER. */ 137acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, LDA specifies the first dimension of A as declared */ 138acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* in the calling (sub) program. LDA must be at least */ 139acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ( k + 1 ). */ 140acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 141acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 142acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* X - REAL array of dimension at least */ 143acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ( 1 + ( n - 1 )*abs( INCX ) ). */ 144acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Before entry, the incremented array X must contain the n */ 145acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* element vector x. On exit, X is overwritten with the */ 146acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* tranformed vector x. */ 147acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 148acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* INCX - INTEGER. */ 149acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* On entry, INCX specifies the increment for the elements of */ 150acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* X. INCX must not be zero. */ 151acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Unchanged on exit. */ 152acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 153acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Further Details */ 154acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* =============== */ 155acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 156acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Level 2 Blas routine. */ 157acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 158acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* -- Written on 22-October-1986. */ 159acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Jack Dongarra, Argonne National Lab. */ 160acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Jeremy Du Croz, Nag Central Office. */ 161acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Sven Hammarling, Nag Central Office. */ 162acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Richard Hanson, Sandia National Labs. */ 163acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 164acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* ===================================================================== */ 165acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 166acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. Parameters .. */ 167acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 168acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. Local Scalars .. */ 169acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 170acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. External Functions .. */ 171acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 172acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. External Subroutines .. */ 173acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 174acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. Intrinsic Functions .. */ 175acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* .. */ 176acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 177acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Test the input parameters. */ 178acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 179acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray /* Parameter adjustments */ 180acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray a_dim1 = *lda; 181acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray a_offset = 1 + a_dim1; 182acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray a -= a_offset; 183acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray --x; 184acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 185acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray /* Function Body */ 186acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 0; 187acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (! lsame_(uplo, "U", (ftnlen)1, (ftnlen)1) && ! lsame_(uplo, "L", ( 188acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ftnlen)1, (ftnlen)1)) { 189acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 1; 190acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (! lsame_(trans, "N", (ftnlen)1, (ftnlen)1) && ! lsame_(trans, 191acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray "T", (ftnlen)1, (ftnlen)1) && ! lsame_(trans, "C", (ftnlen)1, ( 192acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ftnlen)1)) { 193acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 2; 194acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (! lsame_(diag, "U", (ftnlen)1, (ftnlen)1) && ! lsame_(diag, 195acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray "N", (ftnlen)1, (ftnlen)1)) { 196acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 3; 197acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (*n < 0) { 198acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 4; 199acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (*k < 0) { 200acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 5; 201acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (*lda < *k + 1) { 202acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 7; 203acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (*incx == 0) { 204acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray info = 9; 205acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 206acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (info != 0) { 207acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray xerbla_("STBMV ", &info, (ftnlen)6); 208acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray return 0; 209acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 210acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 211acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Quick return if possible. */ 212acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 213acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*n == 0) { 214acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray return 0; 215acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 216acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 217acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray nounit = lsame_(diag, "N", (ftnlen)1, (ftnlen)1); 218acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 219acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Set up the start point in X if the increment is not unity. This */ 220acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* will be ( N - 1 )*INCX too small for descending loops. */ 221acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 222acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*incx <= 0) { 223acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx = 1 - (*n - 1) * *incx; 224acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else if (*incx != 1) { 225acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx = 1; 226acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 227acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 228acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Start the operations. In this version the elements of A are */ 229acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* accessed sequentially with one pass through A. */ 230acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 231acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (lsame_(trans, "N", (ftnlen)1, (ftnlen)1)) { 232acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 233acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Form x := A*x. */ 234acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 235acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (lsame_(uplo, "U", (ftnlen)1, (ftnlen)1)) { 236acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kplus1 = *k + 1; 237acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*incx == 1) { 238acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__1 = *n; 239acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = 1; j <= i__1; ++j) { 240acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (x[j] != 0.f) { 241acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[j]; 242acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = kplus1 - j; 243acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MAX */ 244acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__2 = 1, i__3 = j - *k; 245acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = j - 1; 246acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = max(i__2,i__3); i__ <= i__4; ++i__) { 247acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[i__] += temp * a[l + i__ + j * a_dim1]; 248acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L10: */ 249acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 250acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 251acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[j] *= a[kplus1 + j * a_dim1]; 252acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 253acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 254acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L20: */ 255acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 256acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 257acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx = kx; 258acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__1 = *n; 259acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = 1; j <= i__1; ++j) { 260acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (x[jx] != 0.f) { 261acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[jx]; 262acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix = kx; 263acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = kplus1 - j; 264acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MAX */ 265acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = 1, i__2 = j - *k; 266acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = j - 1; 267acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = max(i__4,i__2); i__ <= i__3; ++i__) { 268acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[ix] += temp * a[l + i__ + j * a_dim1]; 269acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix += *incx; 270acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L30: */ 271acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 272acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 273acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[jx] *= a[kplus1 + j * a_dim1]; 274acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 275acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 276acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx += *incx; 277acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (j > *k) { 278acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx += *incx; 279acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 280acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L40: */ 281acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 282acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 283acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 284acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*incx == 1) { 285acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = *n; j >= 1; --j) { 286acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (x[j] != 0.f) { 287acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[j]; 288acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = 1 - j; 289acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MIN */ 290acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__1 = *n, i__3 = j + *k; 291acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = j + 1; 292acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = min(i__1,i__3); i__ >= i__4; --i__) { 293acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[i__] += temp * a[l + i__ + j * a_dim1]; 294acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L50: */ 295acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 296acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 297acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[j] *= a[j * a_dim1 + 1]; 298acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 299acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 300acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L60: */ 301acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 302acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 303acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx += (*n - 1) * *incx; 304acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx = kx; 305acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = *n; j >= 1; --j) { 306acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (x[jx] != 0.f) { 307acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[jx]; 308acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix = kx; 309acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = 1 - j; 310acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MIN */ 311acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = *n, i__1 = j + *k; 312acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = j + 1; 313acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = min(i__4,i__1); i__ >= i__3; --i__) { 314acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[ix] += temp * a[l + i__ + j * a_dim1]; 315acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix -= *incx; 316acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L70: */ 317acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 318acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 319acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[jx] *= a[j * a_dim1 + 1]; 320acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 321acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 322acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx -= *incx; 323acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*n - j >= *k) { 324acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx -= *incx; 325acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 326acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L80: */ 327acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 328acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 329acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 330acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 331acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 332acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Form x := A'*x. */ 333acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 334acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (lsame_(uplo, "U", (ftnlen)1, (ftnlen)1)) { 335acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kplus1 = *k + 1; 336acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*incx == 1) { 337acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = *n; j >= 1; --j) { 338acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[j]; 339acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = kplus1 - j; 340acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 341acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp *= a[kplus1 + j * a_dim1]; 342acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 343acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MAX */ 344acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = 1, i__1 = j - *k; 345acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = max(i__4,i__1); 346acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = j - 1; i__ >= i__3; --i__) { 347acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp += a[l + i__ + j * a_dim1] * x[i__]; 348acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L90: */ 349acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 350acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[j] = temp; 351acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L100: */ 352acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 353acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 354acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx += (*n - 1) * *incx; 355acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx = kx; 356acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = *n; j >= 1; --j) { 357acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[jx]; 358acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx -= *incx; 359acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix = kx; 360acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = kplus1 - j; 361acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 362acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp *= a[kplus1 + j * a_dim1]; 363acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 364acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MAX */ 365acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = 1, i__1 = j - *k; 366acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = max(i__4,i__1); 367acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = j - 1; i__ >= i__3; --i__) { 368acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp += a[l + i__ + j * a_dim1] * x[ix]; 369acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix -= *incx; 370acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L110: */ 371acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 372acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[jx] = temp; 373acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx -= *incx; 374acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L120: */ 375acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 376acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 377acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 378acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (*incx == 1) { 379acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = *n; 380acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = 1; j <= i__3; ++j) { 381acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[j]; 382acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = 1 - j; 383acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 384acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp *= a[j * a_dim1 + 1]; 385acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 386acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MIN */ 387acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__1 = *n, i__2 = j + *k; 388acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = min(i__1,i__2); 389acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = j + 1; i__ <= i__4; ++i__) { 390acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp += a[l + i__ + j * a_dim1] * x[i__]; 391acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L130: */ 392acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 393acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[j] = temp; 394acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L140: */ 395acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 396acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } else { 397acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx = kx; 398acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__3 = *n; 399acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (j = 1; j <= i__3; ++j) { 400acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp = x[jx]; 401acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray kx += *incx; 402acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix = kx; 403acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray l = 1 - j; 404acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray if (nounit) { 405acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp *= a[j * a_dim1 + 1]; 406acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 407acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* Computing MIN */ 408acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__1 = *n, i__2 = j + *k; 409acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray i__4 = min(i__1,i__2); 410acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray for (i__ = j + 1; i__ <= i__4; ++i__) { 411acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray temp += a[l + i__ + j * a_dim1] * x[ix]; 412acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray ix += *incx; 413acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L150: */ 414acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 415acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray x[jx] = temp; 416acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray jx += *incx; 417acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* L160: */ 418acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 419acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 420acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 421acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray } 422acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 423acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray return 0; 424acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 425acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray/* End of STBMV . */ 426acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 427acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray} /* stbmv_ */ 428acf83bd421067e7a2b828c5fe61594a4fda5e9a5Tim Murray 429