1*> \brief \b ZPBTRS 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download ZPBTRS + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zpbtrs.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zpbtrs.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zpbtrs.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* SUBROUTINE ZPBTRS( UPLO, N, KD, NRHS, AB, LDAB, B, LDB, INFO ) 22* 23* .. Scalar Arguments .. 24* CHARACTER UPLO 25* INTEGER INFO, KD, LDAB, LDB, N, NRHS 26* .. 27* .. Array Arguments .. 28* COMPLEX*16 AB( LDAB, * ), B( LDB, * ) 29* .. 30* 31* 32*> \par Purpose: 33* ============= 34*> 35*> \verbatim 36*> 37*> ZPBTRS solves a system of linear equations A*X = B with a Hermitian 38*> positive definite band matrix A using the Cholesky factorization 39*> A = U**H *U or A = L*L**H computed by ZPBTRF. 40*> \endverbatim 41* 42* Arguments: 43* ========== 44* 45*> \param[in] UPLO 46*> \verbatim 47*> UPLO is CHARACTER*1 48*> = 'U': Upper triangular factor stored in AB; 49*> = 'L': Lower triangular factor stored in AB. 50*> \endverbatim 51*> 52*> \param[in] N 53*> \verbatim 54*> N is INTEGER 55*> The order of the matrix A. N >= 0. 56*> \endverbatim 57*> 58*> \param[in] KD 59*> \verbatim 60*> KD is INTEGER 61*> The number of superdiagonals of the matrix A if UPLO = 'U', 62*> or the number of subdiagonals if UPLO = 'L'. KD >= 0. 63*> \endverbatim 64*> 65*> \param[in] NRHS 66*> \verbatim 67*> NRHS is INTEGER 68*> The number of right hand sides, i.e., the number of columns 69*> of the matrix B. NRHS >= 0. 70*> \endverbatim 71*> 72*> \param[in] AB 73*> \verbatim 74*> AB is COMPLEX*16 array, dimension (LDAB,N) 75*> The triangular factor U or L from the Cholesky factorization 76*> A = U**H *U or A = L*L**H of the band matrix A, stored in the 77*> first KD+1 rows of the array. The j-th column of U or L is 78*> stored in the j-th column of the array AB as follows: 79*> if UPLO ='U', AB(kd+1+i-j,j) = U(i,j) for max(1,j-kd)<=i<=j; 80*> if UPLO ='L', AB(1+i-j,j) = L(i,j) for j<=i<=min(n,j+kd). 81*> \endverbatim 82*> 83*> \param[in] LDAB 84*> \verbatim 85*> LDAB is INTEGER 86*> The leading dimension of the array AB. LDAB >= KD+1. 87*> \endverbatim 88*> 89*> \param[in,out] B 90*> \verbatim 91*> B is COMPLEX*16 array, dimension (LDB,NRHS) 92*> On entry, the right hand side matrix B. 93*> On exit, the solution matrix X. 94*> \endverbatim 95*> 96*> \param[in] LDB 97*> \verbatim 98*> LDB is INTEGER 99*> The leading dimension of the array B. LDB >= max(1,N). 100*> \endverbatim 101*> 102*> \param[out] INFO 103*> \verbatim 104*> INFO is INTEGER 105*> = 0: successful exit 106*> < 0: if INFO = -i, the i-th argument had an illegal value 107*> \endverbatim 108* 109* Authors: 110* ======== 111* 112*> \author Univ. of Tennessee 113*> \author Univ. of California Berkeley 114*> \author Univ. of Colorado Denver 115*> \author NAG Ltd. 116* 117*> \date November 2011 118* 119*> \ingroup complex16OTHERcomputational 120* 121* ===================================================================== 122 SUBROUTINE ZPBTRS( UPLO, N, KD, NRHS, AB, LDAB, B, LDB, INFO ) 123* 124* -- LAPACK computational routine (version 3.4.0) -- 125* -- LAPACK is a software package provided by Univ. of Tennessee, -- 126* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 127* November 2011 128* 129* .. Scalar Arguments .. 130 CHARACTER UPLO 131 INTEGER INFO, KD, LDAB, LDB, N, NRHS 132* .. 133* .. Array Arguments .. 134 COMPLEX*16 AB( LDAB, * ), B( LDB, * ) 135* .. 136* 137* ===================================================================== 138* 139* .. Local Scalars .. 140 LOGICAL UPPER 141 INTEGER J 142* .. 143* .. External Functions .. 144 LOGICAL LSAME 145 EXTERNAL LSAME 146* .. 147* .. External Subroutines .. 148 EXTERNAL XERBLA, ZTBSV 149* .. 150* .. Intrinsic Functions .. 151 INTRINSIC MAX 152* .. 153* .. Executable Statements .. 154* 155* Test the input parameters. 156* 157 INFO = 0 158 UPPER = LSAME( UPLO, 'U' ) 159 IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN 160 INFO = -1 161 ELSE IF( N.LT.0 ) THEN 162 INFO = -2 163 ELSE IF( KD.LT.0 ) THEN 164 INFO = -3 165 ELSE IF( NRHS.LT.0 ) THEN 166 INFO = -4 167 ELSE IF( LDAB.LT.KD+1 ) THEN 168 INFO = -6 169 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN 170 INFO = -8 171 END IF 172 IF( INFO.NE.0 ) THEN 173 CALL XERBLA( 'ZPBTRS', -INFO ) 174 RETURN 175 END IF 176* 177* Quick return if possible 178* 179 IF( N.EQ.0 .OR. NRHS.EQ.0 ) 180 $ RETURN 181* 182 IF( UPPER ) THEN 183* 184* Solve A*X = B where A = U**H *U. 185* 186 DO 10 J = 1, NRHS 187* 188* Solve U**H *X = B, overwriting B with X. 189* 190 CALL ZTBSV( 'Upper', 'Conjugate transpose', 'Non-unit', N, 191 $ KD, AB, LDAB, B( 1, J ), 1 ) 192* 193* Solve U*X = B, overwriting B with X. 194* 195 CALL ZTBSV( 'Upper', 'No transpose', 'Non-unit', N, KD, AB, 196 $ LDAB, B( 1, J ), 1 ) 197 10 CONTINUE 198 ELSE 199* 200* Solve A*X = B where A = L*L**H. 201* 202 DO 20 J = 1, NRHS 203* 204* Solve L*X = B, overwriting B with X. 205* 206 CALL ZTBSV( 'Lower', 'No transpose', 'Non-unit', N, KD, AB, 207 $ LDAB, B( 1, J ), 1 ) 208* 209* Solve L**H *X = B, overwriting B with X. 210* 211 CALL ZTBSV( 'Lower', 'Conjugate transpose', 'Non-unit', N, 212 $ KD, AB, LDAB, B( 1, J ), 1 ) 213 20 CONTINUE 214 END IF 215* 216 RETURN 217* 218* End of ZPBTRS 219* 220 END 221