!----------------------------------------------------------------- ! ! Purpose ! ======= ! ! LA_PBSV computes the solution to a system of linear equations ! A * X = B, ! where A is either a symmetric positive definite or hermitian band ! matrix and X and B are either retriangular matrices or vectors. ! The Cholesky decomposition is used to factor A as ! A = U**T * U, if UPLO = 'U', or ! A = L * L**T, if UPLO = 'L', ! where U is an upper triangular band matrix, and L is a lower ! triangular band matrix, with the same number of superdiagonals or ! subdiagonals as A. The factored form of A is then used to solve the ! system of equations A * X = B. ! ! Arguments ! ========= ! ! SUBROUTINE LA_PBSV( AB, B, UPLO, INFO ) ! (), INTENT(INOUT) :: AB(:,:), ! CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: UPLO ! INTEGER, INTENT(OUT), OPTIONAL :: INFO ! ::= REAL | COMPLEX ! ::= KIND(1.0) | KIND(1.0D0) ! ::= B(:,:) | B(:) ! ! ===================== ! ! AB (input/output) either REAL or COMPLEX rectangular array, ! shape (:,:). ! On entry, the upper or lower triangle of the symmetric band ! matrix A, stored in the first kd+1 rows of the array. The ! j-th column of A is stored in the j-th column of the array AB ! as follows: ! if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; ! if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). ! See below for further details. ! On exit, if INFO = 0, the triangular factor U or L from the ! Cholesky factorization A = U**T*U or A = L*L**T of the band ! matrix A, in the same storage format as A. ! Where kd = SIZE(AB,1)-1 and n = SIZE(AB,2). ! ! B (input/output) either REAL or COMPLEX rectangular array, ! shape either (:,:) or (:), size(B,1) or size(B) == size(A,2), ! On entry, the right hand side vector(s) of matrix B for the ! system of equations AX = B. ! On exit, if there is no error, the matrix of solution ! vector(s) X. ! ! UPLO Optional, (input) CHARACTER*1 ! If UPLO is present then: ! = 'U': Upper triangle of A is stored; ! = 'L': Lower triangle of A is stored. ! otherwise UPLO = 'U' is assumed. ! ! INFO Optional (output) INTEGER. ! If INFO is present ! = 0: successful exit ! < 0: if INFO = -k, the k-th argument had an illegal value ! > 0: if INFO = k, the leading minor of order i of A is not ! positive definite, so the factorization could not be ! completed, and the solution has not been computed. ! If INFO is not present and an error occurs, then the program is ! terminated with an error message. ! ! Further Details ! =============== ! ! The band storage scheme is illustrated by the following example, when ! N = 6, KD = 2, and UPLO = 'U': ! ! On entry: On exit: ! ! * * a13 a24 a35 a46 * * u13 u24 u35 u46 ! * a12 a23 a34 a45 a56 * u12 u23 u34 u45 u56 ! a11 a22 a33 a44 a55 a66 u11 u22 u33 u44 u55 u66 ! ! Similarly, if UPLO = 'L' the format of A is as follows: ! ! On entry: On exit: ! ! a11 a22 a33 a44 a55 a66 l11 l22 l33 l44 l55 l66 ! a21 a32 a43 a54 a65 * l21 l32 l43 l54 l65 * ! a31 a42 a53 a64 * * l31 l42 l53 l64 * * ! ! Array elements marked * are not used by the routine. !------------------------------------- .