MURBV

Multiplies a real band matrix in band storage mode by a real vector.

Required Arguments

A — Real NLCA + NUCA + 1 by N band matrix stored in band mode. (Input)

NLCA — Number of lower codiagonals in A. (Input)

NUCA — Number of upper codiagonals in A. (Input)

X — Real vector of length NX. (Input)

Y — Real vector of length NY containing the product A * X if IPATH is equal to 1 and the product trans(A* X if IPATH is equal to 2. (Output)

Optional Arguments

N — Order of the matrix. (Input)
Default: N = SIZE (A,2).

LDA — Leading dimension of A exactly as specified in the dimension statement of the calling program. (Input)
Default: LDA = SIZE (A,1).

NX — Length of the vector X. (Input)
NX must be equal to N.
Default: NX = SIZE (X,1).

IPATH — Integer flag. (Input)
IPATH = 1 means the product Y = A * X is computed. IPATH = 2 means the product Y = trans(A* X is computed, where trans(A) is the transpose of A.
Default: IPATH = 1.

NY — Length of vector Y. (Input)
NY must be equal to N.
Default: NY = SIZE (Y,1).

FORTRAN 90 Interface

Generic: CALL MURBV (A, NLCA, NUCA, X, Y [])

Specific: The specific interface names are S_MURBV and D_MURBV.

FORTRAN 77 Interface

Single: CALL MURBV (N, A, LDA, NLCA, NUCA, NX, X, IPATH, NY, Y)

Double: The double precision name is DMURBV.

Description

If IPATH = 1, MURBV computes y = Ax, where A is a real band matrix and x and y are real vectors. If IPATH = 2, MURBV computes y = ATx.

Example

Multiply a real band matrix of order 6, with two upper codiagonals and two lower codiagonals stored in band mode, by a real vector of length 6. The output vector will be a real vector of length 6.

 

USE MURBV_INT

USE WRRRN_INT

 

IMPLICIT NONE

! Declare variables

INTEGER LDA, N, NLCA, NUCA, NX, NY

PARAMETER (LDA=5, N=6, NLCA=2, NUCA=2, NX=6, NY=6)

!

INTEGER IPATH

REAL A(LDA,N), X(NX), Y(NY)

! Set values for A (in band mode)

! A = ( 0.0 0.0 1.0 2.0 3.0 4.0 )

! ( 0.0 1.0 2.0 3.0 4.0 5.0 )

! ( 1.0 2.0 3.0 4.0 5.0 6.0 )

! (-1.0 -2.0 -3.0 -4.0 -5.0 0.0 )

! (-5.0 -6.0 -7.0 -8.0 0.0 0.0 )

!

! Set values for X

! X = (-1.0 2.0 -3.0 4.0 -5.0 6.0 )

!

DATA A/0.0, 0.0, 1.0, -1.0, -5.0, 0.0, 1.0, 2.0, -2.0, -6.0, &

1.0, 2.0, 3.0, -3.0, -7.0, 2.0, 3.0, 4.0, -4.0, -8.0, 3.0, &

4.0, 5.0, -5.0, 0.0, 4.0, 5.0, 6.0, 0.0, 0.0/

DATA X/-1.0, 2.0, -3.0, 4.0, -5.0, 6.0/

! Compute y = Ax

IPATH = 1

CALL MURBV (A, NLCA, NUCA, X, Y)

! Print results

CALL WRRRN ('y = Ax', Y, 1, NY, 1)

END

Output

 

y = Ax

1 2 3 4 5 6

-2.00 7.00 -11.00 17.00 10.00 29.00