![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b ZGTTRS 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 *> \htmlonly 00009 *> Download ZGTTRS + dependencies 00010 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zgttrs.f"> 00011 *> [TGZ]</a> 00012 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zgttrs.f"> 00013 *> [ZIP]</a> 00014 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zgttrs.f"> 00015 *> [TXT]</a> 00016 *> \endhtmlonly 00017 * 00018 * Definition: 00019 * =========== 00020 * 00021 * SUBROUTINE ZGTTRS( TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, 00022 * INFO ) 00023 * 00024 * .. Scalar Arguments .. 00025 * CHARACTER TRANS 00026 * INTEGER INFO, LDB, N, NRHS 00027 * .. 00028 * .. Array Arguments .. 00029 * INTEGER IPIV( * ) 00030 * COMPLEX*16 B( LDB, * ), D( * ), DL( * ), DU( * ), DU2( * ) 00031 * .. 00032 * 00033 * 00034 *> \par Purpose: 00035 * ============= 00036 *> 00037 *> \verbatim 00038 *> 00039 *> ZGTTRS solves one of the systems of equations 00040 *> A * X = B, A**T * X = B, or A**H * X = B, 00041 *> with a tridiagonal matrix A using the LU factorization computed 00042 *> by ZGTTRF. 00043 *> \endverbatim 00044 * 00045 * Arguments: 00046 * ========== 00047 * 00048 *> \param[in] TRANS 00049 *> \verbatim 00050 *> TRANS is CHARACTER*1 00051 *> Specifies the form of the system of equations. 00052 *> = 'N': A * X = B (No transpose) 00053 *> = 'T': A**T * X = B (Transpose) 00054 *> = 'C': A**H * X = B (Conjugate transpose) 00055 *> \endverbatim 00056 *> 00057 *> \param[in] N 00058 *> \verbatim 00059 *> N is INTEGER 00060 *> The order of the matrix A. 00061 *> \endverbatim 00062 *> 00063 *> \param[in] NRHS 00064 *> \verbatim 00065 *> NRHS is INTEGER 00066 *> The number of right hand sides, i.e., the number of columns 00067 *> of the matrix B. NRHS >= 0. 00068 *> \endverbatim 00069 *> 00070 *> \param[in] DL 00071 *> \verbatim 00072 *> DL is COMPLEX*16 array, dimension (N-1) 00073 *> The (n-1) multipliers that define the matrix L from the 00074 *> LU factorization of A. 00075 *> \endverbatim 00076 *> 00077 *> \param[in] D 00078 *> \verbatim 00079 *> D is COMPLEX*16 array, dimension (N) 00080 *> The n diagonal elements of the upper triangular matrix U from 00081 *> the LU factorization of A. 00082 *> \endverbatim 00083 *> 00084 *> \param[in] DU 00085 *> \verbatim 00086 *> DU is COMPLEX*16 array, dimension (N-1) 00087 *> The (n-1) elements of the first super-diagonal of U. 00088 *> \endverbatim 00089 *> 00090 *> \param[in] DU2 00091 *> \verbatim 00092 *> DU2 is COMPLEX*16 array, dimension (N-2) 00093 *> The (n-2) elements of the second super-diagonal of U. 00094 *> \endverbatim 00095 *> 00096 *> \param[in] IPIV 00097 *> \verbatim 00098 *> IPIV is INTEGER array, dimension (N) 00099 *> The pivot indices; for 1 <= i <= n, row i of the matrix was 00100 *> interchanged with row IPIV(i). IPIV(i) will always be either 00101 *> i or i+1; IPIV(i) = i indicates a row interchange was not 00102 *> required. 00103 *> \endverbatim 00104 *> 00105 *> \param[in,out] B 00106 *> \verbatim 00107 *> B is COMPLEX*16 array, dimension (LDB,NRHS) 00108 *> On entry, the matrix of right hand side vectors B. 00109 *> On exit, B is overwritten by the solution vectors X. 00110 *> \endverbatim 00111 *> 00112 *> \param[in] LDB 00113 *> \verbatim 00114 *> LDB is INTEGER 00115 *> The leading dimension of the array B. LDB >= max(1,N). 00116 *> \endverbatim 00117 *> 00118 *> \param[out] INFO 00119 *> \verbatim 00120 *> INFO is INTEGER 00121 *> = 0: successful exit 00122 *> < 0: if INFO = -k, the k-th argument had an illegal value 00123 *> \endverbatim 00124 * 00125 * Authors: 00126 * ======== 00127 * 00128 *> \author Univ. of Tennessee 00129 *> \author Univ. of California Berkeley 00130 *> \author Univ. of Colorado Denver 00131 *> \author NAG Ltd. 00132 * 00133 *> \date November 2011 00134 * 00135 *> \ingroup complex16OTHERcomputational 00136 * 00137 * ===================================================================== 00138 SUBROUTINE ZGTTRS( TRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB, 00139 $ INFO ) 00140 * 00141 * -- LAPACK computational routine (version 3.4.0) -- 00142 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00143 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00144 * November 2011 00145 * 00146 * .. Scalar Arguments .. 00147 CHARACTER TRANS 00148 INTEGER INFO, LDB, N, NRHS 00149 * .. 00150 * .. Array Arguments .. 00151 INTEGER IPIV( * ) 00152 COMPLEX*16 B( LDB, * ), D( * ), DL( * ), DU( * ), DU2( * ) 00153 * .. 00154 * 00155 * ===================================================================== 00156 * 00157 * .. Local Scalars .. 00158 LOGICAL NOTRAN 00159 INTEGER ITRANS, J, JB, NB 00160 * .. 00161 * .. External Functions .. 00162 INTEGER ILAENV 00163 EXTERNAL ILAENV 00164 * .. 00165 * .. External Subroutines .. 00166 EXTERNAL XERBLA, ZGTTS2 00167 * .. 00168 * .. Intrinsic Functions .. 00169 INTRINSIC MAX, MIN 00170 * .. 00171 * .. Executable Statements .. 00172 * 00173 INFO = 0 00174 NOTRAN = ( TRANS.EQ.'N' .OR. TRANS.EQ.'n' ) 00175 IF( .NOT.NOTRAN .AND. .NOT.( TRANS.EQ.'T' .OR. TRANS.EQ. 00176 $ 't' ) .AND. .NOT.( TRANS.EQ.'C' .OR. TRANS.EQ.'c' ) ) THEN 00177 INFO = -1 00178 ELSE IF( N.LT.0 ) THEN 00179 INFO = -2 00180 ELSE IF( NRHS.LT.0 ) THEN 00181 INFO = -3 00182 ELSE IF( LDB.LT.MAX( N, 1 ) ) THEN 00183 INFO = -10 00184 END IF 00185 IF( INFO.NE.0 ) THEN 00186 CALL XERBLA( 'ZGTTRS', -INFO ) 00187 RETURN 00188 END IF 00189 * 00190 * Quick return if possible 00191 * 00192 IF( N.EQ.0 .OR. NRHS.EQ.0 ) 00193 $ RETURN 00194 * 00195 * Decode TRANS 00196 * 00197 IF( NOTRAN ) THEN 00198 ITRANS = 0 00199 ELSE IF( TRANS.EQ.'T' .OR. TRANS.EQ.'t' ) THEN 00200 ITRANS = 1 00201 ELSE 00202 ITRANS = 2 00203 END IF 00204 * 00205 * Determine the number of right-hand sides to solve at a time. 00206 * 00207 IF( NRHS.EQ.1 ) THEN 00208 NB = 1 00209 ELSE 00210 NB = MAX( 1, ILAENV( 1, 'ZGTTRS', TRANS, N, NRHS, -1, -1 ) ) 00211 END IF 00212 * 00213 IF( NB.GE.NRHS ) THEN 00214 CALL ZGTTS2( ITRANS, N, NRHS, DL, D, DU, DU2, IPIV, B, LDB ) 00215 ELSE 00216 DO 10 J = 1, NRHS, NB 00217 JB = MIN( NRHS-J+1, NB ) 00218 CALL ZGTTS2( ITRANS, N, JB, DL, D, DU, DU2, IPIV, B( 1, J ), 00219 $ LDB ) 00220 10 CONTINUE 00221 END IF 00222 * 00223 * End of ZGTTRS 00224 * 00225 END