 LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

## ◆ csbmv()

 subroutine csbmv ( character UPLO, integer N, integer K, complex ALPHA, complex, dimension( lda, * ) A, integer LDA, complex, dimension( * ) X, integer INCX, complex BETA, complex, dimension( * ) Y, integer INCY )

CSBMV

Purpose:
``` CSBMV  performs the matrix-vector  operation

y := alpha*A*x + beta*y,

where alpha and beta are scalars, x and y are n element vectors and
A is an n by n symmetric band matrix, with k super-diagonals.```
```  UPLO   - CHARACTER*1
On entry, UPLO specifies whether the upper or lower
triangular part of the band matrix A is being supplied as
follows:

UPLO = 'U' or 'u'   The upper triangular part of A is
being supplied.

UPLO = 'L' or 'l'   The lower triangular part of A is
being supplied.

Unchanged on exit.

N      - INTEGER
On entry, N specifies the order of the matrix A.
N must be at least zero.
Unchanged on exit.

K      - INTEGER
On entry, K specifies the number of super-diagonals of the
matrix A. K must satisfy  0 .le. K.
Unchanged on exit.

ALPHA  - COMPLEX
On entry, ALPHA specifies the scalar alpha.
Unchanged on exit.

A      - COMPLEX array, dimension( LDA, N )
Before entry with UPLO = 'U' or 'u', the leading ( k + 1 )
by n part of the array A must contain the upper triangular
band part of the symmetric matrix, supplied column by
column, with the leading diagonal of the matrix in row
( k + 1 ) of the array, the first super-diagonal starting at
position 2 in row k, and so on. The top left k by k triangle
of the array A is not referenced.
The following program segment will transfer the upper
triangular part of a symmetric band matrix from conventional
full matrix storage to band storage:

DO 20, J = 1, N
M = K + 1 - J
DO 10, I = MAX( 1, J - K ), J
A( M + I, J ) = matrix( I, J )
10    CONTINUE
20 CONTINUE

Before entry with UPLO = 'L' or 'l', the leading ( k + 1 )
by n part of the array A must contain the lower triangular
band part of the symmetric matrix, supplied column by
column, with the leading diagonal of the matrix in row 1 of
the array, the first sub-diagonal starting at position 1 in
row 2, and so on. The bottom right k by k triangle of the
array A is not referenced.
The following program segment will transfer the lower
triangular part of a symmetric band matrix from conventional
full matrix storage to band storage:

DO 20, J = 1, N
M = 1 - J
DO 10, I = J, MIN( N, J + K )
A( M + I, J ) = matrix( I, J )
10    CONTINUE
20 CONTINUE

Unchanged on exit.

LDA    - INTEGER
On entry, LDA specifies the first dimension of A as declared
in the calling (sub) program. LDA must be at least
( k + 1 ).
Unchanged on exit.

X      - COMPLEX array, dimension at least
( 1 + ( N - 1 )*abs( INCX ) ).
Before entry, the incremented array X must contain the
vector x.
Unchanged on exit.

INCX   - INTEGER
On entry, INCX specifies the increment for the elements of
X. INCX must not be zero.
Unchanged on exit.

BETA   - COMPLEX
On entry, BETA specifies the scalar beta.
Unchanged on exit.

Y      - COMPLEX array, dimension at least
( 1 + ( N - 1 )*abs( INCY ) ).
Before entry, the incremented array Y must contain the
vector y. On exit, Y is overwritten by the updated vector y.

INCY   - INTEGER
On entry, INCY specifies the increment for the elements of
Y. INCY must not be zero.
Unchanged on exit.```

Definition at line 150 of file csbmv.f.

152 *
153 * -- LAPACK test routine --
154 * -- LAPACK is a software package provided by Univ. of Tennessee, --
155 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
156 *
157 * .. Scalar Arguments ..
158  CHARACTER UPLO
159  INTEGER INCX, INCY, K, LDA, N
160  COMPLEX ALPHA, BETA
161 * ..
162 * .. Array Arguments ..
163  COMPLEX A( LDA, * ), X( * ), Y( * )
164 * ..
165 *
166 * =====================================================================
167 *
168 * .. Parameters ..
169  COMPLEX ONE
170  parameter( one = ( 1.0e+0, 0.0e+0 ) )
171  COMPLEX ZERO
172  parameter( zero = ( 0.0e+0, 0.0e+0 ) )
173 * ..
174 * .. Local Scalars ..
175  INTEGER I, INFO, IX, IY, J, JX, JY, KPLUS1, KX, KY, L
176  COMPLEX TEMP1, TEMP2
177 * ..
178 * .. External Functions ..
179  LOGICAL LSAME
180  EXTERNAL lsame
181 * ..
182 * .. External Subroutines ..
183  EXTERNAL xerbla
184 * ..
185 * .. Intrinsic Functions ..
186  INTRINSIC max, min
187 * ..
188 * .. Executable Statements ..
189 *
190 * Test the input parameters.
191 *
192  info = 0
193  IF( .NOT.lsame( uplo, 'U' ) .AND. .NOT.lsame( uplo, 'L' ) ) THEN
194  info = 1
195  ELSE IF( n.LT.0 ) THEN
196  info = 2
197  ELSE IF( k.LT.0 ) THEN
198  info = 3
199  ELSE IF( lda.LT.( k+1 ) ) THEN
200  info = 6
201  ELSE IF( incx.EQ.0 ) THEN
202  info = 8
203  ELSE IF( incy.EQ.0 ) THEN
204  info = 11
205  END IF
206  IF( info.NE.0 ) THEN
207  CALL xerbla( 'CSBMV ', info )
208  RETURN
209  END IF
210 *
211 * Quick return if possible.
212 *
213  IF( ( n.EQ.0 ) .OR. ( ( alpha.EQ.zero ) .AND. ( beta.EQ.one ) ) )
214  \$ RETURN
215 *
216 * Set up the start points in X and Y.
217 *
218  IF( incx.GT.0 ) THEN
219  kx = 1
220  ELSE
221  kx = 1 - ( n-1 )*incx
222  END IF
223  IF( incy.GT.0 ) THEN
224  ky = 1
225  ELSE
226  ky = 1 - ( n-1 )*incy
227  END IF
228 *
229 * Start the operations. In this version the elements of the array A
230 * are accessed sequentially with one pass through A.
231 *
232 * First form y := beta*y.
233 *
234  IF( beta.NE.one ) THEN
235  IF( incy.EQ.1 ) THEN
236  IF( beta.EQ.zero ) THEN
237  DO 10 i = 1, n
238  y( i ) = zero
239  10 CONTINUE
240  ELSE
241  DO 20 i = 1, n
242  y( i ) = beta*y( i )
243  20 CONTINUE
244  END IF
245  ELSE
246  iy = ky
247  IF( beta.EQ.zero ) THEN
248  DO 30 i = 1, n
249  y( iy ) = zero
250  iy = iy + incy
251  30 CONTINUE
252  ELSE
253  DO 40 i = 1, n
254  y( iy ) = beta*y( iy )
255  iy = iy + incy
256  40 CONTINUE
257  END IF
258  END IF
259  END IF
260  IF( alpha.EQ.zero )
261  \$ RETURN
262  IF( lsame( uplo, 'U' ) ) THEN
263 *
264 * Form y when upper triangle of A is stored.
265 *
266  kplus1 = k + 1
267  IF( ( incx.EQ.1 ) .AND. ( incy.EQ.1 ) ) THEN
268  DO 60 j = 1, n
269  temp1 = alpha*x( j )
270  temp2 = zero
271  l = kplus1 - j
272  DO 50 i = max( 1, j-k ), j - 1
273  y( i ) = y( i ) + temp1*a( l+i, j )
274  temp2 = temp2 + a( l+i, j )*x( i )
275  50 CONTINUE
276  y( j ) = y( j ) + temp1*a( kplus1, j ) + alpha*temp2
277  60 CONTINUE
278  ELSE
279  jx = kx
280  jy = ky
281  DO 80 j = 1, n
282  temp1 = alpha*x( jx )
283  temp2 = zero
284  ix = kx
285  iy = ky
286  l = kplus1 - j
287  DO 70 i = max( 1, j-k ), j - 1
288  y( iy ) = y( iy ) + temp1*a( l+i, j )
289  temp2 = temp2 + a( l+i, j )*x( ix )
290  ix = ix + incx
291  iy = iy + incy
292  70 CONTINUE
293  y( jy ) = y( jy ) + temp1*a( kplus1, j ) + alpha*temp2
294  jx = jx + incx
295  jy = jy + incy
296  IF( j.GT.k ) THEN
297  kx = kx + incx
298  ky = ky + incy
299  END IF
300  80 CONTINUE
301  END IF
302  ELSE
303 *
304 * Form y when lower triangle of A is stored.
305 *
306  IF( ( incx.EQ.1 ) .AND. ( incy.EQ.1 ) ) THEN
307  DO 100 j = 1, n
308  temp1 = alpha*x( j )
309  temp2 = zero
310  y( j ) = y( j ) + temp1*a( 1, j )
311  l = 1 - j
312  DO 90 i = j + 1, min( n, j+k )
313  y( i ) = y( i ) + temp1*a( l+i, j )
314  temp2 = temp2 + a( l+i, j )*x( i )
315  90 CONTINUE
316  y( j ) = y( j ) + alpha*temp2
317  100 CONTINUE
318  ELSE
319  jx = kx
320  jy = ky
321  DO 120 j = 1, n
322  temp1 = alpha*x( jx )
323  temp2 = zero
324  y( jy ) = y( jy ) + temp1*a( 1, j )
325  l = 1 - j
326  ix = jx
327  iy = jy
328  DO 110 i = j + 1, min( n, j+k )
329  ix = ix + incx
330  iy = iy + incy
331  y( iy ) = y( iy ) + temp1*a( l+i, j )
332  temp2 = temp2 + a( l+i, j )*x( ix )
333  110 CONTINUE
334  y( jy ) = y( jy ) + alpha*temp2
335  jx = jx + incx
336  jy = jy + incy
337  120 CONTINUE
338  END IF
339  END IF
340 *
341  RETURN
342 *
343 * End of CSBMV
344 *
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:60
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
Here is the call graph for this function:
Here is the caller graph for this function: