1*> \brief \b ZPTTS2 solves a tridiagonal system of the form AX=B using the L D LH factorization computed by spttrf. 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download ZPTTS2 + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zptts2.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zptts2.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zptts2.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* SUBROUTINE ZPTTS2( IUPLO, N, NRHS, D, E, B, LDB ) 22* 23* .. Scalar Arguments .. 24* INTEGER IUPLO, LDB, N, NRHS 25* .. 26* .. Array Arguments .. 27* DOUBLE PRECISION D( * ) 28* COMPLEX*16 B( LDB, * ), E( * ) 29* .. 30* 31* 32*> \par Purpose: 33* ============= 34*> 35*> \verbatim 36*> 37*> ZPTTS2 solves a tridiagonal system of the form 38*> A * X = B 39*> using the factorization A = U**H *D*U or A = L*D*L**H computed by ZPTTRF. 40*> D is a diagonal matrix specified in the vector D, U (or L) is a unit 41*> bidiagonal matrix whose superdiagonal (subdiagonal) is specified in 42*> the vector E, and X and B are N by NRHS matrices. 43*> \endverbatim 44* 45* Arguments: 46* ========== 47* 48*> \param[in] IUPLO 49*> \verbatim 50*> IUPLO is INTEGER 51*> Specifies the form of the factorization and whether the 52*> vector E is the superdiagonal of the upper bidiagonal factor 53*> U or the subdiagonal of the lower bidiagonal factor L. 54*> = 1: A = U**H *D*U, E is the superdiagonal of U 55*> = 0: A = L*D*L**H, E is the subdiagonal of L 56*> \endverbatim 57*> 58*> \param[in] N 59*> \verbatim 60*> N is INTEGER 61*> The order of the tridiagonal matrix A. N >= 0. 62*> \endverbatim 63*> 64*> \param[in] NRHS 65*> \verbatim 66*> NRHS is INTEGER 67*> The number of right hand sides, i.e., the number of columns 68*> of the matrix B. NRHS >= 0. 69*> \endverbatim 70*> 71*> \param[in] D 72*> \verbatim 73*> D is DOUBLE PRECISION array, dimension (N) 74*> The n diagonal elements of the diagonal matrix D from the 75*> factorization A = U**H *D*U or A = L*D*L**H. 76*> \endverbatim 77*> 78*> \param[in] E 79*> \verbatim 80*> E is COMPLEX*16 array, dimension (N-1) 81*> If IUPLO = 1, the (n-1) superdiagonal elements of the unit 82*> bidiagonal factor U from the factorization A = U**H*D*U. 83*> If IUPLO = 0, the (n-1) subdiagonal elements of the unit 84*> bidiagonal factor L from the factorization A = L*D*L**H. 85*> \endverbatim 86*> 87*> \param[in,out] B 88*> \verbatim 89*> B is COMPLEX*16 array, dimension (LDB,NRHS) 90*> On entry, the right hand side vectors B for the system of 91*> linear equations. 92*> On exit, the solution vectors, X. 93*> \endverbatim 94*> 95*> \param[in] LDB 96*> \verbatim 97*> LDB is INTEGER 98*> The leading dimension of the array B. LDB >= max(1,N). 99*> \endverbatim 100* 101* Authors: 102* ======== 103* 104*> \author Univ. of Tennessee 105*> \author Univ. of California Berkeley 106*> \author Univ. of Colorado Denver 107*> \author NAG Ltd. 108* 109*> \ingroup complex16PTcomputational 110* 111* ===================================================================== 112 SUBROUTINE ZPTTS2( IUPLO, N, NRHS, D, E, B, LDB ) 113* 114* -- LAPACK computational routine -- 115* -- LAPACK is a software package provided by Univ. of Tennessee, -- 116* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 117* 118* .. Scalar Arguments .. 119 INTEGER IUPLO, LDB, N, NRHS 120* .. 121* .. Array Arguments .. 122 DOUBLE PRECISION D( * ) 123 COMPLEX*16 B( LDB, * ), E( * ) 124* .. 125* 126* ===================================================================== 127* 128* .. Local Scalars .. 129 INTEGER I, J 130* .. 131* .. External Subroutines .. 132 EXTERNAL ZDSCAL 133* .. 134* .. Intrinsic Functions .. 135 INTRINSIC DCONJG 136* .. 137* .. Executable Statements .. 138* 139* Quick return if possible 140* 141 IF( N.LE.1 ) THEN 142 IF( N.EQ.1 ) 143 $ CALL ZDSCAL( NRHS, 1.D0 / D( 1 ), B, LDB ) 144 RETURN 145 END IF 146* 147 IF( IUPLO.EQ.1 ) THEN 148* 149* Solve A * X = B using the factorization A = U**H *D*U, 150* overwriting each right hand side vector with its solution. 151* 152 IF( NRHS.LE.2 ) THEN 153 J = 1 154 10 CONTINUE 155* 156* Solve U**H * x = b. 157* 158 DO 20 I = 2, N 159 B( I, J ) = B( I, J ) - B( I-1, J )*DCONJG( E( I-1 ) ) 160 20 CONTINUE 161* 162* Solve D * U * x = b. 163* 164 DO 30 I = 1, N 165 B( I, J ) = B( I, J ) / D( I ) 166 30 CONTINUE 167 DO 40 I = N - 1, 1, -1 168 B( I, J ) = B( I, J ) - B( I+1, J )*E( I ) 169 40 CONTINUE 170 IF( J.LT.NRHS ) THEN 171 J = J + 1 172 GO TO 10 173 END IF 174 ELSE 175 DO 70 J = 1, NRHS 176* 177* Solve U**H * x = b. 178* 179 DO 50 I = 2, N 180 B( I, J ) = B( I, J ) - B( I-1, J )*DCONJG( E( I-1 ) ) 181 50 CONTINUE 182* 183* Solve D * U * x = b. 184* 185 B( N, J ) = B( N, J ) / D( N ) 186 DO 60 I = N - 1, 1, -1 187 B( I, J ) = B( I, J ) / D( I ) - B( I+1, J )*E( I ) 188 60 CONTINUE 189 70 CONTINUE 190 END IF 191 ELSE 192* 193* Solve A * X = B using the factorization A = L*D*L**H, 194* overwriting each right hand side vector with its solution. 195* 196 IF( NRHS.LE.2 ) THEN 197 J = 1 198 80 CONTINUE 199* 200* Solve L * x = b. 201* 202 DO 90 I = 2, N 203 B( I, J ) = B( I, J ) - B( I-1, J )*E( I-1 ) 204 90 CONTINUE 205* 206* Solve D * L**H * x = b. 207* 208 DO 100 I = 1, N 209 B( I, J ) = B( I, J ) / D( I ) 210 100 CONTINUE 211 DO 110 I = N - 1, 1, -1 212 B( I, J ) = B( I, J ) - B( I+1, J )*DCONJG( E( I ) ) 213 110 CONTINUE 214 IF( J.LT.NRHS ) THEN 215 J = J + 1 216 GO TO 80 217 END IF 218 ELSE 219 DO 140 J = 1, NRHS 220* 221* Solve L * x = b. 222* 223 DO 120 I = 2, N 224 B( I, J ) = B( I, J ) - B( I-1, J )*E( I-1 ) 225 120 CONTINUE 226* 227* Solve D * L**H * x = b. 228* 229 B( N, J ) = B( N, J ) / D( N ) 230 DO 130 I = N - 1, 1, -1 231 B( I, J ) = B( I, J ) / D( I ) - 232 $ B( I+1, J )*DCONJG( E( I ) ) 233 130 CONTINUE 234 140 CONTINUE 235 END IF 236 END IF 237* 238 RETURN 239* 240* End of ZPTTS2 241* 242 END 243