MUCBV

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

Required Arguments

A — Complex 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 — Complex vector of length NX. (Input)

Y — Complex 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 MUCBV (A, NLCA, NUCA, X, Y [])

Specific: The specific interface names are S_MUCBV and D_MUCBV.

FORTRAN 77 Interface

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

Double: The double precision name is DMUCBV.

Description

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

Example

Multiply the transpose of a complex band matrix of order 4, with one upper codiagonal and two lower codiagonals stored in band mode, by a complex vector of length 3. The output vector will be a complex vector of length 3.

 

USE MUCBV_INT

USE WRCRN_INT

 

IMPLICIT NONE

! Declare variables

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

PARAMETER (LDA=4, N=4, NLCA=2, NUCA=1, NX=4, NY=4)

!

INTEGER IPATH

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

! Set values for A (in band mode)

! A = ( 0.0+ 0.0i 1.0+ 2.0i 3.0+ 4.0i 5.0+ 6.0i )

! ( -1.0- 1.0i -1.0- 1.0i -1.0- 1.0i -1.0- 1.0i )

! ( -1.0+ 2.0i -1.0+ 3.0i -2.0+ 1.0i 0.0+ 0.0i )

! ( 2.0+ 0.0i 0.0+ 2.0i 0.0+ 0.0i 0.0+ 0.0i )

!

! Set values for X

! X = ( 3.0 + 4.0i 0.0 + 0.0i 1.0 + 2.0i -2.0 - 1.0i )

!

DATA A/(0.0,0.0), (-1.0,-1.0), (-1.0,2.0), (2.0,0.0), (1.0,2.0), &

(-1.0,-1.0), (-1.0,3.0), (0.0,2.0), (3.0,4.0), (-1.0,-1.0), &

(-2.0,1.0), (0.0,0.0), (5.0,6.0), (-1.0,-1.0), (0.0,0.0), &

(0.0,0.0)/

DATA X/(3.0,4.0), (0.0,0.0), (1.0,2.0), (-2.0,-1.0)/

! Compute y = Ax

IPATH = 2

CALL MUCBV (A, NLCA, NUCA, X, Y, IPATH=IPATH)

! Print results

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

END

Output

 

y = Ax

1 2 3 4

( 3.00, -3.00) (-10.00, 7.00) ( 6.00, -3.00) ( -6.00, 19.00)